Testo dell'esercizio
Dato un vettore chiamato cognomi(N) contentente i cognomi degli studenti di una classe e una matrice voti(N x C) che riporta i voti degli studenti in C materie, caricare casualmente la matrice voti con valori interi compresi tra 1 e 10 e quindi visualizzare,:
1- per ogni studente, il voto più alto, quello più basso e la media dei voti conseguiti.
2-per ogni studente il numero di voti negativi e il numero di voti positivi.
3- visualizzae gli studenti promossi senza alcun debito, quelli promossi con 1,2,3 debiti formativi e quelli respinti.
4- Visualizzare per ogni studente la materia (o le materie) in cui ha il voto migliore e il voto peggiore. supporre di avere un ulterirore vettore materie(C) contenente le materie oggetto di valutazione.
5-Visualizzare la materia (o le materie) con il più alto numeri di insufficienze riportato dagli alunni e quella con il più alto numero di valutazioni positive
6- calcolare per ogni materia la media dei voti riportati, visualizzando il risultato in ordine decrescente di media
7-visualizzare i voti riportati da uno studente di cui è fornito in ingresso il cognome, calcolandone inoltre la media e visualizzando la materia (o le materie) in cui va meglio
8- visualizzare i voti riportati dagli studenti in una materia fornita in ingresso, calcolandone inoltre la media e visualizzando i cognomi degli studenti che hanno riportato la valutazione peggiore.
mostra soluzione
021 | void azzera( int vet[], int n); |
022 | void carica( int mat[MAX][MAX], int *n, int *c); |
023 | void acquisisci( char vet[MAX][MAX], int n); |
024 | int max( int vet[], int n); |
025 | int min( int vet[], int n); |
026 | float media( int vet[], int n); |
027 | int voti_negativi( int vet[], int n); |
028 | int voti_positivi( int vet[], int n); |
029 | void migliori( int vet[], int n, int results[]); |
030 | void peggiori( int vet[], int n, int results[]); |
031 | void materia_migliore( int mat[MAX][MAX], int n, int c, int results[]); |
032 | void materia_peggiore( int mat[MAX][MAX], int n, int c, int results[]); |
033 | void ordina( int vet[], int n); |
034 | void ordina_f( float vet[], int n); |
035 | int cerca( char vet[MAX][MAX], int n, char *ele); |
044 | int mat[MAX][MAX], n, c, scelta, i, j, debiti[5][MAX],indici_debiti[5],aux,vet_aux[MAX+1],vet_aux2[MAX+1], pos; |
045 | char cognomi[MAX][MAX], materie[MAX][MAX], stringa[MAX]; |
046 | float vet_aux_f[MAX+1]; |
050 | printf ( "caricamento cognimi :\n" ); |
052 | acquisisci(cognomi,n); |
053 | printf ( "caricamento materie :\n" ); |
054 | acquisisci(materie,c); |
055 | azzera(indici_debiti,5); |
059 | printf ( "1- per ogni studente, il voto più alto, quello più basso e la media dei voti conseguiti. \n2-per ogni studente il numero di voti negativi e il numero di voti positivi.\n3- visualizzare gli studenti promossi senza alcun debito, quelli promossi con 1,2,3 debiti formativi e quelli respinti.\n4- Visualizzare per ogni studente la materia (o le materie) in cui ha il voto migliore e il voto peggiore. supporre di avere un ulterirore vettore materie(C) contenente le materie oggetto di valutazione.\n5-Visualizzare la materia (o le materie) con il più alto numeri di insufficienze riportato dagli alunni e quella con il più alto numero di valutazioni positive\n6- calcolare per ogni materia la media dei voti riportati, visualizzando il risultato in ordine decrescente di media\n7-visualizzare i voti riportati da uno studente di cui è fornito in ingresso il cognome, calcolandone inoltre la media e visualizzando la materia (o le materie) in cui va meglio\n8- visualizzare i voti riportati dagli studenti in una materia fornita in ingresso, calcolandone inoltre la media e visualizzando i cognomi degli studenti che hanno riportato la valutazione peggiore.\n0- uscita\nscelta : " ); |
061 | } while (scelta < 0 || scelta > 8); |
068 | printf ( "studente : %s : voto piu` alto = %d, voto piu` basso = %d, media voti = %f\n" ,cognomi[i],mat[i][max(mat[i],c)],mat[i][min(mat[i],c)],media(mat[i],c)); |
073 | printf ( "studente : %s : numero voti negativi = %d, numero voti positivi = %d\n" ,cognomi[i],voti_negativi(mat[i],c),voti_positivi(mat[i],c)); |
078 | if ((aux = voti_negativi(mat[i],c))>=4) |
079 | debiti[4][indici_debiti[4]++] = i; |
081 | debiti[aux][indici_debiti[aux]++] = i; |
084 | printf ( "studenti senza debito :\n" ); |
085 | for (i=0;i<indici_debiti[0];i++) |
086 | printf ( "%s\n" ,cognomi[debiti[0][i]]); |
087 | printf ( "studenti con un debiti :\n" ); |
088 | for (i=0;i<indici_debiti[1];i++) |
089 | printf ( "%s\n" ,cognomi[debiti[1][i]]); |
090 | printf ( "studenti con due debiti :\n" ); |
091 | for (i=0;i<indici_debiti[2];i++) |
092 | printf ( "%s\n" ,cognomi[debiti[2][i]]); |
093 | printf ( "studenti con tre debiti :\n" ); |
094 | for (i=0;i<indici_debiti[3];i++) |
095 | printf ( "%s\n" ,cognomi[debiti[3][i]]); |
096 | printf ( "studenti bocciati :\n" ); |
097 | for (i=0;i<indici_debiti[4];i++) |
098 | printf ( "%s\n" ,cognomi[debiti[4][i]]); |
103 | printf ( "studente : %s\nmigliori:\n" ,cognomi[i]); |
104 | migliori(mat[i],c,vet_aux); |
105 | for (j=0;vet_aux[j]>=0;j++) |
106 | printf ( "%s\n" ,materie[vet_aux[j]]); |
107 | printf ( "peggiori:\n" ); |
108 | peggiori(mat[i],c,vet_aux); |
109 | for (j=0;vet_aux[j]>=0;j++) |
110 | printf ( "%s\n" ,materie[vet_aux[j]]); |
116 | printf ( "materie migliori :\n" ); |
117 | materia_migliore(mat,n,c,vet_aux); |
118 | for (j=0;vet_aux[j]>=0;j++) |
119 | printf ( "%s\n" ,materie[vet_aux[j]]); |
120 | printf ( "materie peggiori :\n" ); |
121 | materia_peggiore(mat,n,c,vet_aux); |
122 | for (j=0;vet_aux[j]>=0;j++) |
123 | printf ( "%s\n" ,materie[vet_aux[j]]); |
130 | vet_aux2[i]=mat[i][j]; |
131 | vet_aux_f[j] = media(vet_aux2,n); |
135 | ordina_f(vet_aux_f,c); |
140 | printf ( "%f\n" ,vet_aux_f[i]); |
145 | printf ( "inserire un cognome : " ); |
149 | if ((pos = cerca(cognomi, n,stringa))>=0){ |
152 | printf ( "%s -> %d\n" ,materie[i],mat[pos][i]); |
153 | printf ( "media : %f le materie in cui va meglio sono :\n" ,media(mat[pos],c)); |
154 | migliori(mat[pos],n,vet_aux); |
155 | for (i=0;vet_aux[i]>=0;i++) |
156 | printf ( "%s\n" ,materie[vet_aux[i]]); |
158 | printf ( "il cognome inserito non è valido" ); |
163 | printf ( "inserire una materia : " ); |
167 | if ((pos = cerca(materie, n,stringa))>=0){ |
170 | printf ( "%s -> %d\n" ,cognomi[i],mat[i][pos]); |
173 | vet_aux2[i]=mat[i][pos]; |
174 | printf ( "media : %f gli studenti peggiori sono :\n" ,media(vet_aux2,n)); |
175 | peggiori(vet_aux2,n,vet_aux); |
176 | for (i=0;vet_aux[i]>=0;i++) |
177 | printf ( "%s\n" ,cognomi[vet_aux[i]]); |
179 | printf ( "la materia inserita non è valida" ); |
183 | } while (scelta >= 1 && scelta <= 8); |
187 | return 1+ rand () % 10; |
190 | void azzera( int vet[], int n){ |
199 | void carica( int mat[MAX][MAX], int *n, int *c){ |
205 | printf ( "inserisci il numero di studenti : " ); |
207 | printf ( "inserisci il numero di materie : " ); |
209 | } while (*n<1 || *n>=MAX || *c<1 || *c>=MAX); |
217 | void acquisisci( char vet[MAX][MAX], int n){ |
223 | printf ( "inserire la stringa numero %d : " ,i+1); |
228 | int max( int vet[], int n){ |
241 | int min( int vet[], int n){ |
254 | float media( int vet[], int n){ |
263 | return (( float )somma/n); |
266 | int voti_negativi( int vet[], int n){ |
279 | int voti_positivi( int vet[], int n){ |
292 | void migliori( int vet[], int n, int results[]){ |
299 | if (vet[i] > vet[results[j]]){ |
302 | } else if (vet[i] == vet[results[j]]) |
307 | void peggiori( int vet[], int n, int results[]){ |
314 | if (vet[i] < vet[results[j]]){ |
317 | } else if (vet[i] == vet[results[j]]) |
322 | void materia_migliore( int mat[MAX][MAX], int n, int c, int results[]){ |
324 | int i,j,risultati[MAX]; |
329 | migliori(mat[i],c,results); |
330 | for (j=0;results[j]>=0;j++) |
331 | risultati[results[j]]++; |
336 | if (risultati[i] > risultati[results[j]]){ |
339 | } else if (risultati[i] == risultati[results[j]]) |
344 | void materia_peggiore( int mat[MAX][MAX], int n, int c, int results[]){ |
346 | int i,j,risultati[MAX]; |
351 | peggiori(mat[i],c,results); |
352 | for (j=0;results[j]>=0;j++) |
353 | risultati[results[j]]++; |
358 | if (risultati[i] > risultati[results[j]]){ |
361 | } else if (risultati[i] == risultati[results[j]]) |
366 | void ordina( int vet[], int n){ |
384 | void ordina_f( float vet[], int n){ |
403 | int cerca( char vet[MAX][MAX], int n, char *ele){ |
409 | if (! strcmp (vet[i],ele)) |
Testi Consigliati:
Il linguaggio C. Principi di programmazione e manuale di riferimento. Ediz. MyLab. Con Contenuto digitale per download e accesso on line
C guida alla programmazione: Conoscere lo standard C11 dalle basi del linguaggio alle direttive del preprocessore (Programmare con C Vol. 1)
Programmazione in C
torna