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

Kalkulator, funkcja bool

Ostatnio zmodyfikowano 2016-11-20 14:17
Autor Wiadomość
wokub
Temat założony przez niniejszego użytkownika
Kalkulator, funkcja bool
» 2016-11-19 19:58:39
Witam.
Jestem ciut nowy, jeżeli chodzi o programowanie w języku C/C++... O ile udało mi się napisać podstawę, to jest wymagane jeszcze użycie funkcji, która pozwoli nam wybrać, czy kontynuować (zacząć od nowa), czy zakończyć. Ma się to odbywać po przez wpisanie odpowiednio T i N. Domyślam się, że mowa o funkcji ,,bool". Nie wiem jednak jak to napisać.
Póki co mam takie coś:

C/C++
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <cstdio>
#include <cmath>

using namespace std;

int l1, l2, wybor, dodawanie, mnozenie;
int main()
{
    for(;; )
    {
        cout << "Kalkulator" << endl;
        cout << "Podaj pierwszą liczbę:" << endl;
        cin >> l1;
        cout << "Podaj drugą liczbę:" << endl;
        cin >> l2;
        cout << "========Menu========" << endl;
        cout << "1.Dodawanie" << endl;
        cout << "2.Mnozenie" << endl;
        cout << "N.Koniec" << endl;
        cout << " Wybrałeś :";
        cin >> wybor;
       
        if( wybor == 1 )
        {
            dodawanie = l1 + l2;
            cout << " Twój wynik dodawania to: " << dodawanie << endl;
            cout << " Chcesz spróbować jeszcze raz? (T/N) " << endl;
           
        }
        else if( wybor == 2 )
        {
            mnozenie = l1 * l2;
            cout << " Twój wynik mnożenia to: " << mnozenie << endl;
            cout << " Chcesz spróbowć jeszcze raz? (T/N) " << endl;
        }
    }
Z góry dzięki za jakiekolwiek podpowiedzi.
P-153930
latajacaryba
» 2016-11-19 20:33:40
C/C++
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <cstdio>
#include <cmath>
bool sprawdz( char x )
{
    if( x == 'T' )
         return true;
    else
         return false;
   
}
using namespace std;

int l1, l2, wybor, dodawanie, mnozenie;
bool wynik;
int main()
{
    do //zamiast for daj do while (wykonuj dopóki...)
    {
        cout << "Kalkulator" << endl;
        cout << "Podaj pierwszą liczbę:" << endl;
        cin >> l1;
        cout << "Podaj drugą liczbę:" << endl;
        cin >> l2;
        cout << "========Menu========" << endl;
        cout << "1.Dodawanie" << endl;
        cout << "2.Mnozenie" << endl;
        cout << "N.Koniec" << endl;
        cout << " Wybrałeś :";
        cin >> wybor;
       
        if( wybor == 1 )
        {
            dodawanie = l1 + l2;
            cout << " Twój wynik dodawania to: " << dodawanie << endl;
            cout << " Chcesz spróbować jeszcze raz? (T/N) " << endl;
           
           
        }
        else if( wybor == 2 )
        {
            mnozenie = l1 * l2;
            cout << " Twój wynik mnożenia to: " << mnozenie << endl;
            cout << " Chcesz spróbowć jeszcze raz? (T/N) " << endl;
        }
        else
             break;
       
        char x;
        cin >> x;
        wynik = sprawdz( x );
    } while( wynik ); // ten zapis oznaczy dopóki wynik != 0. Analogicznie while(!wynik) oznacza wykonuj dopóki wynik = 0. 0 oznacza falsz, liczba rozna od zera - prawde
   
}
Na koniec pare uwag:
- po co Ci te biblioteki:
<conio.h>
<cstdlib>
<cstdio>
<cmath>
?
- nie używaj polskich liter.
- staraj się rozpracowywać wszystkie warianty (masz if'a dla liczb 1 i 2 a co z innymi? w tym przypadku tragedii nie było, bo dalej program po prostu się kończył, ale przy większych programach warto o tym pamiętać. Wystarczy else break)

i ciekawostka, jeśli masz if'a lub else i chcesz wpisać jedną instrukcję (w programie else break;) to nie musisz używać klamer.
P-153931
wokub
Temat założony przez niniejszego użytkownika
» 2016-11-19 20:59:04
Właśnie nie byłem pewny tych include. Muszę się tego oduczyć. Taki nawyk, że jak coś nic nie robi, to nie przeszkadza. A potem bałagan w kodzie. Dzięki za wszystkie rady, od razu stało się to jaśniejsze.

Mam jeszcze jedno pytanie. Zmodyfikowałem na szybko ten kod, gdyz za kazdym razem wylaczal program, bez wzgledu na T i N. I nie wiem, który kod działa.

C/C++
#include <iostream>

bool sprawdz( char x )
{
    if( x == 'T' )
         return true;
    else
         return false;
   
   
    if( x == 'N' )
         return 0;
   
}
using namespace std;

int l1, l2, wybor, dodawanie, mnozenie;
bool wynik;
int main()
{
    do //zamiast for daj do while (wykonuj dopóki...)
    {
        cout << "Kalkulator" << endl;
        cout << "Podaj pierwsza liczbe:" << endl;
        cin >> l1;
        cout << "Podaj druga liczbe:" << endl;
        cin >> l2;
        cout << "========Menu========" << endl;
        cout << "1.Dodawanie" << endl;
        cout << "2.Mnozenie" << endl;
        cout << " Wybrales :";
        cin >> wybor;
       
        if( wybor == 1 )
        {
            dodawanie = l1 + l2;
            cout << " Twój wynik dodawania to: " << dodawanie << endl;
            cout << " Kontynuowac? (T/N) " << endl;
           
           
        }
        else if( wybor == 2 )
        {
            mnozenie = l1 * l2;
            cout << " Twoj wynik mnozenia to: " << mnozenie << endl;
            cout << " Kontynuowac? (T/N) " << endl;
        }
        else
             break;
       
        char x;
        cin >> x;
        wynik = sprawdz( x );
    } while( wynik );
   
    return 0;
    cin.get();
}

Dopisałem na końcu

C/C++
return 0;
cin.get();
 
I na początku dodałem wartość:
C/C++
{
    if( x == 'T' )
         return true;
    else
         return false;
   
   
    if( x == 'N' )
         return 0;
   
}

Nie wiem, który kod sprawił, że wszystko działa i czy nie popełniłem jakiegoś świętokradztwa tymi czynnościami. Tak powinno być? Mógłbym zostawić to i się cieszyć, że działa. Kwestia w tym, że też w przyszłości chcę mieć wiedzę, nie tylko zdany kierunek.
P-153932
latajacaryba
» 2016-11-19 21:23:21
Chciałeś z dużych liter (T/N)
Musisz wiedzieć, że komputer określa sobie litery za pomocą liczb (patrz tablica ASCII) https://www.google.pl/search?q=ascii&client=firefox-b&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjQ0cyt0rXQAhWKFCwKHXkNACQQ_AUICCgB&biw=1920&bih=969#tbm=isch&q=ascii+tablica

Litera 'T' ma kod 84 a 't' ma kod 116.
Dlatego nigdy 'A' nie równe 'a'
Możesz ewentualnie zrobić tak:
C/C++
if( x == 'T' || x == 't' ) // te dwie pionowe kreski to operator 'lub', czyli jesli x == 'T' LUB x == 't'.
     return true;

P-153933
Gibas11
» 2016-11-19 21:23:44
@latajacaryba
nie używaj polskich liter.
Wut?
P-153934
latajacaryba
» 2016-11-19 21:24:17
Przepraszam, liter diakratycznych :DD
P-153935
karambaHZP
» 2016-11-19 21:42:08
diakratycznych
Znaki diakrytyczne

if( x == 'T' || x == 't' )
można też tak
if( tolower( x ) == 't' ) { }
P-153939
Gibas11
» 2016-11-20 10:41:31
@latajacaryba Domyśliłem się, chciałbym wiedzieć za to dlaczego ma ich nie dawać? Na Linuksie działają od ręki, na Windowsie wystarczą 3 linie kodu żeby zaczęły.
P-153956
« 1 » 2
  Strona 1 z 2 Następna strona