
Алгоритм работы
ReadV
|
ReadFile
|
|
PrintFile
|
Deleting
|
Process
|
Текст программы
ListV.cpp #include "FormV.h" using namespace std; bool ListNodeV::ReadV(std::ifstream& input, std::ofstream& res) { if (input.eof()) return false; char s = 0; int counter = 0; f_H.head = new ListNodeH; f_H.cur = f_H.head; while (s != '\n') { if (input.eof()) break; input >> noskipws >> s; if (input.eof()) break; if (s == '\n' || s == 0) //!! if (s == '\n') break; f_H.cur->podstroka.massiv[counter % N] = s; ++counter; if (counter % N == 0) { f_H.cur->podstroka.len = N; f_H.cur->next = new ListNodeH; f_H.cur = f_H.cur->next; f_H.count++; }} f_H.cur->podstroka.len = counter % N; return true;} void ListNodeV::PrintV(std::ofstream& res) { f_H.cur = f_H.head; f_H.count = 0; if (f_H.head == nullptr) return; while (f_H.cur != nullptr) { for (int i = 0; i < f_H.cur->podstroka.len; i++) { cout << f_H.cur->podstroka.massiv[i]; res << f_H.cur->podstroka.massiv[i]; } cout << " -> "; res << " -> "; f_H.cur = f_H.cur->next; f_H.count++; } cout << " NULL_H" << endl; res << " NULL_H" << endl; cout << f_H.count; }
main.cpp #pragma once
#include <string> #include <iostream> #include <fstream> #include <iomanip>
static const int N = 10;
|
StrL.h #pragma once #include "ConstN.h"
struct StrL { char massiv[N]; int len = 0; };
ListV.h #pragma once #include "FormH.h"
struct ListNodeV { FormularH f_H; ListNodeV* next = nullptr; ListNodeV* next1 = nullptr; int col; bool ReadV(std::ifstream& input, std::ofstream& res); void PrintV(std::ofstream& res); };
All_func.h #pragma once #include "FormV.h" void function3(FormularV& F1, std::ofstream& res, FormularV& F2, FormularV& F3); void function33(FormularV& F1, std::ofstream& res, FormularV& F2, FormularV& F3); void deleting(FormularV& formularVert, std::ofstream& res);
bool Read_file(std::ifstream& input, std::ofstream& res, FormularV& formularVert); void Process(std::ofstream& res, std::string in_filename, std::string in_filename2); void Print_file(std::ofstream& res, FormularV& formularVert);
ListH.h #pragma once #include "StrL.h" struct ListNodeH { StrL podstroka; ListNodeH* next = nullptr; };
FormH.h #pragma once #include "ListH.h"
struct FormularH { ListNodeH* head = nullptr; ListNodeH* cur = nullptr; ListNodeH* last = nullptr; ListNodeH* prev = nullptr; int count; };
|
FormV #pragma once #include "ListV.h"
struct FormularV { ListNodeV* head = nullptr; ListNodeV* cur = nullptr; ListNodeV* last = nullptr; ListNodeV* prev = nullptr; }; |
ConstN.h #pragma once
#include <string> #include <iostream> #include <fstream> #include <iomanip>
static const int N = 10; |
Process.cpp |
|
#include "ConstN.h" #include "FormV.h" #include "All_func.h" using namespace std;
bool Read_file(std::ifstream& input, std::ofstream& res, FormularV& formularVert) { if (input.eof()) { cout << "SPISOK PUST" << endl; return false;} formularVert.head = new ListNodeV; formularVert.cur = formularVert.head; while (!input.eof()) { if (formularVert.cur->ReadV(input, res)) { formularVert.cur->next = new ListNodeV; formularVert.prev = formularVert.cur; formularVert.cur = formularVert.cur->next; } else break; } if (formularVert.cur->f_H.head == nullptr && formularVert.prev != nullptr) { delete formularVert.cur; formularVert.prev->next = nullptr; }
return true; } void Print_file(std::ofstream& res, FormularV& formularVert) { formularVert.cur = formularVert.head; while (formularVert.cur != nullptr) { formularVert.cur->PrintV(res); cout << endl << "---> " << endl << endl; res << endl << "---> " << endl << endl; formularVert.cur = formularVert.cur->next; } cout << " NULL_V " << endl << endl; ; res << " NULL_V " << endl << endl; ; }
|
void deleting(FormularV& formularVert, std::ofstream& res) { formularVert.cur = formularVert.head; FormularV tmp4; if (formularVert.cur == nullptr) { cout << " Список пуст " << endl; res << " Список пуст " << endl; return; } while (formularVert.cur != nullptr) { FormularH tmp3; formularVert.cur->f_H.cur = formularVert.cur->f_H.head; while (formularVert.cur->f_H.cur != nullptr) { tmp3.cur = formularVert.cur->f_H.cur->next; delete formularVert.cur->f_H.cur; formularVert.cur->f_H.cur = tmp3.cur; } tmp4.cur = formularVert.cur->next; delete formularVert.cur;
formularVert.cur = tmp4.cur; }
}
|
void function33(FormularV& F1, std::ofstream& res, FormularV& F2, FormularV& F3) { int flag_h = 0; int flag_H = 0; int flag4 = 0; F1.cur = F1.head; F1.prev = nullptr; int FLAG = 0; int pop = 1; int rrr = 0; F3.last = nullptr; F3.head = new ListNodeV; // создание 3-его списка F3.cur = F3.head; // занесение головы в текущий элемент if (F1.cur == nullptr) {cout << " пустой верт. список! " << endl; return;} while (F1.cur != nullptr){ cout << "\n\n\n" << pop++ << " слово списка 1\n\n"; F2.cur = F2.head; if (F2.cur == nullptr){ cout << " пустой второй верт. список! " << endl; return; } F2.prev = nullptr; F1.cur->f_H.cur = F1.cur->f_H.head; //F3.cur->f_H.head = new ListNodeH; // СОЗДАНИЕ ГОЛОВЫ ГОРИЗОНТАЛЬНОГО СПИСКА // F3.cur->f_H.cur = F3.cur->f_H.head; // ЗАНЕСЕНИЕ ГОЛОВЫ В ТЕКУЩИЙ int count1f = F1.cur->f_H.count; while (F2.cur != nullptr) { F2.cur->f_H.cur = F2.cur->f_H.head; int count2f = F2.cur->f_H.count; cout << count1f << " " << count2f; if (count1f == count2f){ cout << "ОДИНАКОВАЯ ДЛИНА\n"; int j = 0; while (F1.cur->f_H.cur != nullptr){ for (int i = 0; i < N; i++) { if (F1.cur->f_H.cur->podstroka.massiv[i] == F2.cur->f_H.cur->podstroka.massiv[i]) { flag_h = 1;} else { flag_h = 0; cout << "разные символы\n"; F1.cur->f_H.cur = F1.cur->f_H.head; F2.cur->f_H.cur = F2.cur->f_H.head; break;}} if (flag_h == 1) { flag_H = 1; F1.cur->f_H.cur = F1.cur->f_H.cur->next; F2.cur->f_H.cur = F2.cur->f_H.cur->next;} else { flag_H = 0; break;}}} else{ cout << "РАЗНАЯ ДЛИНА\n"; flag_H = 0;} if (flag_H == 1){ cout << "FFFFFFFодинаковые слова!!!\n"; F1.cur->f_H.cur = F1.cur->f_H.head; F2.cur->f_H.cur = F2.cur->f_H.head; F2.prev = F2.cur; F2.cur = F2.cur->next; FLAG = 10;} else { F1.cur->f_H.cur = F1.cur->f_H.head; F2.cur->f_H.cur = F2.cur->f_H.head; F2.prev = F2.cur; F2.cur = F2.cur->next;}} cout << "\n\n\nСравнение с 3 списком\n\n"; F3.cur = F3.head; while (rrr != 0){
F3.cur->f_H.head = new ListNodeH; // СОЗДАНИЕ ГОЛОВЫ ГОРИЗОНТАЛЬНОГО СПИСКА F3.cur->f_H.cur = F3.cur->f_H.head; // ЗАНЕСЕНИЕ ГОЛОВЫ В ТЕКУЩИЙ F3.cur->f_H.count = F1.cur->f_H.count;
cout << F3.cur->f_H.count << "BBBBBBBBBBBBBBBBB"; while (F1.cur->f_H.cur != nullptr) { //cout << "сравнение символов\n\n"; for (int i = 0; i < N; i++) { F3.cur->f_H.cur->podstroka.massiv[i] = F1.cur->f_H.cur->podstroka.massiv[i]; F3.cur->f_H.cur->podstroka.len = F1.cur->f_H.cur->podstroka.len; //cout << F3.cur->f_H.cur->podstroka.massiv[i] << " " << F1.cur->f_H.cur->podstroka.massiv[i] << "\n"; } F1.cur->f_H.cur = F1.cur->f_H.cur->next; F3.cur->f_H.cur->next = new ListNodeH; F3.cur->f_H.cur = F3.cur->f_H.cur->next; } int j = 0; F3.prev = F3.cur; F3.last = F3.cur; F1.cur->f_H.cur = F1.cur->f_H.head; if (F1.cur->next != nullptr) { F3.cur->next = new ListNodeV; F3.cur = F3.cur->next; F3.cur->f_H.cur = F3.cur->f_H.head; } }
} FLAG = 0; F1.prev = F1.cur; F1.cur = F1.cur->next; } }
|
if (F3.cur->next == nullptr)break; F3.cur->f_H.cur = F3.cur->f_H.head; int count3f = F3.cur->f_H.count; cout << count1f << " " << count3f; if (count1f == count3f){ cout << "ОДИНАКОВАЯ ДЛИНА\n"; int j = 0; while (F1.cur->f_H.cur != nullptr){ for (int i = 0; i < N; i++) { if (F1.cur->f_H.cur->podstroka.massiv[i] == F3.cur->f_H.cur->podstroka.massiv[i]) { flag_h = 1;} else { flag_h = 0; cout << "разные символы\n"; F1.cur->f_H.cur = F1.cur->f_H.head; F3.cur->f_H.cur = F3.cur->f_H.head; break;}} if (flag_h == 1) { flag_H = 1; F1.cur->f_H.cur = F1.cur->f_H.cur->next; F3.cur->f_H.cur = F3.cur->f_H.cur->next;} else { flag_H = 0; break;}}} else{ cout << "РАЗНАЯ ДЛИНА\n"; flag_H = 0;} if (flag_H == 1){ cout << "FFFFFFFодинаковые слова!!!\n"; F1.cur->f_H.cur = F1.cur->f_H.head; F3.cur->f_H.cur = F3.cur->f_H.head; F3.prev = F3.cur; F3.cur = F3.cur->next; FLAG = 20;} else { F1.cur->f_H.cur = F1.cur->f_H.head; F3.cur->f_H.cur = F3.cur->f_H.head; F3.prev = F3.cur; F3.cur = F3.cur->next;}} if (FLAG == 0) { rrr++; cout << "Занесение в 3 список\n\n"; if (F3.last) { F3.cur = F3.last->next; F3.cur->f_H.head = new ListNodeH; // СОЗДАНИЕ ГОЛОВЫ ГОРИЗОНТАЛЬНОГО СПИСКА F3.cur->f_H.cur = F3.cur->f_H.head; // ЗАНЕСЕНИЕ ГОЛОВЫ В ТЕКУЩИЙ F3.cur->f_H.count = F1.cur->f_H.count; cout << F3.cur->f_H.count << "BBBBBBBBBBBBBBBBB"; while (F1.cur->f_H.cur != nullptr){ //cout << "сравнение символов\n\n"; for (int i = 0; i < N; i++) { F3.cur->f_H.cur->podstroka.massiv[i] = F1.cur->f_H.cur->podstroka.massiv[i]; F3.cur->f_H.cur->podstroka.len = F1.cur->f_H.cur->podstroka.len; //cout << F3.cur->f_H.cur->podstroka.massiv[i] << " " << F1.cur->f_H.cur->podstroka.massiv[i] << "\n";} F1.cur->f_H.cur = F1.cur->f_H.cur->next; F3.cur->f_H.cur->next = new ListNodeH; F3.cur->f_H.cur = F3.cur->f_H.cur->next;} int j = 0; F3.prev = F3.cur; F3.last = F3.cur; F1.cur->f_H.cur = F1.cur->f_H.head; if (F1.cur->next != nullptr) { F3.cur->next = new ListNodeV; F3.cur = F3.cur->next; F3.cur->f_H.cur = F3.cur->f_H.head;} } else {
void Process(std::ofstream& res, std::string in_filename, std::string in_filename2) { ifstream input; ifstream input2; input.open(in_filename, std::ios_base::in); input2.open(in_filename2, std::ios_base::in); FormularV f1; FormularV f2; FormularV f3; cout << "Началась обработка " << in_filename << "\n\n"; res << "Началась обработка " << in_filename << "\n\n"; if (Read_file(input, res, f1)) { cout << "ПЕРВЫЙ СПИСОК: " << "\n\n"; res << "ПЕРВЫЙ СПИСОК: " << "\n\n"; Print_file(res, f1); } if (Read_file(input2, res, f2)) { cout << "ВТОРОЙ СПИСОК: " << "\n\n"; res << "ВТОРОЙ СПИСОК: " << "\n\n"; Print_file(res, f2); } cout << " список 2 удален " << "\n"; res << " список 2 удален " << "\n";
function33(f1, res, f2, f3);
cout << "\n\n"; cout << "\n\n ТРЕТИЙ СПИСОК\n\n"; res << "\n\n ТРЕТИЙ СПИСОК\n\n";
Print_file(res, f3);
deleting(f1, res); cout << "\nСписок 1 удален\n\n"; deleting(f2, res); cout << "\nСписок 2 удален\n\n"; deleting(f3, res); // cout << "\nСписок 3 удален\n\n";
}
|