program pag104_20;
uses crt;

const ni=100;
      nmel=100;

type inter=record
        nume: string[32];
        sex: 0..1;
        varsta: byte;
        melodie: array[0..2]of 1..nmel;
        Puncte:0..30;
     end;

     melodie=record
      Puncte: 0..3*ni;
      Loc:    1..nmel;
      Titlu:  string[32];
     end;

var pers: array[1..ni]of inter;
    mel:  array[1..nmel]of Melodie;
    Loc_m:array[1..nmel]of 1..nmel;
    Loc_p:array[1..ni]of 1..ni;
    i,j,k: integer;
    nm: 1..nmel;
    np: 1..ni;

begin
ClrScr;
randomize;

{Introducerea datelor}
Write('Nr_Melodii=');readln(nm);
Writeln('Titlul melodiilor');
for i:=1 to nm do with mel[i] do begin
 Write(i,': ');
 Readln(Titlu);
end;

Write(#$D#$A'Nr_Persoane=');readln(np);
Writeln(' ~ Datele intervievatilor ~ ');
Writeln(' - Numele:');
for i:=1 to np do with pers[i] do begin
 Write(i:3,' = ');     ReadLn(Nume);
end;
Writeln(' - Sexul (0=Feminin, 1=Masculin):');
for i:=1 to np do with pers[i] do begin
 Write(Nume:32,' - ');Readln(Sex);
end;
Writeln(' - Varstele:');
for i:=1 to np do with pers[i] do begin
 Write(Nume:32,' - ');  Readln(Varsta);
end;
 Writeln(#$D#$A'Melodii votate (intre 1 si ',nm,'):');
for i:=1 to np do with pers[i] do begin
 Writeln(i:3,') '+Nume+':');
 for j:=0 to 2 do begin
  Write('Nr ':5,j+1,'=');Readln(Melodie[j]);
 end;
end;
ClrScr;
{Punctul a)}
for i:=1 to np do with pers[i] do begin
 Loc_p[i]:=i;
 Puncte:=0;
end;
for i:=1 to nm do with mel[i] do begin
 Loc_m[i]:=i;
 Puncte:=0;
end;

for i:=1 to np do with pers[i] do
 for j:=0 to 2 do inc(mel[melodie[j]].Puncte,3-j);

for i:=1 to nm-1 do for j:=i+1 to nm do
 if mel[loc_m[i]].Puncte<mel[loc_m[j]].Puncte then begin
  k:=loc_m[i];
  loc_m[i]:=loc_m[j];
  loc_m[j]:=k;
 end;
for i:=1 to nm do mel[i].Loc:=Loc_m[i];

Writeln(#$D#$A' a) Melodii invingatoare:');
For i:=1 to 3 do writeln(Loc_m[i]:3,':  '+Mel[Loc_m[i]].Titlu);

{Punctul b)}
For i:=1 to np do with pers[i] do for j:=0 to 2 do
 case abs(Mel[melodie[j]].loc-j-1)of
  0:inc(puncte,10);
  1:inc(puncte,5);
  2:inc(puncte,3);
 end;

for i:=1 to np-1 do for j:=i+1 to np do
 if Pers[loc_p[i]].Puncte<Pers[loc_p[j]].Puncte then begin
  k:=loc_p[i];
  loc_p[i]:=loc_p[j];
  loc_p[j]:=k;
 end;

Writeln(#$D#$A' b) Persoane invingatoare:');
For i:=1 to 5 do with Pers[Loc_p[i]] do begin
 Write(i:2,')',Nume:29);
 if sex=0 then write('F':3) else write('M':3);
 Writeln(Varsta:7);
end;


readkey
end.