Advertisement
cacodemon665

Лаба 12 Вариант 7

May 16th, 2019
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <iomanip>
  7.  
  8. using namespace std;
  9.  
  10. FILE *fl;
  11. typedef struct
  12. {
  13. int code;
  14. int count;
  15. int month;
  16. } Info;
  17.  
  18. Info detali[30];
  19. char fname[20];
  20. int n=0;
  21. int menu();
  22. void nnf();
  23. void newf();
  24. void spisok();
  25. void opf();
  26. void resc();
  27. void resf();
  28. void s_qs();
  29. void s_vb();
  30. void show();
  31. void p_lin();
  32. void p_dv();
  33.  
  34. int main()
  35. {
  36. while (true)
  37. {
  38. switch (menu())
  39. {
  40. case 1: nnf(); break;
  41. case 2: newf(); break;
  42. case 3: spisok(); break;
  43. case 4: opf(); break;
  44. case 5: resc(); break;
  45. case 6: resf(); break;
  46. case 7: s_qs(); break;
  47. case 8: s_vb(); break;
  48. case 9: show(); break;
  49. case 10: p_lin(); break;
  50. case 11: p_dv(); break;
  51. case 12: return 0;
  52. default: "Viberite pravilno!";
  53. }
  54. puts("Press any key to continue");
  55. getch(); system("cls");
  56. }
  57. }
  58.  
  59. int menu()
  60. {
  61. cout << "VIBERITE:" << endl;
  62. cout << "1. Vvod file name" << endl;
  63. cout << "2. New file" << endl;
  64. cout << "3. Vvesti spisok" << endl;
  65. cout << "4. Open file" << endl;
  66. cout << "5. Vivesti result" << endl;
  67. cout << "6. Vivesti v fail" << endl;
  68. cout << "7. QuickSort" << endl;
  69. cout << "8. Viborom" << endl;
  70. cout << "9. Vivesti spisok" << endl;
  71. cout << "10. Poisk lin" << endl;
  72. cout << "11. Poisk dv" << endl;
  73. cout << "12. Exit" << endl;
  74. int i;
  75. cin >> i;
  76. return i;
  77. }
  78.  
  79.  
  80. void s_vb()
  81. {
  82. int imin,i,j;
  83. Info t;
  84. for(i=0; i<n-1; i++)
  85. {
  86. imin=i;
  87. for(j=i+1; j<n; j++)
  88. if (detali[imin].code>detali[j].code) imin=j;
  89. if (imin != i)
  90. {
  91. t = detali[imin];
  92. detali[imin] = detali[i];
  93. detali[i] = t;
  94. }
  95. }
  96. }
  97.  
  98. void s_qs()
  99. {
  100. struct
  101. {
  102. int l;
  103. int r;
  104. } stack[20];
  105.  
  106. int i,j, left, right, x, s=0;
  107. Info t;
  108. stack[s].l=0; stack[s].r=n-1;
  109. while (s != -1)
  110. {
  111. left=stack[s].l; right=stack[s].r;
  112. s--;
  113. while (left < right)
  114. {
  115. i=left;
  116. j=right;
  117. x=detali[(left+right)/2].code;
  118. while (i <= j)
  119. {
  120. while (detali[i].code < x) i++;
  121. while (detali[j].code > x) j--;
  122. if (i<=j)
  123. {
  124. t=detali[i];
  125. detali[i]=detali[j];
  126. detali[j]=t;
  127. i++; j--;
  128. }
  129. }
  130. if ((j-left)<(right-i))
  131. {
  132. if (i<right)
  133. {
  134. s++;
  135. stack[s].l=i;
  136. stack[s].r=right;
  137. }
  138. right=j;
  139. }
  140. else
  141. {
  142. if (left<j)
  143. {
  144. s++;
  145. stack[s].l=left;
  146. stack[s].r=j;
  147. }
  148. left=i;
  149. }
  150. }
  151. }
  152. }
  153.  
  154. void show()
  155. {
  156. cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
  157. for (int i=0; i<n; i++)
  158. cout <<setw(5)<< detali[i].code<<setw(7) << detali[i].count <<setw(7)<< detali[i].month<< endl;
  159.  
  160. }
  161.  
  162. void nnf()
  163. {
  164. cout << "Vvedite file name" << endl;
  165. cin >> fname;
  166. }
  167.  
  168. void newf()
  169. {
  170. if ((fl = fopen(fname,"wb"))==NULL)
  171. {
  172. cout << "Oshibka pri sozdanii"<<endl;
  173. exit(1);
  174. }
  175. cout << "OK" << endl;
  176. fclose(fl);
  177. }
  178.  
  179. void spisok()
  180. {
  181. if ((fl = fopen(fname,"rb+"))==NULL)
  182. {
  183. cout << "Oshibka pri sozdanii"<<endl;
  184. exit(1);
  185. }
  186.  
  187. cout << "Vvedite chislo detalei " << endl;
  188. cin >> n;
  189.  
  190. for (int i=0; i<n; i++)
  191. {
  192. cout << "Vvedite kod: ";
  193. cin >> detali[i].code;
  194. cout << "Vvedite kolichestvo: ";
  195. cin >> detali[i].count;
  196. cout << "Vvedite month: ";
  197. cin >> detali[i].month;
  198. fwrite( &detali[i], sizeof(Info), 1, fl );
  199. }
  200. fclose(fl);
  201. }
  202.  
  203. void opf()
  204. {
  205. if ((fl = fopen(fname,"rb"))==NULL)
  206. {
  207. cout << "Oshibka pri otkritii"<<endl;
  208. exit(1);
  209. }
  210.  
  211. n=0; Info t;
  212.  
  213. cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
  214. while(true)
  215. {
  216. int nwrt = fread( &t, sizeof(Info), 1, fl );
  217. if (nwrt!=1) break;
  218. detali[n]=t;
  219. cout <<setw(5)<< detali[n].code<<setw(7) << detali[n].count <<setw(7)<< detali[n].month<< endl;
  220. n++;
  221. }
  222. fclose(fl);
  223. }
  224.  
  225. void resc()
  226. {
  227. int m;
  228. cout<<"vvedi month"<<endl;
  229. cin>>m;
  230. cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
  231. for (int i=0; i<n; i++)
  232. if (detali[i].month==m)
  233. cout <<setw(5)<< detali[i].code<<setw(7) << detali[i].count <<setw(7)<< detali[i].month<< endl;
  234. }
  235.  
  236. void resf()
  237. {
  238. char codet[30];
  239. FILE *ft;
  240. cout << "Vvedite imya faila" << endl;
  241. cin >> codet;
  242. if ((ft = fopen(codet,"w"))==NULL)
  243. {
  244. cout << "Oshibka pri sozdanii "<<endl;
  245. exit(1);
  246. }
  247. char s[80],cd[20];
  248. int m;
  249. cout<<"vvedi month"<<endl;
  250. cin>>m;
  251. for (int i=0; i<n; i++)
  252. if (detali[i].month==m)
  253. {
  254. itoa(detali[i].code,cd,10);
  255. strcpy(s, cd);
  256. strcat(s, "\n");
  257. fputs(s, ft);
  258. }
  259. fclose(ft);
  260. }
  261.  
  262. void p_lin()
  263. {
  264. int k=-1;
  265. for(int i=0; i < n; i++)
  266. if (detali[i].code==9383)
  267. {
  268. k=i;
  269. break;
  270. }
  271. if (k==-1)
  272. {
  273. cout<<"detal ne naidena"<<endl;
  274. }
  275. else
  276. {
  277. cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
  278. cout <<setw(5)<< detali[k].code<<setw(7) << detali[k].count <<setw(7)<< detali[k].month<< endl;
  279. }
  280. }
  281.  
  282.  
  283. void p_dv()
  284. {
  285. int i=0, j=n-1, m;
  286. while(i<j)
  287. {
  288. m=(i+j)/2;
  289. if (9383 > detali[m].code) i=m+1; else j=m;
  290. }
  291. if (detali[i].code==9383)
  292. {
  293. cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
  294. cout <<setw(5)<< detali[i].code<<setw(7) << detali[i].count <<setw(7)<< detali[i].month<< endl;
  295. }
  296. else
  297. {
  298. cout<<"detal ne naidena"<<endl;
  299. }
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement