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;
}