• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Prosty kalkulator z użyciem 'case' :

iDELTI

C++
Joined
Jan 15, 2010
Messages
2,033
Reaction score
69
Location
Zimbabwe
Więc tak, napisałem sobie prosty kalkulator w C++ i zastanawia mnie pewien fakt z nim związany, mianowicie czy można go bardziej zoptymalizować?:
Sam kod działa tak jak powienien, zastosowałem 'kejse' i hula jak należy, acz czy to samo można by napisać prościej?:)
PHP:
#include <iostream>

using namespace std;

int main()
{
    double a, b, wybor;
    cout << "Prosty kalkulator - created by Ethan." << endl;
    cout << "Podaj pierwsze liczbe: ";
    cin >> a;
    cout << "Podaj druga liczbe: ";
    cin >> b;
    cout << "Owe dwie liczby chcesz pomnozyc(1), podzielic(2), dodac(3) czy odjac(4)?" << endl;
    cin >> wybor;

        switch ( wybor )
        {
            case 1:
            cout << "Wynik wynosi: " << a * b << endl;
            break;

            case 2:
            cout << "Wynik wynosi: " << a / b << endl;
            break;

            case 3:
            cout << "Wynik wynosi: " << a + b << endl;
            break;

            case 4:
            cout << "Wynik wynosi: " << a - b << endl;
            break;

            default:
            cout << "Nie istnieje taka metoda!" << endl;
            break;
        }

    return 0;

}

Oczywiście muszą być w nim zastosowane warunki wielokrotnego wyboru, czyli case.
Ktoś ogarnie?
 
Last edited:
do czego odwołują się pogrubione zmienne?
Code:
int a, b, [B]pomnozyc, podzielic, dodac, odjac[/B], wybor;

kod prosty jak budowa cepa i możesz zastosować zamiast
Code:
    cout << "Podaj pierwsze liczbe: ";
    cin >> a;
    cout << "Podaj druga liczbe: ";
    cin >> b;

coś takiego
Code:
    cout << "Podaj liczby na ktorych chcesz przeprowadzic dzialania: ";
    cin >> a;
    cin >> b;


poza tym zamiast
Code:
int a, b, wybor;
daj
Code:
double a, b, wybor;

wtedy będziesz mógł wykonywać działania na zmiennoprzecinkowych..

ogólnie dodałbym do dzielenia coś takiego:
Code:
case 2:
if(b==0){
cout << "Cholero nie dziel przez zero" << endl;
}
else{
cout << "Wynik wynosi: " << a / b << endl;
}
break;

Mógłbyś zrobić to o wiele ładniej, zastosować pętle i dodać opcje jak zmianę liczb czy zakończenie programu albo wykonanie innego działania na podanych liczbach.
Dużo ciekawiej by to wyglądało :)
 
do czego odwołują się pogrubione zmienne?
Code:
int a, b, [B]pomnozyc, podzielic, dodac, odjac[/B], wybor;

Zapomniałem ich wyjebać : D.

kawon said:
poza tym zamiast
Code:
int a, b, wybor;
daj
Code:
double a, b, wybor;

Słuszna uwaga - kod pisałem chwilkę, ale jakos nie wglebiam sie w boole, inty, double.
Chodzi mi tylko o to, zeby program wykonowal to co zaloze. ; >

Mógłbyś zrobić to o wiele ładniej, zastosować pętle i dodać opcje jak zmianę liczb czy zakończenie programu albo wykonanie innego działania na podanych liczbach.
Dużo ciekawiej by to wyglądało :)

Petle w swoim czasie, teraz nic mi nie da do ... while ;) Nie przy tak banalnych obliczeniach.
 
Ja to bym zrobił tak:
Code:
#include <iostream>

using namespace std;

int main()
{
    int a, b, pomnozyc, podzielic, dodac, odjac, wybor;
    cout << "Prosty kalkulator - created by Maciekxx." << endl;
    cout << "Podaj pierwsze liczbe: ";
    cin >> a;
    cout << "Podaj druga liczbe: ";
    cin >> b;
    cout << "Owe dwie liczby chcesz pomnozyc(1), podzielic(2), dodac(3) czy odjac(4)?" << endl;
    cin >> wybor;

        switch ( wybor )
        {
            case 1:
            cout << "Wynik wynosi: " << a * b << endl;
            break;

            case 2:
            cout << "Wynik wynosi: " << a / b << endl;
            break;

            case 3:
            cout << "Wynik wynosi: " << a + b << endl;
            break;

            case 4:
            cout << "Wynik wynosi: " << a - b << endl;
            break;

            default:
            cout << "Nie istnieje taka metoda!" << endl;
            break;
        }

    return 0;

}
 
