[Lekcja 15] Kalkulator - ukryty błąd
Ostatnio zmodyfikowano 2013-03-03 12:24
Frish Temat założony przez niniejszego użytkownika |
[Lekcja 15] Kalkulator - ukryty błąd » 2013-03-02 14:52:09 #include <iostream>
int main() { std::cout << std::endl << std::endl << "\t\t ____________" << std::endl; std::cout << "\t\t KALKULATOR " << std::endl << std::endl << std::endl; std::cout << "[+] Dodawanie" << std::endl; std::cout << "[-] Odejmowanie" << std::endl; std::cout << "[*] Mnozenie" << std::endl; std::cout << "[/] Dzielenie" << std::endl; float a; float b; int ile; char znak; std::cout << "\t______________" << std::endl; std::cout << "\t OKNO DZIALAN" << std::endl; std::cout << "_______________________________" << std::endl << std::endl; std::cin >> a; do { std::cin >> znak; std::cin >> b; if( znak == '+' ) { znak = a + b; a += b; std::cout << a << std::endl; } if( znak == '-' ) { znak = a - b; a -= b; std::cout << a << std::endl; } if( znak == '*' ) { znak = a * b; a *= b; std::cout << a << std::endl; } if( znak == '/' ) { znak = a / b; a /= b; std::cout << a << std::endl; } } while( ile != 0 ); return 0; }
napisałem kalkulator i wystapił dziwny błąd pod tytułem między innymi kiedy dodaje cały czas 5 i startuje od 5 to w momencie gdy mam 40 + 5 w wyniku ukazuja sie dwie liczby a w innych przypadkach raczej dobrze podaje wyniki. Nie wiem dlaczego tak jest, gdzie popełniłem błąd, proszę o pomoc. |
|
pekfos |
» 2013-03-02 15:08:45 Modyfikujesz zmienną znak . |
|
Frish Temat założony przez niniejszego użytkownika |
» 2013-03-02 15:16:09 Już właśnie poprawiłem to, ale nadal nie rozumiem jak to sie dzieje że gdy dodaje przez kilka kolejek to jest dobrze i ogolnie większośc równań wykonuje to jest dobrze a tu gdy powtarzam równanie wielokrotnie pojawia sie błąd który wcześniej nie występował. Nie powinno być tak że ten błąd wyskakuje zaraz przy drugim bądz trzecim równaniu?
pozdrawiam |
|
melon |
» 2013-03-02 15:38:20 zadeklarowałeś zmienna "ile" , lecz pozniej nigdzie ona nie wystepuje, wiec while nie daje efektu, tyle ze jest |
|
Frish Temat założony przez niniejszego użytkownika |
» 2013-03-02 18:56:19 ale ta zmienna nie ma wplywu na przeprowadzane obliczenia...chodzi mi o to ze dlaczego zmienna 'znak' ktora zostala dodatkowo niepotrzebnie deklarowana powoduje bledne obliczenia dopiero po wielu kolejkach dodawania i to liczby 5...a wszystkie inne liczby raczej dobrze sa obliczane...dlaczego tak sie dzieje ze dodajac caly czas 5 w momencie gdy wystepuje 40+5 to zaczynaja sie bledne obliczenia i wyskakuje blad...a wczesniej to sie nie dzieje i w przypadku innych obliczen blad nie wystepuje...ten blad zwiazany jest z liczba 45...prosze o jakies wyjasnienie tego faktu...przeciez ten blad powinien ujawniac sie juz wczesniej gdyby tu chodzilo tylko o niepotrzebne zadeklarowanie 'znak = a + b'... |
|
SeaMonster131 |
» 2013-03-02 19:06:52 Jeżeli usunąłeś te modyfikacje zmiennej "znak" podczas obliczeń, to przecież wszystko dobrze działa? |
|
Frish Temat założony przez niniejszego użytkownika |
» 2013-03-02 21:19:32 owszem dziala dobrze, ale ja chce wiedziec jaka jest przyczyna tego ze z ta zmienna dziala tez prawidlowo tylko blad wystepuje przy dodawaniu 40+5 i w zasadzie przy kazdym dodawaniu gdzie wynikiem jest liczba 42 45 i 47 w kazdym innym przypadku ten program dziala poprawnie...dlaczego akurat w tych przypadkach jego dzialanie jest niewlasciwe a w innych jest wszystko wporzadku... |
|
Monika90 |
» 2013-03-02 21:23:21 Przypisujesz zmiennej znak wynik jakiejś operacji (np. dodawania), a potem sprawdzasz np. czy znak == '/' . Może się zdarzyć, że wynik operacji będzie równy kodowi znaku '/' . Dla przykładu kod ASCII '/' to 47. |
|
« 1 » 2 |