prosty kalkulator z błędem

prosty kalkulator z błędem
M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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:

Kopiuj
#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;
    }
edytowany 2x, ostatnio: kq
Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99509066)
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:dzień
  • Lokalizacja:Szczecin
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ć.


M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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.

  • 1.png (167 KB) - ściągnięć: 72
edytowany 1x, ostatnio: majkel1234
lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 minuty
  • Postów:4941
0

To czemu nie zrobić mojwybor stringiem albo charem?


M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

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

  • 2.png (326 KB) - ściągnięć: 14
lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 minuty
  • Postów:4941
0

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


M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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" ????

edytowany 1x, ostatnio: majkel1234
lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 minuty
  • Postów:4941
0

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

Kopiuj
#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;
    }
}

M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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.

M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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.

  • 3.png (171 KB) - ściągnięć: 4
edytowany 1x, ostatnio: majkel1234
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:dzień
  • Lokalizacja:Szczecin
0

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


M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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 ??

M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

@kq:
pętla while ??

M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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 ??

edytowany 1x, ostatnio: majkel1234
Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99927276)
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
0

Nie.

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

Poza tym użyj tablicy struktury:

Kopiuj
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).


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 3x, ostatnio: _13th_Dragon
M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

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

edytowany 2x, ostatnio: majkel1234
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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

edytowany 1x, ostatnio: majkel1234
lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 minuty
  • Postów:4941
0

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


M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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ć.

  • b.png (193 KB) - ściągnięć: 9
  • d.png (165 KB) - ściągnięć: 12
  • a.png (142 KB) - ściągnięć: 14
  • c.png (179 KB) - ściągnięć: 6
M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

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

M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

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

lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 minuty
  • Postów:4941
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...


M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

dobra, pokombinuje

M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

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

edytowany 1x, ostatnio: majkel1234
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
0

Nie potrzebujesz wpisywania wartości abcd


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

czyli ?? jak ty widzisz ten kkod ??

edytowany 1x, ostatnio: majkel1234
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
0

już pokazuje

M1
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Postów:31
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.

  • 6.png (178 KB) - ściągnięć: 7
edytowany 5x, ostatnio: majkel1234

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.