IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème au niveau des tableaux et d'affichage


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Problème au niveau des tableaux et d'affichage
    Bonjour !

    Je suis étudiant, je poste ce problème auquel je perd patience car je ne trouve aucune solution.
    J'ai crée un programme (en C++ sur console, je suis sur visual studio) qui me permet d'afficher le/les poid(s) de chaque chiffre d'un nombre saisir par un utilisateur.
    La 1 ère version de mon programme marche, j'ai donc rajouté une boucle pour permettre à l'utilisateur de décidé quand il veut arrêter de saisir un nombre (en saisissant un simple 0).
    A ce niveau pas de soucis, aucune erreur sauf ... Ma boucle marche bien, mais quand l'utilisateur saisie une 2 ème valeur, celle-ci ce rajoute à la 1 ère (ex: si l'user avait saisie 1023, et qu'il veuille saisir une autre valeur [admettons 101], cela m'affichera 1023101).

    Solution 1 : j'ai essayé d'initialisé mon tableau à 0 à chaque fin de boucle pour éviter d'afficher les précédentes valeurs saisies par l'user.
    Problème : des 0 s'affichent en plus de la nouvelle valeur (alors qu'a la 1 ère saisie ils ne s'affichent pas).

    Je cherche donc un moyen d'effacer complètement les valeurs de mon tableau (oui je sais, même si cela n'est pas possible mais vous voyez ou je veux en venir), ou de pouvoir ne pas afficher les 0 (en laissant tout de même la condition de sorti du programme qui est obligatoire).

    En résumé : Serait possible de ne pas afficher les 0 (ou l’ancienne valeurs que l'user à saisie) dans mon programme ? Je vous remercie d'avance.

    info 1 : la sorti du programme en saisissant 0 est obligatoire, ainsi que le type "unsigned long int" pour la/les valeur(s) saisie(s).

    info 2 : afficher le poids d'un nombre --> 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).

    Exemple concret : l'user saisie 10023, le programme doit afficher ceci :

    Saisir un nombre : 10023
    3 : 0 // Peut ce traduire " le poids de 3 et 0" ou encore "3 a pour poids 0"
    2 : 1
    0 : 2 3
    1 : 4
    10023
    Saisir un nombre :

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #include "stdafx.h"
    #include <iostream>
    #include <algorithm> // ne sert finalement à rien si il faut ...
    using namespace std;
     
    #define TAILLE 8 // La taille du tableau est protéger par une constante est modifiable à tout moment
     
    unsigned long int saisie_valeur(unsigned long int &valeur)
    {
    	cout << "Entrez un nombre (9 chiffres maximum) : "; cin >> valeur;
    	return valeur;
    }
     
    unsigned long int calcul_poids(unsigned long int tableau[TAILLE], unsigned long int valeur, unsigned long int &taille_valeur)
    {
    	while (valeur > 0)
    	{
    		tableau[taille_valeur] = valeur % 10;
    		valeur /= 10;
    		++taille_valeur;
    	}
    	return taille_valeur;
    }
     
    void affichage_poids(unsigned long int tableau[TAILLE], unsigned long int taille_valeur)
    {
    	for(unsigned long int i = 0; i < taille_valeur; ++i)
    	{
    		cout << tableau[i] << " : " << i << endl;
    	}
     
    	// Affichage de la valeur saisie par l'utilisateur
    	for(int i = taille_valeur - 1; i >= 0; --i) // décrémentation pour afficher la valeur de départ (parcours le tableau à l'envers)
    	{
    		cout << tableau[i];
    	}
    	cout << endl;
    }
     
    int main()
    {
    	unsigned long int tableau[TAILLE] = { 0 }; // le type "unsigned long int" est obligatoire (la consigne le dit)
    	unsigned long int valeur(0), taille_valeur(0);
     
    	// Saisie de la valeur par l'Utilisateur
    	saisie_valeur(valeur);
     
    	while (valeur != 0)
    	{
    		// calcul du poid des chiffres
    		calcul_poids(tableau, valeur, taille_valeur);
     
    		// Affichage des chiffres avec leurs poids respectif
    		affichage_poids(tableau, taille_valeur);
     
    		// Supprimer les données du tableau 
    		... pas encore trouver de solution ... 
     
    		saisie_valeur(valeur);
    	}
     
    	cout << "... Fermeture du programme ..." << endl;
     
    	system("PAUSE");
        return 0;
    }
    Une image explicite :

    Nom : 1.png
Affichages : 126
Taille : 8,4 Ko

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Bah il te suffit de réinitialiser tes variables à chaque tour de boucle pour repartir à 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    int main()
    {
    	unsigned long int tableau[TAILLE] = { 0 }; // le type "unsigned long int" est obligatoire (la consigne le dit)
    	unsigned long int valeur(0), taille_valeur(0);
     
    	// Saisie de la valeur par l'Utilisateur
    	saisie_valeur(valeur);
     
    	while (valeur != 0)
    	{
    		// ...
     
    		// Supprimer les données du tableau 
    		for(int i=0; i<TAILLE; ++i) {
    			tableau[i] = 0ul;
    		}
    		// ou un memset: memset(tableau, 0, TAILLE * sizeof(tableau[0]));
     
    		taille_valeur = 0ul;
     
    		saisie_valeur(valeur);
    	}
     
    	// ...
        return 0;
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Hello,

    Bah il te suffit de réinitialiser tes variables à chaque tour de boucle pour repartir à 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    int main()
    {
    	unsigned long int tableau[TAILLE] = { 0 }; // le type "unsigned long int" est obligatoire (la consigne le dit)
    	unsigned long int valeur(0), taille_valeur(0);
     
    	// Saisie de la valeur par l'Utilisateur
    	saisie_valeur(valeur);
     
    	while (valeur != 0)
    	{
    		// ...
     
    		// Supprimer les données du tableau 
    		for(int i=0; i<TAILLE; ++i) {
    			tableau[i] = 0ul;
    		}
    		// ou un memset: memset(tableau, 0, TAILLE * sizeof(tableau[0]));
     
    		taille_valeur = 0ul;
     
    		saisie_valeur(valeur);
    	}
     
    	// ...
        return 0;
    }

    Ooooo mon dieu ..... Quel débutant ... Merci encore !

    Et il me reste une dernière question : comme tu l'a vu dans l'exemple, je n'arrive pas à afficher les positions d'un meme nombre sans le réecrire 2 fois. As tu une idée pour cela ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    l'utilisation de vector t'aurait simplifié la vie
    pourquoi passer une référence pour aussi retourner la valeur ? c'est elle la "coupable" de ton erreur
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Certaines personnes on fait cette exercice et mon dit qu'un simple tableau suffirai.
    Au sujet des "doublons", pour ne pas les afficher, aurait tu un "exemple" à me donner ? (plus compréhensible que 1000 mots)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    ton problème de doublon est tout autant lié à taille_valeur qui n'est jamais réinitialisée
    essaye de rentrer plus de 9 chiffres (2 fois 5 chiffres par exemple), et tu auras surement un crash
    si tu comprends pas ton algo, déroule le manuellement pour comprendre ce qu'il fait
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Bousk Voir le message
    ton problème de doublon est tout autant lié à taille_valeur qui n'est jamais réinitialisée
    essaye de rentrer plus de 9 chiffres (2 fois 5 chiffres par exemple), et tu auras surement un crash
    si tu comprends pas ton algo, déroule le manuellement pour comprendre ce qu'il fait
    J'ai modifié (grace à ton aide et je t'en remercie) quand à plus de 9 chiffres, l’énoncé dit clairement que je n'es pas à mettre un contrôle de saisie donc il n'y aura pas de crash (car c'est moi qui l'utilisera et que je sais que je ne mettrai pas plus que 9 chiffres).
    Je comprend mon algo, je te demande juste est ce qu'il serait possible d'avoir un exemple pour eviter d'afficher les doublons et, dans mon cas, afficher la 2 ème positions à coté de la 1 ère ?

    Et je le rappel au cas ou, je suis débutant ... Juste au cas ou.

Discussions similaires

  1. [WD-2010] Problème convertion PDF au niveau des tableaux
    Par carlux3 dans le forum Word
    Réponses: 1
    Dernier message: 21/06/2013, 01h15
  2. [Eclipse CDT]problème au niveau des include
    Par snoop dans le forum Eclipse C & C++
    Réponses: 6
    Dernier message: 05/04/2009, 14h57
  3. [phpMyAdmin] problème au niveau des heures avec phpMyAdmin
    Par arti2004 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 13/06/2006, 22h05
  4. [Client FTP][C++] Problème au niveau des commandes
    Par agent007se dans le forum Développement
    Réponses: 4
    Dernier message: 19/04/2006, 15h15
  5. [RCP] Problème au niveau des icones des executables
    Par albeau dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 23/03/2006, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo