Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Débuter
Débuter Forum d'entraide pour débuter en langage de programmation C++. Avant de poster : cours d'initiation au C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 10h25   #1
azolan
Invité de passage
 
Inscription : septembre 2012
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2012
Messages : 11
Points : 0
Points : 0
Par défaut Programme qui n'affiche rien

Bonjour!!
L'intitulé de mon programme est assez compliqué.
Pour chaque entier < 9999, il doit effectuer l’algorithme suivant:
le décomposer pour avoir ses chiffres (ex 4198 devient 4,1,9,8)
ordonner par ordre décroissant ses chiffres (4,1,9,8 devient 9,8,4,1)
-------------------croissant----------------(4,1,9,8 devient 1,4,8,9)
faire la soustraction des deux (9841-1489)

Une propriété non démontrée dit qu'au bout de 7 transformations au maximum on tombe sur 6174, peut importe le nombre.
Si on rentre un entier a moins de 4 chiffres, il est complété par des 0: 1 devient 0001.

Mon programme doit compter pour tous les entiers compris entre 0 et 9999 le nombre de transformations et les mettre dans un tableau. (ex: 1 nombre a 0 transformations, xxx ont besoin de 1 transformation, yyy de 2 etc)

Mon programme ne m'affiche rien:


Code :
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
using namespace std;
const int nmax=4;
const int mmax=8;
void permut (int &a, int &b);
void decompose (int nb, int t[],int &n);
void tri (int t[], int n);
void recsous (int t[], int n, int &result);
void affiche (int t[],int n);
 
int main()
{
    int nb,n=nmax,result,b=0,x,m=mmax,i;
    int t[nmax], tab[mmax];
    for (int i=0;i<m;i++)
    {
        tab[i]=0;
    }
 
    for (nb=1;nb<9999;nb++)
    {
        b=0;
        if (nb!=1111 && nb!=2222 && nb!=3333 && nb!=4444 && nb!=5555 && nb!=6666 
                && nb!=7777 && nb!=8888 && nb!=9999)
        {
            while (nb=!6174)
            {
 
                decompose (nb,t,n);
                tri (t,n);
                recsous (t,n,result);
                nb=result;
                b=b+1;
            }
            tab[b]=tab[b]+1;
 
        }
 
 
    }
    affiche (tab,m);
 
    system ("pause");
}
 
void permut (int &a, int &b)
{
    int aux;
    aux=a;
    a=b;
    b=aux;
}
void decompose (int nb, int t[],int &n)
{
    int i=0;
    for (i;i<n;i++)
    {
        t[i]=0;
    }
    i=0;
    while (nb!=0)
    {
        t[i]=nb%10;
        nb=nb/10;
        i++;
    }
}
void tri (int t[], int n)
{
    int i=0,j=0;
    for (i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(t[i]>t[j])
            {
                permut (t[i],t[j]);
            }
        }
    }
}
void recsous (int t[], int n, int &result)
{
    int i=0,nb1=0,nb2=0,p=1;
    for (i;i<n;i++)
    {
        nb1=t[i]*p+nb1;
        nb2=t[n-i-1]*p+nb2;
        p=p*10;
    }
    result=nb1-nb2;
}
void affiche (int t[],int n)
{
    cout<<"Voila le tableau"<<endl;
    for (int i=0;i<n;i++)
    {
        cout<<t[i]<<endl;
    }
}
azolan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 10h31   #2
oodini
Membre Expert
 
Inscription : novembre 2004
Messages : 2 026
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 2 026
Points : 1 426
Points : 1 426
Merci de mettre ton code enter les balises idoines (bouton #) et d'indenter correctement.
__________________
VDS "The C++ Standard Library" (Josuttis) -> 30 €
oodini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 10h38   #3
azolan
Invité de passage
 
Inscription : septembre 2012
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2012
Messages : 11
Points : 0
Points : 0
l'indenter correctement?
azolan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 10h47   #4
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 555
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 555
Points : 4 115
Points : 4 115
Bonjour,

L'indentation est déjà meilleure maintenant que j'ai ajouté les balises CODE.
Quelle erreur rencontres-tu ? Boucle infinie ?
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 10h49   #5
azolan
Invité de passage
 
Inscription : septembre 2012
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2012
Messages : 11
Points : 0
Points : 0
le programme s'ouvre mais n'affiche rien (pas de probleme a la compilation)
azolan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 10h52   #6
oodini
Membre Expert
 
Inscription : novembre 2004
Messages : 2 026
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 2 026
Points : 1 426
Points : 1 426
Commence déjà par utiliser des vecteurs, plutôt que des tableaux.
Ça simplifiera ton code.
__________________
VDS "The C++ Standard Library" (Josuttis) -> 30 €
oodini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 10h59   #7
azolan
Invité de passage
 
Inscription : septembre 2012
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2012
Messages : 11
Points : 0
Points : 0
Je debute et en fait l'exercice demande des tableaux.
Les vecteurs on n'a pas encore vu
azolan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 11h16   #8
oodini
Membre Expert
 
Inscription : novembre 2004
Messages : 2 026
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 2 026
Points : 1 426
Points : 1 426
Appelle affiche() juste après avoir rempli le tableau, et dis-nous si ça affiche quelque chose.
__________________
VDS "The C++ Standard Library" (Josuttis) -> 30 €
oodini est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 11h22   #9
azolan
Invité de passage
 
Inscription : septembre 2012
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2012
Messages : 11
Points : 0
Points : 0
oui ca defile sans s'arreter
azolan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 14h21   #10
Iradrille
Membre éprouvé
 
Homme
Étudiant
Inscription : juin 2012
Messages : 266
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2012
Messages : 266
Points : 447
Points : 447
Citation:
Envoyé par azolan Voir le message
Tu voulais sans doute écrire nb != 6174.

actuellement tu as une boucle infinie, la condition est à comprendre comme ça:
6174 => différent de 0 donc vaut true
!6174 => false
nb = !6174 => nb = (int)false => nb = 0
Tu ne rentres donc jamais dans cette boucle while, mais tu modifies nb et donc ta boucle for est infinie.

edit: enfin dans tous les cas, il faut modifier une copie de nb, et pas nb directement, sinon tu ne sortira jamais de ta boucle for.
Iradrille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 14h54   #11
azolan
Invité de passage
 
Inscription : septembre 2012
Messages : 11
Détails du profil
Informations forums :
Inscription : septembre 2012
Messages : 11
Points : 0
Points : 0
oui le point d'exclamation c'teait une faute de frappe.

Par contre pour le nb ou il fallait faire une copie, j'avoue que j'ai pas assez réfléchi... Merci beaucoup!!!!!! (là ça marche)
azolan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h13.


 
 
 
 
Partenaires

Hébergement Web