вроде работает... правда это не самое красивое решение...
Код
uses crt;
const n=11;{количество животных}
m=5;{количество наиболее частовстречающихся ответов}
type five=record
zoo: string;{название животного}
count:byte;{количество повторений}
end;
var i,j,k:byte;
s:string;
maxes:array[1..m]of five;{массив из частовстречающихся ответов}
fv:array[1..n]of five;{массив названий}
begin
clrscr;
for i:=1 to n do
repeat
write(i, '> ');
readln(s);
fv[i].zoo:=s;
until s<>'';
writeln('***');
for i:=1 to n do write(i,')',fv[i].zoo:2,'; ');
writeln('***');
for i:=1 to n do{удаляем все повторяющиеся названия и в fv[i].count записываем сколько раз fv[i].zoo повторяется в списке}
if fv[i].zoo<>'' then
for j:=i+1 to n do
if (fv[i].zoo=fv[j].zoo)and(fv[i].zoo<>'') then
begin
inc(fv[i].count);
fv[j].zoo:='';
end;
writeln;
for i:=1 to n do if fv[i].zoo<>'' then inc( fv[i].count);
for i:=1 to m do{находим первые m частоповторяющихся названий}
begin
for j:=1 to n do
if fv[j].count>maxes[i].count then
begin
maxes[i].count:=fv[j].count;
maxes[i].zoo:=fv[j].zoo;
k:=j;
end;
fv[k].count:=0;
fv[k].zoo:='';
writeln(maxes[i].zoo,' - ',maxes[i].count,'(',maxes[i].count*100/n:2:2,'%)');
end;
end.