Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. class Populated_locality {
  6. private:
  7. std::string name;
  8. int population;
  9. public:
  10. Populated_locality() {}
  11.  
  12. Populated_locality(std::string name, int population) {
  13. this->name = name;
  14. this->population = population;
  15. }
  16.  
  17. std::string get_name() {
  18. return name;
  19. }
  20.  
  21. int get_population() {
  22. return population;
  23. }
  24. };
  25.  
  26. class Locality_array {
  27. private:
  28. std::vector<Populated_locality> p_l_array;
  29. int length;
  30. public:
  31. Locality_array() {
  32. p_l_array = {};
  33. length = 0;
  34. }
  35.  
  36. void add(Populated_locality obj) {
  37. p_l_array.push_back(obj);
  38. length++;
  39. }
  40. void delete_by_index(int index) {
  41. index--;
  42. p_l_array.erase(p_l_array.begin() + index);
  43. }
  44. void add_by_index(Populated_locality obj, int index) {
  45. index--;
  46. p_l_array.insert(p_l_array.begin() + index, obj);
  47. }
  48. Populated_locality get_by_index(int index) {
  49. if (index >= 0 && index <= this->length) {
  50. return p_l_array[index];
  51. }
  52. else {
  53. std::cout << "все плохо" << '/n';
  54. }
  55.  
  56. }
  57.  
  58. void print() {
  59. int i = 1;
  60. for (Populated_locality n : p_l_array) {
  61. std::cout << i << ' ';
  62. std::cout << n.get_name() << '\n';
  63. std::cout << n.get_population() << '\n';
  64. i++;
  65. }
  66. }
  67. void easy_selection_sort() {
  68.  
  69. int min;
  70. Populated_locality tmp;
  71.  
  72. for (int i = 0; i < length - 1; i++) {
  73. min = i;
  74. for (int j = i + 1; j < length; j++) {
  75. if (p_l_array[j].get_name() < p_l_array[i].get_name())
  76. min = j;
  77. }
  78. tmp = p_l_array[i];
  79. p_l_array[i] = p_l_array[min];
  80. p_l_array[min] = tmp;
  81. }
  82. }
  83. void quick_sort(int begin, int end) {
  84.  
  85. int l = begin, r = end;
  86. std::string piv = p_l_array[(l + r) / 2].get_name();
  87.  
  88. do {
  89.  
  90. while (p_l_array[l].get_name() < piv)
  91. l++;
  92. while (p_l_array[r].get_name() > piv)
  93. r--;
  94. if (l <= r)
  95. std::swap(p_l_array[l++], p_l_array[r--]);
  96.  
  97.  
  98.  
  99. } while (l <= r);
  100. if (begin < r) quick_sort(begin, r);
  101. if (end > l) quick_sort(l, end);
  102.  
  103. }
  104. int simple_search(std::string str) {
  105. for (size_t i = 0; i < this->length; i++) {
  106. if(p_l_array[i].get_name() == str) {
  107. return i;
  108. }
  109. }
  110. return -1;
  111.  
  112. }
  113. int binary_search(std::string str) {
  114. int midd = 0, left = 0, right = this->length;
  115. while (1) {
  116. midd = (left + right) / 2;
  117.  
  118. if (str < p_l_array[midd].get_name()) // если искомое меньше значения в ячейке
  119. right = midd - 1; // смещаем правую границу поиска
  120. else if (str > p_l_array[midd].get_name()) // если искомое больше значения в ячейке
  121. left = midd + 1; // смещаем левую границу поиска
  122. else // иначе (значения равны)
  123. return midd; // функция возвращает индекс ячейки
  124.  
  125. if (left > right) // если границы сомкнулись
  126. return -1;
  127. }
  128.  
  129. }
  130.  
  131.  
  132. std::vector<Populated_locality> get_p_l_array() {
  133. return p_l_array;
  134. }
  135. int get_length() {
  136. return length;
  137. }
  138. };
  139.  
  140. void main_menu(char *ch) {
  141. setlocale(LC_ALL, "Russian");
  142. std::cout << "1 (P)rint - Вывод коллекциина экран." << '\n';
  143. std::cout << "2 (A)dd - Вставка нового объекта." << '\n';
  144. std::cout << "3 (I)nsert - Вставка нового объекта по указанному индексу." << '\n';
  145. std::cout << "4 (D)elete - Удаление объекта по указанному индексу." << '\n';
  146. std::cout << "5 (G)et - Получение объекта поуказанному индексу." << '\n';
  147. std::cout << "6 (S)ize - Получение количества объектов в коллекции." << '\n';
  148. std::cout << "7 (F)ind - Простой поиск объекта по полю «Название населенного пункта»." << '\n';
  149. std::cout << "8 (B)inary find - Бинарный поиск объекта по полю «Название населенного пункта»." << '\n';
  150.  
  151. std::cout << "9 (Q)uick Sort - Сортировка коллекции \"Быстрой сортировкой\"." << '\n';
  152. std::cout << "10 Simpl(e) Sort - Сортировка коллекции \"Сортировка простым выбором\"." << '\n';
  153. std::cin >> *ch;
  154.  
  155. }
  156. void add_in_collection(Locality_array *data_base) {
  157. std::string name;
  158. int population;
  159. std::cout << "Введите название населенного пункта." << '\n';
  160. std::cin >> name;
  161. std::cout << "Введите количество жителей населенного пункта." << '\n';
  162. std::cin >> population;
  163. Populated_locality obj(name, population);
  164. data_base->add(obj);
  165.  
  166. }
  167.  
  168. void add_by_index(Locality_array *data_base) {
  169. std::string name;
  170. int population, index;
  171. std::cout << "Введите название населенного пункта." << '\n';
  172. std::cin >> name;
  173. std::cout << "Введите количество жителей населенного пункта." << '\n';
  174. std::cin >> population;
  175. std::cout << "Введите индекс." << '\n';
  176. std::cin >> index;
  177. Populated_locality obj(name, population);
  178. data_base->add_by_index(obj, index);
  179. }
  180.  
  181. void delete_by_index(Locality_array *data_base) {
  182. int index;
  183. std::cout << "Введите индекс." << '\n';
  184. std::cin >> index;
  185. data_base->delete_by_index(index);
  186. }
  187.  
  188. void binary_search(Locality_array *database) {
  189. int index;
  190. std::string str;
  191. std::cout << "Введите название населенного пункта" << '\n';
  192. std::cin >> str;
  193. index = database->binary_search(str);
  194. std::cout << index << '\n';
  195. std::cout << database->get_by_index(index).get_name() << '\n';
  196. std::cout << database->get_by_index(index).get_population() << '\n';
  197. }
  198. void simple_search(Locality_array *database) {
  199. int index;
  200. std::string str;
  201. std::cout << "Введите название населенного пункта" << '\n';
  202. std::cin >> str;
  203. index = database->simple_search(str);
  204. std::cout << index << '\n';
  205. std::cout << database->get_by_index(index).get_name() << '\n';
  206. std::cout << database->get_by_index(index).get_population() << '\n';
  207. }
  208.  
  209.  
  210. int main() {
  211. Locality_array data_base;
  212. char ch = 0;
  213. while (ch != 'x') {
  214. main_menu(&ch);
  215. switch (ch) {
  216. case 'p':
  217. data_base.print();
  218. break;
  219. case 'a':
  220. add_in_collection(&data_base);
  221. break;
  222. case 's':
  223. std::cout << data_base.get_length() << '\n';
  224. break;
  225. case 'i':
  226. add_by_index(&data_base);
  227. break;
  228. case 'q':
  229. data_base.quick_sort(0, data_base.get_length() - 1);
  230. break;
  231. case 'd':
  232. delete_by_index(&data_base);
  233. break;
  234. case 'b':
  235. binary_search(&data_base);
  236. break;
  237. case 'f':
  238. simple_search(&data_base);
  239. break;
  240. case 'e':
  241. data_base.easy_selection_sort();
  242. break;
  243. }
  244.  
  245. }
  246.  
  247. data_base.print();
  248.  
  249. std::cout << '\n';
  250.  
  251. data_base.print();
  252. int pause;
  253. std::cin >> pause;
  254. getchar();
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement