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);
}
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-
je suis d'accord avec ; calculertouslesdegres(listearc,listesommet,nbsommet,nbarc)
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 ? -
-
mon but :
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. -
-
-