к всіх символів з частотою їх повторення.
На робочому полі Form1 створимо кнопки Button1Click, Button2Click і Button3Click під назвою відповідно В«Розрахувати таблицю частот", "КодуванняВ» і В«Очистити всеВ», додамо таблицю StringGrid1, в якій буде відображатися таблиця частот, а так ж створимо поле memo1 і memo2, в яких будуть показані результати вираження і кодування. Ще додамо компонент OpenDialod, за допомогою якого відбувається відкриття файлу. Зовнішній вигляд Form1 зображений на малюнку 5. br/>В
Рисунок 5 - Зовнішній вигляд Form1
У кореневій папці програми створимо текстовий файл, в якому напишемо створене вираз В«гааггабабадавввадабгааггабабаддаввваббдВ».
На початковому етапі ітераційного циклу створюємо процедуру tablica, в якій спочатку описуємо відкриття текстового файлу наступним чином:
Form1.opendialog1.Filter: = 'текстові файли | * txt | всі | *'; Form1.openDialog1.Execute and fileexists (Form1.opendialog1.Filename) then.memo1.Lines.LoadFromFile (Form1 . openDialog1.FileName)
else MessageDlg ('що-то не так з файлом', mtwarning, [mbOk], 0);: = Form1.memo1.text;
На малюнку 6 показано, як програма буде виглядати при відкритті файлу.
В
Малюнок 6 - Зовнішній вигляд програми при відкритті файлу
Створення таблиці частот відбувається за наступним принципом: символи, що зустрічаються в текстовому файлі, виписуються в стовпець спадний ймовірностей (частоти) їх появи. Два останніх символу об'єднуються в один із сумарною ймовірністю. З отриманої нової ймовірності і ймовірностей нових символів, не використаних в об'єднанні, формується новий стовпець у порядку убування ймовірностей, а дві останні знову об'єднуються. Це продовжується до тих пір, поки не залишиться одна ймовірність, що дорівнює сумі вірогідності всіх символів, що зустрічаються у файлі. p align="justify"> Лістинг тег-коду таблиці частот:
krs: = 0; i: = +1 to length (s1) do begin: = 0; j: = +1 to krs dos1 [i] = s [j] then: = j; jjj> 0 then c [jjj]: = c [jjj] +1 begin: = krs +1; [krs]: = s1 [i]; [krs]: = 1;;;. StringGrid1. colcount: = 3;. StringGrid1. rowcount: = krs +1; i: = 1 to krs do begin.stringgrid1.cells [1, i]: = s [i];. stringgrid1.cells [2, i]: = inttostr (c [i]); ;
При натисканні кнопки Button1Click здійснюється виклик процедури tablica. В результаті чого відбувається зчитування текстового файлу та завантаження його в поле memo1. <В
Малюнок 7 - Розрахунок таблиці частот і заповнення поля memo1
При цьому в кореневій папці програми створюється текстовий файл з назвою В«таблицяВ», в якому відображається розрахована таблиця частот. У програмі це описано наступним чином:
assignfil...