program test;
uses crt;
type data=record
ot:array[1..5] of integer;
ex:string;
end;
pr=record
nsn:string;
ots:data;
end;
var lp:array[1..50] of pr;
i,j,n,s,m:integer;t,c:string;
begin
clrscr;
repeat
write('vvedite kol-vo studentov (<=50) '); readln(n);
until n<=50;
for i:=1 to n do
begin
lp[i].ots.ex:='-';
for j:=1 to 5 do
begin write('vvedite otsenku ',j,' ');readln(lp[i].ots.ot[j]);end;
write('vvedite imea ');readln(lp[i].nsn);
end;
for i:=1 to n do
begin
s:=0;
for j:=1 to 5 do
s:=s+lp[i].ots.ot[j];
if s/5>=4.5 then lp[i].ots.ex:='+';
writeln('imea ',lp[i].nsn,' srednii bal=',s/5:4:2,' ',lp[i].ots.ex);
end;
readln;
end.
Вариант 2
uses crt;//модуль для работы с экраном, клавиатурой и звуком
type Tuchen=record//тип записи-ученики
fam:string[15];//фамилия
ocn:array[1..10]of byte;//массив из 10 оценок
srb:real;//средний балл
end;
var sp:array[1..50] of Tuchen;//массив записей
n,i,j:byte;//размер масссива, счетчики циклов
c:char;//символьная переменная для выхода из цикла ввода данных
x:Tuchen;//переменная типа записи для сортировки обменом
begin
clrscr;
writeln('Введите данные об учениках, окончание ввода Esc:');
n:=0;//пока количество запией=0
repeat
n:=n+1;//добавляем
writeln(' Ученик',n);//вводим данные по 1 ученику
write(' Фамилия: ');readln(sp[n].fam);
writeln(' Оценки в аттестате:');
sp[n].srb:=0;//средний балл
for j:=1 to 10 do//10 оценок
begin
repeat//в цикле проверяем допустимость вводимых значений
write(' Оценка ',j,'=');
readln(sp[n].ocn[j]);
until sp[n].ocn[j] in [2..5];//если ввели от 2 до 5, нормально, заканчиваем проверку, вводим дальше
sp[n].srb:=sp[n].srb+sp[n].ocn[j]/10;//складываем 10 оценок, деленных на 10=средний балл
end;
c:=readkey;//ожидаем нажатия клавиши
until c=#27;//если Esc-заканчиваем ввод, другая-продолжаем
clrscr;
{сортировка списка по фамилиям}
for i:=1 to n-1 do
for j:=i+1 to n do
if sp[i].fam>sp[j].fam then//если текущий больше встреченного впереди
begin
x:=sp[i];//обмениваем их местами через буфер х
sp[i]:=sp[j];
sp[j]:=x;
end;
writeln('Общий список учеников:':45);
writeln;
writeln('--------------------------------------------------------');
writeln('| Фамилия | Оценки за четверть | Ср.балл |Эксперимент|');
writeln('--------------------------------------------------------');
for i:=1 to n do
begin
gotoXY(1,whereY);//устанавливаем курсор в первую позицию текущей строки(whereY)
write('| ',sp[i].fam);//выводим палочку и через пробел фамилию
gotoXY(13,whereY);//в позицию 13 той же строки
write('| ');//палочку и пробел
for j:=1 to 10 do
write(sp[i].ocn[j],' ');10 оценок через пробел
gotoXY(34,whereY);//в позицию 34
write('| ',sp[i].srb:0:2);//выводим средний балл
gotoXY(44,whereY);//в 44
if sp[i].srb>4.5 then write('| +')//если ср.балл больше 4,5, выводим +
else write('| -');//иначе минус
gotoXY(56,whereY);write('|');//закрываем строку
writeln;//переходим на новую
end;
writeln('--------------------------------------------------------');
readln
end.