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

[Zadanie 15] Zamykanie klakulatora.

Ostatnio zmodyfikowano 2012-03-11 19:30
Autor Wiadomość
abcde
Temat założony przez niniejszego użytkownika
[Zadanie 15] Zamykanie klakulatora.
» 2012-03-10 21:34:34
Napisałem kalkulator ze zadania, ale mam problem bo nie mogę zakończyć jego pracy.
Problem polega na tym ,że jak wybiorę opcję 5 z mojego to nie zamyka programu.Czy można zatem w warunek zakończenia pętli while wpisać opcje case 5 tak, że jak ona zostanie wybrana to program zakończy pracę.
Podana warunek w poniższym kodzie jest warunkiem tymczasowym tylko dla jego działania w niego próbuje wpisać jakos case 5.

Oto kod:
 
C/C++
#include <iostream>

int main()

{ std::cin.clear();
    std::cin.sync();
    float a;
    float b;
    int opcja;
    float wynik;
    bool sprawdzanie = std::cin.good();
    bool rozne = a != 0;
   
   
   
    std::cout << "Kalkulator " << std::endl;
    std::cout << "Menu:" << std::endl;
    std::cout << "[1] dodawanie" << std::endl;
    std::cout << "[2] odejmowanie" << std::endl;
    std::cout << "[3] mnozenie" << std::endl;
    std::cout << "[4] dzielenie" << std::endl;
    std::cout << "[5] rezygnuj" << std::endl;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Podaj co chcesz zrobic" << std::endl;
        std::cin >> opcja;
        switch( opcja )
        {
           
           
        case 1:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales dodawanie" << std::endl;
                do
                {
                    std::cout << "Podaj pierwsza liczbe: ";
                    std::cin >> a;
                    sprawdzanie = std::cin.good();
                   
                    if( sprawdzanie == false )
                         std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
                   
                    if( rozne = a == 0 )
                         std::cout << "Wybierz liczbe rozna od zera." << std::endl;
                   
                } while( rozne = a == 0 );
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a + b << std::endl;
            break;
        case 2:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales odejmowanie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a - b << std::endl;
            break;
           
        case 3:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales mnozenie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a * b << std::endl;
            break;
           
        case 4:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales dzielenie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;;\
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a / b << std::endl;
            break;
           
           
           
           
        case 5:
            std::cin.clear();
            std::cin.sync();
            std::cout << "Wybrales koniec" << std::endl;
            break;
           
            default:
            std::cout << "Bledny wybor. Dostepne opcje: 1,2,3,4,5." << std::endl;
            break;
        }
       
    } while( wynik != true );
   
    std::cout << "Koniec";
   
    return 0;
}
Proszę o porady.
Pozdrawiam.
Podoba mi się ten kurs.
Dawno się tak nie na myślałem.
P-52380
jsc
» 2012-03-10 21:41:53
Możesz zrobić osobną zmienną:
C/C++
bool czyKoniec = false;

i od niej uzależnić wyjście z pętli.
P-52383
abcde
Temat założony przez niniejszego użytkownika
» 2012-03-10 22:13:11
Dokonałem modyfikacji. Wszystko działa, tylko takie małe ale znalazłem.
Otóż jak wybiorę opcję nr 5 to mam tam napis wybrałeś koniec, ale coś tam muszę nadusić jeszcze jakąś liczbę aby ten koniec nastapił i dopiero wtedy on następuję. I tu mam ten mały problem, powstaje taka linijka przerwy gdzie naciśnięcie liczby obojętnie jakiej powoduje faktyczny koniec.
Mam nadzieję, że zrozumiesz o co chodzi:

Aktualny kod:
C/C++
#include <iostream>

int main()

