Дана матрица 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 := 1 to Q do Write(' Q', j); writeln; writeln('---------------------------------------');
for i := 1 to P do begin Write('P', i); for j := 1 to Q do begin Write(PQ[i, j]: 7: 2); end; writeln; end;
end;
begin
for i := 1 to P do for j := 1 to Q do begin Write(' P', i, ' --> Q', j, ' ='); Read(PQ[i, j]); end;
ShowTablePQ;
Writeln('Суммы строк матрицы:'); for i := 1 to P do begin Sum := 0; for j := 1 to Q do Sum := Sum + PQ[i, j]; if (i = 1) or (Sum > MaxSum) then begin MaxSum := Sum; IndexMaxSum := i; end; writeln(' Строка ', i, ' Sum=', Sum: 0: 2); end; writeln('Максимальная сумма (', MaxSum: 0: 2, ') в строке ', IndexMaxSum, '.');
writeln; writeln('Выносим строку с максимальной суммой на первую позицию'); readln; for j := 1 to Q do begin 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 := 1 to P do for j := 1 to Q do if PQ[i, j] > 10 then 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 := 1 to Q do Write(' Q', j); writeln; writeln('---------------------------------------');
for i := 1 to P do begin Write('P', i); for j := 1 to Q do begin Write(PQ[i, j]: 7: 2); end; writeln; end;
end;
begin
for i := 1 to P do for j := 1 to Q do begin Write(' P', i, ' --> Q', j, ' ='); Read(PQ[i, j]); end;
ShowTablePQ;
Writeln('Суммы строк матрицы:'); for i := 1 to P do begin Sum := 0; for j := 1 to Q do Sum := Sum + PQ[i, j]; if (i = 1) or (Sum > MaxSum) then begin MaxSum := Sum; IndexMaxSum := i; end; writeln(' Строка ', i, ' Sum=', Sum: 0: 2); end; writeln('Максимальная сумма (', MaxSum: 0: 2, ') в строке ', IndexMaxSum, '.');
writeln; writeln('Выносим строку с максимальной суммой на первую позицию'); readln; for j := 1 to Q do begin 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 := 1 to P do for j := 1 to Q do if PQ[i, j] > 10 then 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 в процедуре, а не пользоваться глобальными. Ошибся при копировании.
Цитата
А почему не выводится сумма строк ? В коде же есть...
Сумма элементов строки выводится, просто не в том же блоке где и сама матрица.
Этого нет в условии задания. вот я и не стал выполнять, вернее - даже удалил. Основная причина - автор неправильно вычислял сумму. Сначала должно прийти понимание, а потом можно усложнять.
Поэтому не понятен вопрос - в каком коде есть? В моём - нет, в коде топикстартера - есть, но что там вычисляется?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.