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

Lekcja 15 - kalkulator

Ostatnio zmodyfikowano 2012-06-08 12:23
Autor Wiadomość
Berux
Temat założony przez niniejszego użytkownika
Lekcja 15 - kalkulator
» 2012-06-06 22:32:05
Napisz prosty kalkulator, który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Program ten ma działać następująco:
1. Wypisuje obecny wynik
2. Wprowadź liczbę
3. Wybierz działanie (jeżeli liczba różna od 0)
4. Wykonaj obliczenia (jeżeli liczba różna od 0)
5. Wróć do kroku 1.
6. Jeżeli wprowadzoną liczbą jest 0, zakończ program.

Zabezpiecz wcześniej napisany kalkulator przed podawaniem niepoprawnych liczb i operacji. Wykorzystaj wiedzę zdobytą z pierwszego zadania pracy domowej niniejszego rozdziału. Zabezpiecz również w analogiczny sposób przed możliwością wyboru nieprawidłowego działania.
C/C++
#include <iostream>

using namespace std;

int main()

{
    int a, b, dzialanie;
   
    do
    {
        cout << "Podaj pierwsza liczbe: ";
        cin >> a;
        cout << "Podaj druga liczbe: ";
        cin >> b;
        cout << "Jakie dzialanie chcesz wykonac?" << endl;
        cout << "[1] Dodawanie" << endl;
        cout << "[2] Odejmowanie" << endl;
        cout << "[3] Mnozenie" << endl;
        cout << "[4] Dzielenie" << endl;
        cout << "[5] Rezygnuj " << endl;
        cin >> dzialanie;
       
        if( dzialanie == 1 )
             cout << a << " + " << b << " = " << a + b << endl;
       
        if( dzialanie == 2 )
             cout << a << " - " << b << " = " << a - b << endl;
       
        if( dzialanie == 3 )
             cout << a << " * " << b << " = " << a * b << endl;
       
        if( dzialanie == 4 )
             cout << a << " / " << b << " = " << a / b << endl;
       
        if( dzialanie == 5 )
             cout << "Koniec" << endl;
       
        if(( a == 0 || b == 0 ) && dzialanie == 3 )
             cout << a << " * " << b << " = 0" << endl;
       
        if(( a == 0 || b == 0 ) && dzialanie == 4 )
             cout << a << " / " << b << " = 0" << endl;
       
        if( dzialanie < 1 || dzialanie > 5 )
             cout << "Nie ma takiej opcji w menu." << endl;
       
    } while( dzialanie < 1 || dzialanie > 5 );
   
   
   
    return 0;
}
Po skompilowaniu programu i uruchomieniu oraz po wpisaniu liczby 1,następnie 2, a w działaniu wybranie mnożenia kod :
C/C++
if( dzialanie == 3 )
     cout << a << " * " << b << " = " << a * b << endl;
wykonuje się dwa razy.

Dziwne jest też to, że po wpisaniu lizcby 1,następnie 2 i wybranie dzielenia to kod:

C/C++
if(( a == 0 || b == 0 ) && dzialanie == 4 )
     cout << a << " / " << b << " = 0" << endl;

nie wykonuje się, a na pulpicie pokazuje się okienko o treści : Program zad2.exe przestał działać...



Co jest nie tak.Z góry dziękuję za odpowiedź.
P-57972
jsc
» 2012-06-06 23:00:15
P-57973
Berux
Temat założony przez niniejszego użytkownika
» 2012-06-06 23:01:14
Nie rozumiem.
P-57974
jsc
» 2012-06-06 23:06:28
Poprzednie to były głupoty.

Powiedz mi o co chodzi z tą konstrukcją:
C/C++
do
{
   
    cin >> a;
   
    cin >> b;
   
    cin >> dzialanie;
   
    if( dzialanie == 3 )
         cout << a << " * " << b << " = " << a * b << endl;
   
    if(( a == 0 || b == 0 ) && dzialanie == 3 )
         cout << a << " * " << b << " = 0" << endl;
   
    if( dzialanie == 4 )
         cout << a << " / " << b << " = " << a / b << endl;
   
   
    if(( a == 0 || b == 0 ) && dzialanie == 4 )
         cout << a << " / " << b << " = 0" << endl;
   
} while( dzialanie < 1 || dzialanie > 5 );


To co wyciąłem jest dla problemu raczej nieistotne.
   
P-57975
Berux
Temat założony przez niniejszego użytkownika
» 2012-06-06 23:16:27
Już rozumiem. Kod:

C/C++
#include <iostream>

using namespace std;

int main()

{
    int a, b, dzialanie;
   
    do
    {
        cout << "Podaj pierwsza liczbe: ";
        cin.sync();
        cin.clear();
        cin >> a;
       
        cout << "Podaj druga liczbe: ";
        cin.sync();
        cin.clear();
        cin >> b;
       
        cout << "Jakie dzialanie chcesz wykonac?" << endl;
        cout << "[1] Dodawanie" << endl;
        cout << "[2] Odejmowanie" << endl;
        cout << "[3] Mnozenie" << endl;
        cout << "[4] Dzielenie" << endl;
        cout << "[5] Rezygnuj " << endl;
        cin.sync();
        cin.clear();
        cin >> dzialanie;
       
        if( dzialanie == 1 )
             cout << a << " + " << b << " = " << a + b << endl;
       
        if( dzialanie == 2 )
             cout << a << " - " << b << " = " << a - b << endl;
       
        if( dzialanie == 3 && a > 0 && b > 0 )
             cout << a << " * " << b << " = " << a * b << endl;
       
        if( dzialanie == 4 && a > 0 && b > 0 )
             cout << a << " / " << b << " = " << a / b << endl;
       
        if( dzialanie == 5 )
             cout << "Koniec" << endl;
       
        if(( a == 0 || b == 0 ) && dzialanie == 3 )
             cout << a << " * " << b << " = 0" << endl;
       
        if(( a == 0 || b == 0 ) && dzialanie == 4 )
             cout << a << " / " << b << " = 0" << endl;
       
        if( dzialanie < 1 || dzialanie > 5 )
             cout << "Nie ma takiej opcji w menu." << endl;
       
    } while( dzialanie < 1 || dzialanie > 5 );
   
   
   
    return 0;
}

Temat zamykam. I dzięki za poświęcenie czasu.
P-57976
f0g
» 2012-06-07 14:46:19
Nie lepiej zastosować switch...case zamiast if'ów?
P-58009
Berux
Temat założony przez niniejszego użytkownika
» 2012-06-07 16:17:06
Próbowałem ale nie wiem jak to zrobić. Z resztą zadanie chyba rozwiązane poprawnie?
P-58019
jsc
» 2012-06-07 20:24:04
Nie bo działanie 3 i 4 chcesz wykonać 2 razy:
- najpierw na chura bez sprawdzania warunków
- później po sprawdzeniu warunku na wykonalność
P-58033
« 1 » 2
  Strona 1 z 2 Następna strona