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 :

utilisation des fonctions


Sujet :

C

  1. #1
    Membre à l'essai
    utilisation des fonctions
    Bonsoir;

    j'utilise dans le même projet plusieurs fichiers sources, chaque fichier contient une fonctions et un autre fichier source qui représente le programme principale "main.c", l'appel de toutes les fonctions se fait au niveau du programme principale, mon but c'est d'importer un fichier, calculer et afficher la distance,
    je probleme c'est que l'execution du programme principale n'affiche rien


    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
    main.c
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
      int main(void) {
        int i;
        int j;
        int k;
        double f[150][4];
        double dis[150][150]={0};
     
     
        if(!readIris(f)) {
            puts("....");
            //readIris(f);
            computeDistance(dis,f);
            //printf("aaa");
            system("PAUSE");
            return(1);
     
        }
     
      //return 0;
    }


    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
    readIris.c
     
     
    #include <math.h>
    #include <stdio.h>
    #include <stdbool.h> 
     
    bool readIris(double f[][4]) {
        FILE *st;
        int i;
         int j;
         int k;
     
        st=fopen("ir.csv","r");
        if(!st)
            return(0);
     
        for(i=0;i<150;i++)
            for(j=0;j<4;j++)
                fscanf(st,"%lf;",&f[i][j]);
                //printf("f=%f",f[1][1]);
        fclose(st);
         for(i=0;i<150;i++, puts(""))
    		for(j=0;j<4;j++)
    			printf("%g ",f[i][j]);
        return(1);
        //system("PAUSE");	
    }



    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
    computeDistance.c
     
     
    #include <math.h>
    #include <stdio.h>
    #include <stdbool.h>
     
     
    void computeDistances(double dis[][150],double f[][4]) {
         int i;
         int j;
         int k;
        for(i=0;i<150;i++)
            for( j=0;j<150;j++) {
                double temp=0;
                for( k=0;k<4;k++)
                    temp+=sqrt(pow(f[i][k]-f[j][k],2));
                dis[i][j]=temp;
            }
            //system("PAUSE");	
    }

  2. #2
    Expert éminent
    Il te manque les fichiers .h qui contiennent les déclarations publiques des fonctions/ procédures, déclarations des structures et macros et les variables globales.

    et c'est le 3ième cours en C après les types et les fonctions.

  3. #3
    Membre à l'essai
    Bonsoir;

    JE bloque Toujours

    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
    //main.c
     
    #include <stdio.h>
    #include <stdlib.h>
    #include "calc_dis.h"
     
     
      int main(int argc, char* argv[]) {
        int i;
        int j;
        int k;
        double f[150][4];
        double dis[150][150]={0};
     
     
        if(!readIris(f)) 
            puts("....");
     
            //readIris(f);
            computeDistance(dis,f);
            //printf("aaa");
            //system("PAUSE");
            //return(1);
            system("PAUSE");
            return 1;
        /*#ifdef __WIN32__
            
    #endif*/
     
     
      //return 0;
    }


    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
    //calc_dis.h
     
    #ifndef DEF_CALC_DIS
    #define DEF_CALC_DIS
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    bool readIris(double f[][4]);
    void computeDistances(double dis[][150],double f[][4]);
     
     
     
    #endif


    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
    //calc_dis.c
     
    #include<stdlib.h>
    #include<stdio.h>
     
    #include "calc_dis.h"  
     
     
    /***********************************************/
    bool readIris(double f[][4]) {
        FILE *st;
        int i;
         int j;
         int k;
     
        st=fopen("ir.csv","r");
        if(!st)
            return(0);
     
        for(i=0;i<150;i++)
            for(j=0;j<4;j++)
                fscanf(st,"%lf;",&f[i][j]);
                //printf("f=%f",f[1][1]);
        fclose(st);
         for(i=0;i<150;i++, puts(""))
    		for(j=0;j<4;j++)
    			printf("%g ",f[i][j]);
        return(1);
        //system("PAUSE");	
    }
     
    /**************************************************/
    void computeDistances(double dis[][150],double f[][4]) {
         int i;
         int j;
         int k;
        for(i=0;i<150;i++)
            for( j=0;j<150;j++) {
                double temp=0;
                for( k=0;k<4;k++)
                    temp+=sqrt(pow(f[i][k]-f[j][k],2));
                dis[i][j]=temp;
            }
            //system("PAUSE");	
    }
     
    /***************************************************/


    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
    5.1;3.5;1.4;0.2
    4.9;3.0;1.4;0.2
    4.7;3.2;1.3;0.2
    4.6;3.1;1.5;0.2
    5.0;3.6;1.4;0.2
    5.4;3.9;1.7;0.4
    4.6;3.4;1.4;0.3
    5.0;3.4;1.5;0.2
    4.4;2.9;1.4;0.2
    4.9;3.1;1.5;0.1
    5.4;3.7;1.5;0.2
    4.8;3.4;1.6;0.2
    4.8;3.0;1.4;0.1
    4.3;3.0;1.1;0.1
    5.8;4.0;1.2;0.2
    5.7;4.4;1.5;0.4
    5.4;3.9;1.3;0.4
    5.1;3.5;1.4;0.3
    5.7;3.8;1.7;0.3
    5.1;3.8;1.5;0.3
    5.4;3.4;1.7;0.2


    erreur:

    5 C:\Dev-Cpp\calc_heritage\main.c In file included from main.c

    10 C:\Dev-Cpp\calc_heritage\calc_dis.h syntax error before "readIris"

    10 C:\Dev-Cpp\calc_heritage\calc_dis.h [Warning] data definition has no type or storage class

    C:\Dev-Cpp\calc_heritage\Makefile.win [Build Error] [main.o] Error 1

  4. #4
    Expert éminent
    Le type bool n'existe pas (*) il faut lire tes cours - La valeur 0 est fausse, toute les autres valeurs entières (char, short, int, long, long long) sont vraies.
    Moi, j'utilise un type unsigned char

    Ensuite , en C, le passage des tableaux est dégradé en pointeur. Donc, tes passages [][X] sont susceptibles d'être 1 pointeur, avec la taille de ces tableaux à passer en paramètre en plus.
    Si c'est utile, tout mettre dans une structure array (ou autre nom) (données, nombre de colonnes, nombre de lignes, ...)


    Édit : Le type _Bool existe depuis la norme C99 (avec le compilateur gcc, gcc -std=c99) et il est dit qu'il existe un alias bool (<- surement un typedef)