PDA

View Full Version : [c]somma diagonale di un array bidimensionale di 10x10


|_Mayhem_|
27-04-2008, 12:23
salve a tutti!

mi è stato assegnato un esercizio a scuola che chiede di:

"riempire un array bidimensionale di 10x10 con numeri da 1 a 10 e calcolare la somma della diagonale"

vi posto il mio codice:

#include <stdio.h>

int main(){

int bidimensionale[10][10];
int i,j,somma_diagonale=0;

for(i=0;i<10;i++){

for(j=0;j<10;j++){
bidimensionale[i][j]=j+1;
printf("%d ",bidimensionale[i][j]);
}
printf("\n");
}

printf("\nvalori della diagonale:\n\n");

for(i=0;i<10;i++){

for(j=0;j<10;j++){

if(i=j)
somma_diagonale=somma_diagonale+bidimensionale[i][j];
printf("%d ",bidimensionale[i][j]);
}
}

printf("\n\nsomma della diagionale: %d\n\n",somma_diagonale);

system("PAUSE");
return 0;
}

e l'output:

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

valori della diagonale:

1 2 3 4 5 6 7 8 9 10

somma della diagionale: 54

Press any key to continue . . .

perche 54 la somma quando dovrebbe essere 55?? :muro: :muro: :muro:

ho verificato tramite i printf che i valori siano inseriti correttamente nell'array e che nella diagonale siano effettivamente presenti quei valori... dunque c'è qualcosa che va storto nella somma e viene lasciato via -presumibilmente- il primo valore della diagonale, ovvero 1.

che c'è che non va nel codice? :cry:

il_toby
27-04-2008, 12:44
l'errore sta qui:

if(i=j)

per fare un confronto devi usare il doppio uguale, così:

if(i==j)

e per rendere più veloce il codice visto che conosci a priori le dimensioni della matrice, per la somma potresti fare così:

for(i=0;i<10;i++)
{
somma_diagonale=somma_diagonale+bidimensionale[i][i];
printf("%d",bidimensionale[i][i]);
}

invece di

for(i=0;i<10;i++){

for(j=0;j<10;j++){

if(i=j)
somma_diagonale=somma_diagonale+bidimensionale[i][j];
printf("%d ",bidimensionale[i][j]);
}
}

DanieleC88
27-04-2008, 12:49
Prima un consiglio:
somma_diagonale=somma_diagonale+bidimensionale[i][j];
Se lo scrivi così è più leggibile:
somma_diagonale += bidimensionale[i][j];

Poi il problema è questo:
if(i=j)
Questa è un'assegnazione, in pratica trasferisci il valore di j in i, il confronto lo si fa col doppio uguale:
if (i == j)

Come hai scritto tu prima assegna j ad i e poi controlla se il valore è vero (non-zero), che nel caso del primo elemento (0) è falso. Comunque potevi fare più semplicemente con un solo indice:
int x;

for (x = 0; x < 10; x++) {
somma += matrice[x][x];
}

ciao ;)

DanieleC88
27-04-2008, 12:56
D'oh! Sono stato troppo lento! :muro:

|_Mayhem_|
27-04-2008, 13:09
grazie, sapevo che era una stupidaggine :D

mi chiedo però perche faceva comunque la somma degli altri valori... mah, misteri del processore :D:D

beh è vero per prendere i numeri dalla diagonale posso usare anche una sola variabile, tanto la diagonale si ha quando il valore delle due variabili si equivale quindi vale la pena usarne una sola!