• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Do while kalkulator poprawki i kilka problemow

VPS Starter Arubacloud
0 głosów
1,110 wizyt
pytanie zadane 21 września 2015 w C i C++ przez kamilos027 Początkujący (470 p.)

Link do lekcji oraz zadania http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Petla-do-while/18

Napisz program, który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. Wykorzystaj do tego celu wiedzę z jednego z poprzednich rozdziałów. Sposób działania programu:
1. Podaj liczbę
2. Jeżeli błąd, wróć do kroku 1.
3. Wypisz liczbę, która została podana.
Napisz prosty kalkulator, który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Program ten ma działać następująco:
1. Wypisuje obecny wynik
2. Wprowadź liczbę
3. Wybierz działanie (jeżeli liczba różna od 0)
4. Wykonaj obliczenia (jeżeli liczba różna od 0)
5. Wróć do kroku 1.
6. Jeżeli wprowadzoną liczbą jest 0, zakończ program.

Zabezpiecz wcześniej napisany kalkulator przed podawaniem niepoprawnych liczb i operacji. Wykorzystaj wiedzę zdobytą z pierwszego zadania pracy domowej niniejszego rozdziału. Zabezpiecz również w analogiczny sposób przed możliwością wyboru nieprawidłowego działania.

 

Istotne problemy to przerywanie petli gdy podam podam ciag znakow wyswietlanie sie Podales 0 wiec program zostal zakonczony.
Prosze o ocene kodu i sugestie co zmienic. Program odpalam w Code Blocks i prawie dziala tak jak powinien.

#include <iostream>

using namespace std;

