Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- struct Ucenik
- {
- char *ime;
- char *prezime;
- char spol[10];
- int ocjene[5];
- char maticnibroj[15];
- float pr;
- };
- void unos(Ucenik &uc)
- {
- //funkcija inicijalizira obiljezja za jednog ucenika
- char tempIME[20], tempPREZ[50];
- int velime, velprez;
- cout << "Unesite ime : ";
- cin.getline(tempIME, 20);
- cout << "Unesite prezime :";
- cin.getline(tempPREZ, 50);
- velime = strlen(tempIME) + 1;
- velprez = strlen(tempPREZ) + 1;
- uc.ime = new char[velime];
- uc.prezime = new char[velprez];
- strcpy_s(uc.ime, velime, tempIME);
- strcpy_s(uc.prezime, velprez, tempPREZ);
- cout << "Unesite spol:";
- cin.getline(uc.spol, 10);
- cout << "Unesite ocjene :" << endl;
- for (int i = 0; i < 5; i++)
- {
- cin >> uc.ocjene[i];
- }
- cin.ignore();
- cout << "Unesite maticni broj:" << endl;
- cin.getline(uc.maticnibroj, 15);
- cin.ignore();
- }
- void ispis(Ucenik uc)
- {//funkcija ispisuje
- cout << "Ime i prezime : " << uc.ime << " " << uc.prezime << endl;
- cout << "Spol ucenika :" << uc.spol << endl;
- cout << "Ocjene ucenika :";
- for (int i = 0; i < 5; i++)
- {
- cout << uc.ocjene[i] << ",";
- }
- cout << endl;
- cout << "Maticni broj :" << uc.maticnibroj << endl;
- cout << "Prosjecna ocjena ucenika :" << uc.pr << endl;
- //ispis prosjecne ocjene je moguc tek nakon poziva funkcije prosjecna
- }
- Ucenik * najduzePrezime(Ucenik * niz, int vel)
- {
- //funkcija pronalazi i vraca pokazivac na ucenika s najduzim prezimenom
- int brojZnakova = strlen(niz[0].prezime);
- Ucenik *pomocni = niz;
- for (int i = 1; i < vel; i++)
- {
- if (brojZnakova <= strlen(niz[i].prezime))
- {
- brojZnakova = strlen(niz[i].prezime);
- pomocni = niz + i;
- }
- }
- return pomocni;
- }
- void Mir(Ucenik * niz, int vel)
- {
- //funkcija pronalazi sve ucenike koji u imenu imaju kombinaciju slova mir
- //svaki pronadjeni ucenik se prosljedjuje u funkciju ispis
- for (int i = 0; i < vel; i++)
- {
- if (strstr(niz[i].ime, "mir"))
- {
- ispis(niz[i]);
- }
- }
- }
- void prosjek(Ucenik & ob)
- {//funkcija racuna prosjecnu ocjenu za jednog studenta i dodjeljuje ju u obiljezje pr
- int sum = 0;
- for (int i = 0; i < 5; i++)
- sum += ob.ocjene[i];
- ob.pr = sum / 5.0;
- }
- void binarnoPretrazivanje(Ucenik *&niz, int vel) {
- Ucenik *noviNiz = new Ucenik[vel + 1];
- for (int i = 1; i <= vel; i++)
- {
- noviNiz[i] = niz[i - 1];
- }
- noviNiz[0].pr = 0;
- int prvi = 1, zadnji = vel + 1,broj, srednji;
- bool nadjeni = false;
- cout << "unesire broj za pretragu " << endl;
- cin >>broj;
- while ((nadjeni==false)&& (prvi <= zadnji))
- {
- srednji = (prvi + zadnji) / 2;
- if (broj < noviNiz[srednji].pr)
- zadnji = srednji - 1;
- if (broj == noviNiz[srednji].pr)
- nadjeni = true;
- if (broj > noviNiz[srednji].pr)
- prvi = srednji + 1;
- }
- if (nadjeni) {
- cout << "beoj je pronadjen na lok " << srednji;
- }
- //kljuc je nadjen if(broj>A[srednji]) prvi=srednji+1; //druga polovina
- }
- void zamijeni(Ucenik *niz, int vel)
- {
- //funkcija mijenja mala u velika i velika u mala slova u imenu svakog od ucenika
- for (int i = 0; i < vel; i++)
- {
- int duzinaIme = strlen(niz[i].ime) + 1;
- for (int j = 0; j < duzinaIme; j++)
- {
- if (isupper(niz[i].ime[j]))
- niz[i].ime[j] = tolower(niz[i].ime[j]);
- else
- niz[i].ime[j] = toupper(niz[i].ime[j]);
- }
- }
- }
- int prebrojiVokale(Ucenik uc)
- {//funkcija prebrojava vokale u prezimenu jednog ucenika
- int broj = 0, a = strlen(uc.prezime);
- for (int i = 0; i <a; i++)
- {
- if (uc.prezime[i] == 'a' || uc.prezime[i] == 'A' ||
- uc.prezime[i] == 'e' || uc.prezime[i] == 'E' ||
- uc.prezime[i] == 'i' || uc.prezime[i] == 'I' ||
- uc.prezime[i] == 'o' || uc.prezime[i] == 'O' ||
- uc.prezime[i] == 'u' || uc.prezime[i] == 'U')
- broj++;
- }
- return broj;
- }
- void pretragaIme(Ucenik *niz, int vel)
- {
- char imeZa[10];
- cout << endl << "Unesite ime za pretragu" << endl;
- cin.getline(imeZa, 10);
- cout << endl << " Ucenici s trazenim imenom" << endl;
- for (int i = 0; i < vel; i++)
- {
- if (strcmp(niz[i].ime, imeZa) == 0)
- ispis(niz[i]);
- }
- }
- void pretragaPrezime(Ucenik *niz, int vel)
- {
- char prezimeZa[15];
- cout << endl << "Unesite prezime za pretragu" << endl;
- cin.getline(prezimeZa, 15);
- cout << endl << " Ucenici s trazenim prezimenom" << endl;
- for (int i = 0; i < vel; i++)
- {
- if (strcmp(niz[i].prezime, prezimeZa) == 0)
- ispis(niz[i]);
- }
- }
- void maticni(Ucenik *niz, int vel)
- {
- //funkcija provjerava pocinje li obiljezje maticni broj s vrijednoscu 3
- for (int i = 0; i < vel; i++)
- {
- if (niz[i].maticnibroj[0] == '3') //obiljezje maticni broj je niz karaktera
- ispis(niz[i]);
- }
- }
- void dealociraj(Ucenik *& niz, int vel)
- {
- // funkcija dealocira sve dinamicki kreirane objekte
- for (int i = 0; i < vel; i++)
- {
- delete[]niz[i].ime;
- delete[]niz[i].prezime;
- niz[i].ime = nullptr;
- niz[i].prezime = nullptr;
- }
- delete[]niz;
- niz = nullptr;
- }
- void sortiranje(Ucenik *niz,int vel) {
- int temp = 0;
- Ucenik t;
- for (int i = 0; i < vel-1; i++)
- {
- temp = i;
- for (int j = i+1; j < vel; j++)
- {
- if (niz[j].pr < niz[temp].pr)
- temp = j;
- }
- if (niz[i].pr > niz[temp].pr) {
- t = niz[i];
- niz[i] = niz[temp];
- niz[temp] = t;
- }
- }
- }
- int main()
- {
- int var;
- cout << "Koliko objekata tipa ucenik zelite ?\n";
- cin >> var;
- cin.ignore();
- Ucenik *objekti = new Ucenik[var];
- cout << "Unesite obiljezja za ucenike:" << endl;
- for (int i = 0; i < var; i++)
- {
- cout << "Unesite za " << i + 1 << " ucenika \n";
- unos(objekti[i]);
- cout << endl;
- }
- cout << "-------------------------" << endl;
- cout << "Unesena obiljezja \n";
- cout << "---------------------------" << endl;
- for (int i = 0; i < var; i++)
- {
- ispis(objekti[i]);
- cout << endl;
- }
- cout << endl << "Ucenik s najduzim prezimenom je: " << endl;
- ispis(*najduzePrezime(objekti, var));
- cout << endl << "Ucenici koji u imenu imaju mir" << endl;
- Mir(objekti, var);
- cout << " - - - - - - - - " << endl;
- cout << " - - - - - - - - " << endl;
- for (int i = 0; i < var; i++)
- {
- prosjek(objekti[i]);
- }
- cout << endl << "Sortirani ucenici" << endl;
- sortiranje(objekti, var);
- for (int i = 0; i < var; i++)
- {
- ispis(objekti[i]);
- cout << endl;
- }
- cout << "zamijenjena slova" << endl;
- zamijeni(objekti, var);
- cout << endl << endl;
- for (int i = 0; i < var; i++)
- {
- cout << objekti[i].ime << endl;
- }
- cout << endl;
- for (int i = 0; i < var; i++) {
- cout << "Broj vokala za ucenika " << i + 1 << " " << objekti[i].ime << " " << objekti[i].prezime << " " << prebrojiVokale(objekti[i]) << endl;
- }
- pretragaIme(objekti, var);
- cout << endl;
- pretragaPrezime(objekti, var);
- cout << endl << "Ucenici kojima maticni broj pocinje s 3" << endl << endl;
- maticni(objekti, var);
- dealociraj(objekti, var);
- cout << "---------------------------" << endl;
- binarnoPretrazivanje(objekti, var);
- system("pause>0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement