Y'a un truc qui foire dans 1 soft (problème résolu) [C] - Programmation
Marsh Posté le 30-03-2002 à 18:01:37
| Citation : if(tableau1[j]==tableau2[j]) break ;  | 
 
 
ce ne serait pas un continue a la place d'un break? 
 
LEGREG 
Marsh Posté le 30-03-2002 à 18:42:35
| eniac a écrit a écrit  : void tester_solution(int tableau1[],int tableau2[],int dim,int *ch_bien_places,int *ch_mal_places) { int i,j; *ch_bien_places=*ch_mal_places=0 ; for(i=0;i<dim;i++) { if(tableau1[i]==tableau2[i]) { *ch_bien_places=*ch_bien_places+1 ; tableau1[i]=-1 ; tableau2[i]=-2 ; } else { for(j=0;j<dim;j++) { if(tableau1[i]==tableau2[j]) { if(tableau1[j]==tableau2[j]) break ; *ch_mal_places=*ch_mal_places+1 ; tableau1[i]=-3 ; tableau2[j]=-4 ; } } } } } | 
 
 
Moi je ferais ça comme ça : 
 
void tester_solution(int tableau1[],int tableau2[],int dim,int *ch_bien_places,int *ch_mal_places) 
{ 
 int i,j; 
 *ch_bien_places=*ch_mal_places=0 ; 
 for(i=0;i<dim;i++) 
 {	if(tableau1[i]==tableau2[i]) 
 	{	*ch_bien_places=*ch_bien_places+1 ; 
   tableau1[i]=-1 ; 
   tableau2[i]=-2 ; 
 	} 
 	else 
 	{	for(j=0;j<dim;j++) 
   {      
          if (i!=j)  
                if(tableau1[i]==tableau2[j]) 
               { 
                          *ch_mal_places=*ch_mal_places+1 ; 
                     tableau1[i]=-3 ; 
                     tableau2[j]=-4 ; 
               } 
   } 
 	}	} 
} 
[jfdsdjhfuetppo]--Message édité par procat--[/jfdsdjhfuetppo]
Marsh Posté le 30-03-2002 à 20:54:25
legreg > je ne pense pas, en fait c'est pour ne pas incrémenter ch_mal_places si j'ai déjà incrémenté ch_bien_places 
 
procat > ça me semble correct et plus clair que ma manière, je vais tester voir si ça marche et je redirai quoi 
 
Thanks A+ 
Marsh Posté le 30-03-2002 à 21:50:19
| eniac a écrit a écrit  : legreg > je ne pense pas, en fait c'est pour ne pas incrémenter ch_mal_places si j'ai déjà incrémenté ch_bien_places | 
 
 
break = sortie de la boucle 
continue = "annuler" l'itération courante et retourner dans le for pour l'intération suivante. 
Marsh Posté le 31-03-2002 à 00:36:24
| eniac a écrit a écrit  : legreg > je ne pense pas, en fait c'est pour ne pas incrémenter ch_mal_places si j'ai déjà incrémenté ch_bien_places | 
 
 
c'est donc bien ce que je te conseillais. 
 
bon je vais derouler l'algo: 
123 
321 
 
le premier 3 n'est pas bien place 
je regarde s'il est mal place: 
pas de bol 2 est bien place 
donc je quitte la boucle 
et je ne verrai pas le 3 de la ligne du dessus 
donc je ne compterai pas 3 comme mal place. 
 
Ce qu'il fallait faire: 
le 3 de la ligne du dessous n'est pas bien place, 
je regarde s'il est mal place: 
je saute 2 = 2 pour ne pas le compter deux fois 
mais je CONTINUE la boucle, 
hop je tombe sur un 3 la au dessus : 
ok mon 3 du dessous etait mal place. 
etc.. 
 
bon c'est peut etre pas la methode la plus simple. 
mais ca fera surement marcher ton programme 
break -> continue; 
 
LEGREG 
Marsh Posté le 31-03-2002 à 12:26:38
procat > ta méthode ne marche pas non plus 
 
Pour le continue/break j'avais pas vu ça comme ça, à vrai dire j'étais persuadé du contraire  
  
je vais essayer par moi même voir ce que ça donne dans un soft plus simple 
 
Grand merci de m'avoir remis dans le droit chemin   
 
Marsh Posté le 31-03-2002 à 13:41:44
Ok, ça a fait "tilt" 
 
Ca marche nickel, je pense avoir testé tous les cas de figure possible et ça affiche la bonne solution à chaque fois. 
 
Merci à vous Bye 
Marsh Posté le 31-03-2002 à 13:56:30
...
[jfdsdjhfuetppo]--Message édité par ramirez--[/jfdsdjhfuetppo]
Marsh Posté le 30-03-2002 à 17:01:36
Salut,
Ca fait pas mal de temps que je tourne en rond avec la fonction ci-dessous. Elle sert à comparer deux séries de 'dim' chiffres placés dans 2 vecteurs Tableau[1] & Tableau[2]
J'aimerais obtenir :
Ch_bien_place : nbre de chiffres à la bonne position
Ch_mal_place : nbre de chiffres présents dans les 2 vecteurs mais à la mauvaise place
Ca tourne mais y'a des bugs, et je n'arrive pas à voir pourquoi ils apparaissent. D'autant plus que si je fais le déroulement "sur papier", ça marche...
par exemple :
3 3 5 5 1
5 3 5 1 3
--> 2 ch bien places et 2 ch mal places (3 en réalité)
3 7 9 2 2 6
6 7 9 3 2 2
--> 3 ch bien places et 2 mal places (3 en réalité)
void tester_solution(int tableau1[],int tableau2[],int dim,int *ch_bien_places,int *ch_mal_places)
{
int i,j;
*ch_bien_places=*ch_mal_places=0 ;
for(i=0;i<dim;i++)
{ if(tableau1[i]==tableau2[i])
{ *ch_bien_places=*ch_bien_places+1 ;
tableau1[i]=-1 ;
tableau2[i]=-2 ;
}
else
{ for(j=0;j<dim;j++)
{ if(tableau1[i]==tableau2[j])
{ if(tableau1[j]==tableau2[j]) break ;
*ch_mal_places=*ch_mal_places+1 ;
tableau1[i]=-3 ;
tableau2[j]=-4 ;
}
}
}
}
}
Si vous avez ne fut-ce que la moindre hypothèse...
[jfdsdjhfuetppo]--Message édité par eniac--[/jfdsdjhfuetppo]
---------------
If you really want something, all the Universe conspires in helping you to achieve it.