Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Poziom 2 lekcja 1 - do...while

Ostatnio zmodyfikowano 2015-08-23 23:03
Autor Wiadomość
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
"
C/C++
#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;
}
P-136394
pekfos
» 2015-08-16 22:46:13
wynik jest niezainicjalizowane.

C/C++
float wynik = wynik + liczba;
To nie ma sensu.
P-136398
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.

C/C++
/*
    Aplikacja kalkulator

Cel: Wykonac dzialania na podanych dwoch liczbach

Zagrozenia: Dzialania przez 0, oraz niepoprawne dane.

Program ma wyświetlić dostępne opcje poprzedzając wiadomością powitalną.
Użytkownik wybiera jedną z dostępnych opcji, poczym program przechodzi
do wprowadzenia dwoch liczb przez uzytkownika. W przeciwnym wypadku
program informuje o nieodpowiedniej opcji.

Aplikacja weryfikuje poprawnosc wczytania danych i nastepuje wczytanie
wyniku operacji. W przeciwnym wypadku gdy zostana podane nieprawidlowe
dane program wroci do poprzedniego kroku uprzednio informujac o bledzie.

Wyswietlne jest menu dalszych dzialan, uzytkownik ma do dyspozycji
kontynuacje programu lub wyjscie.
*/

#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;
}
P-136420
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 :(
C/C++
#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;
}
P-136688
BadBullPL
» 2015-08-22 11:51:18
Stworzyć zmienną wynik przed pętlą.
P-136690
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.
P-136719
BadBullPL
» 2015-08-22 21:20:51
Po co w tych
case
'ach korzystasz z nowych zmiennych ? Korzystaj ze zmiennej wynik.
P-136720
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
P-136721
« 1 » 2
  Strona 1 z 2 Następna strona