Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Mój pierwszy program [OCEŃCIE] - Napisałem swój pierwszy program w C++

Zeusek97 23 Mar 2013 14:33 11013 42
  • #1
    Zeusek97
    Level 11  
    Witam!

    Dziś napisałem swój pierwszy program w języku C++, którego uczę się stosunkowo niedługo. Gdyby zliczyć wszystkie dni to byłoby ich około 3-4 :D, w związku z czym, program nie ma dużych możliwości. :| Ale do sedna...

    Program ma za zadanie obliczać pola oraz obwody rożnych trójkątów, od prostokątnych aż po równoramienne i dowolne :D Niestety nie da się obliczyć każdego dowolnego, gdyż nie znam jeszcze funkcji trygonometrycznych sin itp. :cry:

    Niżej zamieszczam link do programu w aplikacji (*exe) oraz kod programu. Całość napisałem w Code::Blocks, który bardzo przypadł mi do gustu :D Napiszcie, co byście zmienili i oceńcie moje pierwsze dzieło, byle nie za surowo :D



    Code: cpp
    Log in, to see the code


    Brawo :) Ale następnym razem proszę umieszczać kod w znacznikach syntax. Opcja Listing kodu.
    Nieregulaminowy odnośnik usunąłem. [adamas_nt]
  • Helpful post
    #2
    mariuz
    Level 31  
    Quote:
    Download permission denied by uploader. (0b67c2f5)
  • #3
    Zeusek97
    Level 11  
    Już poprawione! Sorki bardzo, ale dawno nie używałem Rapida :]
  • #4
    mariuz
    Level 31  
    Program przyjmuje ujemne długości boków
    Program przyjmuje trójkąt o bokach 1,1,5000.
  • #5
    Zeusek97
    Level 11  
    Program przyjmuje ujemne długości boków

    ODP: Potrafię sprawdzić, czy liczba jest dodatnia, ale nie umiem w razie ujemnej wrócić na początek kodu :[

    Program przyjmuje trójkąt o bokach 1,1,5000.
    ODP: A taki trójkąt nie może istnieć?

    Mógłbyś podesłać poprawiony kod?
  • Helpful post
    #6
    Dżyszla
    Level 42  
    Zeusek - podstawowa zasada istnienia trójkątów głosi, że jeden z boków (długość) musi być mniejsza od sumy długości dwóch pozostałych ;)

    Nie, kod masz sam poprawić! ;) I nie próbuj wracać w razie błędu, tylko wykonuj daną część kodu w razie, gdy się da :)
  • #7
    Zeusek97
    Level 11  
    Faktycznie zapomniałem o tej zasadzie :]
    Dobrze, postaram się sam to poprawić :D

    Ale dalej nie wyrażacie się na temat programu ;[

    Dodano po 50 [minuty]:

    GOTOWE! KOD POPRAWIONY!
    Teraz sprawdza, czy liczba jest większa od zero i czy jeden bok jest mniejszy od sumy dwóch pozostałych :D
    Dżyszla- dzięki za pomoc! Teraz oceń :]
    mariuz- Dzięki za wykrycie błędów :] Może znajdziesz jeszcze jakieś? :P
  • #8
    Raphaw
    Level 20  
    Poczytaj o operatorach logicznych.
    Code: c
    Log in, to see the code

    W takim gąszczu if-ów łatwo się pogubić - można to zastąpić wyrażeniem:
    jeżeli (warunek1 i warunek2 i warunek3) - doczytaj jak. :)
    Tak samo można wczytać wszystkie 3 boki i następnie sprawdzić czy wszystkie są większe od 0.
    Pozdrawiam.
  • #9
    Zeusek97
    Level 11  
    Raphaw faktycznie gąszcz xD Jak ktoś kazałby mi coś dodać w konkretnym miejscu to zajęło by to z 5 minut :] Dopiero zaczynam i szczerze mówiąc nie wiedziałem o ty- dzięki ;] Teraz przyszło mi to do głowy, że mogłem zrobić tak:

    if(a<(b+c) || b<(a+c) || c<(a+b))

    No ale cóż- ilu programistów tyle różnych sposobów na wykonanie takiego programu. W końcu to w większości matematyka, a jak mawia moja pani: Każde zadanie można wykonać na kilka sposobów, od was zależy jaki wybierzecie. Najważniejsze to poprawny wynik.

    Ale dalej nie wiem, jak mi poszło (jak na pierwszy raz)? :]
  • Helpful post
    #10
    Dżyszla
    Level 42  
    Implementacja już jakoś idzie, gorzej jeszcze z optymalizacją oraz przewidywaniem wszystkich sytuacji, ale myślę, że to przyjdzie z czasem. I mam nadzieję, że nikt nie będzie miał nic przeciwko, jeśli powiem, że możesz zamieszczać kolejne proste programy w celu weryfikacji. Ale tylko pod warunkiem, że będziesz oczekiwał wskazówek i uwag, a nie gotowych rozwiązań w postaci kodu :)

    W odniesieniu do przedstawionej konstrukcji IF - || to logiczne OR, a nie AND ;) wszystkie trzy warunki muszą być spełnione jednocześnie, a więc połączone iloczynem logicznym. Więc nie ten operator ;)

    I mała taka praktyczna wskazówka - warto, nawet jeśli to niepotrzebne, każdy warunek pomiędzy którymi wykonuje się operacje logiczne, objąć w nawias. Niektóre języki inaczej priorytetują operacje i można się zdziwić wynikiem. Czyli if ( (a ? b) && (c ? d)) (gdzie ? to jakaś operacja dająca wynik logiczny. Taki nawyk może się przydać przy przesiadce kiedyś na inny język :)
  • #11
    Zeusek97
    Level 11  
    Dżyszla- Dobrze, że tu jesteś! Faktycznie to operator OR, po prostu nie pomyślałem (na prawdę) ;] Ciekawe kiedy przestanę popełniać błędy :/ Teraz spróbuję napisać optymalny kod, ale tym razem na koła? Piszcie, co mógłbym jeszcze napisać, w ramach ćwiczeń :] Pozdrawiam i oczekuję na komentarze ;]
  • #13
    Krzysztof Gustaw
    Level 23  
    Witam!
    Myślę, że możesz spróbować napisać parę prostych gierek, np grę MASTERMIND. Uczysz się przez zabawę - świetna, moim zdaniem, metoda. Dzięki temu opanujesz działania na liczbach losowych oraz na tablicach. Możesz też napisać program typu BIORYTM - poznasz funkcje czasowe i arytmetykę modularną. W dalszej kolejności sortowanie tablic. Jest to typowy przykład, jak dany problem można rozwiązać na wiele różnych sposobów, do wykorzystania np w grze MASTERMIND która napiszesz (lista najlepszych wyników) a którą możesz pisać i czytać do pliku - poznasz operacje na plikach...
    Ja od tego zaczynałem :) i miałem satysfakcję jak na dniach otwartych w ELWRO, w miarę upływu czasu widziałem, jak napisane przeze mnie programy, a szczególnie BIORYTM, który był również kalendarzem, były wykonywane przez zwiedzających na coraz większej liczbie komputerów a potem na wszystkich znajdujących się na moim wydziale - BEZCENNE!
    Wada: Utrudniony dostęp do kompa :)
    Powodzenia!
    K.G.
  • #14
    Zeusek97
    Level 11  
    GOTOWE!!! Wstawka miała być wczoraj, ale miałem małe problemy techniczne ;P Wróciłem ze szkoły i udało mi się to naprawić. Mam nadzieję, że nikt nie ma nic przeciwko, bym zamieścił kolejny programik :D Dziękuję wszystkim zainteresowanym (pragnę tu podziękować szczególnie użytkownikowi: Dżyszla, który naprawdę mi pomaga ;]) i zapraszam do częstego wpadania do mojego tematu, gdyż naprawdę chcę się nauczyć tego C++ :]

    Tym razem jest to program o kołach. Możemy z jego pomocą policzyć m.in.: pole i obwód koła, pierścienia koła i wycinka oraz odcinka koła. Niestety z odcinkiem koła przy polu jest problem, ponieważ jestem w 3 Gimnazjum i nie miałem funkcji trygonometrycznych. :cry: Jednak spróbowałem zastąpić funkcję sin nowatorskim wzorem (alfa=a/r). Czytałem, że trzeba podać miarę kąta w radianach, których również nie rozumiem :cry:
    Postarałem się pozbyć głupich błędów, jak w przypadku trójkątów, dlatego teraz program poinformuje o błędzie, kiedy kąt będzie większy niż 360 lub wybierzemy nieodpowiednia cyfrę menu. Starałem się robić jak najmniejsze odstępy, ale nie wiem czy to wpłynie w jakimś stopniu na wydajność ^^
    To tyle z mojej strony, proszę o poprawę kodu jeśli chodzi o pole odcinka koła, wytłumaczenie co jest nie tak, podania ewentualnych błędów i opinie na temat mojego DRUGIEGO programu :]

    Code: cpp
    Log in, to see the code
  • #15
    Dżyszla
    Level 42  
    To na początek trochę rad optymalizacyjnych...
    1. Jeśli sprawdzasz jedną zmienną na różne przypadki, to najlepiej używać konstrukcji if ... else if ... else if ... - będzie to wydajniej. A w przypadku faktycznie sprawdzania tylko jednej zmiennej, to najlepiej posłużyć się instrukcją switch/case (sorry, nie siedzę w C, więc nie chcę zamieszać z zapisem - znajdź sam ;) ) Z pewnością bedzie to i wydajniejsze (choć prawda, tutaj nie ma to żadnego znaczenia), ale i czytelniejsze. Generalnie sprowadza się to do takiego zapisu
    sprawdź zmienna:
        jeśli == 'a' zrób : ...
        jeśli == 'b' zrób : ...
        w każdym innym przypadku zrób: ...


    2. Co to jest za przypadek, gdy nie chcesz PI uwzględniać? Trochę chyba niezasadne ;)

    3. Myślę, że czas na poznanie funkcji :) Stwórz dla każdego obliczenia osobną funkcję. W ten sposób ograniczysz główne menu do prostego wyboru jednej z dostępnych funkcji (oczywiście użytkownik nie będzie wiedział, ale Ty w kodzie będziesz to widzieć). Najlepiej jak jeszcze dodatkowo wydzielisz funkcje, które tworzą "podmenu" oraz te, które zajmują się wyłącznie obliczeniem na podstawie zadanych parametrów.
  • #16
    Zeusek97
    Level 11  
    Są takie przypadki, na przykład moja pani nieraz nie wymaga obliczania PI :D
    Co do funkcji to trochę mi się miesza ;[ Nie bardzo rozumiem ich zastosowanie :/
    Mógłbyś mi napisać jakiś króciutki programik, tak, żebym zrozumiał? Bo nie chcę się uczyć źle, wiem z doświadczenia innych, że to zły nawyk ;] Jeśli chodzi o menu, to prawie nic nie rozumiem ^^ Chodzi Ci o return?

    BARDZO PROSZĘ O POMOC W WYTŁUMACZENIU FUNKCJI- NAJLEPIEJ NA PRZYKŁADACH.
  • #17
    Dżyszla
    Level 42  
    Sorry, ale jak można nie wymagać obliczania pi? Pi jest stałą i z zasady się jej nie wylicza, tylko przyjmuje z większą lub mniejszą dokładnością. Ech, czego teraz uczą w tych szkołach :(

    Funkcje to nic innego, jak małe podprogramy z przekazanymi już parametrami (oraz możliwością zwracania wyniku), które realizują podstawowe problemy. Na funkcje należy patrzeć tak, jak na niezależne (najlepiej, choć nie jest to regułą) programy. Przykładowo funkcją może być np PoleKwadratu... Załóżmy, że robisz program do obliczania objętości graniastosłupa o podstawie kwadratu. Zauważasz, że wzór jest PolePodstawy * Wysokość. Dalej wiesz, że PolePodstawy = a^2. No i właśnie ten ostatni punkt to po prostu funkcja...

    W matematyce wygląda to np tak (przykład abstrakcyjny):
    S = a * b * P/3
    P = a * W * 3
    W = b^3

    Widać tutaj trzy funkcje, które złożą się ostatecznie na wynik. Funkcja wyliczająca S, musi wywołać funkcję wyliczającą P (aby poznać jej wynik), a ta zaś funkcję W. Implementując (zwróć uwagę, że zapisuję od tego najbardziej drobnego "problemu"):
    
    /*function*/ float W(float b)
    { W = b * b * b; }
    /*function*/ float P(a,b)
    { P = a * W(b) * 3; }
    /*function*/ float S(a, b)
    { S = a * b * P(a,b)/3 }
    

    (możliwe, że macham się w syntaktyce C, ale chodzi mi tu raczej o zasadę).

    Teraz możemy wywołać funkcję S wypisując jej wynik i podając, jakie ma przyjąć parametry
    printf(S(a,b));

    Oczywiście, możesz powiedzieć, że wszystko można policzyć i napisać
    printf(a * b * (a * (b * b * b) * 3)/3)
    Tylko czy to jest czytelne? Raczej nie, szczególnie, jeśli wiemy, że każda funkcja zwraca nam jakąś logiczną, znaczącą wartość.

    Zwróć uwagę na jedna rzecz - każdej funkcji dajemy tylko potrzebne jej dane (które w jakiś sposób wykorzystuje) - funkcja nie ma pojęcia o wartościach występujących w innych funkcjach, ani nawet wiedzy, "kto" chce od niej wyliczenia. W programowaniu nazywa się to parametrami funkcji, które są równoważne z tzw. zmiennymi lokalnymi.

    Ponadto, bazujac na przykładzie objętości graniastosłupa, funkcje uproszczą i skrócą kod, gdyż zamiast osobno pisać obliczenie pola kwadratu (zakładając, że program także to realizuje) oraz obliczenie objętości, można już wykorzystać w tym drugim zadaniu jako jedną z danych wynik zadania obliczenia pola kwadratu. Teraz załóżmy, że pomyliłeś wzór na pole kwadratu. W pisaniu bez funkcji musisz odnaleźć wszystkie miejsca w kodzie i domyśleć się, co i gdzie trzeba poprawić. Jeśli masz funckję, którą na dodatek nazwiesz PoleKwadratu, szybko ją znajdziesz i poprawisz tylko w tym jednym miejscu.
  • Helpful post
    #18
    Krzysztof Gustaw
    Level 23  
    Witam!
    Funkcja w języku C jest najprostszym sposobem zamknięcia pewnych działań i/lub obliczeń w tzw "czarnej skrzynce" którą można później używać nie dbając o jej zawartość. Dzięki dobrze napisanym funkcjom możesz zapomnieć JAK to będzie zrobione, wystarczy że będziesz wiedział CO zostanie zrobione.
    Podam Ci przykład:
    Funkcja podnosząca do kwadratu - w języku "C" i "C++" nie ma operatora podnoszenia do kwadratu, zatem musimy NAPISAĆ TAKĄ FUNKCJĘ.
    Oto przykładowa funkcja "kwadrat" i funkcja "main" która ją wywołuje - od razu więc zobaczysz całą strukturę.

    Code: cpp
    Log in, to see the code

    Wartość obliczona przez funkcję jest zwracana do miejsca jej wywołania przez funkcję wywołującą poprzez instrukcję return. Oprócz tego, gdy sterowanie programu natrafi na instrukcję return, powoduje natychmiastowe zakończenie działania funkcji. W nawiasach okrągłych może wystąpić dowolne wyrażenie. Oczywiście nie wszystkie funkcje muszą zwracać wartość. W takim przypadku wstawiamy instrukcję return bez wyrażenia albo nie wstawiamy tej instrukcji w ogóle. Wówczas sterowanie programu opuści tę funkcję po napotkaniu zamykającego jej definicję nawiasu klamrowego.

    A teraz proponuję (trywialne) ćwiczenie:
    w oparciu o powyższą funkcję "kwadrat" napisz funkcję obliczającą objętość sześcianu oraz prostopadłościanu o podstawie kwadratowej (kwadrat o boku długości n). Mam na myśli napisanie przez Ciebie funkcji która wywołuje funkcję "kwadrat"

    P.S.
    W języku C wystepują jeszcze makrodefinicje, potocznie zwane "makra" (te opisane "#define COŚ_TAM") ale o tym później.
    W Twoim drugim programie zauważyłem, że jest dużo porównań wartości p czy p1 ze stałą. W takich przypadkach, moim zdaniem, zamiast instrukcji warunkowej if lepiej użyć instrukcji wyboru switch (dla lepszej czytelności).
  • Helpful post
    #19
    Anonymous
    Anonymous  
  • #20
    Zeusek97
    Level 11  
    Faktycznie machnalem sie we wzorze, ale mozliwie szybko poprawie :) Napiszcie mi, jak to jest z optymalizacja (jak to dziala i jak to pisac)

    Pozdrawiam!
  • Helpful post
    #21
    alexandermaly
    Level 9  
    Widzę, że rzeczywiście przydadzą Ci się funkcje ;) Do wyboru w menu dużo lepszym sposobem jest użycie:
    switch (zmienna)
    case 1
    {
    instrukcja
    break;
    }
    case 2
    {
    instrukcja
    }
    defaut
    {
    instrukcja
    }

    gdzie defaut jest wykonywane, gdy wybrano inną wartość, niż przewiduje menu. Co do funkcji, przydadzą Ci się, żeby mieć bardziej czytelny kod, oraz dużo łatwiej znaleźć błąd i go wyeliminować (NAPRAWDE SZYBCIEJ :P).
    Widzę, że ciągle przed strumieniami piszesz std::, możesz zaoszczędzić sobię czasu i tak nie pisać umieszczając
    using namespace std;
    w miejscu po dołączeniu bibliotek :) co do robienia programów- zajrzyj na www.spoj.pl, tam masz duże pole do popisu, wymagana niewielka wiedza z matematyki :)
  • #22
    Zeusek97
    Level 11  
    Ok dzięki ;] O tym default nie wiedziałem :P Teraz poprawie koła i postaram się coś napisać ;]
  • #23
    gitara61
    Level 11  
    Jeszcze jedna rada, która nauczy cię przewidywać większość możliwych rozwiązań (wszystkich nawet doświadczony programista czasem nie przewidzi). Po napisaniu każdego programu sprawdzaj dokładnie poprawność jego działania. Taka operacja nazywa się testowaniem. Najlepiej wykonaj to wpisując różne wartości (nawet niepoprawne) i sprawdzaj jakie program daje wyniki. Np. dla tych trójkątów spróbuj sprawdzić wszystkie możliwe kombinacje długości boków (wszystkie dodatnie, nie spełniające warunku powstania trójkąta, wszystkie ujemne, itd.).
    Przy testowaniu programu warto zachować się jak "głupi" użytkownik, który np. nie ma pojęcia o trójkątach i ich polach.
  • #24
    Krzysztof Gustaw
    Level 23  
    Witam!
    Spróbuję może teraz wyjaśnić DOKŁADNIE działanie instrukcji switch w języku C i C++, bo widzą, że w postach nie jest to do końca wyjaśnione.
    Generalnie składnia instrukcji switch wygląda mniej więcej tak:
    (Tutaj do Moderatora: chodzi mi o wyjaśnienie samej idei więc poniższego tekstu nie umieściłem w SYNTAX ale, w przypadku odmiennego zdania, poprawię)
    switch (wyrażenie)
    {
    case STAŁA1: instrukcja 1;
    ....
    instrukcja n;
    break;
    case STAŁA2: instrukcja 1;
    ...
    instrukcja n;
    break;
    case STAŁAN; instrukcja 1;
    ...
    instrukcja n;
    break;
    // i opcjonalnie:
    default: instrukcja 1;
    ...
    instrukcja n;
    break;
    }

    Nadmieniam, że (wbrew przeróżnym publikacjom) instrukcja default NIE MUSI występować jako ostatnia, stąd umieszczenie w niej instrukcja break.

    case JAKAŚ_STAŁA stanowi punkt wejścia sterowania programu i wykonywanie tegoż będzie się odbywało do zamykajacego nawiasu klamrowego instrukcji switch (co często nie jest zamiarem programisty), chyba że sterowanie natrafi na instrukcję break albo którąś z odmian return. W przypadku break nastepuje natychmiastowe przerwanie wykonywania instrukcji switch a w przypadku return - natychmiastowe zakończenie wykonywania funkcji która zawiera tego switch-a i ewentualne zwrócenie wyniku. (patrz mój poprzedni post o funkcjach)
    Niestety, w instrukcji switch po case może wystąpić TYLKO stała albo wyrażenie stałe, zatem niedopuszczalna jest konstrukcja np:
    case x < y:
    P.S.
    A czy rozumiesz działanie instrukcji return, break, continue oraz (bezgranicznie nadużywalnej :)) instrukcji goto?
    A przeczytałeś i zrozumiałeś mój poprzedni post o tworzeniu i wykorzystaniu funkcji?
  • #25
    Zeusek97
    Level 11  
    Powiedzmy, że zrozumiałem ;] Wszędzie czytam, żeby nie używać funkcji goto, więc teraz pytanie: Jak wrócić do konkretnej flagi?

    PS> Właśnie pracuję nad nowym programikiem/gierka tak na rozgrzewkę :D
  • Helpful post
    #26
    Krzysztof Gustaw
    Level 23  
    Witam!
    Jednym z wielu rozwiązań jest stworzenie pętli w której umieszczasz instrukcje switch, powiedzmy:

    Code: c
    Log in, to see the code

    A'propos instrukcji goto są sytuacje w których ta instrukcja może się przydać np opuszczenie dwóch i więcej pętli lub/i instrukcji switch naraz. Instrukcja break powoduje opuszczenie tylko jednej, najciaśniej otaczającej ją pętli albo instrukcji switch.

    Jeśli się przypatrzeć kodowi źródłowemu jądra linuksa to tam aż roi się od goto bo ta instrukcja jest bardzo szybka. (Dijkstra chyba przewraca się w grobie...)

    Nie jestem w tej sprawie dogmatyczny ale uważam, że jeśli już trzeba użyć goto to powinna być używana oszczędnie, bo zaciemnia obraz programu zwłaszcza w połączeniu z wskaźnikami.
  • #27
    Zeusek97
    Level 11  
    Witam!

    Przedstawiam kolejne dzieło:D. Również na jadrze linuxa, ponieważ roi się od goto. Tym razem mini gierka symulująca zarządzanie wioską ;] Ciekawe, ze pisania kilka godzin a grania kilka minut :P Starałem się użyć poznane dotąd metody rozwiązywania problemów.

    Zadaniem gracza jest rozbudowa wioski w ciągu 19 lat. Spokojnie, gra nie jest w czasie rzeczywistym :D Ogranicza nas czas oraz punkty budowy. Głównym celem jest zadbanie o odpowiedni poziom: bezpieczeństwa, rzemiosła, ekonomi oraz zarządzania. Jeśli gracz odpowiednio wszystko rozwinie- WYGRYWA! Zapraszam do komentowania i poprawiania błędów (w moim przypadku raczej będzie ich bardzo dużo:D)

    Pamiętajcie by uruchomić "w pełnym oknie"!!!

    Code: cpp
    Log in, to see the code
  • #28
    przemko07
    Level 16  
    Przeszedłem !!!
    Jestem pod wrażeniem że zrobiłeś to bez funkcji. Wydaje mi się że ja nie miałbym tyle cierpliwości. Polecałbym Ci przerobienie tego z użyciem funkcji, wtedy będzie około 20x mniej linijek.
    a tutaj moje gry:


    Najlepiej rozegrana gra:
    Spoiler:
    1 1 1 1 1 1 1 1 1 1
    2 2 2 2 2 2 2 2 2 2
    4 4 4 4 4 4 4 4 4 4
    5 5 5 5 5 5 5 5 5 5
    6 6 6 6 6 6 6 6 6 6
    7 7 7 7 7 7 7 7 7 7
    8 8 8 8 8 8 8 8 8
    9 9 9 9 9 9 9 9 9 9
    10 10 10 10 10 10 10 10 10
    11 11 11 11 11 11 11 11 11 11
    12 12 12 12 12 12 12 12 12 12
    13 13 13 13 13
    14
    15 15 15 15 15 15 15 15 15 15
    16 16 16 16 16 16 16 16 16 16


    Najwięcej zdobytych punktów
    Spoiler:
    1 1 1 1 1 1 1 1 1 1
    2 2 2 2 2 2 2 2 2 2
    3 3 3 3
    5 5 5 5 5 5 5 5 5 5
    7 7 7 7 7 7 7 7 7 7
    8 8 8 8 8 8 8 8 8 8
    9 9 9 9 9 9 9 9 9 9
    10 10 10 10 10 10 10 10 10 10
    13 13 13 13 13 13 13 13 13 13
    14 14 14 14 14 14 14 14 14 14
    15 15 15 15 15 15 15 15 15 15
    16 16 16 16 16 16 16 16 16 16

    prawym na okno konsoli->edytuj->wklej

    edit:
    strategie wyliczyłem matematycznie, to tylko dla porównania :)
  • #29
    Zeusek97
    Level 11  
    Rozumiem, że przyjemnie się grało? ;]

    Faktycznie z punktami wy kozaczyłeś lepiej niż twórca :P Z ciekawości: ile razy grałeś?
  • Helpful post
    #30
    przemko07
    Level 16  
    Jak dopiszesz tam funkcjonalność typu
    b += 2 * kopalnia;
    to już nie będzie się dało tak łatwo wyznaczyć najlepszego rozwiązania tej gry.
    Używanie funkcji goto boli, naprawdę.
    Ilość rzeczy których musiałbyś nauczyć się aby posługiwać się biegle nie jest wcale taka duża.
    Ja nie znając wskazników, class i dynamicznego przydzielania pamięci napisałem sporo fajnych gier i programów w tym snake'a i tetrisa. a jak dorwiesz jakiś fajny kurs w którym nie owijają w bawełnę to w tydzień ogarniesz wszystko