Logique combinatoire

4/5 (4 avis)

Vue 5 189 fois - Téléchargée 725 fois

Description

Cette pour Delphi 5 source sert à simuler les tables de logique combinatoire. Elle calcule automatiquement la table de vérité.

Conclusion :


Actuellement, les câblages que vous mettrez en place en cliquant sur les différents boutons ne seront pas visibles. Dans une version ultérieure, nous essayerons de faire un routage pour matérialiser les liaisons entre les entrées et les sorties

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
24
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
20 avril 2005

Pour ton code je ne l'ai aps encore vu mais pour ta boucle je crois que ton erreur se trouve ici, personne n'ayant répondu je te laisse le message :

bcl := 1;
while (bcl >= 1) and (bcl <= 5) do
if form2.ListBox1.Items[e]= 'Xor ' + char(bcl) + ' out' then intermed:=xor_out[bcl];
bcl := bcl+1;
end;

dans un tel cas Delphi ne prend en compte que la premiere ligne, il te faut faire ainsi :

bcl := 1;
while (bcl >= 1) and (bcl <= 5) do
begin
if form2.ListBox1.Items[e]= 'Xor ' + char(bcl) + ' out' then intermed:=xor_out[bcl];
bcl := bcl+1;
end;
end;

ainsi delphi agira sur les deux lignes avant de revérifier les conditions ;)
Messages postés
1
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
13 juin 2002

Salut Delphiprog.
J'ai mis du temps répondre pour une raison toute simple : les cours prennent pas mal de temps. En effet, ce code source était quasiment fini l'été dernier, on ne l'a publié qu'en avril.
Pour ce qui est des redondances, on le savait déjà, mais on a préféré le publier même si on avait pas encore corrigé. D'ailleurs, je n'ai rien trouvé de mieux que les boucles while. Seulement j'ai un problème :
voici ma boucle (qui est donc censée remplacer une suite de 5 ligne commençant par "if")

bcl := 1;
while (bcl >= 1) and (bcl <= 5) do
if form2.ListBox1.Items[e]= 'Xor ' + char(bcl) + ' out' then intermed:=xor_out[bcl];
bcl := bcl+1;
end;

Au début, j'avais des problèmes pour concaténer la chaîne. Une fois ce problème résolu, dès que cette boucle est utilisée par l'application, cela bloque, obligé de faire ctrl+alt+suppr. On dirait qu'il ne veut pas sortir de la boucle.

Pour ce qui est des opérateurs logiques, on a jamais garanti qu'il n'y aurait pas d'erreur de maniement. On va faire notre possible pour les corriger.
Pour les gros mots, on s'excuse, c'est la 1re chose qu'on a corrigé.
Enfin, pour ce qui est du fait qu'on ne connaît "même pas" les gestionnaires de code partagé, quand on débute, nous nous sommes aidé du bouquin qui m'a été offert à noël en même temps que le logiciel et pour le reste, on tatonne, système D, alors faut pas nous en vouloir de pas connaître des fonctions, même si elles sont évidentes pour vous (toi ?). Mais merci de nous en parler, c'est l'occasion de les découvrir ;-)
Salut, Patrick.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Ah oui, j'allais oublier deux choses puisque l'on parle de logique combinatoire :

1/- Revoyez surtout le chapitre sur les opérateurs logiques et leur maniement,

2/- Il n'est nul besoin d'employer des mots vulgaires comme noms de variables (put____ con___, etc)
Ce genre d'expressions n'a pas sa place ici, on est pas dans un loft mais entre gens de bonne éducation qui mettent leur (modeste) savoir au service de la communauté des amoureux de Delphi.

A bon entendeur...
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Beaucoup de redondance dans le code et un style très "basic". L'utilisation de tableaux aurait rendu le code plus lisible et un meniement plus aisé.
Rappel :
1/- "if CheckBox1.Checked = true" s'écrit aussi "if CheckBox1.Checked", c'est aussi de la logique.

2/- Redondance de code X fois :
input_output := input_output + 1;
if (input_output 2) or (input_output -2) then
form3.show;
Dans ce cas, mieux vaut écrire une simple procédure, c'est plus facile à maintenir.

3/- De quoi attraper des ampoules à taper du code comme celui là :
procedure TForm1.Button119Click(Sender: TObject);
begin
Form2.listbox1.Clear;
Form2.listbox2.Clear;
inte1 := 0;
inte2 := 0;
inte3 := 0;
inte4 := 0;
inte5 := 0;
inte6 := 0;
inte7 := 0;
inte8 := 0;
et je m'arrête là...

4/- procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Button2.Click;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
Button2.Click;
end;
Alors là, je me dis que ces petits gars ne connaissent même pas les gestionnaires de code partagés !

Et ainsi de suite sur 2394 lignes que comporte l'unité Unit1. Honnêtement, bien écrit, votre unité ne devrait pas dépasser les 200 lignes, être plus facile à lire et à maintenir.
Bon, ne vous découragez pas, laissez refroidir le bout de vos doigts en lisant le Guide du Pascal Objet...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.