LOGIQUE COMBINATOIRE

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 27 avril 2002 à 15:30
CyberPunk2020 Messages postés 24 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 20 avril 2005 - 4 déc. 2002 à 17:01
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11877-logique-combinatoire

CyberPunk2020 Messages postés 24 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 20 avril 2005
4 déc. 2002 à 17:01
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 ;)
cs_wolf33 Messages postés 1 Date d'inscription vendredi 15 février 2002 Statut Membre Dernière intervention 13 juin 2002
13 juin 2002 à 10:28
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.
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
27 avril 2002 à 15:36
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...
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
27 avril 2002 à 15:30
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...
Rejoignez-nous