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écomposer un entier dans tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut Décomposer un entier dans tableau
    Bonsoir,

    Je souhaite décomposer un entier dans un tableau. Par exemple j'envoie 3896 à une fonction et elle me retourne le tableau avec
    tableau[0]=6
    tableau[1]=9
    tableau[2]=8
    tableau[3]=3

    Le code ne compile pas. Il me dit qu'il y a une erreur à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau[i]=int(Valeur/(Puissance(10, Nombre_De_Decimale));
    Il me semble qu'on ne peut pas faire d'allocation dans une fonction ? Ce pourquoi j'ai une erreur.

    Donc ma question est, comment passer un paramètre un tableau dont on ne connait pas encore la taille si jamais l'erreur provient bien de là ?

    Merci d'avance.

    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
    #include<stdio.h>
    #include<stdlib.h>
    //#include "./../../bibliotheque.h"
     
    void Entier_Dans_Tableau( int Valeur, int *Tableau );
    int Puissance( int Digit, int Exposant );
     
    int main()
    {
     
         int Valeur=2386;
         int *tableau;
         Entier_Dans_Tableau( Valeur, tableau );
     
         int i;
         for ( i=0 ; i<4 ; i++ )
         {
             printf( "Tableau[%d] : %d", i, tableau[i] );
         }
     
    }
     
    int Puissance( int Digit, int Exposant )
    {
        int i=0;
        int Resultat=1;      
     
        if ( Exposant != 0 )
           {
                      while ( i != Exposant )
                            {
                              Resultat=Resultat*Digit;
                              i++;
                            }
           }
     
        if ( Exposant==0 )
           {
                         Resultat=1;
           }  
     
        return Resultat;
    }  
     
    void Entier_Dans_Tableau( int Valeur, int *Tableau )
    {
        int N=1;
        int A=0;
        int Nombre_De_Decimale=-1;
        while ( A>9 )
              {
                          A=Valeur/N;
                          N=10*N;
                          Nombre_De_Decimale++;
              }
     
     
        Tableau=malloc(Nombre_De_Decimale*sizeof(int));
        int i;
        for ( i=(Nombre_De_Decimale-1) ; i>=0 ; i-- )
            {
                  Tableau[i]=int(Valeur/(Puissance(10, Nombre_De_Decimale));    
                  Valeur=Valeur-Tableau[i]*Puissance(10, Nombre_De_Decimale); 
            }
    }

  2. #2
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Ups non j'ai rien dit

    Tu peux faire plus simple sans utiliser de fonctions non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for ( i=(Nombre_De_Decimale-1) ; i>=0 ; i-- )
    {
    	Tableau[i] = Valeur % 10;    
    	Valeur /= 10;
    }

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Sinon il y a toujours la formule générale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbdigits = number!=0 ? floor(log10(abs(number)))+1 : 1;

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    La solution avec modulo est meilleure.

    Mais voici ta ligne corrigée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Tableau[i]=(int)(Valeur/(Puissance(10, Nombre_De_Decimale)));
    Il manquait une parenthèse en fin.

    Et le int est un cast, il doit lui aussi être entre ()

    Fred

    PS: le résultat est incohérent.

  5. #5
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    En effet ça compile, mais à l'execution ça plante. Plus qu'une erreur de calcul ou de syntaxe, quelque chose ne se fait pas ou ne peut être fait en mémoire.

    Peut-on réellement faire l'allocation mémoire d'un tableau passé en paramètre dans une fonction ?

    Merci.

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 082
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    En effet ça compile, mais à l'execution ça plante. Plus qu'une erreur de calcul ou de syntaxe, quelque chose ne se fait pas ou ne peut être fait en mémoire.

    Peut-on réellement faire l'allocation mémoire d'un tableau passé en paramètre dans une fonction ?

    Merci.
    J'ai du mal a comprendre ce que tu veux dire exactement.

    Si tu passe un poiteur vers un int, tu peux tout a fait allouer un tableau sur celui-ci dans une fonction.


    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
     
    void Allocation(int *(*test), int nb)
    {
        (*test) = malloc (nb * sizeof(int));
        /* Pas de verification, bouh pas bien ! */
        (*test)[0] = 2;
        (*test)[1] = 4;
        (*test)[2] = 5;
     
    }
     
     
     
    int main ()
    {
        int *test;
        Allocation(&test, 3);
     
        printf("%d \n", test[0]);
     
        return 0;
    }

  7. #7
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Ok merci, j'avais un doute qui n'est plus desormais. En tout cas le code compile et s'exécute mais crash instantanément. Donc si l'erreur ne provient pas de là c'est que j'ai un souci autre part. Cependant, je ne trouve pas d'où il provient.

    Auriez vous une idée ?

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Décomposer un entier dans tableau
    Par ramzuus95 dans le forum C
    Réponses: 1
    Dernier message: 13/11/2014, 23h06
  2. Charger un fichier dans tableau d'entier
    Par nico0007 dans le forum Langage
    Réponses: 12
    Dernier message: 17/04/2008, 11h30
  3. Réponses: 3
    Dernier message: 13/04/2008, 02h03
  4. [TP] La position des entiers dans un tableau
    Par argon dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 21/12/2006, 11h42
  5. convertion entier dans tableau
    Par mmarcoboss dans le forum C
    Réponses: 2
    Dernier message: 24/11/2006, 11h59

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