Dzień dobry wszystkim!
Napisałem procedurę, która ma odwrócić kolejność elementów w tablicy int-ów.
Dla maksymalnego uproszczenia program główny sam tworzy tablicę mającą n elementów i wypełnia je liczbami całkowitymi od 1 do n (np. 1, 2, 3, 4, 5 dla tablicy o 5 elementach).
Następnie program przesyła tablicę (*tab) oraz liczbę jej elementow (dl) do procedury zamien().
Tablica przesłana jest przez referencję.
Zmienne procedury:
int down - tzw. "spadzik", który na początku jest ustawiony na ostatnią tablicy (dl-1) i po każdej iteracji dekrementuje się o 1 (down--).
int buff - bufor do tymczasowego przechowania wartości jednej z podmienianych komórek
Opis procedury:
Pętla for operuje na parze komórek tabeli w każdej iteracji.
W pierwszej iteracji są to pierwsza (nazwijmy ją "a") i ostatnia komórka (nazwijmy ją "b").
Na komórce a działam wskaźnikiem (nazwa tablicy), zaś na komórce b działam "spadzikiem".
Algorytm procedury:
Krok 1: Skopiuj komórkę a do bufora.
Krok 2: Skopiuj komórkę b do komórki a.
Krok 3: Skopiuj bufor do komórki b.
Krok 4: Inkrementuj wskaźnik i dekrementuj "spadzik".
Pętla trwa dopóki rosnący iterator (i) i spadający "spadzik" (down) nie spotkają się w połowie tabeli (i<down).
Problem:
Po przesłaniu tablicy [1, 2, 3, 4, 5] do procedury odwrócona tablica powinna być [5, 4, 3, 2, 1].
Niestety zamiast tego jest [5, 1, 3, 4, 2].
Dlaczego otrzymuję błędny wynik?
Która linia kodu jest nieprawidłowa i dlaczego??? Chcę to dobrze zrozumieć i jestem gotów nawet postawić dużą pizzę temu, kto mi to dokładnie wytłumaczy.
Bardzo proszę o pomoc!!!
Oto kod:
#include <iostream>
using namespace std;
void zamien(int *tab, int dl)
{
int down = dl-1; // "spadzik" (spada w dol)
int buff = 0; // bufor do przechowania jednej z komorek
for (int i=0; i<down; i++)
{
buff = *tab; // krok 1: kopiuj komorke "a" do bufora
*tab = tab[down]; // krok 2: kopiuj komorke "b" do komorki "a"
tab[down] = buff; // krok 3: kopiuj bufor do komorki b
tab++; // inkrementuj wskaznik
down--; // dekrementuj spadzik
}
}
int main()
{
int n=5;
int tablica[n];
for (int i=0; i<n; i++)
{
tablica[i] = i+1;
}
zamien(tablica,n);
cout<<"Tablica po zamianie: ";
for (int i = 0; i<n; i++)
{
cout<<tablica[i]<<" ";
if(i==(n-1)) cout<<endl;
}
return 0;
}