Advertisement
sellmmaahh

tut8-zad3

Jul 29th, 2015
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <string>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <memory>
  7.  
  8. using namespace std;
  9. const int BrPredmeta(8);
  10. struct Datum {
  11. int dan, mjesec, godina;
  12. };
  13. struct Ucenik {
  14. string ime, prezime;
  15. Datum datum_rodjenja;
  16. int ocjene[BrPredmeta];
  17. double prosjek;
  18. bool prolaz;
  19. };
  20.  
  21. int main () {
  22.     void UnesiUcenike (Ucenik **&p_ucenici, int br_ucenike);
  23.     void ObradiUcenike (Ucenik **&p_ucenici, int br_ucenika);
  24.     void IspisiIzvjestaj (const Ucenik **&p_ucenici);
  25.     int br_ucenika;
  26.     cout<<"Koliko ima ucenika: ";
  27.     cin>>br_ucenika;
  28. try {
  29.     Ucenik **p_ucenici;
  30.     p_ucenici= new Ucenik*[br_ucenika];
  31.  
  32.    try { UnesiUcenike(p_ucenici, int br_ucenika);
  33.    } catch (...) {
  34.    OslobodiMemoriju(Ucenik **p_ucenici,int br_ucenika);
  35.    }
  36.     ObradiUcenike(Ucenik **p_ucenici, int br_ucenika);
  37.     IspisiIzvjestaj(Ucenik **p_ucenici, int br_ucenika);
  38.     OslobodiMemoriju(Ucenik **p_ucenici, int br_ucenika);
  39. } catch (...) {
  40. cout<<"Problemi sa memorijom.";
  41. }
  42.     return 0;
  43. }
  44.  
  45. void UnesiUcenike (&p_ucenici, int br_ucenika){
  46.     void UnesiJednogUcenika(Ucenik *p_ucenik);
  47.     for (int i=0; i<br_ucenika; i++) {
  48.         cout<<"Unesite podatke za "<<i+1<<". ucenika:\n";
  49.         p_ucenici[i]=new Ucenik ;
  50.         UnesiJednogUcenika(p_ucenici[i]);
  51.     }}
  52.  
  53. void UnesiJednogUcenika (Ucenik *p_ucenik) {
  54. void UnesiDatum (Datum &datum);
  55. void UnesiOcjene (int ocjene [], int br_predmeta);
  56. cout<<"Ime: "; cin>>p_ucenik->ime;
  57. cout<<"Prezime: "; cin>>p_ucenik->prezime;
  58. cout<<"Datum rodjenja (D/M/G) : ";
  59. UnesiDatum(p_ucenik->datum_rodjenja);
  60. UnesiOcjene(p_ucenik->ocjene, BrPredmeta);
  61. }
  62. void UnesiDatum(Datum &datum)
  63. { char znak;
  64. cin>>datum.dan>>znak>>datum.mjesec>>znak>>datum.godina;
  65. }
  66.  
  67. void UnesiOcjene (int ocjene [], int broj_predmeta) {
  68. for (int i=0; i<broj_predmeta; i++) {
  69.     cout<<" Ocjena iz "<<i+1<<". predmeta: ";
  70.     cin>>ocjene[i];
  71. }
  72. }
  73. void ObradiUcenike (Ucenik **&p_ucenici, int br_ucenika) {
  74. void ObradiJednogUcenika (Ucenik **p_ucenik, int br_ucenika);
  75. for (int i=0; i<br_ucenika; i++) ObradiJednogUcenika(p_ucenici[i]);
  76. sort(p_ucenici.begin(), p_ucenici.end(), [] (const Ucenik *p_u1, const Ucenik *p_u2) {
  77. return p_u1->prosjek>p_u2->prosjek;
  78. });
  79. }
  80.  
  81. void ObradiJednogUcenika (Ucenik **p_ucenik, int br_ucenika) {
  82. double suma_ocjena(0);
  83. p_ucenik->prosjek=1;
  84. p_ucenik->prolaz=false;
  85. for (int i=0; i<br_ucenika; i++) {
  86.     if (ocjena==1) return;
  87.     suma_ocjena+=ocjena;
  88. }
  89. p_ucenik->prolaz=true;
  90. p_ucenik->prosjek=suma_ocjena/BrPredmeta;
  91. }
  92.  
  93. void IspisiIzvjestaj(const Ucenik **p_ucenici, br_ucenika) {
  94. void IspisiJednogUcenika (const shared_ptr<Ucenik> p_ucenik);
  95. cout<<endl;
  96. for (int i=0; i<br_ucenika; i++) IspisiJednogUcenika(p_ucenici[i]);
  97. }
  98.  
  99. void IspisiJednogUcenika (Ucenik **p_ucenik, int br_ucenika) {
  100.     void IspisiDatum (const Datum &datum);
  101.     cout<<"Ucenik: "<<p_ucenik->ime<< " "<<p_ucenik->prezime<<" rodjen ";
  102.     IspisiDatum(p_ucenik->datum_rodjenja);
  103.     if (p_ucenik->prolaz) cout<<"ima prosjek "<<setprecision(3)<<p_ucenik->prosjek;
  104.     else cout<<" mora ponavljati razred";
  105.     cout<<endl;
  106. }
  107. void IspisiDatum (const Datum &datum) {
  108. cout<<datum.dan<<"/"<<datum.mjesec<<"/"<<datum.godina;
  109. }
  110. void OslobodiMemoriju(Ucenik **ucenici, int br_ucenika) {
  111. for (int i=0; i<br_ucenika; i++)
  112.     delete [] ucenici[i];
  113.     delete [] ucenici;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement