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

[XI. Tworzenie warunków złożonych if ... else] Problem z drugim ćwiczeniem

Ostatnio zmodyfikowano 2010-08-06 17:57
Autor Wiadomość
ricardo83
Temat założony przez niniejszego użytkownika
[XI. Tworzenie warunków złożonych if ... else] Problem z drugim ćwiczeniem
» 2010-08-06 10:04:57
Witam
Mam pytanie odnosnie cwiczenia w kursie 11.6.2 (Tworzenie warunków złożonych if ... else). Nalezy tam w pewnym momencie wprowadzic ilosc biletow do nabycia albo wcisnac literke "p" jesli rezygnujemy z zakupu biletow (autor kursu zaproponowal nawet ze "najlepiej gdyby sprawdzała czy została naciśnięta cyfra lub literka „p”"). Moje pytanie brzmi nastepujaco: czy mozna zadeklarowac jedna zmienna ktora bedzie przyjmowala albo liczbe biletow albo literke "p" zeby wrocic do menu?
Jak ktos bedzie mial jakis pomysl to prosze o posta nizej :)

Pozdrawiam
P-20494
madmike44
» 2010-08-06 11:28:10
Najpierw pokaż, jak Ty to rozwiązałeś - wtedy możesz dostać wskazówki :)
P-20497
ricardo83
Temat założony przez niniejszego użytkownika
» 2010-08-06 11:56:23
ja wlasnie nie potrafie poradzic sobie z tym problemem gdyz:
1. jak zadeklaruje jako int zmienna ktora ma wczytywac liczbe biletow ktore chcielibysmy kupic lub powrocic do menu glownego(czyli byc przygotowana ze moze sie w strumieniu pojawic literka "p" albo jakakolwiek inna), to nie bede mogl wpisac literki "p" gdyz program bedzie zachowywal sie w sposob nieoczekiwany (zapetli sie)
2. jesli zadeklaruje te zmienna jako char to przy wprowadzaniu cyfry (i sprawdzeniu ze wprowadzona wartosc jest cyfra) trzeba ja bedzie nastepnie przekonwertowac na typ int a otrzymana wartosc nie bedzie juz ta sama liczba ktora wpisywalismy, natomiast literke "p" ladnie wtedy program przyjmie.

wiec zastanawiam sie jak zrobic zeby bylo mozliwe rozwiazanie tego przypadku na jednej zmiennej ?

ja zrobilem to tak ale jeszcze nie dziala:
C/C++
char znak;
int bilet;
int bilet_1;
const int LICZBA_BILETOW = 20;
int licz_bil_1 = LICZBA_BILETOW,
licz_bil_2 = LICZBA_BILETOW,
licz_bil_3 = LICZBA_BILETOW,
licz_bil_4 = LICZBA_BILETOW;

cout << "Kino Domownik zaprasza.\nDzisiejsza oferta to: \n"
<< "1. Bolek i Lolek\n"
<< "2. Seksmisja\n"
<< "3. Krzyzacy\n"
<< "4. Killer\n"
<< "z/Z Zakonczenie programu\n\n"

<< "Wybierz seans? ";
cin >> znak;

//jesli wprowadzony znak jest rozny od z i Z
while( znak != 'Z' && znak != 'z' )
{
    //jesli wybrales 1 seans i liczba biletow dla 1 seansu jest wieksza niz 0
    if( znak == '1' && licz_bil_1 > 0 )
    {
        ta zmienna zastosowalem tak aby bylo mozliwe wejscie do petli //"while(bilet>licz_bil_1)"
        //ta petla jest nieco nizej
        bilet = LICZBA_BILETOW + 1;
       
        cout << "\nW puli zostalo " << licz_bil_1 << " biletow" << endl;
        cout << "Ile chcesz kupic biletow"
        << " na seans Bolek I Lolek p-powrot do menu\n";
        cin >> bilet;
       
       
        //w tym przypadku sprawdzanie czy jest liczba nie ma sensu gdyz zmienna
        //bilet jest typu int wiec "musi" byc cyfra badz liczba
        if( isdigit( bilet ) )
        {
           
           
            while( bilet > licz_bil_1 )
            {
                if( bilet > licz_bil_1 )
                     cout << "Wybrales za duzo biletow!!!\n";
               
            }
            licz_bil_1 = licz_bil_1 - bilet;
        }
        else cout << "Powrot do menu\n";
       
       
       
       
       
    }
    else if( licz_bil_1 < 1 )
    {
        cout << "brak biletow na ten seans\n";
    }

jest to tylko fragment kodu ale najistotniejszy :)


Pozdrawiam
P-20498
pekfos
» 2010-08-06 12:07:34
C/C++
#include <cctype>
bool liczba( string a ) {
    for( int c = 0; c < a.length(); c++ ) if( !isdigit( a[ c ] ) { return false; }
    return true;
}

//..
string b;
getline( cin, b );
if( liczba( b ) ) cout << "kupileś  " << b << " biletów";
else cout << "anulowałes zakup biletu"
P-20499
ricardo83
Temat założony przez niniejszego użytkownika
» 2010-08-06 12:40:48
dzieki pekfos za rozwiazanie ale czy nie da sie tego zrobic inaczej, prosciej? wykorzystujac podstawowe typy zmiennych int,char gdyz przerabiam kurs od poczatku i autor pewnie zalozyl ze da sie to zrobic wykorzystujac poznane wczesniej techniki :)

Pozdrawiam
P-20501
ison
» 2010-08-06 12:48:48
możesz wczytać stringa, sprawdzić czy jest to literka 'p' jesli tak to przerywasz w innym wypadku konwertujesz na inta

funkcja konwertująca cstringa do inta:
C/C++
#include <cstdio>
C/C++
int str2int( char liczba[] )
{
    int liczba2;
    sscanf( liczba, "%d", & liczba2 );
    return liczba2;
}

przykład użycia:
C/C++
int main()
{
    char wartosc[ 250 ];
    scanf( "%s", wartosc );
    if( !strcmp( "p", wartosc ) ) printf( "Koniec\n" );
    else
    {
        int bilety = str2int( wartosc );
        //tu operujesz na zmiennej 'bilety'
    }
}
P-20502
ricardo83
Temat założony przez niniejszego użytkownika
» 2010-08-06 13:32:27
podziekowania dla ison gdyz to wlasnie o to rozwiazanie mi chodzilo :)
podziekowania rowniez dla pekfos za pomoc ale jak dla mnie rozwiazanie ktore przedstawiles jest zbyt skomplikowane :(

Pozdrawiam
P-20510
Elaine
» 2010-08-06 16:43:30
podziekowania rowniez dla pekfos za pomoc ale jak dla mnie rozwiazanie ktore przedstawiles jest zbyt skomplikowane
Normalka, jego kody takie są, po co zrobić coś prosto, skoro można zamotać, dać dziwne nazwy i przy okazji zrobić wszystko tak, że nie kompiluje się/nie działa poprawnie (niepotrzebne skreślić)? ;>
P-20516
« 1 » 2
  Strona 1 z 2 Następna strona