Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <iomanip>
  4. #include <algorithm>
  5. #include <conio.h>
  6. #include <cmath>
  7. using namespace std;
  8.  
  9. // int licznik=0;
  10.  
  11. struct Wezel
  12. {
  13. long double liczba;
  14. Wezel* lewy;
  15. Wezel* prawy;
  16. };
  17.  
  18. Wezel* nowy(long double n)
  19. {
  20. Wezel *tworz = new Wezel;
  21. tworz->liczba = n;
  22. tworz->lewy = tworz->prawy = NULL;
  23. return tworz;
  24. }
  25.  
  26. bool szukaj(Wezel* korzen, long double n, bool *wystepuje)
  27. {
  28. if(korzen!=NULL)
  29. {
  30. if(korzen->liczba==n)
  31. {
  32. *wystepuje=true;
  33. }
  34. else
  35. {
  36. if(korzen->liczba<n)
  37. {
  38. szukaj(korzen->prawy, n, wystepuje);
  39. }
  40. else
  41. {
  42. szukaj(korzen->lewy, n, wystepuje);
  43. }
  44. }
  45. }
  46. return *wystepuje;
  47. }
  48.  
  49. void calkowita(Wezel* korzen, long double n, int *ile)
  50. {
  51. if(korzen!=NULL)
  52. {
  53. if((int)korzen->liczba==n)
  54. {
  55. *ile+=1;
  56. }
  57. calkowita(korzen->prawy, n, ile);
  58. calkowita(korzen->lewy, n, ile);
  59. }
  60. }
  61.  
  62. void wypisz(Wezel* korzen, string odstep, string strona)
  63. {
  64. if(korzen!=NULL)
  65. {
  66. if(strona=="")
  67. {
  68. cout<<"K: "<<korzen->liczba<<endl;
  69. odstep=odstep+" ";
  70. }
  71. else
  72. {
  73. if(strona=="l")
  74. {
  75. cout<<odstep+" L: "<<korzen->liczba<<endl;
  76. odstep=odstep+" ";
  77. }
  78. else
  79. {
  80. if(strona=="p")
  81. {
  82. cout<<odstep+" P: "<<korzen->liczba<<endl;
  83. odstep=odstep+" ";
  84. }
  85. }
  86. }
  87.  
  88. strona='p';
  89. wypisz(korzen->prawy, odstep, strona);
  90. strona='l';
  91. wypisz(korzen->lewy, odstep, strona);
  92. }
  93. }
  94.  
  95. Wezel* wstaw(Wezel* korzen, long double n)
  96. {
  97. if(korzen==NULL)
  98. {
  99. return nowy(n);
  100. }
  101.  
  102. if (n<korzen->liczba)
  103. {
  104. korzen->lewy = wstaw(korzen->lewy, n);
  105. }
  106. else
  107. {
  108. if (n>korzen->liczba)
  109. {
  110. korzen->prawy = wstaw(korzen->prawy, n);
  111. }
  112. }
  113.  
  114. return korzen;
  115. }
  116.  
  117. Wezel* nastepnik(Wezel* korzen)
  118. {
  119. Wezel* pom = korzen;
  120.  
  121. while (pom && pom->lewy != NULL)
  122. {
  123. pom = pom->lewy;
  124. }
  125.  
  126. return pom;
  127. }
  128.  
  129. Wezel* usun(Wezel* korzen, long double n)
  130. {
  131. if(korzen==NULL)
  132. {
  133. return korzen;
  134. }
  135.  
  136. if(n<korzen->liczba)
  137. {
  138. korzen->lewy = usun(korzen->lewy, n);
  139. }
  140. else
  141. {
  142. if(n>korzen->liczba)
  143. {
  144. korzen->prawy = usun(korzen->prawy, n);
  145. }
  146. else
  147. {
  148. // 1 dziecko lub bez
  149. if(korzen->lewy == NULL)
  150. {
  151. Wezel* pom = korzen->prawy;
  152. delete korzen;
  153. return pom;
  154. }
  155. else
  156. {
  157. if(korzen->prawy == NULL)
  158. {
  159. Wezel* pom = korzen->lewy;
  160. delete korzen;
  161. return pom;
  162. }
  163. }
  164.  
  165. // 2 dzieci
  166. Wezel* pom = nastepnik(korzen->prawy);
  167. korzen->liczba = pom->liczba;
  168. korzen->prawy = usun(korzen->prawy, pom->liczba);
  169. }
  170. }
  171.  
  172. return korzen;
  173. }
  174.  
  175.  
  176. int main()
  177. {
  178. ifstream wej("inm.txt");
  179. ofstream wyj("out.txt");
  180.  
  181. int x, ileLiczb=0;
  182. int *ile=&ileLiczb;
  183. bool wyst=false;
  184. bool *wystepuje=&wyst;
  185. char znak, f;
  186. string odstep="", t="", strona="";
  187. long double n;
  188. Wezel* korzen = NULL;
  189. Wezel* pom = korzen;
  190.  
  191. // cout<<setw(16);
  192. cout<<setprecision(16);
  193.  
  194. cout<<"\n\n [1]";
  195. cout<<" SZUKAJ LICZBE\n\n\n";
  196. cout<<" [2]";
  197. cout<<" WSTAW LICZBE\n\n\n";
  198. cout<<" [3]";
  199. cout<<" USUN LICZBE\n\n\n";
  200. cout<<" [4]";
  201. cout<<" ILE LICZB POSIADA CZESC CALKOWITA ROWNA X\n\n\n";
  202. cout<<" [5]";
  203. cout<<" WYPISZ DRZEWO\n\n\n";
  204. cout<<" [6]";
  205. cout<<" WCZYTAJ SKRYPT\n\n\n";
  206. cout<<" [7]";
  207. cout<<" KONIEC\n\n\n";
  208.  
  209. do{
  210. switch (f=getch())
  211. {
  212.  
  213. case '1':
  214. system("cls");
  215. cout<<"PODAJ SZUKANA LICZBE: ";
  216. cin>>n;
  217.  
  218. szukaj(korzen, n, wystepuje);
  219.  
  220. if(*wystepuje==true)
  221. {
  222. cout<<"TAK"<<endl;
  223. }
  224. else
  225. {
  226. cout<<"NIE"<<endl;
  227. }
  228.  
  229. *wystepuje=false;
  230.  
  231. system("pause");
  232. system("cls");
  233. cout<<"\n\n [1]";
  234. cout<<" SZUKAJ LICZBE\n\n\n";
  235. cout<<" [2]";
  236. cout<<" WSTAW LICZBE\n\n\n";
  237. cout<<" [3]";
  238. cout<<" USUN LICZBE\n\n\n";
  239. cout<<" [4]";
  240. cout<<" ILE LICZB POSIADA CZESC CALKOWITA ROWNA X\n\n\n";
  241. cout<<" [5]";
  242. cout<<" WYPISZ DRZEWO\n\n\n";
  243. cout<<" [6]";
  244. cout<<" WCZYTAJ SKRYPT\n\n\n";
  245. cout<<" [7]";
  246. cout<<" KONIEC\n\n\n";
  247. break;
  248.  
  249. case '2':
  250. system("cls");
  251. cout<<"PODAJ LICZBE DO WSTAWIENIA: ";
  252. cin>>n;
  253.  
  254. korzen=wstaw(korzen, n);
  255. cout<<endl;
  256.  
  257. //system("pause");
  258. system("cls");
  259. cout<<"\n\n [1]";
  260. cout<<" SZUKAJ LICZBE\n\n\n";
  261. cout<<" [2]";
  262. cout<<" WSTAW LICZBE\n\n\n";
  263. cout<<" [3]";
  264. cout<<" USUN LICZBE\n\n\n";
  265. cout<<" [4]";
  266. cout<<" ILE LICZB POSIADA CZESC CALKOWITA ROWNA X\n\n\n";
  267. cout<<" [5]";
  268. cout<<" WYPISZ DRZEWO\n\n\n";
  269. cout<<" [6]";
  270. cout<<" WCZYTAJ SKRYPT\n\n\n";
  271. cout<<" [7]";
  272. cout<<" KONIEC\n\n\n";
  273. break;
  274.  
  275. case '3':
  276. system("cls");
  277. cout<<"PODAJ LICZBE DO USUNIECIA: ";
  278. cin>>n;
  279.  
  280. korzen=usun(korzen, n);
  281. cout<<endl;
  282.  
  283. //system("pause");
  284. system("cls");
  285. cout<<"\n\n [1]";
  286. cout<<" SZUKAJ LICZBE\n\n\n";
  287. cout<<" [2]";
  288. cout<<" WSTAW LICZBE\n\n\n";
  289. cout<<" [3]";
  290. cout<<" USUN LICZBE\n\n\n";
  291. cout<<" [4]";
  292. cout<<" ILE LICZB POSIADA CZESC CALKOWITA ROWNA X\n\n\n";
  293. cout<<" [5]";
  294. cout<<" WYPISZ DRZEWO\n\n\n";
  295. cout<<" [6]";
  296. cout<<" WCZYTAJ SKRYPT\n\n\n";
  297. cout<<" [7]";
  298. cout<<" KONIEC\n\n\n";
  299. break;
  300.  
  301. case '4':
  302. system("cls");
  303. cout<<"PODAJ CZESC CALKOWITA: ";
  304. cin>>n;
  305.  
  306. *ile=0;
  307. calkowita(korzen, n, ile);
  308. cout<<endl<<"ILE LICZB: "<<*ile<<endl<<endl;
  309.  
  310. system("pause");
  311. system("cls");
  312. cout<<"\n\n [1]";
  313. cout<<" SZUKAJ LICZBE\n\n\n";
  314. cout<<" [2]";
  315. cout<<" WSTAW LICZBE\n\n\n";
  316. cout<<" [3]";
  317. cout<<" USUN LICZBE\n\n\n";
  318. cout<<" [4]";
  319. cout<<" ILE LICZB POSIADA CZESC CALKOWITA ROWNA X\n\n\n";
  320. cout<<" [5]";
  321. cout<<" WYPISZ DRZEWO\n\n\n";
  322. cout<<" [6]";
  323. cout<<" WCZYTAJ SKRYPT\n\n\n";
  324. cout<<" [7]";
  325. cout<<" KONIEC\n\n\n";
  326. break;
  327.  
  328. case '5':
  329. system("cls");
  330.  
  331. if(korzen==NULL)
  332. {
  333. cout<<"*BRAK DRZEW*"<<endl;
  334. }
  335.  
  336. strona="";
  337. odstep="";
  338. wypisz(korzen, odstep, strona);
  339. cout<<endl;
  340.  
  341. system("pause");
  342. system("cls");
  343. cout<<"\n\n [1]";
  344. cout<<" SZUKAJ LICZBE\n\n\n";
  345. cout<<" [2]";
  346. cout<<" WSTAW LICZBE\n\n\n";
  347. cout<<" [3]";
  348. cout<<" USUN LICZBE\n\n\n";
  349. cout<<" [4]";
  350. cout<<" ILE LICZB POSIADA CZESC CALKOWITA ROWNA X\n\n\n";
  351. cout<<" [5]";
  352. cout<<" WYPISZ DRZEWO\n\n\n";
  353. cout<<" [6]";
  354. cout<<" WCZYTAJ SKRYPT\n\n\n";
  355. cout<<" [7]";
  356. cout<<" KONIEC\n\n\n";
  357. break;
  358.  
  359. case '6':
  360. system("cls");
  361. korzen=pom;
  362. cout<<"*WCZYTANO POMYSLNIE*"<<endl<<"--------------------"<<endl<<endl;
  363. wej>>x;
  364.  
  365. while(!wej.eof())
  366. {
  367. wej>>znak>>t;
  368.  
  369. replace( t.begin(), t.end(), ',', '.');
  370. n=atof(t.c_str());
  371. n=rint(n*100000000)/100000000;
  372.  
  373.  
  374. // cout<<znak<<" "<<n<<endl;
  375.  
  376. if(znak=='S')
  377. {
  378. szukaj(korzen, n, wystepuje);
  379.  
  380. if(*wystepuje==true)
  381. {
  382. cout<<"TAK"<<endl;
  383. }
  384. else
  385. {
  386. cout<<"NIE"<<endl;
  387. }
  388.  
  389. *wystepuje=false;
  390. }
  391. else
  392. {
  393. if(znak=='W')
  394. {
  395. korzen=wstaw(korzen, n);
  396. }
  397. else
  398. {
  399. if(znak=='U')
  400. {
  401. korzen=usun(korzen, n);
  402. }
  403. else
  404. {
  405. if(znak=='L')
  406. {
  407. *ile=0;
  408. calkowita(korzen, n, ile);
  409. cout<<*ile<<endl;
  410. }
  411. else
  412. {
  413. cout<<"*NIEPRAWIDLOWE POLECENIE W PLIKU*"<<endl;
  414. }
  415. }
  416. }
  417. }
  418. }
  419.  
  420. system("pause");
  421. system("cls");
  422. cout<<"\n\n [1]";
  423. cout<<" SZUKAJ LICZBE\n\n\n";
  424. cout<<" [2]";
  425. cout<<" WSTAW LICZBE\n\n\n";
  426. cout<<" [3]";
  427. cout<<" USUN LICZBE\n\n\n";
  428. cout<<" [4]";
  429. cout<<" ILE LICZB POSIADA CZESC CALKOWITA ROWNA X\n\n\n";
  430. cout<<" [5]";
  431. cout<<" WYPISZ DRZEWO\n\n\n";
  432. cout<<" [6]";
  433. cout<<" WCZYTAJ SKRYPT\n\n\n";
  434. cout<<" [7]";
  435. cout<<" KONIEC\n\n\n";
  436. break;
  437.  
  438. case '7':
  439. system("cls");
  440. break;
  441.  
  442. default:
  443. break;
  444. }
  445. }while(f!='7');
  446.  
  447. korzen=pom;
  448. delete korzen;
  449.  
  450. // system("pause");
  451. //
  452. // strona="";
  453. // odstep="";
  454. // wypisz(korzen, odstep, strona);
  455.  
  456. return 0;
  457. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement