Aide pour faire une fonction

Signaler
Messages postés
3
Date d'inscription
samedi 3 mars 2007
Statut
Membre
Dernière intervention
21 mars 2007
-
Messages postés
3
Date d'inscription
samedi 3 mars 2007
Statut
Membre
Dernière intervention
21 mars 2007
-
salut tout le monde... pouvez vous maidez, jarive pas a faire une fonction ki fai la somme ki suit cet formule

C une formule ki trouve le nombres de catalan... aidez moi je vou pri..
merci

5 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
A mon avis, le plus simple, c'est de faire une fonction recursive. A partir de la, la route est toute tracée.

// Méthode brute et méchante
int Compute(int _index)
{
    if (_index == 0)
        return 1;
    else
    {
        int result = 0;
       
        for (int k = 0 ; k < _index ; ++k)
            result += Compute(k) * Compute(_index - 1 - k);
           
        return result;
    }
};
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Mais je comprend pas bien pourquoi tu a pris cette formule alors que sur cette page, yen a une bien plus simple:
http://www.recreomath.qc.ca/dict_catalan_nombre.htm
Messages postés
3
Date d'inscription
samedi 3 mars 2007
Statut
Membre
Dernière intervention
21 mars 2007

voila mon programe je   doi utiliser 2 fonctions!
la premiere avec cete formul 2(2n - 3)/n
la seconde <!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:97.5pt;
height:24pt'>
<v:imagedata src="file:///C:\DOCUME~1\Sajid\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:href="http://chronomath.irem.univ-mrs.fr/chronom2/catalan2.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

mais jarive pa a laresoudre mm a laide de ta fonction ptetre ke je my pren mal... peut tu maider stp???

-------------------------------------------------------------------------------------------------------
#include <stdio.h>
double catalan(int n)
{
    double Cn1;
    int i;
    double Cn;
    Cn=1;

    for (i=2;i<=n;i++){
        Cn1=((2*((2*i)-3))*Cn)/i;
        Cn=Cn1;
        printf("\n n=%d\t|\tCn=%.0f",i,Cn1);
        }
return (Cn);
}
double catalan2(int n)
{

    double Cn1;
    int i;
    double Cn;
    Cn=1;
    for (i=2;i<=n;i++){
        Cn1+= catalan(i)*catalan(n-1-i);

printf("\n n=%d\t|\tCn=%.0f",i,Cn1);}

   return (Cn);

}

main() {
int n;
printf("n:");
scanf("%d",&n);

    printf("\n Les nombres de Catalan sont:");
     printf("\n\n Avec:\t|\tOn a:\n");
     printf("----------------------------");
     printf("\n n=1\t|\tCn=1");

    catalan(n);

    catalan2(n);

 getch();}
----------------------------------------------------------------------------------------------------
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ma fonction doit etre utiliser de la facon suivante:

1er nombre de catalan : Compute(1);
2eme nombre:   Compute(2);

for (int i = 0 ; i < 10 ; ++i)
{
std::cout << i << " -> " << Compute(i) << std::endl;
}

Et ca donne bien, 1, 1, 2, 5, 14, etc ...

Par ailleurs, ta fonction catalan2 est fausse. Si tu veux copier la mienne, faut le faire intégralement et pas enlever une ligne.
int Compute(int _index)
{
    if (_index == 0)
        return 1;
    else
    {
        int result = 0;
       
        for (int k = 0 ; k < _index ; ++k)
            result += Compute(k) * Compute(_index - 1 - k);
           
        return result;
    }
};

Encore une remarque pourquoi des "double" pour cette fonction "catalan2", alors qu'elle ne manipule que des entiers ?
Messages postés
3
Date d'inscription
samedi 3 mars 2007
Statut
Membre
Dernière intervention
21 mars 2007

merci bcp luhtor....