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

[lekcja 18]kalkulator, sprawdzenie.

Ostatnio zmodyfikowano 2012-12-23 00:27
Autor Wiadomość
Leo
Temat założony przez niniejszego użytkownika
[lekcja 18]kalkulator, sprawdzenie.
» 2012-12-15 22:36:54
Witam, mam problem nie codzienny. Nie jest nim brak satysfakcjonującego działania programu jakim jest kalkulator.
Chiałbym po prostu się dowiedzieć, czy i jak pewne kwestie można by zrobić lepiej. Czy kod jest czytelny, i
w miarę dobrze napisany ? Myślę że zabezpieczyłem go w wystarczający sposób przed zwyklą złośliwością "użytkownika",
ktoś udowodni mi że się mylę ? ;>

C/C++
#include <iostream>
int main()
{
    //zmienne
    int wyjscie;
    int wyjscie2;
    int decyzja;
    double a;
    double b;
   
    // mechanizm sprawdzania liczb - jesli sa nieprawidlowe to nie da rady scrashowac programu
    // Ta czesc sprawdza 1 liczbe
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "podaj pierwsza dowolna liczbe calkowita ";
        std::cout << std::endl;
        std::cin >> a;
        std::cout << std::endl;
       
        if( std::cin.good() < 1 )
        {
            std::cout << "Podana wartosc nie jest liczba calkowita. " << std::endl;
        }
       
       
    } while( !std::cin.good() > 0 );
   
    std::cout << std::endl;
   
   
    //ta czesc sprawdza 2 liczbe
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "podaj druga dowolna liczbe calkowita ";
        std::cout << std::endl;
        std::cin >> b;
        std::cout << std::endl;
       
        if( std::cin.good() < 1 )
        {
            std::cout << "Podana wartosc nie jest liczba calkowita. " << std::endl;
        }
       
       
    } while( !std::cin.good() > 0 );
   
    std::cout << std::endl;
   
   
    std::cout << std::endl;
    std::cout << std::endl;
   
    do
    {
        //menu
        std::cout << "  ========================" << std::endl;
        std::cout << "  = Pierwsza liczba to " << a << " =" << std::endl;
        std::cout << "  = Druga liczba to    " << b << " =" << std::endl;
        std::cout << "  ========================" << std::endl << std::endl << std::endl;
       
       
       
        std::cout << "Chcialbys dodawac, odejmowac, mnozyc, czy tez dzielic ?" << 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. zmien pierwsza liczbe" << std::endl;
        std::cout << "6. zmien druga liczbe" << std::endl;
        std::cout << "7. wyjscie" << std::endl;
        std::cout << std::endl;
        std::cin >> decyzja;
       
        //obliczanie poszczegolnych dzialan i wyjscie z programu.
       
        switch( decyzja )
        {
           
           
           
            //dodawanie
        case 1:
           
            std::cout << std::endl;
            std::cout << "dodawanie,  " << a << " + " << b << std::endl << std::endl;
            std::cout << "twoj wynik to = " << a + b << std::endl;
            break;
           
           
           
            //odejmowanie
        case 2:
           
            std::cout << std::endl;
            std::cout << "odejmowanie,  " << a << " - " << b << std::endl << std::endl;
            std::cout << "twoj wynik to = " << a - b << std::endl;
            break;
           
           
           
            //mnożenie
        case 3:
           
            std::cout << std::endl;
            std::cout << "mnozenie,  " << a << " * " << b << std::endl << std::endl;
            std::cout << "twoj wynik to = " << a * b << std::endl;
            break;
           
           
           
            //dzielenie, zabezpieczona jest opcja dzielenia przez 0
        case 4:
           
            std::cout << std::endl;
            if( b == 0 )
            {
                std::cout << "Nie dziel cholero przez 0!" << std::endl;
                std::cout << "W takim razie koniec programu." << std::endl;
                return( 0 );
            }
            std::cout << "dzielenie,  " << a << " / " << b << std::endl << std::endl;
            std::cout << "twoj wynik to = " << a / b << std::endl;
            break;
           
           
           
            //zmiana liczby a ( pierwszej )
        case 5:
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "podaj pierwsza dowolna liczbe calkowita ";
                std::cout << std::endl;
                std::cin >> a;
                std::cout << std::endl;
               
                if( std::cin.good() < 1 )
                {
                    std::cout << "Podana wartosc nie jest liczba calkowita. " << std::endl;
                }
            } while( !std::cin.good() > 0 );
           
            break;
           
           
           
            //zmiana liczby b ( drugiej )
        case 6:
           
            do
            {
                std::cin.clear();
                std::cin.sync();
                std::cout << "podaj druga dowolna liczbe calkowita ";
                std::cout << std::endl;
                std::cin >> b;
                std::cout << std::endl;
               
                if( std::cin.good() < 1 )
                {
                    std::cout << "Podana wartosc nie jest liczba calkowita. " << std::endl;
                }
            } while( !std::cin.good() > 0 );
           
           
           
        case 7:
           
            wyjscie = 1;
            break;
           
           
           
           
        default:
            std::cout << std::endl;
            std::cout << "Mialo byc od 1 do 7 ;>" << std::endl;
            break;
        }
       
       
       
        if( wyjscie != 1 )
        {
            std::cout << "_______________________________" << std::endl << std::endl << std::endl;
            std::cout << "Nowe dzialanie." << std::endl << std::endl;
        }
       
       
       
    } while( wyjscie != 1 );
   
   
    std::cout << std::endl;
    std::cout << "koniec programu" << std::endl;
}
P-71138
Mrovqa
» 2012-12-16 13:01:15
Myślę że zabezpieczyłem go w wystarczający sposób przed zwyklą złośliwością "użytkownika",
ktoś udowodni mi że się mylę ? ;>
Pomnóż/podziel -2147483647 -2147483648 przez -1 :)

Co do jakości kodu - im więcej będziesz pisał, tym lepiej będziesz to robił. Zobaczysz co jest wygodne, co nie, jak organizować kod, dzielić go na pliki, klasy, funkcje itp.

@down fakt, pomyliłem się o 1 :P Coś dziwnie, bo kopiowałem z cplusplus reference... :/
P-71175
Elaine
» 2012-12-16 14:11:22
Pomnóż/podziel -2147483647 przez -1
Bez problemu.
-2147483647 * (-1) = 2147483647
-2147483647 / (-1) = 2147483647
P-71180
Leo
Temat założony przez niniejszego użytkownika
» 2012-12-22 22:11:33
W tym wypadku problemem jest wielkość zmiennej double, czy to coś innego ?
Jeśli tak to można zrobić proste zabezpieczenie nie pozwalające na używanie liczb większych niz 2147483647.

Jeśli chodzi o styl - czy akceptowalny jest nawyk nie uczenia się na pamięć, dokładnej budowy części kodu,
tylko posiłkowanie się gotowymi teoretycznymi przykładami ? Np. zamiast pamiętać dokładniej zapis komendy rand () lub dokładnego wpisywania argumentów w funkcji kopiuję ją w całości z np. wcześniejszej pracy itd. . Jakoś nie muszę przypominać sobie jak to działa ( zmieniam dane i gotowe ), a oszczędza czasem sporo czasu.

Nawyk wyrobiony w zamieszchłych czasach na informatyce podczas nauki html - szablon, puste przykładowe tabele i jazda, w 8 minut strona gotowa.
P-71696
CodeMeister
» 2012-12-23 00:27:45
hmm... to zależy - funkcje, które często będziesz używał wypada pamiętać a reszta może być tak jak pisałeś
P-71709
« 1 »
  Strona 1 z 1