Помощь - Поиск - Пользователи - Календарь
Полная версия: Необходимо выяснить сколько студентов группы имеют средний балл, наименее всего отклоняющийся по абсолютному значению от среднего балла всей группы.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
natik3
известно,что в следующем фрагменте программы массив матрица содержит оценки студентов группы,фамилии которых перечислен в типе фамилия.
> 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.
Нужно еще сделать так.чтобы выводились все промежуточные действия.т е средний балл каждого ученика,общий средний балл.а только потом уже выводился ответ.помогите!
Krjuger
И зачем было создавать новую тему по одной и той же задаче. И да,ваша программа работает неверно.

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;
res:real;
begin
s:= 0;
For j:=matan to statistics do

begin
s:= s + a[Student,j];
end;
sred:= s/9;
end;

function TotalAverege:real;
var
j: pred;
i:fam;
s: real;
res:real;
begin
s:=0;
for i:=Ivanov to Semykin do
begin
s:= s +sred(i);
end;
TotalAverege:=s/9;
res:=s/9;
writeln('TotalAverege',res:2:2) ;
readln;
end;

Procedure MinDev (a:matr);
var
j: pred;
i:fam;
Count:integer;
temp:real;
Average:real;
MinDev:real;
CurDev:real;
begin
Count:=0;
MinDev:= High(integer);
Average:=TotalAverege;
for i:=Ivanov to Semykin do
begin
temp:=sred(i);
writeln('Sred',temp:2:2);
CurDev := Abs(temp-Average);
if Abs(CurDev - MinDev) < 1e-8 then
begin
Inc(Count);
end
else
if CurDev < MinDev then
begin
MinDev := CurDev;
Count :=1;
end;
end;

If Count>0 then
WriteLn(Count,' студентов имеют минимальное отклонение от cреднего балла группы')
else
WriteLn(Count,'Таких студентов нет');
end;

begin
vvodM(a);
MinDev(a);
readln;
end.


Надеюсь больше портить программы переименовыванием, и игнорировать конструктивные предложения,заменяя их сомнительными решениями, вы не будете,уважайте труд других.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.