Comment sortir de la boucle

ibti25 Messages postés 10 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 21 novembre 2004 - 25 mars 2004 à 10:55
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 25 mars 2004 à 16:44
Bonjour,
Avec le code suivant, le programme ne sort pas seul de la boucle. J'arrive à stopper le processus.
Auriez vous une idée ??

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

typedef struct _AFTER_
{
int I;
int J;
} I_after_J, * I_after_JPtr;

int main()
{
int i,j;
int nbvars = 10;
int tmpj;
int redondance, nbv=0;

I_after_JPtr prec = (I_after_JPtr)malloc(nbvars*sizeof(I_after_J));

puts("precedence : ");

srand(time(NULL));

do
{
prec[0].I=(rand()%nbvars+1);
prec[0].J=(rand()%nbvars+1);
}
while(prec[0].I==prec[0].J);
prec[1].I=prec[0].J;

for (j=0;j<nbvars;j++)
{

do
{
tmpj=(rand()%nbvars+1);

redondance=0;
for(i=0;i<j;i++)
{
if(tmpj==prec[i].I)
{
redondance=1;
break;
}// if
}// for

}while( prec[j].I==tmpj || redondance );

prec[j].J=tmpj;
if(j<nbvars-1) prec[j+1].I=prec[j].J;

printf("i : %d ,", prec[j].I);
printf("j : %d\n", prec[j].J);

}// for j

free(prec);

return 1;
}
Ibti

2 réponses

ibti25 Messages postés 10 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 21 novembre 2004
25 mars 2004 à 10:59
J'arrive PAS à stopper le processus sauf en faisant CTRL+C.
C'est pas bon puisque le code suivant est en réalité dans un autre programme qui lui a besoin de récupéré la variable "prec" (son contenu est un graphe de precedence).
Pour que je puisse faire mon trt j'ai besoin de sortir de ma boucle.

Merci

Ibti
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
25 mars 2004 à 16:44
un petit pb dans l'algo.

voici un exemple des 9 premiers indice de la boucle for sur j:
i : 10 ; j : 9
i : 9 ; j : 4
i : 4 ; j : 7
i : 7 ; j : 8
i : 8 ; j : 5
i : 5 ; j : 6
i : 6 ; j ; 1
i : 1 ; j ; 3
i : 3 ; j ; 2

ensuite lorsque j=9, la seule valeur possible pour tmpj serait 2 (seule valeur non présente pour prec[i].I avec i de 0 à 8.
mais tu écarte cette valeur car prec[9].I=2.

comme le dernier couple est obligatoirement connu (2,10), 10 étant prec[0].I, il te suffit d'arrêter la boucle à j=8 :
for (j=0;j<nbvars-1;j++)

et de rajouter :
prec[nbvars-1].J = prec[0].I à la fin.
0
Rejoignez-nous