Rozdz. 15 ppkt. 2 - kalkulator - prośba o sprawdzenie zadania domowego
Ostatnio zmodyfikowano 2018-11-06 11:18
rottingham Temat założony przez niniejszego użytkownika |
Rozdz. 15 ppkt. 2 - kalkulator - prośba o sprawdzenie zadania domowego » 2018-11-05 18:34:49 Cześć. Napisałem kalkulator z rozdz. 15. Czy dobrze go napisałem? Co można zrobić lepiej? Z góry dzięki za pomoc! :) Nie sądziłem, że kiedyś dojdę do tego poziomu a im dalej w las tym więcej motywacji, dlatego ogromne dzięki za dotychczasowe rady. Pozdro! #include <iostream> #include <limits> using namespace std;
int main() { int a; int b; int c; int d; int e; do { do { cout << "\nWprowadz pierwsza liczbe (aby wyjsc wprowadz 0)" << endl; cin >> a; bool aCzyBlad = d = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( d ); if( a == 0 ) return 0; else if( a != 0 ) { cout << "\nWybierz dzialanie\n" "[1] Dodawanie\n" "[2] Odejmowanie\n" "[3] Mnozenie\n" "[4] Dzielenie\n" "[5] Zakoncz\n" << endl; cin >> c; if( c == 1 ) { do { cout << "Wprowadz druga liczbe " << a << " + "; cin >> b; bool bCzyBlad = e = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( e ); cout << "Wynik dodawania to " << a << " + " << b << " = " << a + b << endl; } } if( c == 2 ) { do { cout << "Wprowadz druga liczbe " << a << " - "; cin >> b; bool bCzyBlad = e = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( e ); cout << "Wynik odejmowania to " << a << " - " << b << " = " << a - b << endl; } if( c == 3 ) { do { cout << "Wprowadz druga liczbe " << a << " * "; cin >> b; bool bCzyBlad = e = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( e ); cout << "Wynik mnozenia to " << a << " * " << b << " = " << a * b << endl; } if( c == 4 ) { do { cout << "Wprowadz druga liczbe " << a << " / "; cin >> b; bool bCzyBlad = e = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( e ); cout << "Wynik dzielenia to " << a << " / " << b << " = " << a / b << endl; } if( c == 5 ) return 0; } while( b != 0 ); return 0; }
|
|
pekfos |
» 2018-11-05 18:51:48 do { cout << "Wprowadz druga liczbe " << a << " + "; cin >> b; bool bCzyBlad = e = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( e );
Zmienna bCzyBlad skopiowana z kursu nic tu nie robi. Ma za mały zakres by coś robić. Więc dodałeś e, która ma tragicznie złą kombinację zakresu, nazwy i typu. I z jakiegoś powodu masz 2 takie zmienne, pomimo tego że nigdy nie używasz obu naraz. Poza dzieleniem przez zero, kod wygląda na poprawny. Za styl dostajesz dwóję. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2018-11-05 22:13:55 Ok, rozumiem. Idąc za Twoimi sugestiami napisałem poniższy kod. Czy to już wygląda dobrze i czy spełnia założenia zawarte w zadaniu domowym? Co można zrobić lepiej? #include <iostream> #include <limits> using namespace std;
int main() { int liczba_pierwsza; int liczba_druga; int wybor_dzialania; bool sprawdzamy_poprawnosc; do { do { cout << "\nWprowadz pierwsza liczbe (aby wyjsc wprowadz 0)" << endl; cin >> liczba_pierwsza; sprawdzamy_poprawnosc = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( sprawdzamy_poprawnosc ); if( liczba_pierwsza == 0 ) return 0; else if( liczba_pierwsza != 0 ) { cout << "\nWybierz dzialanie\n" "[1] Dodawanie\n" "[2] Odejmowanie\n" "[3] Mnozenie\n" "[4] Dzielenie\n" "[5] Zakoncz\n" << endl; cin >> wybor_dzialania; if( wybor_dzialania == 1 ) { do { cout << "Wprowadz druga liczbe " << liczba_pierwsza << " + "; cin >> liczba_druga; sprawdzamy_poprawnosc = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( sprawdzamy_poprawnosc ); cout << "Wynik dodawania to " << liczba_pierwsza << " + " << liczba_druga << " = " << liczba_pierwsza + liczba_druga << endl; } } if( wybor_dzialania == 2 ) { do { cout << "Wprowadz druga liczbe " << liczba_pierwsza << " - "; cin >> liczba_druga; sprawdzamy_poprawnosc = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( sprawdzamy_poprawnosc ); cout << "Wynik odejmowania to " << liczba_pierwsza << " - " << liczba_druga << " = " << liczba_pierwsza - liczba_druga << endl; } if( wybor_dzialania == 3 ) { do { cout << "Wprowadz druga liczbe " << liczba_pierwsza << " * "; cin >> liczba_druga; sprawdzamy_poprawnosc = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } while( sprawdzamy_poprawnosc ); cout << "Wynik mnozenia to " << liczba_pierwsza << " * " << liczba_druga << " = " << liczba_pierwsza * liczba_druga << endl; } if( wybor_dzialania == 4 ) { do { cout << "Wprowadz druga liczbe " << liczba_pierwsza << " / "; cin >> liczba_druga; sprawdzamy_poprawnosc = cin.fail(); cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); if( liczba_druga == 0 ) cout << "Nie dzielimy przez zero!\n" << endl; } while( sprawdzamy_poprawnosc || liczba_druga == 0 ); cout << "Wynik dzielenia to " << liczba_pierwsza << " / " << liczba_druga << " = " << liczba_pierwsza / liczba_druga << endl; } if( wybor_dzialania == 5 ) return 0; } while( liczba_druga != 0 ); return 0; }
|
|
pekfos |
» 2018-11-06 09:25:51 bCzyBlad mówiło jasno, co znaczy wartość tej zmiennej. sprawdzamy_poprawnosc już nie bardzo. No i za długie te nazwy. Jedna litera źle, pełnie zdanie też źle. Wystarczyłoby liczba1, liczba2, dzialanie.
Poza tym wygląda ok. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2018-11-06 11:18:42 Faktycznie, chyba z przemęczenia przekombinowałem.
Wielkie dzięki za pomoc! |
|
« 1 » |