Hej
Jak już wspomniał unknown, w komentarzu powyżej, zastosowanie wskaźników w tym kodzie raczej nie spowoduje widocznego przyśpieszenia programu. Co prawda, można troszkę upiększyć Twój kod, żeby działał "lepiej", jeśli mogę to tak określić - zauważ, że w pętli, która wypełnia liczbami Twoją macierz, za każdym razem wykonujesz operację sprawdzenia, czy i == j.
Przy założeniu, że operacja porównania jest tak samo kosztowna, jak operacja przypisania, kiedy wyeliminujemy if'a, który znajduje się w tej pętli, zyskamy 10*10 = 100 operacji, kosztem 10 dodatkowych przypisań, wynikających z tego, że zapiszemy 0 na przekątnej. Ciągle jednak zaoszczędzimy 90 operacji, co jest jakimś, choć niezauważalnym zyskiem. Poprawiony kod z komentarzami poniżej:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
short int macierz[10][10];
for(int j = 0; j <= 9; j++)
{
for(int i = 0; i <= 9; i++)
{
macierz[j][i] = 0; //tutaj nie wykonujemy ifow
}
}
for(int j = 0; j <= 9; j++)
{
for(int i = 0; i <= 9; i++)
{
cout << macierz[j][i];
}
cout<<endl;
}
{
int suma=0;
for(int i = 0; i <= 9; i++)
{
macierz[i][i] = ((rand() % 9) + 1); //losowanie
suma+= macierz[i][i];
}
cout <<" " <<suma ;
}
return 0;
}
A teraz w ramach ciekawoski, pokażę, jak taką wielowymiarową tablicę można przejść przy pomocy zwykłych wskaźników. Zauważmy, że tablica wielowymiarowa w języku C++ jest zapisana, jak zwykła tablica, kolejnością wymiarów, tj. T[3][3] => T[9], gdzie wymiary są zapisane kolejno. Ciekawy artykuł na ten temat można znaleźć tutaj.
Korzystając z tej wiedzy, możemy inkrementować wskaźnik, dopóki nie znajdzie się za ostatnim elementem. Takie rozwiązanie nie zwiększa wydajności - liczba operacji jest taka sama. Ponadto kod staje się zawiły i nie polecam stosować takich rozwiązań - pokazuję go tylko jako ciekawostkę.
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
int arr[10][10];
int* first = &arr[0][0]; //adres pierwszego elementu
int* last = &arr[10][10]; //adres za ostatnim elementem
std::srand(std::time(NULL));
while (first != last) {
*first++ = 0;
}
int sum = 0;
for (size_t i = 0; i < 10; ++i) {
arr[i][i] = (rand() % 9) + 1;
sum += arr[i][i];
}
std::cout << "Suma wynosi: " << sum << std::endl;
std::cout << "\nZawartosc tablicy: " << std::endl;
for (size_t i = 0; i < 10; ++i) {
for (size_t j = 0; j < 10; ++j) {
std::cout << arr[i][j] << " ";
}
std::cout << std::endl;
}
return 0;
}
Pozdrawiam! 