Corrigez mes erreurs dans cette fct en C svp

Daniel -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

qu'est ce qui cloche avec cette fonction ?
sachant que estPremier est une fonction qui retourne 1 si le n premier et 0 sinon
tabpremier est un tableau qui contient tout les nombres premiers (bon jusqu'a sqrt(n)
factPrem etant un tableau declare comme variable globale et que je veux remplir a l'aide de cette fonction avec les diviseurs premiers du nombre n donnée
et merci d'avance

void decomposition (int n)
{
int j=0,i=0,b;

do
{ b = estPremier(n) ;
if (b == 1)
factPrem[j] = n ;

else if (n % tabPrem[i] == 0 )
{
factPrem[j] = tabPrem[i];
j++;
decomposition (n / tabPrem[i]);
}
else i++;

} while (n != 1);
}

2 réponses

info_Louka Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 
ca serai plus facile si tu disais ca t'affiche koi comme message d'erreur
0
info_Louka Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 
:)
0
Daniel
 
il n'y a pas de messages d'erreurs c'est juste que lors de l execution le tableau ne s'affiche pas et ça bloque est ce que sa veut dire que j'ai une boucle infinie ? :)
0
blidye6 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   3
 
Y'a un TP d'info à finir je sens....

Dis nous le probleme.
0
Daniel
 
oui on peu dire ça comme ça en fait voila ou j'en suis l'affiche factPrem ne donne rien et bloque

#include <stdio.h>
#include<stdlib.h>
#include<math.h>
int tabPrem[100] ;int factPrem[100];


int estPremier (int n )
{
int i ;
for (i = 2 ; i <= sqrt (n);i++)
if (n % i == 0)
return 0;
return 1 ;
}

void remp (int nbr)
{
int i,b,j = 1 ;
tabPrem [0] = 2;
for (i = 3; i<= sqrt(nbr) ;i++)
{
b = estPremier (i);
if (b == 1)
{
tabPrem [j] = i;
j++;
}
}
}
void affiche (int t[])
{ int i,taille;
for (i=0; i<taille;i++)
printf("%d / ",t[i]);
}

void decomposition (int n)
{
int j=0,i=0,b;

do
{ b = estPremier(n) ;
if (b == 1)
factPrem[j] = n ;

else if (n % tabPrem[i] == 0 )
{
factPrem[j] = tabPrem[i];
j++;
decomposition (n / tabPrem[i]);
}
else i++;

} while ();
}

int main ()

{
int nbr,i;
printf ("donner le nbr a decomposer \n");
scanf("%d",&nbr );
remp(nbr);
affiche (tabPrem);
decomposition(nbr);
printf ("\n\n");
affiche (factPrem);

return 0;
}
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
J'ai pas tout lu, mais je vois quelques problèmes :
void affiche (int t[])
{ int i,taille;
for (i=0; i<taille;i++)
printf("%d / ",t[i]);
}

taille n'est pas initialisé. Tu ne peux donc pas le comparer avec i. Il faut l'initialiser avec la longueur du tableau.

Dans decomposition : while (); Normal que cela fasse une boucle infinie puisque tu ne mets pas de condition.

Corrige déjà ces deux points, et repose le code en le mettant entre deux balises "code" (à droite du bouton souligné). Cela sera plus agréable pour lire.
0