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

[Lekcja 17] Kalkulator

Ostatnio zmodyfikowano 2012-11-30 22:54
Autor Wiadomość
Precel
Temat założony przez niniejszego użytkownika
[Lekcja 17] Kalkulator
» 2012-11-30 22:15:39
Prosiłbym o pomoc przy pracy domowej z zadania 17 otóż:
C/C++
#include <iostream>
using namespace std;
int main()
{
    unsigned int a;
    unsigned int b;
    bool Dziala;
    char Dzialanie;
    do
    {
        cout << "Podaj pierwsza liczbe " << endl;
        cin >> a;
        Dziala = std::cin.good();
        cin.clear();
        cin.sync();
    } while( Dziala != true );
   
    do
    {
        cout << "Podaj druga liczbe " << endl;
        cin >> b;
        Dziala = std::cin.good();
        cin.clear();
        cin.sync();
    } while( Dziala != true );
   
    do
    {
        cout << "Co z tym teraz zrobic? " << endl;
        cout << "[1] Dodawanie " << endl;
        cout << "[2] Odejmowanie " << endl;
        cout << "[3] Mnozenie " << endl;
        cout << "[4] Dzielenie " << endl;
        cout << "[5] Wyjscie " << endl;
        cin >> Dzialanie;
        switch( Dzialanie )
        {
        case 1:
            cout << a + b << endl;
            break;
        case 2:
            cout << a - b << endl;
            break;
        case 3:
            cout << a * b << endl;
            break;
        case 4:
            cout << a / b << endl;
            break;
        }
       
    } while( Dzialanie == 0 && Dzialanie == 5 );
   
    cout << ":)" << endl;
    return 0;
}
Na końcu, przy wpisywaniu byle czego, program sam się wyłącza, wie ktoś może w czym jest błąd? :)
P-70182
whiskas
Coz
» 2012-11-30 22:17:42
Dodaj bibloteke cstdlib i na koncu programu daj system("PAUSE"); lub daj całość programu do jakiejkolwiek pętli żeby kończyła się wraz z wpisaniem np 1 do odpowiedniej zmiennej.
P-70183
rafixxx25
» 2012-11-30 22:29:10
do{
}while( Dzialanie == 0 && Dzialanie == 5 );
Warunek na pewno jest niepoprawny(nie może być na raz liczbą 0 i 5)
Nie za bardzo wiem, co chciałeś nim osiągnąć. Czy chciałeś, by ciągle można było wykonywać operacje(dodawanie, potem mnożenie itd.), aż do naciśnięcia 0 lub 5?

Jeśli w switchu sprawdzasz zmienną typu char, a nie liczbową, to w casach musisz użyć ' ' (ponieważ to nie liczba, tylko znak).
np:
case '1':
cout << a + b << endl;
break;
case '2':
cout << a - b << endl;
break;

Na końcu użyj sobie jakieś funkcji, która sprawi, że program będzie czekał (np: system("PAUSE"), albo getch() z biblioteki conio)
P-70184
Precel
Temat założony przez niniejszego użytkownika
» 2012-11-30 22:43:25
Dzięki za odpowiedź! //Temat zamykam :P
Tutaj jest poprawny kod jakby ktoś potrzebował:
C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    unsigned int a;
    unsigned int b;
    bool Dziala;
    char Dzialanie;
    do
    {
        cout << "Podaj pierwsza liczbe " << endl;
        cin >> a;
        Dziala = std::cin.good();
        cin.clear();
        cin.sync();
    } while( Dziala != true );
   
    do
    {
        cout << "Podaj druga liczbe " << endl;
        cin >> b;
        Dziala = std::cin.good();
        cin.clear();
        cin.sync();
    } while( Dziala != true );
   
    do
    {
        cout << "Co z tym teraz zrobic? " << endl;
        cout << "[1] Dodawanie " << endl;
        cout << "[2] Odejmowanie " << endl;
        cout << "[3] Mnozenie " << endl;
        cout << "[4] Dzielenie " << endl;
        cout << "[5] Wyjscie " << endl;
        getch();
        cin >> Dzialanie;
        switch( Dzialanie )
        {
        case '1':
            cout << a + b << endl;
            break;
        case '2':
            cout << a - b << endl;
            break;
        case '3':
            cout << a * b << endl;
            break;
        case '4':
            cout << a / b << endl;
            break;
        }
       
    } while( Dzialanie == 5 );
   
    cout << ":)" << endl;
    getch();
    return 0;
}
P-70187
Admixior
» 2012-11-30 22:54:11
Słabo pojąłeś czego dotyczy warunek umieszczany w pętli.
Powinieneś zapoznać się dokładniej z operatorami &&( AND / ORAZ oba warunki spełnione zwraca true);  ||( OR / LUB minimum jeden warunek spełniony true)
Oraz pamiętać że jako warunek w pętli podajesz zależność kiedy pętla ma być robiona jeszcze raz.
Jeżeli przeanalizujesz twój warunek to zauważysz że program przerwie się jeżeli coś obliczysz, a nie przerwie się (pętla się będzie wykonywać dalej) tylko wtedy jeżeli dasz wyjście czyli 5 (bo warunek będzie spełniony więc pętla się jeszcze raz wykona)! Co jest niedorzecznością ;]
P-70191
« 1 »
  Strona 1 z 1