Ciao,
devo svolgere un esercizio di manipolazione di array bidimensionali dove devo calcolare la media dei voti di alcuni studenti, il voto più alto ed il voto più basso. Vi riporto lo svolgimento scritto sul libro di testo:
// Manipolazione di array bidimensionali
#include <stdio.h>
#define STUDENTS 3
#define EXAMS 4
// Funzioni
int minimum( const int grades[][EXAMS], size_t pupils, size_t tests) { // Trova il voto minimo
int lowGrade = 100; // Voto il più alto possibile
for(size_t i = 0; i < pupils; ++i) { // ciclo per le righe di grades
for(size_t j = 0; j < tests; ++j) { // ciclo per le colonne di grades
if(grades[i][j] < lowGrade) {
lowGrade = grades[i][j];
}
}
}
return lowGrade; // restituisci il voto minimo
}
int maximum(const int grades[][EXAMS], size_t pupils, size_t tests) { // Trova il voto massimo
int highGrade = 0; // voto il più basso possibile
for(size_t i = 0; i < pupils; ++i) { // ciclo per le righe di grades
for(size_t j = 0; j < tests; ++j) { // ciclo per le colonne di grades
if(grades[i][j] > highGrade) {
highGrade = grades[i][j];
}
}
}
return highGrade; // restituisci il voto massimo
}
double average(const int setOfGrades[], size_t tests) { // Determina il voto medio per ogni studente
int total = 0; // somma dei voti degli esami
for(size_t i = 0; i < tests; ++i) { // totale di tutti i voti per uno studente
total += setOfGrades[i];
}
return (double) total / tests; // media
}
void printArray(const int grades[][EXAMS], size_t pupils, size_t tests) { // Stampa l'array
printf("%s", " [0] [1] [2] [3]"); // Stampa le intestazioni delle colonne
for(size_t i = 0; i < pupils; ++i) { // Stampa le intestazioni delle colonne
printf("\nstudentGrades[%u] ", i); // Stampa l'etichetta per la riga
for(size_t j = 0; j < tests; ++j) { // Stampa i voti per uno studente
printf("%-5d", grades[i][j]);
}
}
}
// Main
int main(void) {
// Inizializza i voti per i 3 studenti (righe)
int studentGrades[STUDENTS][EXAMS] = { {77, 68, 86, 73}, {96, 87, 89, 78}, {70, 90, 86, 81} };
// Stampa l'array studentGrades
puts("The array is:");
printArray(studentGrades, STUDENTS, EXAMS);
// Determina i valori minimo e massimo dei voti
printf("\n\nLowest grade: %d\nHighest grade: %d\n", minimum(studentGrades, STUDENTS, EXAMS), maximum(studentGrades, STUDENTS, EXAMS));
// Calcola la media dei voti per ogni studente
for(size_t student = 0; student < STUDENTS; ++student) { // calcola la media dei voti per ogni studente
printf("The average grade for student %u is %.2f\n", student, average(studentGrades[student], EXAMS));
}
}
che da come output questo:
The array is:
[0] [1] [2] [3]
studentGrades[0] 77 68 86 73
studentGrades[1] 96 87 89 78
studentGrades[2] 70 90 86 81
Lowest grade: 68
Highest grade: 96
The average grade for student 0 is 76.00
The average grade for student 1 is 87.50
The average grade for student 2 is 81.75
Time elapsed: 000:00:156
Press any key to continue
Il mio problema è però che voglio far inserire da schermo i voti degli studenti ma non so come acquisire i dati per un array bidimensionale. Ho provato con questo codice che però si blocca.
#include <stdio.h>
#define DIM 20
#define RIGHE 10
#define COLONNE 10
#define STUDENTI 3
#define MATERIE 4
int main(void) {
int array[DIM][DIM];
char materia1[DIM];
char materia2[DIM];
char materia3[DIM];
char materia4[DIM];
char studente1[DIM];
char studente2[DIM];
char studente3[DIM];
int i = 0;
int j = 0;
printf("Questo e' un programma che per ogni studente raffigura le sue votazioni in ciascuna materia, poi ne calcola ");
printf("il voto piu' alto ed il voto piu' basso tra tutti e per ciascuno studente ne calcola il voto medio.\n\n");
printf("Inserire i nomi delle %d materie:\n", MATERIE);
printf("\nMateria 1: ");
scanf("%s", materia1);
printf("Materia 2: ");
scanf("%s", materia2);
printf("Materia 3: ");
scanf("%s", materia3);
printf("Materia 4: ");
scanf("%s", materia4);
printf("Inserire i nomi dei %d studenti:", STUDENTI);
printf("\nStudente 1: ");
scanf("%s", studente1);
printf("Studente 2: ");
scanf("%s", studente2);
printf("Studente 3: ");
scanf("%s", studente3);
puts("\n");
printf("Inserire i voti di %s in %s, %s, %s, %s: ", studente1, materia1);
for(i = 0; i < MATERIE; ++i) {
scanf("%d", &array[0][i]);
}
for(i = 0; i < MATERIE; ++i) {
printf("%d", array[0][i]);
}
puts("\n");
return 0;
}
che da come output questo:
Questo e' un programma che per ogni studente raffigura le sue votazioni in ciascuna materia, poi ne calcola il voto piu' alto ed il voto piu' basso tra tutti e per ciascuno studente ne calcola il voto medio.
Inserire i nomi delle 4 materie:
Materia 1: Italiano
Materia 2: Storia
Materia 3: Geografia
Materia 4: Matematica
Inserire i nomi dei 3 studenti:
Studente 1: Pino
Studente 2: Giuseppe
Studente 3: Peppino
Time elapsed: 000:39:141
Press any key to continue