ChameL1oN

AiPMarina

Apr 5th, 2015
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 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. cout << endl;
  48. p = p->next;//переход к следующему элементу
  49. }
  50. }
  51.  
  52. point* make_list(int n)
  53. {
  54. point*beg;//указатель на первый элемент
  55. point*p, *r;//вспомогательные указатели
  56. string str;
  57. string slovo;
  58. int ntxt;
  59. beg = new(point);//выделяем память под первый элемент
  60. f >> slovo;
  61. f >> ntxt;
  62. beg->date.Slovo = slovo;
  63. beg->date.count = ntxt;
  64. for (int i = 0; i < beg->date.count+1; i++){
  65. getline(f, str);
  66. beg->date.txt[i] = str;
  67. }
  68.  
  69. beg->next = 0;//обнуляем адресное поле
  70. //ставим на этот элемент указатель p (последний элемент)
  71. p = beg;
  72. for (int i = 0; i < n - 1; i++)
  73. {
  74. r = new(point);//создаем новый элемент
  75. f >> slovo;
  76. f >> ntxt;
  77. r->date.Slovo = slovo;
  78. r->date.count = ntxt;
  79. for (int i = 0; i < r->date.count+1; i++){
  80. getline(f, str);
  81. r->date.txt[i] = str;
  82. }
  83. r->next = 0;
  84. p->next = r;//связываем p и r
  85. //ставим на r указатель p (последний элемент)
  86. p = r;
  87. }
  88. return beg;//возвращаем beg как результат функции
  89. }
  90.  
  91. void print(point* beg,int numb){
  92. point* p;
  93. p = beg;
  94. int j = 0;
  95. while (j < numb && p->next != NULL){
  96. p = p->next;
  97. j++;
  98. }
  99. if (j == numb){
  100. print_point(p);
  101. }
  102. }
  103.  
  104. void main(){
  105. setlocale(LC_ALL, "rus");
  106. bool end = false;
  107. int slovo;
  108. char s;
  109. f >> n;
  110. point* beg;
  111. beg = make_list(n);
  112. print_list(beg);
  113. do{
  114. cout << "Введите номер слова для получения справки" << endl;
  115. cin >> slovo;
  116. if (slovo <= n && slovo > 0){
  117. print(beg, slovo-1);
  118. cout << endl;
  119. }
  120. else{ cout << "Слова с таким номером нет" << endl; }
  121. do{
  122. cout << "Хотите получить ещё справку? y/n" << endl;
  123. cin >> s;
  124. if (s == 'y' || s == 'Y'){ end = false; break; }
  125. else if (s == 'n' || s == 'N'){ end = true; }
  126. else{ cout << "Ошибка ввода ответа" << endl; }
  127. } while (!end);
  128. } while (!end);
  129.  
  130.  
  131.  
  132. cout << endl;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment