Untitled
unknown
plain_text
4 years ago
3.7 kB
20
Indexable
#include <iostream> using namespace std; int x = 0; int brojac = 0; struct Datum { int dan, mjesec, godina; bool Validiraj(); //provjera je li datum validan (moguć) void Unos(); //unos svih obilježja objekta void Ispis(); //ispis svih obilježja objekta }; bool Datum::Validiraj() { int min = 1, max = 31; if (godina < 1981 || godina>2003) return false; if (mjesec < 1 || mjesec>12) return false; if (mjesec == 2) { if ((godina % 4 == 0 || godina%400==0) && (godina % 100 != 0)) max = 29; else max = 28; } else if ((mjesec == 4 || mjesec == 6 || mjesec == 9 || mjesec == 11)) max = 30; else max = 31; if (dan >= min && dan <= max) return true; return false; } void Datum::Unos() { cout << "\nUnesite dan >> ", cin >> dan; cout << "Unesite mjesec >> ", cin >> mjesec; cout << "Unesite godinu >> ", cin >> godina; } void Datum::Ispis() { //cout << "Dan je >> ", cout << dan; //cout << "Mjesec je >> ", cout << mjesec; //cout << "Godina je >> ", cout << godina; cout << dan << "." << mjesec << "." << godina << "."; } struct Student { int IB; char ImePrezime[20]; Datum datumRodjenja; }; void Unos(Student* niz, int max) { /*funkcija treba omogućiti incijalizaciju vrijednosti svih obilježja svih objekata koji se nalaze u nizu */ for (int i = 0; i < max; i++) { cout << "\t == UNOS == " << endl; cout << "\nUnesite broj indexa za " << ++x << ". studenta >>> ", cin >> (*(niz+i)).IB; cin.ignore(); cout << "\nUnesite ime i prezime " << x << ". studenta >>> ", cin.getline((niz + i)->ImePrezime, 20); cout << "Unesite datum rodjenja " << x << "studenta >>> ", (niz + i)->datumRodjenja.Unos(); } } void IspisPogresnih(Student* niz, int max) { for (int i = 0; i < max; i++) { cout << "\n"; cout << "\nBroj Indexa :" << (niz+i)->IB; cout << "\nIme i prezime :" << (niz + i)->ImePrezime; cout << "\nDatum rodjenja "; (niz + i)->datumRodjenja.Ispis(); cout << "\n"; } } Student* GetStudentSGreškom(Student* niz, int max) { /*funkcija treba vratiti pokazivač na niz unutar kojeg su pohranjeni (izdvojeni )samo oni objekti (tipa student) kojima je pogrešno evidentiran datum rođenja; Validan datum rođenja podrazumijeva: 1. mjeseci:januar, mart, maj, juli, august, oktobar i decembar imaju 31. dan 2. mjesec februar ima 28 odnosno 29 dana ovisno o tome je li godina prijestupna ili nije 3. mjeseci koji nisu obuhvaćeni pod 1. i 2. imaju 30 dana 4. Student ne smije biti mlađi od 18 niti stariji od 27 godina; */ // prebrojavanje "defektivnih" datuma for (int i = 0; i < max; i++) { if (((niz + i)->datumRodjenja.Validiraj()) != true) brojac++; } Student* nizPogresnih = new Student[brojac]; int j = 0; for (int i = 0; i < max; i++) { if (((niz + i)->datumRodjenja.Validiraj()) != true) { *(nizPogresnih + j) = *(niz + i); j++; } } return nizPogresnih; } void main() { /* omogućiti korisniku da odredi broj studenta omogućiti incijalizaciju obilježja za sve studente ispisati sve podatke o studentima kojima je datum rođenja pogrešno evidentiran */ int brStudenata; cout << "Koliko zelite unijeti studenata? >>> ", cin >> brStudenata; Student* nizStudenata = new Student[brStudenata]; Unos(nizStudenata, brStudenata); Student* Pointer = GetStudentSGreškom(nizStudenata, brStudenata); cout << "\t == ISPIS POGRESNIH ==" << endl; IspisPogresnih(Pointer, brojac); delete[]nizStudenata; nizStudenata = nullptr; delete (Pointer); Pointer = nullptr; }
Editor is loading...