Курсовая работа на тему Разработка программы сжатия и восстановления файлов с помощью фиксированного блочного кода постоянного смещения

Содержание

Краткое описание работы программы

Код программы

Результаты тестирования приложения

Краткое описание работы программы

Используемые компоненты среды Delphi :

1. SaveDialog, OpenDialog. Копомненты необходимые для чтения и сохранения файлов, а так же получения названия файла и его пути до него.

2. Button - компонент кнопка.

3. ListBox - компонент, состоящий из строк, хранит кодовые слова.

4. ProgressBar - компонент, необходимый для отслеживания этапов выполнения программы.

5. Label - компонент для вывода строковых данных.

Краткое описание работы приложения:

1. При нажатии кнопки Button1 Считать для сжатия происходит получение имени считываемого файла и пути до него. Измеряется размер файла (функция FileSize). Полностью очищаются Label.

2. При нажатии кнопки Button2 Проверить происходит обнуление всех необходимых для работы переменных. Запускается процесс считывания (по-байтово) и анализа сжимаемого файла, в результате которого высчитывается средняя длинна кодового слова. Она необходима для определения возможности сжатия. В зависимости от полученного результата выводится сообщение о том, что файл можно сжимать, в противном случае, что нельзя. Так же формируется массив частот повторений символов в файле, необходимый для соотнесения кодовых слов и символов в файле.

3. При нажатии Button3 Сжать происходит побайтовое считывание сжимаемого файла с помощью команды BlockRead. Далее происходит соотнесение считанного байта кодовому слову. Алгоритм соотнесения основан на частоте появлений символов в файле. Чем чаще данный символ встречается в файле, тем меньшей длинны ему присваивается кодовое слово. Запись нового файла производится с помощью команды BlockWriteтак же по-байтово. Новому файлу присваивается новое расширение. Когда файл полностью считан, выполняется проверка на наличие оставшихся битов. Если таковые имеются, то пустое пространство забивается нулями до тех пор, пока количество битов не будет равно 8.

4. При нажатии Button4 Считать для восстановления происходит получение имени сжатого файла, пути до него.

5. При нажатии Button5 Восстановить происходит побайтового считывание файла. Алгоритм разжатия состоит из двух этапов. На первом этапе происходит считывание файла блоками размером в 1 байт. Производится запись считанных байтов в специальную переменную. Когда длина переменной составляет 16 символов или более, начинается анализ считанной информации. Производится проверка на соответствие кодовым словам и последующая запись полученных значений в новый файл. На втором этапе производится проверка на остаток и удаление лишних данных (случай, когда было выполнено дополнение нулями при сжатии).

Код программы :

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls;

type

TForm1 = class (TForm)

ListBox1: TListBox;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Label1: TLabel;

ProgressBar1: TProgressBar;

Button4: TButton;

Button5: TButton;

Label3: TLabel;

Label4: TLabel;

Label2: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

SaveDialog2: TSaveDialog;

OpenDialog2: TOpenDialog;

