Date d'inscription : 04/06/2012 Age : 29 Localisation : Quelque part au fin fond des forêts
Sujet: Re: Blabla du forum Ven 5 Oct - 21:02
PopTartCat a écrit:
"vulgarité, propose de filer des liens pas safe"
(par le tyran amo)
Impression de déjà vu!
Tyunre a écrit:
Spoiler:
Maintenant, arrêtez de nous casser les...les...pastèques.
Cette vidéo date un peu! Ah! On vient de m'apprendre que Michael Jackson est mort!
Sinon, j'ai été voir la chaîne numberphile, c'est intéressant! La vidéo sur le googleplex est très intéressante même si elle peut faire tourner la tête!
Date d'inscription : 06/12/2011 Age : 32 Localisation : Montpellier ~:hap:~
Sujet: Re: Blabla du forum Sam 6 Oct - 0:10
PopTartCat a écrit:
"vulgarité, propose de filer des liens pas safe"
(par le tyran amo)
Désolé
C'est dernier temps je suis très emmerdé par un programme que je dois rendre dans 3 jours, alors j'essaye de décompresser comme je peux (en disant plus de merde que d'habitude, donc )
Là, mon programme fonctionne à un quart, c'est une grande avancé pour moi (sachant qu'hier, il ne fonctionnait pas du tout ).
Edit :
Si quelqu'un sait comment appeler, dans une procédure, un pointeur sur un élément à partir d'un tableau d'élément, ça serait cool. (Sachant que mon tableau fait parti d'une liste contiguë constitué aussi d'un entier qui représente la taille de mon tableau).
Date d'inscription : 10/02/2012 Age : 37 Localisation : A proximité d'un endroit où jouer
Sujet: Re: Blabla du forum Sam 6 Oct - 0:28
DjChapica a écrit:
Edit :
Si quelqu'un sait comment appeler, dans une procédure, un pointeur sur un élément à partir d'un tableau d'élément, ça serait cool. (Sachant que mon tableau fait parti d'une liste contiguë constitué aussi d'un entier qui représente la taille de mon tableau).
Je vois de quoi tu parles mais ça dépend du langage dans lequel tu te trouves mais si tu es en C/C++, tu as moyen de récupérer l'adresse de ton élément (qui n'est rien d'autre que son pointeur d'une certaine manière) en faisant (pour l'exemple ce sera un pointeur d'int):
Code:
int *pointeur = &variable;
Surtout n'hésitez pas à me corriger si quelqu'un pense que je dis de la merde...
Ainsi que mon élément tableau contigu: typedef struct{ -------Element t [lmax]; (ici lmax = 300) -------int longueur; -------} Liste;
J'ai une fonction qui est : void copie(Element e1, Element *e2) { -------strcpy((*e2).nom,e1.nom); }
Que je souhaite utilisé dans une autre fonction qui est : void copier_liste(Liste l1, Liste *l2) { -------int i; -------for (i=0 ; i < l1.longueur ; i++) -------{ --------------//l2->t[i] = l1.t[i]; --------------copie(l1.t[i], l2->t[i]); -------} -------l2->longueur = l1.longueur; }
Mon problème est : Comment accéder à l'élément e2 dans la fonction copie?
Ainsi que mon élément tableau contigu: typedef struct{ -------Element t [lmax]; (ici lmax = 300) -------int longueur; -------} Liste;
J'ai une fonction qui est : void copie(Element e1, Element *e2) { -------strcpy((*e2).nom,e1.nom); }
Que je souhaite utilisé dans une autre fonction qui est : void copier_liste(Liste l1, Liste *l2) { -------int i; -------for (i=0 ; i < l1.longueur ; i++) -------{ --------------//l2->t[i] = l1.t[i]; --------------copie(l1.t[i], l2->t[i]); -------} -------l2->longueur = l1.longueur; }
Mon problème est : Comment accéder à l'élément e2 dans la fonction copie?
C'est du C basique, je me trompe ? Utilise le '&' devant ta variable quand tu l'appel dans ta fonction, comme ça elle seras modifiée dans ta fonction main et dans ta sous-fonction à la fois, sans avoir à faire de return qui plus-est.
Ainsi que mon élément tableau contigu: typedef struct{ -------Element t [lmax]; (ici lmax = 300) -------int longueur; -------} Liste;
J'ai une fonction qui est : void copie(Element e1, Element *e2) { -------strcpy((*e2).nom,e1.nom); }
Que je souhaite utilisé dans une autre fonction qui est : void copier_liste(Liste l1, Liste *l2) { -------int i; -------for (i=0 ; i < l1.longueur ; i++) -------{ --------------//l2->t[i] = l1.t[i]; --------------copie(l1.t[i], l2->t[i]); -------} -------l2->longueur = l1.longueur; }
Mon problème est : Comment accéder à l'élément e2 dans la fonction copie?
J'imagine que tu as essayé de faire comme ça? void copier_liste(Liste l1, Liste *l2) { -------int i; -------for (i=0 ; i < l1.longueur ; i++) -------{ --------------//l2->t[i] = l1.t[i]; --------------copie(l1.t[i], &(l2->t[i])); -------} -------l2->longueur = l1.longueur; }
Ou alors comme ça? void copier_liste(Liste l1, Liste *l2) { -------int i; -------for (i=0 ; i < l1.longueur ; i++) -------{ --------------//l2->t[i] = l1.t[i]; --------------copie(l1.t[i], *(l2->t[i])); -------} -------l2->longueur = l1.longueur; }
Sinon je vois pas très bien comment récupérer une adresse autrement en langage C...
Date d'inscription : 06/12/2011 Age : 32 Localisation : Montpellier ~:hap:~
Sujet: Re: Blabla du forum Sam 6 Oct - 21:57
Devinez qui a encore besoin d'aide ? C MOAAAAAAAAAA
Bref, pour une obscure raison ceci me fait une boucle infini:
Code:
Bool est_present(Liste l,Element e) { Liste *pointeur = &l; Bool trouve = False;
while ( pointeur != NULL && !trouve ) { if ( (*pointeur)->valeur == e ) trouve = True; else pointeur = &((*pointeur)->cellule_suivante); } return trouve; }
l est un pointeur vers une cellule constitué d'un élément et d'un pointeur vers une autre cellule J'ai une boucle infini et je ne comprends pas pourquoi.
Si j'ai bien compris ta "liste" c'est une pile ou une file.
Donc j'imagine que dans ton exemple "e" n'est pas dans la liste mais arrivé au bout la boucle continue de tourner. Donc forcément l'argument qui ne va pas c'est "pointeur" qui n'est jamais nul.
Donc à priori "pointeur = &((*pointeur)->cellule_suivante);" devrait renvoyer "null" une fois arrivé à la dernière case mais cela ne peut se faire que si "cellule_suivante" fonctionne correctement. je pense que l'erreur doit se situer là-bas.
Ou alors, tu ajoute un troisième paramètre avec le nombre de case à parcourir pour sortir de la boucle une fois la dernière case passé.
J'ai bien dis "je pense" parce que je ne suis pas expert en C et je hais les pointeurs.
Date d'inscription : 10/02/2012 Age : 37 Localisation : A proximité d'un endroit où jouer
Sujet: Re: Blabla du forum Sam 6 Oct - 23:23
As-tu vérifié que tu pouvais utiliser les opérateurs de test sur des variables dont le type n'est pas connu par le langage? Il me semble que tu ne peux pas le faire et je m'explique...
Code:
Element e = (...); // déclaration et instanciation de la variable "e" de type Element Element copy_e = e; // copie de l'élément précédent
Si ça fonctionne, alors tant mieux (mais j'ai des doutes à ce sujet...) ^^"
Mais je crois avoir trouvé ton vrai problème: ta variable "cellule_suivante" est une valeur et non un pointeur. Et je m'explique encore (et là accroche-toi):
Dans cette ligne:
Code:
pointeur = &((*pointeur)->cellule_suivante);
Tu demandes à mettre dans "pointeur" l'adresse (par l'opérateur "&") de "cellule_suivante" ce qui ne sera JAMAIS à NULL car c'est une adresse (et une adresse ne sera JAMAIS à NULL ). Le principe d'un pointeur c'est qu'il contient l'adresse de la variable vers laquelle il pointe (ce qui signifie qu'un pointeur a également une adresse qui lui est propre...). Mais seuls les pointeurs peuvent être à NULL.
En conclusion, le type de ta variable "cellule_suivante" doit être un pointeur d'Element (vu que tu fais une liste chaînée j'ai l'impression). Une fois ceci fait, la ligne précédente deviendra: