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ść
carlosmay
» 2015-07-19 02:33:37
Problem pojawi się gdy podasz niepoprawne dane.
Np cin oczekuje na wartość typu int a użytkownik
Oprócz liczby doda literę.
Wtedy przy kolejnej pętli cin wykryje niezgodność typów
i ustawi flagę błędu.
Poleci następny obieg pętli bo cin nie pracuje w stanie
błędu więc nie będzie czekać na wprowadzenie danych, póki
Flaga błędu nie zostanie skasowana (cin.clear()),
oraz bufor strumienia nie zostanie oczyszczony
z niepoprawnych danych (cin.sync()).

Proponuje odpalić kalkulator i do wprowadzonej liczby dodać jakieś litery.
Z reguły pętla chodzi w koło.
P-134890
Kisiel
Temat założony przez niniejszego użytkownika
» 2015-07-19 09:42:18
Chyba wszystko poprawione
C/C++
#include <iostream>
using namespace std;

int main()
{
    float a;
    float b;
    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 << " 0 - rezygnuj " << endl;
        cin >> wynik;
        switch( wynik )
        {
            if( a != 0 && b != 0 )
            {
               
               
            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 0:
                cout << "Zakonczono" << endl;
            }
        }
    } while( a != 0 && b != 0 && wynik != 0 );
   
    return 0;
}
P-134892
BadBullPL
» 2015-07-19 10:19:04
Zabezpiecz wcześniej napisany kalkulator przed podawaniem niepoprawnych liczb i operacji
 gdzie to?
btw. To nie jest zadanie z rozdziału 18.
P-134893
carlosmay
» 2015-07-19 10:28:34
Moje posty miały nakierować cię na sposób działania.

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.

Z treści wynika, że podajesz tylko jedną liczbę.
Zmienna wynik ma być wyświetlona przed działaniem,
a później zaktualizowana o podaną liczbę.
Wykonaj obliczenia jeśli ta jedna wprowadzona liczba jest różna od zera.
Program wykonuje obliczenia i wraca na początek pętli.

inicjalizujesz:
C/C++
int opcja = 0;
float liczba = 0;
float wynik = 0;

teraz do obsługi switch'a używasz zmiennej opcja.

aktualizacja wyniku:

C/C++
wynik += liczba;
 dla dodawania (patrz operatory arytmetyczne).

w ifie wystarczy, że
C/C++
if( liczba != 0 )
a w while
C/C++
while( liczba != 0 && opcja != 0 )

Czyszczenie strumienia wstaw przed wprowadzeniem liczby.

edit: nie zwróciłem uwagi wcześniej, to zadanie jest z rozdziału 15. Ale to szczegół.
Treść zadania jest na początku postu.
P-134894
1 « 2 »
Poprzednia strona Strona 2 z 2