Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <random>
- #include <cmath>
- #include <chrono>
- #include <string>
- #include "stog_polje.h"
- //#include "stog_pokazivaci.h"
- using namespace std;
- ///---------------FUNKCIJE-------------///////
- void addStackEnd(tStack *Stack);
- void isEmpty (tStack *Stack);
- void outputStack(tStack *Stack);
- void delStackEnd(tStack *Stack);
- void outLastStack(tStack *Stack);
- void horoSign(tStack *Stack);
- int testStack(tStack *Stack);
- void rand16People(tStack *Stack);
- void randGene(string &OIB, string bDay, double &weight);
- ///-----------------------------------///////
- const int maxNumPerson = 16;
- const double maxWeight= 1120;
- const int numFloor = 10;
- const string numString = "0123456789";
- const string nameM[20] = {"Andrija", "Boris", "Borna", "Bruno", "David", "Domagoj", "Duje", "Filip", "Franjo", "Goran", "Igor", "Hrvoje", "Luka", "Marin", "Marko", "Mislav", "Mladen", "Nikola", "Tihomir", "Tomislav"};
- const string nameF[20] = {"Anamarija", "Antonija", "Danijela", "Dora", "Dubravka", "Gabrijela", "Helena", "Irena", "Iva", "Kristina","Lea", "Lucija", "Monika", "Natalija", "Nora", "Petra", "Silvija", "Valentina", "Veronika", "Zlata"};
- const string nameL[20] = {"Balint","Civcija", "Coklica","Farago","Galinec","Hrebak","Jembrek","Krizanec","Krobot","Kunic","Matus","Neralic","Novak", "Ozegovic", "Parag", "Petrlic", "Pintaric", "Pukec", "Repic","Sestak"};
- mt19937 Gen (chrono::high_resolution_clock::now().time_since_epoch().count());
- //// Dobne skupine: 1. (0-14); 2. (15-24); 3. (25-64); 4. (65+)
- ///----------------MAIN----------------///////
- int main() {
- tStack *Stack;
- Stack = new tStack;
- int izbor = 0;
- while(izbor != 9) {
- 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:= ";
- cin >> izbor;
- switch(izbor) {
- case 1: addStackEnd(Stack);break;
- case 2: delStackEnd(Stack); break;
- case 3: outLastStack(Stack);break;
- case 4: isEmpty(Stack); break;
- case 5: outputStack(Stack); break;
- case 6: rand16People(Stack); break;
- case 7: horoSign(Stack);
- }
- }
- return 0;
- }
- ///------------------------------------///////
- ///-------------TIJELA FUNKCIJA-------------///////
- void addStackEnd(tStack *Stack) {
- if (Stack->top == -1) {
- cout << "Stog nije inicijaliziran. Inicijziram ga....\n";
- InitS(Stack);
- }
- int test = 0;
- tPerson Person;
- cin.ignore();
- cout << "Upisite ime osobe: ";
- getline(cin,Person.name);
- do {
- cout << "Upisite spol osobe (0:- muskarac; 1:- zena) ";
- cin >> test;
- }while(test != 0 && test != 1);
- if (test) {
- Person.gender = "female";
- } else {
- Person.gender = "male";
- }
- cin.ignore();
- cout << "Upisite datum rodjena (Format zapisa izgleda ovako: DD/MM/GG): ";
- cin >> Person.bDay;
- randGene(Person.OIB, Person.bDay, Person.weight);
- PushS(Person, Stack);
- }
- void isEmpty (tStack *Stack) {
- if (testStack(Stack)) {
- return;
- }
- cout << "Nije prazan\n";
- }
- void outputStack(tStack *Stack) {
- if (testStack(Stack)) {
- return;
- }
- int tTop = Stack->top;
- tPerson *Person = new tPerson[tTop-1];
- for (int i = 0 ; i < tTop-1 ; i++) {
- Person[i] = TopS(Stack);
- PopS(Stack);
- }
- cout << "\n-------ISPIS-------------\n";
- cout << "Stanje stoga = " << tTop-1 << endl;
- for (int i = tTop-2 ; 0 <= i ; i--) {
- cout << Person[i].name << " " << Person[i].OIB << " " << Person[i].gender << " " << Person[i].bDay << " " << Person[i].weight << endl;
- PushS(Person[i],Stack);
- }
- }
- void delStackEnd(tStack *Stack) {
- if (testStack(Stack)) {
- return;
- }
- PopS(Stack);
- }
- void outLastStack(tStack *Stack) {
- if (testStack(Stack)) {
- return;
- }
- tPerson Person;
- Person = TopS(Stack);
- cout << Person.OIB << endl;
- }
- void horoSign(tStack *Stack) {
- if (testStack(Stack)) {
- return;
- }
- tStack *qStack = new tStack;
- qStack->top = 1;
- int qTop = Stack->top;
- tPerson Person;
- string qString = "000";
- int qInt = 0;
- for ( int i = 0 ; i < qTop-1 ; i++) {
- Person = TopS(Stack);
- PopS(Stack);
- qString[0] = Person.bDay[4];
- qString[1] = Person.bDay[0];
- qString[2] = Person.bDay[1];
- qInt = stoi(qString);
- if (qInt >= 312 && qInt <= 420) {
- cout << "";
- } else {
- PushS(Person, qStack);
- }
- }
- InitS(Stack);
- qTop = qStack->top;
- for ( int i = 0 ; i < qTop-1 ; i++) {
- Person = TopS(qStack);
- PopS(qStack);
- PushS(Person, Stack);
- }
- }
- int testStack(tStack *Stack) {
- if (Stack->top == -1) {
- cout << "Stog nije inicijaliziran. Inicijziram ga....\n";
- InitS(Stack);
- return 1;
- } else if (IsEmptyS(Stack)) {
- cout << "Prazan je\n";
- return 1;
- }
- return 0;
- }
- void rand16People(tStack *Stack) {
- if (Stack->top == -1) {
- cout << "Stog nije inicijaliziran. Inicijziram ga....\n";
- InitS(Stack);
- }
- tPerson *Person = new tPerson[16];
- int ds1M = 0, ds2M = 0, ds3M = 0, ds4M = 0;
- int ds1F = 0, ds2F = 0, ds3F = 0, ds4F = 0;
- double sumWeight = 0;
- int count = 0;
- uniform_int_distribution <> disYear(1934,2014);
- uniform_int_distribution <> disMonth(1,12);
- uniform_int_distribution <> disDay(1,28);
- uniform_int_distribution <> disDayEven(0,2);
- uniform_int_distribution <> disDayOdd(0,3);
- uniform_int_distribution <> disName(0,19);
- int gender;
- int qInt;
- int qInt2;
- string qbDay;
- do {
- ds1M = ds2M = ds3M = ds4M = ds1F = ds2F = ds3F = ds4F = 0;
- sumWeight = 0;
- for (int i = 0 ; i < maxNumPerson ; i++) {
- gender = 0;
- qInt = 0;
- qInt2 = 0;
- qbDay = "";
- if (i>0) {
- if(Person[i-1].gender == "female") {
- Person[i].gender = "male";
- } else {
- Person[i].gender = "female";
- }
- } else {
- Person[i].gender = "male";
- }
- qInt2 = disMonth(Gen);
- qInt = disDay(Gen);
- if (qInt2 % 2 && qInt2 != 2) {
- qInt += disDayEven(Gen);
- } else if (!(qInt2 % 2) && qInt2 != 2) {
- qInt += disDayOdd(Gen);
- }
- if (qInt < 10) {
- qbDay += "0" + to_string(qInt);
- } else {
- qbDay += to_string(qInt);
- }
- qbDay += "/";
- if (qInt2 < 10) {
- qbDay += "0" + to_string(qInt2);
- } else {
- qbDay += to_string(qInt2);
- }
- qbDay += "/";
- qInt = disYear(Gen);
- qbDay += to_string(qInt);
- Person[i].bDay = qbDay;
- randGene(Person[i].OIB, Person[i].bDay, Person[i].weight);
- if (Person[i].gender == "female") {
- Person[i].name = nameF[disName(Gen)] + " " + nameL[disName(Gen)];
- } else {
- Person[i].name = nameM[disName(Gen)] + " " + nameL[disName(Gen)];
- }
- //// Dobne skupine: 1. (0-14); 2. (15-24); 3. (25-64); 4. (65+)
- qInt = 2014 - qInt;
- if (qInt < 15 && Person[i].gender == "female") {
- ds1F++;
- } else if (qInt < 25 && Person[i].gender == "female") {
- ds2F++;
- } else if (qInt < 65 && Person[i].gender == "female") {
- ds3F++;
- } else if (Person[i].gender == "female") {
- ds4F++;
- } else if (qInt < 15) {
- ds1M++;
- } else if (qInt < 25) {
- ds2M++;
- } else if (qInt < 65) {
- ds3M++;
- } else {
- ds4M++;
- }
- if (Person[i].weight < 2.5) {
- cout << qInt << " "<< Person[i].weight << endl;
- }
- sumWeight += Person[i].weight;
- }
- count++;
- }while(ds1M > 2 || ds2M > 2 || ds3M > 2 || ds4M > 2 || ds1F > 2 || ds2F > 2 || ds3F > 2 || ds4F > 2 || sumWeight > maxWeight);
- cout << "Prava kombinacija se dobila nakon: " << count << " puta." << endl;
- InitS(Stack);
- for(int i = 0 ; i < 16 ; i++) {
- PushS(Person[i],Stack);
- }
- }
- void randGene(string &OIB,string bDay, double &weight) { //Podaci o težini i OIBU se random generiraju
- string qYear = "0000"; //Pretvaranje datuma u samo godinu!
- int year = 0;
- for (int i = 0 ; i < 4 ; i++) {
- qYear[i] = bDay[i+6];
- }
- year = stoi(qYear);
- int age = 2014-year; //Računa se broj godina.
- uniform_int_distribution <> oibGene (0,9);
- uniform_real_distribution<double> dis0(0.0,1.0); //+- 0,5
- uniform_real_distribution<double> dis1(0.0,2.0); //+- 1
- uniform_int_distribution <> dis2(3,10);
- uniform_real_distribution<double> disElse(60,100);
- int tGender = 0;
- string tOIB = "00000000000"; //9^11 mogučih kombinacija odnosno 3e+10 kombinacija
- for (int i = 0 ; i < 11 ; i++) {
- tOIB[i] = numString[oibGene(Gen)];
- }
- OIB = tOIB;
- if (age == 0) {
- weight = 3 + (dis0(Gen)-0.5); //Weight = Age +- 0,5
- } else if (age == 1) {
- weight = 9 + (dis1(Gen)-1); //Weight = Age +- 1
- } else if (age < 5) {
- weight = age * 4.87 + age / double(dis2(Gen)); //Weight = Age * 4,87 + Age / 3-10
- } else if (age < 16) {
- weight = age * 3.31 + age / double(dis2(Gen)); //Weight = Age * 3,31 + Age / 3-10
- } else {
- weight = disElse(Gen); //Weight = 40 do 100
- }
- double tweight = weight;
- weight = int(weight);
- tweight -= weight;
- tweight *= 10;
- tweight = round(tweight);
- tweight /= 10;
- weight += tweight;
- }
- ///------------------------------------///////
Advertisement
Add Comment
Please, Sign In to add comment