Сформировать список школьников (ФИО, дата рождения(дд, мм, гг), класс). Составить алгоритм сортировки по возрасту и вывести список на экран. Найти самого младшего и самого старшего. Определить у кого день рождения в заданный месяц.
Код:
Uses CRT;
Const N=4;
CurrentYear = 2010;
Type
ych = Record
Num : Integer;
imya: String [20];
Famil: String [20];
clas: String [20];
Day: Integer;
Month: Integer;
Year: Integer;
Age : Byte;
End;
ychs = Array [1..N] of ych;
Var
Age: Byte;
S : ychs;
C : ych;
k,i,j,l: Integer;
flag:boolean;
Procedure swap;
Begin
C:=S[k+1];
S[k+1]:=S[k];
S[k]:=C;
flag:=false;
End;
Procedure Input;
Begin
For i:=1 to N-1 do
With S[i] do
Begin
Write('imya:');
ReadLn(imya);
Write('Familiya:');
ReadLn(Famil);
Write('clas:');
ReadLn(clas);
Write('Birthday (dd< >mm< >yyyy< >)');
ReadLn(Day,Month,Year);
Num:=Num+1;
Age:=CurrentYear-Year;
End;
S[n].Month:=maxint;
End;
Procedure SortByAge;
Begin
Repeat
Flag:=true;
For k:=1 to N-2 do
Begin
If (S[k].Age>S[k+1].Age) then swap;
If (S[k].Age=S[k+1].Age) then
Begin
If (S[k].Month<S[k+1].Month) then swap;
If (S[k].Month=S[k+1].Month) then
If (S[k].Day<S[k+1].Day) then swap;
End;
End;
until flag;
For k:=1 to N-1 do
With S[k] do
WriteLn(imya,' - ',Age,' was born in - ',day,' ',month,' ',year);
End;
Procedure FindBirthDay;
Var FindMonth: Byte;
Begin
WriteLn('Month:');ReadLn(FindMonth);
For j:= 1 to N-1 do
with S[j] do
Begin
If FindMonth=Month then WriteLn(imya,' - ',Day,'.',Month,'.',Year);
End;
End;
Procedure Maxmin;
Var MaxAge,MinAge: Integer;
MinMonth,MaxMonth: Integer;
MinName,MaxName: String;
minday,maxday: integer;
Begin
MinAge:=maxint;MaxAge:=0;
MinMonth:=12;MaxMonth:=1;
Minday:=31;Maxday:=1;
For l:= 1 to N-1 do
Begin
{If (MinAge=S[l].Age) then
If (MinMonth=S[l].Month) then
if minday<s[l].day then
begin MinAge:=S[l].Age;MinMonth:=S[l].Month;minday:=s[l].day;MinName:=S[l].imya End
else
begin MinAge:=S[l].Age;MinMonth:=S[l].Month;minday:=s[l].day;MinName:=S[l].imya End
else if minmonth<s[l].day then
begin MinAge:=S[l].Age;MinMonth:=S[l].Month;minday:=s[l].day;MinName:=S[l].imya End
else
begin MinAge:=S[l].Age;MinMonth:=S[l].Month;minday:=s[l].day;MinName:=S[l].imya End
else if minage<s[l].day then
begin MinAge:=S[l].Age;MinMonth:=S[l].Month;minday:=s[l].day;MinName:=S[l].imya End
else begin MinAge:=S[l].Age;MinMonth:=S[l].Month;minday:=s[l].day;MinName:=S[l].imya End;
If (MaxAge=S[l].Age) then
If (maxMonth=S[l].Month) then
if maxday>s[l].day then
begin MaxAge:=S[l].Age;MaxMonth:=S[l].Month;maxday:=s[l].day;MaxName:=S[l].imya End
else
begin MaxAge:=S[l].Age;MaxMonth:=S[l].Month;maxday:=s[l].day;MaxName:=S[l].imya End
else if maxmonth>s[l].day then
begin MaxAge:=S[l].Age;maxMonth:=S[l].Month;maxday:=s[l].day;MaxName:=S[l].imya End
else
begin MaxAge:=S[l].Age;MaxMonth:=S[l].Month;maxday:=s[l].day;MaxName:=S[l].imya End
else if maxage>s[l].day then
begin MaxAge:=S[l].Age;MaxMonth:=S[l].Month;maxday:=s[l].day;MaxName:=S[l].imya End
else begin MaxAge:=S[l].Age;MaxMonth:=S[l].Month;maxday:=s[l].day;MaxName:=S[l].imya
End;
End;}
if minage:=s[l].age then
minage:=s[l].age
WriteLn('Max = ',MaxName, 'Min = ',MinName);
End;
BEGIN
ClrScr;
Input;
WriteLn('');
SortByAge;
WriteLn('');
FindBirthDay;
WriteLn('');
maxmin;
writeln('');
ReadLn;
END.