procedure Button1Click (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

procedure Button5Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

f,f1,f2,f3: file;

buff: byte;

conR,conW: string;

a: array [0.255) of real; // массив вероятностей

word: array [0.255) of string; // массив кодовых слов

l: array [0.255) ofbyte; // массив длин кодовых слов

e: array [0.255) ofreal; // массив номеров элементов

inf: array [0.255) of integer; // массив служебной информации

i,j,k,size,prog,buff1,buff3,check,dop: integer;

sl,sum,sort,sort1,buff2: real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click (Sender: TObject);

begin

if OpenDialog1.Execute then

AssignFile (f,OpenDialog1.FileName); // считываем имя файла и путь до него

Reset (f,1); // открываем файл для чтения и изменения

size: =FileSize (f); // измеряем размер файла

Label4.Caption: =IntToStr (size) + байт;

// выводим размер файла в Label4

Label2.Caption: =;

Label6.Caption: =;

Label8.Caption: =;

end;

procedure TForm1.Button2Click (Sender: TObject);

begin

ProgressBar1.Position: =0; // обнуляем ProgressBar

prog: =0; // обнуляем счетчик для Progress Bar

sl: =0; // обнуляем переменную средней длинны

sum: =0; // обнуляем счетчик повторений символов

sort: =0; // обнуляем переменные для сортировки массива номеров элементов

sort1: =0;

buff: =0;

for i: =0 to 255 do

begin

e [i): =i; // производим обнуление элементов массивов кодовых слов, длин кодовых слов, вероятностей и номеров элементов.

l [i): =0;

word [i): =;

a [i): =0;

end;

whilenotEOF (f) do // считываем файл до его окончания

begin

BlockRead (f,buff,1); // считываем блоки в 1 байт

a [buff): =a [buff) +1; // записываем этот байт в массив

prog: =prog+1;

ProgressBar1.Position: =round ( (prog/size) *100);

end;

for i: =0 to 255 do

begin

word [i): =ListBox1. Items.Strings [i); // записываем кодовые слова из ListBox1 в массив кодовых слов

ifa [i) 0 then // проверяем наличие байта в массиве

begin

sum: = sum+a [i); // считаем количество повторений данного байта

end;

end;

CloseFile (f); // закрываем файл после чтения

for i: =0 to 255 do

begin

for j: =0 to 254 do

begin

if (a [j) < a [j+1)) then

begin

sort: =a [j); // производим сортировку массива номеров элементов

sort1: =e [j);

a [j): =a [j+1);

a [j+1): =sort;

e [j): =e [j+1);

e [j+1): =sort1;

end;

end;

end;

for k: =0 to 255 do

begin

ifa [k) 0 then // проверяем наличие элементов в массиве

begin

a [k): =a [k) /sum; // считаем у появления символа

l [k): =length (word [k)); // высчитываем длину кодовых слов

sl: =sl+l [k) *a [k); // получаем значение средней длинны

end;

end;

Label2.Caption: =FloatToStr (sl); // выводим значение средней длины

ifsl< 8 then // проверяем значение средней длины

begin

Button3.Enabled: =true; // активируем кнопку Сжать

showmessage (Сжатие возможно);

end;

if sl > 8 then

begin

showmessage (Сжатие невозможно);

end;

end;

procedure TForm1.Button3Click (Sender: TObject);

begin

SaveDialog1.FileName: =OpenDialog1.FileName+.gop;

// задаем новое расширение для сжатого файла

SaveDialog1.DefaultExt: =gop;

if SaveDialog1.Execute then

begin

AssignFile (f1, SaveDialog1.FileName);

Rewrite (f1,1); // открываем файл для записи

end;

buff1: =0;

i: =0;

whilei 256 do // записываем служебную информацию в новый файл.

begin

buff1: =StrToInt (FloatToStr (e [i)));

BlockWrite (f1,buff1,1);

Reset (f,1);

i: =i+1;

end;

buff1: =0;

seek (f1,256); // осуществляем переход на 256-ой байт в файле

ProgressBar1.Position: =0;

prog: =0;

while not EOF (f) do // считываем файл до его окончания

begin

BlockRead (f,buff,1); // считываем блоки размером 1 байт

buff1: =buff1+1;

prog: =prog+1;

for i: =0 to 255 do

begin

if buff=e [i) then // проверяем совпадения

begin

conR: =conR+word [i); // записываем соответствующее кодовое слово

iflength (conR) >=8 then // проверяем длину переменной

begin

conW: =copy (conR,1,8); // копируем первые 8 символов

buff2: = ( (strtoint (conW [1))) *128) + ( (strtoint (conW [2))) *64) + ( (strtoint (conW [3))) *32) + ( (strtoint (conW [4))) *16) + ( (strtoint (conW [5))) *8) + ( (strtoint (conW [6))) *4) + ( (strtoint (conW [7))) *2) + (strtoint (conW [8)));

// переводим скопрированную информацию в десятичное число

buff3: =strtoint (floattostr (buff2));

BlockWrite (f1,buff3,1); // записываем результат в новый файл

Delete (conR,1,8); // удаляем первые 8 символов

end;

if (EOF (f) =true) and (conR) and (length (conR)

Похожие рефераты:

Курсовая работа на тему Разработка специализированного процессора для исполнения элементарных функций Курсовая работа на тему Разработка устройства "Светодиодный пробник p-n переходов" Курсовая работа на тему Решение проблемы топологии и установки устройств физического уровня Курсовая работа на тему Решение транспортной задачи Лабораторная работа на тему Решение уравнений, неравенств и их систем Курсовая работа на тему Розвиток сучасних структур програмного забезпечення Реферат на тему Середовище навчання Moodle. Його переваги та недоліки Курсовая работа на тему Система баз данных MS SQL Server 2000 Реферат на тему Система непрерывной подачи чернил Курсовая работа на тему Система съема данных с оптопар Доклад: Сканеры и принтеры, сфера их применения Курсовая работа на тему Современные информационные системы управления государством Реферат на тему Современный уровень развития переносной флэш-памяти и USB-брелков Курсовая работа на тему Создание базы данных "Аттестация сотрудников" Контрольная работа на тему Создание презентации Курсовая работа на тему Спортивная программа и организация базы данных Курсовая работа на тему Суперэлементное моделирование пространственной системы "плита грунтовое основание" Курсовая работа на тему Сутність та принципи роботи ЕОМ Курсовая работа на тему Сучасне інтерактивне спілкування Реферат на тему Сучасний стан інформаційної безпеки. Проблеми захисту комп'ютерної інформації Реферат на тему Сучасні антивірусні програми та принцип їх роботи Реферат на тему Сучасні комп'ютерні технології Курсовая работа на тему Сучасні операційні системи, архітектура, відмінні характеристики, функціональність, виробництво і перспективи розвитку Реферат на тему Сучасні програмні продукти для управління маркетинговою діяльністю Контрольная работа на тему Сучасні системи автоматизованого проектування графічних проектів Реферат на тему Сущность алгоритмов Контрольная работа на тему Сущность защиты информации Реферат на тему Сущность искусственного интеллекта Курсовая работа на тему Схема електрична принципова модуля на базі 8-розрядного мікропроцесора Контрольная работа на тему Схема контроллера Реферат на тему Схема радиомодема Реферат на тему Схемы шифрования AES, RC4, RC5, RC6, Twofish, Mars Курсовая работа на тему Счетчик обратного отсчета Курсовая работа на тему Технологии компьютерных игр Реферат на тему Функции и возможности текстового редактора Дипломная работа на тему Функціонування системи інформаційного обслуговування користувачів бібліотек у сучасних умовах Реферат на тему Характеристика качества ПО "практичность" Курсовая работа на тему Цвет и графика на ЭВМ Реферат на тему Что такое компьютерная сеть. Виды сетей Контрольная работа на тему Экономические информационные системы Дипломная работа на тему Электронная почта Курсовая работа на тему Язык программирования высокого уровня С++ Курсовая работа на тему Языки программирования Контрольная работа на тему Установка и настройка программного обеспечения локальной сети Курсовая работа на тему Датчики скорости коррозии как элементы АСУ общей системы мониторинга Курсовая работа на тему Динамическое формирование и преобразование списков и структур Шпаргалка: Дискретная техника Реферат на тему Устройство персонального компьютера Курсовая работа на тему Устройство управления системой измерения веса Контрольная работа на тему Утилиты, буфер обмена, автоформат MS Excel Доклад: Файловая система для операционной системы Windows Лабораторная работа на тему Дослідження файлової структури Курсовая работа на тему Економічні задачі лінійного програмування і методи їх вирішення Курсовая работа на тему Емпіричне дослідження програмного забезпечення Курсовая работа на тему Автоматизация системы управления холодильной установкой Курсовая работа на тему Автоматизированная система управления климатом в тепличных хозяйствах Реферат на тему Автомобильная электроника Курсовая работа на тему Анализ доходов отдела фирмы, занимающейся розничной торговлей офисной мебелью Курсовая работа на тему База данных "Магазин по продаже дисков" Курсовая работа на тему Безпровідна мережа Wi-Fi, її будування Контрольная работа на тему Компьютерная графика Реферат на тему Компьютерная графика Контрольная работа на тему Компьютерная графика Реферат на тему Компьютерная графика и решаемые ею задачи Курсовая работа на тему Компьютерная лингвистика Дипломная работа на тему Компьютерная модель СГ в координатах d, q, 0 в режиме ХХ Курсовая работа на тему Назначение и возможности 3d's МАХ 9.0 Реферат на тему Назначение и основные функции электронных таблиц Лабораторная работа на тему Настройка ОС Windows Контрольная работа на тему Методы информационных технологий в делопроизводстве Учебное пособие: Методы исследования операций Курсовая работа на тему Применение пакетов прикладных программ в экономике Контрольная работа на тему Применение программы Ехсеl для определения заработка водителей такси Курсовая работа на тему Применение симплекс-метода Курсовая работа на тему Проблемы документационного обеспечения управления и использования электронной цифровой подписи Контрольная работа на тему Проблемы защиты информации Курсовая работа на тему Проблемы защиты информации в компьютерных сетях Дипломная работа на тему Проблемы и перспективы развития федеральной целевой программы "Электронная Россия" Контрольная работа на тему Проблемы искусственного интеллекта Реферат на тему Проблемы обеспечения безопасности информации в сети интернет Курсовая работа на тему Проблемы развития информационных технологий в республике Беларусь Реферат на тему Проблемы совершенствования качества выпускаемого программного обеспечения Реферат на тему Проблемы создания искусственного интеллекта Курсовая работа на тему Проблемы социальной информатики Курсовая работа на тему Прогнозирование количественными методами Курсовая работа на тему Програма "Screen Saver" (зберігач екрану) Курсовая работа на тему Програма візуальної демонстрації пошуку елементів у масиві Курсовая работа на тему Програма для анімації музичних творів Курсовая работа на тему Програма для перегляду великих текстових файлів, розмір яких більший за 64 кілобайти Дипломная работа на тему Програма для роботи з файловою системою Курсовая работа на тему Програма для сортування даних методом піраміди Курсовая работа на тему Програма для тестування знань з дисципліни "Програмування на мові С" Курсовая работа на тему Програма емуляції роботи командного процесора операційної системи Статья: Практичний розрахунок ефективності системи електронного документообігу Курсовая работа на тему Практичні аспекти створення програмного забезпечення Лабораторная работа на тему Программа "Учет выдачи и возврата книг" Реферат на тему Проектирование информационных систем Лабораторная работа на тему Символьные вычисления Контрольная работа на тему Система управления проектами Spider Учебное пособие: Системи автоматизованого проектування