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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2009, 23:34   #1
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию проблема со "средним арифметическим"

Задача: имеется массив А[5] с фамилиями учеников и матрица В[10,5] с их оценками от "2" до "5". Определить фамилии учеников, которые имеют наименьший средний балл по
всем предметам.
Код:
procedure Fav;
type mass=array[1..5] of string;
       matr=array[1..10,1..5] of integer;
       mass2=array[1..10] of integer;
var imin2,imin,k,i,j:integer;
min2,min,sr:real;
A:mass; B:matr; Sred:mass2;
begin
k:=0;
 for i:=1 to 10 do begin
  sr:=0;
  k:=k+1;
   for j:=1 to 5 do begin
   sr:=sr+D[i,j];
   end;
   sr:=sr/5;
   Sred[k]:=sr;   {находим ср. арифм. каждой строки и заносим в массив}
  end;
    min:=Sred[1];
    imin:=1;
  for i:=1 to 10 do begin
    if Sred[i]<min then begin
    min:=Sred[i];
    imin:=i;
   end; {находим минимальный элемент массива}
   writeln(A[imin]);
   end;
Проблема: я выполнил первое условие задачи(нашел среднее арифметическое каждой строки матрицы, но вот со вторым проблема в том, что я могу найти только одну фамилию ученика, а может быть, что несколько учеников имеет одинаковый средний балл по предметам. Помогите, пожалуйста, доделать задачу(т.е. написать, как найти все фамилии учеников с одинаковым средним баллом)
MyQwErTy вне форума Ответить с цитированием
Старый 18.02.2009, 23:57   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

MyQwErTy Пройдитесь по ученикам в цикле еще раз, сравнивая их среднее ариф. с min. Если равно - выводите этого ученика.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 19.02.2009, 00:19   #3
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

он ещё раз проходится по минимуму и выводит его, как исключить минимум?
MyQwErTy вне форума Ответить с цитированием
Старый 19.02.2009, 00:25   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
он ещё раз проходится по минимуму и выводит его, как исключить минимум?
Не совсем понял. Вам ведь нужно вывести всех учеников с наименьшим сред.ариф. Так?
Тогда вместо
Код:
writeln(A[imin]);
нужно записать
Код:
for i:=1 to 10 do
 if sred[i]=min then
  writeln(A[i]);
как-то так.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 19.02.2009 в 00:42. Причина: исправил
Sazary вне форума Ответить с цитированием
Старый 19.02.2009, 00:35   #5
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

а всё понял, тока он теперь на строчке writeln(A[imin]); выдает ошибку
Illegal type in write/writeln statement
MyQwErTy вне форума Ответить с цитированием
Старый 19.02.2009, 00:42   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

MyQwErTy Исправьте imin на i ) Не заметил.. Ведь там i меняется..
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 19.02.2009, 12:55   #7
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

все равно та же ошибка..(
MyQwErTy вне форума Ответить с цитированием
Старый 19.02.2009, 13:10   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

MyQwErTy
Хорошо бы взглянуть на полный код, а не только на процедуру.
Закину себе в паскаль.

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 19.02.2009 в 13:14.
Sazary вне форума Ответить с цитированием
Старый 19.02.2009, 13:20   #9
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Код:
unit Favourite_subject;

interface
uses crt,Global,SysUtils, massiv_matrix;
procedure Fav(var D:matr; var Sred:mas; var A:mass);
implementation

procedure Fav;
var imin,k,i,j:integer;
min,sr:real;
f:text;
begin
  assign(f,'res.txt');
  {$I-}
  rewrite(f);
  {$I+}
  if IOresult<>0 then begin
  writeln('Coudn not open file');
  exit;
  end;

k:=0;
 for i:=1 to 10 do begin
  sr:=0;
  k:=k+1;
   for j:=1 to 5 do begin
   sr:=sr+D[i,j];
   end;
   sr:=sr/5;
   Sred[k]:=sr;
  end;
    min:=Sred[1];
    imin:=1;
  for i:=1 to 10  do begin
    if Sred[i]<min then begin
    min:=Sred[i];
    imin:=i;
    end;
  end;
    for i:=1 to 10 do
 if Sred[i]=min then begin
  writeln(A[imin]:2);
  writeln(f,A[imin]:2);
 end;
 end;
end.
вот
MyQwErTy вне форума Ответить с цитированием
Старый 19.02.2009, 13:21   #10
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

пишет только одну фамилию, а одинаковых средних баллов несколько
MyQwErTy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49