Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
@tajwan:
Do wyszukiwania takich błędów bardzo pomocny jest debugger, krokowe wykonywanie programu i podglądanie zmiennych.
Offline
[quote=uzytkownikubunt]Dlaczego w tym programie lepiej użyć zmiennych lokalnych zamiast globalnych? Chodzi o nawyk. Skoro się uczyć powinieneś uczyć się dobrych nawyków.[/quote]
Używanie zmiennych globalnych nie jest błędem ani niczym złym (co innego nadużywanie).
Kiedyś gdy próbowałem się uczyć C, właśnie przez takie porady dawane początkującym wpakowałem się w niezłe kłopoty. Używanie zmiennych globalnych traktowałem jako zło, unikałem ich gdzie się tylko dało. Próbowałem je zastąpić je wskaźnikami, dwie czy trzy gwiazdki nie były w moim programie czymś wyjątkowym. A że trochę za mało wiedziałem o ich zasięgu, to program działał lub nie w zależności od tego jakich flag optymalizacyjnych użyłem ;).
Wystarczy otworzyć plik źródłowy jakiegoś programu i o dziwo ujrzysz tam zmienne globalne.
A w takich programach "szkoleniowych" naprawdę nie warto zawracać sobie nimi głowy.
Ostatnio edytowany przez pioki (2014-08-15 11:24:47)
Offline
Chciałbym to jeszcze zapętlić, aby po każdym wykonanym działaniu wracał do menu. Ale czy to jest dobre rozwiązanie, oraz exit (0)?
#include <iostream> #include <cstdlib> using namespace std; int main() { do { char wybor; int skladnik1 , skladnik2; //dodawanie int odjemna , odjemnik; // odejmowanie int mnozna , mnoznik; // mnożenie int dzielna , dzielnik; //dzielenie cout << "Wybier rodzaj dzaiłania" << endl<<endl; cout << "1- Dodawanie" << endl; cout << "2- Odejmowanie" << endl; cout << "3- Mnożenie" << endl; cout << "4- Dzielenie" << endl; cout<< "5- Wyjście"<<endl<<endl; cout <<"Twój wybór: "; cin >>wybor; switch (wybor) { case '1': cout << "Podaj pierwszy składnik "; cin>> skladnik1; // dodawanie cout << "Podarj drugi składnik " ; cin>> skladnik2; cout<< "Wynik dodawania to: " << skladnik1 + skladnik2<<endl<<endl; break; break; case '2': cout << "Podaj odjemną "; cin>> odjemna; // dodejmownie cout << "Podarj odjemnik " ; cin>> odjemnik; cout<< "Wynik odejmowanie to: " << odjemna - odjemnik<<endl<<endl; break; case '3': cout << "Podaj mnożną "; cin>> mnozna; // mnożenie cout << "Podaj mnożnik " ; cin>> mnoznik; cout<< "Wynik mnożenia to: " << mnozna * mnoznik<<endl<<endl; break; case '4': cout << "Podaj dzielną "; cin>> dzielna; // dzielenie cout << "Podaj dzielnik " ; cin>> dzielnik; cout<< "Wynik dzielenia to: " << dzielna / dzielnik<<endl<<endl; break; case '5': exit(0); } }while (1); }
Ostatnio edytowany przez tajwan (2014-08-15 14:34:44)
Offline
Chciałbym zrobić małą konsolową grę. Gra będzie polegała na tym, że z puli 8 liczb od 1-8 komputer wylosuje sobie 5 i użytkownik musi odgadnę te 5 liczb.
#include <iostream> #include <cstdlib> #include <unistd.h> #include <ctime> using namespace std; int main() { int liczby[8]; int twoje_liczby; cout <<"Zgadnij 5 liczb od 1 do 8. "<<endl; srand(time(NULL)); liczby = rand()%8+1; for ( liczby=0; twoje_liczby<6; liczby++) { cout <<"Podaj 5 liczb"; cin>>twoje_liczby; cout <<"Podałeś następujące liczby "<<twoje_liczby; } return 0; }
Ostatnio edytowany przez tajwan (2014-08-17 14:06:36)
Offline
ile razy jeszcze zapytasz "gdzie spartoliłem hello world"?
btw. zrobiłeś tę grę czy skończyłeś na chceniu?
Offline
Próbuję ją robić i się pytam gdzie jest błąd i w ogóle chyba takich rzeczy nie muszę pisać wysłałem co do tej pory zrobiłem.
Offline
Nie kompiluje się
main.cpp:21: błąd: incompatible types in assignment of 'int' to 'int [8]' liczby = rand()%8+1; ^
main.cpp:23: błąd: incompatible types in assignment of 'int' to 'int [8]' for ( liczby=0; twoje_liczby<6; liczby++) ^
main.cpp:23: błąd: lvalue required as increment operand for ( liczby=0; twoje_liczby<6; liczby++) ^
Offline
wciórności, nie wypowiem, kumie barbaronie...
co oznacza podstawienie wartości zero do zmiennej która jest tablicą?
w skrócie masz tam kod
int dupa[8];dupa=0;
wyjaśnij nam co przez to rozumiesz.
Offline
tajwan zacznij od jakiegoś prostego kursu i nauki rozumienia komunikatów kompilatora. programowanie przez permutacje, wariacje i nie wiem co jeszcze nie wiedząc co się dzieje nie jest dobre.
Offline
A ja cie nie bede dogryzał, powiem co jest źle.
Kazdy moj komentaz odnosi sie do linijki "pod spodem"
moje komenty oczywiscie sa w /* */
/* nie widze naglowkow */ int main() /* białe znaki */ { int liczby[8]; /* Nazwa sugeruje kilka liczb, a zmienna moze przechowac jedna, psuje to czytelnosc kodu */ int twoje_liczby; /* białe znaki */ /* Białe znaki, brak konsekwencji, nie wazne jak kulway jest twoj coding standard wazne zeby był konsekwentny */ cout <<"Zgadnij 5 liczb od 1 do 8. "<<endl; srand(time(NULL)); /* Napidujesz wskaznik do pierwszego elementu tablicy przy uzyciu "inta", rand() losuje jedna liczbe */ liczby = rand()%8+1; /* Wylosowana liczbe nadpisujesz zerem, jako warunek zakonczenia podajesz cos co wejdzie z klawiatury, oraz inkrementujesz "liczby" */ /* taka podpowiedz jezeli bedziesz podawal z klawiatury 0,1,2,3,4,5 (oraz liczby ujemne), to petla sie nigdy nie zakonczy */ for ( liczby=0; twoje_liczby<6; liczby++) { /* jakis dziki biały znak */ /* rozjadz w coding standard, albo rybki albo akwarium, wazne zeby konsekwentnie */ cout <<"Podaj 5 liczb"; cin>>twoje_liczby; /* powinno byc "Podales nastepujaca liczbe ", tutaj nie wydrkujesz kilku liczb */ cout <<"Podałeś następujące liczby "<<twoje_liczby; /* dziki whitespace, wciecia */ } return 0; }
Ostatnio edytowany przez gindek (2014-08-17 20:19:31)
Offline
Poproś użytkownika o podanie wieku dwóch osób i wskaż, która z nich jest starsza.
Jeśli obie osoby mają powyżej 100 lat, program powinien zachować się w szczególny sposób.
#include <iostream> using namespace std; int main() { int pierwszaosoba; int drugaosoba; cout<<"Podaj swój wiek"; cin>>pierwszaosoba; cout <<"Podaj wiek znajomego"; cin>> drugaosoba; if (pierwszaosoba > drugaosoba) { cout<<"Jesteś starszy od swojego znajomego"; } if (pierwszaosoba < drugaosoba) { cout <<"Jesteś młodszy od swojego znajomego"; } if (pierwszaosoba || drugaosoba => 100) // Chodzi mi o to { cout <<"Nie powinniście już życ"; } return 0; }
Ostatnio edytowany przez tajwan (2015-04-22 13:15:47)
Offline
1870
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:16:25)
Offline
a słyszał o "else"?
bez patrzenia w kod powiedz co się stanie jeśli podasz dwie takie same liczby.
edit: byłeś szybszy.
edit2: szybki quiz - w jakim języku programowania konstrukcja
if (pierwszaosoba | drugaosoba) >= 100 then...
zachowa się zgodnie z oczekiwaniem?
Ostatnio edytowany przez ethanak (2015-04-22 13:32:39)
Offline
[b]uzytkownikubunt[/b] Nie wyświetla mi się poprawny komunikat jak wpisze 1 i 100 albo 100 i 1 wyświetla się tylko poprawny jak wpisze 100 i 100.
[b]ethanak[/b]Pascal
Ostatnio edytowany przez tajwan (2015-04-22 13:46:18)
Offline
1871
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:16:26)
Offline
Zaimplementuj prosty system weryfikacji haseł, który pobiera hasła w postaci liczb.
Ważne powinno być jedno z dwóch haseł, ale w celu ich sprawdzenia użyj tylko jednej
instrukcji if .
Jak tam wcisnąć dwa hasła?
#include <iostream> using namespace std; int main() { string haslo = "abc"; cout <<"Podaj haslo: "; getline(cin,haslo,'\n'); if (haslo=="123") { cout<<"Zalogowałeś sie poprawnie"; } return 0; }
Ostatnio edytowany przez tajwan (2015-04-22 13:46:56)
Offline
1872
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:16:27)
Offline
Wykombinowałem coś takiego
#include <iostream> using namespace std; int main() { string haslo; cout <<"Podaj haslo: "; getline(cin,haslo,'\n'); if (haslo=="123" && "abc") { cout<<"Zalogowałeś sie poprawnie"; } return 0; }
Offline
1873
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:16:28)
Offline
Rozszerz program kontrolujący hasła, który został zamieszczony w tym rozdziale, w taki
sposób, aby akceptował wielu użytkowników, z których każdy ma swoje hasło. Zagwarantuj,
aby właściwe hasła były przypisane właściwym użytkownikom. Udostępnij możliwość
ponownego zalogowania użytkownika, jeśli pierwsza próba nie powiodła się. Zastanów
się, jak łatwo (albo trudno) można zrealizować taką funkcjonalność w przypadku dużej
liczby użytkowników i haseł.
#include <iostream> using namespace std; int main () { string nazwa; string haslo; string nazwa2; string haslo2; cout << "Podaj nazwę użytkownika: " << "\n"; getline( cin, nazwa, '\n' ); cout << "Podaj hasło: " << "\n"; getline( cin, haslo, '\n' ); if ( nazwa == "admin" && haslo == "123" ) { cout << "Dostęp przyznany" << "\n"; } else if (nazwa2 == "admin2" && haslo2 == "admin2") { cout << "Dostęp przyznany" << "\n"; } else { cout << "Niepoprawna nazwa użytkownika lub hasło. Odmowa dostępu!" << "\n"; // Zwrócenie wartości to wygodny sposób na zatrzymanie programu return 0; } // Pracujemy dalej! }
Offline
[quote=tajwan]Zagwarantuj, aby właściwe hasła były przypisane właściwym użytkownikom. Udostępnij możliwość
ponownego zalogowania użytkownika, jeśli pierwsza próba nie powiodła się.[/quote]
Zainteresowałbym się pętlą while w tym przypadku, i nie robiłbym tego za pomocą if-else.
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00003 | SET NAMES latin2 |
0.00102 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.145.196.150' WHERE u.id=1 |
0.00071 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.196.150', 1732694695) |
0.00039 | SELECT * FROM punbb_online WHERE logged<1732694395 |
0.00049 | SELECT topic_id FROM punbb_posts WHERE id=273524 |
0.00284 | SELECT id FROM punbb_posts WHERE topic_id=26216 ORDER BY posted |
0.00082 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26216 AND t.moved_to IS NULL |
0.00007 | SELECT search_for, replace_with FROM punbb_censoring |
0.00145 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26216 ORDER BY p.id LIMIT 25,25 |
0.00091 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26216 |
Total query time: 0.00882 s |