Aide pour pour petit programme en c

Fermé
rem22 Messages postés 10 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 21 mai 2008 - 2 mai 2008 à 21:46
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 3 mai 2008 à 17:12
Bonjour,
Il y a un moment j'ai essayé de faire un petit programme dont le but était de décomposer un nombre en produit de nombres premiers et j'ai abandonné car il y avait des fautes que je ne trouvais pas.
Et maintenant je compte m'y remettre et j'aimerais savoir si quelqu'un pouvait m'aider à trouver les fautes.
Si quelqu'un veut bien j'envoie le code.
merci.
Si mon post n'est pas ou il faut désolé.

8 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
2 mai 2008 à 21:52
ben poste ton code deja pour voir...
0
rem22 Messages postés 10 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 21 mai 2008
2 mai 2008 à 21:53
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
long nombre =0;
long nombrede2 =0;
long nombrede3 =0;
long nombrede5 =0;
long nombrede7 =0;
long nombrede11 =0;
long nombrede13 =0;
long nombrede17 =0;
long nombrede19 =0;
long nombrede23 =0;
long nombrede29 =0;
long nombredebase =0;
printf("inscrivez un nombre \n");
scanf("%ld",&nombre);
nombre=nombredebase;
while(nombre%2==0)
{
nombre= nombre/2;
nombrede2 ++;
}
while(nombre%3==0)
{
nombre= nombre/3;
nombrede3 ++;
}
while(nombre%5==0)
{
nombre= nombre/5;
nombrede5 ++;
}
while(nombre%7==0)
{
nombre= nombre/7;
nombrede7 ++;
}
while(nombre%11==0)
{
nombre= nombre/11;
nombrede11 ++;
}
while(nombre%13==0)
{
nombre= nombre/13;
nombrede13 ++;
}
while(nombre%17==0)
{
nombre= nombre/17;
nombrede17 ++;
}
while(nombre%19==0)
{
nombre= nombre/19;
nombrede19 ++;
}
while(nombre%23==0)
{
nombre= nombre/23;
nombrede23 ++;
}
while(nombre%29==0)
{
nombre= nombre/29;
nombrede29 ++;
}
printf("il y a\n")

if(nombrede2 > 0)
{
printf("%ld\n" fois ",nombrede2);
}
else if(nombrede3>0)
{
printf("%ld\n" fois ",nombrede3);
}
else if(nombrede5>0)
{
printf("%ld\n" fois ",nombrede5) ;
}
else if(nombrede7>0)
{
printf("%ld\n" fois ",nombrede7) ;
}
else if(nombrede11>0)
{
printf("%ld\n" fois ",nombrede11) ;
}
else if(nombrede13>0)
{
printf("%ld\n" fois ",nombrede13) ;
}
else if(nombrede17>0)
{
printf("%ld\n" fois ",nombrede17) ;
}
else if(nombrede19>0)
{
printf("%ld\n" fois ",nombrede19);
}
else if(nombrede23>0)
{
printf("%ld\n" fois ",nombrede23) ;
}
else if(nombrede99>0)
{
printf("%ld\n" fois ",nombrede29);
}
printf("dans %ld",nombredebase);
system("PAUSE");
return 0;
}
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
3 mai 2008 à 00:01
alor ton programme est loin d'etre simplifié puisque tu repete plusieurs fois la meme chose...
mais essaye comme ça , ça devrrait marcher
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
long nombre =0;
long nombrede2 =0;
long nombrede3 =0;
long nombrede5 =0;
long nombrede7 =0;
long nombrede11 =0;
long nombrede13 =0;
long nombrede17 =0;
long nombrede19 =0;
long nombrede23 =0;
long nombrede29 =0;
long nombredebase =0;
int i,nbr_fois=0;
printf("inscrivez un nombre \n");
scanf("%ld",&nombre);
nombredebase=nombre;

while(nombre%29==0)
{
nombre= nombre/29;
nombrede29 ++;nbr_fois++;
}
while(nombre%23==0)
{
nombre= nombre/23;
nombrede23 ++;nbr_fois++;
}
while(nombre%19==0)
{
nombre= nombre/19;
nombrede19 ++;nbr_fois++;
}
while(nombre%17==0)
{
nombre= nombre/17;
nombrede17 ++;nbr_fois++;
}
while(nombre%13==0)
{
nombre= nombre/13;
nombrede13 ++;nbr_fois++;
}
while(nombre%11==0)
{
nombre= nombre/11;
nombrede11 ++;nbr_fois++;
}
while(nombre%7==0)
{
nombre= nombre/7;
nombrede7 ++;nbr_fois++;
}
while(nombre%5==0)
{
nombre= nombre/5;
nombrede5 ++;nbr_fois++;
}
while(nombre%3==0)
{
nombre= nombre/3;
nombrede3 ++;nbr_fois++;
}
while(nombre%2==0)
{
nombre= nombre/2;
nombrede2 ++;nbr_fois++;
}
nbr_fois--;
printf("nombre decompose en  produit de nombre premier: ");

if(nombrede2 > 0)
{
for(i=0;i<nombrede2;i++){
printf("2 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede3 > 0)
{
for(i=0;i<nombrede3;i++){
printf("3 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede5 > 0)
{
for(i=0;i<nombrede5;i++){
printf("5 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede7 > 0)
{
for(i=0;i<nombrede7;i++){
printf("7 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede11 > 0)
{
for(i=0;i<nombrede11;i++){
printf("11 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede13 > 0)
{
for(i=0;i<nombrede13;i++){
printf("13 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede17 > 0)
{
for(i=0;i<nombrede17;i++){
printf("17 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede19 > 0)
{
for(i=0;i<nombrede19;i++){
printf("19 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede23 > 0)
{
for(i=0;i<nombrede23;i++){
printf("23 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
if(nombrede29 > 0)
{
for(i=0;i<nombrede29;i++){
printf("29 ");
if(nbr_fois!=0) {printf("X ");nbr_fois--;}}
}
printf("= %ld\n",nombredebase);
system("PAUSE");
return 0;

}
0
rem22 Messages postés 10 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 21 mai 2008
3 mai 2008 à 09:09
Salut,
a propos de ton amélioration:
-Pourquoi est-ce que tu as mis les nombres premiers du plus grand au plus petit?
-Je ne comprends pas très bien la partie avec les "for" , "nbr_fois" et "i" , pourrais-tu me l'expliquer?

Et:
-Qu'est-ce qui ne jouait pas à ma version?
Comment pourrait-on la raccourcir?
merci
0

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

Posez votre question
rem22 Messages postés 10 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 21 mai 2008
3 mai 2008 à 11:11
Salut,
Tant qu'on y est j'aurais deux autres questions:
1)Si je veux pouvoir un peu essayer de comprendre les codes sources des programmes linux,et même essayer de changer une ou deux lignes,je peux le faire avec le c ?
2)j'ai installé code::blocks et maintenant quand je veux le lancer il me met :

Deleted stale lock file '/home/bottinelli/Code::Blocks-bottinelli'.

et une autre fenêtre en anglais qui me dit -je crois-qu'un report debug a été lancè et qu'ils sont désolé(et pleins d'autres choses en anglais),
je ne sais pas comment mettre le screen que j'ai fait sur le message,
en tous cas je n'arrive pas à ouvrir code::blocks
si quelqu'un a une idée
merci
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
3 mai 2008 à 15:51
-Pourquoi est-ce que tu as mis les nombres premiers du plus grand au plus petit?
en fait comme ça parce que je trouve ça plus propre mais bon je pense que ça n'a pas trop d'importance en partant du plus petite ça devrait marché aussi

-Je ne comprends pas très bien la partie avec les "for" , "nbr_fois" et "i" , pourrais-tu me l'expliquer?
en fait cette partie c'est juste pour calculer le nombre de signe multiplier X et bien les placer lors du resultat, comme ça on calcule le nombre de signe multiplier qui vaut le nombre de nombre premier - 1 ensuite avec le for et nbr_fois je peux placer le signe X entre chaque nombre premier qui décompose le nombre

-Qu'est-ce qui ne jouait pas à ma version?
dans ta version deja tu avais des erreurs de syntaxe dans tes printf
ex:
printf("%ld\n" fois ",nombrede29); 
tu as mis des guillements a l'interieur de guillemets on ne peux pas faire ça...
ensuite apres que l'utilisateur est donné une valeur a nombre avec le scanf tu fais
nombre=nombredebase;
donc la tu donnes a nombre la valeur de nombredebase soit 0 il faudrait plutot faire
nombredebase=nombre;

Comment pourrait-on la raccourcir?
tu pourrais utiliser des tableaux pour stocker les nombres premiers et les nombredex ainsi ça t'eviterait d'avoir plusieur boucle while et if une ou deux suffirait...

Si je veux pouvoir un peu essayer de comprendre les codes sources des programmes linux,et même essayer de changer une ou deux lignes,je peux le faire avec le c ?
oui tout a fait le kernel de linux est meme ecrit en C

et pour code::blocs moi je l'utilise sur windows mais sur linux j'utilise gcc mais si tu veux comme meme l'installer sur linux voici un petit lien pour l'installer
0
rem22 Messages postés 10 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 21 mai 2008
3 mai 2008 à 17:05
Merci pour tout.
ça m'a bien aidé.
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
3 mai 2008 à 17:12
de rien...
si tu n'as plus de probleme n'oublie pas de mettre ton post en "resolu" ;)
0