Beh guarda io l'ho fatta in C, è praticamente la stessa cosa, tanto alla fine quello che ti interessa è la funzione "somma" che in C++ verrebbe scritta esattamente allo stesso modo (il main lo puoi modificare come ti pare). Chiaramente devi scrivere il prototipo della funzione all'inizio e non la funzione direttamente, perché mi pare che il c++ lo esige, a differenza del c.
Ho usato l'allocazione dinamica per la matrice ( malloc() ) ma mi pare di capire che non hai grandi conoscenze quindi se non sai di cosa si tratta ti basta cancellare quel ciclo for con la malloc e allocare la matrice staticamente (ovviamente poi dovrai anche modificare i parametri passati alla funzione).
Gli indici li ho dichiarati globalmente, nel caso li puoi anche trascrivere all'interno delle due funzioni (somma e main) ma in questo caso è inutile.
codice:#include <stdio.h> #include <stdlib.h> #include <time.h> short i, j; short somma(short *mat, short n) { short s=0; for (i=0, j=n-1; i<n; i++, j--) s += *(mat + n*i + j); return s; } int main(void) { short *matrice, n; printf("La matriche e' necessariamente quadrata. Immettere la lunghezza del suo lato: "); scanf("%hd%*c", &n); putchar('\n'); for (i=0; i<n; i++) matrice = malloc (sizeof(short)*n*n); srand( (unsigned int)time(NULL) ); for (i=0; i<n; i++) for (j=0; j<n; j++) *(matrice + n*i + j) = rand()%10; for (i=0; i<n; i++) { for (j=0; j<n; j++) printf("%2hd", *(matrice + n*i + j)); putchar('\n'); } printf("\nLa somma degli elementi della diagonale secondaria della matrice e': %hd", somma(matrice, n)); getchar(); return 0; }

Rispondi quotando