Procédure dans procédure
Résolu
giovedy
-
giovedy -
giovedy -
Bonjour,
j'aimerai utiliser une procédure dans une autre procédure avec des mêmes arguments.
Je serai bien tenté d'utiliser à la fois le * et le & sur la même variable mais je sais pas comment l'écrire.
Pour être plus clair voici mon bout de programme (la variable qui me pose problème est listesommet)
j'aimerai utiliser une procédure dans une autre procédure avec des mêmes arguments.
Je serai bien tenté d'utiliser à la fois le * et le & sur la même variable mais je sais pas comment l'écrire.
Pour être plus clair voici mon bout de programme (la variable qui me pose problème est listesommet)
#include <stdio.h> #define Max 100 /********************************************************************************/ /* DECLARATIONS DES TYPES */ /********************************************************************************/ typedef int couleur[Max]; typedef struct sommet { int numero; int degre; couleur couleursommet; }sommet; typedef struct arc { sommet sommetdedepart; sommet sommetdarrivee; }arc; /********************************************************************************/ /* PROCEDURES ET FONCTIONS CORRECTES */ /********************************************************************************/ void calculdegre(sommet *sommet1, arc listearc[],int nbarc) { int i=0; int compteur=0; for (i=0;i<=nbarc-1;i++) { if((listearc[i].sommetdedepart.numero==(*sommet1).numero)||(listearc[i].sommetdarrivee.numero==(*sommet1).numero)) { compteur=compteur+1; } } (*sommet1).degre=compteur; } /********************************************************************************/ /* PROCEDURE EN COUR DE CREATION */ /********************************************************************************/ void calculertouslesdegres(arc listearc[],sommet listesommet[],int nbsommet,int nbarc) { int i; for(i=0;i<=nbsommet-1;i++) { calculdegre(&listesommet[i],listearc,nbarc); } } /********************************************************************************/ /* PROGRAMME PRINCIPAL */ /********************************************************************************/ void main (void) { sommet listesommet[Max],listesommetretour[Max]; arc listearc[5*Max]; sommet a; int nbsommet=2; int nbarc=3; a.numero=1; listesommet[0]=a; listearc[0].sommetdedepart=a; listearc[1].sommetdedepart=a; listearc[2].sommetdedepart=a; calculertouslesdegres(listearc,&listesommet,nbsommet,nbarc); printf("\n%d\n",a.degre); }
A voir également:
- Procédure dans procédure
- Procédure de frigo vide ✓ - Forum Consommation & Internet
- Le point d'entrée de procédure est introuvable dans la bibliothèque de liens dynamiques ✓ - Forum Windows
- Le point d'entrée de procédure iswow64process2 est introuvable - Forum Windows
- Point d'entrée introuvable ✓ - Forum Logiciels
- Point d'entrée de procédure introuvable ✓ - Forum Logiciels
1 réponse
listesommet est un tableau donc c'est déjà un pointeur.
Tu peux écrire calculertouslesdegres(listearc,listesommet,nbsommet,nbarc).
Ainsi c'est déjà le pointeur que tu passes en paramètre.
Et pour passer le pointeur de listesommet[i] tu peux faire listesommet+i
Attention : a.degre n'est pas initialisé.
Note : quand on a une structure en pointeur (*s).c on note souvent s->c
Tu peux écrire calculertouslesdegres(listearc,listesommet,nbsommet,nbarc).
Ainsi c'est déjà le pointeur que tu passes en paramètre.
Et pour passer le pointeur de listesommet[i] tu peux faire listesommet+i
Attention : a.degre n'est pas initialisé.
Note : quand on a une structure en pointeur (*s).c on note souvent s->c
mais quand je test le programme, a.degre a la bonne valeur dans la procédure calculertouslesdegres. Mais dans le main, a.degre n'a pas changé de valeur.
ps : j'ai pas compris le coup du "listesommet+i ". A quoi correspond il ? Que doit il remplacer ?
C'est à dire te renvoyer le pointeur de listesommet mais décaler de i...
Pour le reste il faudrait que tu expliques ce que tu veux faire pour savoir où ça coince !
au début le sommet "a" qui est dans listesommet[0] a un degré quelconque .
au retour de la procédure, j'aimerais que a.degré soit initialiser.
ici, pour le moment,
a.degré a la bonne valeur dans la procédure calculertouslesdegres, mais à son "retour" dans le main, a.degré n'est plus a la bonne valeur.
Si tu veux le passer par référence tu dois mettre dans ton struct arc, sommet *sommetdedepart; et ensuite faire listearc[0].sommetdedepart=&a;
trop cool