{ std::cin.clear();
    std::cin.sync();
    float a;
    float b;
    int opcja;
    float wynik;
    bool sprawdzanie = std::cin.good();
    bool rozne = a != 0;
    bool czykoniec = false;
   
   
   
    std::cout << "Kalkulator " << std::endl;
    std::cout << "Menu:" << std::endl;
    std::cout << "[1] dodawanie" << std::endl;
    std::cout << "[2] odejmowanie" << std::endl;
    std::cout << "[3] mnozenie" << std::endl;
    std::cout << "[4] dzielenie" << std::endl;
    std::cout << "[5] rezygnuj" << std::endl;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Podaj co chcesz zrobic" << std::endl;
        std::cin >> opcja;
        switch( opcja )
        {
           
           
        case 1:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales dodawanie" << std::endl;
                do
                {
                    std::cout << "Podaj pierwsza liczbe: ";
                    std::cin >> a;
                    sprawdzanie = std::cin.good();
                   
                    if( sprawdzanie == false )
                         std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
                   
                    if( rozne = a == 0 )
                         std::cout << "Wybierz liczbe rozna od zera." << std::endl;
                   
                } while( rozne = a == 0 );
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a + b << std::endl;
            break;
        case 2:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales odejmowanie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a - b << std::endl;
            break;
           
        case 3:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales mnozenie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a * b << std::endl;
            break;
           
        case 4:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales dzielenie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;;\
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a / b << std::endl;
            break;
           
           
           
           
        case 5:
            std::cin.clear();
            std::cin.sync();
            std::cout << "Wybrales koniec" << std::endl;
            std::cin >> czykoniec;
           
            break;
           
            default:
            std::cout << "Bledny wybor. Dostepne opcje: 1,2,3,4,5." << std::endl;
            break;
        }
       
    } while( czykoniec == false );
   
    std::cout << "Koniec";
   
    return 0;
}
P-52386
jsc
» 2012-03-10 22:17:47
Chodziło mi o to, żeby po wejściu do case 5 prostym poleceniem zmienić stan zmiennej, a nie korzystać z cin bo jak dostaniesz 0 to pętla przeskoczy.
P-52388
abcde
Temat założony przez niniejszego użytkownika
» 2012-03-11 10:35:20
Dobrze zmieniłem. Wydaje mi się, że tak bo wszystko działa, ale czy to miałeś na myśli.

Kod:
C/C++
#include <iostream>

int main()

{ std::cin.clear();
    std::cin.sync();
    float a;
    float b;
    int opcja;
    float wynik;
    bool sprawdzanie = std::cin.good();
    bool rozne = a != 0;
    bool czykoniec = false;
   
   
   
    std::cout << "Kalkulator " << std::endl;
    std::cout << "Menu:" << std::endl;
    std::cout << "[1] dodawanie" << std::endl;
    std::cout << "[2] odejmowanie" << std::endl;
    std::cout << "[3] mnozenie" << std::endl;
    std::cout << "[4] dzielenie" << std::endl;
    std::cout << "[5] rezygnuj" << std::endl;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Podaj co chcesz zrobic" << std::endl;
        std::cin >> opcja;
        switch( opcja )
        {
           
           
        case 1:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales dodawanie" << std::endl;
                do
                {
                    std::cout << "Podaj pierwsza liczbe: ";
                    std::cin >> a;
                    sprawdzanie = std::cin.good();
                    czykoniec = false;
                   
                    if( sprawdzanie == false )
                         std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
                   
                    if( rozne = a == 0 )
                         std::cout << "Wybierz liczbe rozna od zera." << std::endl;
                   
                } while( rozne = a == 0 );
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a + b << std::endl;
            break;
        case 2:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales odejmowanie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
                czykoniec = false;
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a - b << std::endl;
            break;
           
        case 3:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales mnozenie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
                czykoniec = false;
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a * b << std::endl;
            break;
           
        case 4:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales dzielenie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
                sprawdzanie = std::cin.good();
                czykoniec = false;
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;;;\
               
            } while( sprawdzanie == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
                sprawdzanie = std::cin.good();
               
                if( sprawdzanie == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( sprawdzanie == false );
           
            std::cout << "Wynik:" << a / b << std::endl;
            break;
           
           
           
           
        case 5:
            std::cin.clear();
            std::cin.sync();
            std::cout << "Wybrales koniec" << std::endl;
            czykoniec = true;
           
            break;
           
            default:
            std::cout << "Bledny wybor. Dostepne opcje: 1,2,3,4,5." << std::endl;
            break;
        }
       
    } while( czykoniec == false );
   
    std::cout << "Koniec";
   
    return 0;
}
P-52408
Fabjan94
» 2012-03-11 11:18:34
A nie mogłeś po prostu w głównej pętli ostatni warunek wybrać
while( opcja != 5 )
I myślę że mogłeś sobie jeszcze odpuścić zmienną wynik ponieważ jej nie używasz oraz sprawdzanie i pisać jedynie
cin.good() == false
 zawsze zaoszczędziłbyś na pamięci.
