Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

POZIOM 1 - ROZDZIAŁ 12 i 13 - problem

Ostatnio zmodyfikowano 2013-01-28 14:17
Autor Wiadomość
Frish
Temat założony przez niniejszego użytkownika
POZIOM 1 - ROZDZIAŁ 12 i 13 - problem
» 2013-01-28 12:34:17
Witam

Mam problem, ponieważ napisałem na podstawie lekcji 12 i 13 takie coś:
C/C++
#include <iostream>
int main()
{
    std::cout << "Witam" << std::endl;
   
    int wiek;
   
    std::cout << "Podaj swoj wiek: ";
    std::cin >> wiek;
   
    bool polska = wiek == 16 || wiek == 17;
   
    if( wiek >= 18 )
   
         std::cout << "Zgodnosc wieku: TAK" << std::endl;
    else
         std::cout << "Zgodnosc wieku: BRAK" << std::endl;
   
    if( polska )
   
         std::cout << "Kraj pochodzenia: POLSKA" << std::endl;
    else
         std::cout << "Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia" << std::endl;
   
    if( wiek == 17 )
   
         std::cout << "Godnosc: Mateusz" << std::endl;
    else
         std::cout << "Godnosc: Brak danych";
   
   
    std::cout << std::endl << std::endl << "Podaj swoj wiek: ";
    std::cin >> wiek;
   
    if( wiek >= 18 )
   
         std::cout << "Zgodnosc wieku: TAK" << std::endl;
    else
         std::cout << "Zgodnosc wieku: BRAK" << std::endl;
   
    if( polska )
   
         std::cout << "Kraj pochodzenia: POLSKA" << std::endl;
    else
         std::cout << "Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia" << std::endl;
   
    if( wiek == 17 )
   
         std::cout << "Godnosc: Mateusz" << std::endl;
    else
         std::cout << "Godnosc: Brak danych";
   
    std::cout << std::endl << std::endl << "Podaj swoj wiek: ";
    std::cin >> wiek;
   
    if( wiek >= 18 )
   
         std::cout << "Zgodnosc wieku: TAK" << std::endl;
    else
         std::cout << "Zgodnosc wieku: BRAK" << std::endl;
   
    if( polska )
   
         std::cout << "Kraj pochodzenia: POLSKA" << std::endl;
    else
         std::cout << "Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia" << std::endl;
   
    if( wiek == 17 )
   
         std::cout << "Godnosc: Mateusz" << std::endl;
    else
         std::cout << "Godnosc: Brak danych";
   
    return 0;
}
i teraz nie wiem dlaczego jeżeli wpisze np. jako poerwsze wiek większy od 18 to po kolejnych wpisach choć zgodnych z komendami w programie tj. 16 i 17 lat, wyświetla mi nadal to samą odpowiedz co w przypadku lat 20. a z programu wynika ze powinno być inaczej. Prosze o pomoc, gdzie popełlniam błąd i jaki. I jeżeli to możliwe to pomoc niech będzie oparta na rozdziałach 12 i 13.

pozdrawiam
Mateusz
P-75210
jsc
» 2013-01-28 13:04:46
Spróbuj powstawiać tam gdzie trzeba klamry, bo bez nich jest strasznych chaos.
P-75212
ligras
» 2013-01-28 13:12:36
Hej, patrząc na Twój kod (wcięcia w tekście) jako pierwsze nasuwa mi się pytanie, czy nie zapomniałeś o nawiasach - pamiętaj, że jeśli po słówku "else" chcesz wykonać kilka instrukcji to musisz je wziąć w klamry.
2) uruchomiłam Twój kod tak jak pisałeś, 20 , 17, 16, odpowiedzi były:
Witam
Podaj swoj wiek: 20
Zgodnosc wieku: TAK
Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia
Godnosc: Brak danych

Podaj swoj wiek: 17
Zgodnosc wieku: BRAK
Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia
Godnosc: Mateusz

Podaj swoj wiek: 16
Zgodnosc wieku: BRAK
Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia
Godnosc: Brak danych

3) Może napisz co chciałbyś osiągnąć, bo wyniki programu dla mnie są zgodne z oczekiwaniami patrząc na kod.
P-75213
Frish
Temat założony przez niniejszego użytkownika
» 2013-01-28 13:21:10
Witam
Podaj swoj wiek: 20
Zgodnosc wieku: TAK
Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia
Godnosc: Brak danych

Podaj swoj wiek: 17
Zgodnosc wieku: BRAK
Kraj pochodzenia: Kraj pochodzenia: POLSKA
Godnosc: Mateusz

Podaj swoj wiek: 16
Zgodnosc wieku: BRAK
Kraj pochodzenia: Kraj pochodzenia: POLSKA
Godnosc: Brak danych

Ja chciałem osiągnąć coś takiego. I powiem tak jeżeli wpiszemy taki program:
C/C++
#include <iostream>
int main()
{
    std::cout << "Witam" << std::endl;
   
    int wiek;
   
    std::cout << "Podaj swoj wiek: ";
    std::cin >> wiek;
   
    bool polska = wiek == 16 || wiek == 17;
   
    if( wiek >= 18 )
   
         std::cout << "Zgodnosc wieku: TAK" << std::endl;
    else
         std::cout << "Zgodnosc wieku: BRAK" << std::endl;
   
    if( polska )
   
         std::cout << "Kraj pochodzenia: POLSKA" << std::endl;
    else
         std::cout << "Kraj pochodzenia: Nie wiesz nawet ile masz lat, nie znasz swojego kraju pochodzenia" << std::endl;
   
    if( wiek == 17 )
   
         std::cout << "Godnosc: Mateusz" << std::endl;
    else
         std::cout << "Godnosc: Brak danych";
   
    return 0;
}

czyli pojedynczy kod, to wtedy przy kolejnym odpalaniu wszystko dzziała właściwie, tylko w przypadku powtarzania sekwencji coś działa nie tak.
P-75214
ligras
» 2013-01-28 13:27:43
Jeśli chciałeś osiągnąć wyniki które podałeś, to moim zdaniem powinieneś jeszcze dwa razy (po każdej prośbie o wiek) dać instrukcję:
polska = wiek == 16 || wiek == 17;
P-75215
Frish
Temat założony przez niniejszego użytkownika
» 2013-01-28 13:33:06
Czyli nie wystarczy dać zminnej 'bool' a poźniej ją wpisywać do komend 'if'?
P-75216
Frish
Temat założony przez niniejszego użytkownika
» 2013-01-28 13:35:59
i jeżeli chodzi o te klamry to szczerze powiedziawszy nie mam pojęcia gdzie je umieścić żeby byly właściwie czytane bo w lekcji 13 jest bardzo ogólnie na ten temat i jak próbuje te klamry umieszczać to błędy mi wyskakują. jeżeli mógłbym uzyskać przykład na podstawie mojego kodu to byłbym wdzięczny.
P-75217
ligras
» 2013-01-28 13:43:26
Zależy co chcesz osiągnąć. Jeśli pozostawisz kod tak jak było na początku, to mówisz: utwórz mi zmienną boolowska o nazwie "polska" w której to zapisz wynik porównania logicznego (wiek == 16 || wiek == 17). "Wiek" podałeś wcześniej, więc Twoja zmienna "polska" w tym momencie przyjmuje konkretną wartość. Na przykład jeśli podałeś wiek = 16, to masz takie przypisanie:
bool polska = 16 == 16 || 16 == 17; // wynik: polska = 1;
Jesli podasz wiek = 20, to masz:
bool polska = 20 == 16 || 20 == 17; // wynik: polska = 0;
No i koniec, nigdzie więcej zmiennej polska już nie zmieniasz. Ale w różnych miejscach się o nią pytasz.
Instrukcja pytająca if ( polska ) { ... } nie zmienia wartości zmiennej polska. To jest skrót od zapytania: if ( polska == true )  { ... }
Jeśli chciałbyś zmienić wartość zmiennej polska, to powinno to wyglądać: if ( polska = (wiek == 16 || wiek == 17) ) { ... } Ale takich rzeczy radze na początku nie używać, bo łatwo się pogubić.
P-75219
« 1 » 2
  Strona 1 z 2 Następna strona