CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Probleme en C

piinpin08
piinpin08
Niveau 3
10 septembre 2003 à 21:53:27

voila, normalement ce programme est censé décomposer des nombres en produit de facteurs premiers,
mon probléme est qu´il marche pas !
. .. mais le hic c´est qu´en rajoutant
printf("");
au plein milieu du code, comme ça, et ben il marche ! ! et si je l´enleve, il remarche plus ( il se compile bien mais le programme patine peu aprés son lancement) alors s´il vous plait j´aimerai simplement savoir pourquoi ça fait ça ! ! merci

  1. include < stdio.h>

int main(void)
{
int nombre;
nombre = demanderNombreADecomposer();
algoDeDecomposition(nombre);
return 0;
}

int demanderNombreADecomposer(void)
{
int nombreDemande;
printf("Entrez le nombre a decomposer en produit de facteurs premier : " );
scanf("%d",&);
return nombreDemande;
}

int algoDeDecomposition(int nombreRecu)
{
int nbpremier=2,nombreDivise=nombreRecu,puissance=0;
float mod=0;
while(nombreDivise!=1)
{
puissance=0;
mod = nombreDivise%nbpremier;
while(mod==0)
{
nombreDivise=nombreDivise/nbpremier;
puissance++;
mod = nombreDivise%nbpremier;
}
if(!puissance==0)
{

if(nombreDivise!=1){printf("%d^%d*",nbpremier,puis
sance);}

if(nombreDivise==1){printf("%d^%d",nbpremier,puiss
ance);}
}
printf(""); // < ---- c´est ICI ! !!!!!
nbpremier = calculerNombrePremierSuivant(nbpremier);
}
return 0;
}

int calculerNombrePremierSuivant(int previousnb)
{
int nextnb,div,nbdiv;
float mod;
nextnb = previousnb;
while(nbdiv!=2)
{
nextnb++;
nbdiv = 0;
for(div=1;div!=nextnb+1;div++)
{
mod = nextnb%div;
if(mod==0)
{
nbdiv++;
}
}
}
return nextnb;
}

i_am_the_law
i_am_the_law
Niveau 6
10 septembre 2003 à 23:36:51

J´ai recopie ton code et j´ai essaye d exectuer. Ton programme plante pcq a un moment tu as une variable que tu testes ds le while qui n´est pas initialisee :

int nextnb,div,nbdiv;
float mod;
nextnb = previousnb;
while(nbdiv!=2)
{
. ..

pr le faire marcher fais nbdiv=0 avant de rentrer ds le while

On peut qd meme faire ca plus simplement, notamment pour la recherche des nombre premiers.
Deja si tu faisais commencer ton for a 3, tu aurais pas besoin du while(nbdiv!=2)
ensuite ca sert a rien de continuer jusqu a nextnb+1 tu peux t´arreter a sqrt(nextnb+1).
Avec ce petit truc ton programme ramera un peu moins sur les grands nombres, et si tu veux qu´il soit encore plus rapide cherche sur google des algos pour trouver les nb premiers, c´est un algo qui a ete fait et refait de nombreuses fois.

piinpin08
piinpin08
Niveau 3
11 septembre 2003 à 13:30:29

merci beaucoup pour avoir résolue le probléme et pour les conseils . .. mais je me pose encore la question de savoir pourquoi est-ce que le programme marchait en ajoutant ce printf(""); au plein milieu du programme, normalement ça devrait servir a rien et ne rien changer, et pourtant, rien qu´en rajoutant ça le programme marche meme sans initialiser la variable du while ! et j´aimerai comprendre pourquoi

i_am_the_law
i_am_the_law
Niveau 6
11 septembre 2003 à 14:51:06

Chez moi ca a jamais marche meme avec le printf. C´est p-e du au fait que l´appel au printf ecrit qq part en memoire et mets un 0. Et qu´ensuite dans ta fonction la variable nbdiv vient se creer a cet endroit. Pour savoir reellement ce qui se passe, utilise le debugger. Moi je peux pas car comme je te dis, avec ou sans ca marchait pas.

Une variable non initialisee, c´est qqc d indetermine, avec de la chance, ca se creer a un endroit de la memoire et ca vaut 0, si t´as pas de chance, ca se met a un endroit qui contenait autre chose.

JeanYvesYves
JeanYvesYves
Niveau 10
11 septembre 2003 à 16:52:15

De toute façon, quand ton programme plante ou pas selon que tu ajoutes un printf ou un truc qui a priori ne sert pas a grand chose, c´est que tu écris dans une zone non autorisée.
Apres, si elle est dans le meme segment, c´est bon, sinon, ça plante.
Y´a une grosse part d´aléatoire dedans.
Comme dis Im the law, initialise bien tes variables au début pour enlever totalement l´aspect aléatoire...

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment