Untitled
unknown
plain_text
4 years ago
3.7 kB
25
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...