М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
trololoshka25
trololoshka25
01.02.2022 15:25 •  Информатика

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

👇
Ответ:
romankomarov1
romankomarov1
01.02.2022
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.
4,4(5 оценок)
Открыть все ответы
Ответ:
nastushka162003
nastushka162003
01.02.2022
Сначала надо избавиться от ошибок (пункт №3)
иначе не сможем выполнить 1 и 2 пункт задания.
  Исправляем if N mod 10 k:=N mod 10; на if (N mod 10 < k) then k:=N mod 10;
  Исправляем N:N div 10; на N:= N div 10;
 
После исправления ошибок при вводе 537 получим 3
Программа будет работать правильно для любого числа,
у которого вторая цифра слева меньше первой цифры, например:
7193

Чтобы программа работала правильно для всех чисел надо
изменить это: while N > 10 do на while N > 0 do

После всех исправлений код программы стал таким:
var
  N, k: integer;
begin
  readln(N);
  k := 9;
  while N > 10 do
  begin
    if (N mod 10 < k) then k := N mod 10;
    N := N div 10;
  end;
  write(k)
end.
4,5(15 оценок)
Ответ:
prisheplub
prisheplub
01.02.2022
Давай попробуем рассуждать логически.
Если бы сад состоял из двух деревьев, то было бы два варианта садов: 100+99 и 100+101. Если бы досадили третье дерево, то каждый из предыдущих садов удвоил бы число вариантов: первый 100+99+98 и 100+99+100, и так же второй 100+101+100 и 100+101+102. Подмечаем закономерность: каждое добавляемое дерево удваивает количество вариантов. А сад из одного дерева имеет лишь один вариант.

Поэтому ответ: 1 * 2 * 2 * 2 * ... (десять двоек умножаются) = 2^10 = 1024 варианта садов. 

Думаю что так, если не напутал. Но ты лучше проверь за мной. 
4,4(78 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