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

Ocena projektu poczatkujacego w C++ [ankieta]

Object Storage Arubacloud
0 głosów
275 wizyt
pytanie zadane 17 lipca 2019 w C i C++ przez resteqs Początkujący (260 p.)

(Przepraszam za brak polskich zakow)

Witam,

napisalem moim zdaniem ciekawy projekt inspirowany zadaniem Mirka z kursu C++ (odcinek 4)

Projekt ma na celu sprawdzic moje mozliwosci. Postaralem sie uzyc wszystkiego co juz umiem. Czy moglbys poprawic Code . Powiedziec jak go poprawic lub co mazna bylo by napisac inaczej lub podsunac mi pomysl na uzupelnienie programu.

Dzieki za kazda sugestie i pomoc :)

#include <iostream>
#include <unistd.h>
#include <time.h>
#include <stdio.h>
using namespace std;
string start_komenda="start"; string start_wpisane; int liczba;
string odpowiedz;int matematyka;int proby=0; int strzal;
int main()
{
    cout << "Witamy w naszej grze!" << endl;
    cout << "Wpisz start aby rozpoczac!" << endl;
    cin >> start_wpisane;

if (start_komenda==start_wpisane)
{
cout << "Zaczynamy"<<endl<<endl<<endl;
}
else
{cout << "Zla komenda! Auto-Start za 30s"<<endl;
sleep(1);
for (int i=29; i>=0; i--)
    {
    sleep(1); system("clear");
    cout << i << endl;
    }
}
    cout <<"Pomyslalem sobie liczbe od 1..1000" << endl;
    cout <<"Zgadnij co to za liczba :) Oto kilka podpowiedzi" << endl;
    srand(time(NULL));
    liczba=rand()%1000+1;

if (liczba>=500)
{cout<<"Liczba jest wieksza od 500"<< endl;

}
else
{
cout << "Liczba jest mniejsza niz 500" << endl;
}
if (liczba%2 != 1)
{cout << "Liczba jest podzielna przez 2" << endl;
}
else
{
cout << "Liczba nie jest podzielna przez 2" << endl<<endl;
}

cout<<"Lubisz Matematyke? (tak/nie)";
cin >> odpowiedz;
if(odpowiedz=="tak")
    {
    matematyka = 87*liczba-58;
    cout << "Jesli pomnozysz te liczbe przez 87 i odejmiesz 58 to wynik bedzie rowny "<<matematyka<< endl;
    }


else
{ cout << "Szkoda :( ";
}

while(strzal!=liczba)
    {
    proby++;
    cout<<"( "<<proby<< ". Proba )Ok to jaka to liczba: ";
    cin >> strzal;
    if(strzal==liczba)
    cout<<"Wygrales w"<<proby<<" probie! :D"<<endl;
    if(strzal<liczba)
    cout<<"to za malo"<<endl;
    if(strzal>liczba)
    cout<<"To za duzo"<<endl;
    }


getchar();getchar();




    return 0;
}

 

Możliwe odpowiedzi:
ciekawy projekt (0 głosów)
jako tako (6 głosów, 100%)
beznadzieja (0 głosów)
Nie mam zdania (0 głosów)
komentarz 17 lipca 2019 przez tkz Nałogowiec (42,000 p.)
Masa złych praktyk. Globalna przestrzeń nazw, polskie nazwy, formatowanie, brak podziału na funkcję, "srand", globalne nazwy, brak przenośności programu.
komentarz 17 lipca 2019 przez resteqs Początkujący (260 p.)
Hej dzieki za odpowiedziec. Moglbys bardziej objasnic o co ci chodzi :)
komentarz 17 lipca 2019 przez tkz Nałogowiec (42,000 p.)
A czego nie rozumiesz?
komentarz 17 lipca 2019 przez resteqs Początkujący (260 p.)
Co masz namysli przez Globalna przestrzen nazw. Co jest w zlego w polskich nazwach i co to brak przenośności programu?

(Programuje od okolo 1 tygodnia i  zalezy mi na dokladniej odpowiedzi abym mogl sie poprawic i uczyc prawdilowo )
komentarz 17 lipca 2019 przez tkz Nałogowiec (42,000 p.)

Czym dokładniejsze pytanie zadajesz, tym lepszą odpowiedź uzyskasz. 

Rozważ to: używasz dwóch bibliotek o nazwie Foo i Bar: 

using namespace foo;
using namespace bar;

Obie biblioteki mają funkcję "podziel", foo::podziel i bar::podziel. Skąd kompilator ma wiedzieć o jaką funkcję Ci chodzi? Rozumiesz? 

Polskie nazwy, niby nic, ale utarło się, że zapisujemy nazwy w języku angielskim. Pomaga to innym czytać Twoj program.

Przenośność, naprzykład używam linuxa i nie odpalę tego programu. 

1
komentarz 17 lipca 2019 przez resteqs Początkujący (260 p.)
edycja 17 lipca 2019 przez resteqs
Program jest Pisany na linuxowym raspberry Pi, czemu wiec nie mozesz go otworzyc?
1
komentarz 17 lipca 2019 przez adrian17 Ekspert (344,860 p.)

Przenośność, naprzykład używam linuxa i nie odpalę tego programu. 

Nie pomyliłeś z Windowsem? W Visual Studio by się nie skompilował.

komentarz 17 lipca 2019 przez tkz Nałogowiec (42,000 p.)
Przejęzyczanie, wybacz, Windows, przez to #include <unistd.h>, jest to POSIXa biblioteka C.
komentarz 17 lipca 2019 przez tkz Nałogowiec (42,000 p.)

@adrian17, Już poprawiłem.

1 odpowiedź

+1 głos
odpowiedź 17 lipca 2019 przez DeBos123 Nałogowiec (44,950 p.)

W swoim kodzie powinieneś poprawić wiele rzeczy:

  1. Formatowanie kodu, czyli białe znaki.
  2. Nazwy zmiennych powinny być w języku angielskim.
  3. Nie powinieneś używać using namespace std.
  4. Zmienne powinny zostać zdefiniowane w funkcji main.
  5. Powinieneś używać bibliotek C++'a, czyli np. zamiast time.h powinno być ctime i analogicznie dla reszty.

IMO powinieneś tam jeszcze dodać więcej losowości, czyli np. to działanie matematyczne mogłoby być za każdym razem inne.

komentarz 17 lipca 2019 przez resteqs Początkujący (260 p.)
Dzieki za pomysl.

Na jakiej zasadzie mam poprawic biale znaki

2. OK

3. Korzystam z Codeblocksa i to jest tam napisane wiec zostawilem ( Co to jest ? :) )

4. OK

5. Ok. Uzylem tych samych co miroslaw zelent w odcinku , Ale postram sie korzystac z bibliotek c++
komentarz 17 lipca 2019 przez DeBos123 Nałogowiec (44,950 p.)

Na jakiej zasadzie mam poprawic biale znaki

  1. Linia 16: Brak spacji/tab'ów.
  2. Linia 19: Brak enter'a.
  3. Linie 19-21: Brak spacji/tab'ów.
  4. Linie 23-24: Brak spacji/tab'ów.

Mógłbym tak jeszcze dużo wymieniać.

3. Korzystam z Codeblocksa i to jest tam napisane wiec zostawilem ( Co to jest ? :) )

Będziesz mógł używać wszystkich funkcji z namespace'a std bez użycia prefix'u, czyli jeżeli masz w kodzie using namespace std to możesz pisać cout i cin, jeżeli tego byś nie miał musiałbyś zapisać std::cout oraz std::cin, ponieważ kompilator nie wiedziałby inaczej o istnieniu owych funkcji.

Używanie tego jest złą praktyką, ponieważ może dojść do konfliktu nazw przy większej ilości bibliotek, które mogłyby mieć funkcje o tej samej nazwie.

Dla przykładu jeżeli posiadałbyś 2 biblioteki: A oraz B i dodał w kodzie using namespace A oraz using namespace B doszłoby do konfliktu nazw jeżeli obie biblioteki definiowałyby funkcję C. Jeżeli jednak nie dodawał tego w kodzie, mógłbyś się odwołać do obu funkcji: A::C oraz B::C.

5. Ok. Uzylem tych samych co miroslaw zelent w odcinku , Ale postram sie korzystac z bibliotek c++

Tutaj nie jestem pewien dlaczego Pan Mirosław Zelent użył tego w swoim kodzie, ale może chodziło o ułatwienie pisania kodu osobom, które pisały wcześniej w C, ale jest to uznawane za złą praktykę. 

1
komentarz 17 lipca 2019 przez tkz Nałogowiec (42,000 p.)

Co do 5, to jest std::chrono.

 

Przestrzeń nazw jest zatem zbiorem obiektów, która ogranicza dostęp do nich - oprócz nazwy obiektu niezbędne jest też wspomnienie, z której przestrzeni nazw chcemy go użyć, obchodząc tym samym problem konfliktu nazw

https://pl.wikibooks.org/wiki/C%2B%2B/Przestrzenie_nazw

komentarz 17 lipca 2019 przez resteqs Początkujący (260 p.)
Dziekuje za pomoc. Postaram sie poprawic moj Code i przesle go jeszcze raz.

Podobne pytania

0 głosów
2 odpowiedzi 239 wizyt
pytanie zadane 18 lipca 2019 w C i C++ przez resteqs Początkujący (260 p.)
+1 głos
3 odpowiedzi 1,238 wizyt
+11 głosów
7 odpowiedzi 652 wizyt
pytanie zadane 30 marca 2019 w Nasze projekty przez kondzio18 Początkujący (380 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...