Corrigez mes erreurs dans cette fct en C svp

Fermé
Daniel - Modifié par Daniel le 17/02/2012 à 23:02
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 févr. 2012 à 00:29
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 mardi 25 janvier 2011 Statut Membre Dernière intervention 16 mars 2013
17 févr. 2012 à 23:12
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 mardi 25 janvier 2011 Statut Membre Dernière intervention 16 mars 2013
17 févr. 2012 à 23:13
:)
0
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 vendredi 17 février 2012 Statut Membre Dernière intervention 18 février 2012 3
17 févr. 2012 à 23:15
Y'a un TP d'info à finir je sens....

Dis nous le probleme.
0
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
18 févr. 2012 à 00:29
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