Mr_ZuXii Temat założony przez niniejszego użytkownika |
Nie rozumiem wskazników i struktur. Problem z zadaniem z rozdziału 45. Prośba o porade dotycząca dalszej drogi programowania » 2018-11-17 22:32:44 Witam, piszę temat, ponieważ nie rozumiem wskaźników i struktur oraz mam duże problemy z rozdziałem 45, praktycznie nic nie rozumiem.
Nie proszę o gotowe rozwiązanie a nakierowanie. Prawde mówiąc to 2/4 zadan z tego kursu nie potrafiłem samodzielnie rozwiązać, mimo kilku podejść oraz przerobienie danego tematu kilkukrotnie.
Dodam jeszcze, że kurs ten zaczałem przerabiać, ponieważ zadania z książki Stephana Prata od pewnego rozdziału, były dla mnie za trudne.Macie jakieś porady co do mojej dalszej nauki programowania?
|
|
pekfos |
» 2018-11-17 22:40:30 Jeśli masz problem z zadaniem z kursu, ten dział forum jest właśnie od takich spraw. |
|
YooSy |
» 2018-11-17 22:53:33 Macie jakieś porady co do mojej dalszej nauki programowania? |
Zadawaj pytania. Programista nie jest skazany na samotność. |
|
mateczek |
» 2018-11-18 17:07:14 skocz do biblioteki wypożycz nawet starą symfonie c++ tam to jest wytłumaczone tak że nie sposób nie zrozumieć :)
|
|
Mr_ZuXii Temat założony przez niniejszego użytkownika |
» 2018-11-18 21:17:33 Niestety nie mam możliwości kupienia symfoni. A co do tego problemu z rozdziałem 45, to nie rozumiem funkcji jakie tam się znajdują. Naprzykład: void dodajKoniec( Lista *& lista, int liczba ) { Lista * nowy = new Lista; nowy->liczba = liczba; nowy->ogon = nullptr; if( lista ) ostatni( lista )->ogon = nowy; else lista = nowy; }
Rozumiem, że do fukcji przekazujemy wskaźnik adresu ale nie wiem dlaczego i poco. Lista * nowy = new Lista; tego to wogóle nie rozumiem tworzymy dynamiczny wskaźnik na strukture? Dalej fukcji już całkowicie nie rozumiem, oraz dalszych fukcji także. Wiec wychodzi na to, że nic nie rozumiem mimo usilnych prób zrozumienia tych wskaźników/struktur. Czy jest osoba która jest w stanie mi to jakoś łopatologicznie wyjaśnić? |
|
mateczek |
» 2018-11-18 21:26:34 to jest lista elementów oparta o wskaźniki. Każdy element posiada adres sąsiada. chcąc dodać element do listy musisz 1 stworzyć element Lista * nowy = new Lista 2 znaleźć koniec listy ostatni( lista )->ogon = nowy; i wstawić na koniec nowo stworzony element. Oczywiście można by pomyśleć nad lepszym nazwaniem i zorganizowaniem by było to bardziej czytelne. może taka wersja tego programu ?? Bardziej by do ciebie przemówiła #include <iostream>
using namespace std; struct elemetnt { int value; elemetnt * next; elemetnt( int liczba ) : value( liczba ) , next( nullptr ) { } };
class lista { elemetnt * poczatek, * koniec = nullptr; public: lista() { } void add_onBack( int liczba ) { elemetnt * nowy = new elemetnt( liczba ); if( koniec == nullptr ) { poczatek = koniec = nowy; } else { koniec->next = nowy; koniec = nowy; } } void add_onFront( int liczba ) { elemetnt * nowy = new elemetnt( liczba ); if( koniec == nullptr ) { poczatek = koniec = nowy; } else { nowy->next = poczatek; poczatek = nowy; } } void wyswietl() { elemetnt * el = poczatek; while( el ) { cout << el->value << " "; el = el->next; } } };
int main() { lista l; l.add_onFront( 2 ); l.add_onFront( 1 ); l.add_onBack( 3 ); l.wyswietl(); }
|
|
pekfos |
» 2018-11-18 21:31:57 Rozumiem, że do fukcji przekazujemy wskaźnik adresu |
Referencję na wskaźnik. Lista * nowy = new Lista; tego to wogóle nie rozumiem tworzymy dynamiczny wskaźnik na strukture? |
Nie ma czegoś takiego jak dynamiczny wskaźnik. Jest dynamiczna alokacja pamięci. Wskaźnik jest potrzebny żeby odwoływać się do takiej pamięci. Statycznie alokowana pamięć ma nazwę w kodzie, dynamiczna nie ma. Dalej fukcji już całkowicie nie rozumiem |
Lista * nowy = new Lista;
nowy->liczba = liczba; nowy->ogon = nullptr;
if( lista ) ostatni( lista )->ogon = nowy; else lista = nowy;
Pomaga narysowanie tego na kartce. Węzły listy to pudełka z liczbą, wskaźniki to strzałki które łączą węzły (lub nie - wskaźnik pusty). może taka wersja tego programu ?? Bardziej by do ciebie przemówiła |
Genialne. Nie rozumiesz struktur? Masz tu jeszcze programowanie obiektowe! I rozwiązania do zadań też łap! Brakuje mi na forum opcji "daj w łeb". |
|
Mr_ZuXii Temat założony przez niniejszego użytkownika |
» 2018-11-19 21:51:07 Mateczek sorry, ale twojego kodu nie rozumiem kompletnie, bo jeszcze do programowania obiektowego nie doszedłem, ale dzięki za poświęcony czas. Pekfos dzięki za rozjaśnienie, już rozumiem jak ta funkcja, mniej więcej działa, ale nadal nie rozumiem, jak ten program ogólnie działa. Lista * ostatni( Lista * lista ) { if( lista ) while( lista->ogon ) lista = lista->ogon; return lista; } Ta funkcja nie wiem, co znaczy, ale wiem, że bez niej funkcja „wypisz” wypisze tylko ostatnią podaną liczbę, ale nic poza tym nie rozumiem. void wypisz( Lista * lista ) { if( lista ) { std::cout << lista->liczba << ", "; wypisz( lista->ogon ); } } Ta funkcja na mój rozum wyświetla liczbę, potem wykonuje się, funkcja wypisz i znów sprawdza warunek if i znów wypisuje liczbę ze wskaźnika lista, ale nie wiem, jak przechodzi po kolejnych wartościach, a nie wyświetla ciągle tej samej. void zniszcz( Lista *& lista ) { while( lista ) { Lista * tmp = lista; lista = lista->ogon; delete tmp; } lista = nullptr; } Funkcja zwalnia pamieć, ale nie wiem, dlaczego tworzy się wskaźnik, a potem się tylko ten wskaźnik zwalnia. A Jeżeli chodzi o zadanie do tego zadania, tonie mam pojęcia jak funkcja dodaje liczby na koniec listy a tym bardziej jak się zabrać, żeby na początek listy dodawała. Nie wiem, może programowanie jest nie dla mnie, jak taki program co normalnemu użytkownikowi zrozumienie zajmuje 5 min, mi zajmuje tydzień. |
|
« 1 » 2 |