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

Wyznaczanie wartości symbolu newtona

Ostatnio zmodyfikowano 2015-11-29 15:55
Autor Wiadomość
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.

C/C++
#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:

C/C++
#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
P-140801
michal11
» 2015-11-25 19:55:48
Przy rekurencyjnym wywołaniu funkcji oblicz, przekazujesz tylko jeden argument, a ona wymaga dwóch.
P-140813
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.
P-140815
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?
P-140816
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.
P-140818
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.
P-140821
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 .
P-140823
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)
C/C++
#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 ); // kombinacje 5 z 6 jest tak samo jak 1 z 6 - optymalizacja !!!
    //ile=k; //bez optymalizacji!!!
   
    for( int i = 1; i <= ile; i++ ) Wynik = Wynik *( n - i + 1 ) / i; //pętla licząca dwumian
   
    cout << Wynik << endl;
}
P-141054
« 1 » 2
  Strona 1 z 2 Następna strona