Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.48 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <time.h>
  4. #include <fstream>
  5. #include <string>
  6. #define clr() system("cls")
  7. #define pausep() system("pause")
  8.  
  9. struct listD
  10. {
  11. listD* next, * prev;
  12. int data;
  13. };
  14.  
  15. struct listD* head;
  16.  
  17. void beginningPhrase()
  18. {
  19. clr();
  20. std::cout << "<Prosze podac liczbe do ktorej przypisany jest punkt a nastepnie zatwierdzic enterem>" << std::endl;
  21. };
  22.  
  23. void phraseMenu1()
  24. {
  25. std::cout << "Prosze wybrac sposob tworzenia tablicy:" << std::endl;
  26. std::cout << "1. Automatyczna generacja n-elementowej tablicy ( Podaj n, podaj max wartosc elementow )" << std::endl;
  27. std::cout << "2. Reczne wpisanie kazdego elementu do n-elementowej tablicy ( Podaj n, podaj n elementow )" << std::endl;
  28. std::cout << "3. Wczytaj tablice z pliku tekstowego ( *.txt ) ( Podaj nazwe pliku tekstowego )" << std::endl;
  29. std::cout << "4. Wyjscie" << std::endl;
  30. };
  31.  
  32. void phraseMenu2()
  33. {
  34. std::cout << "1. Dodanie elementu na poczatek listy" << std::endl;
  35. std::cout << "2. Dodanie elementu na koniec listy" << std::endl;
  36. std::cout << "3. Dodanie n-tego elementu ( w miejsce n ( n jest wieksze od 0 i mniejsze od liczby elementow ) zostaje dodany element a nastepne zostaja przesuniete o 1)" << std::endl;
  37. std::cout << "4. Usuniecie elementu z poczatku listy" << std::endl;
  38. std::cout << "5. Usuniecie elementu z konca listy" << std::endl;
  39. std::cout << "6. Usuniecie n-tego elementu ( w miejsce n ( n jest wieksze od 0 i mniejsze od liczby elementow ) zostaje usuniety element a nastepne zostaja przesuniete o 1)" << std::endl;
  40. std::cout << "7. Przesortowanie listy wzgledem wartosci" << std::endl;
  41. std::cout << "8. Zapisanie listy do pliku tekstowego ( *.txt ) ( Podaj nazwe pliku tekstowego )" << std::endl;
  42. std::cout << "9. Wyswietl liste w konsoli" << std::endl;
  43. std::cout << "0. Wyjscie" << std::endl;
  44. };
  45.  
  46. int counter()
  47. {
  48. int count = 0;
  49. struct listD* ptr;
  50. ptr = head;
  51. while (ptr != NULL)
  52. {
  53. count++;
  54. ptr = ptr->next;
  55. }
  56. return count;
  57. };
  58.  
  59. void addElementAt0(int newdata)
  60. {
  61. struct listD* newListD = (struct listD*) malloc(sizeof(struct listD));
  62. newListD->data = newdata;
  63. newListD->prev = NULL;
  64. newListD->next = head;
  65. if (head != NULL)
  66. head->prev = newListD;
  67. head = newListD;
  68. };
  69.  
  70. void addElementAtEnd(int newdata)
  71. {
  72. struct listD* newListD = (struct listD*) malloc(sizeof(struct listD));
  73. struct listD* temp;
  74. newListD->data = newdata;
  75. newListD->prev = head;
  76. newListD->next = NULL;
  77. if (head == NULL)
  78. {
  79. newListD->prev = NULL;
  80. newListD->next = NULL;
  81. head = newListD;
  82. }
  83. else
  84. {
  85. temp = head;
  86. while (temp->next != NULL)
  87. {
  88. temp = temp->next;
  89. }
  90. temp->next = newListD;
  91. newListD->prev = temp;
  92. newListD->next = NULL;
  93. }
  94. };
  95.  
  96. void addElementAtN(int newdata, int num)
  97. {
  98. struct listD* newListD = (struct listD*) malloc(sizeof(struct listD));
  99. struct listD* temp;
  100. int count = counter();
  101. if (num > 0 && num < count)
  102. {
  103. if (num == 1) addElementAt0(newdata);
  104. else
  105. {
  106. temp = head;
  107. for (int i = 1; i < num; i++)
  108. {
  109. temp = temp->next;
  110. }
  111. newListD->data = newdata;
  112. newListD->next = temp;
  113. newListD->prev = temp->prev;
  114. temp->prev->next = newListD;
  115. temp->prev = newListD;
  116. }
  117. }
  118. else
  119. {
  120. if (num == count)
  121. addElementAtEnd(newdata);
  122. else
  123. {
  124. clr();
  125. std::cout << "Numer wpisywanego elementu nie nalezy do liczby elementow";
  126. pausep();
  127. }
  128. }
  129.  
  130. };
  131.  
  132. void delElementAt0()
  133. {
  134. struct listD* temp;
  135. temp = head;
  136. if (temp->next != NULL)
  137. {
  138. head = head->next;
  139. temp->next->prev = NULL;
  140. free(temp);
  141. }
  142. else
  143. {
  144. free(temp);
  145. std::cout << "Usunieto jedyny istniejacy element z listy" << std::endl;
  146. pausep();
  147. }
  148. };
  149.  
  150. void delElementAtEnd()
  151. {
  152. struct listD* temp;
  153. temp = head;
  154. while (temp->next != NULL)
  155. {
  156. temp = temp->next;
  157. }
  158. if (temp->prev != NULL)
  159. {
  160. temp->prev->next = NULL;
  161. free(temp);
  162. }
  163. else
  164. {
  165. free(temp);
  166. std::cout << "Usunieto jedyny istniejacy element z listy" << std::endl;
  167. pausep();
  168. }
  169. };
  170.  
  171. void delElementAtN(int num)
  172. {
  173. struct listD* temp;
  174. struct listD* temp2;
  175. int count = counter();
  176. if (num > 0 && num < count)
  177. {
  178. if (num == 1)
  179. delElementAt0();
  180. else
  181. {
  182. temp = head;
  183. for (int i = 1; i < num; i++)
  184. {
  185. temp = temp->next;
  186. }
  187. temp2 = temp->next;
  188. temp->prev->next = temp2;
  189. temp2->prev = temp;
  190. free(temp);
  191. }
  192. }
  193. else
  194. {
  195. if (num == count)
  196. delElementAtEnd();
  197. else
  198. {
  199. clr();
  200. std::cout << "Numer wpisywanego elementu nie nalezy do liczby elementow";
  201. pausep();
  202. }
  203. }
  204. };
  205. void sortList()
  206. {
  207. struct listD* temp;
  208. int count = counter();
  209. for (int i = 0; i < count; i++)
  210. {
  211. temp = head;
  212. for (int j = 0; j < count - 1; j++)
  213. {
  214. if (temp->data > temp->next->data) std::swap(temp->next->data, temp->data);
  215. temp = temp->next;
  216. }
  217. }
  218. };
  219.  
  220. void autoGenList()
  221. {
  222. int n, x;
  223. clr();
  224. std::cout << "Podaj liczbe elementow: ";
  225. std::cin >> n;
  226. clr();
  227. std::cout << "Podaj ograniczenie wielkosci elementow: ";
  228. std::cin >> x;
  229. for (int i = 0; i < n; i++)
  230. addElementAtEnd(rand() % x);
  231. };
  232.  
  233. void displayList()
  234. {
  235. struct listD* ptr;
  236. ptr = head;
  237. if (ptr != NULL)
  238. {
  239. while (ptr != NULL)
  240. {
  241. std::cout << ptr->data << " ";
  242. ptr = ptr->next;
  243. }
  244. }
  245. else
  246. {
  247. clr();
  248. std::cout << "Lista jest pusta";
  249. pausep();
  250. }
  251. };
  252.  
  253. void iFileList()
  254. {
  255. std::string x, y;
  256. std::cout << "Podaj nazwe pliku: ";
  257. std::cin >> x;
  258. x = x + ".txt";
  259. std::ifstream input(x);
  260. while (!input.eof())
  261. {
  262. input >> y;
  263. addElementAtEnd(std::stoi(y));
  264. }
  265. input.close();
  266. };
  267.  
  268. void oFileList()
  269. {
  270. std::string x, y;
  271. std::cout << "Podaj nazwe pliku: ";
  272. std::cin >> x;
  273. x = x + ".txt";
  274. std::ofstream output(x);
  275. struct listD* ptr;
  276. ptr = head;
  277. while (ptr != NULL)
  278. {
  279. output << ptr->data << std::endl;
  280. ptr = ptr->next;
  281. }
  282. output.close();
  283. };
  284.  
  285. void quit()
  286. {
  287. exit(0);
  288. };
  289.  
  290. void clearList()
  291. {
  292. while (head->next != NULL)
  293. {
  294. delElementAt0();
  295. }
  296. };
  297.  
  298. void menu1(int x)
  299. {
  300. int n;
  301. switch (x)
  302. {
  303. case 1:
  304. autoGenList();
  305. break;
  306. case 2:
  307. clr();
  308. std::cout << "Podaj liczbe elementow: ";
  309. std::cin >> n;
  310. int num;
  311. for (int i = 0; i < n; i++)
  312. {
  313. clr();
  314. std::cout << "Podaj " << i + 1 << " element: ";
  315. std::cin >> num;
  316. addElementAtEnd(num);
  317. }
  318. break;
  319. case 3:
  320. iFileList();
  321. break;
  322. case 4:
  323. quit();
  324. break;
  325. }
  326. };
  327.  
  328. void menu2(int x)
  329. {
  330. int n, m;
  331. switch (x)
  332. {
  333. case 1:
  334. clr();
  335. std::cout << "Podaj element: ";
  336. std::cin >> n;
  337. addElementAt0(n);
  338. break;
  339. case 2:
  340. clr();
  341. std::cout << "Podaj element: ";
  342. std::cin >> n;
  343. addElementAtEnd(n);
  344. break;
  345. case 3:
  346. clr();
  347. std::cout << "Podaj numer elementu: ";
  348. std::cin >> n;
  349. clr();
  350. std::cout << "Podaj element: ";
  351. std::cin >> m;
  352. addElementAtN(m, n);
  353. break;
  354. case 4:
  355. delElementAt0();
  356. break;
  357. case 5:
  358. delElementAtEnd();
  359. break;
  360. case 6:
  361. clr();
  362. std::cout << "Podaj numer elementu: ";
  363. std::cin >> n;
  364. delElementAtN(n);
  365. break;
  366. case 7:
  367. sortList();
  368. break;
  369. case 8:
  370. oFileList();
  371. break;
  372. case 9:
  373. clr();
  374. displayList();
  375. pausep();
  376. break;
  377. case 10:
  378. clearList();
  379. break;
  380. case 0:
  381. quit();
  382. break;
  383. }
  384. };
  385.  
  386. void menuVoids1()
  387. {
  388. int x;
  389. beginningPhrase();
  390. phraseMenu1();
  391. std::cin >> x;
  392. menu1(x);
  393. };
  394.  
  395. void menuVoids2()
  396. {
  397. int x;
  398. beginningPhrase();
  399. phraseMenu2();
  400. std::cin >> x;
  401. menu2(x);
  402. };
  403.  
  404. int main()
  405. {
  406. bool b = true;
  407. srand(time(NULL));
  408. menuVoids1();
  409. while (b)
  410. {
  411. menuVoids2();
  412. };
  413. return 0;
  414. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement