IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Двумерные массивы, Вывод, поиск, операции с двумерными массивами
DaryllDixonn
сообщение 21.12.2014 19:37
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: 19:38

Репутация: -  0  +


Дана матрица A[5,4] масс грузов P-отправителей, Q-получателя; P=5;Q=4 при распечатке:
1) Ввести матрицу по строкам и получить распечатку матрицы.
2) Определить сумму элементов каждой строки.
3) Определить строку с максимальной суммой и разместить её первой (поменяв при необходимости местами).
4) Реализовать выбор всех элементов матрицы > больше 10 т. и вывод их значений и индексов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 21.12.2014 19:44
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Покажи, что ты уже успел реализовать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DaryllDixonn
сообщение 21.12.2014 19:56
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: 19:38

Репутация: -  0  +


Цитата(Федосеев Павел @ 21.12.2014 20:44) *

Покажи, что ты уже успел реализовать.

К сожаление нечего, ибо я в этом вообще не разбираюсь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 21.12.2014 20:04
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Попробуй научиться читать.

Кроме методичек и учебников, подобные темы "пережёвывались" поколениями учащихся.
Здесь есть FAQ - ссылка выделенная красным цветом в верху этой страницы. В FAQ должна быть статья с примерами и пояснениями.

Начни с чего-нибудь.

Лично мне не интересно делать целиком задачку за тебя. Помочь - да, помогу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DaryllDixonn
сообщение 23.12.2014 1:04
Сообщение #5





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: 19:38

Репутация: -  0  +


Цитата(Федосеев Павел @ 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.


Сообщение отредактировано: DaryllDixonn - 23.12.2014 1:05
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 23.12.2014 3:24
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Круто!

Возможно, ты был невнимателен, но в условии говорится о матрице А[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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 23.12.2014 17:55
Сообщение #7


Гость






Цитата(Федосеев Павел @ 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 18:01
Сообщение #8


Гость






Цитата(Гость @ 23.12.2014 17:55) *

Program1.pas(18) : Переменная цикла for должна описываться в том же блоке, что и цикл for

А почему не выводится сумма строк ? В коде же есть...
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 23.12.2014 21:52
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Цитата
Переменная цикла for должна описываться в том же блоке, что и цикл for


Да, согласен. Нужно описать локальные переменные i и j в процедуре, а не пользоваться глобальными. Ошибся при копировании. wub.gif

Цитата
А почему не выводится сумма строк ? В коде же есть...


Сумма элементов строки выводится, просто не в том же блоке где и сама матрица.

Этого нет в условии задания. вот я и не стал выполнять, вернее - даже удалил. Основная причина - автор неправильно вычислял сумму. Сначала должно прийти понимание, а потом можно усложнять.

Поэтому не понятен вопрос - в каком коде есть? В моём - нет, в коде топикстартера - есть, но что там вычисляется?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.04.2024 17:52
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"