Se dau n, reprezentând numărul de elevi apoi, pe câte un rând, datele câte unui elev: codul (număr natural de maxim 4 cifre), media la informatică (numar natural de la 1 la 10) și numărul de absențe. Definiți un tip structură pentru a putea memora datele unui elev si rezolvati cerintele:
a) memorați datele tuturor elevilor într-un vector de structuri de tipul definit;
b) afișați numărul de elevi cu media 10
c) afișați media clasei (se va afișa doar partea întreagă a ei).
d) afișați primii doi elevi după absențe (elevii cu cele mai multe absențe). Dacă sunt mai mulți elevi cu același număr de absențe se afișează în ordine crescătoare a codului. Dacă sunt mai mult de doi elevi număr maxim de absențe se afișează doar doi.
Date de intrare
Programul citește datele din fișierul qclasa.in astfel: pe primul rând n reprezentând numărul de elevi, iar apoi n rânduri cu câte trei numere naturale fiecare, separate prin câte un spațiu, reprezentând respectiv: codul, media și numărul de absențe pentru câte un elev.
Date de ieșire
Programul va afișa în fișierul qclasa.out patru linii, astfel: pe prima valoarea de la cerința b), pe a doua valoarea de la cerința c) pe a treia și pe a patra toate datele pentru fiecare dintre elevii obținuți la cerința d). Datele aceluiași elev se afișează în ordinea în care acestea se citesc din fișierul de intrare.
Restricții și precizări
1 ≤ n ≤ 40
codurile elevilor se garantează că sunt distincte
mediile sunt numere naturale de la 1 la 10
valorile pentru numărul de absențe sunt cuprinse între 0 și 100
Exemplu
qclasa.in
3
1 10 3
2 8 1
3 8 5
Ieșire
1
8
3 8 5
1 10 3
Răspunsuri la întrebare
Răspuns:
#include <stdio.h>
#include <stdlib.h>
int media_zece();
int media_clasei();
int top_absente();
int secund_absente();
struct Elev {
int cod;
int media_info;
int absente;
};
int main() {
int nr_elevi = 0;
int dimensiune = 0;
int temp;
int ct = 0;
FILE *fp;
char *filenameIn = "qclasa.in";
fp = fopen(filenameIn, "r+");
if(fp == NULL) {
printf("Nu am putut deschide fisierul %s", filenameIn);
return EXIT_FAILURE;
}
fscanf(fp, "%d", &dimensiune);
nr_elevi = dimensiune;
struct Elev elevi[nr_elevi];
while(!feof(fp)) {
fscanf(fp, "%d", &temp);
elevi[ct].cod = temp;
fscanf(fp, "%d", &temp);
elevi[ct].media_info = temp;
fscanf(fp, "%d", &temp);
elevi[ct].absente = temp;
ct++;
}
for(int i = 0; i < nr_elevi; i++) {
printf("\ncod: %d\t medie: %d\t absente: %d", elevi[i].cod, elevi[i].media_info, elevi[i].absente);
}
fclose(fp);
printf("\nNr de elevi cu media zece: %d\n", media_zece(elevi, nr_elevi));
printf("Media clasei este: %d\n", media_clasei(elevi, nr_elevi));
printf("Cel mai mare nr de absente: %d\n", top_absente(elevi, nr_elevi));
printf("Al doilea numar de absente: %d\n", secund_absente(elevi, nr_elevi));
FILE *fpr;
char *filenameOut = "qclasa.out";
fpr = fopen(filenameOut, "w+");
if(fpr == NULL) {
printf("Nu am putut deschide fisierul %s", filenameOut);
return EXIT_FAILURE;
}
fprintf(fpr, "%d\n%d", media_zece(elevi, nr_elevi), media_clasei(elevi, nr_elevi));
for(int i = 0; i < nr_elevi; i++) {
if(elevi[i].absente == top_absente(elevi, nr_elevi)) {
fprintf(fpr, "\n%d %d %d", elevi[i].cod, elevi[i].media_info, elevi[i].absente);
}
}
for(int i = 0; i < nr_elevi; i++) {
if(elevi[i].absente == secund_absente(elevi, nr_elevi)) {
fprintf(fpr, "\n%d %d %d", elevi[i].cod, elevi[i].media_info, elevi[i].absente);
}
}
fclose(fpr);
return EXIT_SUCCESS;
}
int media_zece(struct Elev e[], int dimensiune) {
int i = 0;
int media_zece = 0;
while(i < dimensiune) {
if(e[i].media_info == 10) media_zece++;
i++;
}
return media_zece;
}
int media_clasei(struct Elev e[], int dimensiune) {
int i = 0;
int suma_note = 0;
while(i < dimensiune) {
suma_note += e[i].media_info;
i++;
}
return (suma_note /= dimensiune);
}
int top_absente(struct Elev e[], int dimensiune) {
int i = 0;
int top = e[0].absente;
while(i < dimensiune) {
if(top < e[i].absente) {
top = e[i].absente;
}
i++;
}
return top;
}
int secund_absente(struct Elev e[], int dimensiune) {
int i = 0;
int top, secund;
top = secund = 0;
while(i < dimensiune) {
if(e[i].absente > top) {
secund = top;
top = e[i].absente;
} else if(e[i].absente > secund && e[i].absente < top) {
secund = e[i].absente;
}
i++;
}
return secund;
}
Explicație:
Am lasat in cod si functiile printf() pentru a testa codul in consola. Trebuie sa construiesti cele doua fisiere pentru input si output (qclasa.in si qclasa.out). Functioneaza corect pentru valorile date ca exemplu dar mai trebuie testat si pentru alte situatii. Acum ai un punct de pornire pentru problema. Succes!
using namespace std;
struct elev {
int cod;
int media;
int absente;
};
elev v[100], maxim1, maxim2;
int n, i, a, b;
int main () {
ifstream fin("qclasa.in");
ofstream fout("qclasa.out");
fin>>n;
for (i=1;i<=n;i++)
fin>>v[i].cod>>v[i].media>>v[i].absente;
a = 0;
for (i=1;i<=n;i++)
if (v[i].media == 10)
a++;
fout< b = 0;
for (i=1;i<=n;i++)
b += v[i].media;
fout<
maxim2 = v[1];
for (i=2;i<=n;i++)
if (v[i].absente > maxim1.absente || v[i].absente == maxim1.absente && v[i].cod < maxim1.cod) {
maxim2 = maxim1;
maxim1 = v[i];
} else
if (v[i].absente > maxim2.absente || v[i].absente == maxim2.absente && v[i].cod < maxim2.cod)
maxim2 = v[i];
fout< fout< return 0;
}