Poziom 2 lekcja 1 - do...while
Ostatnio zmodyfikowano 2015-08-23 23:03
BlueSky Temat założony przez niniejszego użytkownika |
Poziom 2 lekcja 1 - do...while » 2015-08-16 22:18:09 Mam problem z wykonaniem pracy domowej. Napisałem prosty kalkulator ale program źle wyświetla wynik. Zamiast np. liczby całkowitej wyświetla: 4,82353e+32. Może ktoś podpowiedzieć gdzie zrobiłem błąd? "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 " #include <iostream> int main() { float wynik; do { float liczba; std::cout << "Wprowadz liczbe: "; std::cin >> liczba; std::cin.clear(); std::cin.sync(); if( liczba != 0 ) { 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; int dzialanie; std::cin >> dzialanie; std::cin.clear(); std::cin.sync(); switch( dzialanie ) { case 1: { float wynik = wynik + liczba; std::cout << "Wynik = " << wynik << std::endl; break; } case 2: { float wynik = wynik - liczba; std::cout << "Wynik = " << wynik << std::endl; break; } case 3: { float wynik = wynik * liczba; std::cout << "Wynik = " << wynik << std::endl; break; } case 4: { float wynik = wynik / liczba; std::cout << "Wynik = " << wynik << std::endl; break; } } } } while( wynik != 0 ); return 0; }
|
|
pekfos |
» 2015-08-16 22:46:13 wynik jest niezainicjalizowane. float wynik = wynik + liczba;
|
To nie ma sensu. |
|
Erpeg |
» 2015-08-17 14:43:38 Też miałem problem z tym zadaniem, ja sobie po prostu zmodyfikowałem trochę treść zadania określiłem sobie projekt i go zrobiłem :) Chyba wszystko jest ok, ale ocenianie zostawiam bardziej doświadczonym. Jeśli chcieliby ocenić kod, wytknąć błędy to byłbym wdzięczny.
#include <iostream> int main() { std::cout << "Witaj uzytkowniku w aplikacji kalkulatora!" << std::endl; bool petla = true; do { int opcja; 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]Wyjscie" << std::endl; std::cout << "Wybierz opcje: "; std::cin.clear(); std::cin.sync(); std::cin >> opcja; if( opcja >= 1 && opcja <= 5 ) { if( opcja != 5 ) { int a; bool as; std::cout << "Podaj liczbe a: "; std::cin.clear(); std::cin.sync(); std::cin >> a; as = std::cin.good(); if( a == 0 || !as ) std::cout << "Nie mozesz wprowadzic takiej opcji" << std::endl; else { int b; bool bs; std::cout << "Podaj liczbe b: "; std::cin.clear(); std::cin.sync(); std::cin >> b; bs = std::cin.good(); if( b == 0 || !bs ) std::cout << "Nie mozesz wprowadzic takiej opcji" << std::endl; else { switch( opcja ) { case 1: std::cout << "Wynik " << a << " + " << b << " = " << a + b << std::endl; break; case 2: std::cout << "Wynik " << a << " - " << b << " = " << a - b << std::endl; break; case 3: std::cout << "Wynik " << a << " * " << b << " = " << a * b << std::endl; break; case 4: std::cout << "Wynik " << a << " / " << b << " = " << a / b << std::endl; } } } } else petla = false; } else std::cout << "Nie ma takiej opcji!" << std::endl; } while( petla ); std::cout << "Dziekujemy za skorzystanie z aplikacji!" << std::endl; return 0; }
|
|
BlueSky Temat założony przez niniejszego użytkownika |
» 2015-08-22 11:31:01 Dzięki pekfos za odpowiedź. Zmieniłem to działanie. W tym momencie program liczy mi wyniki względem zera. Dodawanie i odejmowanie liczy dobrze. Mam następujący problem. Nie wiem jakie działanie mam wprowadzić w case'ach żeby zaczynać nową pętle od wyniku jaki otrzymałem w case'ach. Tak jak działa normalny kalkulator. Głowie się nad tym już kilka dni i nic :( #include <iostream> int main() { bool petla = true; do { float wynik; wynik = 0; float liczba; std::cout << "Wprowadz liczbe: "; std::cin >> liczba; std::cin.clear(); std::cin.sync(); if( liczba != 0 ) { 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; int dzialanie; std::cin >> dzialanie; std::cin.clear(); std::cin.sync(); switch( dzialanie ) { case 1: { float suma; suma = wynik + liczba; std::cout << "Wynik = " << suma << std::endl; break; } case 2: { float roznica = wynik - liczba; std::cout << "Wynik = " << roznica << std::endl; break; } case 3: { float iloczyn = wynik * liczba; std::cout << "Wynik = " << iloczyn << std::endl; break; } case 4: { float iloraz = wynik / liczba; std::cout << "Wynik = " << iloraz << std::endl; break; } } } } while( petla ); return 0; } |
|
BadBullPL |
» 2015-08-22 11:51:18 Stworzyć zmienną wynik przed pętlą. |
|
BlueSky Temat założony przez niniejszego użytkownika |
» 2015-08-22 20:50:27 Tyle że to nic nie da. Program ma działać w ten sposób, że liczę sobie jakiś działanie nazwijmy je "a". Następnie chcę policzyć nowe działanie np. odjąć od "a" "b". Później chce pomnożyć przez wynik "b" liczbę "c". Chodzi o to aby za każdym nowym działaniem bazować na wyniku poprzedniego działania. W tym właśnie mam problem ponieważ nie wiem za chiny ludowe jakie działanie ma być w case'ach żeby to działało :/ Wiem, że marudzę ale proszę was jeszcze raz o pomoc. |
|
BadBullPL |
» 2015-08-22 21:20:51 Po co w tych case 'ach korzystasz z nowych zmiennych ? Korzystaj ze zmiennej wynik. |
|
Vister26 |
» 2015-08-22 21:21:38 Bo ty przecież teraz w ogóle nie używasz 'wynik'. Musisz jeszcze w każdym 'case' przypisać do tej zmiennej wynik danego działania i usunąć zmienne 'suma', 'różnica' itd. Poza tym podczas dzielenia sprawdź czy 'liczba' nie jest zerem |
|
« 1 » 2 |