Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <sstream>
- #include <cstdlib>
- using namespace std;
- struct bankomaty
- {
- string nr_bankomatu;
- int czesc_Polski;
- string miasto;
- int dzialanie;
- int liczba10;
- int liczba20;
- int liczba50;
- int liczba100;
- int liczba200;
- };
- void wczytaj_dane(string sciezka,struct bankomaty* &bankomat, int &liczba_bankomatow, int &kwota);
- void francuska(struct bankomaty tab[], int liczba_bankomatow);
- int polska(struct bankomaty x[], short n);
- void zadanie1(struct bankomaty tab[], int liczba_bankomatow);
- void qsort (struct bankomaty tab[], int x[], short l, short n);
- void zadanie2(struct bankomaty tab[], int liczba_bankomatow);
- int polska2(struct bankomaty tab[], int x[], short n);
- void zadanie3(struct bankomaty tab[], int liczba_bankomatow, int kwota);
- int main()
- {
- bankomaty* st = nullptr;
- int liczba_bankomatow, kwota;
- wczytaj_dane("dane.csv", st, liczba_bankomatow, kwota);
- for (int i = 0; i< liczba_bankomatow; i++)
- 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;
- cout << endl << "Zadanie 1" << endl;
- zadanie1(st, liczba_bankomatow);
- cout << endl << "-----------------------" << endl;
- cout << endl << "Zadanie 2" << endl;
- zadanie2(st, liczba_bankomatow);
- cout << endl << "-----------------------" << endl;
- cout << endl << "Zadanie 3" << endl;
- zadanie3(st, liczba_bankomatow, kwota);
- return 0;
- }
- void wczytaj_dane(string sciezka,struct bankomaty* &bankomat, int &liczba_bankomatow, int &kwota){
- if (bankomat!=nullptr)
- return;
- ifstream plik;
- plik.open(sciezka);
- string linia;
- plik >> liczba_bankomatow;
- bankomat = new bankomaty[liczba_bankomatow];
- plik >> linia;
- plik >> kwota;
- plik >> linia;
- string temp_nr_bankomatu, temp_czesc_Polski, temp_miasto, temp_dzialanie, temp_liczba10, temp_liczba20, temp_liczba50, temp_liczba100, temp_liczba200;
- for(int i=0; i<liczba_bankomatow; i++)
- {
- plik>>linia;
- istringstream ss(linia);
- getline(ss, temp_nr_bankomatu, ';');
- getline(ss, temp_czesc_Polski, ';');
- getline(ss, temp_miasto, ';');
- getline(ss, temp_dzialanie, ';');
- getline(ss, temp_liczba10, ';');
- getline(ss, temp_liczba20, ';');
- getline(ss, temp_liczba50, ';');
- getline(ss, temp_liczba100, ';');
- getline(ss, temp_liczba200);
- bankomat[i].nr_bankomatu = temp_nr_bankomatu;
- bankomat[i].czesc_Polski = atoi(temp_czesc_Polski.c_str());
- bankomat[i].miasto = temp_miasto;
- bankomat[i].dzialanie = atoi(temp_dzialanie.c_str());
- bankomat[i].liczba10 = atoi(temp_liczba10.c_str());
- bankomat[i].liczba20 = atoi(temp_liczba20.c_str());
- bankomat[i].liczba50 = atoi(temp_liczba50.c_str());
- bankomat[i].liczba100 = atoi(temp_liczba100.c_str());
- bankomat[i].liczba200 = atoi(temp_liczba200.c_str());
- }
- plik.close();
- }
- void francuska(struct bankomaty tab[], int liczba_bankomatow, int *a, int *b, int *c){
- int p=-1, s=0, k=liczba_bankomatow;
- while(s<k)
- {
- if(tab[s].czesc_Polski == 1)
- {
- p++;
- swap(tab[p], tab[s]);
- s++;
- }
- else{
- if(tab[s].czesc_Polski == 3)
- {
- k--;
- swap(tab[k], tab[s]);
- }
- else s++;
- }
- }
- *a=p;
- *b=s;
- *c=k;
- }
- int polska(struct bankomaty x[], short n)
- {
- int p=0, k=n-1;
- while(p<k)
- {
- while(p<n-1 && x[p].dzialanie==1) p++;
- while(k>=0 && x[k].dzialanie==0) k--;
- if(p<k)
- {
- swap(x[p],x[k]);
- }
- }
- return p;
- }
- void zadanie1(struct bankomaty tab[], int liczba_bankomatow)
- {
- int *p, *s, *k, i;
- p= new int; s= new int; k=new int;
- francuska(tab, liczba_bankomatow, p, s, k);
- if((*p)+1>(*k)-(*p)-1 and *p+1>liczba_bankomatow-(*s)-1)
- cout << "Najweksza liczba bankomatow to " << (*p)+1 << " w polnocnej czesci Polski" << endl;
- if(*k-(*p)-1>(*p)+1 and *k-(*p)-1>liczba_bankomatow-(*s)-1)
- cout << "Najweksza liczba bankomatow to " << (*k)-(*p)-1 << " w centralno-zachodniej czesci Polski" << endl;
- if(liczba_bankomatow-(*s)-1>*k-(*p)-1 and liczba_bankomatow-(*s)-1>(*p)+1)
- cout << "Najweksza liczba bankomatow to " << liczba_bankomatow-(*s)-1 << " w poludniowo-wschodniej czesci Polski" << endl;
- cout << endl << "Polnoc:" <<endl;
- for (i=0; i<=(*p); i++)
- cout << tab[i].nr_bankomatu << " w " << tab[i].miasto << endl;
- cout << endl << "Centrum i zachod:" << endl;
- for (i=*p+1; i<*k; i++)
- cout << tab[i].nr_bankomatu << " w " << tab[i].miasto << endl;
- cout << endl << "Wschod i poludnie:" << endl;
- for (i=*s+1; i<liczba_bankomatow; i++)
- cout << tab[i].nr_bankomatu << " w " << tab[i].miasto << endl;
- }
- void qsort (struct bankomaty tab[], int x[], short l, short n)
- {
- if (n <= l) return;
- int i = l-1;
- int j = n+1;
- int s = x[(n+l)/2];
- while(1)
- {
- while(s > x[++i]);
- while(s < x[--j]);
- if (i <= j)
- {
- swap(tab[i], tab[j]);
- swap(x[i], x[j]);
- }
- else break;
- }
- if(j > l) qsort(tab, x, l, j);
- if(i < n) qsort(tab, x, i, n);
- }
- void zadanie2(struct bankomaty tab[], int liczba_bankomatow){
- int *p, *s, *k, i, g;
- p= new int; s= new int; k=new int;
- g=polska(tab, liczba_bankomatow);
- int x[g];
- francuska(tab, g, p, s, k);
- for (int q=0;q<g;q++)
- {
- x[q]=(tab[q].liczba10*10 + tab[q].liczba20*20 + tab[q].liczba50*50 + tab[q].liczba100*100 + tab[q].liczba200*200);
- }
- qsort (tab, x, 0, *p);
- qsort (tab, x, *p+1, *k-1);
- qsort (tab, x, *k, g-1);
- cout << "Polnoc:" << endl;
- cout << "Najmniej pieniedzy: " << tab[0].nr_bankomatu << endl;
- cout << "Najwiecej pieniedzy: " << tab[(*p)].nr_bankomatu << endl;
- if (((*p)-0)%2 == 0)
- cout << "Mediana:" << x[(0 + (*p))/2] << endl;
- else cout << "Mediana:" << ((x[(0 + (*p))/2]) + (x[(0 + (*p)+1)/2]))/2 << endl;
- cout << endl << "Cantrum i zachod:" << endl;
- cout << "Najmniej pieniedzy: " << tab[(*p)+1].nr_bankomatu << endl;
- cout << "Najwiecej pieniedzy: " << tab[(*k-1)].nr_bankomatu << endl;
- if (((*k-1)-((*p)+1))%2 == 0)
- cout << "Mediana:" << x[((*p+1)+(*k-1))/2] << endl;
- else cout << "Mediana:" << ((x[(((*p)+1)+(*k-1))/2]) + (x[((((*p)+1)+(*k-1))/2)+1]))/2 << endl;
- cout << endl << "Wschod i poludnie:" << endl;
- cout << "Najmniej pieniedzy: " << tab[(*k)].nr_bankomatu << endl;
- cout << "Najwiecej pieniedzy: " << tab[g-1].nr_bankomatu << endl;
- if (((g-1)-(*k))%2 == 0)
- cout << "Mediana:" << x[((*k)+(g-1))/2] << endl;
- else cout << "Mediana:" << ((x[((*k)+(g-1))/2]) + (x[(((*k)+(g-1))/2)+1]))/2 << endl;
- }
- int polska2(struct bankomaty tab[], int x[], short n)
- {
- int p=0, k=n-1;
- while(p<k)
- {
- while(p<n-1 && x[p]>=35000) p++;
- while(k>=0 && x[k]<35000) k--;
- if(p<k)
- {
- swap(x[p],x[k]);
- swap(tab[p],tab[k]);
- }
- }
- return p;
- }
- void zadanie3(struct bankomaty tab[], int liczba_bankomatow, int kwota){
- int *p, *s, *k, i, g, t, suma=0;
- p= new int; s= new int; k=new int;
- g=polska(tab, liczba_bankomatow);
- int x[g];
- for (int q=0;q<g;q++)
- {
- x[q]=(tab[q].liczba10*10 + tab[q].liczba20*20 + tab[q].liczba50*50 + tab[q].liczba100*100 + tab[q].liczba200*200);
- }
- t=polska2(tab, x, g);
- francuska(tab, t, p, s, k);
- int l200[t], l100[t], l50[t], l20[t], l10[t];
- for(int i = 0; i<t; i++)
- {
- suma=0;
- l200[i]=tab[i].liczba200;
- l100[i]=tab[i].liczba100;
- l50[i]=tab[i].liczba50;
- l20[i]=tab[i].liczba20;
- l10[i]=tab[i].liczba10;
- while(suma!=kwota*100)
- {
- if(l200[i]>0 and (kwota*100)%200==0 and suma<kwota*100)
- {
- suma=suma+200;
- l200[i]--;
- }
- else if(l100[i]>0 and (kwota*100)%100==0 and suma<kwota*100)
- {
- suma=suma+100;
- l100[i]--;
- }
- else if (l50[i]>0 and (kwota*100)%50==0 and suma<kwota*100)
- {
- suma=suma+50;
- l50[i]--;
- }
- else if (l20[i]>0 and (kwota*100)%20==0 and suma<kwota*100)
- {
- suma=suma+20;
- l20[i]--;
- }
- else if (l10[i]>0 and (kwota*100)%10==0 and suma<kwota*100)
- {
- suma=suma+10;
- l10[i]--;
- }
- }
- }
- cout << endl << "Polnoc: " << endl;
- if(x[*p] < 35000)
- cout << "W tej czesci Polski nie mozna wyplacic" << endl;
- else{
- for(int i=0; i<=(*p); i++)
- {
- 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;
- }
- }
- cout << endl << " Zachod i centrum: " << endl;
- if(x[*k-1] < 35000)
- cout << "W tej czesci Polski nie mozna wyplacic" << endl;
- else{
- for(int i =(*p)+1; i<=(*k)-1; i++)
- {
- 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;
- }
- }
- cout << endl << " Wschod i poludnie: " << endl;
- if(x[t-1]<35000)
- cout << "W tej czesci Polski nie mozna wyplacic" << endl;
- else{
- for(int i =*k; i<=t-1; i++)
- {
- 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;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement