Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая_Булай.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
65.21 Кб
Скачать

2.2. Реализация программы

Как уже было написано программа реализована на с++ с помощью библиотеки stl. Также используются библиотека «fstream» для работы с файлами, библиотека «string» для оптимизации работы со строками.

Методы реализованные в программе:

  1. Программная реализация алгоритма обработки текста

  2. Освобождение слов текста от знаков препинания

  3. Нахождение слов, обозначающих цвета

  4. Вывод “кубиков” на экран

Программная реализация алгоритма обработки текста:

void Input(string filename) //Ввод текста из файла

{

string p;

ifstream in(filename);

while(!in.eof())

{

in >> p;

massiv.push_back(p);

}

in.close();

}

void LibraryInput() //Ввод из файла библиотеки корней

{

string p;

ifstream in("library.txt");

while(!in.eof())

{

in >> p;

library.push_back(p);

}

in.close();

}

void Print() //Вывод текста на консоль

{

for(unsigned int i = 0; i < massiv.size(); i++)

{

cout<<massiv[i]<<" ";

}

cout<<endl;

}

Освобождение слов от знаков препинания:

void WordCorrector() //Удаление знаков препинания

{

char punct[]={'.',',','!','?'};

for(unsigned int i = 0; i < massiv.size(); i++)

{

for(unsigned int j = 0; j < sizeof(punct); j++)

{

if(massiv[i][massiv[i].length()-1]==punct[j])

{

massiv[i].erase(massiv[i].size()-1, massiv[i].size());

}

}

}

}

Нахождение слов, обозначающих цвета:

void ColorDetector() //Нахождение словоформ цветов

{

string str;

for(unsigned int i = 0; i < massiv.size(); i++)

{

for(unsigned int j = 0; j < massiv[i].length(); j++)

{

for(unsigned int k = 0; k < library.size(); k++)

{

str = massiv[i].substr(j, library[k].length());

if(str == library[k])

{

line.push_back(ColorFind(str)); //Заполнение вектора цветов значениями из "ColorFind()"

}

}

}

}

}

ConsoleColor ColorFind(string str) //Постановка соответствия цветам

{

if((str=="Черн") || (str=="черн") || (str=="Чёрн") || (str=="чёрн"))

{

return Black;

}

else

if((str=="Син") || (str=="син"))

{

return Blue;

}

else

if((str=="Сер") || (str=="сер"))

{

return DarkGray;

}

else

if((str=="Коричн") || (str=="коричн"))

{

return Brown;

}

else

if((str=="Красн") || (str=="красн") || (str=="Бордов") || (str=="бордов"))

{

return Red;

}

else

if((str=="Фиолетов") || (str=="фиолетов"))

{

return Magenta;

}

else

if((str=="Желт") || (str=="желт") || (str=="Жёлт") || (str=="жёлт"))

{

return Yellow;

}

else

if((str=="Зелен") || (str=="зелен") || (str=="Зелён") || (str=="зелён"))

{

return Green;

}

else

if((str=="Розов") || (str=="розов"))

{

return LightMagenta;

}

else

if((str=="Бел") || (str=="бел"))

{

return White;

}

else

if((str=="Голуб") || (str=="голуб"))

{

return Cyan;

}

}

Вывод «кубиков» на экран:

void PrintLine() //Отрисовка "квадратиков" на консоли

{

char item = 219;

for(unsigned int i = 0; i < line.size(); i++)

{

SetColor(line[i], Black);

cout << item;

}

SetColor(LightGray, Black);

}

void SetColor(ConsoleColor text, ConsoleColor background) //Смена цвета шрифта

{

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));

}

ЗАКЛЮЧЕНИЕ

В ходе работы над проектом было разработано приложение, позволяющее получить цветовой портрет художественного произведения. Используя эту разработку, мы можем получить графическое изображение, которое, возможно, позволит сформировать у читателя первое впечатление о содержании и эмоциональном настроении произведения. Но на самом деле более полную и информацию об эмоциональном содержании текста можно получить, только углубившись и проанализировав филологические исследования по этой теме. Существует ряд филологических исследований, в которых отмечается, что каждому «цветному слову» можно поставить в соответствие числовое значение, обозначающее его вклад в определенную эмоцию.

В будущем, на основе этих исследований, можно будет попытаться вычислить числовое значение каждой эмоции, встречающейся в тексте. И возможно, когда-нибудь в магазинах появятся книги, на которые будет нанесен «цветовой штрих-код», по которому можно будет судить об их содержании.

Использованная литература:

  1. Справочная система языка С++

  2. Конспект лекций по дисциплине ОАиП

  3. ПавловскаяТ.А., Щупак Ю.А. - C++. Объектно-ориентированное программирование. Практикум - Санкт – Петербург, «Питер», 2006 г

  4. Форум начинающих и профессиональных программистов - http://www.cyberforum.ru.

Приложение 1: Программная реализация на C++

#include <iostream>

#include <Windows.h>

#include <string>

#include <vector>

#include <fstream>

using namespace std;

enum ConsoleColor //Перечисление цветов

{

Black = 0,

Blue = 1,

Green = 2,

Cyan = 3,

Red = 4,

Magenta = 5,

Brown = 6,

LightGray = 7,

DarkGray = 8,

LightBlue = 9,

LightGreen = 10,

LightCyan = 11,

LightRed = 12,

LightMagenta = 13,

Yellow = 14,

White = 15

};

vector <string> massiv;

vector <string> library;

vector <ConsoleColor> line;

void Input(string filename) //Ввод текста из файла

{

string p;

ifstream in(filename);

while(!in.eof())

{

in >> p;

massiv.push_back(p);

}

in.close();

}

void LibraryInput() //Ввод из файла библиотеки корней

{

string p;

ifstream in("library.txt");

while(!in.eof())

{

in >> p;

library.push_back(p);

}

in.close();

}

void Print() //Вывод текста на консоль

{

for(unsigned int i = 0; i < massiv.size(); i++)

{

cout<<massiv[i]<<" ";

}

cout<<endl;

}

void WordCorrector() //Удаление знаков препинания

{

char punct[]={'.',',','!','?'};

for(unsigned int i = 0; i < massiv.size(); i++)

{

for(unsigned int j = 0; j < sizeof(punct); j++)

{

if(massiv[i][massiv[i].length()-1]==punct[j])

{

massiv[i].erase(massiv[i].size()-1, massiv[i].size());

}

}

}

}

ConsoleColor ColorFind(string str) //Постановка соответствия цветам

{

if((str=="Черн") || (str=="черн") || (str=="Чёрн") || (str=="чёрн"))

{

return Black;

}

else

if((str=="Син") || (str=="син"))

{

return Blue;

}

else

if((str=="Сер") || (str=="сер"))

{

return DarkGray;

}

else

if((str=="Коричн") || (str=="коричн"))

{

return Brown;

}

else

if((str=="Красн") || (str=="красн") || (str=="Бордов") || (str=="бордов"))

{

return Red;

}

else

if((str=="Фиолетов") || (str=="фиолетов"))

{

return Magenta;

}

else

if((str=="Желт") || (str=="желт") || (str=="Жёлт") || (str=="жёлт"))

{

return Yellow;

}

else

if((str=="Зелен") || (str=="зелен") || (str=="Зелён") || (str=="зелён"))

{

return Green;

}

else

if((str=="Розов") || (str=="розов"))

{

return LightMagenta;

}

else

if((str=="Бел") || (str=="бел"))

{

return White;

}

else

if((str=="Голуб") || (str=="голуб"))

{

return Cyan;

}

}

void ColorDetector() //Нахождение словоформ цветов

{

string str;

for(unsigned int i = 0; i < massiv.size(); i++)

{

for(unsigned int j = 0; j < massiv[i].length(); j++)

{

for(unsigned int k = 0; k < library.size(); k++)

{

str = massiv[i].substr(j, library[k].length());

if(str == library[k])

{

line.push_back(ColorFind(str)); //Заполнение вектора цветов значениями из "ColorFind()"

}

}

}

}

}

void SetColor(ConsoleColor text, ConsoleColor background) //Смена цвета шрифта

{

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));

}

void PrintLine() //Отрисовка "квадратиков" на консоли

{

char item = 219;

for(unsigned int i = 0; i < line.size(); i++)

{

SetColor(line[i], Black);

cout << item;

}

SetColor(LightGray, Black);

}

int main()

{

char item = 219;

string filename;

cout << "Input file name: " << endl;

cin >> filename;

Input(filename);

cout << "Text is loaded." << endl;

WordCorrector();

LibraryInput();

cout << "Library is loaded." << endl;

cout << "Please wait..." << endl;

ColorDetector();

PrintLine();

cout << endl;

return 0;

}

15