#include <stdio.h> #include <stdlib.h> struct coordonnees { double x; double y; }; void getSize(const char* filename, int* size1, int* size2, int* size3) { FILE* file = fopen(filename,"r"); if (file == NULL) { printf("big problem\n"); return; } /* Plus besoin de & devant size1, size2 et size3, car ce sont des pointeurs, le "&" a déjà été précisé avant */ fscanf(file, "%d %d %d", size1, size2, size3); fclose(file); } struct coordonnees* readCoords(FILE* file, int size) { int i = 0; struct coordonnees* points; points = malloc(size * sizeof(struct coordonnees)); for(i = 0; i < size; ++i) { fscanf(file,"%lf %lf", &points[i].x, &points[i].y); printf("x: %f, y:%f\n", points[i].x, points[i].y); } return points; } void readAllCoords(const char* filename, int size1, int size2, int size3) { FILE* file = fopen(filename,"r"); struct coordonnees* points1; struct coordonnees* points2; struct coordonnees* points3; if (file == NULL) { printf("big problem 2\n"); return; } points1 = readCoords(file, size1); points2 = readCoords(file, size2); points3 = readCoords(file, size3); free(points1); free(points2); free(points3); fclose(file); } int main() { int C1; int n1, n2, n3; getSize("FichierNombre.txt", &n1, &n2, &n3); printf("Taille: %d %d %d \n\n", n1, n2, n3); for(C1 = 1; C1 < 2; ++C1) readAllCoords("FichierCoordonnees.txt", n1, n2, n3); return 0; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJ'utilise code blocks en mode console mais bien pour du C, mais je suis debutant, pointer n'est pas encore super evident et les fonction qui vont avec de meme.
Est-ce que cette nouvelle solution est plus rapide, beaucoup plus rapide, ou bien que cela ne change rien?
Si j'ai reecris le programme, c'est parce qu'au depart j'utilisais non pas deux fichiers mais beaucoup plus, 100*177=17 700 que j'ecrivais avec un autre programme. Je l'ai reecris pour mettre tous les fichiers les uns a la suite des autres.
Par ailleurs, la suite du programme continue sur du calcul de distance entre les points dont les coordonnees sont dans les fichiers. Au total j'ai toujours environ 1000 points par configuration, 100 configurations, et je dois calculer le nombre de triplets a,b,c plus proche qu'une certaine longueur (d(a,b)<r, d(a,c)<r, d(b,c)<r pour r variant de 0 a 0,24 par 0,01). C'est super demandant pour le processeur, j'en gagne un peu en mettant un certain nombre de if pour n'avoir a calculer que le minimum de distances entre points, mais ca reste enorme (1000^3 c'est gros). Est-ce que pour ce type de calcul, je peux gagner enormement en temps avec un code en assembleur?