problème avec goto

Discussion sur l'enseignement de l'algorithmique avec Xcas au lycee
claude
Messages : 2
Inscription : dim. sept. 20, 2009 4:37 pm

problème avec goto

Message par claude » dim. sept. 20, 2009 5:20 pm

devine():={
A:=rand(10);
label (saisie);
saisir("essai",b);
if(b>A){afficher("trop grand");goto (saisie);}
else {
if(b<A){afficher("trop petit");goto (saisie);}
else afficher("gagné");}
}

Lorsque je lance le programme ci-dessus, il se bloque sur "calcul en cours", il y a un blocage avec l'exécution du goto dans les blocs "if".
Quelle est la solution?

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: problème avec goto

Message par parisse » dim. sept. 20, 2009 7:33 pm

goto et label ne marchent que dans un même bloc (délimité par { }), donc le goto doit etre une seule instruction apres if ce qui nécessite ici de répéter le if. Notez aussi que else est inutile.
devine():={
A:=rand(10);
label saisie;
saisir("essai",b);
if(b>A) afficher("trop grand");
if(b<A) afficher("trop petit");
if (b!=A) goto (saisie);
afficher("gagné");
}
goto n'a pratiquement pas été testé, il est très souvent préférable d'utiliser une boucle, quitte à faire une boucle infinie et utiliser continue pour passer à l'itération suivante ou/et break pour arreter la boucle
...
while(true){
saisir("essai",b);
if(b>A) afficher("trop grand");
if(b<A) afficher("trop petit");
if (b==A) break;
}
afficher("gagné");

claude
Messages : 2
Inscription : dim. sept. 20, 2009 4:37 pm

Re: problème avec goto

Message par claude » lun. sept. 21, 2009 5:46 am

Un grand merci pour l'information, d'autant plus que je ne l'ai trouvée dans aucune aide.

Répondre