Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction decoupe

qui decoupe un nombre

    11 avril 2006 à 18:41:26

    donc voila j'ai vu sur le site ca dans le cour sur les fonction de matheo :
    void decoupeMinutes(long* pointeurHeures, long* pointeurMinutes);

    int main(int argc, char *argv[])
    {
        long heures = 0, minutes = 90;

        // On envoie l'adresse de heures et minutes
        decoupeMinutes(&heures, &minutes);

        // Cette fois, les valeurs ont été modifiées !
        printf("%ld heures et %ld minutes", heures, minutes);

        return 0;
    }

    void decoupeMinutes(long* pointeurHeures, long* pointeurMinutes)
    {
        /* Attention à ne pas oublier de mettre une étoile devant le nom
        des pointeurs ! Comme ça, vous pouvez modifier la valeur des variables,
        et non leur adresse ! Vous ne voudriez pas diviser des adresses
        n'est-ce pas ? ;o) */

        *pointeurHeures = *pointeurMinutes / 60;
        *pointeurMinutes = *pointeurMinutes % 60;
    }

    donc voila moi je voudrai un truc equivalent ki decouperé un nombre :
    par exemple si je lui donne le nombre 12345
    il faudrai que je recupere dans diferente variable
    dixaine_milier : 1
    milier : 2
    centaine :3
    dixaine : 4
    unite : 5
    donc voila et la fonction peut allé de 0 a 99999
    et je ne voit pas comment faire ce genre de truc . pouvez vs m'aider ?
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      11 avril 2006 à 18:48:24

      Je dirais 2 possibilités :

      Soit la division par puissances de 10, afin de récupérer la valeur de chaque chiffre (on divise par 10 et on regarde le chiffre, puis par 10 encore ou directement par 100...).

      Soit passer par une chaîne de caractères, écrire dedans le nombre avec un sprintf, puis lire chaque caractère, et le reconvertir en int en comptant son décalage à '0' (c'est à dire c - '0').
      • Partager sur Facebook
      • Partager sur Twitter
        11 avril 2006 à 18:49:35

        pour le premier tu peux diviser par 10^(lenombredechiffre) , soutraire 0,5 au nombre obtenu et arrondir ( il y a une fonction standard pour arrondir )
        pour le deuxieme tu fais la meme chose mais dabord tu soustrais le nombre obtenu *10^(lenombredechiffre) au nombre principal
        etc...
        ( pour savoir le nombre chiffre dans un nombre tu peux tester ca en soustrayant le nombre principal par 10^(une variable qui sincrémente tant qu'on à pas trouver ) jusqu'à ce que le nombre principal devienne négatif après l'opération puis tu récupère le nombre de chiffre du nombre grace à ta variable qui incrémentait
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2006 à 19:01:34


          #include <stdio.h>
          #include <stdlib.h>

          void decnb(long nombre, long* dizmillier, long* millier, long* centaine,
          long* dizaine, long* unite);

          int main(int argc, char *argv[])
            {
              long nombre = 12345, dizaineMillier = 0;
              long millier = 0, centaine = 0, dizaine = 0, unite = 0;
              decnb(nombre, &dizaineMillier, &millier, &centaine, &dizaine, &unite);
              printf("Le nombre %ld contient :\n", nombre);
              printf("%ld dizaines de milliers\n", dizaineMillier);
              printf("%ld milliers\n", millier);
              printf("%ld centaines\n", centaine);
              printf("%ld dizaines\n", dizaine);
              printf("%ld unites\n", unite);
              system("PAUSE");
              return 0;
            }
           
          void decnb(long nombre, long* dizmillier, long* millier, long* centaine,
          long* dizaine, long* unite)
            {
              *dizmillier = nombre/10000;
              *millier = (nombre % 10000)/1000;
              *centaine = (nombre % 1000)/100;
              *dizaine = (nombre % 100)/10;
              *unite = (nombre % 10);       
            }   
          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2006 à 19:03:41

            pas mal mais pas pratique : ce serait mieux de donner seulement le nombre principal en argument
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2006 à 19:03:50

              ou avec un ltostr (long to string) qui convertit un long en... chaine de caractères.
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2006 à 19:07:06

                c'est sur que c'est plus pratique ca xD
                • Partager sur Facebook
                • Partager sur Twitter
                  11 avril 2006 à 19:08:28

                  enfin c'est pas vraiment compliqué, tant que ça marche c'est bien :D
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 avril 2006 à 19:10:47

                    pour le code suivant :
                        *dizmillier = nombre/10000;
                        *millier = (nombre % 10000)/1000;
                        *centaine = (nombre % 1000)/100;
                        *dizaine = (nombre % 100)/10;
                        *unite = (nombre % 10);

                    c'est sur de marcher ??
                    car les fonction que je coné pas jveut pas trop les utilisé car je travail pas pour mon ordi mais pour des microcontroleur (des composant electronique)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 avril 2006 à 19:14:05

                      ne t'inquiète pas, c'est des trucs que tu dois connaître si t'as bien lu tous les chapitres :p (modulos, pointeurs)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 avril 2006 à 19:32:24

                        j'ai une autre question imaginé je garde la meme fonction et que je mette juste le nombre 123 et que je voudrai récuperer uniquement centaine,dixaine,unite esce que je pourai faire ce code :
                        decnb(nombre, 0, 0, &centaine, &dizaine, &unite)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          11 avril 2006 à 19:36:13

                          as-tu réfléchi avant de demander une solution toute faite? Esseye de comprendre la solution qui t'es proposée, vérifie si elle fonctionne pour tous les cas (ce qui se passe si le nombre est supérieur à 99 999 ou s'il est inférieur à 10 000). Comment gérer les éventuels failles de l'algorithme... On peut pas tout faire pour toi et il n'y as pas qu'une solution à ton problème.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 avril 2006 à 19:40:10

                            plus simple avec ltostr.
                            si je me souviens bien tu lui passes le nombre en parametre et il te retourne un tableau de char.
                            Si tu lui passes 12345 il te retoutrnera tableau[0] = 1, tableau[1] = 2 etc.
                            cherche dans google pour la manip exacte je m'en souviens plus.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 avril 2006 à 19:41:49

                              ba a vrai dire je ne peut pas tester car je fait un porgramme pour un composant et je n'est pas encore la carte electronique de mon projet donc j'improvise le truc
                              et pour ce qui est de depassé 99 999 c'est pas possible
                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 avril 2006 à 19:43:48

                                Bah il suffit de faire un include <string.h>
                                Si tu peux faire l'include (je m'y connais pas...) ca devrait etre bon!
                                • Partager sur Facebook
                                • Partager sur Twitter

                                fonction decoupe

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown