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; }
|
|
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. |
|
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. |
|
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? |
|
Rashmistrz |
» 2014-11-27 08:24:09 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". Operacje logiczne |
|
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? |
|
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 |
|
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. |
|
« 1 » 2 3 |