prosty kalkulator z błędem

0

Witam, uczę się programowania c++, muszę napisać do szkoły prosty kalkulator, jedną z funkcji jakie musi spełniać jest to iż w przypadku podania błędnej wartości z dozwolonych ma pojawiać się komunikat "proszę wybrać a,b,c lub d.
Komunikat co prawda się wyświetla jednak najpierw wyświetla się komunikat wyboru cyfr do wykonania równania, a potem dopiero aby wybrać z. wiecie może jak to zmienić ??
oto mój kod:

#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <string>
#include <conio.h>

using namespace std;

float m = 0, n = 0;
float wynik = 0;
int mojwybor;

int main(int argc, char** argv)
{
    cout << "|Program wykonujacy cztery podstawowe dzialania|" << endl;
    cout << "|==============================================|" << endl;
    cout << "|      Wybierz  1 - dodawanie                  |" << endl;
    cout << "|      Wybierz  2 - odejmowanie                |" << endl;
    cout << "|      Wybierz  3 - mnozenie                   |" << endl;
    cout << "|      Wybierz  4 - dzielenie                  |" << endl;
    cout << "|      Wybierz  5 - aby zakonczyc              |" << endl;
    cout << "|==============================================|" << endl;
    cout << "wybierz opcje:";
    cin >> mojwybor;
    cout << "wprowadz pierwsza liczbe m = ";
    cin >> m;
    cout << "wprowadz druga liczbe n = ";
    cin >> n;

    if (mojwybor == 1) {
        wynik = m + n;
        cout << "|==============================================|" << endl;
        cout << "|wybrales dodawanie liczb m+n =" << wynik << endl;
        cout << "|==============================================|" << endl;
    }
    else if (mojwybor == 2) {
        wynik = m - n;
        cout << "|==============================================|" << endl;
        cout << "|wybrales odejmowanie liczb m-n =" << wynik << endl;
        cout << "|==============================================|" << endl;
    }
    else if (mojwybor == 3) {
        wynik = m * n;
        cout << "|==============================================|" << endl;
        cout << "|wybrales mnozenie liczb m*n =" << wynik << endl;
        cout << "|==============================================|" << endl;
    }
    else if (mojwybor == 4) {
        wynik = m / n;
        cout << "|==============================================|" << endl;
        cout << "|wybrales dzielenie liczb m/n =" << wynik << endl;
        cout << "|==============================================|" << endl;
    }
    else if (mojwybor == 5) {
    }
    else {
        cout << "|====================================|" << endl;
        cout << "|Prosze uzyc klawiszy a,b,c,d lub q !|" << endl;
        cout << "|====================================|" << endl;
    }
0

Instrukcje wykonywane są po kolei. Jeśli chcesz coś sprawdzić lub wypisać zanim wczytasz kolejną liczbę, to umieść odpowiednie instrukcje przed jej wczytaniem.

BTW: nie używaj zmiennych globalnych i nie zaśmiecaj sobie programu np. nagłówkiami conio.h i windows.h.
BTW2: prosisz o liczby, a w ostatecznym komunikacje chcesz liter. Wypadałoby się zdecydować.

0

co do liter, problem polega na tym iż docelowo użytkownik ma wybrać literę z dostępnych a nie cyfrę,dlatego właśnie komunikat zawiera litery, to jest mój kolejny problem którego nie udało mi się jeszcze rozwiązać, coś czytam że tu chodzi o przypisanie liter do kodu ASCII, ale na razie błądzę z tym po omacku. Wiem że program wykonuje funkcje po kolei, nie wiem jednak czy mój kod jest błędnie napisany czy powinienem umieścić odpowiednią funkcje w innym miejscu. próbowałem zamieniać, przekładać ale niestety nie działa. 1.png chodzi mi o uzyskanie takiego efektu.

0

To czemu nie zrobić mojwybor stringiem albo charem?

0

przy próbie zamienienia cyfr na liczby wyskakują mi same błędy, jak mogę to zmienić ??2.png

0

char mojwybor;
...
if (mojwybor == 'a')

0

@lion137: jak by taka funkcja miała wyglądać ??
int main() {

string ciag;
cout<<<"wybierz opcje :";
cin>>a,b,c,d,q; 
cin.get();
return 0;

}
tak by było poprawnie ?? czy w przypadku wybrania innej litery wykona mi polecenie "proszę użyć klawiszy a,b,c,d lub q" ????

0

Tak jak jest, tylko zmienić typ i porównania w warunkach.

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

float m = 0, n = 0;
float wynik = 0;
string mojwybor;

int main(int argc, char** argv)
{
    cout << "|Program wykonujacy cztery podstawowe dzialania|" << endl;
    cout << "|==============================================|" << endl;
    cout << "|      Wybierz  1 - dodawanie                  |" << endl;
    cout << "|      Wybierz  2 - odejmowanie                |" << endl;
    cout << "|      Wybierz  3 - mnozenie                   |" << endl;
    cout << "|      Wybierz  4 - dzielenie                  |" << endl;
    cout << "|      Wybierz  5 - aby zakonczyc              |" << endl;
    cout << "|==============================================|" << endl;
    cout << "wybierz opcje:";
    cin >> mojwybor;
    cout << "wprowadz pierwsza liczbe m = ";
    cin >> m;
    cout << "wprowadz druga liczbe n = ";
    cin >> n;

    if (mojwybor == "a") {
        wynik = m + n;
        cout << "|==============================================|" << endl;
        cout << "|wybrales dodawanie liczb m+n =" << wynik << endl;
        cout << "|==============================================|" << endl;
    }
    else if (mojwybor == "b") {
        wynik = m - n;
        cout << "|==============================================|" << endl;
        cout << "|wybrales odejmowanie liczb m-n =" << wynik << endl;
        cout << "|==============================================|" << endl;
    }
    else if (mojwybor == "c") {
        wynik = m * n;
        cout << "|==============================================|" << endl;
        cout << "|wybrales mnozenie liczb m*n =" << wynik << endl;
        cout << "|==============================================|" << endl;
    }
    else if (mojwybor == "d") {
        wynik = m / n;
        cout << "|==============================================|" << endl;
        cout << "|wybrales dzielenie liczb m/n =" << wynik << endl;
        cout << "|==============================================|" << endl;
    }
    else if (mojwybor == "q") {
    }
    else {
        cout << "|====================================|" << endl;
        cout << "|Prosze uzyc klawiszy a,b,c,d lub q !|" << endl;
        cout << "|====================================|" << endl;
    }
}
0

@lion137:
pozamieniałem i teraz działa pod literami, sam zrobiłem błąd ponieważ litera q ma kończyć program, ale to nie powinno mi sprawić problemu, natomiast dalej w momencie wpisania innej litery niż a,b,c,d,q wyskakuje mi opcja wprowadź pierwszą liczbę, a chciałbym aby po wprowadzeniu jakiejś innej litery od razu wyskakiwał napis aby użyć a,b,c,d, lub q.

0

rozumiem że program wykonuje funkcje po kolei, jak zatem zmusić go aby najpierw sprawdził czy litera którą wybraliśmy jest dostępna i w przypadku błędu wyświetlał komunikat "wybierz literę a,b,c,d,lub q. i robił to bez wyświetlania opcji podaj liczbę, pÓÓÓÓki co mam coś takiego:
3.png
litera jest błędna a program nadal wyświetla wybierz pierwszą liczbę, a potrzebuje żeby tego nie było.

0

Użyj pętli, którą będziesz wczytywał dopóki nie uda się wczytać poprawnej opcji.

0

else if ("") {
}
else {
cout << "|====================================|" << endl;
cout << "|Prosze uzyc klawiszy a,b,c,d lub q !|" << endl;
cout << "|====================================|" << endl;
}
czy w tym momencie jeśli wybierzemy inną niż te dostępne literę będzie mi od razu pokazywał ten komunikat ??

0

@kq:
pętla while ??

0

#include <iostream> using namespace std; int mojwybor = a;b;c;d;q int main() { while(mojwybor=a;b;c;d;q) } return 0;

czy taka pętla będzie poprawna ??

0

Nie.

...
while(true)
{
    ...
    else if (mojwybor == "q") 
    {
        break;
    }
    ...
}
...

Poza tym użyj tablicy struktury:

typedef double calcproc(double,double);
double add(double a,double b) { return a+b; }
double sub(double a,double b) { return a-b; }
double mul(double a,double b) { return a*b; }
double div(double a,double b) { return a/b; }
double ret(double a,double b) { exit(0); return 0; }
struct { string operation,info; calcproc* calc; } tab[]=
{
    {"+","dodawanie",&add},
    //{"+","odejmowanie",&sub},
    {"-","odejmowanie",[](double a,double b){ return a-b; }}, // użycie lambdy zamiast funkcji sub
    {"*","mnożenie",&mul},
    {"/","dzielenie",&div},
    {"q","wyjście",&ret},
};

przy takim podejściu dodanie kolejnej funkcji (np potęgowanie) będzie się sprowadzać do dodania dwóch wierszy (jeżeli użyjesz lambd to jednego wiersza).

0

a mogę q zamienic na abcd ?? bo komunikat ma wyskakiwac jeśli litera wprowadzona będzie inna niż abcd.

0

Menu też trzeba wypisywać z użyciem podanej tablicy.
Wtedy możesz "q" zamienić na cokolwiek, np: "exit"

0

nic już z tego nie rozumiem, nie można po prostu gdzieś przed wyborem litery wkleić pętle żeby po wyborze sprawdzała czy litera jest poprawna i w razie czego albo szła dalej albo wyskakiwał komunikat aby wybrać odpowiednią litere ??

program ma do wyboru :

A B C lub d

wpisujesz H
wyskakuje "wprowadz abc lub d
wpisujesz A program idzie dalej i wykonuje dzialanie, któe ma przypisane do a

0

Przecież masz kilka postów wyżej, jak ma wyglądać pętla.

0

pogubiłem się już w tym wszystkim, robię prace dla chrześniaka do szkoły, coś mniej więcej zdążyłem się połapać ale to chyba za trudne jednak dla mnie, nie mam pojęcia gdzie to wkleić żeby działało. Moim zdaniem 70% działa jak powinno, nie wiem jak rozwiązać problem "wybierz a,b,c,d lub q. Oraz jak napisać kod który spowoduje że przyciskiem q kończy się program.a.pngb.pngc.pngd.png tak to ma finalnie wyglądać.

0

jeśłi ktoś może sprawdzić mój kod i czy jest poprawny z tymi zdjęciami to byłbym wdzięczny.

0

nikt nie pomoże ?? nie licze na to żeby ktoś to zrobił za mnie...pytań szuakam :)

0

@majkel1234: Ogarnij się, robisz zadanie dla chrześniaka, coś tam musisz kojarzyć; dostałeś info jak zrobić pętlę, wykorzystaj to, zrób eksperyment...

0

dobra, pokombinuje

0

nie działa przyjaciele
jak mam wpisać wartość abcd?? q kończy program to inna para kaloszy

0

Nie potrzebujesz wpisywania wartości abcd

0

czyli ?? jak ty widzisz ten kkod ??

0

Pokaż co ci nie działa, lub pisz ogłoszenie w dziale: ogłoszenia drobne.

0

już pokazuje

0

moj program"kalkulator" ma za zadanie wykonac 4 kodstawowe działania matematyczne opatrzone kolejno literami A,B,C,D.
Litera Q odpowiada za zakonczenie programu.

Wcisniecie kazdej z liter A B C lub D wedlug mojego programu kieruje do kolejno
A - DODAWANIE
B - ODEJMOWANIE
C - MNOŻENIE
D - DZIELENIE

i to działa.... :)
A CO NIE DZIAŁA.. ??
mimo wybrania błędnej litery program kieruje do"jakiegoś" działania poczym wyświetla komunikat
"wybierz a,b,c,d club q"

A powinien od razu po wybraniu...6.pngWYBRAŁEM "K" program zapytał o 2 wartośći po czym wyświetlił komunikat. CHCE ŻEBY KOMUNIKAT WYŚWIETLAŁ SIĘ BEZ WPROWADZANIA TYCH DANYCH.Może laikiem jestem ale na moje oko to jakiś błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1