Консультация № 185072
06.01.2012, 12:46
70.69 руб.
0 7 2
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Нужно написать программу в Turbo Pascal, желательно с комментариями.

В матрице Z(5,6) первый отрицательный элемент каждого
столбца заменить суммой следующих за ним значений. Отрицательные
элементы до замены вывести в массив.

Обсуждение

Неизвестный
06.01.2012, 12:57
общий
если еще никто не взялся то я берусь щас запрограммировать
давно
Советник
341206
1201
06.01.2012, 13:09
общий
07.01.2012, 16:03
это ответ
Здравствуйте, xDefx!
Код:
program negative;
var i,j,k,n: integer;
z: array[1..5,1..6] of integer;
m: array[1..6] of integer;
begin
for i:=1 to 5 for j:=1 to 6 do read(z[i,j]); {Вводим элементы матрицы}
k:=1; {активируем номер элемента массива для первого отрицательного числа}
for j:=1 to 6 do {цикл по столбцах}
begin
for i:=1 to 5 do {цикл по строках}
begin
if z[i,j]<0 then {в случае нахождения первого отрицательного элемента:}
begin
m[k]:=z[i,j]; {записываем его в массив}
k:=k+1;{активируем следующий номер элемента массива для следующего отрицательного числа}
z[i,j]:=0; {обнуляем текущее отрицательное число для замены его на сумму}
for n:=i+1 to 5 do z[i,j]:=z[i,j]+z[n,j]; {вычисление суммы по строках, начиная со следующей}
i:=6; {для того, чтобы выйти из цикла по строках, так как надо заменить лишь первое отрицательное число}
end;
end;
end;
end.
давно
Советник
341206
1201
06.01.2012, 13:13
общий
Я принял матрицу с целыми числами. Если могут быть действительные, то нужно заменить "integer" на "real".
Неизвестный
06.01.2012, 13:39
общий
это ответ
Здравствуйте, xDefx!
вот решение вашей задачи:
Код:
Program p1085072;
const n=5;
m=6;
var a:array [1..n,1..m] of integer;
summ,i,j,k:integer;
begin
{Сделаем ввод вручную}
for i:=1 to n do
begin
for j:=1 to m do
begin
write('a[',i,',',j,']=');
read(a[i,j]);
end;
writeln;
end;
{поиск по столбцам отрицательных элементов и замена их на сумму предыдущих}
for i:=1 to m do
begin
for j:=1 to n do
begin
if a[j,i]<0 then
begin
if j<m-1 then {проверяем чтобы отрицательный элемент столбца не был внизу столбца}
begin
k:=j+1;
summ:=0;
while (k<=n) do
begin
summ:=summ+a[k,i];
k:=k+1;
end;
a[j,i]:=summ;
break;
end;
end;
end;
end;
{вывод}
for i:=1 to n do
begin
for j:=1 to m do
begin
write('a[',i,',',j,']=',a[i,j],'; ');
end;
writeln;
end;
end.


все предельно просто и понятно....
Если будут какие вопросы дополнения, то через минифорум все обсудим и доделаем
Удачи!

Приложение:
Тестовые данные:
1)a[1,1]=1
a[1,2]=2
a[1,3]=3
a[1,4]=4
a[1,5]=5
a[1,6]=6

a[2,1]=1
a[2,2]=2
a[2,3]=3
a[2,4]=4
a[2,5]=5
a[2,6]=6

a[3,1]=1
a[3,2]=2
a[3,3]=3
a[3,4]=4
a[3,5]=5
a[3,6]=6

a[4,1]=-1
a[4,2]=-2
a[4,3]=-3
a[4,4]=-4
a[4,5]=-5
a[4,6]=-6

a[5,1]=1
a[5,2]=2
a[5,3]=3
a[5,4]=4
a[5,5]=5
a[5,6]=6

a[1,1]=1; a[1,2]=2; a[1,3]=3; a[1,4]=4; a[1,5]=5; a[1,6]=6;
a[2,1]=1; a[2,2]=2; a[2,3]=3; a[2,4]=4; a[2,5]=5; a[2,6]=6;
a[3,1]=1; a[3,2]=2; a[3,3]=3; a[3,4]=4; a[3,5]=5; a[3,6]=6;
a[4,1]=1; a[4,2]=2; a[4,3]=3; a[4,4]=4; a[4,5]=5; a[4,6]=6;
a[5,1]=1; a[5,2]=2; a[5,3]=3; a[5,4]=4; a[5,5]=5; a[5,6]=6;

2)a[1,1]=1
a[1,2]=2
a[1,3]=3
a[1,4]=4
a[1,5]=5
a[1,6]=6

a[2,1]=-1
a[2,2]=-2
a[2,3]=-3
a[2,4]=-4
a[2,5]=-5
a[2,6]=-6

a[3,1]=-1
a[3,2]=-2
a[3,3]=-3
a[3,4]=-4
a[3,5]=-5
a[3,6]=-6

a[4,1]=1
a[4,2]=2
a[4,3]=3
a[4,4]=4
a[4,5]=5
a[4,6]=6

a[5,1]=1
a[5,2]=2
a[5,3]=3
a[5,4]=4
a[5,5]=5
a[5,6]=6

a[1,1]=1; a[1,2]=2; a[1,3]=3; a[1,4]=4; a[1,5]=5; a[1,6]=6;
a[2,1]=1; a[2,2]=2; a[2,3]=3; a[2,4]=4; a[2,5]=5; a[2,6]=6;
a[3,1]=-1; a[3,2]=-2; a[3,3]=-3; a[3,4]=-4; a[3,5]=-5; a[3,6]=-6;
a[4,1]=1; a[4,2]=2; a[4,3]=3; a[4,4]=4; a[4,5]=5; a[4,6]=6;
a[5,1]=1; a[5,2]=2; a[5,3]=3; a[5,4]=4; a[5,5]=5; a[5,6]=6;
Неизвестный
06.01.2012, 13:43
общий
Адресаты:
я чуть опоздал как видимо и дал такой же как и вы ответ....
допустил неточность которую только осознал.
вот рабочий код с дополнением
Код:
Program p1085072;
const n=5;
m=6;
var a:array [1..n,1..m] of integer;
summ,i,j,k:integer;
begin
{Сделаем ввод вручную}
for i:=1 to n do
begin
for j:=1 to m do
begin
write('a[',i,',',j,']=');
read(a[i,j]);
end;
writeln;
end;
{поиск по столбцам отрицательных элементов и замена их на сумму предыдущих}
for i:=1 to m do
begin
for j:=1 to n do
begin
if a[j,i]<0 then
begin
if j<n then {проверяем чтобы отрицательный элемент столбца не был внизу столбца}
begin
k:=j+1;
summ:=0;
while (k<=n) do
begin
summ:=summ+a[k,i];
k:=k+1;
end;
a[j,i]:=summ;
break;
end;
end;
end;
end;
{вывод}
for i:=1 to n do
begin
for j:=1 to m do
begin
write('a[',i,',',j,']=',a[i,j],'; ');
end;
writeln;
end;
end.
давно
Мастер-Эксперт
425
4118
07.01.2012, 16:09
общий
А где у Вас отдельный массив с найденными отрицательными значениями в матрице? Что-то я не вижу...
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
08.01.2012, 18:58
общий
Адресаты:
вот
Код:
Program p1085072;
const n=5;
m=6;
var a:array [1..n,1..m] of integer;
summ,i,j,k:integer;
b:array[1..m] of integer;
begin {создадим массив 0 - это для вывода отрицательных}
for i:=1 to m do
b[i]:=0;
{Сделаем ввод вручную}
for i:=1 to n do
begin
for j:=1 to m do
begin
write('a[',i,',',j,']=');
read(a[i,j]);
end;
writeln;
end;
{поиск по столбцам отрицательных элементов и замена их на сумму предыдущих}
for i:=1 to m do
begin
for j:=1 to n do
begin
if a[j,i]<0 then
begin
b[i]:=a[j,i];
if j<n then {проверяем чтобы отрицательный элемент столбца не был внизу столбца}
begin
k:=j+1;
summ:=0;
while (k<=n) do
begin
summ:=summ+a[k,i];
k:=k+1;
end;
a[j,i]:=summ;
break;
end;
end;
end;
end;
{вывод}
for i:=1 to n do
begin
for j:=1 to m do
begin
write('a[',i,',',j,']=',a[i,j],'; ');
end;
writeln;
end;
{Вывод массива отрицательных}
for i:=1 to m do
begin
if b[i]<>0 then
begin
write('b[',i,']=',b[i],' ');
end
else break;
end;
end.
Форма ответа