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

[ Poziom 2 ] [ Rozdział 18 ] praca domowa

Ostatnio zmodyfikowano 2015-07-19 10:28
Autor Wiadomość
Kisiel
Temat założony przez niniejszego użytkownika
[ Poziom 2 ] [ Rozdział 18 ] praca domowa
» 2015-07-18 14:17:48
Witam, mam mały problem , nie rozumiem treści zadania i nie wiem czy dobrze je zrobiłem, mógłby mi ktoś pomóc, napisać czy dobrze zrobione, a jeśli nie to jak miał bym to zrobić.
zad. 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.
Przykładowe menu wyboru działania:
[1] Dodawanie
[2] Odejmowanie
[3] Mnożenie
[4] Dzielenie
[5] Rezygnuj
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()
{
    float a;
    float b;
    float c;
    int wynik;
    do
    {
       
       
        cout << "Podaj pierwsza liczbe: ";
        cin >> a;
        cin.clear();
        cin.sync();
        cout << "   Podaj druga liczbe: ";
        cin >> b;
        cin.clear();
        cin.sync();
        cout << " Co chcesz zrobic ?" << endl;
        cout << " 1 - dodaj " << endl;
        cout << " 2 - odejmij " << endl;
        cout << " 3 - pomnoz " << endl;
        cout << " 4 - podziel " << endl;
        cout << " 5 - rezygnuj " << endl;
        cin >> wynik;
        switch( wynik )
        {
        case 1:
            cout << "wynik =" << a + b << endl;
            break;
        case 2:
            cout << "wynik =" << a - b << endl;
            break;
        case 3:
            cout << "wynik =" << a * b << endl;
            break;
        case 4:
            if( b == 0 )
                 cout << " Pamietaj cholero nie dziel przez zero " << endl;
            else
                 cout << "wynik =" << a / b << endl;
           
            break;
        case 5:
            cout << " Napewno ?" << endl;
            cout << " [1] Tak " << endl;
            cout << " [2] Nie " << endl;
            cin >> c;
        }
    } while( c != 1 );
   
    return 0;
}
P-134862
carlosmay
» 2015-07-18 19:13:40
Ostatni case jest niepotrzebny.
Zadanie ma się zakończyć gdy wprowadzona liczba jest równa 0,
a nie gdy użytkownik tego sobie zażyczy.
P-134866
Kisiel
Temat założony przez niniejszego użytkownika
» 2015-07-18 21:36:33
Ok, a jak mam to zrobić?
P-134868
JMII89
» 2015-07-18 21:51:00
Na ifach ?
P-134869
progx100
odpowiedz
» 2015-07-19 01:41:45
Nie che wprowadzac w blad czy cos ale wg mnie ten kalkulator choc poprawny na pierwszy rzut oka to po wykonaniu sie jednego dzialania program sie/zakonczy i wtedy wydaje sie byc bezwartosciowy ten 5 case. Brakuje petli ktora dala by userowi mozliwosc dowolnej ilosci razy korzystania z programu az sam user zeche go zamknac wpisujac 5.

Switch(wynik)

Wynik a nie zmienna c powinna znalesc sie w petli jako warunek jej wykonywania np. Wynik!5 i wtedy dowolna ilosc razu wykonuje sie program chyba ze go zamkniesz zerem, czyli:

While(c!=1 && wynik!=5);

Mozesz zmodyfikowac program lub dodac petle(ale proponuje raczej zmienic petle niz dodawac nową)
P-134884
carlosmay
» 2015-07-19 01:59:37
progx100: treść zadania jest jasna.
Użytkonik ma możliwość zakończenia programu wprowadzając liczbę = 0.
Czego tu nie można zrozumieć.
Warunek pętli while powinien zawierać tę możliwość.

C/C++
//...
while( a != 0 && b != 0 )
// tutaj konczymy zabawe

natomiast

3. Wybierz działanie (jeżeli liczba różna od 0)

zabezpieczasz ifem
C/C++
do {
    //...
    if( a != 0 && b != 0 )
    {
        // tutaj umieszczasz całą instrukcję switch
    }
} while( a != 0 && b != 0 )


P-134887
carlosmay
» 2015-07-19 02:07:57

Niepotrzebne moim zdaniem jest wstawianie do tego programu cin.clear i cin.sync
Dlaczego czyszczenie strumienia jest nieważne?


Zabezpiecz wcześniej napisany kalkulator przed podawaniem niepoprawnych liczb
Do tego dodałbym jeszcze sprawdzanie
C/C++
cin.good()
 czy podane dane są prawidłowe.
Można to zrobić dokładniej ale na tym etapie kursu ten sposób jest znany.

P-134888
progx100
re
» 2015-07-19 02:18:46
Ja osobiscie czyszczenia strumienia nie stosowalem i nie bylo problemo z moim kalkulatorem, dlatego tak uwazam ale skoro taka mozliwosc zostala stworzona to moze i warto ją stosowac, na razie nie spotkalem sie z problemem niewyczyszczonego strumienia.
P-134889
« 1 » 2
  Strona 1 z 2 Następna strona