Pascal!!!!! Исправьте ошибки в задаче Program Partiii; Var n, NumParties, i, j, t:...

0 голосов
34 просмотров

Pascal!!!!!
Исправьте ошибки в задаче


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% от общего числа действительных голосов (то есть от количества строк в списке, которые не равны «.»). Программа должна вывести список всех партий, прошедших в парламент, в произвольном порядке. При этом название каждой партии должно быть выведено ровно один раз, вне зависимости от того, сколько голосов было отдано за данную партию.


Информатика (272 баллов) | 34 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

1)
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.

(1.2k баллов)