MagdaNorsk Temat założony przez niniejszego użytkownika |
Rozdział 15. Kalkulator. Proszę o sprawdzenie » 2019-11-05 18:05:13 Proszę o sprawdzenie zadania i ocenę. Nadmienię, że jestem totalnie zielona i to są moje pierwsze kroki w tej materii. Przeglądałam rozwiązania innych forumowiczów i traktowałam je jako swoistego rodzaju wskazówki. Mam wrażanie jednak, że to co napisałam jest bardzo niezgrabne. # include <iostream>
using namespace std;
float x, y, wynik; int opcja;
int main() { wynik = 0; cout << "Obecny wynik to: " << wynik << endl; cout << "aby przejsc dalej wybierz enter" << endl; do { if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); cout << "Wpisz pierwsza liczbe rozna od zera" << endl; cin >> x; } while( cin.fail() ); wynik += x; if( x == 0 ) return 0; cout << " Wybierz jedna z opcji w menu: " << endl; cout << "MENU" << endl; cout << "-----------" << endl; cout << "1. Dodawanie " << endl; cout << "2. Odejmowanie" << endl; cout << "3. Mnozenie" << endl; cout << "4. Dzielenie" << endl; cout << "5. Rezygnuj" << endl; cin >> opcja; switch( opcja ) { case 1: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0; if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); cout << x << "+" << y << "=" << wynik + y << endl; break; case 2: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0; if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); cout << x << "-" << y << "=" << wynik - y << endl; break; case 3: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0; if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); cout << x << "*" << y << "=" << wynik * y << endl; break; case 4: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0; if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); cout << x << "/" << y << "=" << wynik / y << endl; break; case 5: return 0; break; default: cout << "Nie wybrales dostepnych opcji w menu" << endl; } return 0; }
|
|
pekfos |
» 2019-11-05 19:26:25 cout << "aby przejsc dalej wybierz enter" << endl;
Dobre sobie. Czerwona ramka w Obsługa strumienia wejściowego. cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0;
if( cin.fail() ) cin.clear();
cin.ignore( 1000, '\n' ); Nie ma powodu, żeby to było skopiowane 4 razy w kodzie. cout << x << "+" << y << "=" << wynik + y << endl;
Jeśli wynik jest faktycznie zawsze równy x, to nie ma sensu mieć dwóch zmiennych. 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. |
Punkt piąty nie jest zrealizowany. |
|
MagdaNorsk Temat założony przez niniejszego użytkownika |
» 2019-11-05 19:45:50 Wracam zatem do pracy. Bardzo Ci dziękuje. |
|
MagdaNorsk Temat założony przez niniejszego użytkownika |
» 2019-11-11 17:43:17 Odniosłam się do Twoich wskazówek i poprawiłam większość. Niestety nie za bardzo wiem jak "ugryźć" Twoją drugą wskazówkę. Skoro mam nie kopiować tego 4 razy w kodzie to w którym miejscu mam wstawiać kod czyszczący bufor? Wydaje mi się, że czytam ze zrozumieniem rozdział 9 ale wygląda na to, że nie :( Poprawiony kod wygląda następująco. Bardzo proszę o dalsze uwagi # include <iostream>
using namespace std;
float x, y, wynik; int opcja;
int main() { do { cout << "Obecny wynik to: " << wynik << endl; cout << "Wpisz pierwsza liczbe rozna od zera" << endl; cin >> x; do { if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); } while( cin.fail() ); if( x == 0 ) return 0; cout << " Wybierz jedna z opcji w menu: " << endl; cout << "MENU" << endl; cout << "-----------" << endl; cout << "1. Dodawanie " << endl; cout << "2. Odejmowanie" << endl; cout << "3. Mnozenie" << endl; cout << "4. Dzielenie" << endl; cout << "5. Rezygnuj" << endl; cin >> opcja; switch( opcja ) { case 1: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0; if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); { wynik = x + y; cout << x << "+" << y << "=" << wynik << endl; break; } case 2: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0; if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); { wynik = x - y; cout << x << "-" << y << "=" << wynik << endl; break; } case 3: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0; if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); { wynik = x * y; cout << x << "*" << y << "=" << wynik << endl; break; } case 4: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0; if( cin.fail() ) cin.clear(); cin.ignore( 1000, '\n' ); { wynik = x / y; cout << x << "/" << y << "=" << wynik << endl; break; } case 5: return 0; break; default: cout << "Nie wybrales dostepnych opcji w menu" << endl; break; } } while(( x != 0 ) &&( y != 0 ) ); return 0; }
|
|
pekfos |
» 2019-11-11 18:25:13 Skoro mam nie kopiować tego 4 razy w kodzie to w którym miejscu mam wstawiać kod czyszczący bufor? |
Gdyby chodziło o czyszczenie bufora, była by mowa o 5 razach. Mówię o tych czterech, które są w switch. Są tam, chociaż jest to niezależne od wybranej operacji. |
|
MagdaNorsk Temat założony przez niniejszego użytkownika |
» 2019-11-12 10:07:07 Czy w takim razie w każdym "case" po wprowadzeniu drugiej liczby wystarczy wpisać warunek jak poniżej? switch( opcja ) { case 1: cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( !( cin >> y ) &&( y == 0 ) ) return 0; else { wynik = x + y; cout << x << "+" << y << "=" << wynik << endl; break; } case 2: ...
|
|
rottingham |
» 2019-11-12 21:20:14 cout << "Podaj druga liczbe rozna od zera:" << endl; cin >> y; if( y == 0 ) return 0;
if( cin.fail() ) cin.clear();
cin.ignore( 1000, '\n' );
Bez znaczenia, którą opcję wybierze użytkownik, to i tak musi to być wykonane. Moim zdaniem śmiało możesz to wstawić przed instrukcją warunkową switch...case. |
|
« 1 » |