Bonjour/bonsoir,
Je tente de tester mes capacités en Autoit en réalisant le Qcm 2014 de Prologin (avis aux amateurs si vous voulez aussi faire de même !).
Je bloque donc sur ce programme :
http://www.prologin.org/training/challe ... 4/sabotage
Ce que j'ai fait :
1. Je demande le nombre n de tuyaux
2. J'assigne le nombre de case(s) que l'on peut avancer en fonction de n
3. Je demande le nombre d'instructions
4. J'entre une à une les instructions : et la fonction correspondante est effectuée après chaque entrée. A pour avancer, R pour reculer et T pour parcourir le tube.
5. J'affiche le résultat
Bien évidemment, c'est le T qui me pose problème...
Le code :
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
Global $position = 1
Global $nbrtuyau, $nbrinstruction, $valt, $k, $valtuyau, $valtuyau1
logiciel()
Func logiciel()
$nbrtuyau = InputBox("Prologin 2014", "Combien de tuyaux sur la planète ?", "")
while $nbrtuyau <= 0
$nbrtuyau = InputBox("Prologin 2014", "Vous devez entrer un nombre positif non nul !", "")
WEnd
For $m = 1 To $nbrtuyau
$valt = InputBox("Prologin 2014", "En partant du tuyau n° " & $m & ", de combien de cases on avance ?", "")
while $valt < 0 or $valt >= $nbrtuyau
$valt = InputBox("Prologin 2014", "En partant du tuyau n° " & $m & ", de combien de cases on avance ? Vous devez renseigner un nombre positif et plus petit ou égal au nombre de tuyaux !", "")
WEnd
Assign("valtuyau"&$m, $valt, 0)
Next
$nbrinstruction = InputBox("Prologin 2014", "Combien d'instructions doit-on suivre ?", "")
while $nbrinstruction <= 0
$nbrinstruction = InputBox("Prologin 2014", "Vous devez entrer un nombre positif non nul !", "")
WEnd
$k = 0
while $k < $nbrinstruction
$mouv = InputBox("Prologin 2014", "Quel est le mouvement " & $k & " ? (A, R ou T)", "")
if $mouv = "A" Then
$k=$k+1
avancer()
EndIf
If $mouv = "R" Then
$k=$k+1
reculer()
endif
if $mouv = "T" Then
$k=$k+1
tuyau()
EndIf
WEnd
msgbox(0, "Prologin 2014", "D'après les instruction, les techniciens devront se rendre au tuyau n° " & $position & " !")
EndFunc
func avancer ()
if $position = $nbrtuyau Then
$position = 1
Else
$position = $position + 1
EndIf
EndFunc
Func reculer()
if $position = 1 Then
$position = $nbrtuyau
else
$position = $position-1
EndIf
EndFunc
Func tuyau()
if $position+Eval('valtuyau'&$position) < $nbrtuyau Then
$position = $position+Eval('valtuyau'&$position)
Else
$position = ($position+Eval('valtuyau'&$position))-$nbrtuyau
EndIf
EndFunc
J'utilise donc
Pour créer les variables $valtuyau1, $valtuyau2, ..., $valtuyaun, qui correspondent aux différentes valeurs que va utiliser T.
Par exemple, si on a 3 tuyaux et que le 1er possède la variable $valtuyau1 = 2, l'opération T de l'étape 4 renverra 3 (c'est à dire 1 +2).
Bien évidemment, dans mes 3 fonctions, lorsque l'on dépasse le nombre de tuyau, il est fait en sorte de "recommencer" la boucle des tuyaux, c'est à dire que si l'on se trouve au tuyau 3 après avoir fait T, et que je souhaite faire A, on arrivera à 1.
On a posé $position le numéro de la case à laquelle on se trouve.
Le problème : Dans func tuyau(), je souhaitais que les :
soient lus comme des $valtuyau1, $valtuyau2, ..., $valtuyaun, avec "n" le numéro de la case. Et comme on a affecté à ces variables tout à l'heure un certain nombre, cela permettrait de faire les opérations et de trouver le résultat.
Mais ce dernier code n'est pas pris en compte par autoit comme je le voudrais.
Par exemple, si $position = 1, j'aimerais qu'autoit lise mon code en :
Code : Tout sélectionner
Func tuyau()
if $position+$valtuyau1 < $nbrtuyau Then
$position = $position+$valtuyau1
Else
$position = ($position+$valtuyau1)-$nbrtuyau
EndIf
EndFunc
Je reste persuadé que la solution est toute simple, mais je n'arrive pas à mettre la main dessus...
J'ai tenté d'expliquer le plus simplement possible, mais si vous avez des doutes n'hésitez pas à me demander

. Merci d'avance si vous avez le courage de m'aider !