Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Двумерные массивы, Вычислениее среднее значение 
:(
    Опции темы
Dwane
Дата 8.2.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Доброго времени суток. Помогите пожалуста с заданием.
В прямоуголной матрице вычеслить МАКСИМАЛЬНОЕ СРЕДНЕЕ среди всех вычесленных покаждой строке средних значений кроме заданной строки.

Вот.Тоесть,нужно найди среднее для каждой строки.И потом найти среднее из всех средних значений строк кроме заданной кроме заданной.
Все времмя что нибудь не работает.Помогите пожалуста.
Заранее благодарен.
PM MAIL   Вверх
ФедосеевПавел
Дата 8.2.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Ну, покажи, что не получается, где ошибка...

Хотя бы описание констант, типов, ввод данных, вывод хоть неправильных, но результатов...
PM   Вверх
Dwane
Дата 9.2.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Да,ничего не получается.Я не знаю даже как среднее арифметическое найти.Тоесть я то знаю,но паскаль упорно не дает так сделать.
Код

Uses Crt;
Const
m=3;{Допустим для теста массив 3х2}
n=2;
Var
tda: array [1..m,1..n] of integer;{Собсветнно массив}
sred: array [1..m] of integer;{А это такой массив одномерный в котором бы хранились средние арифметические каждой строки.Это обязательно нужно использовать}
i,j:sredtdainteger;
begin
for i:= 1 to m do
for j:= 1 to n do read(tda[i,j]);
readkey;

end.


Вот.Дальше нужно среднее арефметическое найти и записать их в масив одномерный {sred}.И потом найти среднее арефметическое всех элементов одномерного массива кроме указанного.
Это я думал сделать так:
1.Запрашиваем указать строчку которую не учитывать.
2.Обнулить этот элемент одномерного массива
3.И посчитать общую среднею армефметическую по форумуле scredtda:= scredtda div(m-1);
sredtda - это общая средняя всего масива.Ну как она там находиится scredtda:=scredtda+sred[i,j] так наврено.А m-1 потому что один из элементов массива раен 0 и его считать не нужно.
Но код у меня не получается никак. 

Это сообщение отредактировал(а) Dwane - 9.2.2009, 16:29
PM MAIL   Вверх
Metalex
Дата 9.2.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Уточни, тебе нужно найти среднее значение каждой строки, а дальше максимальное из средних?


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Dwane
Дата 9.2.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Нет.Мне нужно найти среднее значение каждой строки,а потом среднее знакчение средних .Кроме указанной.
Допустим 3 строки всего у первой среднее 2 у второй 4 у третей 6.Потом нужно исключить одну строку и найти среднее оставишся.Мы говорим что вторую мы исключаем и находим среднее первой и третей. 2+6\2.

Это сообщение отредактировал(а) Dwane - 9.2.2009, 16:43
PM MAIL   Вверх
ФедосеевПавел
Дата 9.2.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Dwane, я не уверен, но кажется ты чуть-чуть запутался:

Цитата(Dwane @  8.2.2009,  19:49 Найти цитируемый пост)
В прямоуголной матрице вычеслить МАКСИМАЛЬНОЕ СРЕДНЕЕ среди всех вычесленных покаждой строке средних значений кроме заданной строки.



Цитата(Dwane @  9.2.2009,  16:41 Найти цитируемый пост)
Нет.Мне нужно найти среднее значение каждой строки,а потом среднее знакчение средних .Кроме указанной.


Мне кажеться, что всё-таки нужно найти МАКСИМАЛЬНОЕ среднее.
Тогда, код будет примерно таким.
1. По каждой строке матнрицы вычисляем среднее 
Код

  for i:=1 to m do begin
    sred[i]:=0;
    for j:=1 to n do sred[i]:=sred[i]+tda[i, j];
    sred[i]:=sred[i] / n;
  end;

2. Теперь в массиве sred находим максимальный элемент, пропустив только одно значение.
Или можно обойтись без массива sred
Код

  {k   - пропускаемая строка (integer)}
  {sTek   - значение среднего арифметического текущей строки (real)}
  {sMax - максимальное значение средних арифметических строк (real)}
  {найдем среднее арифметическое первой строки и будем временно считать его максимальным}
  i:=1;
  if i=k then i:=i+1; {если первую строку нужно пропустить - тогда рассмотрим вторую}
  sMax:=0;
  for j:=1 to n do sMax:=sMax+tda[i, j];
  sMax:=sMax / n;
  {теперь просматриваем все строки кроме k-ой, вычисляем среднее и сравниваем с максимальным}
  {если текущее максимальное меньше текущего среднего, то sMax:=sTek}
  for i:=1 to m do begin
    if i=k then Continue;
    sTek:=0;
    for j:=1 to n do sTek:=sTek+tda[i, j];
    sTek:=sTek / n;
    if sMax<sTek then sMax:=sTek;
  end;
..........................
sMax - это и есть искомый результат - максимальное из средних арифметических строк матрицы tda, за исключением строки k
..........................


PM   Вверх
Dwane
Дата 9.2.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Да,вы парвы.Это я не правильнопереписал.В моем первом посте все правильно написано.Да все правильно.Спасибо большое.
Вот только я не понял.
А если нужно пропустить не 1 строчку а скажем 3 помоему тогда не подойдет 
Код
 
 i:=1;
 if i=k then i:=i+1;


Как ни странно работает,но не совсем так как нужно.
Матрица:
             2  2 (Среднее 2) 
             3  3 (Среднее 3)
             4  4 (Среднее 4)
Если пропускаю 3 строку и прошу вывести sMax он выдает средующее
sMax=2 
и если не очишая экрана начать выполнять програму заного видно что на самом деле он выдал
sMax=2 sMax=3 
Подрят...не могу понять в чем дело.

Это сообщение отредактировал(а) Dwane - 9.2.2009, 22:54
PM MAIL   Вверх
ФедосеевПавел
Дата 9.2.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Только что CopyPaste фрагменты программ и запустил с твоим примером. Результат верный (отличающийся от приведенного).
Код

{.$DEFINE Debug}
{$UNDEF Debug}
USES
  CRT;
Const
  m=3;{Допустим для теста массив 3х2}
  n=2;
TYPE
  TMassiv = array [1..m,1..n] of Real;
{$IFDEF Debug}
CONST
  tda   : TMassiv = ( (2, 2),
                      (3, 3),
                      (4, 4)
                    );
{$ENDIF}
Var
{$IFNDEF Debug}
  tda   : TMassiv; {Собственно массив}
{$ENDIF}
  i, j  : Integer; {переменные для работы с массивом}
  k     : Integer; {номер строки массива,
                    которая не рассматривается при вычислениях}
  sTek  : Real;    {значение среднего арифметического текущей строки}
  sMax  : Real;    {максимальное значение средних арифметических строк}
BEGIN
{$IFNDEF Debug}
  WriteLn('Введите массив ',m,'x',n);
  for i:= 1 to m do
    for j:= 1 to n do read(tda[i,j]);
{$ENDIF}
  WriteLn;
  WriteLn('Введён массив ',m,'x',n);
  for i:= 1 to m do begin
    for j:= 1 to n do Write(tda[i,j]:10:3);
    WriteLn;
  end;
  Write('Введите номер исключаемой строки (1..',m,') ');
  ReadLn(k);
  {найдем среднее арифметическое первой строки и будем временно считать его максимальным}
  i:=1;
  if i=k then i:=i+1; {если первую строку нужно пропустить - тогда рассмотрим вторую}
  sMax:=0;
  for j:=1 to n do sMax:=sMax+tda[i, j];
  sMax:=sMax / n;
  {теперь просматриваем все строки кроме k-ой, вычисляем среднее и сравниваем с максимальным}
  {если текущее максимальное меньше текущего среднего, то sMax:=sTek}
  for i:=1 to m do begin
    if i=k then Continue;
    sTek:=0;
    for j:=1 to n do sTek:=sTek+tda[i, j];
    sTek:=sTek / n;
    if sMax<sTek then sMax:=sTek;
  end;
  WriteLn('Max=',sMax);
END.


PM   Вверх
Dwane
Дата 11.2.2009, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 16.12.2008

Репутация: нет
Всего: нет



Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.