41 / 80
Aug 2018

Jedyne dobre i pewne źródła wiedzy o C++ dostępne w internecie to dokumentacja i stackoverflow.

Przepisywanie z jednej do drugiej tablicy na wskaźnikach rozumianych w taki sposób jak we wklejonym fragmencie kodu przebiega identycznie jak przy zwykłych zmiennych tablicowych.

Bo używanie tablic i używanie do kopiowania wskaźników w C++ jest już dawno nie w “modzie” ;-). W C++ używa się zamiast tablic np vectorów.

AALe skoro tak chcesz, to, piszę z pamięci, więc powinieneś to sprawdzić:

int n{10}, tab1[n], tab2[n], *wsk1 = &tab1[n-1], *wsk2 = tab2;
......
for (int i = 0, i < n; ++i)
    *wsk2++ = *wsk1--;

PS
Może nie jest to dokładnie to o co pytałeś, ale każdą rzecz można zrobić na wiele sposobów.

ta pętla działa bez zarzutów:

for (int i=0; i<n; i++)
{wskaznik2[i]=wskaznik[n-1-i];
cout<<wskaznik2[i]<<" "; }

np:
3 5 6 7 8 (wskaznik[4] ; n=4)
8 7 6 5 3 (wskaznik2[4])

natomiast ta tylko od połowy:

for (int i=0; i<n; i++)
{wskaznik2[(n-1)-i]=wskaznik[i];
cout<<wskaznik2[i]<<" "; }

np:
3 5 6 7 8 (wskaznik[4] ; n=4)
11889696 11867144 6 5 3 (wskaznik2[4])

dodatkowo te niepasujące liczby z pierwszej połowy są przypadkowe,
więc to chyba adres komórki, ale czemu tak jest?
Dla mnie początkującego te dwie pętle są właściwie tym samym.
Czemu jedynie pierwsza działa jak należy?

Bo drugą tablicę zaczynasz zapisywać od tyłu, nadpisując śmieci. Musisz sobie zdawać sprawę, że początkowo w tablicy mogą i często pojawiają się śmieci i właśnie zaczynasz na początku wypisywać te śmieci.
Gduy dojedziesz do połowy jest już ok. Jak napisała Julia, po prostu sobie to narysuj i przeanalizuj krok po kroku lub dodaj do programu wydruki kontrolne, krok po kroku - takie pseudo debugowanie.

Zauważyłem przy przeszukiwaniu internetu że vector to taka, okiem laika, lepsza tablica. Mam w planie przestudiować je w następnej kolejności. Nie chcę jednak ominąć wskaźników, mimo że są żadziej używane. Dzięki za twoją odpowiedź.

Przecież na to pytanie już dawno dostałeś odpowiedź od Yuli i ode mnie podpowiedź podpunkt 4. Czytałeś to wszystko czy stwierdziłeś, że za dużo tekstu? Zacytuję:

  1. To co wskazała @yula. Podpowiedź: przypisujesz coś do jakiegoś elementu tablicy, a wyświetlasz inny.

Przeczytałem pobieżnie. Nie obraź się, ale za dużo tam zbędnych uwag.
Fatkycznie punkt 4. jest wartościowy.
Wyświeltlanie musi być wykonane po przypisaniu wartości. Banalny błąd, ale jakoś to przeoczyłem. Teraz rozumiem naturę problemu, skąd te dziwne watrości w pierwszej połowie. Dziękuję za pomoc.

@majormarino
Nie obrażę się, ale z chęcią dowiem się która uwaga jest zbędna. Chyba, że chodzi Ci tylko by zaliczyć zadanie, a gówniany kod Ci nie przeszkadza, wtedy faktycznie cenna była tylko czwórka.

2 months later

Panowie, pomożecie czemu sędzia on-line mi to odrzuca? u mnie w code::blocks to chodzi bez problemu

#include

using namespace std;

int n,t;
int tab[100];

int main ()
{
cout<<"Podaj liczbe testow: ";
cin>>t;

if (t<=100)
{
    for (int i=0; i<t; i++)
    {
        //cout<<"Podaj ilosc elementow "<<i+1<<" tablicy: ";
        cin>>n;

        for (int i=0; i<n; i++)
        {
            //cout<<"Podaj "<<i+1<<" element tablicy: ";
            cin>>tab[i];
        }

        cout<<"Tablica odwrocona znajduje sie ponizej"<<endl;

        for (int i=n-1; i>=0; i--)
        {
            cout<<tab[i]<<" ";
        }
        cout<<endl;
    }
}

return 0;

}

wskazane jest przekazywanie kodu poprzez link do ideone.com9
tam też można testować program, zrób to dla przykładowych danych podanych w zadaniu a powinieneś zobaczyć różnicę

7 months later

dlaczego sędzia nie zalicza mi tego zadania.

Pozdrawiam,
i z góry dziękuję za pomoc.

Przecież nawet zadanie testowe nie jest poprawnie wykonane. Przypatrz się drugiej pętli for.

7 months later

Witam
Pomorze mi ktoś napisałem program i niby wszystko się zgadza ale pokazuję błąd w wykonaniu. Trochę poczytałem o tym ale nadal nie bardzo rozumiem.

Link do kodu:

Wstaw poprawnie kod i sformatuj go. Tablice o rozmiarze n indeksujemy od 0 do n - 1. Dlatego masz dwie pętle źle napisane. Rozmiar tablicy powinien wynosić 100 (patrz treść zadania).

Przyklad troszke trudniejszy niz w tresci zadania:

Wejście:
11 12 13

Wyjście:
13 12 11

1 month later

o czym zapominam?

To raczej nie kwestia zapominania, chyba, że zapomniałaś,że masz już w tym zadaniu 3 x AC ? :wink:

Jeżeli natomiast chcesz poćwiczyć wskaźniki itd, to robisz to w dziwaczny sposób. Twój kod całkowicie mi się nie podoba, nawet po poprawkach. A jak, np tak:

zamiast:

...
 cout << OdwrocKolejnoscLiczb(ileLiczb);
 }
    delete [] OdwrocKolejnoscLiczb(ileLiczb);

można w ostateczności delete[] zamiast cout, w środku pętli, a nie poza nią – tutaj cout jest błędem.

...
delete [] OdwrocKolejnoscLiczb(ileLiczb);
    }