
Курсовая работа / ГОТОВАЯ КР (Тема Частотный словарь)
.pdf
При выбранном словаре, можно просмотреть с помощью команды два
меню (Рисунок 3.22).
Рисунок 3.22 — Увеличение счетчика слова из исходного словаря
Добавление нового слова в существующий словарь (Рисунок 3.23).
Рисунок 3.23 — Вставка нового слова в исходный словарь
34

При выборе шестого пункта меню происходит поиск введенного слова
(Рисунок 3.24).
Рисунок 3.24 – Поиск по слову из исходного словаря и созданного ранее
При выборе пункта ноль в меню происходит программа завершает свою работу (Рисунок 3.25).
Рисунок 3.25 – Выход из программы
Некорректный ввод название словаря нет в каталоге доступных словарей
(Рисунок 3.26).
Рисунок 3.26 — Некорректный ввод в первом пункте меню
Некорректный ввод не выбран словарь для просмотра (Рисунок 3.27).
Рисунок 3.27 — Некорректный ввод во втором пункте меню словарь не выбран
Некорректный ввод ведена неизвестная команда (Рисунок 3.28).
Рисунок 3.28 — Некорректный ввод выбрана неизвестная команда
Некорректный ввод в выбранном словаре отсутствует слово (Рисунок
3.29).
Рисунок 3.29 — Некорректный ввод в четвертом пункте меню слово не найдено
35

Некорректный ввод данных вызывающий мгновенный автоматический
выход из программы (Рисунок 3.30).
Рисунок 3.30 — Некорректный ввод в пятом пункте меню критическая ошибка автоматический выход из программы
Некорректный ввод данных выбранном словаре отсутствует поисковое
слово (Рисунок 3.31).
Рисунок 3.31 — Некорректный ввод в шестом пункте меню слово не найдено
3.6 Входные данные (организация и предварительная подготовка
входных данных)
В качестве входных данных программа принимает параметры, введенные пользователем через консоль. Также программа предоставляет возможность загрузки данных из текстовых файлов, расположение которых пользователь указывает в консоли. Для работы с файлами программа ожидает, что каждый файл будет содержать строки, где каждое слово записано с соответствующей частотой. Формат записи данных в файле должен быть следующим: слово1
частота1. Если файл не соответствует этому формату, программа уведомляет пользователя об ошибке и завершает свое выполнение.
3.7 Выходные данные
Выходные данные — это результаты, записанные в файл.
36
ЗАКЛЮЧЕНИЕ
В ходе проектирования и реализации программы частотного словаря были приобретены практические навыки работы с объектно-ориентированным программированием, включая создание и использование классов, а также реализацию методов для эффективного управления данными. Освоены алгоритмы для обработки текстов и взаимодействия с файловой системой в C++.
Среди успешно выполненных задач можно выделить разработку функционала для манипуляции частотным словарем, включая операции добавления, поиска и увеличения частоты слов. Программа также предоставляет возможность сформировать частотный словарь из вводимого пользователем текста и загружать данные из текстовых файлов.
Кроме того, реализована сортировка словаря в алфавитном порядке и возможность сохранения данных для последующего использования.
Проведённые тестирования подтвердили работоспособность всех функций, что позволяет с уверенностью утверждать о готовности и надежности разработанного программного продукта.
37
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Лозовский В.В. Алгоритмические основы обработки данных: учебное
пособие / Лозовский В.В., Платонова О.В., Штрекер Е.Н. — М.: МИРЭА – Российский технологический университет, 2022. – 337 с.
2. Белик, А. Г. Алгоритмы и структуры данных: учебное пособие / А. Г.
Белик, В. Н. Цыганенко. — Омск: ОмГТУ, 2022. — 104 с. — ISBN 978-5-8149-
3498-7. — Текст: электронный // Лань: электронно-библиотечная система. — URL: https://e.lanbook.com/book/343688 (дата обращения: 02.12.2024).
3. Платонова, О. В. Алгоритмические основы обработки данных : учебное
пособие / О. В. Платонова, Ю. С. Асадова, А. А. Рыжова. — Москва: РТУ МИРЭА, 2024. — 101 с. — ISBN 978-5-7339-2174-7. — Текст: электронный //
Лань: |
электронно-библиотечная |
система. |
— |
URL: |
https://e.lanbook.com/book/421061 (дата обращения: 02.12.2024). |
|
|
4. Платонова, О. В. Алгоритмические основы обработки данных :
методические указания / О. В. Платонова, Ю. С. Асадова, М. М. Расулов. —
Москва: РТУ МИРЭА, 2022. — 73 с. — Текст: электронный // Лань: электронно-
библиотечная система. — URL: https://e.lanbook.com/book/256586 (дата обращения: 02.12.2024).
5. Пальмов, С. В. Основы сбора и обработки больших данных : учебное пособие / С. В. Пальмов. — Самара: ПГУТИ, 2023. — 285 с. — Текст:
электронный // Лань: электронно-библиотечная система. — URL: https://e.lanbook.com/book/411830 (дата обращения: 02.12.2024).
6. Павлов, Л. А. Структуры и алгоритмы обработки данных / Л. А. Павлов,
Н. В. Первова. — 2-е изд., стер. — Санкт-Петербург: Лань, 2022. — 256 с. —
ISBN 978-5-507-44105-1. — Текст: электронный // Лань: электронно-
библиотечная система. — URL: https://e.lanbook.com/book/207563 (дата обращения: 02.12.2024).
38

ПРИЛОЖЕНИЕ А
Листинг A.1 — Основная программа
#include <iostream> #include <fstream> #include <vector> #include <string>
#include <windows.h> // Для работы с файловой системой на Windows #include "dictionary.h"
using namespace std;
// Объявления функций
void readdictionary(dictonary *pDic); void viewdictionary(dictonary *pDic); void writedictionary(dictonary *pDic);
void incrementdictionary(dictonary *pDic); void insertdictionary(dictonary *pDic); void findworddictionary(dictonary *pDic); void menu(dictonary *pDic);
void list_dictionary_files();
void list_dictionary_files() {
cout << "Доступные словари в каталоге:" << endl;
// Для Windows WIN32_FIND_DATA findFileData;
HANDLE hFind = FindFirstFile("*.txt", &findFileData);
if (hFind == INVALID_HANDLE_VALUE) {
cout << "Нет доступных файлов." << endl; return;
}
do {
cout << findFileData.cFileName << endl;
} while (FindNextFile(hFind, &findFileData) != 0);
FindClose(hFind);
}
void readdictionary(dictonary *pDic) { list_dictionary_files(); // Отображение доступных словарей string filename;
cout << "Введите название файла для чтения (например, dict.txt): "; cin >> filename;
ifstream file(filename); if (!file.is_open()) {
cout << "Не удалось открыть файл: " << filename << endl; return;
}
string str; int count;
while (file >> str >> count) { // Чтение слова и счетчика pDic->insert2(str, count);
}
file.close();
}
39

Продолжение листинга A.1
void viewdictionary(dictonary *pDic) { int size;
pDic->view(size); if (size == 0) {
cout << "Словарь пуст." << endl; } else {
for (int i = 0; i < size; i++) {
cout << "Слово: " << pDic->word(i) << ", Количество: " << pDic- >count(i) << endl;
}
}
}
void writedictionary(dictonary *pDic) { ofstream file("dict.txt", ios::trunc); if (!file.is_open()) {
cout << "Не удалось открыть файл для записи." << endl; return;
}
int size; pDic->view(size);
for (int i = 0; i < size; i++) {
file << pDic->word(i) << " " << pDic->count(i) << endl;
}
file.close();
}
void incrementdictionary(dictonary *pDic) { string word;
cout << "Введите слово для увеличения счетчика: "; cin >> word;
int index = pDic->findword(word); if (index != -1) {
if (pDic->increment(index)) {
cout << "Счетчик слова \"" << word << "\" увеличен." << endl;
} else {
cout << "Не удалось увеличить счетчик." << endl;
}
} else {
cout << "Слово не найдено." << endl;
}
}
void insertdictionary(dictonary *pDic) { string word;
cout << "Введите новое слово: "; cin >> word;
if (pDic->findword(word) == -1) { pDic->insert(word);
cout << "Слово \"" << word << "\" добавлено." << endl;
} else {
cout << "Слово уже существует в словаре." << endl;
}
}
void findworddictionary(dictonary *pDic) { string word;
cout << "Введите слово для поиска: "; cin >> word;
int index = pDic->findword(word); if (index != -1) {
cout << "Слово: \"" << word << "\", Количество: " << pDic- >count(index) << endl;
} else {
40

Продолжение листинга A.1
cout << "Слово не найдено." << endl;
}
}
void menu(dictonary *pDic) { int command;
do {
cout << "1 - Чтение из файла" << endl; cout << "2 - Просмотр словаря" << endl; cout << "3 - Сохранение словаря" << endl;
cout << "4 - Увеличить счетчик слова" << endl; cout << "5 - Вставить новое слово" << endl; cout << "6 - Найти слово" << endl;
cout << "0 - Выход" << endl; cout << "Выберите команду: "; cin >> command;
switch (command) { case 1:
readdictionary(pDic);
break; case 2:
viewdictionary(pDic);
break; case 3:
writedictionary(pDic);
break; case 4:
incrementdictionary(pDic);
break; case 5:
insertdictionary(pDic);
break; case 6:
findworddictionary(pDic);
break; case 0:
cout << "Выход из программы." << endl; break;
default:
cout << "Неизвестная команда." << endl;
}
} while (command != 0);
}
int main() {
dictonary *pDic = new dictonary(); menu(pDic);
delete pDic; return 0;
}
Листинг A.2 — Исходный файл программы
#include "dictionary.h"
//Функция добавления слова в словарь int dictonary::insert(string word) {
words.push_back(word); counts.push_back(1); return words.size() - 1;
}
//Функция добавления слова в словарь с заданным количеством int dictonary::insert2(string word, int count) {
41

Продолжение листинга A.2
words.push_back(word); counts.push_back(count); return words.size() - 1;
}
//Функция увеличения счетчика слова bool dictonary::increment(int index) {
if (index >= 0 && index < counts.size()) { ++counts[index];
return true;
}
return false;
}
//Функция поиска слова в словаре
int dictonary::findword(string word) {
for (int i = 0; i < words.size(); i++) { if (words[i] == word)
return i;
}
return -1;
}
// Функция сортировки словаря void dictonary::view(int &size) {
size = words.size();
// Сортировка по алфавиту
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) { if (words[j] > words[j + 1]) {
// Меняем слова swap(words[j], words[j + 1]);
swap(counts[j], counts[j + 1]);
}
}
}
}
//Возвращаем слово по индексу string dictonary::word(int index) {
if (index >= 0 && index < words.size()) return words[index];
return "";
}
//Возвращаем количество по индексу
int dictonary::count(int index) {
if (index >= 0 && index < counts.size()) return counts[index];
return 0;
}
Листинг A.3 — Заголовочный файл программы
#ifndef DICTIONARY_H #define DICTIONARY_H
#include <string> #include <vector>
using namespace std;
class dictonary { public:
int insert(string word);
42

Продолжение листинга A.3
int insert2(string word, int count); bool increment(int index);
int findword(string word); void view(int &size);
string word(int index); int count(int index);
private:
vector<string> words; vector<int> counts;
};
#endif // DICTIONARY_H
43