const exam=3; n=3; type student=record {тип один студент: запись} name: string[30]; {имя студента} sex: boolean; {пол: например, true- мужской, false - женский} scores: array[1..exam] of byte; {массив оценок за exam (это число) экзаменов} end; gruppa = array[1..n] of student; {тип группа - массив из n студентов} var PO51: gruppa; {переменная типа группа. название можешь поменять на свое :) } i: integer; {это будет переменная-счетчик} procedure vvod (var myGroup: gruppa); {процедура ввода массива студентов - группы} var i,j: integer; {счетчики} ch: char; {сюда будем читать пол: m или f} begin for i:=1 to n do {идем по всей группе} with myGroup[i] do {работаем с отдельным студентом} begin writeln('name?'); {просим ввести имя} readln(name); {читаем его} writeln('sex? m(ale) or f(emale)'); {просим ввести пол} readln(ch); {читаем его} while (ch<>'m') and (ch<>'f') do {пока пол введен некорректно} begin writeln('error! try again. input only 1 character: m or f'); {ругаемся на пользователя} readln(ch); {считываем новый вариант} end; sex:=ch='m'; {если введен пол m, то будет true, иначе - false} for j:=1 to exam do {ввод массива оценок} begin writeln('score on exam N',j); {просим ввести оценку за экзамен номер j} readln(scores[j]); {читаем ее} end; end; end; function isBestStudent(st: student): boolean; {проверяем, отличник ли данный студент} var result: boolean; {промежуточный результат} i: integer; {счетчик} begin result:=true; {сначала считаем, что отличник} for i:=1 to exam do {анализируем каждый экзамен} result:=result and (st.scores[i]=5); {добавляем к имеющимся данным данные об экзамене номер i} isBestStudent:=result; {возвращаем результат} end; procedure allBest(myGroup: gruppa); {вывод всех отличников} var i: integer; {счетчик} begin writeln('all best students of this group'); {выводим заголовок} for i:=1 to n do {анализируем каждого студента из группы} if isBestStudent(myGroup[i]) then {если он отличник} writeln(myGroup[i].name); {печатаем имя} end; procedure bestGirlsBoys(myGroup: gruppa; sex: boolean); {отличники, разделенные по полу} begin if sex then {если надо выводить мальчиков} writeln('best boys of group') {пишем такой заголовок} else writeln('best girls of group'); {а этот - если девочек} for i:=1 to n do {анализируем каждого} if isBestStudent(myGroup[i]) and (myGroup[i].sex=sex) then {если он(а) отличник и пол такой, как надо} writeln(myGroup[i].name); {выводим имя} end; procedure MiddleOfExam(myGroup: gruppa; ex: integer; var fScore,mScore: real); {средний балл мальчиков/девочек за экзамен} var i: integer; {счетчик} fCount,mCount: integer; {количество девочек и мальчиков} begin fCount:=0; {пока у нас никого нет, и баллы нулевые} mCount:=0; fScore:=0; mScore:=0; for i:=1 to n do {анализируем каждого студента} begin if myGroup[i].sex then {если это мальчик} begin inc(mCount); {увеличиваем количество мальчиков} mScore:=mScore+myGroup[i].scores[ex]; {и набранные ими баллы} end else {аналогично для девочек} begin inc(fCount); fScore:=fScore+myGroup[i].scores[ex]; end; end; fScore:=fScore/fCount; {считаем среднее} mScore:=mScore/mCount; {главное, чтобы количество не было равно 0} end; procedure bestOfExam(myGroup: gruppa; ex: integer); {кто лучше сдал экзамен?} var f,m: real; begin MiddleOfExam(myGroup,ex,f,m); {считаем средний балл} if f>m then {если он выше у девочек} writeln('On exam ',i,' girls are better') {то пишем такое} else {иначе, то есть если выше у мальчиков или поровну (дискриминация!)} writeln('On exam ',i,' boys are better'); {пишем вот такое} end; procedure bestOfAllExams(myGroup: gruppa); {лучшие по результатам всех экзаменов} var i: integer; {счетчик} f,m, fcurr, mcurr: real; {итоговые и промежуточные баллы мальчиков/девочек} begin f:=0; {пока у них по 0 баллов} m:=0; for i:=1 to exam do {анализируем каждый экзамен} begin MiddleOfExam(myGroup, i,fcurr,mcurr); {считаем средние мальчиков/девочек} f:=f+fcurr; {прибавляем это среднее к итоговому, набранному девочками} m:=m+mcurr; {и мальчиками} end; if f>m then {если у девочек больше} writeln('Girls are better') {пишем такое} else {иначе} writeln('Boys are better'); {вот такое...} end; begin {основная программа - вызов описанных выше процедур} vvod(PO51); allBest(PO51); readln; bestGirlsBoys(PO51,true); readln; bestGirlsBoys(PO51, false); readln; for i:=1 to exam do bestOfExam(PO51,i); readln; bestOfAllExams(PO51); readln; end.