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 :

Calcul de matrice de distance - nombre bizarre


Sujet :

C

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Points : 35
    Points
    35
    Par défaut Calcul de matrice de distance - nombre bizarre
    bonjour;
    j'ai un fichier "jeu de donnée IRIS" que je veux importer et le transformer en une matrice de distance en calculant la matrice de distance euclidienne,
    en utilisant qu'un fichier c sans utiliser un projet , le code s’exécuté, mais en créant un nouveau projet et coller le contenu de ce fichier dans le main du nouveau projet, l’exécution affiche des nombres bizard

    voici mon code complet:

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
     
     
    	FILE *st=fopen("ir.csv","r");
    	double f[150][4];
     int i; int j; int s; 
     double dis[150][4] = {0};
     
    	for(i=0;i<150;i++)
    		for(j=0;j<4;j++)
    			fscanf(st,"%lf;",&f[i][j]);
     
    	fclose(st);
     
    	for(i=0;i<150;i++, puts(""))
    		for(j=0;j<4;j++)
    			printf("%g ",f[i][j]);
     
     
        /*********************calcule de la distance **************************************/
     
     
     
     
        int k;
        for (i = 0; i < 149; i++) {
            for (j = 0; j < 149; j++) {
                int temp = 0;
     
                for (k = 0; k < 149; k++) {
                    temp += (int)sqrt(pow(f[i][k] - f[j][k], 2));
                }
     
                dis[i][j] = temp;
            }
        }
     
        for(i=0; i<149; i++) {
          for(j=0;j<149;j++) {
            printf("%f ", dis[i][j]);
            if(j==2){
                printf("\n");
     
          }
      }
     
    } 
     
     
     
     
      system("pause"); 
      return 0;
    }

    l'affichage:

    Nom : execution.jpg
Affichages : 566
Taille : 122,2 Ko

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    1) Pensez à mettre à RESOLU votre précédent post

    2) J'ai des warnings de compilation et des erreurs à l'édition de lien

    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
     
    ./tests/unit/from_internet/iris.c: In function ‘main’:
    ../tests/unit/from_internet/iris.c:35:30: warning: implicit declaration of function ‘sqrt’ [-Wimplicit-function-declaration]
       35 |                 temp += (int)sqrt(pow(f[i][k] - f[j][k], 2));
          |                              ^~~~
    ../tests/unit/from_internet/iris.c:35:30: warning: incompatible implicit declaration of built-in function ‘sqrt’
    ../tests/unit/from_internet/iris.c:3:1: note: include ‘<math.h>’ or provide a declaration of ‘sqrt’
        2 | #include <stdlib.h>
      +++ |+#include <math.h>
        3 | 
    ../tests/unit/from_internet/iris.c:35:35: warning: implicit declaration of function ‘pow’ [-Wimplicit-function-declaration]
       35 |                 temp += (int)sqrt(pow(f[i][k] - f[j][k], 2));
          |                                   ^~~
    ../tests/unit/from_internet/iris.c:35:35: warning: incompatible implicit declaration of built-in function ‘pow’
    ../tests/unit/from_internet/iris.c:35:35: note: include ‘<math.h>’ or provide a declaration of ‘pow’
    /usr/bin/ld*: /tmp/ccs7ImiZ.o*: dans la fonction «*main*»*:
    /home/frederic/deminer/scripts/../tests/unit/from_internet/iris.c:35*: référence indéfinie vers «*pow*»
    /usr/bin/ld*: /home/frederic/deminer/scripts/../tests/unit/from_internet/iris.c:35*: référence indéfinie vers «*sqrt*»
    Où est le code de ces deux fonctions ? Est-ce que vous désirez inclure math.h ?
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    Bonsoir;
    j'ai ajouté "include.math" mais j'ai toujours le même affichage et en à la fin il bloque, je ne sais vraiment pas ou elle est l'erreur,
    le calcule de la distance marche bien avec une matrice donnée par l'utilisateur et même le code de lecture du fichier marche bien tout seul mais les deux codes ensemble n'affiche pas le bon résultat

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Il faut résoudre les warnings que je vous ait fourni.
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 165
    Points
    165
    Par défaut
    Citation Envoyé par lynaranya Voir le message
    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
            ...
    	for(i=0;i<150;i++, puts(""))
    		for(j=0;j<4;j++)
    			printf("%g ",f[i][j]);
            ...
     
        ...
        for(i=0; i<149; i++) {
          for(j=0;j<149;j++) {
            printf("%f ", dis[i][j]);
            if(j==2){
                printf("\n");
            
          }
       ...
    
    		
      system("pause"); 
      return 0;
    }

    C'est bien le code que vous avez écrit, non? Ca me paraît normal qu'il imprime des tas de nombres et bloque à la fin.
    C'est quoi qui vous dérange précisément?

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    bonjour;
    voici les résultats d'affichage des deux codes séparemment:

    code 1: importation du fichier iris.csv

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
    FILE* fichier=NULL;
    fichier=fopen("ir.csv","rb");
     
    if (fichier==NULL)
    {
                      printf("bababa\n");
    }
     
    else
    {
        char c;
        do{
           c=fgetc(fichier);
           printf("%c",c);     
        }
        while (c!=EOF);
    }
     
     
     
      system("PAUSE");	
      return 0;
    }]
    Nom : affichage1.png
Affichages : 478
Taille : 17,3 Ko

    code 2:calcule de la distance euclidienne

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int main(void)
    {
    int k;
    int i;
    int j;
    double distance[3][3] = {0};
        double meas[3][3] = { {1, 2, 3}, {4 , 5, 6}, {7, 8, 9} };
     
     
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                int temp = 0;
     
                for (k = 0; k < 3; k++) {
                    temp += (int)sqrt(pow(meas[i][k] - meas[j][k], 2));
                }
     
                distance[i][j] = temp;
            }
        }
     
        for(i=0; i<3; i++) {
          for(j=0;j<3;j++) {
            printf("%f ", distance[i][j]);
            if(j==2){
                printf("\n");
            }
          }
      }
     
     
      system("pause"); 
      return 0;
    }
    Nom : affichage2.png
Affichages : 477
Taille : 7,9 Ko

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 165
    Points
    165
    Par défaut
    Vu que ton fichier contiens des nombres à virgules, je te déconseille de stoker les résultats dans un int (int temp, ligne 32; (int), ligne 35). Restes en double.

    Calcul quelques valeurs à la main, pour voir si les résultats sont cohérent ou pas.
    Si il y en a une qui ne colle pas, dis nous laquelle, et avec toutes ses données d'entrée qui ont permis sa génération.

    Parce que là comme ça, il n'y a rien qui nous saute au yeux. Toutes ces valeurs peuvent paraître cohérentes, d'après l'algo que t'as écris.


    Et au passage, tu as aussi la fonction abs(), si ton but était simplement d'obtenir des nombres strictement positifs. C'est plus simple que de calculer la racine carré d'un nombre ².

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 165
    Points
    165
    Par défaut
    Et ton fichier d'entré semble être composé de 4 colonnes. Donc je suppose que tu devrais limité ton k à 4, pas 149.
    D'ailleurs c'est ainsi que t'as déclaré dis. Donc tu dois avoir un beau débordement de mémoire. Idem pour j, dans la dernière boucle.

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Août 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 71
    Points : 35
    Points
    35
    Par défaut
    merci beaucoup pour vos aides, le problème a été résolu

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

Discussions similaires

  1. [AC-2007] Mon application ne s'execute pas correctement
    Par belalia dans le forum Access
    Réponses: 4
    Dernier message: 21/03/2018, 11h05
  2. Réponses: 18
    Dernier message: 19/04/2007, 17h42
  3. [Mail] Les codes PHP ne s'executent pas
    Par Rajhonson dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2006, 13h40
  4. Réponses: 5
    Dernier message: 14/05/2006, 22h41
  5. probleme code vba ne s'execute pas apres instruction sql
    Par arnogef dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/12/2005, 12h34

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