• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Tablica suma liczb lezacych na przekatnej

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
467 wizyt
pytanie zadane 18 października 2021 w C i C++ przez nem_ Nowicjusz (120 p.)

Witam. Mam problem z programem, który ma wyświetlić tablice kwadratową, która zostanie uzupelniona liczbami od -5 do 5, a nastepnie zostanie wyswietlona suma liczb, ktory leza na przekątnej. Napisalem program, lecz błędnie wyswietla on sume liczb na przekątnej. Gdzie zrobilem blad?

 

 

#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[n][n]=-5+rand()%-9;
                cout<<tab[n][n]<<" ";
            }
            cout<<endl;
        }

        int suma=0;
        for (int i=0; i<n; i++)
            {
            for (int j=0 ; j<n; j++)
                {
                if(i==j)
                suma=suma+tab[n][n];
                }
            }
            cout<<"Suma wartosci na przekatnej wynosi: "<<suma<<endl;

}

 

1 odpowiedź

0 głosów
odpowiedź 18 października 2021 przez profesorek96 Szeryf (91,420 p.)

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

 

Podobne pytania

–1 głos
2 odpowiedzi 17,256 wizyt
0 głosów
0 odpowiedzi 143 wizyt
pytanie zadane 18 stycznia 2023 w C i C++ przez Janchess Początkujący (480 p.)
0 głosów
2 odpowiedzi 2,019 wizyt
pytanie zadane 24 listopada 2020 w C i C++ przez Kacper009123 Nowicjusz (140 p.)

93,096 zapytań

142,056 odpowiedzi

321,506 komentarzy

62,438 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...