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
|
|