table de vérité - Ada - Programmation
Marsh Posté le 30-10-2005 à 18:25:44
En ADA, il y a quelque chose de bien utile : use.
Tu peux remplacer
with ada.text_io; |
par
with ada.text_io; |
Dans A = True, true est redondant : A tout seul est évalué correctement (mais explicter le test peut être un choix stylistique).
En ADA, tu disposes de and et de or. Toute la logique de ton bout de code peut être écrit ainsi :
if A and (B or C) |
Ce qui est légerement plus simple
Est ce que tu sais ce qu'est une table de vérité ? Cela ressemble à ça
A B C A and (B or C) |
Pour ton exercice, il te faut calculer la valeur de A and (B or C) pour toute les combinaisons binaires de A, B et C possibles et afficher la ligne correspondante. Tu veux évaluer l'expression pour chacune de ces lignes :
ABC
000
001
010
011
100
101
110
111
Regarde attentivement les valeurs de chacune des colonnes. Le troisième bit est alternativement à 0 et à 1; le deuxième bit est alternativement deux fois à 0 puis deux fois à 1; le premier bit est quant à lui quatre fois à 0 puis quatre fois à 1. Qu'est ce que cela t'inspire ?
Marsh Posté le 30-10-2005 à 18:40:17
Merci beaucoup pour ta réponse.
Je comprends ce qu'il faut faire cad afficher la table de vérité comme tu l'as écrite. Par contre je ne vois pas comment le faire en ADA.
J'ai pensé à un tableau mais ça ne m'aide pas...
Marsh Posté le 30-10-2005 à 20:15:25
Exemple:
for A in boolean loop |
Affichera :
0 0
0 1
1 0
1 1
Marsh Posté le 31-10-2005 à 11:52:18
J'ai modifier mon programme. Celui ci m'affichera, je pense, ma table de vérité comme ceci :
A B C A and (B or C)
1 1 1 1
1 1 0 1
1 0 1 1
1 0 0 0
0 1 1 0
0 1 0 0
0 0 1 0
0 0 0 0
with ada.text_io, ada.integer_text_io; |
qu'en pensez vous?
Marsh Posté le 31-10-2005 à 12:26:44
Ce sera probablement le contraire (0 0 0 0 en premier).
Citation :
|
Deux choses "graves" :
- une boucle for se termine par end loop et non pas par end.
- Il faut une unité de compilation. Par exemple :
with ada.text_io, ada.integer_text_io; |
Les choses moins importantes :
- Put ("A" ) ne rajoute pas d'espaces. il faut que tu en ajoutes toi même.
- A, B et C étant des variables de boucles, il n'y a pas besoin de les déclarer : ADA le fait implicitement.
Marsh Posté le 31-10-2005 à 12:53:20
Je n'ai pas très bien compris l'unité de compilation.
Mais maintenant est ce correct ?
with ada.text_io, ada.integer_text_io; |
Marsh Posté le 31-10-2005 à 13:28:01
Ada ne compile que des unités de compilation. Une unité de compilation peut être un package (qui contient des fonctions qui peuvent être réutilisée plus tard dans un autre programme) ou un sous-programme.
Le programme minimal pour afficher un message en Ada :
with Ada.Text_IO; |
Ça, c'est une unité de compilation correcte. Tu ne peux pas mettre un Put_Line en dehors du corps de la procédure Hello.
Marsh Posté le 31-10-2005 à 13:31:11
Dans cet exercice je ne dois utiliser ni procédures, ni use.
Marsh Posté le 31-10-2005 à 13:44:08
L'ADA ne permet pas d'afficher directement les booléens?
Marsh Posté le 31-10-2005 à 14:56:47
masklinn a écrit : L'ADA ne permet pas d'afficher directement les booléens? |
A ma connaissance, il n'y a pas de Put qui marche directement avec des booléens, si c'était la question.
Par contre on peut bien sûr faire ça :
Ada.Integer_Text_IO.Put (Boolean'Pos(un_booleen)); |
Et bien sûr, écrire une procédure d'output pour les booléens est trivial.
Marsh Posté le 30-10-2005 à 17:42:42
Comment faire pour afficher la table de vérité de l'expression booléenne suivante :
A and (B or C)
J'ai commencé qqch. Pouvez vous me dire ce que vous en pensez?
with ada.text_io, ada.integer_text_io;
A,B,C : boolean;
if A = true then
if B = true then
ada.text_io.put("A and(B or C)=" );ada.text_io.put("vrai" );
else
if C = true then
ada.text_io.put("A and(B or C)=" );ada.text_io.put("vrai" );
else
ada.text_io.put("A and(B or C)=" );ada.text_io.put("faux" );
end if;
end if;
else
ada.text_io.put("A and(B or C)=" );ada.text_io.put("faux" );
end if;
Merci