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 :

Débutant: Aide avec nombre Armstrong


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 32
    Points
    32
    Par défaut Débutant: Aide avec nombre Armstrong
    Bonjour à tous. J'espère réussir à trouver de l'aide ici, parce que j'ai beaucoup de misère à faire ce problème.

    Un nombre Armstrong est défini comme étant un nombre de n chiffres dont la somme des puissances n de ses chiffres est égale au nombre lui-même. Exemple: il y a 3 chiffres dans 153, si on fait la somme de 1^3 + 5^3 + 3^3, on obtient 153! Faites un programme qui lit un entier positif et qui affiche les nombres Armstrong compris entre 1 et ce nombre inclus.

    Voici ce que j'ai fait jusqu'à maintenant. (i.e je sais que c'est tout croche, mais j'ai le cerveau qui va me sauter )

    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
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int i,n,temp,chif,somme,ctr,puissance,mem;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::bCalculerClick(TObject *Sender)
    {
     lRep->Show();
     n=eEntier->Text.ToInt();
     temp=n;
     for (i=n;i=1;i--){  // vérifier tous les chiffres
        mem = i;
        while ( i != 0 ) {
           i = i / 10;
           ctr++;
        }
        i = mem ;
    // pour savoir combien il y a de chiffres dans le nombre.
        while ( i != 0 ) {
           n = i;
           chif = i % 10 ;
           i = i / 10;
           puissance = chif;
           for (int cpt = ctr; cpt >=1; cpt--) {
              puissance = puissance * chif;
           }
           somme = somme + puissance;
        }
        if (somme == n)
          lRep->Caption = lRep->Caption + " " + puissance;
     }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
     lRep->Hide();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::bQuitterClick(TObject *Sender)
    {
     Form1->Close();        
    }
    //---------------------------------------------------------------------------
    Merci à l'avance.
      0  0

  2. #2
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Dès la première ligne de la première fonction, je tombe sur une variable non définie dans ton code. Déjà que je n'avais pas trop envie de lire sans plus d'explication...

    Pourrais-tu nous donner plus de précisions sur le/les problèmes que tu rencontres, ou au moins commenter suffisamment le code pour qu'on le comprenne ? Merci.
      0  0

  3. #3
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Tu programmes sous Borland non? Essaie sur le forum Borland C++.
    Tu pourrais utiliser des boucles mais ça risquerait d'être un peu long...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(i=1; i<999; i++)
    {
    if((x*x*x)+(y*y*y)+(z*z*z)==i)
    cout<< "voici un de ces nombres:" << i<<end1;
    }
    Quelque chose du genre...
    Je vais essayer de te trouver qqch de mieux.
    A++
      0  0

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Merci pour les réponses, je vais tenter de m'expliquer un peu plus.

    1) Pour la variable non déclarée, hum, j'ai bien regardé et je n'en vois pas d'incorrect. De plus, il compile très bien.

    2) Je vais tenter de décortiquer mon code pour vous favoriser la tâche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::bCalculerClick(TObject *Sender)
    {
     lRep->Show();
     n=eEntier->Text.ToInt();
     temp=n;
     for (i=n;i=1;i--){  // vérifier tous les chiffres
        mem = i;
        while ( i != 0 ) {
           i = i / 10;
           ctr++;
        }
        i = mem ;
    Dans cette partie, il y a la boucle pour essayer tous les nombres qui composent le nombre entré. Ensuite, je met en mémoire mon i (variable représentant tous les nombres dans la boucle). Ensuite, c'est une boucle pour savoir combien de chiffres il y a dans le nombre. Je ramène ensuite mon i (il redevient le nombre initial).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        while ( i != 0 ) {
           n = i;
           chif = i % 10 ;
           i = i / 10;
           puissance = chif;
           for (int cpt = ctr; cpt >=1; cpt--) {
              puissance = puissance * chif;
           }
           somme = somme + puissance;
        }
        if (somme == n)
          lRep->Caption = lRep->Caption + " " + puissance;
    Dans cette partie, je met mon i dans n. chif = i % 10 me donne le dernier chiffre du nombre. Je divise mon i ensuite pour passer aux chiffres restant. J'égale ma puissance au chif. La boucle qui arrive est pour mettre le nombre à la puissance selon le nombre de chiffre que comprend ce nombre. J'additionne ensuite cela pour qu'il vérifie (dans le if) si la somme équivaut au nombre initial.

    Il compile très bien, sauf que dès que je lui demande de calculer, il gèle ! Ça ressemble étrangement à une boucle infinie, mais bon, je n'arrive pas à l'identifier.

    En espérant que vous pourrez m'amener de l'aide...

    Merci !

    PS: Pour reggae, ton truc est bon pour les nombres à 3 chiffres, mais le programme doit fonctionner pour tous les nombres, même s'ils sont composés de 5 chiffres.
      0  0

  5. #5
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Salut.

    J'ai fait ce prog à la ONE_AGAIN, mais il est tard

    Désolé pour les noms de variables et de fonctions

    J'ai utilisé le type long, mais c'est la même taille que le int avec mon compilo.

    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
    #include <iostream>
     
    using std::cout;
    using std::endl;
     
    long res(long lnum1, long lnum2){
     
      long lTmp = lnum1;
     
      while(--lnum2)
        lnum1 *= lTmp;
     
      return lnum1;
    }
     
    void fct(long lNum1, long lnum2){
     
      long lTmp1 = 0;
      long lTmp2 = 0;
      long lTmp3 = lNum1;
     
      do{
     
        lTmp1 = lTmp3 % 10;
        lTmp2 += res(lTmp1, lnum2);
     
      }while(lTmp3 /= 10);
     
      if(lNum1 == lTmp2)
        cout << lNum1 << " armstrong" << endl;
    }
     
    void main(){
     
      long lTmp1;
      long lTmp2;
     
      for(long i = 1; i < 50000; i++){
     
        lTmp1 = 1;
        lTmp2 = i;
     
        while(lTmp2 /= 10)
          lTmp1++;
     
        fct(i, lTmp1);
      }
    }
    A pas beaucoup les nombres d'armstrong...

    Me suis arrêter à 4210818.
      0  0

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Merci d'éviter le multipost, dans ce cas il vaut mieux demander à faire déplacer ton sujet.

    La suite ici : http://www.developpez.net/forums/viewtopic.php?t=412646
      0  0

Discussions similaires

  1. [Débutant] Aide pour demarrer avec java et NetBeans
    Par kachaloarmin dans le forum NetBeans
    Réponses: 2
    Dernier message: 10/11/2007, 00h02
  2. [Débutant] Aide avec les Switch
    Par ggcourtois dans le forum C++
    Réponses: 30
    Dernier message: 01/08/2006, 12h20
  3. [XHTML] [Débutant] Aide pour navigation avec cadres
    Par calogerogigante dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 18/06/2006, 23h43
  4. [débutant] problème avec les nombres aléatoires
    Par happylife925 dans le forum Débuter
    Réponses: 12
    Dernier message: 10/03/2006, 15h47
  5. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29

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