int main()
{
    float liczba1, liczba2, wynik = 0;
    bool czy_poprawne1, czy_poprawne2;
    unsigned int dzialanie;

    do
    {
        cout << "===================" << endl;
        cout << "Wynik: " << wynik << endl;
        cout << "===================" << endl;
        cout << endl;

        // podajemy liczbe1
        do
        {
            cout << "Podaj liczbe 1 (rozna od 0): ";
            cin >> liczba1;
            czy_poprawne1 = cin.good();
            cin.clear();
            cin.sync();
            if (liczba1 == 0)
            {
                cout << "Podales 0 wiec program zostal zakonczony." << endl;
                return 0;
            }
        } while (czy_poprawne1 == false); // dlaczego jak wpisze ciag znakow to program zostaje zakonczony powinna byc prosba o podanie liczby

        // podajemy liczbe2
        do
        {
            cout << "Podaj liczbe 2 (rozna od 0): ";
            cin >> liczba2;
            czy_poprawne2 = cin.good();
            cin.clear();
            cin.sync();
            if (liczba2 == 0)
            {
                cout << "Podales 0 wiec program zostal zakonczony." << endl;
                return 0;
            }
        } while (czy_poprawne2 == false); // dlaczego jak wpisze ciag znakow to program zostaje zakonczony powinna byc prosba o podanie liczby

        // menu
        cout << "\n[1] Dodawanie +" << endl;
        cout << "[2] Odejmowanie -" << endl;
        cout << "[3] Mnozenie *" << endl;
        cout << "[4] Dzielenie /" << endl;
        cout << "[5] Rezygnuj" << endl;
        cout << "Wybierz: ";
        cin >> dzialanie;

        cout << endl;

        switch (dzialanie)
        {
            case 1:
                wynik = liczba1 + liczba2;
            break;
            case 2:
                wynik = liczba1 - liczba2;
            break;
            case 3:
                wynik = liczba1 * liczba2;
            break;
            case 4:
                wynik = liczba1 / liczba2;
            break;
            case 5:
                cout << "Zakonczono dzialanie programu." << endl;
                return 0;
            break;
            default:
                cout << "Niepoprawna opcja." << endl;
            break;
        }

    } while (liczba1 != 0 || liczba2 != 0); // czy warunek jest dobry?

    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 21 września 2015 przez Rogargol Pasjonat (16,600 p.)
Nie wiem czy jest dobry, bo nie wiem co chciales uzyskac. Domyslam sie ze zamiast alernatywy ||, powinienes uzyc koniunkcji czyli &&, bo zalezy Ci zeby obie liczby byly rozne od zero. Chociaz nie do konca do rozumiem, bo przeciez wczesniej sprawdzasz czy sa rozne od zera...
komentarz 22 września 2015 przez kamilos027 Początkujący (470 p.)
Wedlug zadania po wpisaniu 0 program ma sie zakonczyc. Wszystko bylo by w porządku gdyby nie fakt, ze jak podam zamiast liczby stringa to program sie konczy zamiast poprosic o ponowne poddanie liczby. Program ma dzialac tak dlugo az nie wpisze 0 dla liczba1 lub liczba2 lub gdy sam zrezegnuje wybierajac zrezygnuj ze switcha.
0 głosów
odpowiedź 21 września 2015 przez Newtonik Gaduła (3,660 p.)
#include <iostream>
 
using namespace std;
 
int main()
{
    float liczba1, liczba2, wynik = 0;
    bool czy_poprawne1, czy_poprawne2;
    unsigned int dzialanie;
 
    do
    {
        cout << "===================" << endl;
        cout << "Wynik: " << wynik << endl;
        cout << "===================" << endl;
        cout << endl;
 
        // podajemy liczbe1
        do
        {
            cout << "Podaj liczbe 1 (rozna od 0): ";
            cin >> liczba1;
            czy_poprawne1 = cin.good();
            cin.clear();
            cin.sync();
            if (liczba1 == 0)
            {
                cout << "Podales 0 wiec program zostal zakonczony." << endl;
                return 0;
            }
        } while (czy_poprawne1 == false); // dlaczego jak wpisze ciag znakow to program zostaje zakonczony powinna byc prosba o podanie liczby
 
        // podajemy liczbe2
        do
        {
            cout << "Podaj liczbe 2 (rozna od 0): ";
            cin >> liczba2;
            czy_poprawne2 = cin.good();
            cin.clear();
            cin.sync();
            if (liczba2 == 0)
            {
                cout << "Podales 0 wiec program zostal zakonczony." << endl;
                return 0;
            }
        } while (czy_poprawne2 == false); // dlaczego jak wpisze ciag znakow to program zostaje zakonczony powinna byc prosba o podanie liczby
 
        // menu
        cout << "\n[1] Dodawanie +" << endl;
        cout << "[2] Odejmowanie -" << endl;
        cout << "[3] Mnozenie *" << endl;
        cout << "[4] Dzielenie /" << endl;
        cout << "[5] Rezygnuj" << endl;
        cout << "Wybierz: ";
        cin >> dzialanie;
 
        cout << endl;
 
        switch (dzialanie)
        {
            case 1:
                wynik = liczba1 + liczba2;
            break;
            case 2:
                wynik = liczba1 - liczba2;
            break;
            case 3:
                wynik = liczba1 * liczba2;
            break;
            case 4:
                wynik = liczba1 / liczba2;
            break;
            case 5:
                cout << "Zakonczono dzialanie programu." << endl;
                return 0;
            break;
            default:
                cout << "Niepoprawna opcja." << endl;
            break;
        }
 
    } while (liczba1 != 0 || liczba2 != 0); // czy warunek jest dobry?
 
    return 0;
}

 

Poprawiłem kod nie wiem czy o to tobie chodziło

komentarz 22 września 2015 przez kamilos027 Początkujący (470 p.)
Albo jestem slepy ale to ten sam kod.
komentarz 22 września 2015 przez Newtonik Gaduła (3,660 p.)
Zmienione sa dwa warunki w pętli w której wprowadzasz dane czyli dwie wartości
komentarz 22 września 2015 przez kamilos027 Początkujący (470 p.)
Zobacz czy aby na pewno gdyz widze ten sam kod o_O
komentarz 22 września 2015 przez Newtonik Gaduła (3,660 p.)
Przepraszam mój błąd nie zauważyłem :). Jak wrócę do domu prześlę Ci poprawki w kodzie :)

Podobne pytania

0 głosów
1 odpowiedź 381 wizyt
pytanie zadane 11 stycznia 2016 w C i C++ przez Konrad Nabożny Stary wyjadacz (13,460 p.)
0 głosów
2 odpowiedzi 1,121 wizyt
pytanie zadane 8 grudnia 2015 w C i C++ przez WoGX Nowicjusz (180 p.)
0 głosów
2 odpowiedzi 372 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...