Salut caps lock,
Pour ton premier problème (portée du for), je pense que c'est surtout là pour t'embrouiller . 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 :
- void decompose (long n) {
- long d;
- for (d = 2; d * d <= n;) {
- if (n % d == 0) {
- printf (" %d", d);
- n = n / d;
- }
- else d++;
- }
- printf (" %d\n", n);
- }
|
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.