melon Temat założony przez niniejszego użytkownika |
lekcja 17 kalkulator » 2013-03-05 11:25:22 Witam Prosze o pomoc w tym zadaniu: Po podaniu "a" wyswietla mi sie losowa liczba, tak samo dzieje sie z "b" Czy jest mozliwosc te dwie funkcje zastąpić jedna ? #include <iostream> using namespace std; int wczytaja( int a ) { do { cin.clear(); cin.sync(); cout << "podaj a" << endl; cin >> a; } while( a == 0 ); return a; } int wczytajb( int b ) { do { cin.clear(); cin.sync(); cout << "podaj b " << endl; cin >> b; } while( b == 0 ); return b; } int main() { int a, b; int a1; do { do { cin.clear(); cin.sync(); cout << "podaj dzialanie" << endl; cout << " [1]dodawanie \n [3]wyjscie" << endl; cin >> a1; } while( a1 > 3 ); switch( a1 ) { case 1: wczytaja( a ); cout << a; wczytajb( b ); cout << b; cout << "a+b="; cout << a + b << endl; break; case 3: cout << "the End" << endl; break; } } while( a1 <= 2 ); return 0; } |
|
Berux |
» 2013-03-05 12:57:49 Witam. Twój problem polega na tym, że funkcja pracuje na kopiach zmiennych podanych w argumentach. Czyli gdy wywołujesz funkcję, np. wczytajLiczbe, tak: wczytajLiczbe( a ); a w deklaracji tej funkcji masz: wczytajLiczbe( int a ); to funkcja tworzy sobie kopię tego obiektu a. Możesz to rozwiązać na kilka sposobów. Pierwszy, to użycie referencji, ale o tym jest napisane w dalszej części kursu. Drugi sposób, to utworzenie zmiennej w funkcji głównej, do której przypiszesz rezultat funkcji (w tym przypadku wczytajLiczbe()), czyli wartość zwracaną przez funkcję. Wyglądałoby to w twoim przypadku tak: int wczytajLiczbe( a ) { }
int main() { int a = wczytajLiczbe( a ); } Chciałbym tu jeszcze dodać, że nie funkcja ta nie musi przyjmować żadnych argumentów. Wystarczy, że w "ciele" tej funkcji zdefiniujesz sobie zmienną, do której wczytasz liczbę od użytkownika. Na końcu tego podprogramu zwrócisz ("zreturnujesz") ten obiekt. Istnieje jeszcze trzeci sposób , mianowicie przez użycie wskaźników (jeśli źle mówię, to poprawcie :)) - jednak nie jesteś jeszcze na tym etapie, lekcja o wskaźnikach jest w tutejszym kursie nieco dalej. I jeszcze jedno. Nie musisz tworzyć dwóch funkcji do wczytywania osobno liczby a, osobno b. Wystarczy Ci jedna funkcja. Powodzenia. |
|
melon Temat założony przez niniejszego użytkownika |
» 2013-03-05 13:56:00 Dzięki za odpowiedz!! Posiadając dwie funkcje i przy Twojej pomocy łatwo jest zreturnować osobno a i b. Jednak gdy stworzę tylko jedną funkcje to potrafie tylko returnować wynik w sposob podany ponizej: Z chęcią bym w funkcji "wczytajLiczbe" na koncu napisal return a,b a nie a+b. ALe może tak jak mówisz poczekam na te referencje #include <iostream> using namespace std; int wczytajLiczbe( int a, int b ) { do { cin.clear(); cin.sync(); cout << "podaj a" << endl; cin >> a; } while( a == 0 ); do { cin.clear(); cin.sync(); cout << "podaj b " << endl; cin >> b; } while( b == 0 ); return a + b; } int main() { int a1; do { do { cin.clear(); cin.sync(); cout << "podaj dzialanie" << endl; cout << " [1]dodawanie \n [3]wyjscie" << endl; cin >> a1; } while( a1 > 3 ); switch( a1 ) { case 1: int a, b; cout << "a+b=" << wczytajLiczbe( a, b ) << endl; break; case 3: cout << "the End" << endl; break; } } while( a1 <= 2 ); return 0; } |
|
Figaro |
» 2013-03-05 14:10:18 I jeszcze tutaj taka mała uwaga :) int wczytajb( int b ) { do { cin.clear(); cin.sync(); cout << "podaj liczbe: " << endl; cin >> b; } while( b == 0 );
A pewnie nieraz jeszcze Ci się przyda funkcja która umożliwi także wczytanie 0.. :) chyba ze się mylę to mnie poprawcie :D bo tez początkujący jestem.. |
|
Figaro |
» 2013-03-05 14:25:01 Kolego spróbuj tak: int wczytajb( int cos ) { do { cin.clear(); cin.sync(); cout << "podaj liczbe: " << endl; cin >> cos; } while( cos == 0 ); return cos; }
i w main() int a, b; a = wczytajb( a ); b = wczytajb( b );
cout << "a: " << a << endl; cout << "b: " << b << endl;
i zobacz jakie wyniki otrzymasz? jeśli do funkcji dajesz np int a i wywołujesz wczytajb( a ); to nie znaczy ze początek funkcji musi wyglądać tak: int wczytajb( int a ) możesz dać dowolna nazwę tylko typ- tu int musi się zgadzać.. przeczytaj jeszcze raz cześć kursu uważnie z funkcjami.. |
|
Figaro |
» 2013-03-05 14:36:19 na maja dzisiejsza wiedzę :) -a jestem parę rozdziałów dalej od Ciebie :)
nie da się returnowac dwóch zmiennych tak jak chcesz to zrobić: "return a,b a nie a+b" ta druga opcja daje jedna zmiena :) natomiast pierwsza to dwie :) z tego co wiem z funkcji za pomocą return da się zwracać tylko jedna zmienną chyba ze w tablicy :) no i przez referencje możesz od razu pod a i b przypisać ale to sam zobaczysz..
|
|
melon Temat założony przez niniejszego użytkownika |
» 2013-03-05 14:59:39 Wiem ze zmienne w funkcji moga miec rozne nazwy niz te w main. No być może i prawde mowisz z tym zwracaniem jednej zmiennej maxymalnie poprzez jedną funkcje. Chciałbym tak naprawdę uzyskiwać odpowiedzi, które mozna osiągnąc na tym etapie kursu a nie to co bedzie w przyszlosci, jednak takie jest zadanie w lekcji 17, proszą tam o funkcje wczytajLiczbę a nie odrau wczytanie sumy (z ktorym poradze se). Mam nadzieje ze Tomczyk cos jeszcze pomoże, odnosząc się do jego zdania "I jeszcze jedno. Nie musisz tworzyć dwóch funkcji do wczytywania osobno liczby a, osobno b. Wystarczy Ci jedna funkcja."
|
|
Figaro |
» 2013-03-05 15:20:16 mysle ze tomczyk11255 chodzilo o to ze po prostu miales dwie funkcje wczytujace liczby: int wczytaja( int a ) i int wczytajb( int b ) int wczytaja( int a ) { do { cin.clear(); cin.sync(); cout << "podaj a" << endl; cin >> a; } while( a == 0 ); return a; } int wczytajb( int b ) { do { cin.clear(); cin.sync(); cout << "podaj b " << endl; cin >> b; } while( b == 0 ); return b; }
z ktorych jedna jest zbedna bo wystarczy wywolac jedna z nich x2 i mamy wczytane liczby :) np. tak jak pisalem wyzej.. int a, b; a = wczytajb( a ); b = wczytajb( b );
to funkcje wczytujaca mozna jeszcze troche uproscic i warunek trzeba poprawic bo 0 tez czasem wczytujemy :) fajnie jak by to tak wygladało: int wczytajLiczbe() { int a; return a; }
int a, b; a = wczytajLiczbe(); b = wczytajLiczbe();
Pozdrawiam. |
|
« 1 » 2 |