Informatică, întrebare adresată de lexued, 8 ani în urmă

2802 de pe pbinfo
Cerința
Se citește de la tastatură numărul n și un număr p cu valoarea 1 sau 2 și apoi n șiruri de tip nume prenume media1 media2 media3 separate prin spații.

Pentru p=1, se va afișa numărul elevilor care au media generală mai mare sau egală decât media clasei.

Pentru p=2, se va afișa pe primul rând media clasei și pe următoarele n rânduri, numele, prenumele și media generală a fiecărui elev, separate printr-un singur spațiu, sortat descrescător după medie; la medii egale se sortează crescător după nume, iar la nume egale crescător după prenume.

Date de intrare
Programul citește de la tastatură numerele n p, iar apoi de pe câte o linie cele n structuri de forma specificată în enunț.

Date de ieșire
Dacă p=1 programul va afișa pe ecran numărul elevilor care au media generală mai mare decât media clasei.

Dacă p=2 programul va afișa pe primul rând media clasei și pe următoarele n rânduri, numele, prenumele și media generală ale elevilor, separate printr-un singur spațiu, sortate conform cerinței.

Restricții și precizări
1 ≤ n ≤ 100
numele și prenumele au cel mult 100 de caractere
toate mediile clasei se vor afișa cu două zecimale, rezultatul afișat este considerat valid dacă diferența în valoare absolută dintre acesta și cel corect este cel mult 0.01.
media generală a unui elev este media aritmetică celor trei medii date.
media clasei este media aritmetică a mediilor generale ale elevilor.
Exemplul 1:
Intrare

5 1
Juro Muro 2 3 5
San Hill 7 5 9
Barbarigo San 9 2 4
Ezio Marbo 2 6 3
Gorbo Borbo 2 4 6
Ieșire

2
Exemplul 2:
Intrare

5 2
Juro Muro 2 3 5
San Hill 7 5 9
Barbarigo San 9 2 4
Ezio Marbo 2 6 3
Gorbo Borbo 2 4 6
Ieșire

4.60
San Hill 7.00
Barbarigo San 5.00
Gorbo Borbo 4.00
Ezio Marbo 3.67
Juro Muro 3.33


codul meu e acesta:
#include
#include
#include

using namespace std;

int n, p, i, m1, m2, m3, nr, j;
char s[115];
double mediet, medii[115], aux;
struct copil{
char nume[110], prenume[110];
float medie;
} v[115];

int
main()
{
cin >> n >> p;
if(p==1){
for (i = 1; i <= n;i++){
cin >> s;
cin >> s;
cin >> m1 >> m2 >> m3;
aux = m1*1.0 + m2*1.0 + m3*1.0;
aux /= 3.0;
mediet += aux;
medii[i] = aux;
}
mediet /= (n * 1.0);
for (i = 1; i <= n;i++){
if(medii[i]>=mediet)
nr++;
}
cout << nr;
}
if(p==2){
for (i = 1; i <= n;i++){
cin >> v[i].nume;
cin >> v[i].prenume;
cin >> m1 >> m2 >> m3;
aux = m1*1.0 + m2*1.0 + m3*1.0;
aux /= 3.0;
mediet += aux;
v[i].medie = aux;
}
mediet /= (n * 1.0);
cout << fixed << setprecision(2) << mediet << '\n';
for (i = 2; i <= n;i++){
for (j = 1; j < i;j++){
if(v[i].medie>v[j].medie){
strcpy(s, v[i]. nume);
strcpy(v[i].nume, v[j].nume);
strcpy(v[j].nume, s);
strcpy(s, v[i]. prenume);
strcpy(v[i].prenume, v[j].prenume);
strcpy(v[j].prenume, s);
swap(v[i].medie, v[j].medie);
}
}
}
for (i = 1; i <= n; i++)
{
cout << v[i].nume << ' ';
cout << v[i].prenume << ' ';
cout << fixed << setprecision(2) << v[i].medie << '\n';
}
}
return 0;
}

iau doar 60... ma ajuta cineva?


boiustef: tot 60... :((

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
2

#include <iostream>

#include <cmath>

#include <algorithm>

using namespace std;

struct elev{

string nume,prenume;

   double medie1,medie2,medie3;

   double mediegen;

};

elev elevi[101];

bool cmp(elev e1, elev e2){

   if(e1.mediegen == e2.mediegen){

    if(e1.nume == e2.nume)

           return e1.prenume < e2.prenume;

       else return e1.nume < e2.nume;

   }

return e1.mediegen > e2.mediegen;

}

int main(){

int n,p;

   cin >> n >> p;

   for(int i = 0; i < n; i++){

    cin >> elevi[i].nume >> elevi[i].prenume >> elevi[i].medie1 >> elevi[i].medie2 >> elevi[i].medie3;

    elevi[i].mediegen = (elevi[i].medie1 + elevi[i].medie2 + elevi[i].medie3)/3.0;

   }

   sort(&elevi[0], &elevi[n], cmp);

   double medie = 0;

   for(int i = 0; i < n; i++)

    medie += elevi[i].mediegen;

medie = medie / (1.0*n);

   medie = floor(medie * 100.0) / 100.0;

           

   switch(p){

       case 1:{

           int cnt = 0;

           for(int i = 0; i < n; i++){

            if(elevi[i].mediegen > medie)

                cnt++;

           }

           cout << cnt;

           break;

       }

       case 2:{

           cout << medie << "\n";

           for(int i = 0; i < n; i++)

               cout << elevi[i].nume << " " << elevi[i].prenume << " " << elevi[i].mediegen << "\n";

           break;

       }

   }

}


lexued: mersiiii
Alte întrebări interesante