Răspuns :
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!
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.