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

Într-o clasă sunt maxim 30 de elevi, fiecare elev fiind identificat prin nume şi prenume.
Elevul poate primi maxim 5 note la o disciplină, pe semestru, şi o notă la teză. Se citesc
de la tastatură: numărul de elevi din clasă şi, pentru fiecare elev, numele, prenumele şi
notele. Dacă are mai puțin de 5 note, notelor lipsă li se va atribui valoarea 0. Să se
calculeze şi să se afişeze mediile elevilor din clasă la acea disiplină, în ordinea:
a) descrescătoare a mediilor;
b) alfabetică a numelui şi prenumelui.

Am nevoie de ajutor, vă rog...

Răspunsuri la întrebare

Răspuns de thet0mmy1407
1

Răspuns:

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

   struct elevi{

       char nume[20], prenume [20];

       float note[5], teza, mediaNote, mediaTotala;

   }e[30], aux[30];

   int n, i, j, x, nrNote, inv; char invChar[20];

   cin >> n;

   for(i = 1; i <= n; i++){

       cin >> e[i].nume;

       cin >> e[i].prenume;

       cin >> nrNote;

       for(j = 1; j <= nrNote; j++)

           cin >> e[i].note[j];

       for(j = nrNote + 1; j <= 5; j++)

           e[i].note[j] = 0;

       cin >> e[i].teza;

   }

   for(i = 1; i <= n; i++){

       e[i].mediaNote = x = 0;

       for(j = 1; j <= 5; j++)

           if(e[i].note[j] != 0){

               e[i].mediaNote = e[i].mediaNote + e[i].note[j];

               x++;

           }

       e[i].mediaNote = e[i].mediaNote / x;

       e[i].mediaTotala = (3 * e[i].mediaNote + e[i].teza) / 4;

   }

   for(i = 1; i <= n; i++)

       aux[i].mediaTotala = e[i].mediaTotala;

   for(i = 1; i < n; i++)

       for(j = i + 1; j <= n; j++)

           if(aux[i].mediaTotala < aux[j].mediaTotala){

               inv = aux[i].mediaTotala;

               aux[i].mediaTotala = aux[j].mediaTotala;

               aux[j].mediaTotala = inv;

           }

   for(i = 1; i <= n; i++)

       cout << aux[i].mediaTotala << " ";

   cout << endl;

   for(i = 1; i < n; i++)

       for(j = i + 1; j <= n; j++){

           if(strcmp(e[i].nume, e[j].nume) < 0){

               strcpy(invChar, e[i].nume);

               strcpy(e[i].nume, e[j].nume);

               strcpy(e[j].nume, invChar);

           }

           else if (strcmp(e[i].nume, e[j].nume) == 0)

               if (strcmp(e[i].prenume, e[j].prenume) < 0){

                   strcpy(invChar, e[i].prenume);

                   strcpy(e[i].prenume, e[j].prenume);

                   strcpy(e[j].prenume, invChar);

               }

       }

   for(i = 1; i <= n; i++)

       cout << e[i].mediaTotala << " ";

   return 0;

}

Problema e foarte lunga, stiu...

A fost verificata in C++.


andreeabeno: Îți mulțumesc din tot sufletul❤
thet0mmy1407: Cu drag!
Alte întrebări interesante