Advertisement
Paszta

Projekt 1

Mar 28th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <sstream>
  5. #include <cstdlib>
  6.  
  7. using namespace std;
  8.  
  9. struct bankomaty
  10. {
  11.     string nr_bankomatu;
  12.     int czesc_Polski;
  13.     string miasto;
  14.     int dzialanie;
  15.     int liczba10;
  16.     int liczba20;
  17.     int liczba50;
  18.     int liczba100;
  19.     int liczba200;
  20. };
  21. void wczytaj_dane(string sciezka,struct bankomaty* &bankomat, int &liczba_bankomatow, int &kwota);
  22. void francuska(struct bankomaty tab[], int liczba_bankomatow);
  23. int polska(struct bankomaty x[], short n);
  24. void zadanie1(struct bankomaty tab[], int liczba_bankomatow);
  25. void qsort (struct bankomaty tab[], int x[], short l, short n);
  26. void zadanie2(struct bankomaty tab[], int liczba_bankomatow);
  27. int polska2(struct bankomaty tab[], int x[], short n);
  28. void zadanie3(struct bankomaty tab[], int liczba_bankomatow, int kwota);
  29.  
  30. int main()
  31. {
  32.     bankomaty* st = nullptr;
  33.     int liczba_bankomatow, kwota;
  34.     wczytaj_dane("dane.csv", st, liczba_bankomatow, kwota);
  35.  
  36.     for (int i = 0; i< liczba_bankomatow; i++)
  37.         cout << st[i].nr_bankomatu<<" "<<st[i].czesc_Polski<<" "<<st[i].miasto<<" "<<st[i].dzialanie<<" "<<st[i].liczba10<<" "<<st[i].liczba20<<" "<<st[i].liczba50<<" "<<st[i].liczba100<<" "<<st[i].liczba200<<" "<<endl;
  38.  
  39.         cout << endl << "Zadanie 1" << endl;
  40.         zadanie1(st, liczba_bankomatow);
  41.         cout << endl << "-----------------------" << endl;
  42.         cout << endl << "Zadanie 2" << endl;
  43.         zadanie2(st, liczba_bankomatow);
  44.         cout << endl << "-----------------------" << endl;
  45.         cout << endl << "Zadanie 3" << endl;
  46.         zadanie3(st, liczba_bankomatow, kwota);
  47.  
  48.     return 0;
  49. }
  50.  
  51.  
  52. void wczytaj_dane(string sciezka,struct bankomaty* &bankomat, int &liczba_bankomatow, int &kwota){
  53.  
  54. if (bankomat!=nullptr)
  55.         return;
  56.  
  57.     ifstream plik;
  58.     plik.open(sciezka);
  59.     string linia;
  60.     plik >> liczba_bankomatow;
  61.     bankomat = new bankomaty[liczba_bankomatow];
  62.     plik >> linia;
  63.     plik >> kwota;
  64.     plik >> linia;
  65.     string temp_nr_bankomatu, temp_czesc_Polski, temp_miasto, temp_dzialanie, temp_liczba10, temp_liczba20, temp_liczba50, temp_liczba100, temp_liczba200;
  66.  
  67.     for(int i=0; i<liczba_bankomatow; i++)
  68.     {
  69.         plik>>linia;
  70.         istringstream ss(linia);
  71.         getline(ss, temp_nr_bankomatu, ';');
  72.         getline(ss, temp_czesc_Polski, ';');
  73.         getline(ss, temp_miasto, ';');
  74.         getline(ss, temp_dzialanie, ';');
  75.         getline(ss, temp_liczba10, ';');
  76.         getline(ss, temp_liczba20, ';');
  77.         getline(ss, temp_liczba50, ';');
  78.         getline(ss, temp_liczba100, ';');
  79.         getline(ss, temp_liczba200);
  80.  
  81.         bankomat[i].nr_bankomatu = temp_nr_bankomatu;
  82.         bankomat[i].czesc_Polski = atoi(temp_czesc_Polski.c_str());
  83.         bankomat[i].miasto = temp_miasto;
  84.         bankomat[i].dzialanie = atoi(temp_dzialanie.c_str());
  85.         bankomat[i].liczba10 = atoi(temp_liczba10.c_str());
  86.         bankomat[i].liczba20 = atoi(temp_liczba20.c_str());
  87.         bankomat[i].liczba50 = atoi(temp_liczba50.c_str());
  88.         bankomat[i].liczba100 = atoi(temp_liczba100.c_str());
  89.         bankomat[i].liczba200 = atoi(temp_liczba200.c_str());
  90.     }
  91.     plik.close();
  92. }
  93. void francuska(struct bankomaty tab[], int liczba_bankomatow, int *a, int *b, int *c){
  94. int p=-1, s=0, k=liczba_bankomatow;
  95. while(s<k)
  96.         {
  97.     if(tab[s].czesc_Polski == 1)
  98.         {
  99.         p++;
  100.         swap(tab[p], tab[s]);
  101.         s++;
  102.         }
  103.     else{
  104.         if(tab[s].czesc_Polski == 3)
  105.             {
  106.             k--;
  107.             swap(tab[k], tab[s]);
  108.             }
  109.             else s++;
  110.         }
  111.         }
  112. *a=p;
  113. *b=s;
  114. *c=k;
  115. }
  116.  
  117. int polska(struct bankomaty x[], short n)
  118. {
  119.  int p=0, k=n-1;
  120.  while(p<k)
  121.  {
  122.     while(p<n-1 && x[p].dzialanie==1) p++;
  123.     while(k>=0 && x[k].dzialanie==0) k--;
  124.     if(p<k)
  125.     {
  126.         swap(x[p],x[k]);
  127.     }
  128.  }
  129.  return p;
  130. }
  131. void zadanie1(struct bankomaty tab[], int liczba_bankomatow)
  132. {
  133. int *p, *s, *k, i;
  134. p= new int; s= new int; k=new int;
  135. francuska(tab, liczba_bankomatow, p, s, k);
  136.  
  137. if((*p)+1>(*k)-(*p)-1 and *p+1>liczba_bankomatow-(*s)-1)
  138.     cout << "Najweksza liczba bankomatow to " << (*p)+1 << " w polnocnej czesci Polski" << endl;
  139. if(*k-(*p)-1>(*p)+1 and *k-(*p)-1>liczba_bankomatow-(*s)-1)
  140.     cout << "Najweksza liczba bankomatow to " << (*k)-(*p)-1 << " w centralno-zachodniej czesci Polski" << endl;
  141. if(liczba_bankomatow-(*s)-1>*k-(*p)-1 and liczba_bankomatow-(*s)-1>(*p)+1)
  142.     cout << "Najweksza liczba bankomatow to " << liczba_bankomatow-(*s)-1 << " w poludniowo-wschodniej czesci Polski" << endl;
  143.  
  144.     cout << endl << "Polnoc:" <<endl;
  145.     for (i=0; i<=(*p); i++)
  146.         cout << tab[i].nr_bankomatu << " w " << tab[i].miasto << endl;
  147.     cout << endl << "Centrum i zachod:" << endl;
  148.     for (i=*p+1; i<*k; i++)
  149.         cout << tab[i].nr_bankomatu << " w " << tab[i].miasto << endl;
  150.     cout << endl << "Wschod i poludnie:" << endl;
  151.     for (i=*s+1; i<liczba_bankomatow; i++)
  152.         cout << tab[i].nr_bankomatu << " w " << tab[i].miasto << endl;
  153. }
  154.  
  155. void qsort (struct bankomaty tab[], int x[], short l, short n)
  156. {
  157.     if (n <= l) return;
  158.     int i = l-1;
  159.     int j = n+1;
  160.     int s = x[(n+l)/2];
  161.     while(1)
  162.     {
  163.         while(s > x[++i]);
  164.         while(s < x[--j]);
  165.         if (i <= j)
  166.         {
  167.             swap(tab[i], tab[j]);
  168.             swap(x[i], x[j]);
  169.         }
  170.         else break;
  171.     }
  172.    if(j > l) qsort(tab, x, l, j);
  173.    if(i < n) qsort(tab, x, i, n);
  174. }
  175.  
  176.  
  177. void zadanie2(struct bankomaty tab[], int liczba_bankomatow){
  178.  
  179. int *p, *s, *k, i, g;
  180. p= new int; s= new int; k=new int;
  181. g=polska(tab, liczba_bankomatow);
  182. int x[g];
  183. francuska(tab, g, p, s, k);
  184. for (int q=0;q<g;q++)
  185.     {
  186.         x[q]=(tab[q].liczba10*10 + tab[q].liczba20*20 + tab[q].liczba50*50 + tab[q].liczba100*100 + tab[q].liczba200*200);
  187.     }
  188.  
  189. qsort (tab, x, 0, *p);
  190. qsort (tab, x, *p+1, *k-1);
  191. qsort (tab, x, *k, g-1);
  192.  
  193.  
  194. cout << "Polnoc:" << endl;
  195. cout << "Najmniej pieniedzy: " << tab[0].nr_bankomatu << endl;
  196. cout << "Najwiecej pieniedzy: " << tab[(*p)].nr_bankomatu << endl;
  197. if (((*p)-0)%2 == 0)
  198. cout << "Mediana:" << x[(0 + (*p))/2] << endl;
  199. else cout << "Mediana:" << ((x[(0 + (*p))/2]) + (x[(0 + (*p)+1)/2]))/2 << endl;
  200.  
  201. cout << endl << "Cantrum i zachod:" << endl;
  202. cout << "Najmniej pieniedzy: " << tab[(*p)+1].nr_bankomatu << endl;
  203. cout << "Najwiecej pieniedzy: " << tab[(*k-1)].nr_bankomatu << endl;
  204. if (((*k-1)-((*p)+1))%2 == 0)
  205. cout << "Mediana:" << x[((*p+1)+(*k-1))/2] << endl;
  206. else cout << "Mediana:" << ((x[(((*p)+1)+(*k-1))/2]) + (x[((((*p)+1)+(*k-1))/2)+1]))/2 << endl;
  207.  
  208. cout << endl << "Wschod i poludnie:" << endl;
  209. cout << "Najmniej pieniedzy: " << tab[(*k)].nr_bankomatu << endl;
  210. cout << "Najwiecej pieniedzy: " << tab[g-1].nr_bankomatu << endl;
  211. if (((g-1)-(*k))%2 == 0)
  212. cout << "Mediana:" << x[((*k)+(g-1))/2] << endl;
  213. else cout << "Mediana:" << ((x[((*k)+(g-1))/2]) + (x[(((*k)+(g-1))/2)+1]))/2 << endl;
  214. }
  215.  
  216. int polska2(struct bankomaty tab[], int x[], short n)
  217. {
  218.  int p=0, k=n-1;
  219.  while(p<k)
  220.  {
  221.     while(p<n-1 && x[p]>=35000) p++;
  222.     while(k>=0 && x[k]<35000) k--;
  223.     if(p<k)
  224.     {
  225.         swap(x[p],x[k]);
  226.         swap(tab[p],tab[k]);
  227.     }
  228.  }
  229.  return p;
  230. }
  231.  
  232. void zadanie3(struct bankomaty tab[], int liczba_bankomatow, int kwota){
  233. int *p, *s, *k, i, g, t, suma=0;
  234. p= new int; s= new int; k=new int;
  235. g=polska(tab, liczba_bankomatow);
  236. int x[g];
  237. for (int q=0;q<g;q++)
  238.     {
  239.         x[q]=(tab[q].liczba10*10 + tab[q].liczba20*20 + tab[q].liczba50*50 + tab[q].liczba100*100 + tab[q].liczba200*200);
  240.     }
  241.  
  242. t=polska2(tab, x, g);
  243. francuska(tab, t, p, s, k);
  244. int l200[t], l100[t], l50[t], l20[t], l10[t];
  245.  
  246. for(int i = 0; i<t; i++)
  247. {
  248.     suma=0;
  249.     l200[i]=tab[i].liczba200;
  250.     l100[i]=tab[i].liczba100;
  251.     l50[i]=tab[i].liczba50;
  252.     l20[i]=tab[i].liczba20;
  253.     l10[i]=tab[i].liczba10;
  254.     while(suma!=kwota*100)
  255.     {
  256.         if(l200[i]>0 and (kwota*100)%200==0 and suma<kwota*100)
  257.         {
  258.             suma=suma+200;
  259.             l200[i]--;
  260.         }
  261.         else if(l100[i]>0 and (kwota*100)%100==0 and suma<kwota*100)
  262.         {
  263.             suma=suma+100;
  264.             l100[i]--;
  265.         }
  266.         else if (l50[i]>0 and (kwota*100)%50==0 and suma<kwota*100)
  267.         {
  268.            suma=suma+50;
  269.             l50[i]--;
  270.         }
  271.         else if (l20[i]>0 and (kwota*100)%20==0 and suma<kwota*100)
  272.         {
  273.            suma=suma+20;
  274.             l20[i]--;
  275.         }
  276.            else if (l10[i]>0 and (kwota*100)%10==0 and suma<kwota*100)
  277.         {
  278.            suma=suma+10;
  279.             l10[i]--;
  280.         }
  281.     }
  282. }
  283.  
  284. cout << endl << "Polnoc: " << endl;
  285. if(x[*p] < 35000)
  286.     cout << "W tej czesci Polski nie mozna wyplacic" << endl;
  287. else{
  288.     for(int i=0; i<=(*p); i++)
  289.         {
  290.     cout << "Dla bankomatu o nr:" << tab[i].nr_bankomatu << " w " << tab[i].miasto << " jest " << tab[i].liczba200-l200[i] << " x200zl, " << tab[i].liczba100-l100[i]<< " x100zl, "  << tab[i].liczba50-l50[i]<< " x50zl, "  << tab[i].liczba20-l20[i]<< " x20zl, "  << tab[i].liczba10-l10[i] << "x10zl" <<endl;
  291.         }
  292.     }
  293.  
  294. cout << endl << " Zachod i centrum: " << endl;
  295. if(x[*k-1] < 35000)
  296.     cout << "W tej czesci Polski nie mozna wyplacic" << endl;
  297. else{
  298.     for(int i =(*p)+1; i<=(*k)-1; i++)
  299.         {
  300.     cout << "Dla bankomatu o nr:" << tab[i].nr_bankomatu << " w " << tab[i].miasto <<" jest " << tab[i].liczba200-l200[i] << " x200zl, " << tab[i].liczba100-l100[i]<< " x100zl, "  << tab[i].liczba50-l50[i]<< " x50zl, "  << tab[i].liczba20-l20[i]<< " x20zl, "  << tab[i].liczba10-l10[i] << "x10zl" <<endl;
  301.         }
  302.     }
  303.  
  304. cout << endl << " Wschod i poludnie: " << endl;
  305. if(x[t-1]<35000)
  306.     cout << "W tej czesci Polski nie mozna wyplacic" << endl;
  307. else{
  308.     for(int i =*k; i<=t-1; i++)
  309.         {
  310.     cout << "Dla bankomatu o nr:" << tab[i].nr_bankomatu << " w " << tab[i].miasto << " jest " << tab[i].liczba200-l200[i] << " x200zl, " << tab[i].liczba100-l100[i]<< " x100zl, "  << tab[i].liczba50-l50[i]<< " x50zl, "  << tab[i].liczba20-l20[i]<< " x20zl, "  << tab[i].liczba10-l10[i] << "x10zl" <<endl;
  311.         }
  312.     }
  313. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement