Исправьте ошибки в program partiii; var n, numparties, i, j, t: integer; count: array[1..10] of integer; s: string[50]; names: array[1..10] of string; begin numparties: =0; readln(n); for i: =1 to numparties do begin max: =count[i]; n: =i; for l: =1 to numparties do begin if count[l]> max then begin max: =count[l]; n: =l; end; end; if names[n]< > '' then begin writeln (names[n]); count[n]: =-1; names[n]: =''; end; end; for i: =2 to numparties do if count[i-1]> n then begin n: =count[i]; t: =i; end; writeln(names[t]) end. вот какое было , доработайте программу так, чтобы она решала следующую : 1) программа должна вывести список всех партий, встречающихся в исходном списке, в порядке убывания количества голосов, отданных за эту партию. при этом название каждой партии должно быть выведено ровно один раз, вне зависимости от того, сколько голосов было отдано за данную партию. пример выходных данных для выше примера входных данных: party three party two party one 2) на вход программы подается список, при этом некоторые голоса являются недействительными, в этом случае вместо названия партии записан один символ «.» (точка). партия проходит в парламент, если за нее отдано не менее 7% от общего числа действительных голосов (то есть от количества строк в списке, которые не равны «.»). программа должна вывести список всех партий в парламент, в произвольном порядке. при этом название каждой партии должно быть выведено ровно один раз, вне зависимости от того, сколько голосов было отдано за данную партию.
Program Partiii;
Var
n, NumParties, i, j, max: integer;
Count: array[1..10] of integer;
Names: array[1..10] of string;
Begin
writeln('количество партий: ');
read (NumParties);
for i:=1 to NumParties do
begin
if names[n]<>'' then
begin
max:=count[i];
n := i;
for j:=2 to NumParties do
begin
if count[j]>max then
begin
max := count[j];
n:=j;
end;
end;
writeln (names[n]);
count[n] := -1;
names[n] := '';
end;
end;
end;
end.
2) Алгоритм: вводятся данные в массив InList.
массив просматривается, при совпадении партии увеличивается счетчик.
Названия партий добавляются в список по мере встречаемости во входном массиве.
названия с точкой тоже подсчитываются. Дальше считается число действительных голосов, лпределяется процент. Если больше 7 - выводится. Процент недействительных голосов тоже выводится на общих основаниях.
Program Partiii;
const
m=2000;
Var
n, NumParties, i, j: integer;
InList: array[1..m] of integer; //входной список
s: string;
n: real;
t: boolean;
Names: array[1..10] of string; //список партий
Count: array[1..10] of integer; //количество голосов
Begin
NumParties := 1;
Names[1] := InList[1];
Count[1] := 1;
for i := 2 to M do
begin
s := InList[i];
t := false;
for j:=1 to NumParties do
begin
if s=Names[j] then
begin
t := true;
Count[j] := Count[j] + 1;
end;
end;
if (t = false) then //партия встретилась первый раз. добавляем в список
begin
NumParties := NumParties +1;
Count[NumParties] := 1;
Names[NumParties] := InList[i];
end;
end;
for j:=1 to NumParties do if Names[j] <> '.' then n := n + Count[j]; //общее количество голосов без '.'
for j:=1 to NumParties do
begin
if Names[j] <> '.' then
begin
n1 := Count[j]/n; //% по партии
if n1 >= 7 then writeln (Names[j]);
end
else
begin
n1 := Count[j]/n;
writeln ('недействительных голосов: ', n1, ' %');
end;
end;
end;
end.