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

C++ Przekazywanie wartości przez wskaźnik

Ostatnio zmodyfikowano 2018-12-09 22:43
Autor Wiadomość
misza678
Temat założony przez niniejszego użytkownika
C++ Przekazywanie wartości przez wskaźnik
» 2018-12-08 14:00:59
Witam.
Mam problem z zadaniem na studia. Zaznacze, że mój poziom jest bardzo podstawowy. Otóż funkcja nie zwraca mi wartości, prawdopodobnie wszystko co tam napisałem jest źle. Proszę o pomoc. Zaznaczam, że to są moję początki proszę o wyrozumiałość.
Treść zadania:
Napisać program, który wykona na liczbach rzeczywistych wszystkie
wymienione poniżej działania zgodnie z wyborem użytkownika:
iloraz,pierwiatek kwadratowy (z uwzględnieniem sytuacji, gdy liczba pod
pierwiastkiem jest ujemna), potęga (z uwzględnieniem sytuacji, gdy
podstawa jest równa 0, a wykładnik jest ujemny), iloczyn skalarny dwóch
Wektorów (dwuwymiarowych) . Każde z działań powinno być zrealizowane
w osobnej funkcji z argumentami będącymi argumentami działania,
funkcje powinny przekazywać na zewnątrz wynik działania i ewentualną
informację, że działanie nie może zostać wykonane (dotyczy to funkcji
iloraz, pierwiastek kwadratowy i potęga) – w takim przypadku,
do wyprowadzenia takiej informacji na zewnątrz funkcji należy użyć
argumentu przekazanego przez referencję. Do przekazywania
argumentów i zwracania wartości z funkcji należy użyć wskaźników.
Wybór działania powinien odbywać się za pomocą instrukcji switch.

C/C++
#include <iostream>

int x, y;
double dzielnik, dzielna, liczba, potega, liczba2, * c;
using namespace std;
int wybor, status;
double * dzielenie( double * dzielnik, double * dzielnia, int & status )
{
   
    if( dzielnia == 0 )
    {
        status = 0;
        return 0;
    }
    else
    {
        * dzielnik / * dzielnia;
       
    }
}


int main()
{
    cout << "Wybierz dzialanie(1-dzielenie 2-pierwiastkowanie 3-potegowanie)" << endl;
    cin >> wybor;
    switch( wybor ) {
    case 1:
        {
           
            cout << "Podaj dzielnik" << endl;
            cin >> dzielnik;
            cout << "Podaj dzielna" << endl;
            cin >> dzielna;
            if( & status == 0 )
            {
               
                cout << "Nie mozna wykonac dzielenia" << endl;
            }
            else
            {
                cout << & dzielenie( & dzielnik, & dzielna, status ) << "";
            }
           
            break;
        }
    case 2:
        {
            cout << "Podaj liczbe, ktora ma zostac spierpiastkowana";
            cin >> liczba;
           
           
           
        }
    case 3:
        {
           
            cout << "Podaj liczbe" << endl;
            cin >> liczba2;
            cout << "Podaj potege" << endl;
            cin >> potega;
           
        }
       
    }
   
    system( "pause" );
}
P-173164
pekfos
» 2018-12-08 15:38:37
Funkcja powinna raczej wyglądać tak:
C/C++
void dzielenie( double * dzielnik, double * dzielnia, double * wynik, int & status )
Wskaźnik nie ma tu za wiele sensu przy zwracaniu wartości przez return. No ale to zadanie na studia, nie musi mieć żadnego sensu i praktycznego zastosowania.

Otóż funkcja nie zwraca mi wartości, prawdopodobnie wszystko co tam napisałem jest źle.
Wszystko się zgadza.
P-173165
misza678
Temat założony przez niniejszego użytkownika
» 2018-12-08 17:59:50
Niestety funkcja nadal zwraca jakieś dziwne wartości typu 200&&w000. Mógłbyś mi napisać jak ma wyglądać ta funkcja i jak ją poprawnie wywołać?
C/C++
#include <iostream>

int x, y;
double dzielnik, dzielna, liczba, potega, liczba2, wynik;
using namespace std;
int wybor, status;
void dzielenie( double * dzielnik, double * dzielna, double * wynik, int & status )
{
   
    if( dzielna == 0 )
    {
        status = 0;
       
    }
    else
    {
        * wynik = * dzielnik / * dzielna;
       
       
    }
   
}


int main()
{
    cout << "Wybierz dzialanie(1-dzielenie 2-pierwiastkowanie 3-potegowanie)" << endl;
    cin >> wybor;
    switch( wybor ) {
    case 1:
        {
           
            cout << "Podaj dzielnik" << endl;
            cin >> dzielnik;
            cout << "Podaj dzielna" << endl;
            cin >> dzielna;
            dzielenie( & dzielnik, & dzielna, & wynik, status );
            if( & status == 0 )
            {
               
                cout << "Nie mozna wykonac dzielenia" << endl;
            }
            else
            {
               
                cout << & wynik;
            }
           
           
           
            break;
        }
    case 2:
        {
           
            cout << "Podaj liczbe, ktora ma zostac spierpiastkowana";
            cin >> liczba;
           
           
           
        }
    case 3:
        {
           
            cout << "Podaj liczbe" << endl;
            cin >> liczba2;
            cout << "Podaj potege" << endl;
            cin >> potega;
           
           
        }
       
       
    }
   
   
    system( "pause" );
}
P-173168
pekfos
» 2018-12-08 18:01:25
C/C++
cout << & wynik;
C/C++
cout << wynik;
P-173169
misza678
Temat założony przez niniejszego użytkownika
» 2018-12-09 20:32:03
Niestety program nadal nie działa, nie chce mi zapisać status jako 10. Zawsze jest zero. Masz jakiś pomysł?
C/C++
#include <iostream>
#include <math.h>
int x, y;
double dzielnik, dzielna, liczba, potega, liczba2, wynik, status;
using namespace std;
int wybor;
void dzielenie( double * dzielnik, double * dzielna, double * wynik ) //dzielenie
{
    if( dzielna == 0 )
    {
       
        double status = 10;
    }
    else
    {
        * wynik = * dzielnik / * dzielna;
    }
}
void pierwiastek( double * liczba, double * wynik, int status ) //pierwiastek
{
    if( liczba < 0 )
    {
        status = 0;
    }
    else
    {
        * wynik = sqrt( * liczba );
    }
}

int main()
{
    cout << "Wybierz dzialanie(1-dzielenie 2-pierwiastkowanie 3-potegowanie)" << endl;
    cin >> wybor;
    switch( wybor ) {
    case 1:
        {
            cout << "Podaj dzielnik" << endl;
            cin >> dzielnik;
            cout << "Podaj dzielna" << endl;
            cin >> dzielna;
            dzielenie( & dzielnik, & dzielna, & wynik );
            if( status == 10 )
            {
                cout << "Nie mozna wykonac dzielenia" << endl;
            }
            else
            {
                cout << wynik;
            }
            break;
        }
    case 2:
        {
            pierwiastek( & liczba, & wynik, status );
            cout << "Podaj liczbe, ktora ma zostac zpierpwiastkowana" << endl;
            cin >> liczba;
            if( status == 1 )
            {
                cout << "Nie mozna wykonac pierwiastkowania" << endl;
            }
            else
            {
                cout << wynik;
            }
            break;
           
           
        }
    case 3:
        {
           
            cout << "Podaj liczbe" << endl;
            cin >> liczba2;
            cout << "Podaj potege" << endl;
            cin >> potega;
           
           
        }
       
       
    }
   
   
    system( "pause" );
}
P-173170
pekfos
» 2018-12-09 20:49:53
P-173171
misza678
Temat założony przez niniejszego użytkownika
» 2018-12-09 21:09:54
Przepraszam jednak przeczytałem to dokładnie 3 razy. Nie mam już pomysłu co robię źle.
P-173172
pekfos
» 2018-12-09 21:12:38
Nie przekazujesz statusu przez referencję.
P-173173
« 1 » 2
  Strona 1 z 2 Następna strona