• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porady dla nowicjusza w programowaniu w C++

Object Storage Arubacloud
+2 głosów
1,637 wizyt
pytanie zadane 6 sierpnia 2015 w C i C++ przez Jonki Dyskutant (8,180 p.)

Siemka. Chciałbym, aby ludzie ogarnięci w języku C++ dali mi jakieś rady i wskazówki na początek nauki programowania w C++. Chciałem uczyć sie już programowania z 2 lata temu, ale po kilku tutkach wydawało mi się to za trudne i dałem sobie spokój. Ale teraz chcę już na poważnie wrócić do tego i zacząć na prawdę kodować. Przez kilka dni oglądałem poradniki pana Mirosława na YT i dzisiaj napisałem swój pierwszy konkretny konsolowy program. Może nie konkretny, ale całkiem długi. Pisałem go prawie cały dzień i proszę, aby jakiś dobry koder sprawdził mój kod, zobaczył jakie błędy popełniam, dał jakieś wskazówki, coś poradził i zachęcił dobrym słowem do dalszej nauki.

Mój kod: http://wklej.org/id/1769200/

8 odpowiedzi

+1 głos
odpowiedź 6 sierpnia 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Jak na początek to długi programimik :D
Gratuluję wytrwałości i pomysłu :)
Jak na początek, to nie ma się czego czepiać, z czasem będziesz poznawał coraz nowe rzeczy, dzięki którym będziesz mógł "udoskonalić" działanie programu.
Oby tak dalej, klucz to własne projekty, plus poszerzanie wiedzy :)
komentarz 6 sierpnia 2015 przez Dragonet.17 Pasjonat (19,630 p.)
przywrócone 6 sierpnia 2015 przez Dragonet.17

WNIKLIWA ANALIZA:

Z góry zakładam,że nie zrobiłeś zabezpieczenia przed stringami :P ale nie jest to koniezne, natomiast jest to przydatna umiejetnosc :D
Dlaczego jak podam zle haslo to prosi mnie o imie i dopiero wykonuje prawidlowa instrukcje ?
Przy grach program sie troche miesza :D Czasem wraca do menu,np po wcisnieciuc info, a nie powinien:P 
Przy losowaniu, na koncu odpalil sie lotek :P
Jak na początek to doeceniam pomysł zamkniecia wszystkiego w pętli.
Rozwaliło mnie : Pomoc-> Nie pomagamy :D haha

cin >> ileliczb;
int liczby[ileliczb]; - tak sie nie deklaruje tablicy, robi się to  z użyciem wskaźników !

int *liczby
cin >> ileliczb;
liczby = new int[ileliczb];

tak utworzoną tablice musimy usunąć,po wykonaniu działań na niej: delete [] liczby;

Ze smutkiem stwierdzam,że nie ma inwestycji :D

 

komentarz 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
Dzięki za dobre słowa i obym nie spoczął na laurach.
komentarz 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
Niestety wskaźniki to dla mnie masakra jakaś. Spróbuję w dzień oglądnąć jeszcze raz tutka o wskaźnikach, to może uda się przyswoić jakieś przydatne informacje.
komentarz 6 sierpnia 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Wskaźnik to nic innego jak adres szufladki w ramie, służy po to aby szybciej można było oszukać zadeklarowaną wartość.
Jeżeli chodzi o kod, to trzeba zwrocić uwagę na kilka rzeczy i jest ok, proste, prawda ?
0 głosów
odpowiedź 6 sierpnia 2015 przez kacper6909 Gaduła (3,040 p.)

endl; radzę stosować na końcu np:
 

cout <<"COS TAM, COS TAM"<<jakas_zmienna<<endl;

I chyba dobrze taki program napisać obiektowo, no wiesz na kilka plików źródłowych, bo jak sam widzisz kod jest długi i mało "fajnie" czytelny. Radzę również stosować komentarze ;) Ogólnie to od c++ specjalistą nie jestem ale tyle mogę powiedzieć.

komentarz 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)

Boję się trochę brać za obiektówkę. Kiedyś jak oglądałem tutki pana Mirosława z obiektówki to była dla mnie czarna magia. Teraz jak wróciłem na poważnie do programowania, to obejrzałem tylko te poradniki od podstaw, obiektówki jeszcze nie oglądałem. Ale może teraz bym już ogarnął.  W koncu kiedyś to nawet nie dałbym w połowie rady napisać tekiego programiku jak ten co teraz napisałem. Dzięki.

A z tym 'endl' na końcu to jakaś większa różnica?

komentarz 6 sierpnia 2015 przez niezalogowany

W sumie z tym endl to nie ma żadnej różnicy, czy to będzie tak:

cout << "Siema Eniu";
cout << endl << "Dobly mudzin";

Czy tak:

cout << "Siema Eniu" << endl;
cout << "Dobly mudzin";

Ale drugi sposób jest częściej stosowany i lepiej nauczyć się dobrych nawyków, takich jak pisanie nazw klas z dużej litery (jeszcze się dużo nauczysz ;)). Jak się pracuje w grupie z innymi programistami, to lepiej, żeby twój kod był "normalny" ;) Ale nikt ci oczywiście nie zabrania tego robić, nic ci nie stoi na przeszkodzie, ale ja na forum widziałem gościa, który zawsze przed średnikiem robił spację, czyli takie coś:

cout << "Siema Eniu" << endl ; //<--- endl[spacja];

Według mnie okropnie to wygląda ;)

komentarz 16 sierpnia 2015 przez kacper6909 Gaduła (3,040 p.)
Z obiektowością nie jest tak źle ;) Sam trudziłem się nad konstruktorami, a pisząc mały programik wykorzystałem konstruktor i od razu wiedziałem o co w nich chodzi. Nie oglądaj filmików, tylko je wykorzystuj .
0 głosów
odpowiedź 6 sierpnia 2015 przez iwan9449 Pasjonat (20,810 p.)

Mógłbyś z każdej opcji menu zrobic oddzielną funkcję i zamiast stosowania:

if(wybor==1) {
...
}
if(wybor==2) {
...
}
itd

użyć switcha i wywołuwac w każdym case odpowiednią funkcję ;)

Ogólnie kod wygląda całkiem nieźle ;) Powodzenia w dalszej nauce!

Pozdrawiam!

komentarz 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)

Teraz poprzenosić tyle rzeczy do funkcji jest chyba niemożliwe, ale w kolejnych kodach tak właśnie będę robił. Może i dałbym zamiast if`ów switch`e, ale chciałem używać wszystkich poleceń jakich się nauczyłem. Dzięki.

0 głosów
odpowiedź 6 sierpnia 2015 przez Vodoo Dyskutant (9,270 p.)
Ulepszej ten program nowo zdobytą wiedzą. Proponuję zacząć od obsługi plików tekstowych, np. dane logowania zapisane w pliku. Edit: Nawiązując do kolegi wyżej, stosuj switch lub if, a potem same else if (dla zasady i porządku w kodzie) - jeśli chodzi o int to tylko switch. if (wybor == 123) { ... } else if (wybor == 543) { ... }
komentarz 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)

Właśnie boję się trochę brać za interakcje z plikami tekstowymi, ale będą musiał na dniach przełamać lody i w końcu to ogarnąć. A jak coś nie będę potrafił zrobić, to przyjdę tu prosić o pomoc. Dzięki.

0 głosów
odpowiedź 6 sierpnia 2015 przez gnx Dyskutant (7,720 p.)
Aby działał musiałem dopisać
#include <iostream>

Przy operacji dzielenia jeżeli za drugą liczbę wybiorę zero, to program się wysypuje.

Fajnie gdyby wybór opcji nie byłoby trzeba potwierdzać enterem :)

Powrót do menu głównego poprzez podanie pinu 0000 to trochę słabo.

"Wciśnij enter aby powrócić do głównego menu" nie działa.

Podanie błędnej liczby w LOTTO powinno skutkować ponowną możliwością jej wpisania, a nie powrotem do menu :)

Wejście w "Inwestycje" nie działa.

To tak co do samego chodzenia po programiku.
Co do kodu, to proponuje używać krótszych nazw zmiennych, bo zamęt jest.

Parę uwag na początek. Ogólnie to sprawia bardzo fajne wrażenie, trzymaj tak dalej! Czekam na kolejne programy :)
komentarz 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)

Dzięki. Jutro(znaczy dzisiaj) postaram się wnieść poprawki do tych rzeczy, które podałeś, tylko nie mam pomysłu na "Powrót do menu głównego poprzez podanie pinu 0000 to trochę słabo.". Jakbym się z tym przespał, to może coś bym wymyslił, ale dzisiaj nie mam czasu na spanie to troche lipa.