P-52414
Fabjan94
» 2012-03-11 12:04:31
C/C++
#include <iostream>

int main()

{ std::cin.clear();
    std::cin.sync();
    float a;
    float b;
    int opcja;
   
    std::cout << "Kalkulator " << std::endl;
    std::cout << "Menu:" << std::endl;
    std::cout << "[1] dodawanie" << std::endl;
    std::cout << "[2] odejmowanie" << std::endl;
    std::cout << "[3] mnozenie" << std::endl;
    std::cout << "[4] dzielenie" << std::endl;
    std::cout << "[5] rezygnuj" << std::endl;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Podaj co chcesz zrobic" << std::endl;
        std::cin >> opcja;
        switch( opcja )
        {
           
           
        case 1:
           
           
           
            std::cout << "Wybrales dodawanie" << std::endl;
           
            do
            {
                std::cin.clear();
                std::cin.sync();
               
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
               
                if( std::cin.fail() )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
                else
                if( a == 0 )
                     std::cout << "Wybierz liczbe rozna od zera." << std::endl;
               
               
               
            } while( std::cin.fail() || a == 0 );
           
           
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
               
                if( std::cin.good() == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
               
            } while( std::cin.good() == false );
           
            std::cout << "Wynik:" << a + b << std::endl;
            break;
        case 2:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales odejmowanie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
               
                if( std::cin.good() == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( std::cin.good() == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
               
                if( std::cin.good() == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( std::cin.good() == false );
           
            std::cout << "Wynik:" << a - b << std::endl;
            break;
           
        case 3:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales mnozenie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
               
                if( std::cin.good() == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( std::cin.good() == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
               
                if( std::cin.good() == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( std::cin.good() == false );
           
            std::cout << "Wynik:" << a * b << std::endl;
            break;
           
        case 4:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Wybrales dzielenie" << std::endl;
                std::cout << "Podaj pierwsza liczbe: ";
                std::cin >> a;
               
                if( std::cin.good() == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;;;;\
               
            } while( std::cin.good() == false );
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "Podaj druga liczbe: ";
                std::cin >> b;
               
                if( std::cin.good() == false )
                     std::cout << "Bledny wybor. Podaj liczbe: " << std::endl;
               
            } while( std::cin.good() == false );
           
            std::cout << "Wynik:" << a / b << std::endl;
            break;
           
           
           
           
        case 5:
            std::cin.clear();
            std::cin.sync();
            std::cout << "Wybrales koniec" << std::endl;
           
            break;
           
            default:
            std::cout << "Bledny wybor. Dostepne opcje: 1,2,3,4,5." << std::endl;
            break;
        }
       
    } while( opcja != 5 );
   
    std::cout << "Koniec";
   
    return 0;
}



Tak wydaje mi sie że jest wiele lepiej ponieważ ominęliśmy
C/C++
float wynik;
bool sprawdzanie = std::cin.good();
bool rozne = a != 0;
bool czykoniec = false;
 Jeszcze jedynie pętle while zaczynasz w złym miejscu, spójrz sobie na dodawanie i porównaj z innymi opcjami ;)
P-52417
abcde
Temat założony przez niniejszego użytkownika
» 2012-03-11 14:48:36
Rzeczywiście najprościej podać taki warunek:
} while( opcja != 5 );
Powiem, ze nawet z tym kombinowałem chciałem aby właśnie case 5 kończył jakoś ale nie mogłem wpaść jak bo błędy mi waliły.
Zmienna
wynik
 i tak na pewno by odpadła bo to była tylko tymczasowa do pierwszej wersji aby program działał.
Twoja wersja kodu bardzo ciekawa i rzeczywiście prościej napisana. Przeanalizowałem dokładnie cały kod.
Dziękuje za fajne uwagi.
Przechodzę dalej.
Pozdrawiam.
P-52423
« 1 » 2
  Strona 1 z 2 Następna strona