e (f, 'табліца.txt'); (f); i: = 1 to krs do (f, s [i], '', inttostr (c [i]));
closefile (f);
Тепер, коли дерево створено, можна обчислити коди (бітові ланцюжка для кодування вихідних чисел) і закодувати дані. Спираючись на малюнок 8, потрібно усвідомити, що обчислення коду числа починається від кореня дерева. Для обчислення коду, необхідно, рухаючись по дереву від кореня до числа у вихідній таблиці, підрахувати число пройдених вузлів. Це значення дорівнюватиме довжині бітової ланцюжка коду. І простежити для кожного вузла повороти, якщо поворот у вузлі здійснюється наліво, то в ланцюжку бітів встановлюється значення 0, якщо направо - 1. br/>В
Рисунок 8 - Остаточне дерево кодування Хаффмана
Тривалість передачі кожного окремого коду ti, очевидно, може бути знайдена таким чином: ti = ki , де ki - кількість елементарних сигналів (біт) в коді символу i. Згідно з наведеними вище правилами отримуємо наступну таблицю кодів:
А01Б100В101Г110Д111 Рисунок 9 - Кодування символів
Розглянемо опис процедури кодування:
for i: = 1 to krs do to krs dorod [i] = r1 then begin [i]: = '1 '+ kod [i]; [i]: = r2; rod [i] = r2 then kod [i]: = '0' + kod [ i]; [n2]: = c [n2] + c [n1];: = kvo-1; kvo = 1; i: = 1 to length (s1) doj: = 1 to krs do begins1 [i] = s [j] then s2: = s2 + kod [j];;
Отриманий результат записується в полі memo2:
Form1.memo2.text: = s2;
На малюнку 10 показано, що відбудеться при натисканні кнопки В«КодуванняВ».
В
Рисунок 10 - Кодування вираження
При цьому в кореневій папці програми створюється текстовий файл з назвою В«кодуванняВ», в якому відображається розрахована таблиця частот. У програмі це описано наступним чином:
assignfile (ff, 'кодіровка.txt'); (ff);
writeln (ff, s2); (ff);
Отже, нам вдалося стиснути вираз, де вартість зберігання вхідного потоку дорівнює 312біт в 87 біт.
У додатку до програми, була створена кнопка В«очистити всіВ», яка дозволяє очистити таблицю частот, поля memo1 і memo2. Для цього створена кнопка Button3Click. Розглянемо лістинг тег-коду:
for i: = 0 to Form1.ComponentCount-1 do (Form1.Components [i] is TMemo) then (Form1.Components [i] as TMemo). Clear; (Form1.Components [i ] is TEdit) then (Form1.Components [i] as TEdit). Text: ='';; k: = 0 to StringGrid1.RowCount - 1 doj: = 0 to StringGrid1.ColCount - 1 do.Cells [j, k ]: ='';
Таким чином, при натисканні кнопки В«Очистити всеВ» зовнішній вигляд програми ста...