Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <iomanip>
- using namespace std;
- FILE *fl;
- typedef struct
- {
- int code;
- int count;
- int month;
- } Info;
- Info detali[30];
- char fname[20];
- int n=0;
- int menu();
- void nnf();
- void newf();
- void spisok();
- void opf();
- void resc();
- void resf();
- void s_qs();
- void s_vb();
- void show();
- void p_lin();
- void p_dv();
- int main()
- {
- while (true)
- {
- switch (menu())
- {
- case 1: nnf(); break;
- case 2: newf(); break;
- case 3: spisok(); break;
- case 4: opf(); break;
- case 5: resc(); break;
- case 6: resf(); break;
- case 7: s_qs(); break;
- case 8: s_vb(); break;
- case 9: show(); break;
- case 10: p_lin(); break;
- case 11: p_dv(); break;
- case 12: return 0;
- default: "Viberite pravilno!";
- }
- puts("Press any key to continue");
- getch(); system("cls");
- }
- }
- int menu()
- {
- cout << "VIBERITE:" << endl;
- cout << "1. Vvod file name" << endl;
- cout << "2. New file" << endl;
- cout << "3. Vvesti spisok" << endl;
- cout << "4. Open file" << endl;
- cout << "5. Vivesti result" << endl;
- cout << "6. Vivesti v fail" << endl;
- cout << "7. QuickSort" << endl;
- cout << "8. Viborom" << endl;
- cout << "9. Vivesti spisok" << endl;
- cout << "10. Poisk lin" << endl;
- cout << "11. Poisk dv" << endl;
- cout << "12. Exit" << endl;
- int i;
- cin >> i;
- return i;
- }
- void s_vb()
- {
- int imin,i,j;
- Info t;
- for(i=0; i<n-1; i++)
- {
- imin=i;
- for(j=i+1; j<n; j++)
- if (detali[imin].code>detali[j].code) imin=j;
- if (imin != i)
- {
- t = detali[imin];
- detali[imin] = detali[i];
- detali[i] = t;
- }
- }
- }
- void s_qs()
- {
- struct
- {
- int l;
- int r;
- } stack[20];
- int i,j, left, right, x, s=0;
- Info t;
- stack[s].l=0; stack[s].r=n-1;
- while (s != -1)
- {
- left=stack[s].l; right=stack[s].r;
- s--;
- while (left < right)
- {
- i=left;
- j=right;
- x=detali[(left+right)/2].code;
- while (i <= j)
- {
- while (detali[i].code < x) i++;
- while (detali[j].code > x) j--;
- if (i<=j)
- {
- t=detali[i];
- detali[i]=detali[j];
- detali[j]=t;
- i++; j--;
- }
- }
- if ((j-left)<(right-i))
- {
- if (i<right)
- {
- s++;
- stack[s].l=i;
- stack[s].r=right;
- }
- right=j;
- }
- else
- {
- if (left<j)
- {
- s++;
- stack[s].l=left;
- stack[s].r=j;
- }
- left=i;
- }
- }
- }
- }
- void show()
- {
- cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
- for (int i=0; i<n; i++)
- cout <<setw(5)<< detali[i].code<<setw(7) << detali[i].count <<setw(7)<< detali[i].month<< endl;
- }
- void nnf()
- {
- cout << "Vvedite file name" << endl;
- cin >> fname;
- }
- void newf()
- {
- if ((fl = fopen(fname,"wb"))==NULL)
- {
- cout << "Oshibka pri sozdanii"<<endl;
- exit(1);
- }
- cout << "OK" << endl;
- fclose(fl);
- }
- void spisok()
- {
- if ((fl = fopen(fname,"rb+"))==NULL)
- {
- cout << "Oshibka pri sozdanii"<<endl;
- exit(1);
- }
- cout << "Vvedite chislo detalei " << endl;
- cin >> n;
- for (int i=0; i<n; i++)
- {
- cout << "Vvedite kod: ";
- cin >> detali[i].code;
- cout << "Vvedite kolichestvo: ";
- cin >> detali[i].count;
- cout << "Vvedite month: ";
- cin >> detali[i].month;
- fwrite( &detali[i], sizeof(Info), 1, fl );
- }
- fclose(fl);
- }
- void opf()
- {
- if ((fl = fopen(fname,"rb"))==NULL)
- {
- cout << "Oshibka pri otkritii"<<endl;
- exit(1);
- }
- n=0; Info t;
- cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
- while(true)
- {
- int nwrt = fread( &t, sizeof(Info), 1, fl );
- if (nwrt!=1) break;
- detali[n]=t;
- cout <<setw(5)<< detali[n].code<<setw(7) << detali[n].count <<setw(7)<< detali[n].month<< endl;
- n++;
- }
- fclose(fl);
- }
- void resc()
- {
- int m;
- cout<<"vvedi month"<<endl;
- cin>>m;
- cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
- for (int i=0; i<n; i++)
- if (detali[i].month==m)
- cout <<setw(5)<< detali[i].code<<setw(7) << detali[i].count <<setw(7)<< detali[i].month<< endl;
- }
- void resf()
- {
- char codet[30];
- FILE *ft;
- cout << "Vvedite imya faila" << endl;
- cin >> codet;
- if ((ft = fopen(codet,"w"))==NULL)
- {
- cout << "Oshibka pri sozdanii "<<endl;
- exit(1);
- }
- char s[80],cd[20];
- int m;
- cout<<"vvedi month"<<endl;
- cin>>m;
- for (int i=0; i<n; i++)
- if (detali[i].month==m)
- {
- itoa(detali[i].code,cd,10);
- strcpy(s, cd);
- strcat(s, "\n");
- fputs(s, ft);
- }
- fclose(ft);
- }
- void p_lin()
- {
- int k=-1;
- for(int i=0; i < n; i++)
- if (detali[i].code==9383)
- {
- k=i;
- break;
- }
- if (k==-1)
- {
- cout<<"detal ne naidena"<<endl;
- }
- else
- {
- cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
- cout <<setw(5)<< detali[k].code<<setw(7) << detali[k].count <<setw(7)<< detali[k].month<< endl;
- }
- }
- void p_dv()
- {
- int i=0, j=n-1, m;
- while(i<j)
- {
- m=(i+j)/2;
- if (9383 > detali[m].code) i=m+1; else j=m;
- }
- if (detali[i].code==9383)
- {
- cout<<setw(5)<<"kod"<<setw(7)<<"kol-vo"<<setw(7)<<"month"<<endl;
- cout <<setw(5)<< detali[i].code<<setw(7) << detali[i].count <<setw(7)<< detali[i].month<< endl;
- }
- else
- {
- cout<<"detal ne naidena"<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement