Дана матрица A[5,4] масс грузов P-отправителей, Q-получателя; P=5;Q=4 при распечатке: 1) Ввести матрицу по строкам и получить распечатку матрицы. 2) Определить сумму элементов каждой строки. 3) Определить строку с максимальной суммой и разместить её первой (поменяв при необходимости местами). 4) Реализовать выбор всех элементов матрицы > больше 10 т. и вывод их значений и индексов.
Федосеев Павел
21.12.2014 23:44
Покажи, что ты уже успел реализовать.
DaryllDixonn
21.12.2014 23:56
Цитата(Федосеев Павел @ 21.12.2014 20:44)
Покажи, что ты уже успел реализовать.
К сожаление нечего, ибо я в этом вообще не разбираюсь.
Федосеев Павел
22.12.2014 0:04
Попробуй научиться читать.
Кроме методичек и учебников, подобные темы "пережёвывались" поколениями учащихся. Здесь есть FAQ - ссылка выделенная красным цветом в верху этой страницы. В FAQ должна быть статья с примерами и пояснениями.
Начни с чего-нибудь.
Лично мне не интересно делать целиком задачку за тебя. Помочь - да, помогу.
DaryllDixonn
23.12.2014 5:04
Цитата(Федосеев Павел @ 21.12.2014 21:04)
Попробуй научиться читать.
Кроме методичек и учебников, подобные темы "пережёвывались" поколениями учащихся. Здесь есть FAQ - ссылка выделенная красным цветом в верху этой страницы. В FAQ должна быть статья с примерами и пояснениями.
Начни с чего-нибудь.
Лично мне не интересно делать целиком задачку за тебя. Помочь - да, помогу.
Код
uses crt;
const P = 5; Q = 4;
var i,j, IndexMaxSum:Integer; PQ:array[1..Q,1..P] of real; Sum, MaxSum, Mem:real; QSummes:array[1..Q] of real;
procedure ShowTablePQ; begin clrscr;
for i := 1 to P do write(' P',i); writeln; writeln('---------------------------------------');
for i := 1 to Q do BEGIN writeln('Q',i); for j := 1 to P do begin write('':6,PQ[i,j]); Sum:=Sum + PQ[i,j]; end;
if Sum > 0 then begin writeln(' ':5,'Sum=',Sum); if Sum > MaxSum then begin MaxSum:=Sum; IndexMaxSum:=i; end; end;
Sum:=0; END;
end;
begin for i := 1 to P do for j := 1 to Q do begin write(' P',i,' --> Q',j,' ='); read(PQ[j,i]); end;
ShowTablePQ; writeln(''); writeln('Выносим строку с максимальной суммой на первую позицию'); readln; for i:=1 to P do begin Mem:=PQ[1,i]; PQ[1,i]:=PQ[IndexMaxSum,i]; PQ[IndexMaxSum,i]:=Mem; end;
ShowTablePQ; writeln(''); writeln('Выводим все элементы c грузом > 10'); readln; writeln('-START-------------------'); for i := 1 to P do for j := 1 to Q do if PQ[j,i] > 10 then writeln(' P',i,' --> Q',j,' =',PQ[j,i]); writeln('---------------------END-'); end.
Федосеев Павел
23.12.2014 7:24
Круто!
Возможно, ты был невнимателен, но в условии говорится о матрице А[5,4], а ты определяешь A[4,5]. И в дальнейшем используешь обращения PQ[j, i] вместо привычных глазу PQ[i, j].
В процедуре вывода матрицы я бы ограничился только выводом, без подсчёта суммы. А сам подсчёт выполнял бы в другом месте.
При вычислении суммы, ты обнуляешь переменную где-то в конце, а не перед вычислением суммы строки.
В итоге, сделал бы так:
uses
crt;
const
P = 5;
Q = 4;
var
i, j, IndexMaxSum: integer;
PQ: array[1..P, 1..Q] of real;
Sum, MaxSum, Mem: real;
QSummes: array[1..Q] of real;
procedure ShowTablePQ;
begin
clrscr;
for j := 1to Q do
Write(' Q', j);
writeln;
writeln('---------------------------------------');
for i := 1to P dobegin
Write('P', i);
for j := 1to Q dobegin
Write(PQ[i, j]: 7: 2);
end;
writeln;
end;
end;
beginfor i := 1to P dofor j := 1to Q dobegin
Write(' P', i, ' --> Q', j, ' =');
Read(PQ[i, j]);
end;
ShowTablePQ;
Writeln('Суммы строк матрицы:');
for i := 1to P dobegin
Sum := 0;
for j := 1to Q do
Sum := Sum + PQ[i, j];
if (i = 1) or (Sum > MaxSum) thenbegin
MaxSum := Sum;
IndexMaxSum := i;
end;
writeln(' Строка ', i, ' Sum=', Sum: 0: 2);
end;
writeln('Максимальная сумма (', MaxSum: 0: 2, ') в строке ', IndexMaxSum, '.');
writeln;
writeln('Выносим строку с максимальной суммой на первую позицию');
readln;
for j := 1to Q dobegin
Mem := PQ[1, j];
PQ[1, j] := PQ[IndexMaxSum, j];
PQ[IndexMaxSum, j] := Mem;
end;
ShowTablePQ;
writeln;
writeln('Выводим все элементы c грузом > 10');
readln;
writeln('-START-------------------');
for i := 1to P dofor j := 1to Q doif PQ[i, j] > 10then
writeln(' P', i, ' --> Q', j, ' =', PQ[i, j]);
writeln('---------------------END-');
end.
Гость
23.12.2014 21:55
Цитата(Федосеев Павел @ 23.12.2014 3:24)
Круто!
Возможно, ты был невнимателен, но в условии говорится о матрице А[5,4], а ты определяешь A[4,5]. И в дальнейшем используешь обращения PQ[j, i] вместо привычных глазу PQ[i, j].
В процедуре вывода матрицы я бы ограничился только выводом, без подсчёта суммы. А сам подсчёт выполнял бы в другом месте.
При вычислении суммы, ты обнуляешь переменную где-то в конце, а не перед вычислением суммы строки. В итоге, сделал бы так:
uses
crt;
const
P = 5;
Q = 4;
var
i, j, IndexMaxSum: integer;
PQ: array[1..P, 1..Q] of real;
Sum, MaxSum, Mem: real;
QSummes: array[1..Q] of real;
procedure ShowTablePQ;
begin
clrscr;
for j := 1to Q do
Write(' Q', j);
writeln;
writeln('---------------------------------------');
for i := 1to P dobegin
Write('P', i);
for j := 1to Q dobegin
Write(PQ[i, j]: 7: 2);
end;
writeln;
end;
end;
beginfor i := 1to P dofor j := 1to Q dobegin
Write(' P', i, ' --> Q', j, ' =');
Read(PQ[i, j]);
end;
ShowTablePQ;
Writeln('Суммы строк матрицы:');
for i := 1to P dobegin
Sum := 0;
for j := 1to Q do
Sum := Sum + PQ[i, j];
if (i = 1) or (Sum > MaxSum) thenbegin
MaxSum := Sum;
IndexMaxSum := i;
end;
writeln(' Строка ', i, ' Sum=', Sum: 0: 2);
end;
writeln('Максимальная сумма (', MaxSum: 0: 2, ') в строке ', IndexMaxSum, '.');
writeln;
writeln('Выносим строку с максимальной суммой на первую позицию');
readln;
for j := 1to Q dobegin
Mem := PQ[1, j];
PQ[1, j] := PQ[IndexMaxSum, j];
PQ[IndexMaxSum, j] := Mem;
end;
ShowTablePQ;
writeln;
writeln('Выводим все элементы c грузом > 10');
readln;
writeln('-START-------------------');
for i := 1to P dofor j := 1to Q doif PQ[i, j] > 10then
writeln(' P', i, ' --> Q', j, ' =', PQ[i, j]);
writeln('---------------------END-');
end.
Program1.pas(18) : Переменная цикла for должна описываться в том же блоке, что и цикл for
Гость
23.12.2014 22:01
Цитата(Гость @ 23.12.2014 17:55)
Program1.pas(18) : Переменная цикла for должна описываться в том же блоке, что и цикл for
А почему не выводится сумма строк ? В коде же есть...
Федосеев Павел
24.12.2014 1:52
Цитата
Переменная цикла for должна описываться в том же блоке, что и цикл for
Да, согласен. Нужно описать локальные переменные i и j в процедуре, а не пользоваться глобальными. Ошибся при копировании.
Цитата
А почему не выводится сумма строк ? В коде же есть...
Сумма элементов строки выводится, просто не в том же блоке где и сама матрица.
Этого нет в условии задания. вот я и не стал выполнять, вернее - даже удалил. Основная причина - автор неправильно вычислял сумму. Сначала должно прийти понимание, а потом можно усложнять.
Поэтому не понятен вопрос - в каком коде есть? В моём - нет, в коде топикстартера - есть, но что там вычисляется?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.