Afficher des nombres en augmentant leur indentation

2Alexandre222 Messages postés 1 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Voilà ce qu'on me demande :

Affichez des nombres consécutif
0
,
1
,
2
...
userNum
tels que chaque nombre est indenté du nombre correspondant d'espace. Pour chaque ligne à afficher, écrivez le nombre d'espace requis, puis le nombre, puis le passage à la ligne.

Indice : utilisez deux boucles mettant en jeu respectivement les variables
i
et
j
en initialisant
i
et
j
explicitement.

Note : évitez les espaces après avoir écrire le nombre à afficher.

Exemple : avec
userNum = 3
on écrit :

0
1
2
3


Voila ce que j'ai fait :

int main(void) {
    int userNum;
    int i;
    int j;

    scanf("%d", &userNum);

    for(i = 0; i <= userNum; i++) {
        printf("%d\n",i);
        for(j = 0; j <= userNum; j++) {
            if (j == i)
                printf(" ");
        }
    }
    return 0;
}


Où est l'erreur ?

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Remarques préalables

    Merci de soigner la manière dont tu écris tes messages :
    • Merci de soigner l'orthographe et la ponctuation, cela rendra ton message plus agréable à lire et augmentera les chances d'avoir des réponses ;
    • Merci d'éviter le contenu en anglais (tu aurais pu traduire ton exercice) vu que le forum est francophone, cela maximisera les chances de recevoir de l'aide ;
    • Comme l'indique Whismeril, merci d'utiliser les balises de code (et de poster un code indenté, un éditeur raisonnable doit te permettre d'indenter un code mal indenté). Ça rendra ton code plus lisible et t'évitera des erreurs de programmation. Je te recommande par la même occasion d'espacer ton code (espace autours des opérateurs, espace derrière les
      ,
      et les
      ;
      mais pas devant) afin de prendre tout de suite de bonnes habitudes.


    Retour à ton exercice

    Tu n'es pas trop loin de la réponse mais je pense que tu as voulu aller trop vite en essayant d'appliquer directement les indices au lieu d'y aller par étape. À mon avis, tu devrais dans un premier commencer par essayer de voir ce que tu ferais sans utiliser de boucles. Puis tu verras naturellement des portions de code qui se ressemblent et qui se factorise avec une boucle
    for
    .

    Repartons de l'exemple
    userNum = 3 
    :

    Sans boucle le programme ressemblerait à :

    #include <stdio.h>
    
    int main(void) {
        printf("0\n");
        printf(" 1\n");
        printf("  2\n");
        printf("   3\n");
        return 0;
    }


    ... ce qui se réécrit :

    #include <stdio.h>
    
    int main(void) {
        printf(""); // 0 espace
        printf("0\n");
        printf(" "); // 1 espaces
        printf("1\n");
        printf("  "); // 2 espaces
        printf("2\n");
        printf("   "); // 3 espaces
        printf("3\n");
        return 0;
    }


    Notons
    i
    le nombre courant courante. Essayons maintenant de mettre une variable
    i
    qui ces sections de code ne dépendent plus que de
    i
    . Pour cela il va falloir :
    • corriger l'affichage des
      i
      espaces. C'est là que la variable
      j
      va entrer en jeu.
    • puis écrire la valeur de
      i
      ;
    • puis écrire le retour à la ligne;


    #include <stdio.h>
    
    int main(void) {
        unsigned i, j;
    
        // i == 0
        i = 0;
        for (j = 0; j < i; j++) printf(" "); // afficher i espaces
        printf("%d\n", i);
    
        // i == 1
        i = 1;
        for (j = 0; j < i; j++) printf(" "); // afficher i espaces
        printf("%d\n", i);
    
        // i == 1
        i = 2;
        for (j = 0; j < i; j++) printf(" "); // afficher i espaces
        printf("%d\n", i);
    
        // i == 3
        i = 3;
        for (j = 0; j < i; j++) printf(" "); // afficher i espaces
        printf("%d\n", i);
    
        return 0;
    }


    On voit à présent que les 4 sections de code (i == 0 à i == 3) sont identiques si on omet l'initialisation de
    i
    , et que
    i
    est incrémenté de 1 à chaque fois. C'est là qu'on voit que ces sections se factorisent... et si tu le fais bien, tu corrigeras ton erreur par la même occasion.

    Bonne chance
    0