Aide pour faire une fonction

kassimsajid Messages postés 3 Date d'inscription samedi 3 mars 2007 Statut Membre Dernière intervention 21 mars 2007 - 19 mars 2007 à 18:25
kassimsajid Messages postés 3 Date d'inscription samedi 3 mars 2007 Statut Membre Dernière intervention 21 mars 2007 - 21 mars 2007 à 18:14
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 mars 2007 à 19:15
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;
    }
};
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 mars 2007 à 19:54
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
0
kassimsajid Messages postés 3 Date d'inscription samedi 3 mars 2007 Statut Membre Dernière intervention 21 mars 2007
19 mars 2007 à 23:51
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();}
----------------------------------------------------------------------------------------------------
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 mars 2007 à 01:38
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kassimsajid Messages postés 3 Date d'inscription samedi 3 mars 2007 Statut Membre Dernière intervention 21 mars 2007
21 mars 2007 à 18:14
merci bcp luhtor....
0
Rejoignez-nous