20949

Стиснення даних

Лабораторная работа

Информатика, кибернетика и программирование

define MAX_VALUE 1 BITS 1 Отметим что на MSDOSмашине при define MAX_CODE MAX_VALUE 1 длине кода 14 бит необходимо компи лировать используя largeмодель. define TABLE_SIZE 9029 endif if BITS = 12 define TABLE_SIZE 5021 endif void malloc; Это массив для значений кодов int code_value; Этот массив содержит префиксы кодов unsigned int prefix_code; Этот массив содержит...

Украинкский

2013-08-01

55.23 KB

2 чел.

Міністерство освіти, науки, молоді та спорту України

Національний технічний Університет “ХПІ”

“ХАРКІВСКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”

Кафедра “ Обчислювальна техніка та програмування ”

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

по курсу “Захист інформації у комп’ютерних системах та мережах”

 

                                                                                                Виконав:

                                                                                                      ст. гр КІТ 39

 Родін С.І

                                                                                                 Перевірив:

Межерицький С.Г

Харків 2012

“Стиснення даних”

Ціль роботи: розробка програми стиснення інформації та повернення до початкового стану без втрат.

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

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

Індивідуальні завданя:

Алгоритм arithm

#include <stdio.h>

#define BITS 12                  /* Установка длины кода равной 12, 13   */

#define HASHING_SHIFT BITS-8     /* или 14 битам.                        */

#define MAX_VALUE (1 << BITS) - 1/* Отметим, что на MS-DOS-машине при    */

#define MAX_CODE MAX_VALUE - 1   /* длине кода 14 бит необходимо компи-  */

                                /* лировать, используя large-модель.    */

#if BITS == 14

 #define TABLE_SIZE 18041       /* Размер таблицы строк должен быть     */

#endif                           /* простым числом, несколько большим,   */

#if BITS == 13                   /* чем 2**BITS.                         */

 #define TABLE_SIZE 9029

#endif

#if BITS <= 12

 #define TABLE_SIZE 5021

#endif

void *malloc();

/* Это массив для значений кодов            */

int *code_value;                 

/* Этот массив содержит префиксы кодов      */

unsigned int *prefix_code;       

/* Этот массив содержит добавочные символы  */

unsigned char *append_character;

/* Этот массив содержит декодируемые строки */

unsigned char decode_stack[4000];

main(int argc, char *argv[])

{

FILE *input_file;

FILE *output_file;

FILE *lzw_file;

char input_file_name[81];

/*

**  Эти три буфера необходимы на стадии упаковки.

*/

code_value=malloc(TABLE_SIZE*sizeof(unsigned int));

prefix_code=malloc(TABLE_SIZE*sizeof(unsigned int));

append_character=malloc(TABLE_SIZE*sizeof(unsigned char));

if (code_value==NULL || prefix_code==NULL || append_character==NULL)

{

    printf("Fatal error allocating table space!\n");

    exit();

}

/*

** Получить имя файла, открыть его и открыть выходной lzw-файл.

*/

   if (argc>1)

       strcpy(input_file_name,argv[1]);

   else

   {

       printf("Input file name? ");

       scanf("%s",input_file_name);

   }

   input_file=fopen(input_file_name,"rb");

   lzw_file=fopen("test.lzw","wb");

   if (input_file==NULL || lzw_file==NULL)

   {

       printf("Fatal error opening files.\n");

       exit();

   };

/*

** Сжатие файла.

*/

   compress(input_file,lzw_file);

   fclose(input_file);

   fclose(lzw_file);

   free(code_value);

/*

** Сейчас открыть файлы для распаковки.

*/

   lzw_file=fopen("test.lzw","rb");

   output_file=fopen("test.out","wb");

   if (lzw_file==NULL || output_file==NULL)

   {

       printf("Fatal error opening files.\n");

       exit();

   };

/*

** Распаковка файла.

*/

   expand(lzw_file,output_file);

   fclose(lzw_file);

   fclose(output_file);

   free(prefix_code);

   free(append_character);

}

/*

** Процедура сжатия.

*/

compress(FILE *input,FILE *output)

