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

Praca domowa petla do ... while.

Ostatnio zmodyfikowano 2016-03-13 10:18
Autor Wiadomość
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 !

C/C++
#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;
}
P-145335
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.
C/C++
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:
C/C++
while( !( std::cin >> zmienna ) ) {
    // czyszczenie strumienia
}
P-145336
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 !
P-145337
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.

C/C++
#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;
}


P-145922
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.
P-145923
Grzegorzdut
» 2016-03-13 10:18:32
Ja swój program napisałem tak:
C/C++
#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.
P-145961
« 1 »
  Strona 1 z 1