Page 1 sur 1

[..] Ajouter le nombre $n à la fin du nom de la variable

Posté : sam. 23 nov. 2013 18:13
par Jingoku
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
J'utilise donc

Code : Tout sélectionner

Assign("valtuyau"&$m, $valt, 0)
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 :

Code : Tout sélectionner

Eval('valtuyau'&$position)
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 !

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : sam. 23 nov. 2013 20:37
par Sea
Pourquoi ne pas utiliser un tableau?

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : sam. 23 nov. 2013 22:34
par Jingoku
Bonsoir Sea,

J'ai effectivement pensé à réaliser ça sous forme de tableau, mais j'ai réalisé ce code dans l'optique de le remettre en C++ par la suite (mais je ne maîtrise pas encore assez bien le C++ pour utiliser des tableaux, je débute tout juste !).
S'il n'existe pas de solutions à mon problème j'essaierai les tableaux :wink:
Merci de ton aide.

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : dim. 24 nov. 2013 01:24
par jchd
C++ n'est pas réflexif.
De toute façon, la réflexion (et plus précisément l'intercession, que tu cherches à employer) n'est pas -et de beaucoup- la meilleure solution à ce problème.

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : dim. 24 nov. 2013 03:32
par mikell
C'est clairement plus simple de passer par des tableaux
Mais l'énoncé du problème est bizarrement incomplet
L'exemple n°1 est facile à comprendre :
► Afficher le texte
Donc logiquement pour l'exemple n°2, la réponse devrait être 0
Mais le site dit que la réponse est 4, ce qui sous-entendrait que le nb d'indices = le nb de tuyaux
Mis en fonction ça donnerait ça :
► Afficher le texte
Ce qui est bizarre c'est qu'il y a des données superflues (le nombre de tuyaux est donné par le nb de chiffres dans le 2ème paramètre, le nb d'instructions par le nb de lettres dans le 4ème param) par contre on ne donne pas le nb de cases total ^^

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : dim. 24 nov. 2013 06:10
par jchd
Qui plus est, l'énoncé est digne d'un mauvais élève de CM2, autant du point de vue logique, clarté, grammaire qu'orthographe.

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : dim. 24 nov. 2013 10:56
par Jingoku
Bonjour Jchd et Mikell,

Merci de vos réponses, je vais prendre note de votre 1ere remarque (jchd) et je vais travailler votre proposition (mikell), je vous tiens au courant :)

Bonne journée

Edit: Au sujet de l'exemple 2, le résultat est bien 4 : lorsque l'on avance au tuyau 2, que l'on fait T, puisque la valeur du tuyau 2 est 0, on va rester sur place, et donc en reculant deux fois après, on arrive au 4, comme il n'existe pas de tuyau "0", c'est une sorte de boucle.

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : dim. 24 nov. 2013 11:30
par mikell
Jingoku a écrit :on arrive au 4, comme il n'existe pas de tuyau "0", c'est une sorte de boucle.
Ouais encore eût-il fallu qu'on le susse ...
C'est loin d'être évident si on regarde le shéma censé illustrer la question (10 cases et 3 tuyaux) qui contredit le résultat de l'exemple n°2
D'après ce shéma, si le résultat est 0 on arrive à la case 10, rien à voir avec le nb de tuyaux
Peut-être que "apprenez svp à énoncer un problème" est la vraie réponse ?

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : lun. 25 nov. 2013 11:52
par timmalos
J'avais participé à une ancienne édition et c'etait deja le même problème :o
Au moins l'enoncé de la finale était plus clair :) Si on avait eu une architecture qui tienne le coup pendant plus de 2 heures d'affilé ca aurait été parfait 8)

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : lun. 25 nov. 2013 12:39
par jchd
timmalos a écrit :Si on avait eu une architecture qui tienne le coup pendant plus de 2 heures d'affilé ca aurait été parfait 8)
Le bâtiment s'était effonfré ?

Re: [..] Ajouter le nombre $n à la fin du nom de la variable

Posté : lun. 25 nov. 2013 13:56
par timmalos
Disons que 100 KDE sur un serveur ca pose des problèmes si on y reflechit pas avant, et que passer sour xfce en plein milieu du concours de 36 heures pour essayer de résoudre les problèmes qui empêchent de coder pendant une bonne dizaine d'heures ne fait pas très serieux. (Au final on en profite pour dormir un peu :lol: )