# Initiation au Lua avec Scribunto/Exercices/Sur les méta-tables
## Exercice 10-1

On considère un programme gérant des comptes se trouvant dans une table appelée banque dont l'accès se fait avec des clés sous forme de chaîne de caractères indiquant le nom d'une personne ayant un compte dans la table banque. Nous savons que, lorsque l’on essaye d'accéder à une table avec une clé qui n'existe pas, on obtient nil. Dans cet exercice, on modifiera ce comportement en faisant en sorte que, lorsque l’on essaye d'accéder à un compte dans la banque avec une clé indiquant un nom inexistant dans la banque, alors le compte doit être automatiquement créé avec une valeur égale au nombre 0 et on doit avoir comme retour une chaîne de caractères indiquant "compte créé". En utilisant ce comportement particulier, écrire une fonction p.place dans un module qui nous permettra de placer une certaine somme en banque sur le compte d'une personne dont on indiquera le nom. Si, par exemple, on souhaite placer 20 euros sur le compte d'Annabelle, on écrira {{#invoque:"nom du module"|place|Annabelle|20}}. En retour, on devra avoir un message indiquant si un nouveau compte a été créé et si l'opération s'est bien déroulée (on gérera les erreurs possibles).
Pour fixer les idées nous poserons que la table banque sera initialisée ainsi :
Contrainte : Le programme ne devra utiliser qu'une seule table.
Le programme se trouve dans le module:Gestion.
Comme l'énoncé nous imposait d’utiliser une seule table, nous avons déclaré la table banque comme étant sa propre méta-table.
{{#invoke:Gestion|place|Pénéloppe|30}}, nous donne : Pénéloppe a maintenant 140 euros.
{{#invoke:Gestion|place|Louise|70}}, nous donne : Le compte a été créé.Louise a maintenant 70 euros.
{{#invoke:Gestion|place|Jean|vingt euros}}, nous donne : La somme que vous avez rentrée n'a pas pu être décriptée.

## Exercice 10-2

Soit un espace vectoriel de dimension 3. Soit deux vecteurs A et B de coordonnées respectives (2,7,4) et (3,2,9). Écrire un programme permettant de faire le produit vectoriel de A et B en utilisant une instruction sous la forme P = A*B.
Le produit vectoriel se définit ainsi :
${\begin{pmatrix}a\\b\\c\end{pmatrix}}\star {\begin{pmatrix}d\\e\\f\end{pmatrix}}={\begin{pmatrix}bf-ce\\cd-af\\ae-bd\end{pmatrix}}$
Le programme se trouve dans le module:Produit
{{#invoke:Produit|vectoriel}}, nous donne : Le produit vectoriel de A et B a pour coordonnées (55,-6,-17).

## Exercice 10-3

Soient deux matrices carrées A et B d'ordre 2 ainsi définies :
$C={\begin{pmatrix}2&5\\-3&1\end{pmatrix}}$
$D={\begin{pmatrix}4&-2\\1&6\end{pmatrix}}$
Écrire un programme permettant de faire le produit matriciel de A et B en utilisant une instruction sous la forme P = C*D.
Le produit matriciel se définit ainsi :
${\begin{pmatrix}a&b\\c&d\end{pmatrix}}\star {\begin{pmatrix}e&f\\g&h\end{pmatrix}}={\begin{pmatrix}ae+bg&af+bh\\ce+dg&cf+dh\end{pmatrix}}$
Le programme se trouve dans le module:Produit
{{#invoke:Produit|matriciel}}, nous donne : Le produit matriciel de C et D est donné par la matrice : 13 , 26 -11 , 12

## Exercice 10-4

Écrire un programme permettant de concaténer les matrices colonnes : B = ${\begin{pmatrix}3\\7\end{pmatrix}}$ et C = ${\begin{pmatrix}1\\9\end{pmatrix}}$ sous la forme de la matrice carrée P = ${\begin{pmatrix}3&1\\7&9\end{pmatrix}}$ en utilisant une instruction sous la forme P = B..C.
Le programme se trouve dans le module:Concaténation
{{#invoke:Concaténation|colle}}, nous donne : La concaténation de B et C est donnée par la matrice : 3 , 1 7 , 9
| Sur la gestion de l'environnement | Sur les librairies Scribunto |