Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Programowanie, algorytmy, logika

Siemka :)

Wpis jest skierowany do osób zaczynających swoją przygodę z programowaniem, które 'zacięły się' pisząc swój pierwszy poważniejszy program. Na potrzeby wpisu założyłem, że chodzi o grę.

1. Mały wstęp

Chciałbyś pewnie pisać gry :) Ok, co robisz? Sięgasz po książkę o C++, czytasz kurs online czy też uczysz się z innych źródeł. Problem jest taki, że gdy po skończonej lekturze robisz sobie kawę i siadasz wieczorem przed komputerem by napisać 'Kółko i krzyżyk', kończysz gapiąc się nieprzytomnym wzrokiem w monitor przez kilka godzin, gdyż, mimo, że znasz język (najpewniej C++), zupełnie nie wiesz jak się do tego zabrać.
Możliwe też, że już napisałeś kawałek kodu, ale masz problem natury czysto logicznej i nie masz pojęcia jak zmusić węża do chodzenia w twoim nowym Snake'u ;) Jeśli tak przygotowałem ten wpis (lub serię, zależy jak mi wyjdzie ;) ) specjalnie dla ciebie.

2. Algorytmy

Wszystko co programujesz ma charakter czysto matematyczny, nieważne co - komputer nie rozumie naszego abstrakcyjnego języka i potrzebuje dokładnych instrukcji w jego logicznym (ale to pewnie wiesz), ok musiałem tylko przypomnieć ci teorię :P Problem leży w tym, że większość źródeł dotyczących programowania uczy posługiwania się językiem a nie jego umiejętnego wykorzystania. Przykładowo - mamy planszę do kółka i krzyżyka 3x3, i teraz, jak sprawdzić, nad którym polem znajduje się myszka w chwili kliknięcia? Oczywiście można pisać// pseudokod: // 80 - długość boku jednego pola jeżeli kursor_x < 80 wtedy współrzędna_x = 0 jeśli nie: jeżeli kursor_x > 80 i kursor_x < 160 wtedy współrzędna_x = 1 jeśli nie: współrzędna_x = 2 i tak samo dla kursor_y. Tak zrobiło to kilku moich znajomych, którym dałem to zadanie Ok, wszystko działa, więc o co chodzi? Dajmy na to, że chcesz rozbudować swoją grę tak by plansza miała szerokość 40 pól w każdym kierunku, na pewno teraz bardzo chce ci się pisać 'jeżeli' prawda? ;)
A nie prościej:// pseudokod: x = 0 powtórz nieskończoność ( jeżeli kursor_x < (x * 80) i kursor_x > ((x * 80) - 80) wtedy współrzędna_x = x i przerwij pętlę x = x + 1 ) oraz tak samo dla y. Teraz niezależnie od tego ile pól masz, komputer i tak obliczy ci poprawnie w którym polu masz kursor i wstawi tam znak :) Proste? To właśnie jest algorytm. Do dobrego programowania, potrzeba dwóch rzeczy - języka (który zakładam już umiesz) oraz właśnie umiejętności tworzenia, wydajnych, przejrzystych algorytmów i wbrew pozorom to właśnie ta druga rzecz jest ważniejsza.

3. Dalej mi nie idzie, co jest?

No, raczej, bo żebyś tak po prostu po przeczytaniu tego wpisu napisał jakąś super złożoną grę RPG byłbyś geniuszem ;) Proponuję wpisać w Google "zadania logiczne" i spróbować rozwiązywać je pisząc na kartce pseudokody (takie jak moje), do skutku :) Z czasem każdy nabierze wprawy :)

Pozdrawiam, i mam nadzieję, że wpis się przydał :)
Jak zwykle jeśli ktoś ma jakieś sugestie co dodać, zmienić niech pisze ;) 

Komentarze

0 nowych
XeonBloomfield   5 #1 30.04.2011 19:21

Nauczyć się języka programowanie nie równa się z tym, że umiesz się nim posługiwać... Pięknie przytoczony przykład w pierwszym punkcie...

"Każdy dobry programista myśli logicznie." i ten cytat należy sobie zapamiętać...

kuba144   5 #2 30.04.2011 19:57

Ja do poćwiczenia algorytmów polecam pl.spoj.pl, gdzie jest masa zadań pogrupowana na poziomy trudności, żeby też nikogo nie zniechęcić :)

wszerad   5 #3 30.04.2011 20:04

Sam po sobie widzę jak zmienia się mój "styl pisma" wracam do skryptu po miesiącu lub dwóch i okazuje się, że teraz zupełnie inaczej rozwiązał bym problem.

Co do przykładu to chyba nie wpadł bym, żeby rozwiązać to tak jak twoi kumple (to tak jak by ręcznie do kodu wbijać x razy "Hello World" zamiast umieścić to w pętli) ale zrobił bym to inaczej x = floor(kursor_x/80)

