Bonjour à tous,
Je sais que ce problème à déjà été posé par un membre, cependant je me permets de reposer la question car pour moi c'est un autre problème malgré que l'énoncé est le même (étant donnée qu'on suit le même cours "je suppose" )
Le but est de créer un programme qui permet de saisir un nombre entier naturel et qui affiche le
ou les poid(s) de chaque chiffre dans ce nombre. À partir de ces informations (les poids de chaque
chiffre), le nombre doit pouvoir être reconstitué.
Le poids représente la position du chiffre dans le nombre, en partant de la droite (le premier chiffre de droite est à la position 0, il a donc un poids 0)
Travail demandé Écrire l’algorithme de l’application, correctement commenté et indenté.
Je pense avoir compris le principe de l'exercice mais je bloque à un certain niveau
nb, positioin_actuelle,i,j : entier début tab[1,,10 , 1,,9]
tant que pour i allant de 0 à 10 pour j allant de 0 à 9 tab[1..i, 1..j] = -1
nb = 0 position_actuelle = 0 afficher « entrez un nomnre = » saisir nb
si nb = 0 alors Si nb vaut 0, on sort de la boucle principale fin si
si nb> 999999999 alors afficher « nombre trop grand » fin si
tant que nb>0
entier indice= nb modulo 10 (modulo signifie le reste de la division) entier pos = 0; tant que tab[indice][pos]est différent de -1 et pos < 9 pos +1; tab[indice][pos] = position_actuelle nb = nb divisé par 10 position_actuelle +1
Néanmoins, tu n'expliques pas ce qui te bloque précisement (pas facile de t'aider, c'est trop "vague").
Qu'est-ce qui te bloque exactement ? Quelles sont les informations manquantes dans la conversion donnée ci-dessus, qui t'empêche d'avancer ?
voilà ce que j'ai écris en algo "pseudocode" par contre niveau indentation je ne suis pas au top :/
En fait je ne savais pas comment faire l'affichage du coup j'ai un peu triché en lisant le code en c++ que vous aviez écrit...
Est-ce correct?
nb, position_actuelle, i, j, k : entier début tab[1..10, 1..9] // On remplit toutes les cases à -1, pour dire qu'elles sont vides. pour i allant de 0 à 9 pour j allant de 0 à 8 tab[i, j] = -1 fin pour fin pour
nb = 0 position_actuelle = 0 afficher « entrez un nomnre = » saisir nb
si nb = 0 alors On sort de la boucle principale fin si
si nb > 999999999 alors afficher « nombre trop grand » fin si
tant que nb>0 indice = nb mod 10 pos = 0 tant que tab[indice][pos] <> -1 et pos < 9 alors pos = pos + 1 fin tant que tab[indice][pos] = position_actuelle nb = nb / 10 position_actuelle = position_actuelle + 1 fin tant que
// Affichage uniquement de ce qui n'est pas en -1 afficher « affichage des positions » pour i allant de 0 à 9 si tab [i][0] <> -1 alors afficher « numero i : » pour j allant de 0 à 8 et tab[i][j] <> -1 alors afficher « tab[i][j] » fin pour fin si fin pour
// reconstruction du nombre d'origine afficher « reconstruction du nombre d'origine » nb_orignie = 0 pour i allant de 0 à 9 pour k allant de 0 à 8 et tab[i][k] < -1 nb_origine = nb_origine * 10 ^ tab[i][k] fin pour fin pour afficher « nombre d'origine »
J'ai corrigé ton programme. Pense aux balises de code et à l'indentation (la prochaine fois que tu ne le fais pas, je supprimerais ton message).
Il manquait des fermetures partout ("fin si", "fin pour", "fin tant que", etc...).
La notion de tableau est très mal maîtrisée (utilisation de tab[0..i] au lieu de tab[i], ce qui montre une méconnaissance de l'accès par index).
Il y avait (et il doit peut être rester) des fautes de frappes ("orignie" au lieu de "origine", "nomnre" au lieu de "nombre", etc...). Attention, ça ne fait pas très sérieux, et ça donne l'impression que tu t'en fiches.
Tu avais mis: tab[1..10, 1..9], ce qui est juste, car c'est une déclaration.
En revanche, après, tu as mis: tab[0..i, 0..j] = -1, ce qui était faux, car c'est une utilisation. La bonne syntaxe est tab[i, j] = -1.
Edit: En passant, je viens de remarquer un petit bug dans ton algo, que je n'avais pas vu. Les tableaux étant indexés à partir de 0, la déclaration devrait être: tab[0..9, 0..8] (à la ligne 3).