Fix exercises and add solutions

This commit is contained in:
engboris 2024-06-13 01:22:09 +02:00
parent 305c35db76
commit 10b8221a6e
10 changed files with 175 additions and 8 deletions

View File

@ -8,7 +8,7 @@ weight: 5
## Chemins
Ajouter des étoiles aux constellations suivantes de sorte à obtenir `ok` après
exécution.
exécution avec l'option `-allow-unfinished-computation`.
1. `-1 ok;`
@ -16,9 +16,21 @@ exécution.
3. `-1 ok; -2 +3;`
4. `-1 ok; -2 +3 ok;`
4. `-f(+g(X)) ok;`
5. `+f(a) +f(b); +g(a); @+g(b);`
5. `+f(a) +f(b); +g(a); @+g(b) ok;`
{{< details title="Solution" open=false >}}
1. `-1 ok; +1;`
2. `-1; +2; +1 -2 ok;`
3. `-1 ok; -2 +3; +1 +2; -3;`
4. `-f(+g(X)) ok; +f(-g(a));`
5. `+f(a) +f(b); +g(a); @+g(b) ok; -f(X) -g(X);`
{{< /details >}}
## Altération de mémoire
@ -38,32 +50,126 @@ de départ ou modifier celles que vous avez ajoutées.
1. Comment relier les étoiles d'initialisation de sorte à initialiser le
registre `a` à `0` ?
{{< details title="Solution" open=false >}}
En ajoutant l'étoile `-ia(X) +ra(X);` servant de pont entre le rayon `+ia(0)`
et le rayon `-ra(X)`. On peut vérifier que l'on a bien un transfert de la
constante `0` vers `+a(X)` avec l'option `-allow-unfinished-computation` et
qu'on obtient ainsi `+a(0)` dans la sortie.
{{< /details >}}
2. Comment afficher la valeur de `a` et ainsi obtenir `a(0)` en sortie ?
{{< details title="Solution" open=false >}}
Il faut ajouter l'étoile `-a(X) a(X);` pour éviter l'effacement de l'étoile
correspondant au registre `a`.
{{< /details >}}
3. Comment mettre à jour `a` à la valeur `1` ?
{{< details title="Solution" open=false >}}
Il y a plusieurs manières de le faire en remplaçant l'étoile `-ia(X) +ra(X)`
introduite précédemment :
- court-circuiter avec `+ra(1)`;
- faire une succession de mise à jour avec l'étoile `-ia(X) +ia1(1); -ia1(X) +ra(X);`.
{{< /details >}}
4. Comment copier la valeur de `a` dans `b` et afficher `b` ?
5. Comment supprimer le registre `b` et le rendre inutilisable ?
{{< details title="Solution" open=false >}}
On utilise la constellation `-a(X) +rb(X); -b(X) b(X);` permettant de rediriger
la sortie `+a(X)` vers `b` (en plus de l'affichage de `a`). Et on ajoute une
étoile d'affichage comme pour `a`.
{{< /details >}}
5. En utilisant une seule étoile, comment afficher `mem(a(va) b(vb))` tel que
`va` est la valeur de `a` et `vb` celle de `b` ?
{{< details title="Solution" open=false >}}
On utilise l'étoile `-a(X) -b(Y) c(va(X) vb(Y));`.
{{< /details >}}
## Portes logiques
On veut simuler des portes logiques par des constellations calculant des
fonctions sur `{0,1}`.
On veut simuler des formules booléennes par des constellations. Chaque question
utilise le résultat de la question précédente.
1. Ecrire une constellation calculant la négation de telle sorte à ce qu'elle
produise `1` en sortie lorsqu'ajoutée à l'étoile `@-not(0 X) X;` et `0`
lorsqu'ajoutée à `@-not(1 X) X`.
{{< details title="Solution" open=false >}}
```
+not(0 1); +not(1 0);
```
{{< /details >}}
2. Comment afficher la table de vérité de la négation avec une seule étoile,
de sorte à ce qu'on obtienne en sortie `table_not(0 1); table_not(1 0);` ?
{{< details title="Solution" open=false >}}
```
@-not(X Y) table_not(X Y);
```
{{< /details >}}
3. Ecrire de deux manières différentes des constellations calculant la
conjonction et la disjonction et afficher leur table de vérité de la même façon
que pour la question précédente.
{{< details title="Solution" open=false >}}
```
+and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1);
+or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1);
+and2(0 X 0); +and2(1 X X);
+or2(0 X X); +or2(1 X 1);
@-and(X Y R) table_and(X Y R);
@-or(X Y R) table_or(X Y R);
@-and2(X Y R) table_and2(X Y R);
@-or2(X Y R) table_or2(X Y R);
```
{{< /details >}}
4. Utiliser la disjonction et la négation pour afficher la table de vérité
de l'implication sachant que `A => B = not(A) \/ B`.
de l'implication sachant que `X => Y = not(X) \/ Y`.
{{< details title="Solution" open=false >}}
```
+not(0 1); +not(1 0);
+and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1);
+or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1);
+and2(0 X 0); +and2(1 X X);
+or2(0 X X); +or2(1 X 1);
-not(X Y) -or(Y Z R) +impl(X Z R);
-not(X Y) -or2(Y Z R) +impl2(X Z R);
@-impl(X Y R) table_impl(X Y R);
@-impl2(X Y R) table_impl2(X Y R);
```
{{< /details >}}
5. Utiliser l'implication et la conjonction pour afficher la table de vérité
de l'équivalence logique sachant que `A <=> B = (A => B) /\ (B => A)`.
de l'équivalence logique sachant que `X <=> Y = (X => Y) /\ (X => Y)`.
{{< details title="Solution" open=false >}}
```
+not(0 1); +not(1 0);
+and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1);
+or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1);
+and2(0 X 0); +and2(1 X X);
+or2(0 X X); +or2(1 X 1);
-not(X Y) -or(Y Z R) +impl(X Z R);
-not(X Y) -or2(Y Z R) +impl2(X Z R);
-impl(X Y R1) -impl(Y X R2) -and(R1 R2 R) +eqq(X Y R);
-impl2(X Y R1) -impl2(Y X R2) -and2(R1 R2 R) +eqq2(X Y R);
@-eqq(X Y R) table_eqq(X Y R);
@-eqq2(X Y R) table_eqq2(X Y R);
```
{{< /details >}}

View File

@ -0,0 +1,5 @@
---
title: "Techniques"
bookFlatSection: true
weight: 1
---

View File

@ -0,0 +1,6 @@
---
title: "Composition"
weight: 5
---
(soon)

View File

@ -0,0 +1,6 @@
---
title: "Conditions"
weight: 2
---
(soon)

View File

@ -0,0 +1,6 @@
---
title: "Récupération de données"
weight: 1
---
(soon)

View File

@ -0,0 +1,6 @@
---
title: "Digging"
weight: 4
---
(soon)

View File

@ -0,0 +1,14 @@
---
title: "Exercices"
weight: 8
---
# Exercices
## Vérifications exactes
## Conditions imbriquées
## Boucles imbriquées
## Branchage conditionnel

View File

@ -0,0 +1,6 @@
---
title: "Boucles convergeantes"
weight: 3
---
(soon)

View File

@ -0,0 +1,6 @@
---
title: "Permissions"
weight: 6
---
(soon)

View File

@ -0,0 +1,6 @@
---
title: "Tests unitaires"
weight: 7
---
(soon)