Initiation au Lua avec Scribunto/Exercices/Sur les autres fonctions standards
Exercice 8-1
[modifier | modifier le wikicode]Dans le cours nous avons donné, comme exemple correspondant à la fonction mw.allTostring, l'exemple suivant :
local p = {}
function p.converti()
return mw.allToString(2,"Mouche",nil,true)
end
return p
Il nous reste à vérifier que les séparateurs, utilisés par la fonction mw.allTostring, sont des tabulations.
On écrira donc une fonction compte qui admet deux paramètres, le premier étant une chaîne de caractères et le deuxième étant un nombre représentant un code ASCII. Cette fonction retournera le nombre de caractères de la chaîne correspondant au code ASCII rentré. On écrira ensuite une fonction p.cherche utilisant la fonction compte pour retourner le nombre de tabulations utilisées par l'instruction mw.allToString(2,"Mouche",nil,true).
(Le code ASCII de la tabulation est 9)
La solution se trouve dans le Module:Exofonct
local p = {}
function compte(phrase,code)
local n = 0
for i = 1,#phrase do
if string.sub(phrase,i,i) == string.format('%c',code) then
n = n+1
end
end
return n
end
function p.cherche()
chaine = mw.allToString(2,"Mouche",nil,true)
return compte(chaine,9)
end
return p
Le nombre de tabulations trouvé est : 3
Exercice 8-2
[modifier | modifier le wikicode]Soient les deux tables :
local table1 = {3,7,8,13,17,19,21,25,27,30}
local table2 = {1,5,9,14,22,26,29}
contenant des nombres dans l'ordre.
Écrire une fonction p.fusion qui prend les nombres de table2 pour les mettre dans table1. À la fin de l'opération les nombres de table1 devront être dans l'ordre.
Contrainte : On n'utilisera pas d'autres tables que table1 et table2. On n'utilisera pas, non plus, l'instruction table.sort.
La solution se trouve dans le Module:Exofonct
local p = {}
local table1 = {3,7,8,13,17,19,21,25,27,30}
local table2 = {1,5,9,14,22,26,29}
function p.fusion()
for index, nombre in ipairs(table2) do
local i = 1
while table1[i] and nombre > table1[i] do
i = i+1
end
table.insert(table1,i,nombre)
end
return table.concat(table1," ")
end
return p
On remarquera, au passage, la condition de la boucle while, à savoir : table1[i] and nombre > table1[i]. Le table1[i] se trouvant avant le and sert de booléen. Tant que table1[i] contient un nombre, il est assimilable à true. Lorsque table1[i] ne contiendra plus de nombre, il retournera nil et sera, par conséquent, assimilable à false. Une deuxième chose remarquable est que lorsque table1[i] retourne nil, la deuxième partie du and, à savoir nombre > table1[i] n'est même pas évaluée. Si c'était le cas, on aurait une erreur de script car l’on compare la variable nombre à table1[i] qui retourne nil.
Après fusion la table 1 contient :
1 3 5 7 8 9 13 14 17 19 21 22 25 26 27 29 30
Exercice 8-3
[modifier | modifier le wikicode](à compléter)
Cette solution n'a pas été rédigée. Vous pouvez le faire en modifiant le paramètre « contenu
» du modèle. Comment faire ?
Exercice 8-4
[modifier | modifier le wikicode](à compléter)
Cette solution n'a pas été rédigée. Vous pouvez le faire en modifiant le paramètre « contenu
» du modèle. Comment faire ?