GAECHKA
Твоя помощница в решении задач

Подсчитать, какой процент от общего числа введённых символов составляют символ W и символ :

Ввод символов один за другим. Ввод заканчивается
символом "f". Подсчитать, какой процент от общего числа
введённых символов составляют символ W и символ : .
uses Crt;
Var i: integer;  {Счётчик  i для всех символов}
c1, c2: integer;  {счётчики с1, с2 для символов W и  :}
       c33, c44:Real;  {Процент для символов W  и  :}
       simvol: Char;
Begin
ClrScr; 
  i:= 0;  c1:= 0;  c2:= 0;
   WriteLn(' Ввод символов: ');
 repeat
    ReadLn(simvol);
       i:= i + 1;
 case simvol of
          'W':  c1:= c1 + 1:
            ' : ':  c2:= c2 + 1;
        end;
   until simvol = 'f';
     c33:= Round(100 * c1 / i);
     c44:= Round(100 * c2 / i);
       WriteLn(‘ Кол. ‘, c1);
       WriteLn(‘ Кол. ‘, c2);
  Writeln(' Процент  симв. W: ' , c33:0:2);
  WriteLn(' Процент симв. :: ' , c44:0:2);
  ReadLn
end.
На выходе имеем:
Ввод символов:
A
W
G
W
K
:
:
F
T
W
f
    Процент  W:  27
     Процент  " : ';  18
А вот ваша программа с вводом символов в одну строку.
Почему-то проценты не те, что при вводе этих же символов
в столбик.
uses Crt;
Var i: Integer;
       c1, c2: Integer;
        c33, c44: Real;
begin
ClrScr;
    i:= 0;  c1:= 0;  c2:= 0;
WriteLn(‘ Ввод символов: ‘);
   repeat
      simvol:= ReadKey;
Write(simvol);
    i:= I + 1;
case simvol of
    ‘W’: c1:= c1 + 1;
      ‘:’:  c2:= c2 + 1;
        ‘f’: WriteLn;
  end;
until simvol = ‘f’;
    c33:= c1 * 100 / i;
    c44:= c2  * 100 / i:
  WriteLn(‘ Кол. ‘, c1);
  WriteLn(‘ Кол. ‘, c2);
WriteLn(‘ Процент символа  W: ‘, c33:0:2);
WriteLn(‘ Процент символа   : : ‘, c44:0:2);
    ReadLn
end.
На выходе имеем:
 Ввод символов:
A  W  G  W  K  W  :  :  T  f
  Кол.  3
  Кол.  2
  Процент символа  W: ‘, c33:0:2);
  Процент символа    : : ‘, c44:0:2);
Введены одинаковые символы в обоих программах, а
процент выбранных символов почему-то разный. Да ещё
в два раза меньше. Что за чудеса? Вы бы разобрались.
И прерыватель f зачем то участвует в определении процентов.
Вообще то желательно без его участия. Пробовал сделать без
его участия (как то так: c33:= c1 * 100 / (i – 1). Но получил
проценты почти такие же: W = 15.79 и : = 10.53.
0
вопрос задан

Источник


2 ответа
Petro29, программы содержат синтаксические ошибки.
Исправьте их.
Ввод символов один за другим. Ввод заканчивается
символом "f". Подсчитать, какой процент от общего числа
введённых символов составляют символ W и символ : .
uses Crt;
Var i: integer;  {Счётчик  i для всех символов}
c1, c2: integer;  {счётчики с1, с2 для символов W и  :}
       c33, c44:Real;  {Процент для символов W  и  :}
       simvol: Char;
Begin
ClrScr; 
  i:= 0;  c1:= 0;  c2:= 0;
   WriteLn(' Ввод символов: ');
 repeat
    ReadLn(simvol);
       i:= i + 1;
 case simvol of
          'W':  c1:= c1 + 1:
            ' : ':  c2:= c2 + 1;
        end;
   until simvol = 'f';
     c33:= Round(100 * c1 / i);
     c44:= Round(100 * c2 / i);
       WriteLn(‘ Кол. ‘, c1);
       WriteLn(‘ Кол. ‘, c2);
  Writeln(' Процент  симв. W: ' , c33:0:2);
  WriteLn(' Процент симв. :: ' , c44:0:2);
  ReadLn
end.
На выходе имеем:
  Ввод символов:
A
W
G
W
K
W
:
:
T
f
    Процент  W:  30.00
     Процент  " : ';  20.00
А вот ваша программа с вводом символов в одну строку.
Почему-то проценты не те, что при вводе этих же символов
в столбик.
uses Crt;
Var i: Integer;
       c1, c2: Integer;
        c33, c44: Real;
begin
ClrScr;
    i:= 0;  c1:= 0;  c2:= 0;
WriteLn(‘ Ввод символов: ‘);
   repeat
      simvol:= ReadKey;
Write(simvol);
    i:= i + 1;
case simvol of
    ‘W’: c1:= c1 + 1;
      ‘:’:  c2:= c2 + 1;
        ‘f’: WriteLn;
  end;
until simvol = ‘f’;
    c33:= c1 * 100 / i;
    c44:= c2  * 100 / i:
  WriteLn(‘ Кол. ‘, c1);
  WriteLn(‘ Кол. ‘, c2);
WriteLn(‘ Процент символа  W: ‘, c33:0:2);
WriteLn(‘ Процент символа   : : ‘, c44:0:2);
    ReadLn
end.
На выходе имеем:
 Ввод символов:
A  W  G  W  K  W  :  :  T  f
  Кол.  3
  Кол.  2
  Процент символа  W: = 15.00
  Процент символа    : : = 10.00
Введены одинаковые символы в обоих программах, а
процент выбранных символов почему-то разный. Да ещё
в два раза меньше. Что за чудеса? Вы бы разобрались.
И прерыватель f зачем то участвует в определении процентов.
Вообще то желательно без его участия. Пробовал сделать без
его участия (как то так: c33:= c1 * 100 / (i – 1). Но получил
проценты почти такие же: W = 15.79 и : = 10.53.
Синтаксических ошибок я не обнаружил (да и если бы они
были, программа отказала бы). Т. е. Вопрос остался!