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.
Работа с матрицей на Pascal
все попытки написать самой приводили к полному провалу..
0. Объявляешь массив размером = количество строк.
1. Проходишь по всем строкам матрицы.
2. Проходишь по столбцам с помощью, например переменной j, пока не встретишь отрицательный элемент, или пока не кончится строка.
3. Записываешь в соответсвующую строке ячейку массива значение j если отрицательный есть, или -1 если его нет.
4. Профит.
Тут конечно еще может быть куча условий/ограничений, которые не уточняются в твоих условиях, например что делать, если отрицательного элемента нет? Я предложил записывать -1, но может быть надо просто ничего не записывать? Тогда надо после окончания предложенного алгоритма пройтись по массиву, посчитать количество неотрицательных элементов (C), удаляя их и сдвигая все следующие на одну точку назад. После этого собственно в твоем массиве и будет вектор, но если размер массива будет N, то размер конечного вектора-результата - N-C.
Цитата:
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.
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.
ошибку выдает: "выход за границы диапазона изменения индекса" =(
может проверите что тут не так?
Если присваивать номера, то вот так получается:
Код:
Вот экран:
Код:
Введите Н:3
Введите М: 3
Введите матрицу (построчно, слева направо):
1
-2
3
-2
3
-1
3
4
-4
1 -2 3 2
-2 3 -1 1
3 4 -4 3
Введите М: 3
Введите матрицу (построчно, слева направо):
1
-2
3
-2
3
-1
3
4
-4
1 -2 3 2
-2 3 -1 1
3 4 -4 3