Zaloguj się, aby obserwować  
UthersonL

Programowanie - pytania, problemy, przykłady programów

1812 postów w tym temacie

Dnia 10.01.2014 o 20:20, eNcore napisał:

Python jest fajnym wyborem według mnie - uczy dobrych praktyk (wcięcia! :D)


Akurat też kiedyś myślałem, że wcięcia to fajna sprawa, ale od kiedy odkryłem, że w IDE może być wbudowany autoformater kodu, który sam potrafi ci ładnie sformatować kod z jednolinijkowego bełkotu, to stwierdzam, że to tak naprawdę upierdliwość zaciemniająca składnię.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 10.01.2014 o 20:07, Ventil napisał:

Wielkie dzięki. Na taką odpowiedź czekałem :)

W takim razie zastanowię się nad Pythonem albo Javą. Czytałem, że C# przyzwyczaja człowieka
do złych nawyków, które nie sprawdzają się w C++. To prawda?


Można tak powiedzieć. C# przyzwyczaja cię do nawyków które nie sprawdzają się w C++. Podobnie Java. I każdy inny język programowania. I jest to zjawisko normalne i logiczne.

Przykładowo:
Masz mikrofalówkę, piekarnik i patelnię. Na każdym z nich możesz sobie przygotować coś do jedzenia. Czy w każdym przypadku postępujesz tak samo? Nie bo to bzdura. Tak samo jest w językach programowania.

(uwaga - w poniższym wywodzie mogą być nieścisłości!)
C powstał z myślą o tworzeniu w nim systemów operacyjnych. C++ rozszerza go o możliwość programowania obiektowego i (od bardzo niedawna) generycznego. Ale nadal jego ''esencją'' jest możliwość bezpośredniej interakcji z komponentami komputera, priorytetem jest wydajność kodu a nie wygoda programisty.

C# powstał z myślą o tworzeniu graficznych aplikacji pod systemami Windows.
Java w sumie też choć tutaj celem było zapewnienie możliwie identycznego kodu i wyglądu aplikacji pod wieloma systemami operacyjnymi. Są to języki nieco wolniejsze od C++, za to o wiele bardziej praktyczne w typowych zastosowaniach - nie potrzebujesz żadnych dodatków by np. stworzyć sobie takie coś:
http://puu.sh/5OvX9 (moja własna aplikacja, pisana w C++. Do działania wymaga 35 mb plików dll a do jej napisania musiałem używać 1.5GB frameworka)

Python powstał z myślą o klarownym i czytelnym kodzie aby znacząco przyspieszyć tempo produkcji aplikacji. Nie jest nastawiony na maksymalną wydajność i niskopoziomowe rozwiązania, dlatego jest tak dobrym językiem dla początkujących. Ciebie nie interesują wtedy trzewia tego języka i jak coś jest rozwiązane, ty chcesz szybko widzieć rezultat swojego kodowania. Dobry język by przeskoczyć z niego do C#/C++/Javy w przyszłości (i odwrotnie).

Ruby zostało zaprojektowane w celu "sprawienia by programowanie było dobrą zabawą" i by było wiele możliwości wykonania tego samego zadania. Dlatego jeśli tylko zechcesz to możesz sprawić by znak plus odejmował a minus dodawał. Bo czemu by nie. Podobnie jak Python nie jest najważniejsza w nim wydajność, za to liczy się to by w jak najmniejszej ilości linii kodu mógł zrobić jak najwięcej. Ma kilka elementów dość unikatowych dla tego języka których w większości zdecydowanie nie uświadczysz (np. dość unikatowe bloki).

I tak dalej. Każdy język uczy cię "złych" nawyków które nie pasują do innego bo w końcu stworzono je z innego powodu i do innych zastosowań.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jeśli zdecydujesz się na naukę Pythona - od siebie mogę polecić codeacademy.com, nawet jeśli niektóre z ćwiczeń są nieco błędnie wykonane. Tak długo, jak wpadniesz w dobry rytm nauki, ewentualne problemy zaczniesz zauważać samemu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 10.01.2014 o 23:30, ww3pl napisał:

Jeśli zdecydujesz się na naukę Pythona - od siebie mogę polecić codeacademy.com,
nawet jeśli niektóre z ćwiczeń są nieco błędnie wykonane. Tak długo, jak wpadniesz w
dobry rytm nauki, ewentualne problemy zaczniesz zauważać samemu.

Ćwiczenia tam się tak wloką z pythona, że masakra xD. Siostra się uczyła pythona z tego. No i zrobiła, to ale powiem ci, że kurs jest rozwleczony. Pierwsze kilka tematów można streścić w 15 minut. W każdym bądź razie przy tak wolnym tempie widziałem, że siostra po połowie tego kursu miała jeszcze problemy z poprawną składnią. Plus czasami ćwiczenia są nie zrozumiałe dla kogoś, kto nie programował. A kto już pisał w czym ktokolwiek, to się zniechęci. W każdym bądź razie poświęciłem siostrze 10 minut i się nauczyła więcej niż z tego kursu. Nie mówię, że kursy są złe. Robię też na udacity tylko nie polecam przynajmniej pierwszej połowy tamtego kursu. W każdym bądź razie najlepsze, to napisanie czeogoś dużego w języku i przy okazji uczenie się składni. Jest to uczenie typu hard-way, ale dużo zostaje w pamięci.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 11.01.2014 o 02:12, qwerty5712 napisał:

Ćwiczenia tam się tak wloką z pythona, że masakra xD. Siostra się uczyła pythona z tego.
No i zrobiła, to ale powiem ci, że kurs jest rozwleczony. Pierwsze kilka tematów można
streścić w 15 minut. W każdym bądź razie przy tak wolnym tempie widziałem, że siostra
po połowie tego kursu miała jeszcze problemy z poprawną składnią.

Uważnie czytałem wszystkie opisy, z podpowiedzi korzystałem tylko w ostateczności i, póki co, żadnych problemów ze składnią nie widać. Albo zaktualizowali kurs, albo Twoja siostra bardzo się spieszyła.

Codeacademy daje radę jeśli chodzi o powolne pobudzanie w Tobie odpowiedniego myślenia, za co moooocno mi się spodobał.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 10.01.2014 o 20:33, kuba9876543210 napisał:

Po co chcesz sie nauczyc programowac i czego pisanie ew. by Cie interesowalo?


Jeszcze chwila i czekają mnie studia. Ciągnie mnie do game devu, więc prędzej czy później czeka mnie spotkanie z programowaniem. Wolałbym już teraz zacząć przy czymś grzebać, żeby wyrobić sobie trochę umiejętności i ewentualnie zacząć pisać jakieś mniejsze gry.

Dnia 10.01.2014 o 20:33, kuba9876543210 napisał:

Tak jak wyzej tez polecilbym Pythona, duzo ma juz wbudowane w standardowej bibliotece,
(zazwyczaj) nie wymaga tez przejmowania sie niskopoziomowymi szczegolami.


Właśnie na tym by mi zależało na samym początku. Wizja grzebania przy bibliotekach i innych cudach do C++ mnie z lekka przerażała.

@ziptofaf - dzięki wielkie, teraz rozumiem. Po prostu nie znam się na tym :)

@ww3pl - na pewno sprawdzę, dzięki :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 11.01.2014 o 12:43, Ventil napisał:

Jeszcze chwila i czekają mnie studia. Ciągnie mnie do game devu, więc prędzej czy później
czeka mnie spotkanie z programowaniem. Wolałbym już teraz zacząć przy czymś grzebać,
żeby wyrobić sobie trochę umiejętności i ewentualnie zacząć pisać jakieś mniejsze gry.

Na studiach przerobisz prawdopodobnie absolutne podstawy C. Potem to już zależy od konkretnej uczelni - u mnie była potem w zasadzie dowolność bo sprawdzili co zaprogramowałeś i czy to działa a nie w czym to było napisane.
Ale tak prawdę mówiąc to to co jest na uczelniach ciężko nazwać prawdziwym programowaniem które ma jakiś sens i rozwiązuje jakieś realnie istniejące problemy, czasem tylko niektóre algorytmy są przydatne. Częściej jest to taka sztuka dla sztuki której zastosowania nie uświadczysz w prawdziwym życiu. Na jednym game jamie to ja się nauczyłem o programowaniu więcej niż przez 3 lata studiów...

Dnia 11.01.2014 o 12:43, Ventil napisał:

Właśnie na tym by mi zależało na samym początku. Wizja grzebania przy bibliotekach i
innych cudach do C++ mnie z lekka przerażała.

W bibliotekach i tak będziesz wcześniej czy później grzebał bo nie ma po co wymyślać koła na nowo i jeśli jakaś rozwiązuje ci dręczący ci problem to jak najbardziej warto z niej skorzystać - lepiej się nauczyć jakiejś biblioteki w 1-2 dni aniżeli spędzić 2 tygodnie pisząc coś co robi to samo. Po prostu w przypadku nowszych języków więcej rzeczy można zrobić od razu, bez wspierania się nimi do wielu podstawowych kwestii (co w C++ niestety zdarza się nagminnie).

W Pythonie gry się robić da, tyle powiem ;p Jak kojarzę to jest np. takie coś jak RenPy - gotowy silnik do tworzenia gier typu visual novel napisany właśnie w Pythonie. Albo po prostu odwiedź:
http://www.pygame.org/tags/2d
Cała wielka stronka pełna gier zrobionych w Pythonie, każda ma też możliwy do pobrania kod źródłowy. Więc jak widać - da się i to z niezłymi skutkami patrząc na setki pozycji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dnia 11.01.2014 o 10:57, ww3pl napisał:

Uważnie czytałem wszystkie opisy, z podpowiedzi korzystałem tylko w ostateczności i,
póki co, żadnych problemów ze składnią nie widać. Albo zaktualizowali kurs, albo Twoja
siostra bardzo się spieszyła.

