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 :

passage des int au double


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 48
    Par défaut passage des int au double
    bonsoir, je suis sur un petit programme de maths qui doit me faire des calculs de matrice. mon programme avançais bien (j'utilisais jusqu'à présent des int dans mes matrice), mais je ne comprend pas pourquoi mon programme ne marche pas lorsque je passe en double

    voila mon code pour les matrice "int" :
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct Matrice Matrice;
    struct Matrice
    {
        int **adresse;
        int lin;
        int col;
    };
     
     
    int main()
    {
        Matrice Mresultat = {NULL,2,2};
        int lin = 2;
        int col = 2;
    //matrice 2 2
     
        int i;
        Mresultat.adresse = malloc(lin * sizeof(*(Mresultat.adresse)));//reserve espace pour pointeur ligne matrice
        // creation d'un tableau de "col" cases à chaque ligne de la matrice
        for(i = 0; i < lin; i++)
        {
            (Mresultat.adresse)[i] = malloc(col * sizeof(int));
        }
     
    // afficher la matrice
        int j;
        for (i = 0; i < Mresultat.lin; i++)
        {
            for (j = 0; j < Mresultat.col; j++)
            {
                (Mresultat.adresse)[i][j] = 7;
                printf("%d\t", (Mresultat.adresse)[i][j]);
            }
        printf("\n");
        }
        printf("\n");
     
        return 0;
    }
    je vois bien a l'ecran : 7 7
    7 7

    et le presque le meme pour des "double" :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct Matrice Matrice;
    struct Matrice
    {
        int **adresse;
        int lin;
        int col;
    };
     
     
    int main()
    {
        Matrice Mresultat = {NULL,2,2};
        int lin = 2;
        int col = 2;
    //matrice 2 2
     
        int i;
        Mresultat.adresse = malloc(lin * sizeof(*(Mresultat.adresse)));//reserve espace pour pointeur ligne matrice
        // creation d'un tableau de "col" cases à chaque ligne de la matrice
        for(i = 0; i < lin; i++)
        {
            (Mresultat.adresse)[i] = malloc(col * sizeof(double));
        }
     
    // afficher la matrice
        int j;
        for (i = 0; i < Mresultat.lin; i++)
        {
            for (j = 0; j < Mresultat.col; j++)
            {
                (Mresultat.adresse)[i][j] = 7.5842;
                printf("%f\t", (Mresultat.adresse)[i][j]);
            }
        printf("\n");
        }
        printf("\n");
     
        return 0;
    }
    je vois a l'écran : 0,00000 0,00000
    0,00000 0,00000

    je n'es pas mis les procédures de destruction des matrice une fois finie mais ce n'est pas elle qui plante le tout.

    savez-vous pourquoi mon code ne marche pas pour les "double" ?

    merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 476
    Par défaut
    Bonjour,

    Tu as oublié de changer le type du pointeur dans ta structure Matrice :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Matrice
    {
        int **adresse;
        int lin;
        int col;
    };

    Et comme les int, généralement sur 32 bits, et les double n'ont pas le même format, tu ne lis même plus les bonnes positions au sein de ton tableau.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 48
    Par défaut
    merci beaucoup ! tu es mon sauveur.
    Je ne savais pas qu'il fallait aussi changer celui la

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 476
    Par défaut
    Citation Envoyé par alex01pernot Voir le message
    merci beaucoup ! tu es mon sauveur.
    Je ne savais pas qu'il fallait aussi changer celui la
    Ah bon ? Pourtant j'aurais bien cru que ce n'était qu'une faute d'inattention ! :-)

    C'est une question de bon sens : s'il y a un type dans ta définition, en l'occurrence int, c'est pour pouvoir s'y référer. Si ton tableau est censé contenir des floats, alors il faut dire explicitement que le pointeur pointe des floats

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/10/2014, 17h13
  2. [Conversion]int to double
    Par frouge dans le forum Général Java
    Réponses: 6
    Dernier message: 03/02/2012, 09h34
  3. Passage des chaînes de caractères à une application CGI
    Par Thom@s dans le forum Composants VCL
    Réponses: 10
    Dernier message: 03/12/2004, 00h13
  4. [Reflection][Method] Passage de int en parametre
    Par seb_fou dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 28/07/2004, 17h47
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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