Problème de remplissage de tableau de pointeurs

moinelly Messages postés 11 Date d'inscription lundi 20 février 2012 Statut Membre Dernière intervention 21 décembre 2012 - 16 déc. 2012 à 20:37
moinelly Messages postés 11 Date d'inscription lundi 20 février 2012 Statut Membre Dernière intervention 21 décembre 2012 - 19 déc. 2012 à 12:22
Bonjour à tous,
j'écris un programme en C qui trace un polygone à travers des points que j'ai inséré dans un fichier. Seulement je suis bloquée parceque je ne suis pas très douée dans les pointeurs; déjà mon programme n'affiche que la 1ère ligne. Je sais qu'il ya un pb de pointeur et je sais pas où. Votre aide sera la bienvenue et merci d'avance.Ci dessous une partie du code dans le main:
#define max 15
typedef struct {
double x;
double y;
} POINT;
POINT indice [max] = {
{0.37, 0.20},
{0.77, 0.78},
{0.68, 0.60},
{0.28, 0.44},
{0.63, 0.38}}
POINT *points [max];
printf("\n");
for ( i=0; i<= nblines; i++){
size_t j = 0;
points[i] = malloc (nblines*sizeof(POINT*));
points[i] = &indice[j];
j++;
printf("%d : %d: (%.20f %.20f)\n", i, j, points[i]->x, points[i]->y);
}
aidez moi à trouver où est la faille svp

6 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
16 déc. 2012 à 23:56
Bonjour.

A l'avenir, merci d'utiliser les balises des codes...

points[i] = &indice[j];
devrait être:
*points[i] = indice[j];

