Помощь - Поиск - Пользователи - Календарь
Полная версия: Двумерные массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анька
Здравствуйте. Помогите решить такую задачу: дана прямоугольная матрица матрица. Найти строку с найбольшей и наименьшей суммой элементов. вывести на печать найденные строки и суммы их элементов. По форуму я искала, но не нашла. Помогите уж smile.gif
мисс_граффити
по-моему, решалось много раз....
ну, основная идея такая (например. вариантов множество):
берешь первую строку, считаешь сумму элементов. присваиваешь это значение переменным minsum и maxsum, переменным maxi и mini (номера искомых строк) присваиваешь значение 1.
дальше идешь циклом начиная со второй строки вниз. если сумма больше максимальной, присваиваешь maxsum и maxi соответствующие значения. Аналогично, если меньше минимальной.
а потом печатаешь 4 найденные переменные.
Анька
Вот что получилось. Максимальную/минимальную сумму находит правильно. А вот с номером строки проблема

Код
program matr;
var
   stroka:array[1..10,1..10] of integer;
   i,j,n,m,minsum,maxsum,maxi,mini:integer;
   s:integer;

begin
   writeln(' Введите n');
   readln(n);
   writeln('введите m');
   readln(m);
   for i:=1 to n do
   for j:=1 to m do
   begin
      write ('введите d[',i,',',j,']:');
      read(stroka[i,j]);
   end;

   For i:=1 to i-(i-1) do
   begin
     minsum:=0;
     for j:=1 to m do
        minsum:=minsum+stroka[i,j];
     maxsum:=minsum;
     mini:=1;
     maxi:=1;
   end;
   for i:=2 to n do
   begin
      s:=0;
      for j:=1 to m do
         s:=s+stroka[i,j];
         if s>maxsum then
            maxsum:=s;
            maxi:=i;
         If s<minsum then
            minsum:=s;
            mini:=i;
   end;
   writeln(строка с max значением',maxi );
   writeln('max значение ',maxsum);
   writeln('строка с мин значением',mini);
   writeln('min мин значение',minsum);
end.
volvo
Добавь Begin/End там, где я показал, у тебя при каждом If выполняется только один оператор, а должны выполняться два...
      for j:=1 to m do begin { <-- }
s:=s+stroka[i,j];
if s>maxsum then begin { <-- }
maxsum:=s;
maxi:=i;
end; { <-- }
If s<minsum then begin { <-- }
minsum:=s;
mini:=i;
end; { <-- }
end; { <-- }
Анька
Да,ступила.. Большое спасибо.
мисс_граффити
вот эту строку не совсем поняла...
For i:=1 to i-(i-1) do

ты фактически получишь только один проход, так что цикл не нужен. лучше напиши
i:=1


или вообще убери эту непонятную строчку, а внутренный цикл исправь на такое:
 for j:=1 to m do
minsum:=minsum+stroka[1,j];

то есть вместо i задай в явном виде номер строки.

хотя работать будет и так....
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.