Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2011, 00:19   #1
Золушка
 
Регистрация: 06.04.2011
Сообщений: 7
По умолчанию Двумерный массив. Найти среднее арифметическое каждой строки и поместить на место наибольшего (Паскаль)

Дан двумерный массив. Найти среднее арифметическое из каждой строки, и это значение поместить на место наибольшего элемента из этой строки.

По условию задачи у меня найдены среднее арифметическое и наибольший элемент в каждой строке. Куда вложить sred := max ("значение сред.арифмет. поместить на место наибольшего элемента")?

Нужна маленькая помощь.
Золушка вне форума Ответить с цитированием
Старый 13.04.2011, 00:25   #2
Золушка
 
Регистрация: 06.04.2011
Сообщений: 7
По умолчанию

Мой листинг.

Код:
begin
     clrscr;
     for i:=1 to n do
     for j:=1 to m do
     begin
           write ('a[',i,',',j,']=');
           readln (a[i,j]);
     end;
     clrscr;
     writeln ('Введённая матрица:');
     for i:=1 to n do
     begin for j:=1 to m do
           write (a[i,j]:4);
     end;
writeln;
for i := 1 to m do
begin
sred :=0;
for j:=1 to n do
sred:= sred+a[i,j];
sred := sred div m;
writeln ('Среднее арифметическое = ', sred);
end;
for i := 1 to m do
 begin
 max := a[1,1];
for j := 1 to n do
begin
if a[i, j]> max then begin
max := a[i,j];
end;
writeln ('Максимум = ',max);
end;
writeln;
 writeln ('Результат: ');
     for i:=1 to n do
     begin for j:=1 to m do
           write (a[i,j]:4);
     end;
readln;
end.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 13.04.2011 в 08:34.
Золушка вне форума Ответить с цитированием
Старый 13.04.2011, 10:12   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
uses CRT;
const
  n = 3;
  m = 5;

var
  i, j : integer;
  a : array[1..n, 1..m] of integer;
  MaxIndex : integer;
  Sred : integer;

begin
  clrscr;
  randomize;
  for i := 1 to n do
    for j := 1 to m do
    begin
      a[i,j] := Random(10);
      {write('a[', i, ',', j, ']=');
      readln(a[i, j]);}
    end;
  clrscr;
  writeln('Введённая матрица:');
  for i := 1 to n do
  begin 
    for j := 1 to m do
      write(a[i, j]: 4);
    writeln;
  end;
  WriteLn;
  for i := 1 to n do
  begin
    sred := 0;
    MaxIndex := 1;
    for j := 1 to m do begin
      sred := sred + a[i, j];
      if a[i,j] > a[i, MaxIndex] then MaxIndex := j;
    end;
    sred := sred div m;
    writeln('Среднее арифметическое по ',i:1,'-й строке = ', sred);
    writeln('Максимум в ',i:1,'-й строке = ', a[i, MaxIndex]);

    {заменим максимальный элемент (его индекс в MaxIndex)
       средним значением}
    a[i, MaxIndex] :=  Sred;

  end;
    writeln;
    writeln('Результирующая матрица: ');
    for i := 1 to n do
    begin 
       for j := 1 to m do
         write(a[i, j]: 4);
       WriteLn;
    end;
    readln;
  end.
чтобы матрица вводилась уберите
Randomize;
строчку a[i,j] := Random(10);
и расскомментируйте WriteLn.. Readln(a...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.04.2011, 10:29   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

оба цикла надо объединить :
вместо
Код:
for i := 1 to m do
begin
sred :=0;
for j:=1 to n do
sred:= sred+a[i,j];
sred := sred div m;
writeln ('Среднее арифметическое = ', sred);
end;
for i := 1 to m do
 begin
 max := a[1,1];
for j := 1 to n do
begin
if a[i, j]> max then begin
max := a[i,j];
end;
writeln ('Максимум = ',max);
end;
надо:
Код:
for i := 1 to n do
begin
sred :=0;
max := 0;
for j:=1 to m 
  do begin
  sred:= sred+a[i,j];
  if a[i, j]> max
  then begin
    max := a[i,j];
    maxid := j;
  end;
sred := sred div m;
a[i,maxid] := sred;
writeln ('Среднее арифметическое = ', sred);
writeln ('Максимум = ',max);
end;
maxid ещё объявить
и обратить внимание на индексацию двумерного массива !!!
а то у вас в одном месте циклы for i := 1 to n for j := 1 to m , а в другом наоборот, запомните лучше всегда "внешний" цикл делать по строкам(i), а "внутренний"/"вложенный" по столбцам(j) и тогда индексация массива будет a[i,j] , потому что массивы индексируются сперва по строкам а потом по столбцам
phomm вне форума Ответить с цитированием
Старый 13.04.2011, 13:33   #5
Золушка
 
Регистрация: 06.04.2011
Сообщений: 7
По умолчанию

Спасибо большое!
Золушка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти среднее арифметическое daroran Помощь студентам 0 16.02.2011 17:35
Найти среднее арифметическое элементов массива [Паскаль] ГениальныйИнФормат Помощь студентам 7 20.12.2010 08:24
Делфи.среднее геометрическое элементов массива.среднее арифметическое каждой строки матрицы Karrina Помощь студентам 0 06.12.2010 18:32
Среднее арифметическое каждой строки матрицы Executioner3 Помощь студентам 2 09.05.2010 13:33
В заданном целочисленном двумерном массиве найти среднее арифметическое в каждой строке Rise Паскаль, Turbo Pascal, PascalABC.NET 3 06.01.2009 00:55