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. #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" ); }
|
|
pekfos |
» 2018-12-08 15:38:37 Funkcja powinna raczej wyglądać tak: 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. |
|
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ć? #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" ); }
|
|
pekfos |
» 2018-12-08 18:01:25 |
|
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ł? #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 ) { if( dzielna == 0 ) { double status = 10; } else { * wynik = * dzielnik / * dzielna; } } void pierwiastek( double * liczba, double * wynik, int status ) { 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" ); }
|
|
pekfos |
» 2018-12-09 20:49:53 |
|
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. |
|
pekfos |
» 2018-12-09 21:12:38 Nie przekazujesz statusu przez referencję. |
|
« 1 » 2 |