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

[Lekcja 17] Zadanie domowe - kalkulator oparty na funkcjach

Ostatnio zmodyfikowano 2014-12-03 09:17
Autor Wiadomość
bladegd
Temat założony przez niniejszego użytkownika
[Lekcja 17] Zadanie domowe - kalkulator oparty na funkcjach
» 2014-11-27 00:09:01
Witam Was, mam problem z tym punktem zadania:

Zmodyfikuj kalkulator, który pisałeś w jednym ze wcześniejszych rozdziałów tak, aby korzystał on ze wcześniej napisanej funkcji wczytajLiczbe.

Postanowiłem nieco inaczej zrobić to zadanie, ale do rzeczy.


Mój problem polega na tym, że zapisane wartości do zmiennych z 1 funkcji do funkcji głównej próbuje obliczyć w innej funkcji. Niestety nie wiem gdzie robię błąd i funkcja obliczająca nie odczytuje zapamiętanych liczb, aby wykonać obliczenia.

#include<iostream>
#include<limits>

using namespace std;

float liczby(float a,float b)
{
    bool failA,failB;
    do
    {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cout<<"podaj a: ";cin>>a;
        failA=cin.fail();

        cin.clear();
        cin.ignore(1000, '\n');
        cout<<"podaj b: ";cin>>b;
        failB=cin.fail();

    }while(a==0||b==0||failB||failA);
    return a||b;
}

int wybor(int choice)
{
    do
    {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cin>>choice;
    }while(choice>5||choice<1);
    return choice;
}

int kalkulator(float a,float b)
{
    int choice=wybor(choice);
    switch(choice)
    {
        case 1:
            cout<<a<<" + "<<b<<" = "<< a+b <<endl;
            break;
        case 2:
            cout<<a<<" - "<<b<<" = "<< a-b <<endl;
            break;
        case 3:
            cout<<a<<" * "<<b<<" = "<< a*b <<endl;
            break;
        case 4:
            cout<<a<<" / "<<b<<" = "<< a/b <<endl;
            break;
        case 5:
            return 0;
            break;
    }
}

int main()
{

    cout<<"Witaj w kalkulatorze.\nWcisnij ENTER, aby rozpocząć.";
    float a,b;
    liczby(a,b);
    cout<<"Co chcesz obliczyć?"<<endl;
    cout<<"[1] Dodawanie"<<endl;
    cout<<"[2] Odejmowanie"<<endl;
    cout<<"[3] Mnozenie"<<endl;
    cout<<"[4] Dzienlenie"<<endl;
    cout<<"[5] Rezygnuj"<<endl;
    cout<<"wybierz dzialanie[1-5]: ";
    int choice;
    wybor(choice);
    kalkulator(a, b);
    return 0;
}
P-121517
wilkoo13
» 2014-11-27 01:36:37
No bo funkcja liczby() nic nie robi, fakt, zwraca wartość ale to nie znaczy że przypisuje wartości zmiennym. Możesz działać na wskaźnikach lub użyć zmiennej globalnej. W tedy w ciele funkcji możesz użyć tej zmiennej i to co się z nią dzieje w środku funkcji wpływa również na zmienną w int i wszędzie indziej.
P-121523
Rashmistrz
» 2014-11-27 08:06:28
Funkcja "wybór" jest zbędna i
zwracasz sumę logiczną "a" i "b":
return a || b;
//w ten sposób nie zwraca się dwóch wartości przez funkcję

Masz użyć
wcześniej napisanej funkcji wczytajLiczbe
.
Twoim zadaniem jest przystosowanie twojego
poprzedniego kalkulatora do tej funkcji.
P-121526
bladegd
Temat założony przez niniejszego użytkownika
» 2014-11-27 08:10:58
A w ramach tego co było w kursie do tej lekcji nic się nie da zrobić rozumiem? Do zmiennych globalnych i wskaźników jeszcze nie doszedłem, a nie chce wybiegać do przodu. Wolę robić wszystko po kolei z kursu.
Mam jeszcze pytanie odnośnie tego czy patrząc na ten program z perspektywy tego co było przedstawione do tej pory w kursie to czy w tym programie są jakieś błędy z założeniach?
P-121527
Rashmistrz
» 2014-11-27 08:24:09
błędy w założeniach?
Tak jak wcześniej wspomniałem: "
return a || b;
".
Na razie na tym poziome kursu funkcje mogą tylko zwracać jedną wartość,
a w tym przypadku wracasz sumę logiczną "a" i "b".
» Kurs C++ » Poziom 1Operacje logiczne lekcja
P-121529
bladegd
Temat założony przez niniejszego użytkownika
» 2014-11-27 08:44:07
Czyli rozumiem, że dla każdej z dwóch wprowadzanych liczb muszę utworzyć po 1 funkcji?

Edit1:
#include <iostream>
#include <limits>

using namespace std;

float wczytajLiczbeA()
{
    float a;
   bool failA;
   do
   {
       cin.clear();
       cin.ignore(1000,'\n');
       cout<<"Liczba a: ";
       cin>>a;
       failA=cin.fail();
   }while(failA||a==0);
   return a;
}

float wczytajLiczbeB()
{
    float b;
   bool failB;
   do
   {
       cin.clear();
       cin.ignore(1000,'\n');
       cout<<"Liczba b: ";
       cin>>b;
       failB=cin.fail();
   }while(failB||b==0);
   return b;
}

int main()
{
    int choice;
    float a,b;
    cout << "Witaj w kalkulatorze.\nWcisnij ENTER, aby rozpocząć.";
    a=wczytajLiczbeA();
    b=wczytajLiczbeB();
    cout <<"Co chcesz obliczyć?"<<endl;
    cout<<"[1] Dodawanie"<<endl;
    cout<<"[2] Odejmowanie"<<endl;
    cout<<"[3] Mnozenie"<<endl;
    cout<<"[4] Dzienlenie"<<endl;
    cout<<"[5] Rezygnuj"<<endl;
    cout<<"wybierz dzialanie[1-5]: ";
    do
    {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cin>>choice;
    }while(choice>5||choice<1);

    switch(choice)
    {
        case 1:
            cout<<a<<" + "<<b<<" = "<< a+b <<endl;
            break;
        case 2:
            cout<<a<<" - "<<b<<" = "<< a-b <<endl;
            break;
        case 3:
            cout<<a<<" * "<<b<<" = "<< a*b <<endl;
            break;
        case 4:
            cout<<a<<" / "<<b<<" = "<< a/b <<endl;
            break;
        case 5:
            return 0;
            break;
    }
    return 0;
}
Chodziło o coś takiego?
P-121530
wilkoo13
» 2014-11-27 10:02:04
Tak, bo to ze zwracają a||b ci to nie daje. a=zwrócona wartość i tak samo z b. Teraz jeśli działa program tak jak powinien to jest dobrze
P-121534
bladegd
Temat założony przez niniejszego użytkownika
» 2014-11-27 10:06:53
Ok, w takim razie dziękuje Wam za pomoc. Zamykam temat.
P-121535
« 1 » 2 3
  Strona 1 z 3 Następna strona