Паскаль. Программа неверно оценивает стипендию.

интернет Компьютеры программирование pascal паскаль

Программа, учитывая оценки студентов за 3 экзамена, проставляет стипендию и вычисляет среднюю оценку. Вывести на экран стипендию каждого студента и средний бал. Если есть хотя бы одна тройка - нет стипендии, если 4 и 5 - обычная, если все 5 - повышенная.
О проблеме: Неправильно считает стипендию. Смотрите в конец текста программы. Писал в notepad++, т.к. в Паскале очень тяжело работать с таким текстом.
---
program lab16;
type forma=record
fio:string[50];
gruppa:string[7];
ocenka_ekz1:byte;
ocenka_ekz2:byte;
ocenka_ekz3:byte;
ocenka_sred:real;
stipendiya:string[15];
end;

var sessiya:array [1..100] of forma;
n,i,m:integer;

procedure input_data; { Процедура ввода данных }
begin
write('Vvedite familiyu studenta:'); readln(sessiya[n].fio);
write('Vvedite gruppu:'); readln(sessiya[n].gruppa);

write('Vvedite ocenky za ekzamen1:'); readln(sessiya[n].ocenka_ekz1);
while ((sessiya[n].ocenka_ekz1<3) or (sessiya[n].ocenka_ekz1>5)) do begin
write('Vvedena nevernaya ocenka. Povtorite vvod:'); readln(sessiya[n].ocenka_ekz1);
end;

write('Vvedite ocenky za ekzamen2:'); readln(sessiya[n].ocenka_ekz2);
while ((sessiya[n].ocenka_ekz2<3) or (sessiya[n].ocenka_ekz2>5)) do begin
write('Vvedena nevernaya ocenka. Povtorite vvod:'); readln(sessiya[n].ocenka_ekz2);
end;

write('Vvedite ocenky za ekzamen3:'); readln(sessiya[n].ocenka_ekz3);
while ((sessiya[n].ocenka_ekz3<3) or (sessiya[n].ocenka_ekz3>5)) do begin
write('Vvedena nevernaya ocenka. Povtorite vvod:'); readln(sessiya[n].ocenka_ekz3);
end;

end;

procedure output_data; { Процедура вывода данных }
begin
writeln('FIO:',sessiya[n].fio);
writeln('Gruppa:',sessiya[n].gruppa);
writeln('Sred.Ocenka:',sessiya[n].ocenka_sred:1:0);
writeln('Stipendiya:',sessiya[n].stipendiya);
for i:=1 to 10 do write('-');
end;

begin { начало }

writeln('Vvedite kol-vo studentov:');
readln(m);

while m<=0 do begin
writeln('Kol-vo studentov ne mozhet bit otricatelnim ili ravnyatsya nulyu. Povtorite vvod:');
readln(m);
end;

for n:=1 to m do input_data;

for n:=1 to m do begin { Считаем среднюю оценку }
sessiya[n].ocenka_sred:=(sessiya[n].ocenka_ekz1+sessiya[n].ocenka_ekz2+sessiya[n].ocenka_ekz3) div 3;
if ((sessiya[n].ocenka_ekz1+sessiya[n].ocenka_ekz2+sessiya[n].ocenka_ekz3) mod 3)>=1.5
then sessiya[n].ocenka_sred:=sessiya[n].ocenka_sred+1;
end;

for i:=1 to m do begin { Находим стипендию. Результаты неверны! }
if ((sessiya[n].ocenka_ekz1=3) or (sessiya[n].ocenka_ekz2=3) or (sessiya[n].ocenka_ekz3=0))
then sessiya[n].stipendiya:='Otsutstvuet' else begin
if ((sessiya[n].ocenka_ekz1>5) and (sessiya[n].ocenka_ekz2>5) and (sessiya[n].ocenka_ekz3>5))
then sessiya[n].stipendiya:='Povishennaya' else sessiya[n].stipendiya:='Obichnaya'; end;
end;

writeln('Spisok:'); { Вывод }
writeln;
for n:=1 to m do output_data;
end.
---

Примечание:
Тест(ожидаемый результат):
Наборы оценок: 3 4 4/3 4 5/ 3 3 3/5 5 3... - Стипендия отсутствует
4 5 4/ 5 5 4 / 4 4 4... - Обычная стипендия
5 5 5 - Повышенная стипендия
Что выдает Паскаль(реальность):
3 4 4(Выдает пустоту)/3 4 5(Выдает пустоту)/ 3 3 3(Выдает пустоту)/5 5 3(Выдает Обычную стипендию)
4 5 4(Пустота)/ 5 5 4(Пустота) / 4 4 4(Обычная стипендия)
5 5 5(Обычная стипендия)
---
О как! =((

Примечание:
Огромное спасибо! Нашел все ошибки! =)
Ответы:
Приведите конкретный пример входных данных, на которых программа выдаёт неверный результат, сам результат, который выдаёт программа, а также результат, который Вы считаете верным.
В качестве переменной цикла используется i, но внутри цикла она не используется.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.