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 ## Chemins
Ajouter des étoiles aux constellations suivantes de sorte à obtenir `ok` après 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;` 1. `-1 ok;`
@ -16,9 +16,21 @@ exécution.
3. `-1 ok; -2 +3;` 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 ## 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 1. Comment relier les étoiles d'initialisation de sorte à initialiser le
registre `a` à `0` ? 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 ? 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` ? 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` ? 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 ## Portes logiques
On veut simuler des portes logiques par des constellations calculant des On veut simuler des formules booléennes par des constellations. Chaque question
fonctions sur `{0,1}`. utilise le résultat de la question précédente.
1. Ecrire une constellation calculant la négation de telle sorte à ce qu'elle 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` produise `1` en sortie lorsqu'ajoutée à l'étoile `@-not(0 X) X;` et `0`
lorsqu'ajoutée à `@-not(1 X) X`. 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, 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);` ? 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 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 conjonction et la disjonction et afficher leur table de vérité de la même façon
que pour la question précédente. 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é 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é 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)