Вопрос: Составить программу назначения стипендии студентам по результатам сессии, используя следующие правила: 
1) если все оценки 5, назначается повышенная стипендия; 
2) если оценки 4 и 5, назначается обычная стипендия; 
3) если есть оценка 3, стипендия не назначается. 
В результате работы программы получить список группы с оценками и средним баллом каждого студента и два списка фамилий (назначенных на повышенную и обычную стипендию).
Категория: школьный раздел
Ответы:
uses crt;
const max=30;
type TStud=record
           fam:string[15];
           ocn:array[1..4] of integer;
           srb:real;
           end;
var sp:array[1..max] of Tstud;
    n,i,j,k,p:integer;
    pr:real;
begin
repeat
write('Количество студентов до ',max,' n=');
readln(n);
until n in [1..max];
for i:=1 to n do
 begin
  writeln('Студент ',i);
  with sp[i] do
   begin
    write(' Фамилия: ');readln(fam);
    writeln(' Четыре оценки (2..5):');
    srb:=0;
    for j:=1 to 4 do
    repeat
    write('оценка ',j,': ');readln(ocn[j]);
    srb:=srb+ocn[j];
    until ocn[j] in [2..5];
    srb:=srb/4;
   end;
 end;
clrscr;
writeln('Полный список группы:');
writeln('-----------------------------------');
writeln('|    Фамилия    | Оценки | Ср.балл|');
writeln('-----------------------------------');
for i:=1 to n do
with sp[i] do
 begin
   gotoXY(1,whereY); write('| ',fam);
   gotoXY(17,whereY);write('|');
   for j:=1 to 4 do
   write(ocn[j]:2);
   gotoXY(26,whereY);write('| ',srb:6:2);
   gotoXY(35,whereY);writeln('|');
  end;
writeln('-----------------------------------');
write('Press Enter...');
readln;
clrscr;
writeln('Повышенная стипендия:');
k:=0;
writeln('-----------------------------------');
writeln('|    Фамилия    | Оценки | Ср.балл|');
writeln('-----------------------------------');
for i:=1 to n do
with sp[i] do
if srb=5.0 then
 begin
   k:=1;
   gotoXY(1,whereY); write('| ',fam);
   gotoXY(17,whereY);write('|');
   for j:=1 to 4 do
   write(ocn[j]:2);
   gotoXY(26,whereY);write('| ',srb:6:2);
   gotoXY(35,whereY);writeln('|');
  end;
writeln('-----------------------------------');
if k=0 then writeln('Таких студентов нет.');
write('Press Enter...');
readln;
clrscr;
writeln('Обычная стипендия:');
k:=0;
writeln('-----------------------------------');
writeln('|    Фамилия    | Оценки | Ср.балл|');
writeln('-----------------------------------');
for i:=1 to n do
with sp[i] do
 begin
  p:=0;
  while(j<=4)and(p=0) do
  if ocn[j]<4 then p:=1
  else inc(j);
  if (p=0)and(srb<5.0) then
   begin
    k:=1;
    gotoXY(1,whereY); write('| ',fam);
    gotoXY(17,whereY);write('|');
    for j:=1 to 4 do
    write(ocn[j]:2);
    gotoXY(26,whereY);write('| ',srb:6:2);
    gotoXY(35,whereY);writeln('|');
   end;
 end;
writeln('-----------------------------------');
if k=0 then writeln('Таких студентов нет.');
end.

uses crt;
const max=30;
type TStud=record
           fam:string[15];
           oc:array[1..3]of byte;
           sr:real;
           end;
var sp:array[1..max] of Tstud;
    n,i,j,k,p:integer;
begin
clrscr;
repeat
write('Количество студентов до ',max,' n=');
readln(n);
until n in [1..max];
for i:=1 to n do
  begin
    writeln('Студент ',i);
    write(' Фамилия: ');readln(sp[i].fam);
    sp[i].sr:=0;
    for j:=1 to 3 do
       begin
         repeat
           write(' Оценка ',j,'=');
           readln(sp[i].oc[j]);
         until sp[i].oc[j] in [3..5];
         sp[i].sr:=sp[i].sr+sp[i].oc[j];
       end;
    sp[i].sr:=sp[i].sr/3;
  end;
clrscr;
writeln('Список группы:':30);
writeln('--------------------------------------');
writeln('|    Фамилия   |  Оценки   | Ср.балл |');
writeln('--------------------------------------');
for i:=1 to n do
 begin
   gotoXY(1,whereY); write('| ',sp[i].fam);
   gotoXY(16,whereY);write('|');
   for j:=1 to 3 do write(sp[i].oc[j]:3);
   gotoXY(28,whereY);write('|',sp[i].sr:6:2);
   gotoXY(38,whereY);writeln('|');
  end;
writeln('--------------------------------------');
write('Press Enter...');
readln;
clrscr;
writeln('Назначена повышенная стипендия:');
k:=0;
writeln('--------------------------------------');
writeln('|    Фамилия   |  Оценки   | Ср.балл |');
writeln('--------------------------------------');
for i:=1 to n do
if sp[i].sr=5.0 then
 begin
  k:=1;
  gotoXY(1,whereY); write('| ',sp[i].fam);
  gotoXY(16,whereY);write('|');
  for j:=1 to 3 do write(sp[i].oc[j]:3);
  gotoXY(28,whereY);write('|',sp[i].sr:6:2);
  gotoXY(38,whereY);writeln('|');
 end;
writeln('--------------------------------------');
if k=0 then writeln('Назначенных на повышенную стипендию нет.');
write('Press Enter...');
readln;
clrscr;
writeln('Назначена обычная стипендия:');
k:=0;
writeln('--------------------------------------');
writeln('|    Фамилия   |  Оценки   | Ср.балл |');
writeln('--------------------------------------');
for i:=1 to n do
 begin
  p:=0;
  for j:=1 to 3 do
  if (sp[i].oc[j]=5)or(sp[i].oc[j]=4) then p:=p+1;
  if(p=3)and(sp[i].sr<5.0) then
   begin
    k:=1;
    gotoXY(1,whereY); write('| ',sp[i].fam);
    gotoXY(16,whereY);write('|');
    for j:=1 to 3 do write(sp[i].oc[j]:3);
    gotoXY(28,whereY);write('|',sp[i].sr:6:2);
    gotoXY(38,whereY);writeln('|');
   end;
 end;
writeln('--------------------------------------');
if k=0 then writeln('Назначенных на обычную стипендию нет.');
write('Press Enter...');
readln
end.