Помощь - Поиск - Пользователи - Календарь
Полная версия: Символьная информация
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Single
Ребят, помогите, очень срожно нужно. Задача с файлом в нём должно быть указан Фамилия,Дата рождения, Оценка,оценка,оценка
Например Doroshenko 1992 18 5 4 3 5

Задание состоит в том, что нужно вывести список студентов которые имеют средний бал выше чем средний бал всей группы.

Проблема состоит в том что я не могу посчитать средний бал всей группы и из за этого не могу и вывести всё остальное. Я только вывел на экран данные и смог посчитать среднюю оценку каждого студента, а дальше никак не идёт. Помогите пожалуйста.
Вот сам текст программы.


program rgr2;
var s:text;
x:string[21];
o1:integer;
o2:integer;
o3:integer;
i,j:real;
begin
assign(s,'c:\spusok.txt');
reset(s);
while not eof(s) do begin
readln(s,x,o1,o2,o3);
writeln(x,' ',o1,' ',o2,' ',o3);
end;
readln;
close(s);
reset(s);
while not eof(s) do
begin
readln(s,x,o1,o2,o3);
i:=((o1+o2+o3)/3);
writeln(x,' ',i:1:2);}
writeln(j:1:2);
write;
end;
readln;
close(s);
end.



Файл прикреплённый со списком студентов.
volvo
Цитата
Проблема состоит в том что я не могу посчитать средний бал всей группы
Ты же правильно начал делать, нашел средний балл каждого студента, теперь их осталось просуммировать, и поделить на количество студентов в группе:

count := 0; { <--- здесь будет число студентов }
j := 0; { <--- здесь будет среднее всей группы }
while not eof(s) do
begin
readln(s,x,o1,o2,o3);
i:=((o1+o2+o3)/3); { среднее для студента }
writeln(x,' ',i:1:2);

j := j + i; inc(count);
end;

j := j / count; { <--- Собственно, посчитали среднее }


Осталось переоткрыть файл еще раз, и пробежаться по нему в поисках студентов, имеющих ср. балл выше чем J...

P.S. Перед Reset-ом необязательно делать Close, это делается автоматически...
Single
Вот сделал всё как ты описал, но что то оно не то выводит что нужно.... и как то неверно всё таки считает среднее число всей группы sad.gif(
Вот код


program rgr2;
var s:text;
x:string[21];
o1:integer;
o2:integer;
o3:integer;
j,i:real;
count:integer;
begin
assign(s,'c:\spusok.txt');
reset(s);
while not eof(s) do begin
readln(s,x,o1,o2,o3);
writeln(x,' ',o1,' ',o2,' ',o3);
end;
readln;
close(s);
reset(s);
count:=0;
j:=0;
while not eof(s) do
begin
readln(s,x,o1,o2,o3);
i:=((o1+o2+o3)/3);
j:=j+i; inc(count);
end;
j:=j/count;
readln;
reset(s);
while not eof(s) do
begin
readln(s,x,j,i);
if j<i then
writeln (x,'':2,i:1:2);
write;
end;
readln;
close(s);
end.






volvo
no1.gif Я этого тебе не предлагал:

Цитата
while not eof(s) do
begin
readln(s,x,j,i); { <--- Ты ж затираешь J вводом из файла }
if j<i then
writeln (x,'':2,i:1:2);
write;
end;



Я имел в виду вот такой третий цикл:
while not eof(s) do
begin
readln(s,x,o1,o2,o3);
i:=((o1+o2+o3)/3); { опять вычисляем среднее для студента }
if j < i then writeln (x,'':2,i:1:2);
write; { <--- Зачем ты добавляешь пустой Write - не понимаю... }
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.