{

unsigned int next_code;

unsigned int character;

unsigned int string_code;

unsigned int index;

int i;

   next_code=256;    /* Next_code - следующий доступный код строки */

   for (i=0;i<TABLE_SIZE;i++)/*Очистка таблицы строк перед стартом */

       code_value[i]=-1;

   i=0;

   printf("Compressing...\n");

   string_code=getc(input);   /* Get the first code*/

/*

** Основной цикл. Он выполняется до тех пор, пока возможно чтение

** входного потока.  Отметим, что он прекращает заполнение таблицы

** строк после того, как все возможные коды были использованы.

*/

   while ((character=getc(input)) != (unsigned)EOF)

   {

       if (++i==1000)            /* Печатает * через каждые 1000  */

       {                         /* чтений  входных символов (для */

           i=0;                  /* умиротворения зрителя).       */

           printf("*");

       }

 /* Смотрит, есть ли строка */

       index=find_match(string_code,character);

       if (code_value[index] != -1)      /* в таблице.  Если есть,*/

   printf("Expanding...\n");

 old_code=input_code(input);/*Читается первый код, инициализируется*/

 character=old_code;   /* переменная character и посылается первый */

 putc(old_code,output);      /* код в выходной файл.      */

/*

**  Основной цикл распаковки.  Читаются коды из LZW-файла до тех пор,

**  пока не встретится специальный код, указывающий на конец данных.

*/

   while ((new_code=input_code(input)) != (MAX_VALUE))

   {

       if (++counter==1000) { counter=0; printf("*"); }

/*

** Проверка кода для специального случая

** STRING+CHARACTER+STRING+CHARACTER+

** STRING, когда генерируется неопределенный код.

** Это заставляет его декодировать последний код,

** добавив CHARACTER в конец декод. строки.

*/

       if (new_code>=next_code)

       {

           *decode_stack=character;

           string=decode_string(decode_stack+1,old_code);

       }

/*

** Иначе декодируется новый код.

*/

       else

           string=decode_string(decode_stack,new_code);

/*

** Выводится декодируемая строка в обратном порядке.

*/

       character=*string;

       while (string >= decode_stack)

           putc(*string--,output);

/*

** Наконец, если возможно, добавляется новый код в таблицу строк.

*/

       if (next_code <= MAX_CODE)

       {

           prefix_code[next_code]=old_code;

           append_character[next_code]=character;

           next_code++;

       }

       old_code=new_code;

   }

   printf("\n");

}

/*

** Процедура простого декодирования строки из таблицы строк,

* сохраняющая

** результат в буфер.  Этот буфер потом может быть выведен

** в обратном порядке программой распаковки.

*/

char *decode_string(unsigned char *buffer,unsigned int code)

{

int i;

   i=0;

   while (code > 255)

   {

       *buffer++ = append_character[code];

       code=prefix_code[code];

       if (i++>=4094)

       {

           printf("Fatal error during code expansion.\n");

           exit();

       }

   }

   *buffer=code;

   return(buffer);

}

/*

** Следующие две процедуры управляют вводом/выводом кодов

** переменной длины.  Они для ясности написаны чрезвычайно

** простыми и не очень эффективны.

*/

input_code(FILE *input)

{

unsigned int return_value;

static int input_bit_count=0;

static unsigned long input_bit_buffer=0L;

   while (input_bit_count <= 24)

   {

input_bit_buffer|=(unsigned long)getc(input)<<(24-input_bit_count);

input_bit_count += 8;

   }

   return_value=input_bit_buffer >> (32-BITS);

   input_bit_buffer <<= BITS;

   input_bit_count -= BITS;

   return(return_value);

}

output_code(FILE *output,unsigned int code)

{

static int output_bit_count=0;

static unsigned long output_bit_buffer=0L;

output_bit_buffer|=(unsigned long)code<<(32-BITS-output_bit_count);

   output_bit_count += BITS;

   while (output_bit_count >= 8)

   {

       putc(output_bit_buffer >> 24,output);

       output_bit_buffer <<= 8;

       output_bit_count -= 8;

   }

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


 

А также другие работы, которые могут Вас заинтересовать

21843. Рамно-шарнирный индикатор (РШИ) 59 KB
  База РШИ оборудована кольцевыми подмостями и поворотными люльками расположенными в уровне верхнего и нижнего этажей яруса колонн. За базовую модификацию принят РШИ для ячейки 6х6м с двухэтажной разрезкой колонн. Комплект монтажного оснащения должен включать не менее 4х РШИ иметь свой номер определяющий положение в цепи и устанавливаться в одноименные ячейки по вертикали.
21844. Монтаж каркасных многоэтажных зданий 78 KB
  Все размеры несущих и ограждающих конструкций кратны номинальным размерам с восприятием горизонтальных усилий жёсткими узлами рам; связевой – при которой колонны работают только на вертикальные нагрузки а горизонтальные воспринимаются системой вертикальных дисков и ядер жёсткости; и рамнопланировочного модуля 05м и высотного 06м. Сетка колонн кратна укрупнённому планировочному модулю 15м. Промышленные здания выполняются из железобетонных элементов с сеткой колонн 6х6 или 6х9м высотой этажей 3672м количество этажей от 2 до 12 с...
21845. Управление риском. Основные понятия и определения 97.5 KB
  Все участники проекта заинтересованы в том чтобы исключить возможность провала проекта или хотя бы убытка для себя. Вместе с тем ни у кого из них нет и не может быть уверенности в благополучном исходе проекта риск в любом реальном деле общепризнан. Под неопределенностью понимается неполнота или неточность информации об условиях реализации проекта в том числе о связанных с ними затратах и результатах. Неопределенность связанная с возможностью возникновения в ходе реализации проекта неблагоприятных ситуаций и последствий характеризуется...
21846. Реализация проекта и обратная связь 76.5 KB
  Реализация проекта и обратная связь. Организационные формы управления проектами Структуры управления проектами Это понятие включает в себя вопервых организационные формы и вовторых организационные структуры управления проектом Под организационной структурой управления проектом понимают совокупность взаимосвязанных органов управления расположенных на различных ступенях системы. Использование системы управления проектами предполагает создание специальной группы которая становится самостоятельным участником проекта или структурно входит...
21847. Управление качеством проекта 88 KB
  В чем же здесь роль управления проектами и чем новая система может помочь Оказывается весьма многим прежде всего потому что обеспечение требуемого уровня качества есть задача организационноэкономическая и проектменеджер оказался именно той фигурой которая в состоянии вооружившись методологией управления проектами навести должный порядок в сложном и потому зачастую хаотичном мире среды и окружения проекта. Задача обеспечения качества на должном уровне пронизывает весь жизненный цикл проекта. А потому задача этой главы показать не...
21848. Человеческие аспекты в управлении проектами 49 KB
  Создание проектной команды. В практике проектменеджмента используются два основных вида структуры проектной команды. Матричная форма структуры команды Эта форма применяется как правило для малых и средних проектов продолжительность жизненного цикла которых до двух лет этот критерий в разных странах варьируется от 05 до 2 лет. Преимущества: гибкость в организации и развитии команды; полномочия функциональных отделов фирмы не дублируются; наличие у членов команды уверенности в завтрашнем дне .
21849. Эффективность проекта 139.5 KB
  Эффективность проекта. Разработка концепции проекта. Любой инвестор прежде чем вложить деньги задается вопросом: в какой проект стоит вложить деньги средства сколько хотя бы примерно этих средств будет нужно когда вложенные средства начнут приносить доход сколько прибыли на вложенные средства можно получить и наконец если средства ограничены а они зачастую ограничены то где взять деньги для проекта Разработка концепции состоит из двух этапов: Формирование инвестиционного замысла идеи проекта; Анализ инвестиционных...
21850. Мир управления проектами 121 KB
  Мир управления проектами. Определение проекта. Проект является целенаправленной ориентированной во времени последовательностью как правило однократных комплексных и нерегулярно повторяющихся действий мероприятий или работ со следующими специфическими признаками: однократность и комплексность структуры проекта; сложность структуры проекта; специфичность содержательных и финансовых результатов; заданность сроков начала и окончания и тем самым заданность временной цели; нерегулярность осуществления. Проект это одноразовая совокупность...
21851. Разработка и планирование проекта 130 KB
  Разработка и планирование проекта. Планирование проекта. Сущность планирования состоит в обосновании целей и способов их удовлетворения на основе выявления детального комплекса работ определения эффективных методов и способов ресурсов всех видов необходимых для их выполнения и установления взаимодействия между организациямиучастниками проекта. Основная цель планирования интеграция всех участников проекта для выполнения комплекса работ обеспечивающих достижение конечных результатов проекта.