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.