komentarz 6 sierpnia 2015 przez gnx Dyskutant (7,720 p.)
Nie ma sprawy :)

To może poprzez podanie pinu nie zawierającego żadnych znaków?
komentarz 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
edycja 6 sierpnia 2015 przez Jonki

Czyli, że użytkownik tylko naciska 'enter' i cofa go?

 

Jeśli dobrze kumam to coś na sposób:

if(PIN.length() == 0)
{
       system("cls");
       break;
}
komentarz 6 sierpnia 2015 przez Dragonet.17 Pasjonat (19,630 p.)
albo zwykłe wpisanie litery, nie musi byc koniecznie cyfra :P
komentarz 6 sierpnia 2015 przez gnx Dyskutant (7,720 p.)
Skoro PIN jest typu string, to możesz też dać if(PIN == "") Pamiętaj jednak, że zwykłe użycie cin zignoruje podanie pustego pinu. Użyj getline(cin, PIN); zamiast cin >> PIN;
komentarz 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
edycja 6 sierpnia 2015 przez Jonki
A jak teraz oceniasz mój kod?: http://wklej.org/id/1769883/

Poprawiłem wszystko co zgłosiłeś. Dodatkowo dodałem pobieranie PINu z pliku tekstowego i (chyba, jeśli dobrze kumam) dynamiczne alokowanie pamięci w tablicy.
komentarz 6 sierpnia 2015 przez gnx Dyskutant (7,720 p.)
Zmień typ wyników w kalkulatorze na float, bo nie pokazuje przecinków :)

Przy próbie logowania "Blad polaczenia z baza danych!"
komentarz 6 sierpnia 2015 przez gnx Dyskutant (7,720 p.)
Wystarczyło utworzyć obok plik piny.txt :) już działa.

Podanie błędnej liczby w LOTTO wciąż resetuje całe losowanie zamiast poprosić ponownie o tą konkretną liczbę. Poza tym jest postęp :D znacznie lepszy interfejs dzięki zmianom które wprowadziłeś.
0 głosów
odpowiedź 6 sierpnia 2015 przez Dorion300 Szeryf (90,250 p.)
"Boję się trochę brać za obiektówkę/operacje na plikach" Tak się nigdy nie nauczysz... Ucz się według różnych tutoriali i będzie dobrze.
0 głosów
odpowiedź 6 sierpnia 2015 przez Jonki Dyskutant (8,180 p.)
Poprawiłem mój kod: http://wklej.org/id/1769883/

Jakieś uwagi?
–1 głos
odpowiedź 6 sierpnia 2015 przez hit02 Nałogowiec (33,970 p.)
Moim zdaniem do nauki C++ i wielu innych języków powinno się podchodzić powoli.

Ogarnij porządnie funkcje (nie używaj na początku zmiennych globalnych), a jak będziesz się czuł w tym pewnie, to zajmij się programowaniem strukturalnym. Jak już będziesz się czuł pewnie w programowaniu strukturalnym, to dopiero wtedy zajmij się obiektówką. Zacznij wtedy najlepiej od poznania działania klas i napisania ich strukturalnie (nie wszystko się da, ale da się dużo). Dzięki temu zrozumiesz, jak one działają i będziesz czuł się pewnie używając ich.

Warto, abyś za każdym razem starał się dowiedzieć, jak coś działa. Oczywiście nie na początku, ale jak poznasz podstawy, to powinno dać radę. Nie możesz też się spieszyć z nauką. Za obiekty możesz się spokojnie wziąć po 1, 2 a nawet 3 latach nauki.

Oczywiście to tylko przykładowy schemat nauki. W moim przypadku się sprawdza, możliwe że ci pomoże, ale to już ty będziesz wiedział najlepiej.

Swoją drogą szkoda, że w filmach p. Mirosława nie ma mowy o strukturach. No chyba, że coś przegapiłem.

Podobne pytania

0 głosów
3 odpowiedzi 257 wizyt
pytanie zadane 13 grudnia 2018 w C i C++ przez Striker Ninja Początkujący (480 p.)
0 głosów
1 odpowiedź 455 wizyt
pytanie zadane 18 października 2015 w Inne języki przez weraxxa Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 184 wizyt
pytanie zadane 12 sierpnia 2015 w PHP przez Tomasz Górnicki Nowicjusz (160 p.)

92,658 zapytań

141,552 odpowiedzi

319,991 komentarzy

62,027 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...