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 :

probleme dans une boucle


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut probleme dans une boucle
    Bonjour,
    voila les amis, j' ai un exercice à rendre pour demain. On demande un entier a l' utilisateur; le programme doit determiner le nombre de chiffres de l' entier et donner le nombre mirroir (ex:1234>>4321).

    voila le programme que j' ai ecris( qui ne marche pas pour la deuxieme partie de l exercice) :


    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
    #include <stdio.h>
    main()
    {
       int n,c,i,s,m;
       printf("donnez un entier  ");
       scanf("%d",&n);
       c=1;
       m=0;
       while(n/10!=0)
       {
          n=n/10;
          c=c+1;
       }
       printf("le nombre de chiffres dans l'entier entre est %d",c);
       for(i=1;i<=c;i++)
       {
          s=((n%pow(10,i))/pow(10,i-1))*pow(10,n-i);
          m=m+s;
       }
       printf("%d",m);
       getch();
    }
    Merci mille fois pour votre aide les amis

  2. #2
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Points : 734
    Points
    734
    Par défaut
    Bonsoir,

    Tu peux tout simplement stocker le nombre dans une chaîne de caractères et d'un coup, toutes les difficultés de ton exercice se lèvent :
    • Nombre de chiffres longueur de la chaîne ;
    • Nombre miroir affichage inverse de la chaîne.

    Et pense à l'avenir de mettre ton code entre les balises [ CODE ][[ /CODE ] (bouton # de l'éditeur de messages) pour une meilleure lisibilité.

    --
    Wachter

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    c'est gentil, vraiment, mais comme je suis un débutant, j' ai absolument rien compris a ta réponse mec

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    Salut,

    Pour faire simple, voila ce que voulais dire Wachter :

    -Demande a l'utilisateur de faire la saisie du nombre
    -Cette saisie, range la dans un tableau de caractère
    -en parcourant le tableau en sens inverse puis :
    -a chaque itération, tu range le caractère courant dans un autre tableau que tu parcourra dans un bon sens

    En gros sa donne ceci :

    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
     
    #define TAILLE_MAX 10
     
    ...
     
    char tab1[TAILLE_MAX],tab2[TAILLE_MAX];
    int i,j=0,resultat;
    printf("saisir le nombre:");
    gets(tab1);
     
    for ( i = strlen(tab1) ; i > 0 ; i-- )
    {
         tab2[j] = tab[i];
         j++;
    }
     
    resultat = atoi(tab2);
    Tu as le miroir dans la variable résultat.

    Je te laisse le soins de faire les saisie sécurisé et autre manip.

  5. #5
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Points : 734
    Points
    734
    Par défaut
    Bonsoir,

    Si tu ne veux pas utiliser les chaînes de caractères, tu procèdes comme suit :
    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
     
    Lire(nombre);
     
    nbChiffres = 0;
    Tant que (nombre > 0)
      chiffresInverses[nbChiffres] = nombre % 10;
      nombre = nombre / 10;
      nbChiffres = nbChiffres + 1;
    Fin Tant que
     
    nombreMiroir = 0;
    Pour i = nbChiffres - 1 à 0 compris
      nombreMiroir = nombreMiroir + (chiffresInverses[i] * 10^i);
    Fin Pour
     
    Afficher(nbChiffres, nombreMiroir);
    --
    Wachter

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il n'y a absolument pas besoin de tableaux dans cette affaire, le nombre miroir peut être calculé à la volée en même temps que le nombre de chiffres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Lire nombre        // le nombre à inverser
    nbChiffres = 0     // le nombre de chiffres de nombre
    nombreMiroir   = 0 // le nombre entré avec les chiffres dans l'ordre inverse
    Tant que nombre est différent de zéro 
      nombreMiroir  = 10*nombreMiroir + reste de la division de nombre par 10
      nombre = quotient de la division de nombre par 10 
      nbChiffres = nbChiffres +1
    Fin tant que
    Toutefois, le PO ne spécifie pas ce qui doit être fait si le nombre commence par des 0.
    Le pseudocode ci-dessus pour 00123 calculera 3 chiffres et donnera un nombre miroir de 321. Si on doit obtenir 5 chiffres et pour miroir 32100, d'autres dispositions doivent être prises.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    merci a vous tous les amis de vous etre donné la peine de m' aider.
    bravo a tous, en particulier à toi diogene pour la simplicité de ta réponse.
    a bientot.

Discussions similaires

  1. Probleme dans une boucle for, faisant appel a une fonction
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/01/2010, 22h41
  2. probleme dans une boucle
    Par youhibadelphi dans le forum Débuter
    Réponses: 30
    Dernier message: 20/12/2009, 13h11
  3. probleme dans une boucle do while
    Par oldscrout dans le forum Débuter
    Réponses: 2
    Dernier message: 30/12/2008, 18h02
  4. Probleme dans une boucle while pour remplir une JTable
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 27/03/2008, 15h01
  5. Probleme dans une boucle
    Par Baya44 dans le forum VBA Access
    Réponses: 19
    Dernier message: 13/03/2007, 13h31

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