C'est la valeur que tu veux copier et non l'adresse.
Ne pas oubliez les "free" après la fin d'utilisation de "points".

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
moinelly Messages postés 11 Date d'inscription lundi 20 février 2012 Statut Membre Dernière intervention 21 décembre 2012
17 déc. 2012 à 02:27
Merci bcp de ta réaction
voilà j'ai utilisé ta correction, jusque là j'ai toujours une erreur. Quand je compile le code ci-dessous avec code blocks, il m'affiche juste la 1ère ligne 15fois et les 0,0000 les autres fois jusque 75ème ligne et ensuite me signale que le programme ne fonctionne pas correctement. J'ai déjà manipuler les pointeurs de toutes les manières possibles sans succès. Merci d'avance de votre aide.
(En ce qui concerne les balises, j'aligne le code comme il faut pour une bonne lisibilité mais quand je clique sur l'aperçu et voilà il les aligne tous à gauche, je ne sais pas pourquoi ni comment faire pour l'affichage comme je l'ai redigé. Peut être que le site n'a pas cette option)

#include <stdlib.h>
#include <stdio.h>
#define max 15
typedef struct {
double x;
double y;
} POINT;

int main(int argc, char *argv[]){
size_t i;
size_t nblines;
POINT indice [max] = {{0.37, 0.20},{0.77, 0.78},{0.68, 0.60},{0.28, 0.44},{0.63, 0.38}};
POINT *points[max];
printf("\n");
for ( i=0; i<= nblines; i++){
size_t j = 0;
points[i] = malloc (nblines*sizeof(POINT*));
*points[i] = indice[j];
j++;
printf("%d : %d: (%f %f)\n", i, j, points[i]->x, points[i]->y);
}
free(points[i]);
return EXIT_SUCCESS;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
17 déc. 2012 à 10:49
(En ce qui concerne les balises, j'aligne le code comme il faut pour une bonne lisibilité mais quand je clique sur l'aperçu et voilà il les aligne tous à gauche, je ne sais pas pourquoi ni comment faire pour l'affichage comme je l'ai redigé. Peut être que le site n'a pas cette option)

On fait l'effort de regarder les outils de ce forum. Il y a plein d'outils et de balises qui permettent de formatter le texte (citer, colorer et aligner syntaxiquement etc...). Des boutons sont prévus à cet effet, au dessus de la boite où tu écris.

Je ne sais pas du tout ce que tu cherches à réaliser. Je ne vois pas où tu veux en venir avec ton code.
Voici un code qui compile et qui fonctionne, mais difficile de deviner ce que tu cherches à obtenir...

#include <stdlib.h>
#include <stdio.h>

#define MAX 15

typedef struct
{
  double x;
  double y;
} Point;

int main(void)
{
  size_t i;
  size_t nblines = MAX;
  // Si max = 15, alors il faut plus d'éléments dans le tableau
  Point indice [MAX] =
    {
      {0.37, 0.20},
      {0.77, 0.78},
      {0.68, 0.60},
      {0.28, 0.44},
      {0.63, 0.38}
    };
  Point* points[MAX];

  printf("\n");
  for (i = 0; i < nblines; ++i)
  {
    points[i] = malloc(1 * sizeof(Point));
    *points[i] = indice[i];
    printf("%lu : %lu: (%f %f)\n", i, i, points[i]->x, points[i]->y);
  }

  for (i = 0; i < nblines; ++i)
    free(points[i]);

  return 0;
}



________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
moinelly Messages postés 11 Date d'inscription lundi 20 février 2012 Statut Membre Dernière intervention 21 décembre 2012
17 déc. 2012 à 12:01
Merci encore de ta réaction,

c'est compris pour les balises. Et ben parfait le code m'affiche les points au complet. J'ecris un code qui trace un polygone, j'étais déjà bloquée pour l'affichage des points qui est résolu, maintenant j'ai encore un blocus au niveau de ma fonction void poly(*points[], size_t n) qui doit contenir un programme qui affiche dans l'ordre des points du polygone plus le 1er point en dernier pour la fermeture du ploygone. L'astuce est de choisir le minimum des points et de calculer l'angle qu'il fait avec tous les autres points. Je suis aussi bloquée à ce niveau. J'ai utiliser la formule de atan de la manière suivante:

#define PI 3.14

void poly(*points[], size_t n){

[*] double *result;
[*] double *dx;
[*] double *dy;

for (size_t i=0; i<n; i++){
[*] dx = (point[i]->x - point[minimum]->x); // le minimum pouvant être 0 ou différent de 0 qu'on a au préalable rechercher parmi nos points
[*] dx = (point[i]->y - point[minimum]->y);
[*] result[i] = malloc (sizeof(double);
[*] result[i] = atan(dy/dy);
[*] (if result[i] < 0)
[*] [*] result[i] += PI;
[*] }
[*] printf ("%f", result[i]);
}

je sais que j'ai toujours un problème de pointeur mais je ne sais pas où. J'ai beaucoup de mal avec les pointeurs, j'ai relu plusieurs fois, plusieurs notes mais je ne suis pas sure d'avoir bien saisir son comportement.
un grand merci d'avance pour vos réaction en attente svp
je n'ai pas trouvé d'options pour enlever les puces à la ligne en tabulant, vous savez où ça se trouve svp?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
17 déc. 2012 à 12:16
C'est bien simple, si tu n'utilises pas la balise de code, je cesse de t'aider. Si tu ne fais pas l'effort de l'utiliser, je ne ferais pas l'effort de te répondre.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
moinelly Messages postés 11 Date d'inscription lundi 20 février 2012 Statut Membre Dernière intervention 21 décembre 2012
19 déc. 2012 à 12:22
#define PI 3.14 

void poly(*points[], size_t n){ 

    POINT* min = points[0];
    POINT* aux = NULL;
    size_t init = 0;
    
    aux = min;
    min = points[init];
    points[init] = aux;

printf("\n");
    printf("Minimum is (%.20f,%.20f)\n", points[init]->x, points[init]->y);
    	printf("\n");
    	
      size_t i;
      double result; 
      double dx; 
      double dy = 1; 

for (i=0; i<n; i++){ 
       dx = (point[i]->x - point[minimum]->x); // le minimum pouvant être 0 ou différent de 0 qu'on a au préalable rechercher parmi nos points 

       dy = (point[i]->y - point[minimum]->y); 
       result[i] = atan(dy/dy); 
         (if result[i] < 0) 
            result[i] += PI; 
} 
   printf ("%f", result[i]); 
} 


Voilà, j'ai mis la balise, désolée au départ je ne savais pas comment m'y prendre et j'ai du chercher pour en arriver là
Un grand merci pour ta réaction.
En fait, je dois écrire ma fonction void poly(*points[], size_t n) tel que à partir de mes coordonnées du main, je puisse afficher un polygone. J'essaye en vain d'écrire un bon programme mais j'y arrive pas. SVP j'ai besoin de votre aide
Merci d'avance
0
Rejoignez-nous