понедельник, 15 июня 2015 г.

postheadericon Пример решения задач С27 с использованием множеств.

Рассмотрим не совсем обычный способ решения вполне стандартной задачи С27. Используем  множество и необычную нумерацию элементов массива (не цифровую, а символьную).
В сборнике задач Константина Полякова можно найти такую задачу:
---------------------------------------------------------------------------------------------------------


      На вход программы подаются произвольные алфавитно-цифровые символы. Ввод этих символов заканчивается точкой. Требуется написать программу, которая будет печатать последовательность строчных английских букв ('a' 'b'... 'z') из входной последовательности и частот их повторения. Печать должна происходить в алфавитном порядке. Например, пусть на вход подаются следующие символы:
fhb5kbfыshfm.
В этом случае программа должна вывести
b2
f3
h2
kl
ml
s1
---------------------------------------

Для решения первым способом ("в лоб") надо знать коды маленьких латинских букв (a-97, b-98, ...,z-122):

program C27_3_1;
var
a: array[97..122] of integer;
c: char;
k: integer;
begin

for k:=97 to 122 do begin a[k]:=0; end;

  repeat
  read(c);
  k:=ord(c);
  if (k>=97) and (k<=122) then a[k]:=a[k]+1;
  until c='.';
 
for k:=97 to 122 do
begin
if a[k]>0 then begin c:=chr(k);writeln(c, a[k]); end;
end;

end.

Второй способ подразумевает использование массива-счетчика, индексами элементов которого являются сами подсчитываемые буквы a: array ['a'..'z'] of integer
Кроме этого создадим множество маленьких латинских букв mn=['a'..'z'].

program c27_3_2;
Const
  mn=['a'..'z'];

var c: char;
    a: array ['a'..'z'] of integer;

 Begin

  repeat
    read(c);
      if c in mn then a[c]:=a[c]+1; 
  until c='.';

  for c:='a' to 'z' do
    if a[c]>0 then writeln(c, ' ', a[c]);
 
 End.

Программа поражает своей простотой и лаконичностью. Поучительным является тот факт, что переменная цикла - символьная величина.

Про меня

Моя фотография
ЛАИ
Санкт-Петербург, Russia
Просмотреть профиль

Позитивный контент

Позитивный контент
Блог - участник конкурса сайтов "Позитивный контент"

Статистика блога

Постоянные читатели

Технологии Blogger.