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

2.17 zad. 2 proszę o sprawdzenie

Ostatnio zmodyfikowano 2018-09-20 09:54
Autor Wiadomość
Pawelcio
Temat założony przez niniejszego użytkownika
2.17 zad. 2 proszę o sprawdzenie
» 2018-09-16 11:38:20
Witam, proszę o sprawdzenia czy dobrze zrozumiałem zadanie i czy wyszło zgodnie z założeniem.

C/C++
#include <iostream>
#include <limits>

void Options()
{
    std::cout << "[1] - dodawanie" << std::endl;
    std::cout << "[2] - odejmowanie" << std::endl;
    std::cout << "[0] - wyjscie z programu \n" << std::endl;
}

void dodawanie()
{
   
    {
        int a, b, wynik;
       
        std::cout << "Dodawanie: " << std::endl << std::endl;
        std::cout << "Podaj a: " << std::endl;
        std::cin >> a;
        std::cin.good();
       
        while( !( std::cin.good() ) )
        {
            std::cin.clear();
            std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            std::cout << "Podaj inna liczbe: ";
            std::cin >> a;
        }
       
        std::cout << "Podaj b: " << std::endl;
       
        std::cin >> b;
        std::cin.good();
       
        while( !( std::cin.good() ) )
        {
            std::cin.clear();
            std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            std::cout << "Podaj inna liczbe: ";
        }
       
        wynik = a + b;
        std::cout << "Wynik to: " << wynik << std::endl << std::endl;
       
    }
}


void odejmowanie()
{
    {
        int a, b, wynik;
       
        std::cout << "Odejmowanie: " << std::endl << std::endl;
        std::cout << "Podaj a: " << std::endl;
        std::cin >> a;
        std::cin.good();
       
        while( !( std::cin.good() ) )
        {
            std::cin.clear();
            std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            std::cout << "Podaj inna liczbe: ";
        }
       
        std::cout << "Podaj b: " << std::endl;
        std::cin >> b;
        std::cin.good();
       
        while( !( std::cin.good() ) )
        {
            std::cin.clear();
            std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            std::cout << "Podaj inna liczbe: ";
        }
        std::cout << "Wynik to: " << a << " - " << b << " = " << a - b << std::endl << std::endl;
    }
}

int main()
{
    std::cout << "W programie sa dostepne nastepujace opcje: \n" << std::endl;
    Options();
    std::cout << "Zycze przyjemnego korzystania z programu" << std::endl << std::endl;
    int num;
   
    do
    {
        Options();
        std::cin >> num;
       
        while( !( std::cin.good() ) )
        {
            std::cin.clear();
            std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
            std::cout << "Nie mozna wybrac tej opcji: \n";
        }
       
        switch( num )
        {
        case 1:
            dodawanie();
            break;
        case 2:
            odejmowanie();
            break;
            default:
            break;
        } //switch
    } while( num != 0 );
   
    return 0;
}
P-172327
pekfos
» 2018-09-16 12:26:32
proszę o sprawdzenia czy dobrze zrozumiałem zadanie i czy wyszło zgodnie z założeniem.
Zmodyfikuj kalkulator, który pisałeś w jednym ze wcześniejszych rozdziałów tak, aby korzystał on ze wcześniej napisanej funkcji wczytajLiczbe.
Ani trochę.

» Porady dla użytkowników cpp0x.plZakładanie tematów na forum zalecenie
Jeżeli rozważasz założenie tematu związanego ze sprawdzeniem poprawności kodu źródłowego to wiedz, że my nie jesteśmy od tego. Program albo działa, albo nie i jeżeli napisałeś go sam to również powinieneś umieć go samodzielnie przetestować oraz umieć samodzielnie odpowiedzieć na to pytanie.
Twój program nie działa. Tyle chociaż mogłeś sprawdzić.
P-172328
Pawelcio
Temat założony przez niniejszego użytkownika
» 2018-09-19 17:34:31
Co znaczy wg Ciebie, że "nie działa", nie uruchamia się? Nie liczy?  Bo to dość ogólne stwierdzenie i mało pomocne... U mnie program normalnie się kompiluje i raczej nie wrzucałbym tutaj kodu, żeby ktoś mi sprawdził czy się uruchamia.
P-172352
pekfos
» 2018-09-19 17:53:45
Nie działa poprawnie. Ze wszystkich wczytywanych liczb, tylko jedna jest zabezpieczona, co powinno ci natychmiast wyjść w zwykłym sprawdzeniu działania, zwłaszcza że jedyna zabezpieczona liczba nie jest nawet pierwszą wczytywaną. Do tego rozwiązanie jest nie na temat. Co się stało z funkcją wczytajLiczbe(), której miałeś użyć? W poprzednim zadaniu jeszcze ją miałeś..
P-172353
Pawelcio
Temat założony przez niniejszego użytkownika
» 2018-09-19 19:29:45
Dzięki za podpowiedzi, trochę mi się rozjaśniło. Użyłem tym razem tej funkcji i poskracałem maksymalnie jak umiałem. Wszystkie liczby są zabezpieczone. Nie wiem, dlaczego wszystkie liczby muszę wpisywać 2 razy i dopiero druga wpisana liczba jest brana do obliczeń?

C/C++
#include <iostream>
#include <limits>

void Options()
{
    std::cout << "[1] - dodawanie" << std::endl;
    std::cout << "[2] - odejmowanie" << std::endl;
    std::cout << "[0] - wyjscie z programu \n" << std::endl;
}

int GetNumber()
{
    int num;
    //std::cin >> num;
   
    while( !( std::cin >> num ) ) {
        std::cin.clear();
        std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
        std::cout << "Podaj inna liczbe: ";
    }
    return num;
}

void dodawanie()
{
   
    {
        int a, b, wynik;
       
        std::cout << "Dodawanie: " << std::endl << std::endl;
        std::cout << "Podaj a: " << std::endl;
        GetNumber();
        std::cin >> a;
       
        std::cout << "Podaj b: " << std::endl;
        GetNumber();
        std::cin >> b;
       
        std::cout << "Wynik to: " << a << " + " << b << " = " << a + b << std::endl << std::endl;
    }
}

void odejmowanie()
{
    {
        int a, b, wynik;
       
        std::cout << "Odejmowanie: " << std::endl << std::endl;
        std::cout << "Podaj a: " << std::endl;
        GetNumber();
        std::cin >> a;
       
        std::cout << "Podaj b: " << std::endl;
        GetNumber();
        std::cin >> b;
       
        std::cout << "Wynik to: " << a << " - " << b << " = " << a - b << std::endl << std::endl;
    }
}

int main()
{
    std::cout << "W programie sa dostepne nastepujace opcje: \n" << std::endl;
    Options();
    std::cout << "Zycze przyjemnego korzystania z programu" << std::endl << std::endl;
    int num;
    do
    {
        Options();
        GetNumber();
        std::cin >> num;
       
        switch( num )
        {
        case 1:
            dodawanie();
            break;
        case 2:
            odejmowanie();
            break;
            default:
            break;
        }
    } while( num != 0 );
   
    return 0;
}
P-172354
pekfos
» 2018-09-19 19:43:28
C/C++
GetNumber();
std::cin >> b;
To 2 wczytywania.
P-172355
rupson
» 2018-09-20 09:54:38
Te GetNumber() porozrzucane po wszystkich funkcjach powodują podwójne podawanie liczb, z czego każda i tak żyje własnym życiem. W chwili obecnej jak uruchomisz program to najpierw podajesz numer wyboru z sprawdzeniem poprawności - który tak naprawdę nic nie robi bo nie jest do niczego przypisany, dopiero druga wprowadzona liczba powoduje uruchomienie funkcji switch lecz ta jest już całkiem mnie zabezpieczona.
Co więcej dalej program ma błąd, gdyż wprowadzane liczby a i b przy odejmowaniu lub dodawaniu wcale nie są zabezpieczone.
Warto by było również się zastanowić czy zmienna int jest dobra dla liczb a i b, bo co się stanie gdy użytkownik będzie chciał dodać 12,333 + 0,777? :)

Odbiegając odrobinę od Twojego problemu, ja trochę inaczej zrozumiałem to zadanie, mianowicie chodziło o zmodyfikowanie kalkulatora, który robiliśmy dwa rozdziały wcześniej.
Poniżej wrzucam moje rozwiązanie, które działa jak należy. Może to Ci coś podpowie.
C/C++
#include <iostream>
#include <limits>

using namespace std;

float podaj_liczbe()
{
    float a;
    bool blad_liczba;
    do
    {
        cin >> a;
        blad_liczba = cin.fail();
        cin.clear();
        cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
    } while( blad_liczba == 1 );
   
    return a;
}
int podaj_dzialanie()
{
    int d;
    bool blad_dzialanie;
    do
    {
        cin >> d;
        blad_dzialanie = cin.fail();
        cin.clear();
        cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
    } while( blad_dzialanie == 1 );
   
    return d;
}

int main()
{
    float a, w = 0;
    int d;
    do
    {
        cout << "Wynik to " << w << endl;
        cout << "Podaj liczbe niezerowa lub 0 by zakonczyc: " << endl;
        a = podaj_liczbe();
       
        if( a == 0 ) return 0;
       
        cout << "Wybierz dzialanie: " << endl;
        cout << "[1] Dodawanie" << endl;
        cout << "[2] Odejmowanie" << endl;
        cout << "[3] Mnozenie" << endl;
        cout << "[4] Dzielenie" << endl;
        cout << "[5] Rezygnuje" << endl;
        d = podaj_dzialanie();
       
        if( d == 0 ) return 0;
       
        switch( d )
        {
        case 1:
            w = w + a;
            break;
        case 2:
            w = w - a;
            break;
        case 3:
            w = w * a;
            break;
        case 4:
            w = w / a;
            break;
        case 5:
            break;
        }
    } while( a != 0 && d != 0 );
   
    return 0;
}
P-172371
« 1 »
  Strona 1 z 1