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

Poziom 2 roz. 17 zadanie 2

Ostatnio zmodyfikowano 2016-08-29 20:32
Autor Wiadomość
barini
Temat założony przez niniejszego użytkownika
Poziom 2 roz. 17 zadanie 2
» 2016-08-28 22:01:23
Czy mógłby ktoś dokonać analizy poniższego kodu i podpowiedzieć gdzie są błędy? Niedawno zainteresowałem się programowaniem, a mówiąc precyzyjnie od tygodnia przerabiam kurs C++ i na chwile obecną czuję się jak dziecko we mgle. Będę wdzięczny za pomoc.

C/C++
#include<iostream>
#include<cstdlib>
using namespace std;
float wczytajZmienna1()
{
    float a;
    while( !( cin >> a ) )
    { cout << "Blad. Podaj poprawna liczbe" << endl;
        cin.clear();
        cin.sync(); }
   
    return a;
}
float wczytajZmienna2()
{
    float b;
    while( !( cin >> b ) )
    { cout << "Blad. Podaj poprawna liczbe" << endl;
        cin.clear();
        cin.sync(); }
   
    return b;
}

int dzialanie()
{
    int z;
    while( !( cin >> z ) )
    {
        cout << "Podaj poprawne dzialanie: " << endl;
        cin.clear();
        cin.sync();
    }
    return z;
}

void menu()
{
    cout << "Wybierz dzialanie:" << endl;
    cout << "[1] Dodawanie" << endl;
    cout << "[2] Odejmowanie" << endl;
    cout << "[3] Mnozenie" << endl;
    cout << "[4] Dzielenie" << endl;
    cout << "[5] Rezygnuj" << endl;
}

float dodawanie()
{
    float a = wczytajZmienna1();
    float b = wczytajZmienna2();
    return a + b;
}
float odejmowanie()
{
    float a = wczytajZmienna1();
    float b = wczytajZmienna2();
    return a - b;
}
float mnozenie()
{
    float a = wczytajZmienna1();
    float b = wczytajZmienna2();
    return a * b;
}
float dzielenie()
{
    float a = wczytajZmienna1();
    float b = wczytajZmienna2();
    cout << a / b;
    return a / b;
}
int main()
{
    float liczba1 = wczytajZmienna1();
    float liczba2 = wczytajZmienna2();
    float wynik = 10;
    int z = dzialanie();
   
    cout << "Witaj. Mam nadzieje, ze ten prosty kalkulator na cos sie przyda :-)" << endl;
    cout << "Aktualny wynik: " << wynik << endl;
   
    do {
        cout << "Wprowadz pierwsza liczbe: " << liczba1 << endl;
        cout << "Wprowadz druga liczbe: " << liczba2 << endl;
        menu();
       
        while( !( cin >> z ) )
        {
            cout << "Podaj poprawne dzialanie: " << endl;
            cin.clear();
            cin.sync();
        }
       
        switch( z )
        {
        case 0:
            cout << "Wprowadziles liczbe 0. Dzialanie programu zostanie zakonczone." << endl;
            return 0;
            break;
        case 1:
            wynik = liczba1 + liczba2;
            cout << "Aktualny wynik: " << wynik << endl;
            break;
        case 2:
            wynik = liczba1 - liczba2;
            cout << "Aktualny wynik: " << wynik << endl;
            break;
        case 3:
            wynik = liczba1 * liczba2;
            cout << "Aktualny wynik: " << wynik << endl;
            break;
        case 4:
            wynik = liczba1 / liczba2;
            cout << "Aktualny wynik: " << wynik << endl;
            break;
        case 5:
            cout << "Anulacja wprowadzonych danych" << endl;
            break;
        default: cout << "Nieprawidlowe dzialanie" << endl;
        }
    } while( liczba1 != 0 && liczba2 != 0 );
   
    cout << "Koniec";
    return 0;
}
P-151173
carlosmay
» 2016-08-28 22:06:38
Funkcje wykonującye działania matematyczne nie są używane (niepotrzebne).
Funkcje pobierające liczby od użytkownika są takie same, więc można zostawić tylko jedną i wywołać dwa razy.
P-151175
barini
Temat założony przez niniejszego użytkownika
Dziękuje za odpowiedź.
» 2016-08-29 19:10:39
Dziękuje za odpowiedź. Pokombinowałem i utworzyłem poniższy kod. Już działa. Tylko nie wiem jak zabezpieczyć działanie "dzielenie" przed wprowadzeniem zera w mianowniku. Pozdrawiam

C/C++
#include<iostream>
#include<cstdlib>
using namespace std;
float wczytajZmienna()
{
    float a;
    while( !( cin >> a ) )
    { cout << "Blad. Podaj poprawna liczbe" << endl;
        cin.clear();
        cin.sync(); }
   
    return a;
}

int dzialanie()
{
    int c;
    while( !( cin >> c ) )
    {
        cout << "Podaj poprawne dzialanie: " << endl;
        cin.clear();
        cin.sync();
    }
    return c;
}

void menu()
{
    cout << "Wybierz dzialanie:" << endl;
    cout << "[1] Dodawanie" << endl;
    cout << "[2] Odejmowanie" << endl;
    cout << "[3] Mnozenie" << endl;
    cout << "[4] Dzielenie" << endl;
    cout << "[5] Rezygnuj" << endl;
}

float dodawanie( float a, float b )
{
   
    return a + b;
}
float odejmowanie( float a, float b )
{
    return a - b;
}
float mnozenie( float a, float b )
{
   
    return a * b;
}
float dzielenie( float a, float b )
{
   
    return a / b;
}
int main()
{
    float wynik = 10;
   
    cout << "Witaj. Mam nadzieje, ze ten prosty kalkulator na cos sie przyda :-)" << endl;
    cout << "Aktualny wynik: " << wynik << endl;
   
    while( wynik != 0 ) { //do {
        cout << "Wprowadz pierwsza liczbe: ";
        float liczba1 = wczytajZmienna();
        cout << "Wprowadz druga liczbe: ";
        float liczba2 = wczytajZmienna();
        menu();
        int z = dzialanie();
       
        /*while(!(cin >> z))
                {
                    cout << "Podaj poprawne dzialanie: " << endl;
                    cin.clear();
                    cin.sync();
                }*/
       
        switch( z )
        {
        case 0:
            cout << "Wprowadziles liczbe 0. Dzialanie programu zostanie zakonczone." << endl;
            return 0;
            break;
        case 1:
            cout << "Aktualny wynik: " << dodawanie( liczba1, liczba2 ) << endl;
            break;
        case 2:
            cout << "Aktualny wynik: " << odejmowanie( liczba1, liczba2 ) << endl;
            break;
        case 3:
           
            cout << "Aktualny wynik: " << mnozenie( liczba1, liczba2 ) << endl;
            break;
        case 4:
           
            cout << "Aktualny wynik: " << dzielenie( liczba1, liczba2 ) << endl;
            break;
        case 5:
            cout << "Anulacja wprowadzonych danych" << endl;
            break;
        default: cout << "Nieprawidlowe dzialanie" << endl;
        }
    } //while(liczba1 != 0 && liczba2 != 0);
   
    cout << "Koniec";
    return 0;
}
P-151233
Gibas11
» 2016-08-29 19:25:07
C/C++
case 4:
if( liczba2 == 0 ) //Powinno zadziałać, ale generalnie porównywanie liczb zmiennoprzecinkowych operatorem == to zuo
{
    cout << "Mianownik nie może być zerem!" << endl;
    break;
}
cout << "Aktualny wynik: " << dzielenie( liczba1, liczba2 ) << endl;
break;
P-151234
karambaHZP
» 2016-08-29 20:32:02
Jeśli ciekawi cię porównywanie liczb zmiennoprzecinkowych, znalazłem to na forum
P-151236
« 1 »
  Strona 1 z 1