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

Lekcja 2.17

Ostatnio zmodyfikowano 2016-07-21 19:03
Autor Wiadomość
carlosmay
» 2016-07-21 00:18:20
C/C++
float zmienne()
{
    float liczba_1, liczba_2;
    cout << "Podaj pierwsza liczbe: ";
    cin >> liczba_1;
    cout << "Podaj druga liczbe: ";
    cin >> liczba_2;
    return 0;
}
Wczytywanie danych do zmiennych w tej funkcji nic nie daje (zmienne są niszczone przy wyjściu z funkcji).
Funkcja zawsze zawraca zero.

Uzupełnij ten kod:
C/C++
#include <iostream>
using namespace std;

float pobierzOperand()
{
    float operand;
    // uzupełnij funkcję
    return operand;
}

int pobierzOperacje()
{
    int operacja;
    // uzupelnij
    return operacja;
}

float dodawanie( float lewyOperand, float prawyOperand )
{
    return lewyOperand + prawyOperand;
}

// pozostałe operacje tak samo

void menu()
{
    // wypisz menu
}

int main()
{
    menu();
    int operacja = pobierzOperacje();
    float lewy = pobierzOperand();
    float prawy = pobierzOperand();
   
    switch( operacja ) {
    case 1:
        cout << "lewy + prawy = " << dodawanie( lewy, prawy ) << '\n';
        break;
    case 2:
        // odejmowanie
        break;
    case 3:
        // mnozenie
        break;
    case 4:
        // dzielenie
        // zabezpiecz przed dzielenie przez zero
        break;
    default:
        // nieznana operacja
    }
}

4. Pobierz liczbę używają funkcji i zapisz zwróconą wartość do zmiennej (użyj tej samej funkcji dla obu operandów i działania).
Trochę się rozpędziłem. Nie wiem czy znasz rzutowanie typów.
C/C++
int operacja =( int ) pobierzOperand(); // teraz nazwa nie jest adekwatna do zadania, ale można tak zrobić
// ew:
// int operacja = static_cast<int>(pobirzOperand());
P-150156
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-07-21 01:05:04
Nie znam się na rzutowaniu typów, coś widziałem na 4programers ale tego nie zgłębiłem i czułem się jak idiota bo nie wiedziałem o co chodzi za bardzo.Co sądzisz o wczytywaniu funkcji do funkcji z działaniem? Coś takiego ma rece i nogi o ile umie się poprawnie stworzyć kod?

C/C++
float zmienne()
{
    float liczba_1, liczba_2;
    cout << "Podaj pierwsza liczbe: ";
    cin >> liczba_1;
    cout << "Podaj druga liczbe: ";
    cin >> liczba_2;
    return 0;
}
W C++ istnieje możliwość aby return zwracał obie liczby lub więcej bez działania (mnożenia etc? )
P-150157
carlosmay
» 2016-07-21 01:18:12
W C++ istnieje możliwość aby return zwracał obie liczby lub więcej bez działania
Tak. Tablice. Struktury. Pary. Krotki.

Czemu nie zastosujesz tego co ci napisałem. Prościej się nie da.
Możesz jeszcze przekazać zmienne do funkcji przez referencję.

Down:
Co sądzisz o wczytywaniu funkcji do funkcji z działaniem? Coś takiego ma rece i nogi o ile umie się poprawnie stworzyć kod?
Jest to możliwe (i często stosowane).
W typ przypadku nie ma sensu, bo będzie niepotrzebne powielanie kodu (copy paste).
P-150160
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-07-21 01:56:05
Zastosuje jak najbardziej, twoją pomoc bardzo sobie cenię, dopytuję się bo jak zwykle ciekawość bierze górę.

Zrobione ale powiem że nie czuję się z tym dobrze,czuję że muszę więcej zadań zrobić. Pierwszy pisany schemat też muszę jakoś zrobić lepiej pisać kod.


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

using namespace std;

float pobierzOperand()
{ int operand;
    cout << "Podaj liczbe: ";
    cin >> operand;
    return operand;
}
int pobierzOperacje()
{
    int operacje;
    bool sprawdzam;
    cout << "Wybierz dzialanie: ";
    cin >> operacje;
    sprawdzam = cin.good();
   
    if( sprawdzam == false || operacje < 1 || operacje > 5 )
    do
    {
        cin.clear();
        if( isalpha( cin.get() ) )
             cout << "Litery sa niedozwolone!" << endl;
        else
             cout << "Bledny znak!" << endl;
       
        cout << "Podaj ponownie liczbe: ";
        cin >> operacje;
        sprawdzam = cin.good();
    } while( sprawdzam == false || operacje < 1 || operacje > 5 );
   
    return operacje;
}

float dodawanie( float lewyOperand, float prawyOperand )
{
    return lewyOperand + prawyOperand;
}
float odejmowanie( float lewyOperand, float prawyOperand )
{
    return lewyOperand - prawyOperand;
}

float mnozenie( float lewyOperand, float prawyOperand )
{
    return lewyOperand * prawyOperand;
}

float dzielenie( float lewyOperand, float prawyOperand )
{ if( lewyOperand != 0 && prawyOperand != 0 )
    { return lewyOperand / prawyOperand;
        return lewyOperand / prawyOperand;
    }
    else
         cout << " Nie dzielimy przez zero!" << endl;
   
    return 0;
}

void menu()
{ cout << "================================Kalkulator=================================" << endl;
    cout << "[1] Dodawanie \n[2] Odejmowanie \n[3] Mnozenie \n[4] Dzielenie\n[5] Koniec \n";
}
int main()
{
    menu();
    int operacje =( int ) pobierzOperacje();
    float lewy = pobierzOperand();
    float prawy = pobierzOperand();
   
    switch( operacje )
    {
    case 1:
        cout << "lewy + prawy = " << dodawanie( lewy, prawy ) << endl;
        break;
       
    case 2:
        cout << "lewy - prawy = " << odejmowanie( lewy, prawy ) << endl;
        break;
       
    case 3:
        cout << "lewy * prawy = " << mnozenie( lewy, prawy ) << endl;
        break;
       
    case 4:
        cout << "lewy / prawy = " << dzielenie( lewy, prawy ) << endl;
        break;
       
    case 5:
        cout << "Koniec" << '\n';
        break;
    }
}
P-150162
karambaHZP
» 2016-07-21 18:26:20
C/C++
int operacje =( int ) pobierzOperacje();
Rzutowanie na
( int )
 jest niepotrzebne, bo funkcja pobierzOperacje() zwraca wartość zgodną z typem zmiennej operacje.
P-150188
carlosmay
» 2016-07-21 19:03:01
C/C++
if( lewyOperand != 0 && prawyOperand != 0 ) // lewy może być 0
{ return lewyOperand / prawyOperand; // dwa razy to samo?
    return lewyOperand / prawyOperand;
}
P-150190
1 2 « 3 »
Poprzednia strona Strona 3 z 3