Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1796 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Aide pour comprendre un petit code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Aide pour comprendre un petit code

n°2178466
caps lock
Posté le 04-03-2013 à 04:27:50  profilanswer
 

En vue d'un examen prochain je m’entraîne sur des exercices et je bute littéralement sur celui ci  

Code :
  1. void decompose (long n) {
  2. long d;
  3. for (d = 2; d * d <= n;)
  4. if (n % d == 0) {
  5. printf (" %d", d);
  6. n = n / d;
  7. }
  8. else d++;
  9. printf (" %d\n", n);
  10. }


 
L'appel => decompose(200);  affiche dans la console : 2 2 2 5 5
Mon premier problème : je ne comprends pas le rôle d'un "for" sans crochet et je ne vois pas sa portée.
Deuxième problème : je pense avoir compris d'où viennent les 2 2 2 mais je ne comprends pas les 5
Voici mon raisonnement :

d=2   2x2 < 200
 si ( 200 % 2 == 0) (vrai)
 on affiche d (2)
 et on fait n = 200/2 (n=100)
 si ( 100 % 2 == 0) (vrai)
 on affiche d (2)
 et on fait n = 100/2 (n=50)
 si ( 50 % 2 == 0) (vrai)
 on affiche d (2)
 et on fait n = 50/2 (n=25)
 si (25 % 2 == 0) (faux) il reste 1


Ensuite c'est le brouillard, merci pour toute aide

mood
Publicité
Posté le 04-03-2013 à 04:27:50  profilanswer
 

n°2178468
Yonel
Monde de merde !
Posté le 04-03-2013 à 06:17:44  profilanswer
 

Salut caps lock,
 
Pour ton premier problème (portée du for), je pense que c'est surtout là pour t'embrouiller :D . Quand tu ne mets pas les crochets { } la boucle for prend le prochain statement (et non la prochaine ligne). Ici il va prendre for { if(...) else(...) }
Autrement dit, c'est la même chose que d'écrire ceci :

Code :
  1. void decompose (long n) {
  2.    long d;
  3.    for (d = 2; d * d <= n;) {
  4.       if (n % d == 0) {
  5.          printf (" %d", d);
  6.          n = n / d;
  7.       }
  8.       else d++;
  9.    }
  10.    printf (" %d\n", n);
  11. }


 
Par rapport à ton deuxième problème, il suffit de lire ce que fait le if puis le else.
En gros ce serait :
n = 200, divisible par d=2 ? (if) -> oui, donc n = 100, afficher d = 2.
n = 100, divisible par d=2 ? (if) -> oui, donc n = 50, afficher d = 2.
n = 50, divisible par d=2 ? (if) -> oui, donc n = 25, afficher d = 2.
n = 25, divisible par d=2 ? (if) -> non, donc incrémenter d, d = 3.
n = 25, divisible par d=3 ? (if) -> non, donc incrémenter d, d = 4.
n = 25, divisible par d=4 ? (if) -> non, donc incrémenter d, d = 5.
n = 25, divisible par d=5 ? (if) -> oui, donc n = 5, afficher d = 5.
Sortie de boucle car d * d > n, afficher n = 5 (le reste)
 
J'espère que j'ai été clair.

n°2178469
caps lock
Posté le 04-03-2013 à 06:41:51  profilanswer
 

Excellent merci pour le détail


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Aide pour comprendre un petit code

 

Sujets relatifs
J'ai vraiment besoin d'aide ! C'est urgent !Signature HTML à l'aide svp - superposition a href sur image
Macros C++ - Remplacement de la macro par le code finalCode Html pour une fonction multiplication (débutant)
petit script pythonPetit htaccess de 3 lignes qui ne fonctionne pas
Aide Réalisation d'un programmeBesoin d'aide Script PHP/SQL
Plus de sujets relatifs à : [C] Aide pour comprendre un petit code


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR