Cyberboy2054
Messages postés173Date d'inscriptionjeudi 20 décembre 2001StatutMembreDernière intervention22 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és6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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és540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 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és6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 23 nov. 2006 à 19:09
C'est pas sur la pile, mais dans le segment de données ici
cs_Joky
Messages postés1787Date d'inscriptionlundi 22 novembre 2004StatutMembreDernière intervention31 janvier 20092 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és540Date d'inscriptionvendredi 25 juin 2004StatutMembreDernière intervention 1 octobre 20072 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
24 nov. 2006 à 17:08
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");
}
}
23 nov. 2006 à 19:31
23 nov. 2006 à 19:19
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
23 nov. 2006 à 19:09
23 nov. 2006 à 12:49
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...
22 nov. 2006 à 20:55
Perso j'opterais pour une identation differente mais c'est personnel ..
Louis