Ciao a tutti, ho un dubbio su questo esercizio. Ho guardato anche dalla soluzione del prof e online, e ovunque mi danno la stessa soluzione che ho applicato io durante il codice, ma non so per quale motivo la somma degli elementi sui bordi non mi da come risultato il valore giusto.
Il codice è questo:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/*
Scrivere un programma che genera una matrice con N righe ed M colonne
contenente una serie di numeri casuali tra 0 e 10.
Il programma, dopo aver generato la matrice, deve visualizzarla a video,
quindi sommare gli elementi sui bordi della matrice.
*/
//costanti
#define N 5
#define M 7
#define MINRAND 0
#define MAXRAND 20
//prototipi
void matrice_genera(unsigned righe, unsigned colonne, int mat[][colonne]);
void matrice_visualizza(unsigned righe, unsigned colonne, int mat[][colonne]);
void matrice_bordi(unsigned righe, unsigned colonne, int mat[][colonne], int *s);
void matrice_genera(unsigned righe, unsigned colonne, int mat[][colonne]){
unsigned i, j;
for(i=0; i<righe; i++){
for(j=0; j<colonne; j++){
mat[i][j] = rand() % (MAXRAND-MINRAND+1)+MINRAND;
}
}
}
void matrice_visualizza(unsigned righe, unsigned colonne, int mat[][colonne]){
unsigned i, j;
for(i=0; i<righe; i++){
for(j=0; j<colonne; j++){
printf("%d\t", *(*mat+i)+j);
}
printf("\n\n");
}
}
void matrice_bordi(unsigned righe, unsigned colonne, int mat[][colonne], int *s){
unsigned i, j;
for(i=0; i<righe; i++){
for(j=0; j<colonne; j++){
if(i==0 || j==0 || i==righe-1 || j==colonne-1){
*s = *s + *(*(mat+i)+j);
}
}
}
}
int main(){
int matrice[N][M];
int somma = 0;
srand(time(NULL));
printf("\n*** Inizio programma ***\n\n");
printf("\n*** Matrice 5 x 7 generata ***\n\n");
matrice_genera(N, M, matrice);
matrice_visualizza(N, M, matrice);
matrice_bordi(N, M, matrice, &somma);
printf("\nSomma degli elementi sui bordi:\t%d", somma);
printf("\n\n*** Fine programma ***\n");
return 0;
}
Per esempio la soluzione che mi da il programma è questa: