HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail


 
В этот день много лет назад...
26 апреля. В 1991 году (33 года назад) - Торнадо обрушаваются на Канзас.
 
 

Turbo Pascal Examples

Графика:
Построение графика функции
Прыгающий по экрану мячик.
Качание маятника.
Вложенные цветные круги.
Броуновское движение. Использование объектов.
Матрицы и массивы:
Сортировка элементов массива.
Удаление одинаковых элементов.
Простой пример на поворот матрицы.
Сортировка методом Шелла. +функции измерения временных интервалов.
Проверка выпуклости многоугольника.
Перемоножение матриц
Вычисление определителя матрицы. Рекурсия.
Нахождение обратной матрицы.
Задача об автостоянке.
Рекурсия. Подземелье сокровищ.
Численные методы:
Задачка на определение угла между стрелками часов.
Проверка на принадлежность точки многоугольнику.
Нахождение точки пересечения двух отрезков на плоскости.
Сортировка методом Шелла. +функции измерения временных интервалов.
Сортировка методом "пузырька". Пример на динамические структуры данных. Связанные списки.
Нахождение корня функции методом половинного деления.
Вычисление арккосинуса
Нахождение суммы цифр натурального числа.
Работа с фалами:
Рекурсивное сканирование директорий.
Работа со строками:
Работа со словами в предложении с разделителями.
Простейший синтаксический анализатор для распознавания и вычисления многчлена.
Синтаксический анализатор для распознавания и вычисления многчлена.
Работа со строками: смена кодировки, удаление тегов из HTML текста, обработка
Переименование файлов из кириллицы в латиницу.
Выдача контекстной подсказки.
Частотный словарь символов.
Подсчет повторяющихся символов в строке.
Ссылочные переменные:
Моделирование стека.
Пасьянс "Косынка".
Игры:
Пасьянс "Косынка".
Игра "Питон"
Игра "Анацефал". Пример использования объектов.
Игра "Минное поле"
Большие проекты:
Электронная картотека (без исходника)


 
Подсчет частоты повторения символов в тексте.
Есть текст. Для простоты будем считать, что он записан в файле text.txt. Задача состоит в подсчете частоты повторения каждой встреченной буквы в данном тексте.
Задача сама по себе не очень сложна. Однако, мне доставило истинное удовольствие просчитать частоты повторений той или иной буквы для различных текстов. Для этого я даже написал еще одну программу для переформатирования текста. Данные по частотам я привожу в таблице внизу.
В свое время я читал книгу Ч. Уэзерелла "Этюды для программистов", в котором один этюд мне вспомнился в связи с этой программой. Речь идет о криптографии. Частоты символов могут помочь раскрыть простейший шифр, который образуется путем простой замены (вернее сдвига) одних букв на другие. Ну, например, пусть есть два алфавита:
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
ЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВГДЕЁЖЗИ

Записав текст, заменяя каждую букву верхнего ряда на букву нижнего, мы получим совершенно не читаемый текст, который может быть прочитан, если у вас есть значение "сдвига". Беспорядочно перемешав нижний алфавит, можно усложнить шифр, тогда замена будет не такой тривиальной как сдвиг. Однако такой шифр легко раскрывается для достаточно больших текстов, в которых частота повторения букв будет близкой к стандартной. Экспериментально найти это стандартное распределение может данная программа.


const d=59;
var f:text;
    s,al,al_u:string;
    fr:array[1..d] of longint;
    k,i:byte;
    ncom:longint;
  begin
  al_u:='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ';
  al  :='абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz';
  for i:=1 to d do
    fr[i]:=0;
  ncom:=0;
  assign(f,'text.txt');
  reset(f);
  while not eof(f) do
    begin
    readln(f,s);
    for i:=1 to length(s) do
      begin
      k:=Pos(s[i],al_u);
      if (k=0) then k:=Pos(s[i],al);
      if (k>0) then
        begin
        inc(ncom);
        inc(fr[pos(s[i],al)]);
        end;
      end
    end;
  close(f);
  assign(f,'freq.txt');
  rewrite(f);
  for i:=1 to d do
    writeln(f,i:2,' ',al[i],':',fr[i]/ncom:7:5,' ',fr[i]:8);
  writeln(f,' Total: ',ncom,' letters');
  close(f);
  end.

 Текст 1Текст 2Текст 3Текст 4Мастер и МаргаритаПесни ОкуджавыГарри Поттер 1Гарри Поттер 4
а0.088820.080750.081540.081400.084650.078980.078390.07899
б0.016590.013410.013890.013540.014530.018150.015990.01651
в0.046550.045820.044790.045700.044710.042700.038020.03937
г0.014450.015380.016140.015510.018500.017240.017170.01750
д0.033710.025400.024380.025290.027290.030950.030000.02901
е0.082930.081900.081050.082120.080940.084970.078340.07148
ё0.000000.000050.000030.000060.000010.000000.000080.00511
ж0.008030.006650.006090.006560.008930.009990.009030.00907
з0.017660.014250.014640.014400.017460.015180.016850.01720
и0.058320.076200.074330.074930.066320.058710.066570.06821
й0.006960.015470.015680.015150.011720.015150.010060.00917
к0.032100.032000.033980.032490.035070.038480.032360.03063
л0.029430.034800.034820.033880.052040.040150.054300.05307
м0.037450.026510.024910.025340.028090.029760.029720.03186
н0.059930.061100.060000.061320.061540.060470.060860.06041
о0.096840.094340.093030.093650.109430.096530.108790.11070
п0.024610.026150.025710.025650.026310.025560.026220.02663
р0.051900.056820.055580.056490.046970.044900.052160.05420
с0.059930.053660.052020.052100.049320.048950.049170.05133
т0.058320.056950.053850.056270.059140.060430.056900.05544
у0.020330.021100.020780.021100.029750.029300.028600.02882
ф0.003210.003260.002930.003280.001920.001020.002650.00182
х0.008560.007790.007150.007120.008120.009300.007410.00728
ц0.003210.006180.006560.005780.003300.002830.002710.00290
ч0.010170.008820.009070.008860.015510.014530.014440.01416
ш0.005350.005060.004930.004870.008660.008970.008910.00803
щ0.000540.002460.002130.002500.003520.003230.003020.00344
ъ0.000540.000480.000620.000530.000320.000100.000280.00025
ы0.012840.015020.014420.014330.017300.023300.018090.01723
ь0.013910.009870.009480.009410.017760.020260.020300.01944
э0.002140.001860.001670.001730.002710.001690.002630.00308
ю0.005890.007020.006750.006890.005280.008010.004730.00505
я0.019800.018330.018840.019240.018490.019630.019690.01917
всего букв186927582920257022157059819289382358778860815

 

 

Прислано strike

Нижеследующая таблица- результат исследования > 10 МБ текста (преимущественно компьютерного). Возможно она окажется кому-то полезной. (Таблица взята из книги Е.П. Липко "Практикум по программированию")

символ            о       е       а       и       т       
на 10000          974     910     805     776     653     

символ            н       р       с       в       л  
на 10000          631     540     513     438     384

символ            м       п       к       д       ы  
на 10000          362     341     335     297     228

символ            я       у       з       б       ь  
на 10000          227     223     177     148     137

символ            г       ч       й       ж       ц  
на 10000          128     124     123     80      77 

символ            ю       х       ф       щ       ш 
на 10000          74      70      56      53      38

символ            э       ъ
на 10000          31      8

Средняя встречаемость букв на 10000 символов компьютерного текста

 

 

 

 

 


HOME