Initiation au Lua avec Scribunto/Exercices/Sur les structures de contrôle
Exercice 3-1
[modifier | modifier le wikicode]Écrire une fonction dans un module qui compte jusqu'à un nombre que l’on aura rentré en paramètre.
La solution se trouve dans le module:Boucle
Puisque nous allons compter jusqu'à une valeur bien déterminée, nous utiliserons une structure for..do. Nous nous servirons de la variable d'index de boucle pour compter.
local p = {}
function p.compte(frame)
local limite = tonumber(frame.args[1])
local reponse = " "
for i = 1, limite do
reponse = reponse.." "..i
end
return reponse
end
return p
Si, par exemple, nous écrivons {{#invoke:Boucle|compte|9}}, nous obtenons : 1 2 3 4 5 6 7 8 9
Exercice 3-2
[modifier | modifier le wikicode]Écrire une fonction qui calcule automatiquement les carrés des 13 premiers nombres premiers en prenant soin de mettre à part la fonction qui élève au carré.
Le programme suivant se trouve dans le module:Boucle
local p = {}
local nombres_premiers = {2,3,5,7,11,13,17,19,23,29,31,37,41}
function f(x)
return x^2
end
function p.carre(frame)
local reponse = "<u>Nombres premiers élevés aux carrés</u> <br />"
for index = 1, 13 do
reponse = reponse.."Le carré du nombre "..nombres_premiers[index].." est "..f(nombres_premiers[index]).."<br />"
end
return reponse
end
return p
La fonction f se contente d'élever au carré le nombre x, qui représente son argument, et nous voyons que cette fonction est appelée dans la fonction p.carre qui se trouve dans la table p.
En écrivant : {{#invoke:Boucle|carre}}, nous obtenons :
Nombres premiers élevés aux carrés
Le carré du nombre 2 est 4
Le carré du nombre 3 est 9
Le carré du nombre 5 est 25
Le carré du nombre 7 est 49
Le carré du nombre 11 est 121
Le carré du nombre 13 est 169
Le carré du nombre 17 est 289
Le carré du nombre 19 est 361
Le carré du nombre 23 est 529
Le carré du nombre 29 est 841
Le carré du nombre 31 est 961
Le carré du nombre 37 est 1369
Le carré du nombre 41 est 1681
Exercice 3-3
[modifier | modifier le wikicode]Écrire une fonction dans un module qui lit dans l'ordre, des nombres non nuls, se trouvant, en désordre, dans un tableau initialisé en début de module. Les nombres du tableau sont des entiers naturels différents inférieurs à 100 et dans un ordre quelconque. La fonction n'utilise aucun tableau supplémentaire et doit retourner les nombres dans l'ordre.
La fonction se nomme enlisant et se trouve dans le module:Trie :
local p = {}
local chaos = {17, 3, 9, 28, 1, 30, 14, 16, 5, 22}
function p.enlisant()
local reponse = " "
local lecture = 0
for i = 1, 10 do
local pluspetit = 100
for j = 1, 10 do
if chaos[j] > lecture and chaos[j] < pluspetit then
pluspetit = chaos[j]
end
end
lecture = pluspetit
reponse = reponse.." "..lecture
end
return reponse
end
return p
Si, par exemple, nous écrivons {{#invoke:Trie|enlisant}}, nous obtenons : 1 3 5 9 14 16 17 22 28 30
Exercice 3-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 ?