Advertisement
zahra315

pr2/binarnaPretraga

May 30th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.95 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4.  
  5. struct Ucenik
  6. {
  7.     char *ime;
  8.     char *prezime;
  9.     char spol[10];
  10.     int ocjene[5];
  11.     char maticnibroj[15];
  12.     float pr;
  13. };
  14.  
  15. void unos(Ucenik &uc)
  16. {
  17.     //funkcija inicijalizira obiljezja za jednog ucenika
  18.     char tempIME[20], tempPREZ[50];
  19.     int velime, velprez;
  20.  
  21.     cout << "Unesite ime : ";
  22.     cin.getline(tempIME, 20);
  23.     cout << "Unesite prezime :";
  24.     cin.getline(tempPREZ, 50);
  25.  
  26.     velime = strlen(tempIME) + 1;
  27.     velprez = strlen(tempPREZ) + 1;
  28.  
  29.     uc.ime = new char[velime];
  30.     uc.prezime = new char[velprez];
  31.  
  32.     strcpy_s(uc.ime, velime, tempIME);
  33.     strcpy_s(uc.prezime, velprez, tempPREZ);
  34.  
  35.  
  36.     cout << "Unesite spol:";
  37.     cin.getline(uc.spol, 10);
  38.     cout << "Unesite ocjene :" << endl;
  39.     for (int i = 0; i < 5; i++)
  40.     {
  41.         cin >> uc.ocjene[i];
  42.     }
  43.     cin.ignore();
  44.     cout << "Unesite maticni broj:" << endl;
  45.     cin.getline(uc.maticnibroj, 15);
  46.     cin.ignore();
  47. }
  48.  
  49. void ispis(Ucenik uc)
  50. {//funkcija ispisuje
  51.     cout << "Ime i prezime : " << uc.ime << " " << uc.prezime << endl;
  52.     cout << "Spol ucenika :" << uc.spol << endl;
  53.     cout << "Ocjene ucenika :";
  54.     for (int i = 0; i < 5; i++)
  55.     {
  56.         cout << uc.ocjene[i] << ",";
  57.     }
  58.     cout << endl;
  59.     cout << "Maticni broj :" << uc.maticnibroj << endl;
  60.     cout << "Prosjecna ocjena ucenika :" << uc.pr << endl;
  61.     //ispis prosjecne ocjene je moguc tek nakon poziva funkcije prosjecna
  62. }
  63.  
  64. Ucenik * najduzePrezime(Ucenik * niz, int vel)
  65. {
  66.     //funkcija pronalazi i vraca pokazivac na ucenika s najduzim prezimenom
  67.  
  68.     int brojZnakova = strlen(niz[0].prezime);
  69.     Ucenik *pomocni = niz;
  70.     for (int i = 1; i < vel; i++)
  71.     {
  72.         if (brojZnakova <= strlen(niz[i].prezime))
  73.         {
  74.             brojZnakova = strlen(niz[i].prezime);
  75.             pomocni = niz + i;
  76.         }
  77.     }
  78.     return pomocni;
  79. }
  80.  
  81.  
  82. void Mir(Ucenik * niz, int vel)
  83. {
  84.     //funkcija pronalazi sve ucenike koji u imenu imaju kombinaciju slova mir
  85.     //svaki pronadjeni ucenik se prosljedjuje u funkciju ispis
  86.  
  87.     for (int i = 0; i < vel; i++)
  88.     {
  89.         if (strstr(niz[i].ime, "mir"))
  90.         {
  91.             ispis(niz[i]);
  92.         }
  93.  
  94.     }
  95.  
  96. }
  97.  
  98. void prosjek(Ucenik & ob)
  99. {//funkcija racuna prosjecnu ocjenu za jednog studenta i dodjeljuje ju u obiljezje pr
  100.     int sum = 0;
  101.     for (int i = 0; i < 5; i++)
  102.         sum += ob.ocjene[i];
  103.  
  104.     ob.pr = sum / 5.0;
  105.  
  106. }
  107.  
  108. void binarnoPretrazivanje(Ucenik *&niz, int vel) {
  109.  
  110.     Ucenik *noviNiz = new Ucenik[vel + 1];
  111.     for (int i = 1; i <= vel; i++)
  112.     {
  113.         noviNiz[i] = niz[i - 1];
  114.     }
  115.  
  116.     noviNiz[0].pr = 0;
  117.  
  118.     int prvi = 1, zadnji = vel + 1,broj, srednji;
  119.     bool nadjeni = false;
  120.     cout << "unesire broj za pretragu " << endl;
  121.     cin >>broj;
  122.     while ((nadjeni==false)&& (prvi <= zadnji))
  123.     {
  124.         srednji = (prvi + zadnji) / 2;
  125.         if (broj < noviNiz[srednji].pr)
  126.             zadnji = srednji - 1;
  127.         if (broj == noviNiz[srednji].pr)
  128.             nadjeni = true;
  129.         if (broj > noviNiz[srednji].pr)
  130.             prvi = srednji + 1;
  131.     }
  132.     if (nadjeni) {
  133.         cout << "beoj je pronadjen na lok " << srednji;
  134.     }
  135.                                                                                                                                                                                          //kljuc je nadjen if(broj>A[srednji]) prvi=srednji+1;  //druga polovina
  136. }
  137.  
  138. void zamijeni(Ucenik *niz, int vel)
  139. {
  140.     //funkcija mijenja mala u velika i velika u mala slova u imenu svakog od ucenika
  141.     for (int i = 0; i < vel; i++)
  142.     {
  143.         int duzinaIme = strlen(niz[i].ime) + 1;
  144.         for (int j = 0; j < duzinaIme; j++)
  145.         {
  146.             if (isupper(niz[i].ime[j]))
  147.  
  148.                 niz[i].ime[j] = tolower(niz[i].ime[j]);
  149.             else
  150.                 niz[i].ime[j] = toupper(niz[i].ime[j]);
  151.         }
  152.     }
  153. }
  154.  
  155. int prebrojiVokale(Ucenik uc)
  156. {//funkcija prebrojava vokale u prezimenu jednog ucenika
  157.     int broj = 0, a = strlen(uc.prezime);
  158.     for (int i = 0; i <a; i++)
  159.     {
  160.         if (uc.prezime[i] == 'a' || uc.prezime[i] == 'A' ||
  161.             uc.prezime[i] == 'e' || uc.prezime[i] == 'E' ||
  162.             uc.prezime[i] == 'i' || uc.prezime[i] == 'I' ||
  163.             uc.prezime[i] == 'o' || uc.prezime[i] == 'O' ||
  164.             uc.prezime[i] == 'u' || uc.prezime[i] == 'U')
  165.             broj++;
  166.  
  167.     }
  168.     return broj;
  169. }
  170.  
  171. void pretragaIme(Ucenik *niz, int vel)
  172. {
  173.     char imeZa[10];
  174.     cout << endl << "Unesite ime za pretragu" << endl;
  175.     cin.getline(imeZa, 10);
  176.     cout << endl << " Ucenici s trazenim imenom" << endl;
  177.     for (int i = 0; i < vel; i++)
  178.     {
  179.         if (strcmp(niz[i].ime, imeZa) == 0)
  180.             ispis(niz[i]);
  181.     }
  182. }
  183.  
  184. void pretragaPrezime(Ucenik *niz, int vel)
  185. {
  186.     char prezimeZa[15];
  187.     cout << endl << "Unesite prezime za pretragu" << endl;
  188.     cin.getline(prezimeZa, 15);
  189.     cout << endl << " Ucenici s trazenim prezimenom" << endl;
  190.     for (int i = 0; i < vel; i++)
  191.     {
  192.         if (strcmp(niz[i].prezime, prezimeZa) == 0)
  193.             ispis(niz[i]);
  194.     }
  195. }
  196.  
  197. void maticni(Ucenik *niz, int vel)
  198. {
  199.     //funkcija provjerava pocinje li obiljezje maticni broj s vrijednoscu 3
  200.     for (int i = 0; i < vel; i++)
  201.     {
  202.         if (niz[i].maticnibroj[0] == '3') //obiljezje maticni broj je niz karaktera
  203.             ispis(niz[i]);
  204.     }
  205. }
  206.  
  207. void dealociraj(Ucenik *& niz, int vel)
  208. {
  209.     // funkcija dealocira sve dinamicki kreirane objekte
  210.     for (int i = 0; i < vel; i++)
  211.     {
  212.         delete[]niz[i].ime;
  213.         delete[]niz[i].prezime;
  214.         niz[i].ime = nullptr;
  215.         niz[i].prezime = nullptr;
  216.     }
  217.  
  218.     delete[]niz;
  219.     niz = nullptr;
  220. }
  221.  
  222. void sortiranje(Ucenik *niz,int vel) {
  223.     int temp = 0;
  224.     Ucenik t;
  225.     for (int  i = 0; i < vel-1; i++)
  226.     {
  227.         temp = i;
  228.         for (int j = i+1; j < vel; j++)
  229.         {
  230.             if (niz[j].pr < niz[temp].pr)
  231.                 temp = j;
  232.         }
  233.         if (niz[i].pr > niz[temp].pr) {
  234.             t = niz[i];
  235.             niz[i] = niz[temp];
  236.             niz[temp] = t;
  237.         }
  238.     }  
  239. }
  240.  
  241. int main()
  242. {
  243.     int var;
  244.     cout << "Koliko objekata tipa ucenik zelite ?\n";
  245.     cin >> var;
  246.     cin.ignore();
  247.     Ucenik *objekti = new Ucenik[var];
  248.     cout << "Unesite obiljezja za ucenike:" << endl;
  249.     for (int i = 0; i < var; i++)
  250.     {
  251.         cout << "Unesite za " << i + 1 << " ucenika \n";
  252.         unos(objekti[i]);
  253.         cout << endl;
  254.     }
  255.     cout << "-------------------------" << endl;
  256.     cout << "Unesena obiljezja \n";
  257.     cout << "---------------------------" << endl;
  258.     for (int i = 0; i < var; i++)
  259.     {
  260.         ispis(objekti[i]);
  261.         cout << endl;
  262.     }
  263.     cout << endl << "Ucenik s najduzim prezimenom je: " << endl;
  264.     ispis(*najduzePrezime(objekti, var));
  265.  
  266.     cout << endl << "Ucenici koji u imenu imaju mir" << endl;
  267.     Mir(objekti, var);
  268.  
  269.     cout << " - - - - - - - - " << endl;
  270.  
  271.     cout << " - - - - - - - - " << endl;
  272.     for (int i = 0; i < var; i++)
  273.     {
  274.         prosjek(objekti[i]);
  275.     }
  276.     cout << endl << "Sortirani ucenici" << endl;
  277.  
  278.     sortiranje(objekti, var);
  279.  
  280.     for (int i = 0; i < var; i++)
  281.     {
  282.         ispis(objekti[i]);
  283.         cout << endl;
  284.     }
  285.     cout << "zamijenjena slova" << endl;
  286.     zamijeni(objekti, var);
  287.     cout << endl << endl;
  288.     for (int i = 0; i < var; i++)
  289.     {
  290.         cout << objekti[i].ime << endl;
  291.     }
  292.     cout << endl;
  293.     for (int i = 0; i < var; i++) {
  294.         cout << "Broj vokala za ucenika " << i + 1 << " " << objekti[i].ime << " " << objekti[i].prezime << " " << prebrojiVokale(objekti[i]) << endl;
  295.     }
  296.  
  297.     pretragaIme(objekti, var);
  298.     cout << endl;
  299.     pretragaPrezime(objekti, var);
  300.     cout << endl << "Ucenici kojima maticni broj pocinje s 3" << endl << endl;
  301.     maticni(objekti, var);
  302.     dealociraj(objekti, var);
  303.  
  304.     cout << "---------------------------" << endl;
  305.     binarnoPretrazivanje(objekti, var);
  306.  
  307.  
  308.     system("pause>0");
  309.     return 0;
  310. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement