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

[KALKULATOR] Wykonywanie się wszystkich działań zamiast jednego, zależnego do przycisku.

Ostatnio zmodyfikowano 2014-05-30 19:38
Autor Wiadomość
Pete12234
Temat założony przez niniejszego użytkownika
[KALKULATOR] Wykonywanie się wszystkich działań zamiast jednego, zależnego do przycisku.
» 2014-05-30 17:47:13
Witam.
Tak jak w temacie. Zabezpieczyłem program przed wprowadzeniem złych danych i klops. Mój kod wygląda tak:
C/C++
#include<iostream>
using namespace std;
/*****************************/
int dodawanie( int L1, int L2 )
{
    int wynik = L1 + L2;
   
    cout << wynik;
   
    return wynik;
}
/*****************************/
int odejmowanie( int L1, int L2 )
{
    int wynik = L1 - L2;
   
    cout << wynik;
   
    return wynik;
}
/*****************************/
int mnozenie( int L1, int L2 )
{
    int wynik = L1 * L2;
   
    cout << wynik;
   
    return wynik;
}
/*****************************/
int dzielenie( int L1, int L2 )
{
    int wynik = L1 / L2;
   
    cout << wynik;
   
    return wynik;
}
/*****************************/
int potegowanie( int L1, int L2 )
{
    int i;
    int wynik;
   
    do
    {
        L1 * L1;
        i++;
    } while( i <= L2 );
   
}
/*****************************/

int main()
{
    int wybor;
    int liczba1;
    int liczba2;
   
    cout << "Siema! To je moj kalkulator" << endl;
    cout << "Podaj dwie liczby: " << endl;
    cin >> liczba1;
   
    if( cin.fail() )
    {
        do
        {
            cin.clear();
            cin.sync();
            cout << "Podaj LICZBE!: ";
            cin >> liczba1;
           
        } while( cin.fail() );
       
    }
   
    cin >> liczba2;
   
    if( cin.fail() )
    {
        do
        {
            cin.clear();
            cin.sync();
            cout << "Podaj LICZBE!: ";
            cin >> liczba2;
           
        } while( cin.fail() );
       
    }
   
   
    cout << "Wybierz co chcesz z nimi zrobic: " << endl;
    cout << "Dodawanie [1]" << endl;
    cout << "Odejmowanie [2]" << endl;
    cout << "Mnozenie [3]" << endl;
    cout << "Dzielenie [4]" << endl;
    cout << "Potegowanie [5]" << endl;
   
    cin >> wybor;
   
    if( cin.fail() )
    {
        do
        {
            cin.clear();
            cin.sync();
            cout << "Podaj LICZBE!: ";
            cin >> wybor;
           
        } while( cin.fail() );
       
    }
   
    switch( wybor )
    {
    case 1:
        {
            int wynik;
            wynik = dodawanie( liczba1, liczba2 );
            cout << liczba1 << " + " << liczba2 << " jest rowne " << wynik << endl;
        }
    case 2:
        {
            int wynik;
            wynik = odejmowanie( liczba1, liczba2 );
            cout << liczba1 << " - " << liczba2 << " jest rowne " << wynik << endl;
        }
    case 3:
        {
            int wynik;
            wynik = mnozenie( liczba1, liczba2 );
            cout << liczba1 << " * " << liczba2 << " jest rowne " << wynik << endl;
        }
    case 4:
        {
            int wynik;
            wynik = dzielenie( liczba1, liczba2 );
            cout << liczba1 << " / " << liczba2 << " jest rowne " << wynik << endl;
        }
    case 5:
        {
            int wynik;
            wynik = potegowanie( liczba1, liczba2 );
            cout << liczba1 << " ^ " << liczba2 << " jest rowne " << wynik << endl;
        }
    }
}

A efekt tak:

Siema! To je moj kalkulator
Podaj dwie liczby:
1
4
Wybierz co chcesz z nimi zrobic:
Dodawanie [1]
Odejmowanie [2]
Mnozenie [3]
Dzielenie [4]
Potegowanie [5]
3
41 * 4 jest rowne 4
01 / 4 jest rowne 0
1 ^ 4 jest rowne 5

Process returned 0 (0x0)   execution time : 7.563 s
Press any key to continue.

Co z tym zrobić? Zmieniałem typy zmiennych, ale to nic nie dało.

P-111117
jarek1402b
» 2014-05-30 18:02:08
To jest poprawna składnia instrukcji Swich Case porównaj sobie ze swoim kodem i będziesz widział co masz źle i dlaczego wszystko Ci sie wykonuje ;)

C/C++
switch( zmienna )
{
case wartosc_1:
    //jakiś kod
    break;
   
case wartosc_2:
    //jakiś kod
    break;
   
    //...
case wartosc_n:
    //jakiś kod
    break;
   
default:
    //jakiś kod
    break;
}
P-111118
Pete12234
Temat założony przez niniejszego użytkownika
» 2014-05-30 18:06:11
No tak... dzięki, tego nie zauważyłem :D Swoją drogą. Dlaczego na samym początku już wyniku pojawiają się jakieś losowe liczby? Kiedy miałem tam nadane typy long, to pojawiało się ich więcej, teraz, kiedy jest int pojawia się mniej, ale ostatnia jest zawsze ta, która była wprowadzona na początku. Co na to można zaradzić?
P-111119
jarek1402b
» 2014-05-30 18:12:23
wlasnie przeanalizowalem Twój kod w calosci no i jednak stwierdzilem że masz więcej niedoskonałości w swoim programie :) Po pierwsze po poprawieniu składni nie będzie Ci sie kompilowało ponieważ masz zadeklarowaną 5 razy zmienną wynik :) jeśli chcesz w ten sposób działać musisz każdą zminną inaczej nazwać tj. wynik1 wynik2 itd :) po drugie przy wypisywaniu pokazuje tak -> 486 * 8 = 48 czyli pierwsze 48 to jest cout z funkcji a reszta to ze switch case'ów po co robisz w funkcjach wypisywanie skoro liczysz tam tylko wynik i zwracasz go a wypisywanie i tak robisz w switch'ach ? :) no i dzielenie nie będzie dokładnie działało bo wynik masz jako int :) a jeżeli podzielisz 5:2=2.5 a int nie przechowa Ci liczby zmiennoprzecinkowej 2.5 :) to chyba tyle z uwag :)
P-111120
Pete12234
Temat założony przez niniejszego użytkownika
» 2014-05-30 19:38:57
Poprawiłem, działa przepięknie, dzięki za wszystkie uwagi :D
P-111124
« 1 »
  Strona 1 z 1