logo Thecsea.it



Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License



scolastica » esercizi » terza superiore » linguaggio c

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

001/*
002CLAUDIO CARIDNALE 3AI
003Dato  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,:
0041- per ogni studente, il voto più alto, quello più basso e la media dei voti conseguiti.
0052-per ogni studente il numero di voti negativi e il numero di voti positivi.
0063- visualizzae  gli studenti promossi senza alcun debito, quelli promossi con 1,2,3 debiti formativi e quelli respinti.
0074- 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.
0085-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
0096- calcolare per ogni materia la media dei voti riportati, visualizzando il risultato in ordine decrescente di media
0107-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
0118- 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.
012*/
013#include<stdio.h>
014#include<stdlib.h>
015#include<time.h>
016#include<string.h>
017#define MAX 1000
018#define LEN 100
019void menu(void);
020int casuale(void);
021void azzera(int vet[], int n);
022void carica(int mat[MAX][MAX], int *n, int *c);
023void acquisisci(char vet[MAX][MAX], int n);
024int max(int vet[], int n);
025int min(int vet[], int n);
026float media(int vet[], int n);
027int voti_negativi(int vet[], int n);
028int voti_positivi(int vet[], int n);
029void migliori(int vet[], int n, int results[]);
030void peggiori(int vet[], int n, int results[]);
031void materia_migliore(int mat[MAX][MAX], int n, int c, int results[]);
032void materia_peggiore(int mat[MAX][MAX], int n, int c, int results[]);
033void ordina(int vet[], int n);
034void ordina_f(float vet[], int n);
035int cerca(char vet[MAX][MAX], int n, char *ele);
036 
037int main(){
038    srand(time(NULL));
039    menu();
040}
041 
042void menu(void){
043    //dichiarazioni
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];
047     
048    //inizializzazione
049    carica(mat, &n, &c);
050    printf("caricamento cognimi :\n");
051    getchar();
052    acquisisci(cognomi,n);
053    printf("caricamento materie :\n");
054    acquisisci(materie,c);
055    azzera(indici_debiti,5);
056     
057    do{
058        do{
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 : ");
060            scanf("%d",&scelta);
061        }while(scelta < 0 || scelta > 8);
062     
063        //controllo
064        switch(scelta){
065            case 1:
066                //stampa
067                for(i=0;i<n;i++)
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));
069                break;
070            case 2:
071                //stampa
072                for(i=0;i<n;i++)
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));
074                break;
075            case 3:
076                //calcolo debiti
077                for(i=0;i<n;i++)
078                    if((aux = voti_negativi(mat[i],c))>=4)
079                        debiti[4][indici_debiti[4]++] = i;
080                    else
081                        debiti[aux][indici_debiti[aux]++] = i;
082                 
083                //stampa
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]]);
099                break;
100            case 4:
101                //stampa
102                for(i=0;i<n;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]]);
111                }
112                break;
113            case 5:
114                //stampa
115                //for(i=0;i<n;i++){
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]]);
124                //}
125                break;
126            case 6:
127                //calcolo medie
128                for(j=0;j<c;j++){
129                    for(i=0;i<n;i++)
130                        vet_aux2[i]=mat[i][j];
131                    vet_aux_f[j] = media(vet_aux2,n);
132                }
133                 
134                //ordinamento
135                ordina_f(vet_aux_f,c);
136                 
137                //stampa
138                printf("medie :\n");
139                for(i=0;i<c;i++)
140                    printf("%f\n",vet_aux_f[i]);
141                break;
142            case 7:
143                //acquisizione
144                getchar();
145                printf("inserire un cognome : ");
146                gets(stringa);
147                 
148                //stampa
149                if((pos = cerca(cognomi, n,stringa))>=0){
150                    printf("voti :\n");
151                    for(i=0;i<c;i++)
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]]);
157                }else
158                    printf("il cognome inserito non è valido");
159                break;
160            case 8:
161                //acquisizione
162                getchar();
163                printf("inserire una materia : ");
164                gets(stringa);
165                 
166                //stampa
167                if((pos = cerca(materie, n,stringa))>=0){
168                    printf("voti :\n");
169                    for(i=0;i<n;i++)
170                        printf("%s -> %d\n",cognomi[i],mat[i][pos]);
171                    //media
172                    for(i=0;i<n;i++)
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]]);
178                }else
179                    printf("la materia inserita non è valida");
180                break;
181                 
182        }
183    }while(scelta >= 1 && scelta <= 8);
184}
185 
186int casuale(void){
187    return 1+rand() % 10;
188}
189 
190void azzera(int vet[], int n){
191    //dichiarazioni
192    int i;
193     
194    //calcoli
195    for(i=0;i<n;i++)
196        vet[i] = 0;
197}
198 
199void carica(int mat[MAX][MAX], int *n, int *c){
200    //dichiarazioni
201    int i,j;
202     
203    //acquisizione lunghezze
204    do{
205        printf("inserisci il numero di studenti : ");
206        scanf("%d",n);
207        printf("inserisci il numero di materie : ");
208        scanf("%d",c);
209    }while(*n<1 || *n>=MAX || *c<1 || *c>=MAX);
210     
211    //inizializzazione
212    for(i=0;i<*n;i++)
213        for(j=0;j<*c;j++)
214            mat[i][j]=casuale();
215}
216 
217void acquisisci(char vet[MAX][MAX], int n){
218    //dichiarazioni
219    int i;
220     
221    //acquisizione
222    for(i=0;i<n;i++){
223        printf("inserire la stringa numero %d : ",i+1);
224        gets(vet[i]);
225    }
226}
227 
228int max(int vet[], int n){
229    //dichiarazioni
230    int i,pos=0;
231     
232    //calcoli
233    for(i=0;i<n;i++)
234        if(vet[i]>vet[pos])
235            pos = i;
236     
237    //ritorno
238    return pos;
239}
240 
241int min(int vet[], int n){
242    //dichiarazioni
243    int i,pos=0;
244     
245    //calcoli
246    for(i=0;i<n;i++)
247        if(vet[i]<vet[pos])
248            pos = i;
249     
250    //ritorno
251    return pos;
252}
253 
254float media(int vet[], int n){
255    //dichiarazioni
256    int i,somma=0;
257     
258    //calcoli
259    for(i=0;i<n;i++)
260        somma += vet[i];
261     
262    //ritorno
263    return ((float)somma/n);
264}
265 
266int voti_negativi(int vet[], int n){
267    //dichiarazioni
268    int i,neg=0;
269     
270    //calcoli
271    for(i=0;i<n;i++)
272        if(vet[i]<6)
273            neg++;
274     
275    //ritorno
276    return neg;
277}
278 
279int voti_positivi(int vet[], int n){
280    //dichiarazioni
281    int i,pos=0;
282     
283    //calcoli
284    for(i=0;i<n;i++)
285        if(vet[i]>=6)
286            pos++;
287     
288    //ritorno
289    return pos;
290}
291 
292void migliori(int vet[], int n, int results[]){
293    //dichiarazioni
294    int i,j;
295     
296    //calcoli
297    azzera(results,n);
298    for(i=1,j=0;i<n;i++)
299        if(vet[i] > vet[results[j]]){
300            j = 0;
301            results[j] = i;
302        }else if(vet[i] == vet[results[j]])
303            results[++j] = i;
304    results[++j] = -1;
305}
306 
307void peggiori(int vet[], int n, int results[]){
308    //dichiarazioni
309    int i,j;
310     
311    //calcoli
312    azzera(results,n);
313    for(i=1,j=0;i<n;i++)
314        if(vet[i] < vet[results[j]]){
315            j = 0;
316            results[j] = i;
317        }else if(vet[i] == vet[results[j]])
318            results[++j] = i;
319    results[++j] = -1;
320}
321 
322void materia_migliore(int mat[MAX][MAX], int n, int c, int results[]){
323    //dichiarazioni
324    int i,j,risultati[MAX];
325     
326    //calcoli
327    azzera(results,n);
328    for(i=0;i<n;i++){
329        migliori(mat[i],c,results);
330        for(j=0;results[j]>=0;j++)
331            risultati[results[j]]++;
332    }
333     
334    azzera(results,n);
335    for(i=0,j=0;i<n;i++)
336        if(risultati[i] > risultati[results[j]]){
337            j = 0;
338            results[j++] = i;
339        }else if(risultati[i] == risultati[results[j]])
340            results[j++] = i;
341    results[j] = -1;
342}
343 
344void materia_peggiore(int mat[MAX][MAX], int n, int c, int results[]){
345    //dichiarazioni
346    int i,j,risultati[MAX];
347     
348    //calcoli
349    azzera(results,n);
350    for(i=0;i<n;i++){
351        peggiori(mat[i],c,results);
352        for(j=0;results[j]>=0;j++)
353            risultati[results[j]]++;
354    }
355     
356    azzera(results,n);
357    for(i=0,j=0;i<n;i++)
358        if(risultati[i] > risultati[results[j]]){
359            j = 0;
360            results[j++] = i;
361        }else if(risultati[i] == risultati[results[j]])
362            results[j++] = i;
363    results[j] = -1;
364}
365 
366void ordina(int vet[], int n){
367    //dichiarazioni
368    int i,k,aux;
369     
370    //calcoli
371    do{
372        k = 0;
373        for(i=0;i<n-1;i++)
374            if(vet[i]<vet[i+1]){
375                aux = vet[i];
376                vet[i] = vet[i+1];
377                vet[i+1] = aux;
378                k = i+1;
379            }
380        n=k;
381    }while(k);
382}
383 
384void ordina_f(float vet[], int n){
385    //dichiarazioni
386    int i,k;
387    float aux;
388     
389    //calcoli
390    do{
391        k = 0;
392        for(i=0;i<n-1;i++)
393            if(vet[i]<vet[i+1]){
394                aux = vet[i];
395                vet[i] = vet[i+1];
396                vet[i+1] = aux;
397                k = i+1;
398            }
399        n=k;
400    }while(k);
401}
402 
403int cerca(char vet[MAX][MAX], int n, char *ele){
404    //dichiarazioni
405    int i;
406     
407    //calcoli
408    for(i=0;i<n;i++)
409        if(!strcmp(vet[i],ele))
410            return i;
411    return -1;
412}

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



Copyright © 2004-2025 thecsea.it (Claudio Cardinale - cardi@thecsea.it)! Tutti i diritti riservati. - contattaci