Migliorabile, se scorri la sequenza degli interventi ti accorgi che la polemica non è nata da me.
Quanto all'intero codice, eccolo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define DEBUGGA
#define Q_PROVE 8
#define Q_STUDENTI 18
float matrice[Q_STUDENTI+1][Q_PROVE+1];
#ifdef DEBUGGA
void imposta_voti_automatico( void ) {
int s, p; // s: studente; p: prova
memset( &matrice[0][0], 0, sizeof(matrice[0][0]) );
srand( time(NULL) );
for (s=0; s<Q_STUDENTI; s++)
for (p=0; p<Q_PROVE; p++)
matrice[s][p] = 0.1f*(1+(rand()%100));
}
#else // NOT DEBUGGA
void imposta_voti_manuale( void ) {
int s, p; // s: studente; p: prova
for (s=0; s<Q_STUDENTI; s++) {
printf("\nstudente n. %02d\n", s+1);
for (p=0; p<Q_PROVE; p++) {
printf("prova n. %02d: ", p+1 );
scanf("%f",&matrice[s][p]);
}
}
}
#endif // fine DEBUGGA / NOT DEBUGGA
void calcola_medie_studenti( void ) {
int s, p; // s: studente; p: prova
for (s=0; s<Q_STUDENTI; s++) {
matrice[s][Q_PROVE] = 0.0f;
for (p=0; p<Q_PROVE; p++)
matrice[s][Q_PROVE] += matrice[s][p];
matrice[s][Q_PROVE] /= Q_PROVE;
}
}
void calcola_medie_prove( void ) {
int s, p; // s: studente; p: prova
for (p=0; p<Q_PROVE; p++) {
matrice[s][Q_STUDENTI] = 0.0f;
for (s=0; s<Q_STUDENTI; s++)
matrice[Q_STUDENTI][p] += matrice[s][p];
matrice[Q_STUDENTI][p] /= Q_STUDENTI;
}
}
void calcola_media_globale( void ) {
int s, p; // s: studente; p: prova
matrice[Q_STUDENTI][Q_PROVE] = 0.0f;
for (s=0; s<Q_STUDENTI; s++)
for (p=0; p<Q_PROVE; p++)
matrice[Q_STUDENTI][Q_PROVE] += matrice[s][p];
matrice[Q_STUDENTI][Q_PROVE] /= Q_STUDENTI*Q_PROVE;
}
void calcola_medie( void ) {
calcola_medie_studenti();
calcola_medie_prove();
calcola_media_globale();
}
void mostra_matrice( void ) {
int s, p; // s: studente; p: prova
for (s=0; s<=Q_STUDENTI; s++)
for (p=0; p<=Q_PROVE; p++)
printf( "%5.1f%c", matrice[s][p], p!=Q_PROVE?' ':'\n' );
}
int main(){
#ifdef DEBUGGA
imposta_voti_automatico();
#else
imposta_voti_manuale();
#endif
calcola_medie();
mostra_matrice();
printf( "\nMedia globale: %5.1f\n\n", matrice[Q_STUDENTI][Q_PROVE] );
return 0;
}
Questo non per mettere in mostra chissà quale abilità (che non ho), ma per permettere di rilevare che quando dico che ho mandato giusto un esempio, è perché ho mandato
giusto un esempio. Avessi voluto mandare l'intero codice, avrei mandato le cento e passa righe, non otto.
Ora, da vecchietto a vecchietto, avrei piacere che la si smettesse di tentare di farmi passare per uno che commette chissà quali scorrettezze (di fantasia) -- sono invece un hobbista che SI DIVERTE a scrivere le quattro cose che sa scrivere e, a volte, a condividerle nei forum. State tentando di farmi passare la voglia? Basta dirlo e "vado" altrove.