duminică, 28 aprilie 2013

Catedra de informatica de la Colegiul National Ienachita Vacarescu din Targoviste





Colegiul National "Ienachita Vacarescu"


Structuri de date




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