C++ Pomoc w nauce wskaźniki, sortowanie alfabetyczne, gra w czwórki, labirynt

0

Witam :)
To mój pierwszy post C++ uczę się od paru miesięcy z książki Pana Alex'a Allain'a, mam lekką niechęć do pisania na forach ale zostałem do tego zmuszony bo mój nauczyciel nie umie c++.
Mam problem trzema zadaniami, jestem otwarty na krytykę, najlepiej walić prosto z mostu abym to po prostu zapamiętał (chce pokreślić ,że nikt wcześniej nie sprawdzał moich wypocin).
Zdaje sobie sprawę ,że nazwy zmiennych powinny być po angielsku, ale jako ,że na razie z nikim nie dzieliłem się moim kodem pozostałem przy polskich nazwach.

  1. Program z książką telefoniczną: https://pastebin.com/nLtVfEnV
    Problem 1: Nie potrafię napisać sortowania alfabetycznego mimo ,że wiem jak się za to zabrać tj. tablica jako ciąg char oraz korzystając z char --> int(), ale kiedy liczba jest mniejsza/większa program sprawdza dalej, mimo korzystania z "continue"
    Problem 2: Kiedy rozmiar jest zwiększany x2, program się crashuje.

  2. Gra w czwórki: https://pastebin.com/dPsBVAEW
    Nie potrafię nawet sobie wyobrazić jak zabrać się za funkcję "czyWygrana", kiedy chce sprawdzić ciąg znaków w pionie wychodzę poza pamięć. Oraz w poziomie próbowałem porówania czterech w poziomie i jeśli są takie same zwrócić true, ale na początku zawsze są takie same bo wynoszą '_'.

  3. Labirynt: https://pastebin.com/0idZ9LcD
    Nawet nie wiem jak się, za to zabrać czy ustawić losowy start, oraz losowe poruszanie w 3 kierunkach z pomocą rand(), ale wtedy była by tylko jedna droga, na wikipedii widziałem coś w stylu
    ciągłego dzielenia tablicy na części.

Prosiłbym o brak wpisywania kodu, raczej o pisanie wskazówek / instrukcji krok po kroku - pisząc coś sam z krokami lepiej zapamiętam niż analizując czyiś poprawiony kod.
Dziękuję, jeśli ktoś mi pomoże i wskaże błędy. jeśli ktoś ma fun ze sprawdzania takiego młodzika, to chętnie bym publikował moje rozwiązania na zadania w następnych rozdziałach.

4

Książka telefoniczna:

  • Mylisz rozmiar z pojemnością. Rozmiar - to pojemność. Następny numer to rozmiar.
  • Po kiego przekazujesz wszędzie wskaźnik na rozmiar, skoro nigdzie go nie zmieniasz?
  • Używasz C++, string to czemu nie używasz vector?
  • 0<=number<*p_rozmiar oznacza ((0<=number?1:0)<*p_rozmiar)
  • cin.clear() powiejesz użyć tuż po wczytaniu jeżeli wczytanie się nie udało
  • Zamiast tak dziwacznego cin.ignore(...) znacznie lepiej zadziała while(cin.get()!='\n') {}
  • Zrób dodatkową strukturę struct kontakty { int pojemnosc,rozmiar; kontakt *tablica; } do każdej funkcji przekazujesz referencje na strukturę
  • Aby ułożyć napisy alfabetycznie możesz je zwyczajnie porównać if(napis_A<nampis_B)
  • Zacznij używać angielskiego nazewnictwa, bo to ciężko się czyta. Ba uprości ci to pojmowanie własnego kodu
  • https://4programmers.net/Forum/C_i_C++/244988-ponowny_wybor_opcji_instrukcja_switch?p=1100492#id1100492
  • http://forum.4programmers.net/1101404

Gra w czwórki: z twego kodu trudno wyczytać co próbujesz zrobić, więc może warto opisać.

Labirynt: o jakim labiryncie mowa jak masz całą tablicę wypełnioną jednym znakiem?

2
_13th_Dragon napisał(a):
  • Używasz C++, string to czemu nie używasz vector?

Dokładnie to samo miałem na myśli. Póki co to jest C ze std::string

A temat jest ładnie podatny na transformację ku obiektowości, od drobiazgów poczynając, np konstruktor:

struct kontakt
{
    string nazwa;
    int dni_od_polaczenia;
    kontakt() {
             nazwa = ""; // w gruncie reczy zbędne
             dni_od_polaczenia = 0; 
    }
};

by BARDZO uporządkować logikę, zmieniając proceduralne funkcje na metody (zaznaczam, ja w tych latach już chyba nie myślę proceduralnie)

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