Wyznaczanie wartości symbolu newtona
Ostatnio zmodyfikowano 2015-11-29 15:55
matiz997 Temat założony przez niniejszego użytkownika |
Wyznaczanie wartości symbolu newtona » 2015-11-25 19:03:52 Cześć, mam wyznaczyć rekurencyjnie wartość symbolu newtona ze wzoru: n!/(k!(n-k)!) założenia są takie że n>=k>=0. Napisałem poniższy kod jednak przy liczbach niespełniających założenia program się zacina. #include <iostream> using namespace std; double x( int n ) { if( n == 0 ) return 1; else return x( n - 1 ) * n; } double y( int k ) { if( k == 0 ) return 1; else return x( k - 1 ) * k; } double z( int p ) { if( p == 0 ) return 1; else return x( p - 1 ) * p; } int main() { int s, p, n, k; cout << "podaj n i k: "; cin >> n >> k; p = n - k; s = x( n ) /( y( k ) * z( p ) ); if( n >= k && k >= 0 ) cout << s << endl; else return 0; return 0; }
Dlatego chciałem stworzyć program, który nie będzie się zacinać i doszedłem do takiego momentu: #include <iostream> using namespace std; int oblicz( int n, int k ) { if( n == 0 ) return 1; else if( k == 0 ) return 1; else if( n >= k && k >= 0 ) return( oblicz( n - 1 ) * n ) /(( oblicz( k - 1 ) * k ) * oblicz(( n - k ) *(( n - 1 ) -( k - 1 ) ) ) ); } int main() { int n, k; cout << "podaj n i k: "; cin >> n >> k; cout << oblicz( n, k ) << endl; return 0; }
Program nie chce się skompilować, w logu pojawiają się następujące błędy: C:\Users\MATI-ADMIN\Desktop\testowe.cpp||In function 'int oblicz(int, int)':| C:\Users\MATI-ADMIN\Desktop\testowe.cpp|7|error: too few arguments to function 'int oblicz(int, int)'| C:\Users\MATI-ADMIN\Desktop\testowe.cpp|3|note: declared here| C:\Users\MATI-ADMIN\Desktop\testowe.cpp|7|error: too few arguments to function 'int oblicz(int, int)'| C:\Users\MATI-ADMIN\Desktop\testowe.cpp|3|note: declared here| C:\Users\MATI-ADMIN\Desktop\testowe.cpp|7|error: too few arguments to function 'int oblicz(int, int)'| C:\Users\MATI-ADMIN\Desktop\testowe.cpp|3|note: declared here| ||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Nie wiem co mam zmienić w kodzie żeby program zaczął poprawnie działać. Z góry dziękuję za pomoc |
|
michal11 |
» 2015-11-25 19:55:48 Przy rekurencyjnym wywołaniu funkcji oblicz, przekazujesz tylko jeden argument, a ona wymaga dwóch. |
|
Rashmistrz |
» 2015-11-25 20:02:16 W pierwszym kodzie funkcje x, y, z, wykonują zupełnie tą samą rzecz (silnię)...
W drugim kodzie wywołujesz funkcję oblicz z nieprawidłową liczbą argumentów. |
|
matiz997 Temat założony przez niniejszego użytkownika |
» 2015-11-25 20:09:26 w takim razie co mam inaczej napisać w drugim kodzie? |
|
michal11 |
» 2015-11-25 20:25:29 Daj warunek żeby nie liczyło dla liczb nie spełniających założenia i już, i skróć pierwszy program. |
|
Rashmistrz |
» 2015-11-25 20:36:17 W drugim kodzie musisz dodać funkcję liczącą silnię i zastąpić nią wewnętrzne wywołania funkcji oblicz. |
|
matiz997 Temat założony przez niniejszego użytkownika |
» 2015-11-25 20:41:55 Już sobie poradziłem z tym zadaniem. Jeszcze raz dziękuję wszystkim za pomoc . |
|
mateczek |
» 2015-11-29 10:14:44 dwumian (pomijając wzory) to poprostu dla totolotka 49/6 będzie 6 ostatnich cyfr przez 6 pierwszych (49*48*47*46*45*44)/(1*2*3*4*5*6) #include <iostream> using namespace std; int main() { int n, k; cin >> n >> k; long long Wynik = 1; int ile =(( n - k ) > k ) ? k :( n - k ); for( int i = 1; i <= ile; i++ ) Wynik = Wynik *( n - i + 1 ) / i; cout << Wynik << endl; }
|
|
« 1 » 2 |