Niestety troszkę błędów jest. Po pierwszy błąd jest taki że zapisujesz każdy z wylosowanych elementów do tablicy o indeksie n dla wierszy oraz n dla kolumn. Nie ma takiego indeksu, twoja tablica jeśli ma n elementów to indeks ostatnie elementu ma numer n-1. Dzieje się tak ponieważ indeksy w tablicach są liczone od 0 zarówno te jedno jak i wielowymiarowe. Mówimy o liniach:
tab[n][n]=-5+rand()%-9;
oraz
cout<<tab[n][n]<<" ";
Natomiast losowanie też nie jest dobrze zrobione. Masz wylosować liczby od -5 do 5 włącznie czyli 11 liczb. Więc powinieneś zapisać:
rand()%11;
Zapis ten zwróci liczby od 0 do 10 włącznie. Zauważ że dodając do tego wartość -5 otrzymamy właśnie wymagany zakres. Więc ta linia powinna być poprawiona na:
tab[i][j]=-5+rand()%11;
Ostatnia pętla nie jest błędna lecz troszkę prze kombinowana. Sumę liczb na przekątnej można wykonać za pomocą jednej pętli.
Tutaj masz poprawiony kod:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand(time(NULL));
int n;
cout<<"Wprowadz rozmiar tablicy:"<<endl;
cin>>n;
int tab[n][n];
cout<<endl;
cout<<"Liczby calkowite z przedzialu od -5 do 5 to: "<<endl;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
tab[i][j]=-5+rand()%11;
cout<<tab[i][j]<<"\t";
//dodano znak tab dla czytelnosci
}
cout<<endl;
}
int suma=0;
for (int i=0; i<n; i++)
{
suma=suma+tab[i][i];
}
cout<<"Suma wartosci na przekatnej wynosi: "<<suma<<endl;
return 0;
}