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

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

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

 
 Ответить  Открыть новую тему 
> Двумерные массивы, Поиска строки с макс суммой
сообщение
Сообщение #1





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

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


Здравствуйте. Помогите решить такую задачу: дана прямоугольная матрица матрица. Найти строку с найбольшей и наименьшей суммой элементов. вывести на печать найденные строки и суммы их элементов. По форуму я искала, но не нашла. Помогите уж smile.gif


Сообщение отредактировано: Анька -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


по-моему, решалось много раз....
ну, основная идея такая (например. вариантов множество):
берешь первую строку, считаешь сумму элементов. присваиваешь это значение переменным minsum и maxsum, переменным maxi и mini (номера искомых строк) присваиваешь значение 1.
дальше идешь циклом начиная со второй строки вниз. если сумма больше максимальной, присваиваешь maxsum и maxi соответствующие значения. Аналогично, если меньше минимальной.
а потом печатаешь 4 найденные переменные.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


Вот что получилось. Максимальную/минимальную сумму находит правильно. А вот с номером строки проблема

Код
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Добавь 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; { <-- }
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Да,ступила.. Большое спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


вот эту строку не совсем поняла...
For i:=1 to i-(i-1) do

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


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

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

хотя работать будет и так....

Сообщение отредактировано: volvo -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




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