TRIANGLE DE PASCAL

rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 - 22 nov. 2006 à 20:55
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008 - 24 nov. 2006 à 17:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40430-triangle-de-pascal

Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
24 nov. 2006 à 17:08
C'est marrant j'ai codé le developpement des polynomes ya 2 jours, a peu près en même temps que tu postais :)
Une fois qu'on a le tableau de pascal, plus grand chose a faire, juste nettoyer un peu la mise en forme pour pas avoir des a^0 ou des 1*a un peu partout.
Pour ceux qui veulent voir ce que ca donne:

#define MAX_TAB 128
int pasc[MAX_TAB][MAX_TAB]; // tableau de pascal

void Pascal (int n)
{
int i,j;
pasc[0][0] = 1;
for ( i = 1; i <= n ; i++ )
{
pasc[i][0] = 1;
for( j = 1; j <= i ; j++ )
pasc[i][j] = pasc[i-1][j-1] + pasc[i-1][j];
}
}

void Developp (int n, char op)
{
Pascal (n);
printf ("(a %c b)^%d =\n", op, n);
for (int i = 0; i <= n; i++)
{
// Le signe
if (op == '-')
printf ("%c", i%2 ? '-': '+');
else
printf ("+");

// Le coefficient
if (pasc[n][i] != 1)
printf ("%d", pasc[n][i]);
// L'affichage des facteurs, nettoyé
if (n-i == 0)
printf ("b^%d", n);
else if (n-i == 1)
printf ("a*b^%d",i);
else if (i == 0)
printf ("a^%d", n);
else if (i == 1)
printf ("a^%d*b", n-1);
else
printf ("a^%d*b^%d", n-i, i);
printf ("\n");
}
}
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 nov. 2006 à 19:31
Si le but est de calculer la 1000ème ligne, un ou deux tableaux de 1000 entiers doivent suffire
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
23 nov. 2006 à 19:19
Tu prends l'élément -1 .. ca devrait même pas marcher ^^

4Mo c'est pas mal mais pas gravissime sachant qu'aujourd'hui les ordis sont vendus avec 1 go .. et que ce programme n'est pas une tache de fonds mais un truc qu'ont utilise vite fait.

Si tu affiche les 1000 lignes tu n'auras jamais les premieres car elle seront deja effacées faudrait donc penser une maniere plus efficace ..
Louis
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
23 nov. 2006 à 19:09
C'est pas sur la pile, mais dans le segment de données ici
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
23 nov. 2006 à 12:49
Tu prends l'élément -1 du tableau.
Certes ça marche, mais c'est vrai mal fait.
Et déclarer 1000*1000 entier ça fait très mal.
1000*1000*4 ( système 32 bits ) = 4 000 000 octets ~ 4 Mo
4 Mo de données, sur une pile, qui est limitée en taille.
Y'aura explosion au bout d'un moment...
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
22 nov. 2006 à 20:55
Si tu veux être plus souple tu peux passer en allocation dynamique , malloc() ?
Perso j'opterais pour une identation differente mais c'est personnel ..
Louis
Rejoignez-nous