WOJEK64   5 #4 30.04.2011 20:18

@wszerad
Niestety moi kumple są bardziej polonistami niż matematykami :P I fakt, masz rację tak jak napisałeś jest o wiele prościej, chyba sam muszę trochę potrenować i przypomnieć sobie co nie co ;)

Jaahquubel_   12 #5 30.04.2011 23:43

"problem leży w tym, że większość źródeł dotyczących programowania uczy posługiwania się językiem a nie jego umiejętnego wykorzystania."
Ano właśnie. Do tego, najchętniej napisalibyśmy coś, co ma GUI. A robienia GUI nie uczą w kursach pisania "Hello world".

Jaahquubel_   12 #6 30.04.2011 23:49

"jak sprawdzić nad, którym"
Nie oddziela się przecinkiem słowa "którym" (ani jego krewnych, jak "który", "której") od poprzedzającego go słowa, idącego z nim w logicznej parze (ani słów w większej logicznej grupie), tutaj: "nad". Jeśli już, to "jak sprawdzić, nad którym".

WOJEK64   5 #7 01.05.2011 00:04

Hehe, polonista :P Już poprawiam :)
A jeśli jesteś zainteresowany kursem do GUI to polecam:
WinAPI: http://darkcult.nazwa.pl/wiki/index.php/WinAPI
Qt: http://blog.matthew.org.pl/kategoria/programowanie/qt/kurs-qt/

kubut   17 #8 01.05.2011 02:24

Skoro poruszyłeś już tę tematykę, powinieneś opisać obszerny wpis o budowaniu algorytmów, z wytłumaczeniem czym są i jak powinny być budowane. Wątpię, żeby ktoś na podstawie tego przykładu zrozumiał jak budować algorytmy. Dowie się tylko, że tak jest łatwiej, ale dalej nie za bardzo będzie wiedział co to, a już na 99% nie będzie wiedział jak. Spróbuj pokazać jak "myśli" komputer, rozbijać problem na malutkie instrukcje :)

WOJEK64   5 #9 01.05.2011 14:20

@kubut
Programowaniem zajmuję się całkowicie amatorsko, opisałem tu to przez co sam kiedyś przechodziłem :P Z tymi algorytmami mam tak jak jak małe dziecko ze swoim ojczystym językiem - potrafi się nim w miarę posługiwać, ale nie zna jeszcze zasad gramatyki. Jak się trochę doszkolę, to niewykluczone, że napiszę taki wpis, ale na obecny poziom mojej wiedzy jest to raczej ciężkie zadanie.

  #10 01.05.2011 19:57

Wszystko fajnie, ale w tym przypadku Twoi "humanistyczni" koledzy mieli rację.
Dałeś im za cel napisanie kodu dla planszy 3x3. Zauważ ile więcej czasu zajęło Ci skonstruowanie tego "mądrzejszego" rozwiązania w porównaniu z tym prostym. 500% conajmniej + dodatkowe koszty wynikające ze skomplikowania kodu. I po co to wszystko? Cel osiągnąłbyś także "prostym" rozwiązaniem, więc dodatkowy trud jest całkowicie zbędny.

Co innego oczywiście gdybyś zlecił im zadanie "zrób to dla planszy 3x3, mając na uwadze rozwój planszy (w przyszłości) do wymiarów nxn". Wtedy ok, Twoje rozwiązanie jest lepsze.

Podsumowując, pisz tak prosto, jak się tylko da. Nie komplikuj niepotrzebnie życia sobie i innym. Bo dla nikogo (Ciebie, pracodawców itp) nie jest to opłacalne.

Greetz!! :)

WOJEK64   5 #11 02.05.2011 13:37

@Spajdermen
Co do pytania, to masz rację źle je zadałem.
Ale:
"pisz tak prosto jak się tylko da" - tu się nie zgodzę, a przynajmniej częściowo, pisać powinno się mając na uwadze ewentualne zmiany/ulepszenia jakie można by kiedyś wprowadzić. Dzięki temu można potem użyć tej samej/lekko przerobionej funkcji zamiast pisać ją od nowa, fakt, że jeśli się pracuje jako część zespołu często są one (zmiany) nieprzewidywalne i lepiej robić tak jak mówisz, ale nie w przypadku własnych projektów.

kubut   17 #12 02.05.2011 13:38

@UP - nie zgodzę się. Kod zawsze powinno pisać się pod kątem możliwej rozbudowy. O ile tutaj zmiana prostego rozwiązanie na pętle w razie potrzeby to byłaby zaledwie chwila, ale przy bardziej rozbudowanych projektach miałbyś tydzień w plecy.