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

[Rozdział 17] Funkcje

Ostatnio zmodyfikowano 2014-11-02 22:39
Autor Wiadomość
luuuzik
Temat założony przez niniejszego użytkownika
[Rozdział 17] Funkcje
» 2014-11-01 20:36:03
Witam, mam pytanie: Jak zagnieździć funkcję we funkcji? Przykład:

C/C++
#include <iostream>
using namespace std;


int sprawdzanie()
{
   
   
    do
    {
        int a, b;
        bool poprawnie;
        poprawnie = cin.good();
       
        cin.clear();
        cin.sync();
       
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
       
       
    } while( !poprawnie );
   
}




int dodawanie()
{
    int a, b;
    cout << "Podaj pierwsza liczbe: " << endl;
    cin >> a;
    int sprawdzanie();
    cout << "Podaj druga liczbe: " << endl;
    cin >> b;
    int sprawdzanie();
    cout << "Suma liczb " << a << " i " << b << " jest rowna " << a + b << endl;
    return a + b;
   
}

int main()
{
    int liczba;
   
    cout << "dodaj do siebie liczby" << endl;
    liczba = dodawanie();
    cout << "Wynik wynosi: " << liczba << endl;
    return 0;
   
}


Chodzi mi tutaj, aby każda z funkcji ( dodawanie, odejmowanie, mnożenie, dzielenie) korzystała z funkcji sprawdzanie, która to będzie sprawdzać czy wczytywane liczby są prawidłowe.
P-119828
stryku
» 2014-11-01 20:41:35
Funkcja sprawdzenie nie powinna być void bo nic nie zwracasz

a wywołujesz ją po prostu
C/C++
cin >> a;
sprawdzenie();
cin >> b;
sprawdzenie();
/*..*/

Co innego jeżeli chcesz, żeby program cisnął użytkownika, aż poda prawidłową liczbę. Wtedy w funkcji sprawdzenie powinieneś mieć wczytywanie liczb dopóki są złe i zwrócenie jeżeli użytkownik poda dobrą. I wtedy wywołasz ją tak
a = sprawdzenie();

I taka mała dygresja. Trochę źle to rozplanowałeś. Powinieneś mieć funkcję, która wczyta liczbę i ją zwróci, a nie tak jak to robisz teraz.
P-119829
luuuzik
Temat założony przez niniejszego użytkownika
» 2014-11-02 22:09:17
Lepiej?

C/C++
#include <iostream>
using namespace std;

float dodawanie()
{
    float a, b;
    bool poprawnie;
   
    do
    {
        cout << "Podaj pierwsza liczbe: " << endl;
        cin >> a;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    do
    {
        cout << "Podaj druga liczbe: " << endl;
        cin >> b;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    return a + b;
}

float odejmowanie()
{
    float a, b;
    bool poprawnie;
    do
    {
        cout << "Podaj pierwsza liczbe: " << endl;
        cin >> a;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    do
    {
        cout << "Podaj druga liczbe: " << endl;
        cin >> b;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    return a - b;
}

float mnozenie()
{
    float a, b;
    bool poprawnie;
    do
    {
        cout << "Podaj pierwsza liczbe: " << endl;
        cin >> a;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    do
    {
        cout << "Podaj druga liczbe: " << endl;
        cin >> b;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    return a * b;
}

float dzielenie()
{
    float a, b, wynik;
    bool poprawnie;
    do
    {
        cout << "Podaj pierwsza liczbe: " << endl;
        cin >> a;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    do
    {
        cout << "Podaj druga liczbe: " << endl;
        cin >> b;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    return a / b;
}

int main()
{
    int z, wynik;
    do
    {
       
        cout << "Co wybierasz?\n" << endl;
        cout << "[1]Dodawanie" << endl;
        cout << "[2]Odejmowanie" << endl;
        cout << "[3]Mnozenie" << endl;
        cout << "[4]Dzielenie" << endl;
       
        cin >> z;
       
        if( z > 0 && z < 5 )
        {
            switch( z )
            {
            case 1:
                wynik = dodawanie();
                break;
               
            case 2:
                wynik = odejmowanie();
                break;
               
            case 3:
                wynik = mnozenie();
                break;
               
            case 4:
                wynik = dzielenie();
                break;
            }
        }
        else
        {
            cout << "Blad! Wybrales z poza zakresu!\n" << endl;
            cin.clear();
            cin.sync();
        }
    } while( z < 0 || z > 4 || z == 0 );
   
    cout << "Wynik wynosi: " << wynik << endl;
    return 0;
   
}
P-119890
stryku
» 2014-11-02 22:32:14
Z tym czy lepiej to bym polemizował. Teraz przynajmniej osiągnąłeś to co chociałeś.

Ale zobacz. Zrobisz taką funkcję sobie:
C/C++
float pobierzLiczbe()
{
    float a;
    bool poprawnie;
   
    do
    {
        cout << "Podaj liczbe: " << endl;
        cin >> a;
        poprawnie = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnie == 1 )
        {
            cout << "Podales prawidlowa liczbe!" << endl;
        }
        else
        {
            cout << "Blad! To nie liczba!" << endl;
        }
    } while( !poprawnie );
   
    return a;
}

i zauważ o ile krótszy będziesz miał kod.

Teraz funkcja dodawanie będzie wyglądała tak
C/C++
float dodawanie()
{
    float a, b;
   
    a = pobierzLiczbe();
    b = pobierzLiczbe();
   
    return a + b;
}

Lepiej? :)
P-119891
luuuzik
Temat założony przez niniejszego użytkownika
» 2014-11-02 22:39:36
No tak :D I od razu krótszy kod jest :P
Dzięki wielkie:)
P-119892
« 1 »
  Strona 1 z 1