Afficher des nombres en augmentant leur indentation

Fermé
2Alexandre222 Messages postés 1 Date d'inscription jeudi 10 février 2022 Statut Membre Dernière intervention 10 février 2022 - Modifié le 10 févr. 2022 à 14:40
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 10 févr. 2022 à 14:37
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 ?
A voir également:

2 réponses

Utilisateur anonyme
10 févr. 2022 à 07:11
Bonjour

Pour poster un code,merci d’utiliser les balises de code (voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code )
Notamment ça préserve l’indentation.

Ton énoncé te dit « pour chaque ligne, afficher les espaces puis le nombre ».
Essaye de travailler sur cette instruction
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 811
Modifié le 10 févr. 2022 à 14:38
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