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

Tablice - przesunięcia

0 głosów
312 wizyt
pytanie zadane 3 marca 2021 w C i C++ przez eternal Użytkownik (620 p.)
#include <iostream>

using namespace std;

int main()
{
    int n=5;
    int tab[n];
    int tab1[n];
    for(int i=0; i<n; i++) {
        cout << "Tab[" << i << "]= ";
        cin >> tab[i];
    }
    cout << endl << endl;
    for(int i=0; i<n; i++) {
        tab1[i+1] = tab[i];
        tab1[0]=tab[n-1];
        cout << "Tab[" << i << "]= " << tab1[i] << endl;
    }

    return 0;
}

Skąd wynika przesunięcie w tej linii tab1[0]=tab[n-1]? Które pokazuje ostatnią liczbę, przy napisaniu tab1[0]=tab[i-1] Pokazuje komórkę pamięci niezwiązaną z zadaniem.

2 odpowiedzi

0 głosów
odpowiedź 3 marca 2021 przez TOM_CPP Pasjonat (22,640 p.)
edycja 3 marca 2021 przez TOM_CPP

Dla i = 4 

tab1[i+1] = tab[i];

jest zapisaniem wartości poza zakresem pamięci tablicy tab1, co prowadzi do UB ( Undefined Behavior )

Lepiej w takim przypadku skorzystać z zalet biblioteki standardowej i użyć do tego celu std::vector.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> tabA { 1,2,3,4,5,6 };
    vector<int> tabB {begin(tabA)+1,end(tabA)};

    tabB.push_back(*begin(tabA));

    for( const auto& element : tabA ) cout << element << ' ';
    cout << endl;
    for( const auto& element : tabB ) cout << element << ' ';
}

 

komentarz 3 marca 2021 przez eternal Użytkownik (620 p.)
W takim razie jaka jest różnica między tab1[0]=tab[n-1] a tab1[0]=tab[i-1]
komentarz 3 marca 2021 przez TOM_CPP Pasjonat (22,640 p.)

Różnica jest w wartości indeksu tablicy. Po lewej stronie przyjmuje on zawsze wartość 0, po prawej będzie to n-1 czyli zawsze 4, oraz dla zmiennej i wartości indeksu będą się zmieniały od -1 do 3, co jest błędem gdyż indeks tablicy nie może być mniejszy od zera.

 

 

komentarz 3 marca 2021 przez NewEraOfPeace Gaduła (4,790 p.)
może być :p (chyba, że faktycznie mowa o normalnym typie tablicowym)
0 głosów
odpowiedź 3 marca 2021 przez Michałełe Nałogowiec (25,600 p.)
Nie do końca rozumiem o co tu chodzi - trochę nie ma sensu w każdej iteracji pętli przypisywać 1 elementowi o indeksie 0 ostatnią wartość tablicy tab. Przy wpisaniu tab[i-1], gdy i = 0 to wypisuje tab[-1] (chyba o to chodzi z tą komórką niezwiązaną z zadaniem).

Podobne pytania

0 głosów
0 odpowiedzi 698 wizyt
pytanie zadane 31 stycznia 2022 w C i C++ przez RufinB Bywalec (2,020 p.)
+1 głos
0 odpowiedzi 275 wizyt
pytanie zadane 12 marca 2021 w C i C++ przez fsfxvcxv Obywatel (1,160 p.)
+1 głos
2 odpowiedzi 625 wizyt
pytanie zadane 19 stycznia 2016 w C i C++ przez Lukasz95 Bywalec (2,160 p.)

93,731 zapytań

142,669 odpowiedzi

323,286 komentarzy

63,291 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...