Cześć, mam pewien problem. Uczę się C++ i mam teraz przesunąć elementy tablicy o 2 w lewo, czyli drugi na zerowe, pierwszy na przedostatnie, trzeci na pierwsze).
weź ołówek i kartkę i od razu będziesz wiedział jak to zrobić.
Pseudokod:
a1 = tab[0];
a2 = tab[1];
for(i=2; i< tab.len; i++){
tab[i-2] = tab[i]
}
tab[tab.len-2] = a1;
tab[tab.len-1] = a2;
w skrócie: zapamiętaj 2 pierwsze wartości, potem w pętli przepisz wartości przesuwając index o 2, zapisz na końcu zapamiętane na początku wartości.
Mam coś takiego teraz:
#include iostream
#include cstdlib
#include time.h
using namespace std;
int main()
{
int n=50;
int Tab[n];
int losowa_liczba = 0;
srand(time(NULL));
for(int i = 0, j = 0; i50; i++, j++)
{
losowa_liczba = rand() % 41 - 20;
Tab[i] = losowa_liczba;
cout Tab[i] " ";
if(j==10)
{
cout endl;
j=0;
}
}
{
cout"\n\n To jest pierwotna tablica.\n\n";
}
int a1=Tab[0];
int a2=Tab[1];
for(int i=2, j=0; i50; i++, j++)
{
Tab[i-2]=Tab[i];
Tab[48]=a1;
Tab[49]=a2;
cout Tab[i] " ";
if(j==10)
{
cout endl;
j=0;
}
}
cout"\n\n To jest tablica po przesunieciu.";
return 0;
}
Już prawie działa, ale nie do końca. Co jest źle? Zauważyłem, że wartości czasem pojawiają się z “powietrza”.
Zamiast losować liczby wpisz kolejne, to będziesz wiedział czy algorytm masz poprawny.
-
Nie dopisujesz liczb a1, a2.
-
W tablicy po przesunięciu wypisujesz starą tablicę.
Nie rób wszystkiego naraz. Użyj metod. Zrób mniejszy problem (np 4 elementową tablicę) dla testów,
Nie da rady. W zadaniu jest podane, by wylosować
To rada czy uwaga do kodu? Nie znam się na programowaniu, uczę się bo muszę ale nie potrafię się w tym dobrze zorientować.
Uwaga do kodu.
Rozdziel sobie pętle na losująca i wpisującą wartosći do tablicy , wypisującą tablicę przez zmianą, zmnienijącą o przesuniecię i wypisującą tak żeby były 4 pętle. U Ciebie druga pętla ma za dużo rzeczy w sobie i jest bląd dlatego lepiej na początek sobie je rozdzielić. Jak juz znasz fukcje/metody to wtedy napisz sobie taką funkcję metodoę odpowidzialną za wyświetlanie tablicy(jesli nie rozpsiz sobie wszystko na 4 pętle).
Bląd masz w tej pętli:
Tab[i-2]=Tab[i];
Tab[48]=a1;
Tab[49]=a2;
cout<< Tab[i] << " ";
Wyświetlasz tab a zmieniasz tab[i-2] czyli nie wyświetlasz zmian.
Jak rozbijesz na pętle wyświetlającą póżniej całośc tablicy od tab[0] będzie dobrze.
Czyli:
for(int i=2; i<50; i++)
{
Tab[i-2]=Tab[i];
}
Tab[48]=a1;
Tab[49]=a2;
for(int i = 0, j = 0; i<50; i++, j++)
{
cout << Tab[i] << " ";
if(j==10)
{
cout << endl;
j=0;
}
}
Dzięki za pomoc Panowie, działa :-D
Tab[48]=a1;
Tab[49]=a2;