Le poids d'un nombre

Résolu
TheRogerFederer Messages postés 256 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 10 mars 2016 - 23 nov. 2015 à 10:45
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 25 avril 2016 à 11:40
Bonjour, le but de l'exercice est de faire ceci :

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, 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).

voilà et moi j'ai codé quelque chose comme cela :
#include <iostream>

using namespace std;

int main()
{
    int tableau[9] ; // contient le max de chiffre que peut comporter le nombre 
	int i ;
    int nbre0 ;
	int nbre1 ;
	int nbre2 ;
	int nbre3 ;
	int nbre4 ;
	int nbre5 ;
	int nbre6 ;
	int nbre7 ;
	int nbre8 ;
	unsigned long int nbdiv17 ;
	unsigned long int nbdiv16 ;
	unsigned long int nbdiv15 ;
	unsigned long int nbdiv14 ;
	unsigned long int nbdiv13 ;
	unsigned long int nbdiv12 ;
	unsigned long int nbdiv11 ;
	unsigned long int nbdiv10 ;
	unsigned long int nb ;

	cout << " Entrez un nombre : " ;
	cin >> nb ;

	nbre0 = nb % 10 ; // reste de la division de nbre0 par nb modulo 10
    tableau[0] = nbre0 ;

    nbdiv10 = nb / 10 ;
	nbre1 = nbdiv10 % 10 ;
    tableau[1]= nbre1 ;

    nbdiv11 = nbdiv10 / 10 ;
    nbre2 = nbdiv11 % 10 ;
    tableau[2]= nbre2 ;

    nbdiv12 = nbdiv11 / 10 ;
    nbre3 = nbdiv12 % 10 ;
    tableau[3]= nbre3 ;

    nbdiv13 = nbdiv12 / 10 ;
    nbre4 = nbdiv13 % 10 ;
    tableau[4]= nbre4 ;

    nbdiv14 = nbdiv13 / 10 ;
    nbre5 = nbdiv14 % 10 ;
    tableau[5]= nbre5 ;

    nbdiv15 = nbdiv14 / 10 ;
    nbre6 = nbdiv15 % 10 ;
    tableau[6]= nbre6 ;

    nbdiv16 = nbdiv15 / 10 ;
    nbre7 = nbdiv16 % 10 ;
    tableau[7]= nbre7 ;

    nbdiv17 = nbdiv16 / 10 ;
    nbre8 = nbdiv17 % 10 ;
    tableau[8]= nbre8 ;


    for (i = 0; i < 9; i++)
    {
    	if (tableau[i] > 0)
    	{
    	    cout << tableau[i] << " : " << i << " \n " ; // affichage du tableau qui contient le nombre.
        }
    }

    cout << " Entrez un nombre : " ;
    cin >> nb ;

return 0 ;

}

Je voudrais savoir si cela est bon et si oui, je voudrais savoir pourquoi il ne m'affiche pas le poids des 0 dans le nombre ??

29 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 23/11/2015 à 17:02
Bonjour.

pourquoi il ne m'affiche pas le poids des 0 dans le nombre

Tu dis: si le nombre vaut 0, ne pas l'afficher. Donc si tu écris 102, tu n'afficheras que 1 et 2.
Tu considères (à tort), que 0 est la valeur d'une case non remplie. Or, c'est faux, car une case non remplie et non initialisée à une valeur indeterminée (pour vulgariser: valeur aléatoire). De plus, tu ignores aussi tout 0 "légitime" (comme dans 102, ou 30405).
La bonne méthode serait plutôt de compter le nombre de chiffres constituant le nombre donné en argument. Si on connait la "taille" du nombre, il est facile de n'afficher que ce qui est nécessaire.

Je voudrais savoir si cela est bon

À part cette petite erreur de "0", le code est "bon". Mais il peut être largement amélioré (mise au propre). Tu crées une vingtaine de variables, car tu as besoin de 2*9 cas à gérer. Or, tu te doutes bien que si on t'avait demandé un poids montant à 1000, tu n'allais pas t'amuser à créer 2*1000 variables ! Quand on a besoin de X variables, c'est que l'on a besoin... d'un tableau. Tout simplement.
De plus, au lieu de répéter la même logique en boucle, pourquoi ne pas utiliser, justement, une boucle ?

Enfin, quelques remarques plus techniques:
  • N'utilise pas using namespace, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
  • Tu commentes ton code, c'est très bien, mais tu "paraphrases" au lieu de documenter, ce qui n'est pas très utile. Pour bien commenter son code, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/ecrire-de-bons-commentaires


Je te propose une version modifiée de ton code:
#include <iostream>

int main()
{
  int tableau[9];
  int nb = 0;
  int nb_size = 0;

  std::cout << "Entrez un nombre: ";
  std::cin >> nb;

  while (nb > 0)
  {
    tableau[nb_size] = nb % 10;
    nb /= 10;
    ++nb_size;
  }

  for (int i = 0; i < nb_size; ++i)
    std::cout << tableau[i] << " : " << i << std::endl;

  return 0;
}



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
Rejoignez-nous