Structuri
de date
Enunt problema
Într-o clasă sunt n elevi, iar pentru fiecare se citeşte numele, notele obţinute
la o materie şi nota la teză. Să se calculeze mediile elevilor. Să se afişeze
numele elevilor care au obţinut media maximă. Să se afişeze elevii în ordinea alfabetică
a numelor, după care în ordinea descrescătoare a mediilor. Să se afişeze elevii
corigenţi. Afişarea va fi făcută în fişiere diferite.
Varianta de rezolvare
#include<iostream>
#include<string.h>
#include<fstream.h>
struct elev
{char nume[50];
float nota1,nota2,teza;
float m;};
int main()
{ elev v[100],aux;
int i,n,j;
float max;
cout<<"Numarul de copii:
";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"Nume elev: "; cin.get();
cin.get(v[i].nume,49,'\n');
cout<<"Prima nota:
";cin>>v[i].nota1;
cout<<"A doua nota:
";cin>>v[i].nota2;
cout<<"Teza:
";cin>>v[i].teza;}
//calculez media
for(i=1;i<=n;i++)
v[i].m=(((v[i].nota1+v[i].nota2)/2)*3+v[i].teza)/4;
ofstream
f("mediemax.txt");ofstream g("alfab.txt");
ofstream h("descresc.txt");ofstream
q("corigent.txt");
for(i=1;i<=n;i++)
{max=v[1].m;
if(v[i].m>max)
max=v[i].m; }
for(i=1;i<=n;i++)
if(v[i].m==max)
f<<v[i].nume<<" "<<v[i].m<<endl;
//scriu in fisierul g->alfab, elevii in ordine alfabetica
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(strcmp(v[i].nume,v[j].nume)>0)
{ aux=v[i];
v[i]=v[j];
v[j]=aux; }
for(i=1;i<=n;i++)
g<<v[i].nume<<endl;
//scriu in fisierul h->descresc, elevii in ordinea desc a mediilor
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(v[i].m<v[j].m)
{ aux=v[i];
v[i]=v[j];
v[j]=aux; }
for(i=1;i<=n;i++)
h<<v[i].nume<<"
"<<v[i].m<<endl;
//elevii corigenti
for(i=1;i<=n;i++)
if(v[i].m<5)
q<<v[i].nume<<"
"<<v[i].m<<endl;
f.close(); g.close(); h.close();q.close();
return 0;}
Niciun comentariu:
Trimiteți un comentariu