jak chcesz programować i brakuje Ci bibliotek lub po prostu nie chcesz wpisywać wielu linijek to polecam zaopatrzyć się w tą bibliotekę:
http://www.stroustrup.com/Programming/std_lib_facilities.h

wpisujesz później tylko
Code:
#include "std_lib_facilities.h"

i masz większość podstawowych funkcji.. :)


Petle w swoim czasie, teraz nic mi nie da do ... while ;) Nie przy tak banalnych obliczeniach.

Tu nie chodzi o wykonywanie obliczeń w pętlach tylko o stworzenie prostego menu gdzie latwo powrocić do innej części programu w celu np wykonania innego działania lub wprowadzenia innych liczb. Oczywiście to tylko podstawy podstaw..
 
Ja tam wchodze w start --> kalkulator i tyle mi to zajmuje zrobienie kalkulatora
 
Code:
cout << "Owe dwie liczby chcesz pomnozyc(1), podzielic(2), dodac(3) czy odjac(4)?" << endl;
A co, jeżeli użytkownik wpisze np. 'a'? Double = 64 bit, szkoda pamięci. W gwoli ścisłości:
Code:
    cout << "Prosty kalkulator - created by Ethan.\n"
           << "Podaj pierwsze liczbe: ";

return 0; na końcu możesz pominąć.
 
Code:
cout << "Owe dwie liczby chcesz pomnozyc(1), podzielic(2), dodac(3) czy odjac(4)?" << endl;
A co, jeżeli użytkownik wpisze np. 'a'? Double = 64 bit, szkoda pamięci. W gwoli ścisłości:
Code:
    cout << "Prosty kalkulator - created by Ethan.\n"
           << "Podaj pierwsze liczbe: ";

return 0; na końcu możesz pominąć.

Co z tego, że to pominię return jeżeli kompilator doda to sam
602018_m.jpg
 
Code:
cout << "Owe dwie liczby chcesz pomnozyc(1), podzielic(2), dodac(3) czy odjac(4)?" << endl;
A co, jeżeli użytkownik wpisze np. 'a'?

PHP:
     {
                default:
                cout << "Nie istnieje taka metoda!" << endl;
                break;
     }

analizuj-kod-c-skurwielu-pl-ffffff
 
A weź może kurwa najpierw skompiluj i wpisz te 'a', a potem się wypowiadaj.

fakt faktem, wybor jest typu int, wiec prawdopodobnie wyjebie blad o niezgodnosci typow, czyli wyjebie sie na cin >> wybor
 
