Testo dell'esercizio
In una matrice sono memorizzati i giorni d'assenza per ciascun alunno della classe e per ogni giorno del mese. In un array sono invece caricati i nomi degli alunni della classe. Scrivere un programma che carichi la matrice e calcoli:
1) il totale delle assenze per ciascun alunno;
2) il totale delle assenze per l'alunno il cui nominativo e' fornito da input, segnalare in modo opportuno se il nominativo e' errato;
3) il nome dell'alunno che ha il maggior numero di assenze nel mese;
4) il nome dell'alunno che ha il minor numero di assenze nel mese.
mostra soluzione
/*
CLAUDIO CARDINALE III AI
In una matrice sono memorizzati i giorni d'assenza per ciascun alunno della classe e per ogni giorno del mese. In un array sono invece caricati i nomi degli alunni della classe. Scrivere un programma che carichi la matrice e calcoli:
1) il totale delle assenze per ciascun alunno;
2) il totale delle assenze per l'alunno il cui nominativo e' fornito da input, segnalare in modo opportuno se il nominativo e' errato;
3) il nome dell'alunno che ha il maggior numero di assenze nel mese;
4) il nome dell'alunno che ha il minor numero di assenze nel mese.
*/
#include<stdio.h>
#define MAX 1000
int main(){
//dichiarazioni
int r,c,j,i,mat[MAX][MAX],assenze[MAX],scelta,pos_nome=-1,assenzea=0,pos_max=0,pos_min=0;
char alunni[MAX],nome;
//acquisizione dati
//lunghezza matrice
do{
printf("inserire il numero degli alunni : ");
scanf("%d",&r);
printf("inserire il numeor dei giorni : ");
scanf("%d",&c);
}while(r<1 || r>=MAX || c<1 || c>=MAX);
//acquisizione dati
for(i=0;i<r;i++)
for(j=0;j<c;j++){
printf("inserire il valore dell'alunno numero %d ed del giorno %d (valore diverso da 0 per le assenze) : ",i+1,j+1);
scanf("%d",&mat[i][j]);
}
for(i=0;i<r;i++){
printf("inserire il nome dell'alunno %d : ",i+1);
getchar();
scanf("%c",&alunni[i]);
}
printf("1) il totale delle assenze per ciascun alunno\n2) il totale delle assenze per l'alunno dato il nominativo\n3) il nome dell'alunno che ha il maggior numero di assenze nel mese\n4) il nome dell'alunno che ha il minor numero di assenze nel mese\nscelta : ");
scanf("%d",&scelta);
//calcoli e visuallizzazione risultati
switch(scelta){
case 1:
for(i=0;i<r;i++){
assenze[i] = 0;
for(j=0;j<c;j++)
if(mat[i][j])
assenze[i]++;
}
printf("totale assenze :\n");
for(i=0;i<r;i++)
printf("assenze per %c : %d\n",alunni[i],assenze[i]);
break;
case 2:
printf("inserire un nome : ");
getchar();
scanf("%c",&nome);
for(i=0;nome != alunni[i] && i<r;i++)
;
if(nome==alunni[i])
pos_nome = i;
if(pos_nome>=0){
for(j=0;j<c;j++)
if(mat[pos_nome][j])
assenzea++;
printf("%c ha fatto %d assenze\n",nome,assenzea);
}else
printf("nome non valido\n");
break;
case 3:
for(i=0;i<r;i++){
assenze[i] = 0;
for(j=0;j<c;j++)
if(mat[i][j])
assenze[i]++;
}
for(i=0;i<r;i++)
if(assenze[i]>assenze[pos_max])
pos_max=i;
printf("l'alunno che ha eseguito più assenze e` %c\n",alunni[pos_max]);
break;
case 4:
for(i=0;i<r;i++){
assenze[i] = 0;
for(j=0;j<c;j++)
if(mat[i][j])
assenze[i]++;
}
for(i=0;i<r;i++)
if(assenze[i]<assenze[pos_min])
pos_min=i;
printf("l'alunno che ha eseguito meno assenze e` %c\n",alunni[pos_min]);
break;
}
}
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