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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 22:20   #1
natik3
 
Регистрация: 05.04.2012
Сообщений: 6
По умолчанию Необходимо выяснить сколько студентов группы имеют средний балл, наименее всего отклоняющийся по абсолютному значению от среднего

известно,что в следующем фрагменте программы массив матрица содержит оценки студентов группы,фамилии которых перечислены в типе фамилия.
> type
> фамилия=(Иванов,Просветкин,Ленин,Ми хайлов,Маслова,Юрьева,Беляев,Малаще нко,Нагайц ев,Семыкин).
> предмет=(матанализ,алгебра,информат ика,история,матлогика,механика,педа гогика,диф уруравнения,статистика).
> var
> матрица: array[ фамилия,предметы ] of integer.
Необходимо выяснить сколько студентов группы имеют средний балл, наименее всего отклоняющийся по абсолютному значению от среднего балла всей группы. помогите решить через процедуры и функции.вот,что у меня есть,проверьте.исправьте.а то она работает некорректно.


type
fam=(Ivanov, Prosvetkin, Lenin, Mikhaylov, Maslov, Yuryev, Belyaev, Malashenko, Nagaytsev, Semykin);
pred=(matan, algebra, informatics, history, matlogica, mechanics, pedagogics, difururavneniye, statistics);
matr=array[fam ,pred] of integer;
var
a:matr;


Procedure vvodM(var a:matr);
var j: pred;
i:fam;
begin
randomize;
for i:= Ivanov to Semykin do
begin
For j:=matan to statistics do
begin
a[i,j]:=random(4)+2;
write( a[i,j]:3);
end;
writeln
end;
end;


function sred(Student: fam): real;
var
j: pred;
i:fam;
s: real;
begin
s:= 0;
for i:= Ivanov to Semykin do
begin
For j:=matan to statistics do

begin
s:= s + a[Student,j];
sred:= s/9
end;
write(sred(i))
end;
readln
end;

function TotalAverege(var a:matr):real;
var
j: pred;
i:fam;
s: real;
begin
s:= 0;
for i:=Ivanov to Semykin do

begin
For j:=matan to statistics do

begin
s:= s +sred(i);
TotalAverege:= s/9;

end;
write(TotalAverege(a)) ;
end;
readln
end;

Procedure MinDev (a:matr);
var
j: pred;
i:fam;
k:integer;
begin
k:=0;
for i:=Ivanov to Semykin do
begin
For j:=matan to statistics do
begin
if TotalAverege(a)<>abs(TotalAverege(a )-sred(i))then
k:=k+1;
If k>0 then
WriteLn(k,' студентов имеют минимальное отклонение от cреднего балла группы')
else
WriteLn(k,'Таких студентов нет');

end;
end;
end;
begin
setconsolecp(1251);
setconsoleoutputcp(1251);
vvodM(a);
MinDev(a);
readln
end.

Нужно еще сделать так.чтобы выводились все промежуточные действия.т е средний балл каждого ученика,общий средний балл.а только потом уже выводился ответ.помогите!!!
natik3 вне форума Ответить с цитированием
Старый 05.04.2012, 22:52   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
{$APPTYPE CONSOLE}

uses
  SysUtils, TypInfo;

type
  fam = (Ivanov, Prosvetkin, Lenin, Mikhaylov, Maslov, Yuryev, Belyaev, Malashenko, Nagaytsev, Semykin);
  pred = (matan, algebra, informatics, history, matlogica, mechanics, pedagogics, difururavneniye, statistics);
  matr = array[fam, pred] of integer;
var
  a: matr;

procedure vvodM(var a: matr);
var j: pred;
  i: fam;
begin
  randomize;
  for i := Ivanov to Semykin do
  begin
    for j := matan to statistics do
    begin
      a[i, j] := random(4) + 2;
      write(a[i, j]: 3);
    end;
    writeln
  end;
end;


function sred(Student: fam): real;
var
  j: pred;
  s: real;
begin
  s := 0;
  for j := matan to statistics do
    s := s + a[Student, j];
  sred := s / 9;
end;

function TotalAverege(var a: matr): real;
var
  i: fam;
  s: real;
begin
  s := 0;
  for i := Ivanov to Semykin do
    s := s + sred(i);
  TotalAverege := s / 9;
end;

procedure MinDev(a: matr);
var
  i: fam;
  k: integer;
  total, min: real;
begin
  k := 0;
  total := TotalAverege(a);
  Writeln('Total average: ',total:2:2);
  min := 100;
  for i := Ivanov to Semykin do
  begin
    writeln(GetEnumName(TypeInfo(fam),Ord(i)),' have ',sred(i):2:2);
    if abs(total - sred(i)) < min then
    begin
      k := 1;
      min := abs(total - sred(i));
    end
    else
      if abs(total - sred(i)) = min then
        k := k + 1;
  end;
  WriteLn(k, ' student(s) have the most similar to the average score');
end;

begin
  vvodM(a);
  MinDev(a);
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.04.2012 в 23:04.
BDA вне форума Ответить с цитированием
Старый 05.04.2012, 23:24   #3
natik3
 
Регистрация: 05.04.2012
Сообщений: 6
По умолчанию

Спасибо большое.Очень благодарна.только у меня вопрос.почему мы min := 100; берем?(

Последний раз редактировалось natik3; 05.04.2012 в 23:30.
natik3 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстовый файл.Средний балл студентов Wild Angel Паскаль, Turbo Pascal, PascalABC.NET 1 22.03.2012 16:41
определить средний балл каждого студента Zzoyberg Помощь студентам 1 15.12.2011 20:21
Структуры. Опр. средний балл toy Общие вопросы C/C++ 1 19.05.2010 08:49
Определить максимальное по абсолютному значению число VeseloffS Помощь студентам 17 09.06.2009 23:39
Средний балл KORT Общие вопросы C/C++ 3 27.02.2008 17:04