Lab2 - tkmrqq/LaboratoryWorks GitHub Wiki

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

Цель: освоить принципы работы с текстовыми файлами в языке С.

Задача: написать программу, реализующую простой алгоритм сжатия текста.

Условия приема:

  • Оформление - (названия файлов, функций, переменных, отступы, структура проекта и т.п.) и небольшие баги должны быть исправлены. // Code name convention (camelCase, snake_case)
  • Использование Git (использование файлов gitignore, README)
  • Условие автомата: Sonar (Отсутствие багов и code Smells)

Условия: Написать программу сжатия текстового файла по алгоритму:

  1. Подсчет частоты встречи каждого слова в файле.
  2. Поиск самого популярного среди длинных слов (А).
  3. Поиск самого непопулярного среди коротких слов (В).
  4. Замена всех слов А и В друг на друга.
  5. Повтор пунктов 2-4 до тех пор, пока это имеет смысл.

ПРЕДУПРЕЖДЕНИЯ:

Чтение файла посимвольно (например, через fgetc) – быдлокод, так работает очень долго. Работайте со строками или словами! Вычитывание ВСЕГО файла в строчку и работа только со строчкой – тоже быдлокод, так как убивает идеологию работы с файлами. Грамотно используйте функции из библиотеки stdio. Незакрытые хэндлы, отсутствие простейших проверок успешности файловых операций будут трактоваться как БАГИ.


На 4-6

  • Программа должна сжать и разжать текстовый файл по приведенному выше алгоритму.
  • В результате работы должно быть создано два файла: сжатый и разжатый. Последний должен полностью совпадать с исходным. Сжатый файл должен быть меньше исходного.
  • При выборе слова А и В понятия «длинное слово» и «короткое слово» можно трактовать гибко. То есть, «длинное слово» не обязательно «самое длинное слово», главное, чтобы его использование имело положительный эффект.

На 7-8

  • Сжатие и разжатие файла реализовать двумя разными программами (два отдельных проекта).
  • Следовательно, в сжатый файл должны быть упакованы данные, необходимые для точного разжатия.

На 9-10

  • Для реализации пункта 1 алгоритма использовать собственный связный список (стек или очередь).