Praca domowa petla do ... while.
Ostatnio zmodyfikowano 2016-03-13 10:18
rastaman89 Temat założony przez niniejszego użytkownika |
Praca domowa petla do ... while. » 2016-02-26 16:20:04 Witam ! Niedawno zacząłem walczyć z c++. Kurs sprawia mi dużo radości i zabawy. Ale do sedna. Udało mi się stworzyć działający kalkulator który odrzuca błędne wpisy. Z tym, że jak to u początkującego podejrzewam, że kod i jego przejrzystość nie należy do najlepszych. Czy mógłby ktoś rzucić na to okiem i wytknąć ewentualne błędy ? :) Pozdrawiam ! #include <iostream> int main() { int a; int b; int dzialanie; do { std::cout << "Witam w kalkulatorze, Jakie dzia³anie chesz wykonac?" << std::endl << "[1] Dodawanie" << std::endl << "[2] Odejmowanie" << std::endl << "[3] Mnozenie" << std::endl << "[4] Dzielenie" << std::endl << "[5] Rezygnuj" << std::endl; std::cin >> dzialanie; if( dzialanie > 0 ) if( dzialanie <= 4 ) { do { std::cout << "Podaj liczbe a ="; std::cin >> a; std::cout << std::endl; if( a == 0 ) std::cout << "liczba musi byc rozna od 0." << std::endl; } while( a == 0 ); do { std::cout << "podaj liczbe b ="; std::cin >> b; std::cout << std::endl; if( b == 0 ) std::cout << "Liczba musi byc rozna od 0." << std::endl; std::cout << std::endl; } while( b == 0 ); } switch( dzialanie ) { case( 1 ) : { std::cout << "a + b =" << a + b << std::endl; } break; case( 2 ) : { std::cout << "a - b =" << a - b << std::endl; } break; case( 3 ) : { std::cout << "a * b =" << a * b << std::endl; } break; case( 4 ) : { std::cout << "a / b =" << a / b << std::endl; } break; case( 5 ) : std::cout << "Dziekuje za wspolprace, Pozdrawiam!" << std::endl; break; default: std::cout << "zrobiles cos zle, jeszcze raz" << std::endl; break; } std::cout << std::endl; } while( dzialanie != 5 ); return 0; }
|
|
carlosmay |
» 2016-02-26 16:38:42 Czy mógłby ktoś rzucić na to okiem i wytknąć ewentualne błędy ? :) |
Analiza innych kodów i próba wdrażania ich w swoje projekty. Najlepsze efekty daje dojście samemu do innych lepszych rozwiązań. Udało mi się stworzyć działający kalkulator który odrzuca błędne wpisy. |
Jeśli coś działa, nie trza psuć. Do rzeczy. if( dzialanie > 0 ) if( dzialanie <= 4 ) |
można złożyć w jedną instrukcję warunkową z warunkiem złożonym. który odrzuca błędne wpisy. |
Po wpisaniu literki program zapętla się. Bezpieczniejsze wprowadzanie danych: while( !( std::cin >> zmienna ) ) { } |
|
rastaman89 Temat założony przez niniejszego użytkownika |
» 2016-02-26 16:44:59 I wlasnie o to mi chodziło ;) Nie próbowalem wpisywac literek .. ;) W takim razie sprobuje coś na to poradzic ;) Dzieki za odpowiedz i pozdrawiam ! |
|
Szarek |
» 2016-03-12 13:30:27 Witam, to mój pierwszy post na forum. Także, zaczynam walkę z C++ i zrobiłem te zadanie z kalkulatorem, niestety nie mogę dojść jak w moim kodzie zrobić, aby po wpisaniu liczby ( nie litery ) 0 zamknąć program ( jak użyję kodu "if ( a==0 ) return 0;" zamyka mi tez po wpisaniu litery ). Oto mój kod, zdaję sobie sprawę, że można to napisać krócej, dlatego proszę o rady :) z góry dzięki. #include <iostream> #include <cstdlib> using namespace std;
float a, b; int operacja;
int main() { do { do { cout << "Wybierz liczbe 1" << endl; cin.clear(); cin.sync(); cin >> a; system( "cls" ); if( cin.fail() ) cout << "Nie uzywaj liter i znakow specjalnych, tylko liczby !" << endl; } while( cin.fail() ); do { cout << "Wybierz liczbe 2" << endl; cin.clear(); cin.sync(); cin >> b; system( "cls" ); if( cin.fail() ) cout << "Nie uzywaj liter i znakow specjalnych, tylko liczby !" << endl; } while( cin.fail() ); cout << "Wybierz Operacje: " << endl; cout << "[1] Dodawanie" << endl; cout << "[2] Odejmnowanie" << endl; cout << "[3] Mnozenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Wyjscie" << endl; do { cin.clear(); cin.sync(); cin >> operacja; system( "cls" ); if( cin.fail() ) cout << "Nie uzywaj liter i znakow specjalnych, tylko liczby 1-5 !" << endl; if( cin.good() ) system( "cls" ); switch( operacja ) { case 1: cout << endl; cout << "Wynik dodawania to " << a + b << endl << endl; break; case 2: cout << endl; cout << "Wynik odejmowania to " << a - b << endl << endl; break; case 3: cout << endl; cout << "Wynik mnozenia to " << a * b << endl << endl; break; case 4: cout << endl; cout << "Wynik dzielenia to " << a / b << endl << endl; break; case 5: cout << endl; cout << "Dziekujemy za skorzystanie z kalkulatora" << endl; return 0; default: cout << "Wybierz opcje od 1 do 5 !" << endl; cout << "[1] Dodawanie" << endl; cout << "[2] Odejmnowanie" << endl; cout << "[3] Mnozenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Wyjscie" << endl; break; } } while( operacja > 5 || operacja < 1 ); } while( a != 0 && b != 0 ); cout << "KONIEC" << endl; return 0; }
|
|
carlosmay |
» 2016-03-12 13:37:06 nie mogę dojść jak w moim kodzie zrobić, aby po wpisaniu liczby ( nie litery ) 0 zamknąć program |
Zmienną operacja zadeklaruj przed pętlą z warunkiem while( a != 0 && b != 0 ); i dodaj tutaj warunek dla zmiennej operacja. |
|
Grzegorzdut |
» 2016-03-13 10:18:32 Ja swój program napisałem tak: #include <iostream> int main() { int wynik; int liczba1; int dzialanie; bool check; wynik = 0; do { std::cout << "Obecny wynik to: " << wynik << std::endl; do { std::cout << "Wprowadz liczbe: "; std::cin >> liczba1; check = std::cin.fail(); if( std::cin.fail() ) std::cout << "Zrobil Ty cos nie tak jak trza." << std::endl << std::endl; std::cin.clear(); std::cin.sync(); } while( check ); if( liczba1 != 0 ) { do { std::cout << "Wybierz dzialanie: " << std::endl; std::cout << "1. Dodawanie" << std::endl; std::cout << "2. Odejmowanie" << std::endl; std::cout << "3. Mnozenie" << std::endl; std::cout << "4. Dzielenie" << std::endl; std::cout << "5. Rezygnuj" << std::endl; std::cin >> dzialanie; check = std::cin.fail(); std::cin.clear(); std::cin.sync(); if( dzialanie <= 0 || dzialanie > 5 || check ) std::cout << "Nie ma takiego dzialania."; } while( dzialanie <= 0 || dzialanie > 5 || check ); switch( dzialanie ) { case 1: wynik += liczba1; break; case 2: wynik -= liczba1; break; case 3: wynik *= liczba1; break; case 4: wynik /= liczba1; break; case 5: std::cout << "Nie wykonano zadnego dzialania." << wynik << std::endl; break; } } } while( liczba1 != 0 ); std::cout << "Koniec"; return 0; }
Fajna sprawa z tym programowaniem. Trochę się nakombinowałem przy tym zadaniu dlatego trochę namieszałem z tabulatorami. Przy sprawdzaniu wprowadzania danych wprowadziłem zmienną check, która zapamiętywała stan cin.fail przed czyszczeniem (tu bylo najwiecej kombinowania). Czytałem rożne rozwiązania na forum, ale w każdym był kod, którego nie było jeszcze w kursie, wiec kombinowałem. :P Ponadto fajnie wiedzieć, że istnieje /= i *=. Co by można poprawić? Podziękowania dla autora kursu. |
|
« 1 » |