Habsburg

stog_main.cpp

Nov 18th, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <random>
  3. #include <cmath>
  4. #include <chrono>
  5. #include <string>
  6. #include "stog_polje.h"
  7. //#include "stog_pokazivaci.h"
  8. using namespace std;
  9.  
  10.  
  11.  
  12. ///---------------FUNKCIJE-------------///////
  13. void addStackEnd(tStack *Stack);
  14. void isEmpty (tStack *Stack);
  15. void outputStack(tStack *Stack);
  16. void delStackEnd(tStack *Stack);
  17. void outLastStack(tStack *Stack);
  18. void horoSign(tStack *Stack);
  19. int testStack(tStack *Stack);
  20. void rand16People(tStack *Stack);
  21. void randGene(string &OIB, string bDay, double &weight);
  22. ///-----------------------------------///////
  23.  
  24. const int maxNumPerson = 16;
  25. const double maxWeight= 1120;
  26. const int numFloor = 10;
  27. const string numString = "0123456789";
  28. const string nameM[20] = {"Andrija", "Boris", "Borna", "Bruno", "David", "Domagoj", "Duje", "Filip", "Franjo", "Goran", "Igor", "Hrvoje", "Luka", "Marin", "Marko", "Mislav", "Mladen", "Nikola", "Tihomir", "Tomislav"};
  29. const string nameF[20] = {"Anamarija", "Antonija", "Danijela", "Dora", "Dubravka", "Gabrijela", "Helena", "Irena", "Iva", "Kristina","Lea", "Lucija", "Monika", "Natalija", "Nora", "Petra", "Silvija", "Valentina", "Veronika", "Zlata"};
  30. const string nameL[20] = {"Balint","Civcija", "Coklica","Farago","Galinec","Hrebak","Jembrek","Krizanec","Krobot","Kunic","Matus","Neralic","Novak", "Ozegovic", "Parag", "Petrlic", "Pintaric", "Pukec", "Repic","Sestak"};
  31. mt19937 Gen (chrono::high_resolution_clock::now().time_since_epoch().count());
  32.  
  33. //// Dobne skupine: 1. (0-14); 2. (15-24); 3. (25-64); 4. (65+)
  34.  
  35. ///----------------MAIN----------------///////
  36. int main() {
  37.     tStack *Stack;
  38.     Stack = new tStack;
  39.    
  40.     int izbor = 0;
  41.     while(izbor != 9) {
  42.         cout << "--------IZBORNIK------\n1:- Dodaje element na stog\n2:- Brise element s stoga\n3:- Vraca element s vrha stoga\n4:- Dali je prazan?\n5:- Ispis stoga\n9:- Izlaz\nI:= ";
  43.         cin >> izbor;
  44.         switch(izbor) {
  45.             case 1: addStackEnd(Stack);break;
  46.             case 2: delStackEnd(Stack); break;
  47.             case 3: outLastStack(Stack);break;
  48.             case 4: isEmpty(Stack); break;
  49.             case 5: outputStack(Stack); break;
  50.             case 6: rand16People(Stack); break;
  51.             case 7: horoSign(Stack);
  52.         }
  53.     }
  54.     return 0;
  55. }
  56. ///------------------------------------///////
  57.  
  58.  
  59.  
  60. ///-------------TIJELA FUNKCIJA-------------///////
  61. void addStackEnd(tStack *Stack) {
  62.     if (Stack->top == -1) {
  63.         cout << "Stog nije inicijaliziran. Inicijziram ga....\n";
  64.         InitS(Stack);
  65.     }
  66.     int test = 0;
  67.     tPerson Person;
  68.     cin.ignore();
  69.     cout << "Upisite ime osobe: ";
  70.     getline(cin,Person.name);
  71.     do {
  72.         cout << "Upisite spol osobe (0:- muskarac; 1:- zena) ";
  73.         cin >> test;
  74.     }while(test != 0 && test != 1);
  75.    
  76.     if (test) {
  77.         Person.gender = "female";
  78.     } else {
  79.         Person.gender = "male";
  80.     }
  81.     cin.ignore();
  82.     cout << "Upisite datum rodjena (Format zapisa izgleda ovako: DD/MM/GG): ";
  83.     cin >> Person.bDay;
  84.     randGene(Person.OIB, Person.bDay, Person.weight);
  85.     PushS(Person, Stack);
  86. }
  87.  
  88. void isEmpty (tStack *Stack) {
  89.     if (testStack(Stack)) {
  90.         return;
  91.     }
  92.     cout << "Nije prazan\n";
  93. }
  94.  
  95. void outputStack(tStack *Stack) {
  96.     if (testStack(Stack)) {
  97.         return;
  98.     }
  99.    
  100.     int tTop = Stack->top;
  101.     tPerson *Person = new tPerson[tTop-1];
  102.    
  103.     for (int i = 0 ; i < tTop-1 ; i++) {
  104.         Person[i] = TopS(Stack);
  105.         PopS(Stack);
  106.     }
  107.    
  108.     cout << "\n-------ISPIS-------------\n";
  109.     cout << "Stanje stoga = " << tTop-1 << endl;
  110.    
  111.     for (int i = tTop-2 ; 0 <= i ; i--) {
  112.         cout << Person[i].name << " " << Person[i].OIB  << " " << Person[i].gender << " " << Person[i].bDay << " " << Person[i].weight << endl;
  113.         PushS(Person[i],Stack);
  114.     }
  115. }
  116.  
  117. void delStackEnd(tStack *Stack) {
  118.     if (testStack(Stack)) {
  119.         return;
  120.     }
  121.     PopS(Stack);
  122. }
  123.  
  124. void outLastStack(tStack *Stack) {
  125.     if (testStack(Stack)) {
  126.         return;
  127.     }
  128.     tPerson Person;
  129.    
  130.     Person =  TopS(Stack);
  131.     cout << Person.OIB << endl;
  132. }
  133.  
  134. void horoSign(tStack *Stack) {
  135.     if (testStack(Stack)) {
  136.         return;
  137.     }
  138.     tStack *qStack = new tStack;
  139.     qStack->top = 1;
  140.     int qTop = Stack->top;
  141.     tPerson Person;
  142.     string qString = "000";
  143.     int qInt = 0;
  144.     for ( int i = 0 ; i < qTop-1 ; i++) {
  145.         Person = TopS(Stack);
  146.         PopS(Stack);
  147.         qString[0] = Person.bDay[4];
  148.         qString[1] = Person.bDay[0];
  149.         qString[2] = Person.bDay[1];
  150.         qInt = stoi(qString);  
  151.         if (qInt >= 312 && qInt <= 420) {
  152.             cout << "";
  153.         } else {
  154.             PushS(Person, qStack);
  155.         }
  156.     }
  157.     InitS(Stack);
  158.     qTop = qStack->top;
  159.     for ( int i = 0 ; i < qTop-1 ; i++) {
  160.         Person = TopS(qStack);
  161.         PopS(qStack);
  162.         PushS(Person, Stack);
  163.     }
  164. }
  165.  
  166.  
  167. int testStack(tStack *Stack) {
  168.     if (Stack->top == -1) {
  169.         cout << "Stog nije inicijaliziran. Inicijziram ga....\n";
  170.         InitS(Stack);
  171.         return 1;
  172.     } else if (IsEmptyS(Stack)) {
  173.         cout << "Prazan je\n";
  174.         return 1;
  175.     }
  176.     return 0;
  177. }
  178.        
  179.        
  180. void rand16People(tStack *Stack) {
  181.     if (Stack->top == -1) {
  182.         cout << "Stog nije inicijaliziran. Inicijziram ga....\n";
  183.         InitS(Stack);
  184.     }
  185.     tPerson *Person = new tPerson[16];
  186.     int ds1M = 0, ds2M = 0, ds3M = 0, ds4M = 0;
  187.     int ds1F = 0, ds2F = 0, ds3F = 0, ds4F = 0;
  188.     double sumWeight = 0;
  189.     int count = 0;
  190.    
  191.     uniform_int_distribution <> disYear(1934,2014);
  192.     uniform_int_distribution <> disMonth(1,12);
  193.     uniform_int_distribution <> disDay(1,28);
  194.     uniform_int_distribution <> disDayEven(0,2);
  195.     uniform_int_distribution <> disDayOdd(0,3);
  196.     uniform_int_distribution <> disName(0,19);
  197.     int gender;
  198.     int qInt;
  199.     int qInt2;
  200.     string qbDay;
  201.     do {
  202.         ds1M = ds2M = ds3M = ds4M = ds1F = ds2F = ds3F = ds4F = 0;
  203.         sumWeight = 0;
  204.         for (int i = 0 ; i < maxNumPerson ; i++) {
  205.             gender = 0;
  206.             qInt = 0;
  207.             qInt2 = 0;
  208.             qbDay = "";
  209.            
  210.             if (i>0) {
  211.                 if(Person[i-1].gender == "female") {
  212.                     Person[i].gender = "male";
  213.                 } else {
  214.                     Person[i].gender = "female";
  215.                 }
  216.             } else {
  217.                 Person[i].gender = "male";
  218.             }
  219.            
  220.            
  221.             qInt2 = disMonth(Gen);
  222.             qInt = disDay(Gen);
  223.            
  224.             if (qInt2 % 2 && qInt2 != 2) {
  225.                 qInt += disDayEven(Gen);
  226.             } else if (!(qInt2 % 2) && qInt2 != 2) {
  227.                 qInt += disDayOdd(Gen);
  228.             }
  229.            
  230.             if (qInt < 10) {
  231.                 qbDay += "0" + to_string(qInt);
  232.             } else {
  233.                 qbDay += to_string(qInt);
  234.             }
  235.            
  236.             qbDay += "/";
  237.            
  238.             if (qInt2 < 10) {
  239.                 qbDay += "0" + to_string(qInt2);
  240.             } else {
  241.                 qbDay += to_string(qInt2);
  242.             }
  243.            
  244.             qbDay += "/";
  245.             qInt = disYear(Gen);
  246.             qbDay += to_string(qInt);
  247.            
  248.             Person[i].bDay = qbDay;
  249.             randGene(Person[i].OIB, Person[i].bDay, Person[i].weight);
  250.            
  251.             if (Person[i].gender == "female") {
  252.                 Person[i].name = nameF[disName(Gen)] + " " + nameL[disName(Gen)];
  253.             } else {
  254.                 Person[i].name = nameM[disName(Gen)] + " " + nameL[disName(Gen)];
  255.             }
  256.            
  257.                                                                 //// Dobne skupine: 1. (0-14); 2. (15-24); 3. (25-64); 4. (65+)
  258.             qInt = 2014 - qInt;
  259.             if (qInt < 15 && Person[i].gender == "female") {
  260.                 ds1F++;
  261.             } else if (qInt < 25 && Person[i].gender == "female") {
  262.                 ds2F++;
  263.             } else if (qInt < 65 && Person[i].gender == "female") {
  264.                 ds3F++;
  265.             } else if (Person[i].gender == "female") {
  266.                 ds4F++;
  267.             } else if (qInt < 15) {
  268.                 ds1M++;
  269.             } else if (qInt < 25) {
  270.                 ds2M++;
  271.             } else if (qInt < 65) {
  272.                 ds3M++;
  273.             } else {
  274.                 ds4M++;
  275.             }
  276.            
  277.             if (Person[i].weight < 2.5) {
  278.                 cout << qInt << " "<< Person[i].weight <<  endl;
  279.             }
  280.            
  281.             sumWeight += Person[i].weight;
  282.         }
  283.         count++;
  284.     }while(ds1M > 2 || ds2M > 2 || ds3M > 2 || ds4M > 2 || ds1F > 2 || ds2F > 2 || ds3F > 2 || ds4F > 2 || sumWeight > maxWeight);
  285.    
  286.     cout << "Prava kombinacija se dobila nakon: " << count << " puta." << endl;
  287.    
  288.     InitS(Stack);
  289.     for(int i = 0 ; i < 16 ; i++) {
  290.         PushS(Person[i],Stack);
  291.     }
  292. }
  293.  
  294.  
  295. void randGene(string &OIB,string bDay, double &weight) {            //Podaci o težini i OIBU se random generiraju
  296.     string qYear = "0000";                                          //Pretvaranje datuma u samo godinu!
  297.     int year = 0;
  298.     for (int i = 0 ; i < 4 ; i++) {
  299.         qYear[i] = bDay[i+6];
  300.     }
  301.    
  302.     year = stoi(qYear);                                        
  303.    
  304.     int age = 2014-year;                                        //Računa se broj godina.
  305.    
  306.     uniform_int_distribution <> oibGene (0,9);
  307.     uniform_real_distribution<double> dis0(0.0,1.0);            //+- 0,5
  308.     uniform_real_distribution<double> dis1(0.0,2.0);                //+- 1
  309.     uniform_int_distribution <> dis2(3,10);
  310.     uniform_real_distribution<double> disElse(60,100);
  311.     int tGender = 0;
  312.     string tOIB = "00000000000";                                //9^11 mogučih kombinacija odnosno 3e+10 kombinacija
  313.    
  314.     for (int i = 0 ; i < 11 ; i++) {
  315.         tOIB[i] = numString[oibGene(Gen)];
  316.     }
  317.     OIB = tOIB;
  318.    
  319.     if (age == 0) {
  320.         weight = 3 + (dis0(Gen)-0.5);                           //Weight = Age +- 0,5
  321.     } else if (age == 1) {
  322.         weight = 9 + (dis1(Gen)-1);                             //Weight = Age +- 1
  323.     } else if (age < 5) {
  324.         weight = age * 4.87 + age / double(dis2(Gen));      //Weight = Age * 4,87 + Age / 3-10
  325.     } else if (age < 16) {
  326.         weight = age * 3.31 + age / double(dis2(Gen));      //Weight = Age * 3,31 + Age / 3-10
  327.     } else {
  328.         weight = disElse(Gen);                                  //Weight = 40 do 100
  329.     }
  330.     double tweight = weight;
  331.     weight = int(weight);
  332.     tweight -= weight;
  333.     tweight *= 10;
  334.     tweight = round(tweight);
  335.     tweight /= 10;
  336.     weight += tweight;
  337. }
  338.  
  339. ///------------------------------------///////
Advertisement
Add Comment
Please, Sign In to add comment