Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с матрицей на Pascal

75K
06 октября 2011 года
Lola1990
2 / / 06.10.2011
Используя процедуры и функции из целочисленной матрицы А (n x m) получить вектор, элементами которого будут номера первых отрицательных элементов строк матрицы.:confused:
все попытки написать самой приводили к полному провалу..
416
06 октября 2011 года
MaitreDesir
380 / / 02.01.2008
Все не так сложно, алгоритм такой:
0. Объявляешь массив размером = количество строк.
1. Проходишь по всем строкам матрицы.
2. Проходишь по столбцам с помощью, например переменной j, пока не встретишь отрицательный элемент, или пока не кончится строка.
3. Записываешь в соответсвующую строке ячейку массива значение j если отрицательный есть, или -1 если его нет.
4. Профит.
Тут конечно еще может быть куча условий/ограничений, которые не уточняются в твоих условиях, например что делать, если отрицательного элемента нет? Я предложил записывать -1, но может быть надо просто ничего не записывать? Тогда надо после окончания предложенного алгоритма пройтись по массиву, посчитать количество неотрицательных элементов (C), удаляя их и сдвигая все следующие на одну точку назад. После этого собственно в твоем массиве и будет вектор, но если размер массива будет N, то размер конечного вектора-результата - N-C.
75K
06 октября 2011 года
Lola1990
2 / / 06.10.2011
Цитата:
type matr=array [1..10,1..10] of integer;
type mas=array [1..10] of integer;
var a:matr;
min,i,j,n,m:integer;
b:mas;
procedure input (var a:matr; i,j,n,m:integer);
begin
for i:=1 to n do
begin
for j:=1 to m do
readln(a[i,j]);
end;
end;
procedure output (var a:matr; var b:mas; min,i,j,n,m:integer);
begin
for i:=1 to n do
begin
writeln;
for j:=1 to m do
write (a[i,j]:5);
writeln (b:10);
end;
end;
procedure resh (var a:matr; i,j,n:integer;var b:mas);
begin
for i:=1 to n do
begin
if a[i,j]<0 then
b[j]:=a[i,j];
j:=j+1;
end;
end;
begin
Write('Ââåäèòå êîë-âî ñòðîê ìàòðèöû: ');
read (n);
Write('Ââåäèòå êîë-âî ñòîëáöîâ ìàòðèöû: ');
read (m);
Write('Ââåäèòå ýë-òû ìàòðèöû: ');
writeln;
input(a,i,j,n,m);
resh(a,i,j,n,b);
output (a,b,min,i,j,n,m);
readln;
end.


ошибку выдает: "выход за границы диапазона изменения индекса" =(
может проверите что тут не так?

416
06 октября 2011 года
MaitreDesir
380 / / 02.01.2008
Еще раз, что должно в массив попадать? Номера элементов, или значения элементов? Ты значения записываешь.
Если присваивать номера, то вот так получается:
Код:
type
  matr = array [1..10,1..10] of integer;
  mas = array [1..10] of integer;

var
  a:matr;
  min,i,j,n,m:integer;
  b:mas;

procedure input (var a:matr; m,n:Integer);
var
  i,j:integer;
begin
  for i:=1 to n do
    begin
      for j:=1 to m do
        readln(a[i,j]);
    end;
end;

procedure output (var a:matr; var b:mas; min,n,m:integer);
var
  i,j:integer;
begin
  for i:=1 to n do
    begin
      writeln;
      for j:=1 to m do
        write (a[i,j]:5);
      writeln (b:10);
    end;
end;

procedure resh (var a:matr; n:integer;var b:mas);
var
  i,j:integer;
begin
  for i:=1 to n do
    begin
      for j:=1 to m do      {Вот тут основная ошибка - цикл был только по строкам, а надо и по столбцам}
        if a[i,j]<0 then
          begin
            b:=j;
            break;
          end;
    end;
end;

begin
  Write('Введите Н:');
  read (n);
  Write('Введите М: ');
  read (m);
  Write('Введите матрицу (построчно, слева направо): ');
  writeln;
  input(a,n,m);
  resh(a,n,b);
  output (a,b,min,n,m);
  readln;
end.


Вот экран:
Код:
Введите Н:3
Введите М: 3
Введите матрицу (построчно, слева направо):
1
-2
3
-2
3
-1
3
4
-4

    1   -2    3         2

   -2    3   -1         1

    3    4   -4         3
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог