24.11.2.24012020. Kreirajte uz pomoć NotePad-a tekstualnu datoteku “PODACI.TXT” koja sadrži podatke o studentima, tako da se za svakog studenta u prvom redu nalazi njegovo ime i prezime, u drugom redu broj indeksa, a u trećem redu njegove ocjene, razdvojene po jednim zarezom (broj ocjena nije fiksiran, a iza posljednje ocjene nema zareza). Zatim napravite program koji će iščitati sadržaj ove datoteke, obraditi podatke pohranjene u njoj, a zatim kreirati novu tekstualnu datoteku “REZULTATI.TXT” u kojoj će se nalaziti spisak studenata sortiran u opadajući poredak po prosjeku, prikazan u tri kolone: ime i prezime, broj indeksa, i prosjek na dvije decimale. Na primjer, ukoliko datoteka “PODACI.TXT” izgleda ovako:

Paja Patak
3443
8,10,9,7,9,7
Miki Maus
1234
7,6,8,9,8,8,6,7
Duško Dugouško
9876
10,9,10,8,9,7,8
tada generirana izlazna datoteka “REZULTATI.TXT” treba da izgleda ovako:
Duško Dugouško 9876 8.71
Paja Patak 3443 8.33
Miki Maus 1234 7.38
Program treba da ispiše odgovarajuću poruku o greški ukoliko ulazna datoteka sadrži neispravne podatke.

Opis rješenja:

Listing programa:

#include <iostream>
#include <conio.h>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <iomanip>
using namespace std;
struct Student{
char ime[35];
int indeks;
double prosjek;
};
bool kriterij(const Student &a,const Student &b){
    return (a.prosjek>b.prosjek);
    }
int main() {
Student novistud[20];

ifstream ulazstud("PODATAK.TXT");
int j(0);
if(!ulazstud)cout<<"nije uspjelo otvaranje dat...\n";
else{
    j=0;
 char pom='\n';
 for(;;){
        
      char ime[30];   
      double prosj(5);
	  int ocjene,indeks;	  
	  char zarez;    
   	     ulazstud.getline(ime,sizeof ime);
   	     if(!ulazstud){
         if(ulazstud.eof()) cout << "\nNema vise podataka!\n";
         else if(ulazstud.bad()) cout << "\nDatoteka je vjerovatno ostecena!\n";
         else cout << "\nDatoteka sadrzi neocekivane podatke!\n";
         break;
         }
         if(pom!='\n'){
              (novistud[j].ime)[0]=pom;
              strcat((novistud[j].ime),ime);
              }
         else
              strcpy((novistud[j].ime),ime);      
   	     ulazstud>>(novistud[j].indeks); 
   	     int i(0);
	  while(ulazstud>>ocjene>>zarez){
	     prosj+=ocjene; i++;
	     if(zarez!=','){pom=zarez;break;}	    
	     }
	     if(i>0){prosj-=5;
            prosj/=i;}
         (novistud[j].prosjek)=prosj;                 
         j++;	     
   }
}
ulazstud.close();
sort(novistud,novistud+j,kriterij);
ofstream izlazstud("REZULTATI.TXT");
if(!izlazstud) 
    cout<<"Kreiranje datoteke nije uspjelo!\n";
else{
	 for(int i=0;i<j;i++){
	    izlazstud<<(novistud[i].ime);
	    izlazstud.width(35-int(strlen(novistud[i].ime)));
  	    izlazstud<<(novistud[i].indeks);
  	    izlazstud.width(6);
  	    izlazstud<<setprecision(3);
  	    izlazstud<<(novistud[i].prosjek);
  	    izlazstud<< endl;  	    
        if(!izlazstud) {
           cout << "Nešto nije u redu sa upisom u datoteku!\n";
           break;
	       }
       } 
   }
getch();	  
return 0;
}

Ispis na ekranu:

Riješeni zadaci 2    Index