Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Информационные системы и технологии
**БрГТУ | Кафедра интеллектуальных информационных технологий | 2023**
**БрГТУ | Кафедра интеллектуальных информационных технологий | 2026**

> Дисциплина: «Информационные системы и технологии»
> Специальность: 6-05-0612-03 «Системы управления информацией»
Expand Down
67 changes: 0 additions & 67 deletions lab1/variants/variant01/report.md

This file was deleted.

92 changes: 92 additions & 0 deletions lab1/variants/variant08/report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Отчёт по лабораторной работе №1
## Частотная таблица файла. Энтропия

**Студент:** Дудко Даниил Валерьевич
**Группа:** АС-70
**Вариант:** 08
**Дата выполнения:** 12.04.2026

---

## 1. Цель работы

Изучить понятие энтропии дискретного источника информации. Научиться строить частотную таблицу символов файла и вычислять энтропию по формуле Шеннона.

---

## 2. Краткое описание алгоритма

1. Считываем имя входного файла из аргументов командной строки.
2. Открываем файл в бинарном режиме и определяем его размер.
3. Загружаем весь файл в память.
4. Подсчитываем частоты байтов, игнорируя \n, \r, \t.
5. Формируем список встречающихся символов и их частот.
6. Сортируем символы по убыванию частоты.
7. Считаем общее число учтённых символов.
8. Вычисляем вероятности появления символов.
9. Вычисляем энтропию, максимальную энтропию и избыточность.
10. Выводим результаты в консоль.
11. Записываем данные (символ, частота, вероятность) в CSV-файл.

---

## 3. Описание программы

- Программа запускается в `main(argc, argv)` и считывает имя входного файла из аргументов командной строки.
- Файл открывается в бинарном режиме, определяется его размер и содержимое загружается в память.
- Подсчитывается частота появления каждого байта (0–255) с помощью массива `cnt[256]`, при этом игнорируются символы `\n, \r, \t`.
- Формируется список пар `(символ, частота)` только для встречающихся символов.
- Список сортируется по убыванию частоты.
- Вычисляется общее количество обработанных символов.
- Для каждого символа вычисляется вероятность: `p_i = count_i / total`.
- Вычисляется энтропия: `H = -Σ(p_i * log2(p_i))`.
- Вычисляется максимальная энтропия: `Hmax = log2(N)`, где `N` — число уникальных символов.
- Вычисляется избыточность: `R = 1 - H / Hmax`.
- Результаты выводятся в консоль.
- Формируется CSV-файл `output.csv` со столбцами.

---

## 4. Пример работы программы

Входные данные (`test.txt`, 246 символов):

```
Т. БОРЩЕВСКАЯ

ОПЕРАЦИЯ "ВЫРОДОК В КОСМОСЕ". ПОПЫТКА РЕКОНСТРУКЦИИ

(Описание очень старой игрушки - год эдак 91-й)

ДОКУМЕНТ N 1. ОБЪЯСНИТЕЛЬНАЯ СЛЕДОВАТЕЛЮ

Осознавая, что по моей вине один из представителей инопланетной
цивилизации...
```

Вывод программы:

```
Файл: test_input.txt
Всего символов: 4990
Уникальных символов: 77
Энтропия H = 4.7374 бит
Макс. энтропия Hmax = 6.2668 бит
Избыточность R = 0.2441 (24.4050%)
Файл output.csv создан

Топ-5 символов по частоте:
Символ Частота Вероятность
--------------------------------
' ' 955 0.199399
'о' 421 0.084369
'e' 311 0.062325
'а' 285 0.057114
'н' 243 0.048697
```

---

## 5. Выводы

В ходе работы была реализована программа для анализа текстового файла и вычисления его информационных характеристик. Для входного файла test_input.txt общее количество символов составило 4990, при этом было выявлено 77 уникальных символов. Рассчитанная энтропия составила H = 4.7374 бит, при максимальной возможной энтропии Hmax = 6.2668 бит, что показывает, что распределение символов не является равномерным. Избыточность составила R = 0.2441 (24.4050%), что указывает на наличие статистической структуры в тексте и потенциальную возможность его сжатия. Результаты анализа были сохранены в файл output.csv.
130 changes: 130 additions & 0 deletions lab1/variants/variant08/solution.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <string>
#include <windows.h>

using namespace std;

int main(int argc, char* argv[]) {
SetConsoleOutputCP(1251);
SetConsoleCP(1251);

// чек аргументов командной строки
if (argc < 2) {
cout << "Использование: program input.txt\n";
return 1;
}

string name = argv[1];

// открытие файла в бинарном режиме и переход в конец чтобы сразу узнать размер файла
ifstream f(name, ios::binary | ios::ate);
if (!f) {
cout << "Файл не найден\n";
return 1;
}

// размер файла в байтах
long long size = f.tellg();
f.seekg(0); // возврат в начало файла для чтения

// чтение всего файла в память
vector<unsigned char> data(size);
if (size) {
f.read((char*)data.data(), size);
}
f.close();

// чвстоты
long long cnt[256] = { 0 };

for (auto b : data) {
// игнорируем служебные спец символы
if (b == '\n' || b == '\r' || b == '\t')
continue;

cnt[b]++;
}

// вектор для тех символов которые встретились
vector<pair<int, long long>> v;

for (int i = 0; i < 256; i++) {
if (cnt[i]) {
v.emplace_back(i, cnt[i]);
}
}

// сортировка по убыванию
sort(v.begin(), v.end(),
[](auto a, auto b) {
return a.second > b.second;
});

long long total = 0;

// общее количество символов
for (auto& p : v) total += p.second;

double h = 0.0;
vector<double> probabilities;

// вычисление вероятностей и энтропии
for (auto& p : v) {
double pi = (double)p.second / total;
probabilities.push_back(pi);
h -= pi * log2(pi);
}

int N = v.size();

// макс энтропия
double h_max = (N > 0) ? log2(N) : 0;

// избыточность
double R = (h_max > 0) ? (1 - h / h_max) : 0;

cout << "Файл: " << name << endl;
cout << "Всего символов: " << total << endl;
cout << "Уникальных символов: " << N << endl;

cout << fixed << setprecision(4);
cout << "Энтропия H = " << h << " бит" << endl;
cout << "Макс. энтропия Hmax = " << h_max << " бит" << endl;
cout << "Избыточность R = " << R << " (" << R * 100 << "%)" << endl;

ofstream csv("output.csv");

// заголовок csv файла
csv << "символ;частота;вероятность\n";

for (size_t i = 0; i < v.size(); i++) {
int byte = v[i].first;
long long count = v[i].second;
double pi = probabilities[i];

// байт в символ
string symbol(1, (char)byte);

// кавычки для csv
if (symbol == "\"") {
symbol = "\"\"";
}

// запись строки csv
csv << "\"" << symbol << "\""
<< ";" << count
<< ";" << fixed << setprecision(6) << pi
<< "\n";
}

csv.close();

cout << "Файл output.csv создан\n";

return 0;
}
92 changes: 92 additions & 0 deletions lab1/variants/variant08/test_input.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
�. ����������

�������� "������� � �������". ������� �������������

(�������� ����� ������ ������� - ��� ���� 91-�)


�������� N 1. �������������� �����������

���������, ��� �� ���� ���� ���� �� �������������� ������������
����������� ��� ����, � ������ - ������ �����, ���� ������� ���������:
�� ����������� �������� ������� � ������ � ��������� �����������
������� ���� ���������� ��� ������� ����, ��� � ���������� ���� ��������.
�� ���� ��������� ������� ������� ��������� ����� ��������, �� ��������
��������� ���������� � �������.
������ �� �������� ����������� (�������� �������������� ���
���������, � ������� ���� ������������� � ���������� ��� ���� �����������)
���� ���� ������� ������� �������� ��� �������� (������ �������������
�����������), � ��� ������� (�� ��������� ���������� ���� �������������)
��������� ��� � ���������, ������� � ������ ��� ������� �������������
�������. ���������, ��� ���� ������� ��������� ��� ���� ����������� ������
��������������� �� �� ��������.


�������� N 2. �������

���� 1-�.
�������-�� � � �������! ���� ����� ������! ��� ����� � ���������� -
������-�� ���������� �� ��������� ����� �� �������� �����... �� � ��������
��� �� �������� ������. � �, ������ ����������, ���� �� ���� �� ���� - ���
���-�� �� ����������.

���� 2-�.
�� ������� ������-�� ����� ��� ����. ���� �� ��� �����? �����-��
������ ������. � ��������-�� ����� ��� ������ - ����� �������, ����� �����
�������.

���� 8-�
����! ������� �� �� ��������, ��� � ���� ����� ����� ����� ���������!
���������� � ���� ����������� �����. ���� (�������) �������� �� ���� ����.
������� ������������, �������� ���������. �������, ��� ������ � �����
������� �������. � �����... ������, ���� ������ �������� �����. ��, ��
�������.
� ������� ������ ����� ������ ��������������� ����������� �������.
���-�� ��� ���� � ���������. ��, ���, �������� �� ���� ������� ������
������ � �������������. �� � ��������� � ��� ��� ����, ��� � �������.
����� � ������� ������� ������� (������-�� ��� ���� ���, �� ������ ��
��������), � ����� ������������ - ��� ������ ��� �������. �� ���������,
����������� ��������� �� ��� ��������. ���� �� ��� ������ ��� �����, ��...
� ���� ������� ����, �� � � ����� �� ������� ���� (�� ���� ��� ����
������� � �������� ������). ��� ��������� �� ����� ������ �����. �������
���������� �� �������. ��, ���� ���� �� �������� ��� �, ����� ���� ���
���� �� �� ��� �����. ��, ����� ��, ��� ��� ��������, ���� �� ���������
"�� ������", � ��?
����� �������� � ����� �������������. � ������ �������, ���
����������, ��� ���, ���� ��������. �� ����� � ��������� � ���������
����������� (��, ������� �� �� ����! � �� �� �������� � �����-������!
�������, ��� ���� �� ����������� - �� ��� �������� ������� ���������� �
������� ���� ���-�� ������������ ���� ������), �� ����� �������� �������
���� ������������, ��������� �� ��������� ������ �� ��� � ������ ���
���������. ��� ���� �� �������? � ��� ��� ���� ��������. � ������ �� �����
��� ���� �� ���������, � ���... �������� ��� ��������� �� �����������, ���
���� �� �� ��� ������ ��������. ����, ��� ����� � ��� ����������?
����������� ���� �������� - �� ������� ��������� ��������, ��������
��������� ����� �� ���������, � �������� ����� �������, � ����-�������� -
���������, ����������� ��������� ����, � �� ������� ������ �������� � ����
����-�� ���������� - �� ����� �����������, �� ���� ������. ���� �����-��!
����� �� �� �������� ����� ������ ��������������. ��� ����! �� �� �������
- ����� ��� ���� ������. ���������, �� �������� ��� ������ �����������?
��������, �����������. �����, ������ �� �������� �� �������? � ���� �����?
�������, ��� ������ �� "��������" �� ���������!..
������, ��� ������� ��� �� ���� �� �������� ��������! � �����?
�����... �������, ���-����� ����� � ������ ��������, �� � �� ������������,
��� ��� ��� �������. ��������� ������. ������ ����. �� � �� ������! ����
���� ����� ��������� ���������� ����������. � �� �����? � ��� ��� �������?
� � ���� �� �� ��� ��������? ��������� �������� ����������� �� �������, ��
������� ����. ������ ����� ��� �������, ��� ������ ����������, ������
������� �����������. ������ ���������� �� ������� ������ �� ���? �� ����.
������, ��� � ��� ����� ��������� ������? � ��� �� ���� ������? �������
��������� ������ �� �����.
��� ��� ����� �� �����? ����� �� ���������, ������ �� �� �������
���������� �������� �� ���? � ���� �� ��������? ��� ��� ����� � �����? ��
���� ����. ����, � ��� � �����?!


�������� N 3. ������� �� ������������� ������ ��������
�� ��������������� ��������� "������� � �������"

�������� �� ��������, ��� ���������� �������� ����������� � ���������
�������, ������� ����������� ������ ����������� �� ��������� ����� �������
������ � ��������� ����� ����������� � ����������� �����������.

Loading