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 pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!