Розробка програми стиснення iнформацiї та повернення до початкового стану без втрат

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

Лабораторна робота №7

«Стиснення даних.»

                                                            Виконав:

 ст групи КІТ-14в

Богачов О. С.

.                                                                                         

ХАРКІВ 2007

Лабораторна робота №7

Тема: Стиснення даних.

Мета: Розробка програми стиснення iнформацiї та повернення до початкового стану без втрат.

Постановка задачi:  Необхiдно розробити i налагодити комплекс програм:

- програма стиснення iнформацiї (архiвування). У якостi iнформацiї

використовувати копiю файлу з розробленою програмою. Розрахунок

ступеню стиснення;

 - програма повернення архiвного файлу до початкового вигляду

(розархiвування).

1.Індивідуальне завдання.

Реалізувати алгоритм стиснення RLE.

2. Алгоритм програми:

1)  Компресор шукає у файлі фрагменти, що повторюються та замінює цю послідовність на пару: повторюваний символ та кількість його провторень (кожну зі стиснених послідовностей записують з заздалегідь вибраною сигнатурою);

2)  Неповторювані фрагменти залишаються без змін;

3)  Декомпресор шукає сигнатуру – коли знаходе розпаковує послідовність байтів у вихідний файл.

3.Текст програми:


// Программа сжатия файла

#include<conio.h>

#include<stdio.h>

FILE *f=0,*out=0;

int cur_i=0;

char sgn=254; // Сигнатура сжатых фрагментов

// ***************** Функция выявления повторений *****************

int chk_pos (char buf[255])

{

int col=1;

int ch;

ch = buf[cur_i];

cur_i++;

while (ch==buf[cur_i]) { col++; cur_i++; }

return col;

}

// ***************** Главная функция *****************

int main()

{

clrscr();

printf("Hачало работы компрессора:\n");

char file1[20],file2[20];

printf("Введите имя файла для архивации: ");

scanf("%s",&file1);

printf(file1);

printf("\n");

printf("Введите имя результирующего файла: ");

scanf("%s",&file2);

printf(file2);

printf("\n");

if( (f=fopen(file1,"r")) == NULL)

{

   printf("Hе могу открыть ысходный файл.\n");

   return 1;

}

if( (out=fopen(file2,"w")) == NULL)

{

   printf("Hе могу создать выходной файл.\n");

   return 1;

}

int col=0;

char buf[255],c; // Буфер для чтения символов

 while(!feof(f)) // Пока не конец файла

 {

       fgets(buf, 255, f); // Читаем целиком строку

       cur_i=0;

       while ( !(buf [cur_i]=='\n') )

       {

       col = chk_pos(buf);

if (col==1) { fprintf(out,"%c",buf[cur_i-1]);

printf("%c",buf[cur_i-1]);

}

else if (col==2)

{

       fprintf(out,"%c%c",buf[cur_i-col],buf[cur_i-col]);

       printf("%c%c",buf[cur_i-col],buf[cur_i-col]);

}

else

{

fprintf(out,"%c%c%c",sgn,buf[cur_i-col],col);

printf("%c%c%c",sgn,buf[cur_i-col],col);

}

col=0;

       }

       printf("\n");

       if (!feof(f)) fprintf(out,"\n");

       buf[0]='\n';

 }

printf("\nСжатие закончено!");

fclose(out);

fclose(f);

getch();

return 0;

}

// Программа расжатия файла

#include<conio.h>

#include<stdio.h>

FILE *f=0,*out=0;

int cur_i=0;

char sgn=254; // Сигнатура сжатых фрагментов

// ***************** Главная функция *****************

int main()

{

clrscr();

printf("Hачало работы декомпрессора:\n");

char file1[20],file2[20];

printf("Введите имя файла для разархивации: ");

scanf("%s",&file1);

printf(file1);

printf("\n");

printf("Введите имя результирующего файла: ");

scanf("%s",&file2);

printf(file2);

printf("\n");

if( (f=fopen(file1,"r")) == NULL)

{

   printf("Hе могу открыть исходный файл.\n");

   return 1;

}

if( (out=fopen(file2,"w")) == NULL)

{

   printf("Hе могу создать результирующий файл.\n");

   return 1;

}

char buf[255],c; // Буфер для чтения символов

 while(!feof(f)) // Пока не конец файла

 {

       fgets(buf, 255, f); // Читаем целиком строку

       cur_i=0;

       while ( !(buf [cur_i]=='\n') )

       {

       if (buf[cur_i]!=sgn)

       {

       fprintf(out,"%c",buf[cur_i]);

       printf("%c",buf[cur_i]);

       cur_i++;

       } else

               {

               for (int j=0; j<(buf[cur_i+2]); j++)

                      {

                              fprintf(out,"%c",buf[cur_i+1]);

                              printf("%c",buf[cur_i+1]);

                      }

               cur_i+=3;

               }

       }

 cur_i=0;

 if (!feof(f)) fprintf(out,"\n");

 printf("\n");

 buf[0]='\n';

 }

printf("\nРасжатие закончено!");

fclose(out);

fclose(f);

getch();

return 0;

}

4.Результати роботи програми:В результаті роботи програми отримали файл, що стиснуто з коєфіцієнтом 1478/1534 * 100 = 96%. Розархівування дало файл, який повністю співпадає з оригіналом до архивування.

Висновок: розробили i налагодили програми, які виконують стиснення iнформацiї (архiвування). У якостi iнформацiї використовували копiю файлу з розробленою програмою. Розрахунок ступеню стиснення, та програма повернення архiвного файлу до початкового вигляду(розархiвування).

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.