Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовая работа / ГОТОВАЯ КР (Тема Частотный словарь)

.pdf
Скачиваний:
2
Добавлен:
07.12.2024
Размер:
805.25 Кб
Скачать

При выбранном словаре, можно просмотреть с помощью команды два

меню (Рисунок 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