[RESOLU] Problème algorithme

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Problème algorithme

Re: [RESOLU] Problème algorithme

par sirakawa » 25 juil. 2012, 20:37

Ainsi soit-il et béni oui-oui. J'ai tort, j'ai grand tort de dire ce que recommandent tous les spécialistes sérieux d'algorithmique, mais le tot tue et la tumeur, etc...
Une règle, en effet, est de pouvoir poser des assertions, et, après une boucle, de pouvoir dire pourquoi on en est sorti: or laprsésence d"'un break exclut cette connaissance.
C'est précisément à des débutants qu'il faudrait montrer comment se tirer d'affaire de boucles sans y rajouter ni break ni continue... ce qui est toujours possible.
Breakez donc au lieu de gérer des booléens.

Re: [RESOLU] Problème algorithme

par Ryle » 25 juil. 2012, 11:07

Je n'ai rien sous entendu concernant tes compétences en php. Je dis juste que sur un forum pour débutants qui éventuellement liront tes écrits, ton assertion - exprimée en l'état - est fausse (et ça c'est du binaire :)).

Que toi et Djikstra (dont je n'ai plus de nouvelles depuis un moment, la prochaine fois que vous vous voyez, dis lui de me passer un coup de fil ;)), soyez contre l'usage du goto ou du break, est une chose (encore que sur l'algo de Djikstra je te recommanderais fortement d'interrompre la boucle lorsque le résultat attendu est trouvé). De la à dénigrer cette instruction et justifier pour cela que son usage relève d'erreur de conception, sans avoir la moindre connaissance du contexte d'utilisation, et bien je ne partage pas ce point de vue.
Il n'est pire sourd que qui ne veut entendre
CQFD :P

Re: [RESOLU] Problème algorithme

par sirakawa » 25 juil. 2012, 05:21

Il n'est pire sourd que qui ne veut entendre:
Absolument pas. L'instruction break est quasi indissociable des switches (et le switch est loin d'être le signe d'un algorithme mal conçu). Quant aux boucles, cela peut permettre de rendre plus lisible les conditions de sorties, mais également de gérer des erreurs et interrompre l'exécution de boucles imbriquées...

Quoi qu'il en soit, ce n'est pas le propos de ce topic
1) le break était dans une boucle, pas dans un switch. Je ne suis pas stupide au point de penser au break du switch qui n'a pas le même statut algorithmique et qui est imposé par la conception du langage.
2) il faudrait relire djikstra à ce propos
3) dans la mesure où le topic concerne un problème d'algorithme lié à la présence du break, c'est PRECISEMENT le sujet du topic: une boucle où on met un break est une boucle mal conçue.

Re: Problème algorithme

par Ryle » 24 juil. 2012, 22:47

Y a rien de "bête" sur un forum pour débutant ;)

Si tout fonctionne, tu peux marquer le sujet comme résolu en cliquant sur le bouton en haut de la page :)

Re: Problème algorithme

par Nauk » 24 juil. 2012, 22:40

Merci, ça à l'air de marcher, désolé d'avoir poster pour une erreur si bête :/

Re: Problème algorithme

par Ryle » 24 juil. 2012, 22:38

C'est le principe de la boucle que de recommencer tant que la condition de sortie n'est pas remplie... Tu peux donc virer les break, et ajouter un elseif pour le 2ème test, ainsi une fois que le if (ou le elseif ou le else) sera exécuté il passera à la fin de la boucle et à l'itération suivante en fonction du nombre de tour déjà réalisé :)
break n'est qu'une variante de goto, signe d'un algorithme mal conçu;
Absolument pas. L'instruction break est quasi indissociable des switches (et le switch est loin d'être le signe d'un algorithme mal conçu). Quant aux boucles, cela peut permettre de rendre plus lisible les conditions de sorties, mais également de gérer des erreurs et interrompre l'exécution de boucles imbriquées...

Quoi qu'il en soit, ce n'est pas le propos de ce topic ;)

Re: Problème algorithme

par Nauk » 24 juil. 2012, 22:27

Merci de m'avoir répondu :)

Mais en faite je souhaiterai qu'en cas d'ace (les deux premiers if), la boucle recommence, et que un tour soit comptabilisé. Mais si je met return, la page n'affiche plus rien, y a t il un autre moyen ? Merci :)

Re: Problème algorithme

par sirakawa » 24 juil. 2012, 21:45

break n'est qu'une variante de goto, signe d'un algorithme mal conçu;

Re: Problème algorithme

par Ryle » 24 juil. 2012, 21:09

En fait, il n'y a qu'un tour de boucle puisque dès que php rencontre l'instruction "break" il sort immédiatement de ta boucle :)

Si tu veux qu'il exécute les 11 occurrences, vire les break (ou garde ceux qui interrompent la boucle si tu en as besoin), cela devrait mieux fonctionner. A noter d'ailleurs, que tu peux "mutualiser" l'incrémentation de ta variable $tour en le plaçant une seule fois au début plutôt que dans chaque if ;)

Problème algorithme

par Nauk » 24 juil. 2012, 19:37

Bonjour, j'ai un soucis avec un code, je ne trouve pas la solution au problème :/
Le code s'exécute normalement mais le résultat est faux. Le voici :
while ($tour <= 11) {

	$des = rand(1, 100);
	$des_2 = rand(1, 100);
	if ($des > $ace_joueur) { 
		$points_joueur = $points_joueur + 1 ;
		$tour = $tour + 1;
		break;
		}
	
	if ($des_2 > $ace_adversaire) {
		$points_adversaire = $points_adversaire + 1 ;
		$tour = $tour + 1;
		break;
		}
		
	else {
		$des_final = rand(1,100);
		if ($des_final <= $coup_joueur) {
			$points_joueur = $points_joueur + 1 ;
			$tour = $tour + 1;
			break;
			}

		else {
			$points_adversaire = $points_adversaire + 1 ;
			$tour = $tour + 1;
			break;
		}
		}

}

if ($points_joueur > $point_adversaire) {
	$outcome = "Le gagnant est $user_name";
}
else { $outcome = "Le gagnant est $nom_adversaire"; }
Plus loin dans la page, je présente les résultats du match :
echo "$points_joueur à $points_adversaire";
Et le soucis c'est que le score est toujours de 1 - 0, alors qu'il y a que 11 tours.
Le joueur est aussi toujours le gagnant.

Merci de m'aider :)