ChameL1oN

AiPMarina2

Apr 22nd, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <locale>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. ifstream f("input.txt", ios::in);
  9. int n; // Кол-во записей в списке
  10.  
  11.  
  12. //Входные данные
  13. // 1 строка - кол-во записей
  14. // <слово> <кол-во строк описания>
  15. // каждая строка описания в отдельной строке
  16.  
  17.  
  18. struct Data{
  19. string Slovo; //Слово для определения
  20. int count; // Кол-во строк поясняющего текста
  21. string* txt = new string[5]; //Массив строк поясняющего текста
  22. };
  23.  
  24. struct point{
  25. Data date; //Информационное поле узла в виде структуры
  26. point* next; //Указатель на следующий узел списка
  27. };
  28.  
  29.  
  30. void print_point(point* beg){ //Вывод информации по одному элементу
  31. cout << beg->date.Slovo << endl;
  32. for (int i = 0; i < beg->date.count + 1; i++){
  33. cout << beg->date.txt[i] << endl;
  34. }
  35. cout << endl;
  36. }
  37.  
  38. void print_list(point* beg) //Вывод всех слов в списке
  39. //печать списка
  40. {
  41. int num = 0;
  42. point* p = beg;//начало списка
  43. while (p != 0)
  44. {
  45. num++;
  46. cout << p->date.Slovo << " - " << num << endl;
  47. p = p->next;//переход к следующему элементу
  48. }
  49. cout << endl;
  50. cout << endl;
  51. }
  52.  
  53. point* make_list(int n)
  54. {
  55. point*beg;//указатель на первый элемент
  56. point*p, *r;//вспомогательные указатели
  57. string str;
  58. string slovo;
  59. int ntxt;
  60. string s, s2;
  61. int a;
  62. beg = new(point);//выделяем память под первый элемент
  63. f >> slovo;
  64. f >> s; //Считываем кол-во поясняющих строк + проверка на ошибку при вводе
  65. a = atoi(s.c_str());
  66. s2 = to_string(a);
  67. if (s == s2){
  68. ntxt = a;
  69. }
  70. else{
  71. cout << "Ошибка ввода кол-ва строк в первом элементе " << endl;
  72. exit(0);
  73. }
  74. beg->date.Slovo = slovo;
  75. beg->date.count = ntxt;
  76. for (int i = 0; i < beg->date.count+1; i++){
  77. getline(f, str);
  78. beg->date.txt[i] = str;
  79. }
  80.  
  81. beg->next = 0;//обнуляем адресное поле
  82. //ставим на этот элемент указатель p (последний элемент)
  83. p = beg;
  84. for (int i = 0; i < n - 1; i++)
  85. {
  86. r = new(point);//создаем новый элемент
  87. f >> slovo;
  88. f >> s; //Считываем кол-во поясняющих строк + проверка на ошибку при вводе
  89. a = atoi(s.c_str());
  90. s2 = to_string(a);
  91. if (s == s2){
  92. ntxt = a;
  93. }
  94. else{
  95. cout << "Ошибка ввода кол-ва строк в элементе " << i+2 << endl;
  96. exit(0);
  97. }
  98. r->date.Slovo = slovo;
  99. r->date.count = ntxt;
  100. for (int i = 0; i < r->date.count+1; i++){
  101. getline(f, str);
  102. r->date.txt[i] = str;
  103. }
  104. r->next = 0;
  105. p->next = r;//связываем p и r
  106. //ставим на r указатель p (последний элемент)
  107. p = r;
  108. }
  109. return beg;//возвращаем beg как результат функции
  110. }
  111.  
  112. void print(point* beg,int numb){ //Проход по списку до нужного элемента и вызов функции для вывода поясняющего текста
  113. point* p;
  114. p = beg;
  115. int j = 0;
  116. while (j < numb && p->next != NULL){
  117. p = p->next;
  118. j++;
  119. }
  120. if (j == numb){
  121. print_point(p);
  122. }
  123. }
  124.  
  125. void Programm(){
  126. bool end = false, end2 = false;
  127. int slovo;
  128. char s, switc;
  129. string d, d2;
  130. int a;
  131. f >> d;
  132. a = atoi(d.c_str());
  133. d2 = to_string(a);
  134. if (d == d2){
  135. n = a;
  136. }
  137. else{
  138. cout << "Ошибка ввода кол-ва слов" << endl;
  139. exit(0);
  140. }
  141. point* beg;
  142. beg = make_list(n);
  143. cout << "Исходный список : " << endl;
  144. print_list(beg);
  145. do{
  146. cout << "Выберите операцию" << endl;
  147. cout << "1 - Получить справку по необходимому слову" << endl;
  148. cout << "2 - Вывести список всех слов в базе" << endl;
  149. cout << "3 - Выход" << endl;
  150. cin >> switc;
  151. switch (switc)
  152. {
  153. case ('1') :
  154. cout << endl;
  155. do{
  156. cout << "Введите номер слова для получения справки" << endl;
  157. cin >> d;
  158. a = atoi(d.c_str());
  159. d2 = to_string(a);
  160. if (d == d2){
  161. slovo = a;
  162. if (slovo <= n && slovo > 0){
  163. print(beg, slovo - 1);
  164. cout << endl;
  165. }
  166. else{ cout << "Слова с таким номером нет" << endl; }
  167. }
  168. else{
  169. cout << "Вы ввели не число" << endl;
  170. }
  171. do{
  172. cout << "Хотите получить ещё справку? y/n" << endl;
  173. cin >> s;
  174. if (s == 'y' || s == 'Y'){ end = false; break; }
  175. else if (s == 'n' || s == 'N'){ end = true; }
  176. else{ cout << "Ошибка ввода ответа" << endl; }
  177. } while (!end);
  178. } while (!end);
  179. break;
  180. case('2') : cout << endl; print_list(beg); cout << endl; break;
  181. case('3') : end2 = true; break;
  182. default:
  183. break;
  184. }
  185. } while (!end2);
  186. }
  187.  
  188. void main(){
  189. setlocale(LC_ALL, "rus");
  190. Programm();
  191. cout << endl;
  192. }
Advertisement
Add Comment
Please, Sign In to add comment