Kilka dni to robiła. Możliwe, że coś źle zrozumiała albo zapomniała przez to tempo nie wiem ciężko mi stwierdzić.
W każdym bądź razie jeśli, to pierwszy język, to może być. Jak ktoś umie programować w czymkolwiek, to odradzam.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mi kurs z Pythonem z tej strony, jako pierwszy język, zajął kilka ładnych tygodni (3-4). Choć fakt-faktem przykładałem dużą uwagę do tego, by wszystko robić samemu, nie pomijać niczego i nie wstydzić się wracać do czegoś z wcześniejszych lekcji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jak wygląda sprawa kombatybilności starych programów w javie i ich kodów źródłowych? Czy bardzo dobra książka do Javy dla amatora naprawdę tak bardzo się zestarzała, jeśli napisano ją za czasów XP :P?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.01.2014 o 17:08, Raj napisał:

p[ i]=(zdanie).at(i);

Co robi tutaj to .at ?


Czasami można się tak się dostać do odpowiednich wartości w jakiejś kolekcji (na przykład liście). Zazwyczaj jest to to samo co operator wyłuskania .

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.01.2014 o 17:30, Raj napisał:

A napisałbyś konkretniej, co robi w tym programie? :) c++

http://wklej.org/id/1234935/


Pobiera kolejne znaki ze zmiennej zdanie (będącej Stringiem) i zapisuje je do tablicy charów (tablica czarów - taki informatyczny żart). Znaki po znaku - pierwszy znak ze zmiennej zdanie jako pierwszy element tablicy "p" i tak dalej.

Myślę, że jak by to w pętli for zamienić na
p[index]=zdanie[index];
to też by działało i było dokładnie to samo.

Sorry, "i" w nawiasach kwadratowych spowodował rozjechanie.

W ogóle dziwny ten kod - default na początku switcha? No tego to jeszcze nie grali. Ciekawe, czy to działa w ogóle.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki za odpowiedź. Działać, jakoś działa. :P
Gdybyś miał czas to mógłbyś napisać czemu używamy tutaj getline(zamist cin. chyba dlatego, że to tablica?) oraz char *p=new char[dlugosc]? Wiem, że to wskaźniki.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 13.01.2014 o 17:53, Raj napisał:

Dzięki za odpowiedź. Działać, jakoś działa. :P
Gdybyś miał czas to mógłbyś napisać czemu używamy tutaj getline(zamist cin. chyba dlatego,
że to tablica?) oraz char *p=new char[dlugosc]? Wiem, że to wskaźniki.



getline używamy (ktoś używa, nie wiem, kto to pisał) dlatego, że pobiera całą linię (do wystąpienia znaczka "\n", który zazwyczaj jest dostawiany w momencie wciśnięcia ENTER) a cin pobiera tylko do pierwszego białego znaku, czyli najczęściej spacji. Dlatego jak wpiszesz "Ala ma kota" to cin Ci pobierze tylko samo "Ala" a reszta zostanie w buforze. A zostanie w buforze oznacza z kolei, że jeśli znowu coś wpiszesz z konsoli ("tekst") i wywołasz cin to nie zostanie wczytany "tekst" tylko (niespodzianka) "ma" (które zostało w buforze).

Jeśli słyszysz o tym pierwszy raz to być może brzmi zawile, ale stoi za tym logika :P

char *p=new char[dlugosc]

Tego używasz, żeby stworzyć tablicę dynamiczną czyli tablicę o nieokreślonym z góry rozmiarze (bo na przykład rozmiar wczytujesz z linii poleceń albo określasz go na podstawie długości tego co zostało wczytane, co mniej więcej ma miejsce w tym przykładzie).

Bo (i to jest jeden z ważniejszych konceptów całego C++) zmienna tablicowa (czyli na przykład int[]) jest tak naprawdę wskaźnikiem na pierwszy element tej tablicy. A każde przejście do następnego elementu to przesunięcie tego wskaźnika w pamięci o rozmiar pojedynczego elementu. Czyli po zrobieniu:

int * tablica = new int[10];

zarówno:

*(tablica + 2)

jak i:
tablica[2]

oznaczają dokładnie to samo - 3 element tablicy (skoro indeksujemy od zera).

Ja to może trochę siermiężnie tłumaczę, ale warto, żebyś sobie obczaił cały ten koncept (na wiki jest o tablicach dynamicznych sporo). Bo wskaźniki w C++ potrafią być upierdliwe, więc także rzeczy trzeba dobrze rozumieć :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam w OpenGL zrobić zegarek, który będzie się aktualizował co sekundę. Zastanawiam się, czy mogę zrobić(tarczę i wskazówki) w np. photoshop/gimp i zaprogramować, czy muszę bawić się w programowanie(rysunku)?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam mały problem. Robię listę dwukierunkową i zostało mi tylko usuwanie elementów z końca. Niestety z jakiegoś powodu wskaźniki których używałem w programie wielokrotnie przestał być nagle widoczny dla programu. Chodzi o wskaźniki ze struktury a usuwanie które nie działa jest w "case 4". W drugiej linijce else''a nagle code blocks przestał widzieć moją strukturę ale co ciekawe tylko w nowych miejscach. Jeśli do tego czasu oba wskaźniki były już użyte to działają. Ktoś wie o co może chodzić?

Edit: zapomniałem dodać linku do kodu :P http://pastebin.com/q4d0tDDH

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować