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,
j'ai creer un programme qui permet de calculer la distance euclidienne, mais comme j'ai besoin de l'appel de cette distance dans d'autres programmes, alors je veux transformer le programme en une fonction qui permet de calculer la distance euclidienne à partir du fichier "iris.csv"
voila ce que j'ai réalisé,
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *st=fopen("ir.csv","r");
double f[150][4];
int i; int j; int s;
double dis[150][150] = {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 < 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));
//printf("v=%d",temp);
}
dis[i][j] = temp;
printf("q=%f",dis[i][j]);
}
}
for(i=0; i<150; i++) {
for(j=0;j<150;j++) {
printf("%f ", dis[i][j]);
if(j==4){
printf("\n");
}
}
system("PAUSE");
return 0;
}
}
le premier programme affiche la matrice de distance euclidienne de dimension [150][150]
le deuxieme programme, c'est la transformation du premier programme en une fonction, mais ça na pas marché:
#include <stdio.h>
#include <stdlib.h>
double distance(double dis)
{
FILE *st=fopen("ir.csv","r");
return dis;
}
int main(int argc, char *argv[])
{
//FILE *st=fopen("ir.csv","r");
double f[150][4];
int i; int j; int s;
double dis[150][150] = {0};
for(i=0;i<150;i++)
for(j=0;j<4;j++)
//fscanf(st,"%lf;",&f[i][j]);
fscanf(distance,"%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 < 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;
printf("q=%f",dis[i][j]);
}
}
for(i=0; i<150; i++) {
for(j=0;j<150;j++) {
printf("%f ", dis[i][j]);
if(j==4){
printf("\n");
}
}
printf("a=%f",dis[149][148]);
system("PAUSE");
return 0;
}
}
merci pour vos réponses, c'est vrai que j'ai pas l'habitude d'utiliser les fonctions sous le langage c,
j'ai quelques questions:
- est ce que je peut utiliser 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 par ordre d’exécutions?
- est ce que je peut utiliser 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 par ordre d’exécutions?
Oui
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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
Il dit qu'il y a une erreur de syntaxe devant "readIris", et que c'est une histoire de type. Bon, il y a quoi devant "readIris" ? Il y a le mot « bool ». Ben voilà l'erreur. Il a l'air de ne pas connaître le type « bool ». Qu'en penses-tu ? Est-ce que tu te souviens de ce qu'il faut faire pour qu'il connaisse ce type ?
Ça n'est plus une erreur du compilateur, c'est maintenant une erreur d'édition des liens (linker). Tu as dû oublier d'indiquer que ton code est composé de 2 fichiers C (il y a main.c mais aussi calc_dis.c). Le makefile ne semple qu'en compiler un seul.
En recherche d'emploi.
transformation d'un programme en une fonction
× 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.
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
En recherche d'emploi.