cepluspluszeroix Temat założony przez niniejszego użytkownika |
rozdzial 15. Petla do...while. Kalkulator. » 2017-02-10 01:58:48 Dobry wieczór. Poległem na tym zadaniu :( (nie umiem profesjonalnie zacytowac kodu) #include<iostream> using namespace std; int main() { int wynik, y, z; wynik = 0; cout << "WITAM W MOIM KALKULATORZE!"; cout << endl; cout << endl; do { cout << "aktualny wynik to: " << endl << wynik << endl; cout << endl; cout << endl; cout << "podaj druga liczbe" << endl; cin.clear(); cin.sync(); cin >> y; cout << "wybierz dzialanie:" << endl << "1. Dodawanie" << endl << "2. Odejmowanie" << endl; cout << "3. Mnozenie" << endl << "4. Dzielenie" << endl << "5. Rezygnuj" << endl; cin.clear(); cin.sync(); cin >> z; switch( z ) { case 1: cout << wynik + y; wynik = wynik + y; cout << endl; cout << endl; break; case 2: cout << wynik - y; wynik = wynik - y; cout << endl; cout << endl; break; case 3: cout << wynik * y; wynik = wynik * y; cout << endl; cout << endl; break; case 4: cout << wynik / y; wynik = wynik / y; cout << endl; cout << endl; } } while( y != 0 || z != 5 ); return 0; }
Nie wiem co zle napisalem. Prosze o pomoc. Jeszcze male pytanie: 1. Czy cin.clear(); i cin.sync(); nalezy wpisywac po czy przed cin>>x; Moglby mi ktos wytlumaczyc jaka jest roznica? Pozdrawiam |
|
mateczek |
» 2017-02-10 06:20:09 [cpp]wklejaj kod w znaczniki[/cpp] while( y != 0 && z != 5 ); |
|
mateczek |
» 2017-02-10 12:03:50 1. Czy cin.clear(); i cin.sync(); nalezy wpisywac po czy przed cin>>x; |
jak ci jest potrzebne wyczyszczenie strumienia. Możesz np tylko wtedy gdy wczytanie danych się niepowiedzie. Ale sytuacje są różne #include<iostream> using namespace std;
int wczytajLiczbe() { int y; while( !cin >> y ) { cout << "czyscic strumien można np wtedy gdy jest w bledzie" << endl; cin.clear(); cin.sync(); cout << "podaj druga liczbe jeszcze raz bo cos skopales" << endl; } return y; }
int main() { int y; y = wczytajLiczbe(); cout << "wczytana liczba " << y << endl; }
|
|
cepluspluszeroix Temat założony przez niniejszego użytkownika |
» 2017-02-10 12:56:30 O matko, rozumiem... dla: while( y != 0 && z != 5 ); jesli jeden falsz, to falsz a dla: while( y != 0 || z != 5 ); wszystkie musza sie byc falszem, bo inaczej prawda Dziekuje :) Blednie utozsamilem slowo "spelnia sie" z "prawda". Myslalem na odwrot, ze gdy ||, to nawet przy jednym falszu warunek i tak sie spelnia. No i owszem spelnia sie, ale w tym sensie, ze zwraca prawde, a petla przeciez konczy sie gdy warunek zwraca falsz :) |
|
Biskup |
Mój kod (uwagi, zastrzeżenia) » 2017-02-13 15:32:52 #include <iostream> #include <stdio.h> using namespace std; int main() { float a, b; int c; bool porazka; float wynik; do { cout << "Podaj liczbe 1:\t"; cin >> wynik; cout << "Czy cos nie tak? " << cin.fail() << endl; porazka = cin.fail(); cin.clear(), cin.sync(); } while( porazka != 0 ); cout << "Podana liczba 1 to : " << wynik << endl; do { do { cout << "Podaj liczbe 2:\t"; cin >> b; cout << "Czy cos nie tak? " << cin.fail() << endl; porazka = cin.fail(); cin.clear(), cin.sync(); } while( porazka != 0 ); cout << "Podana liczba 2 to : " << b << endl; if( b == 0 ) { cout << "Blad, podane 0."; return 0; } else do { cout << "Dodawanie [1] Odejmowanie [2] Mnozenie [3] Dzielenie [4] Rezygnuje [5]?\n"; cin >> c; cin.clear(), cin.sync(); cout << endl; } while( c <= 0 || c >= 6 ); switch( c ) { case 1: wynik += b; cout << "Dodawanie=" << wynik << endl; break; case 2: wynik -= b; cout << "Odejmowanie=" << wynik << endl; break; case 3: wynik *= b; cout << "Mnozenie=" << wynik << endl; break; case 4: wynik /= b; cout << "Dzielenie=" << wynik << endl; break; case 5: cout << "Rezygnuje" << endl; break; } } while( b != 0 ); return 0; }
Witam. Podepnę się pod post kolegi, nie będę robił za dużego śmietnika na forum. Wyżej jest taki tam mój tworek potworek. Testowałem go kilka razy i wydaje mi się, że spełnia wszystkie kryteria zadanka. Niemniej będę wdzięczny za wszelkie słowa krytyki i uwagi. Na pewno coś przeoczyłem, ominąłem, czegoś nie zauważyłem. A jeśli wszystko działa to chętnie przyjmę jakieś uwagi na przyszłość. Czego się wystrzegać przy pisaniu, na co zwracać uwagę. Pozdrawiam. PS Chciałem też ten kalkulator rozszerzyć o opcję wyboru sposobu dzielenia (a/b czy b/a) jednak o ile udawało mi się to zrobić IFem to kiedy próbowałem zabezpieczyć to tak jak resztę zmiennych to za kijek nie mogłem dojść do kodu bez errorów. Będę wdzięczny za jakieś naprowadzenie, może źle się za to zabieram. Nie chcę gotowego kodu, w końcu po coś się uczę. Nie mam też swojego, ponieważ przypadkowo nadpisałem go tym obecnym kodem. |
|
latajacaryba |
» 2017-02-13 18:29:45 @up Nie chcę prawić morałów, ale nie podpinaj się tak pod czyjeś tematy :/ Bo później okazuje się, że problem autora jest spychany na drugi plan. Uwierz mi, nie ma problemu jeśli założysz nowy temat. Co do kodu to nie wgłębiałem sie (trochę brak czasu) ale co mi się rzuca w oczy to za dużo pętli(niepotrzebnych), np: do { cout << "Dodawanie [1] Odejmowanie [2] Mnozenie [3] Dzielenie [4] Rezygnuje [5]?\n"; cin >> c; cin.clear(), cin.sync(); cout << endl; }
Usuń pętle pętle i wstaw case'a default. Takie coś oznacza jak gdyby "w przeciwnym wypadku" cout << "wybierz z menu: 1. sniadanie 2. obiad 3. kolacja" cin >> jesc; switch( jesc ) { case 1: case 2: case 3: default: cout << "zly wybor! wpisano liczbe inna niz 1, 2 lub 3" }
|
|
Biskup |
» 2017-02-14 09:09:38 OK, przepraszam, zrobię własny temat. Ignorujcie proszę mój post tutaj i skupcie się na autorze. Tego nie było. Dzięki ryba za komentarz. |
|
« 1 » |