[ Poziom 2 ] [ Rozdział 18 ] praca domowa
Ostatnio zmodyfikowano 2015-07-19 10:28
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. #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; }
|
|
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.
|
|
Kisiel Temat założony przez niniejszego użytkownika |
» 2015-07-18 21:36:33 Ok, a jak mam to zrobić? |
|
JMII89 |
» 2015-07-18 21:51:00 Na ifach ? |
|
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ą)
|
|
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ść. while( a != 0 && b != 0 )
natomiast 3. Wybierz działanie (jeżeli liczba różna od 0)
|
zabezpieczasz ifem do { if( a != 0 && b != 0 ) { } } while( a != 0 && b != 0 )
|
|
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 czy podane dane są prawidłowe. Można to zrobić dokładniej ale na tym etapie kursu ten sposób jest znany. |
|
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. |
|
« 1 » 2 |