PHP:
#include <iostream>
#include <limits>
using namespace std;
int main()
{
    float a, b;
    int c, d, wyb;
    bool spr;
    cout << "\t\t\t---------------------------" << endl;
    cout << "\t\t\tKALULATOR TEKSTOWY BY ETHAN" << endl;
    cout << "\t\t\t---------------------------" << endl;
    do // 1
    {
        do // 2
        {
            cout << "\n\t\t\t[+] Dodawanie" << endl;
            cout << "\t\t\t[-] Odejmowanie" << endl;
            cout << "\t\t\t[*] Mnożenie" << endl;
            cout << "\t\t\t[/] Dzielenie" << endl;
            cout << "\t\t\t[%] Reszta z dzielenia" << endl;
            cout << "\t\t\t[0] Zakończ program" << endl;
            cout << "\n\t\t\t";
            cin >> wyb;
            spr = cin.good();
            cin.clear();
            cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            if( spr != 0 )
            {
                switch( wyb )
                {
                case '+':
                    {
                        cout << "\nPodaj pierwszą liczbę: ";
                        cin >> a;
                        spr = cin.good();
                        cin.clear();
                        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                        if( spr == 0 )
                        {
                            cout << "\nDziałam tylko na liczbach !!!";
                            cout << endl;
                        }
                        else
                        {
                            cout << "\nPodaj drugą liczbę: ";
                            cin >> b;
                            spr = cin.good();
                            cin.clear();
                            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                            if( spr == 0 )
                            {
                                cout << "\nDziałam tylko na liczbach !!!";
                                cout << endl;
                            }
                            else
                            {
                                cout << "\n" << a + b << endl;
                            }
                        }
                        break;
                    }
                case '-':
                    {
                        cout << "\nPodaj pierwszą liczbę: ";
                        cin >> a;
                        spr = cin.good();
                        cin.clear();
                        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                        if( spr == 0 )
                        {
                            cout << "\nDziałam tylko na liczbach !!!";
                            cout << endl;
                        }
                        else
                        {
                            cout << "\nPodaj drugą liczbę: ";
                            cin >> b;
                            spr = cin.good();
                            cin.clear();
                            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                            if( spr == 0 )
                            {
                                cout << "\nDziałam tylko na liczbach !!!";
                                cout << endl;
                            }
                            else
                            {
                                cout << "\n" << a - b << endl;
                            }
                        }
                        break;
                    }
                case '*':
                    {
                        cout << "\nPodaj pierwszą liczbę: ";
                        cin >> a;
                        spr = cin.good();
                        cin.clear();
                        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                        if( spr == 0 )
                        {
                            cout << "\nDziałam tylko na liczbach !!!";
                            cout << endl;
                        }
                        else
                        {
                            cout << "\nPodaj drugą liczbę: ";
                            cin >> b;
                            spr = cin.good();
                            cin.clear();
                            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                            if( spr == 0 )
                            {
                                cout << "\nDziałam tylko na liczbach !!!";
                                cout << endl;
                            }
                            else
                            {
                                cout << "\n" << a * b << endl;
                            }
                        }
                        break;
                    }
                case '/':
                    {
                        cout << "\nPodaj pierwszą liczbę: ";
                        cin >> a;
                        spr = cin.good();
                        cin.clear();
                        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                        if( spr == 0 )
                        {
                            cout << "\nDziałam tylko na liczbach !!!";
                            cout << endl;
                        }
                        else
                        {
                            cout << "\nPodaj drugą liczbę: ";
                            cin >> b;
                            spr = cin.good();
                            cin.clear();
                            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                            if( spr == 0 )
                            {
                                cout << "\nDziałam tylko na liczbach !!!";
                                cout << endl;
                            }
                            else
                            {
                                if( b == 0 )
                                {
                                    cout << "\nNie można dzielić przez 0 !!!" << endl;
                                }
                                else
                                {
                                    cout << "\n" << a / b << endl;
                                }
                            }
                        }
                        break;
                    }
                case '%':
                    {
                        cout << "\nPodaj pierwszą liczbę: ";
                        cin >> c;
                        spr = cin.good();
                        cin.clear();
                        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                        if( spr == 0 )
                        {
                            cout << "\nDziałam tylko na liczbach !!!";
                            cout << endl;
                        }
                        else
                        {
                            cout << "\nPodaj drugą liczbę: ";
                            cin >> d;
                            spr = cin.good();
                            cin.clear();
                            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
                            if( spr == 0 )
                            {
                                cout << "\nDziałam tylko na liczbach !!!";
                                cout << endl;
                            }
                            else
                            {
                                cout << "\n" << c % d << endl;
                            }
                        }
                        break;
                    }
                case 0:
                    {
                        cout << "\nDo zobaczenia :)";
                        break;
                    }
                    default:
                    {
                        cout << "\nNie ma takiej opcji" << endl;
                        break;
                    }
                }
            }
            else
            {
                cout << "\nNależy wybrać cyfrę z przedziału <0-5>" << endl;
            }
        } while( spr == 0 ); // 2

    } while( wyb != 0 ); // 1

    return 0;
}

Styknie - mozna zamknac temat.

wersja beforeAlpha done - mozna zamknac temat.
 
Challenge 4u:
Dzialania wykonuj na bitach ;) (Np. mnożenie to przesunięcie bitowe)
 
Code:
#include <iostream>
using namespace std;


float wynik(float a, float b, char w){
     
     switch(w){
               case '+':
                    return a+b;
               break;
               case '-':
                    return a-b;
               break;
               case '*':
                    return a*b;
               break;
               case '/':
                    return a/b;
               break;
               default:
                     return 0;                  
     }
     
     
}
int main(){
    float a,b;
    char w;
    do{
       cout << "Podaj dzialanie" << endl;
       cin >> a >> w >> b;

       cout << wynik(a, b, w) << endl;
       }while(true);
    
    
 cin >> w;   
}
Masz.

Podajesz np. tak: 2+2, 30/6.
 
Code:
#include <iostream>
using namespace std;


float wynik(float a, float b, char w){
     
     switch(w){
               case '+':
                    return a+b;
               break;
               case '-':
                    return a-b;
               break;
               case '*':
                    return a*b;
               break;
               case '/':
                    return a/b;
               break;
               default:
                     return 0;                  
     }
     
     
}
int main(){
    float a,b;
    char w;
    do{
       cout << "Podaj dzialanie" << endl;
       cin >> a >> w >> b;

       cout << wynik(a, b, w) << endl;
       }while(true);
    
    
 cin >> w;   
}
Masz.

Podajesz np. tak: 2+2, 30/6.

Oke, oke.
Dobra rzecz, kowolu..., ale... Musi być te jebane menu. : S
 
Back
Top