Przesunięcie elementu tablicy w prawo i w lewo

0

Witam,

mam za zadanie napisać program który przesuwa element tablicy w prawo i w lewo o jeden. Ostatni element jest tracony a pierwszy powinien przyjąć wartość 0. Jak dotąd kod na przesuwanie tablicy w prawo działa poprawnie, oto on:

#include <iostream>
#include <conio.h>

using namespace std;

const zakres = 4;
int temp[zakres] ;
int tab[zakres];

int main()
{
//------- przykladowe wartosci tablic -------
   tab[0] = 5;
   tab[1] = 9;
   tab[2] = 2;
   tab[3] = 5;
   tab[4] = 1;
//-------------------------------------------

        //tutaj tablice maja te same wartosci. Nie mozna ich zmieniac wewnatrz petli
        //bo jedno wykonanie petli to JEDEN TAKT - aby je zmienic potrzebna jest nowa petla
        cout << "Elementy tablicy przed przesunieciem w prawo: " <<endl;

        for (int i = 0; i<=zakres; i++) //od zera bo numeracja tablicy zaczyna sie od 0
        {
           temp[i] = tab[i]; //tablica temp ma takie same wartosci
           cout << "tab[" << i << "] = " << tab[i] << "\t";
        }
        cout << endl << endl << "Elementy tablicy po przesunieciu w prawo: " << endl;

        for (int j = 0; j<=zakres; j++)
        {
      //     if (j == 0) tab[0] = temp[4];
      //     if (j == 4) tab[4] = 0;

           tab[j] = temp[j-1]; //przesuniecie w prawo

           cout << "tab[" << j << "] = " << tab[j] << "\t";
        }


getch();
return 0;
}

natomiast wzorując się na tym samym kodzie dzieją się "dziwne" rzeczy gdy chcę przesunąć tablicę w lewo:

#include <iostream>
#include <conio.h>

using namespace std;

const zakres = 4;
int temp[zakres];
int tab[zakres];

int main()
{
//------- przykladowe wartosci tablic -------
   tab[0] = 0;   tab[1] = 1;   tab[2] = 2;   tab[3] = 3;   tab[4] = 4;
//-------------------------------------------

        //tutaj tablice maja te same wartosci. Nie mozna ich zmieniac wewnatrz petli
        //bo jedno wykonanie petli to JEDEN TAKT - aby je zmienic potrzebna jest nowa petla
        cout << "Elementy tablicy przed przesunieciem w lewo: " <<endl;

        for (int i = 0; i<=zakres; i++) //od zera bo numeracja tablicy zaczyna sie od 0
        {
           temp[i] = tab[i]; //tablica temp ma takie same wartosci
           cout << "tab[" << i << "] = " << tab[i] << "\t";
        }

        for (int k = 0; k<=zakres; k++)//petla gdzie mam podglad na tablice TEMP (petla nie jest konieczna)
        {
           cout << "TEM[" << k << "] = " << temp[k] << "\t";
        }
        cout << endl << endl << "Elementy tablicy po przesunieciu w lewo: " << endl;

        for (int j = 0; j<=zakres; j++)//przywpisywanie i przesowanie
        {
           tab[j] = temp[j+1]; //przesuniecie w lewo

           cout << "tab[" << j << "] = " << tab[j] << "\t";
        }


getch();
return 0;
}

Nie wiem dlaczego tablica 3 jest już zerowana a nie przyjmuje wartości 4 ;/

0

const zakres = 4;
int tab[zakres];
tab[4] = 4; // mażesz po pamięci, indeksy tab to 0..(zakres-1)
Dalej również masz mazanie.

0
deque<int> tab(zakres);
tab[0] = 0;   tab[1] = 1;   tab[2] = 2;   tab[3] = 3;
// w lewo
tab.pop_front();
tab.push_back(0);
// w prawo
tab.pop_back();
tab.push_front(0);

1 użytkowników online, w tym zalogowanych: 0, gości: 1