![]() |
Bedingungen mit Boolean und Listbox ausgeben
Heyho,
Hab erst seit ein paar Monaten Informatik, nun haben wir eine Aufgabe bekommen, bei der wir mithilfe von Boolean Variablen arbeiten sollen. In der Aufgabe ging es um die Einladung von 3 Personen, bei denen alle 3 Bedingungen erfüllt sein müssen. Mit einer Listbox sollen wir alle 8 Ergebnisse in 3 Spalten ( Bsp.: true false false ) etc. ausgeben. Leider habe ich keinen Plan wie man das so ausgeben kann. Für die Meisten hier sicherlich ein Kinderspiel. Hoffe ihr könnt mir schnell helfen, das Projekt wird eventuell am Donnerstag schon eingesammelt und benotet ... Hier der Quelltextausschnitt (weiß nich ob auch da schon alles korrekt ist ...) : procedure TForm1.B_StartClick(Sender: TObject); var A, B, C, BB : boolean; begin A := false; B := false; C := false; FOR A := false TO true DO FOR B := false TO true DO FOR C := false TO true DO begin BB := (A AND C) OR (NOT A AND NOT C) AND (B OR C) OR (B AND C) AND (A OR B) OR (NOT A AND NOT B); end; end; end. |
AW: Bedingungen mit Boolean und Listbox ausgeben
Habt ihr denn nicht in der Schule gelernt, was eine Boolean-Variable ist? Offenbar nicht, denn sonst würdest du nicht versuchen, damit eine Schleife zu basteln.
Was soll denn da passieren, wenn du auf den Button klickst? Von welchen drei Bedingungen schreibst du da? |
AW: Bedingungen mit Boolean und Listbox ausgeben
Die Bedingungen sind wohl einfach irgendwelche ja/nein-Kriterien die erfüllt sein müssen, damit die Person auch eingeladen wird. Also beispielsweise:
Richtig? Ich verstehe ein paar Punkte daran nicht:
PS: Gewöhn dir an, Variablen NICHT
Delphi-Quellcode:
zu nennen sondern
A,B,C
Delphi-Quellcode:
oder ähnlich. Das macht es für alle einfacher. Auch dich 8-)
istAttraktiv
Kein Mensch kann sehen, was
Delphi-Quellcode:
bedeutet. Und du auch nicht, wenn du zwei Stunden später nochmal draufschaust.
(A AND C) OR (NOT A AND NOT C)
|
AW: Bedingungen mit Boolean und Listbox ausgeben
Im Grunde haben wir nicht besonders viel erklährt bekommen, haben ur die 3 FOR Schleifen angeschrieben bekommen:
" FOR A := false TO true DO FOR B := false TO true DO FOR C := false TO true DO begin . . . Ausgabe der Kombi A,B,C END " Durch Klicken des Buttons sollen einfach alle 8 möglichen Kombinationen (wie oben im Beispiel) untereinander in der Listbox ausgegeben werden. Die Drei Bedingungen sind: 1. (A AND C) XOR (NOT A AND NOT C) 2. (B OR C) 3. (A XOR B) (Ich weiß, im Quelltext etwas komplizierter dargestellt) |
AW: Bedingungen mit Boolean und Listbox ausgeben
mit Spalten war einfach nur die Darstellung aller Ergebnisse der Bedingung nebeneinander, sodass bei mehrerern Zeilen optisch 3 Spalten entstehen.
Es soll nichts selber ausgewählt oder eingegeben werden, es sollen im Grunde nur die 2 möglichen Kombinationen ermittelt werden, was in dem fall in der listbox zu sehen sein soll. |
AW: Bedingungen mit Boolean und Listbox ausgeben
Was mir nicht klar ist: was soll denn nun in der Listbox ausgegeben werden, alle 8 möglichen Kombinationen oder nur diejenigen, bei denen die 3 Bedingungen zutreffen?
|
AW: Bedingungen mit Boolean und Listbox ausgeben
Alle acht.
|
AW: Bedingungen mit Boolean und Listbox ausgeben
Dann brauchst Du doch im Grunde nur noch eine Funktion, die Dir aus 3 Boolean-Variablen einen entsprechend aufbereiteten String bastelt. Den fügst Du dann der ListBox hinzu.
Delphi-Quellcode:
D.h., MultiBoolToStr nimmt 3 Booleans entgegen und macht daraus z.B. "True, False, False". Du musst sie nur noch schreiben ;)
procedure TForm1.Button1Click(Sender: TObject);
var a, b, c: Boolean; begin for a := false to true do for b := false to true do for c := false to true do ListBox1.Items.Add(MultiBoolToStr(a, b, c)); end; |
AW: Bedingungen mit Boolean und Listbox ausgeben
Zitat:
|
AW: Bedingungen mit Boolean und Listbox ausgeben
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, technisch geht das, aber potthässlich ist es trotzdem. Lass den armen nur einmal statt
Delphi-Quellcode:
einmal
for variable := False to True
Delphi-Quellcode:
schreiben und sich dann wundern warum nichts mehr geht.
for variable := True to False
Zitat:
Er will sowas wie im Anhang in Listboxen packen. |
AW: Bedingungen mit Boolean und Listbox ausgeben
Meine Güte, wenn die Dinger doch vorgegeben wurden...
|
AW: Bedingungen mit Boolean und Listbox ausgeben
Ich hab die Aufgabe zwar nicht richtig verstanden, aber egal. Hier zumindest die Tabausgabe. Zwar wird dir dein Lehrer das nicht abnehmen, aber wenn er die Ausgabe in ListBox haben will...
Delphi-Quellcode:
const
Tabs = 4; X: array[Boolean] of String = ('False', 'True'); var ListBox: TListBox; TabsInLB: array[0..4] of Integer; A, B, C, BB : Boolean; S: String; begin ListBox := ListBox1; TabsInLB[0] := 0; TabsInLB[1] := 50; TabsInLB[2] := 100; TabsInLB[3] := 150; Listbox.TabWidth := 1; SendMessage(ListBox.Handle, LB_SETTABSTOPS, Tabs, Longint(@TabsInLB)); A := False; B := False; C := False; FOR A := False TO True DO FOR B := False TO True DO FOR C := False TO True DO begin BB := (A AND C) OR (NOT A AND NOT C) //ob das stimmt, glaube ich nicht, aber ich hab es übernommen. Evtl. fehlen da paar Klammern. AND (B OR C) OR (B AND C) AND (A OR B) OR (NOT A AND NOT B); S := X[A] + #9 + X[B] + #9 + X[C] + #9 + X[BB]; ListBox.Items.Add(S) end; end; |
AW: Bedingungen mit Boolean und Listbox ausgeben
Wie soll die Ausgabe denn nun aussehen?
|
AW: Bedingungen mit Boolean und Listbox ausgeben
Hier, falls die Annahme vom Schönen Guntar stimmt:
Delphi-Quellcode:
EDIT:
const
Tabs = 6; X: array[Boolean] of String = ('False', 'True'); var ListBox: TListBox; TabsInLB: array[0..Tabs] of Integer; A, B, C, D, E, F : Boolean; S: String; begin ListBox := ListBox1; TabsInLB[0] := 0; TabsInLB[1] := 50; TabsInLB[2] := 100; TabsInLB[3] := 150; TabsInLB[4] := 200; TabsInLB[5] := 250; Listbox.TabWidth := 1; SendMessage(ListBox.Handle, LB_SETTABSTOPS, Tabs, Longint(@TabsInLB)); A := False; B := False; C := False; S := 'A' + #9 + 'B' + #9 + 'C' + #9 + 'D' + #9 + 'E' + #9 + 'F'; ListBox.Items.Add(S); FOR A := False TO True DO FOR B := False TO True DO FOR C := False TO True DO begin D := (A AND C) OR (NOT A AND NOT C); E := (B OR C) OR (B AND C); F := (A OR B) OR (NOT A AND NOT B); S := X[A] + #9 + X[B] + #9 + X[C] + #9 + X[D] + #9 + X[E] + #9 + X[F]; ListBox.Items.Add(S) end; end; Oder doch nicht. Ich weiß es nicht. |
AW: Bedingungen mit Boolean und Listbox ausgeben
Meine Version ist irgendwie simpler, sowohl im Code wie auch in der Darstellung:
Delphi-Quellcode:
Wobei ich auch nur raten kann, wie es denn aussehen soll.
function MultiBoolToStr(a, b, c: Boolean): string;
begin Result := BoolToStr(a, true) + ', ' + BoolToStr(b, true) + ', ' + BoolToStr(c, true); end; procedure TForm1.Button1Click(Sender: TObject); var a, b, c, a1, b1, c1: Boolean; s: string; begin for a := false to true do for b := false to true do for c := false to true do begin a1 := (A AND C) XOR (NOT A AND NOT C); b1 := B OR C; c1 := A XOR B; s := MultiBoolToStr(a, b, c); if a1 and b1 and c1 then s := s + ' -> Treffer'; ListBox1.Items.Add(s); end; end; |
AW: Bedingungen mit Boolean und Listbox ausgeben
Zitat:
Es ist da wie bei den ENUMs, wo man dann ja auch DOWNTO verwendet. Man muß nur aufpassen, wenn jemand nett war und das True umgeschrieben hat. :lol:
Delphi-Quellcode:
Aber das macht man ja nicht.
const True = Boolean(255);
PS: Ich würde nur eine Schleife verwenden und das dann mathematisch oder binär befüllen. |
AW: Bedingungen mit Boolean und Listbox ausgeben
Zitat:
|
AW: Bedingungen mit Boolean und Listbox ausgeben
OK, bei Hausaufgaben ist das ja immer etwas Anderes,
und mit einem guten Kommentar isses auch wieder verstänlich. :mrgreen: |
AW: Bedingungen mit Boolean und Listbox ausgeben
Also wie man eine aussagekräftige Anzeige von 3 Eingangswerten und einem Ausgangswert mit 3 "Spalten" realisieren soll ist mir schleierhaft.
Entweder hat hier der Lehrkörper geschlampt, oder es handelt sich um das Stille-Post-Syndrom (wieder mal nur die Hälfte gehört und die noch falsch wiedergegeben). Der direkteste Lösungsweg wäre (wenn ich die Vorgabe mal frei erweitere um der Ausgabe eine Aussagekraft zu verleihen):
Delphi-Quellcode:
procedure TForm1.B_StartClick(Sender: TObject);
var A, B, C, BB : boolean; begin // Listbox für die Ausgabe leeren (steht nicht in der Aufgabe, habe ich mal frei dazugesetzt) Ausgabe_Listbox.Clear; FOR A := false TO true DO FOR B := false TO true DO FOR C := false TO true DO begin BB := {Bedingung 1} ( (A AND C) OR (NOT A AND NOT C) ) AND {Bedingung 2} ( (B OR C) OR (B AND C) ) AND {Bedingung 3} ( (A OR B) OR (NOT A AND NOT B) ); // Ausgabe der Werte in der Listbox Ausgabe_Listbox.Items.Add( {Eingangswert A} BoolToStr( A, true ) + ' ' + {Eingangswert B} BoolToStr( B, true ) + ' ' + {Eingangswert C} BoolToStr( C, true ) + ' ' + {Ausgangswert BB} BoolToStr( BB, true ) ); end; end; |
AW: Bedingungen mit Boolean und Listbox ausgeben
*Öhm*...
Zitat:
Zitat:
Delphi-Quellcode:
es müsste aber wahrscheinlich heißen
BB :=
{Bedingung 1} (A AND C) OR ((NOT A AND NOT C) AND {Bedingung 2} (B OR C)) OR ((B AND C) AND {Bedingung 3} (A OR B)) OR (NOT A AND NOT B);
Delphi-Quellcode:
Da deklariere ich mir lieber 3 Variablen, das ist übersichtlicher ;)
BB :=
{Bedingung 1} ((A AND C) OR (NOT A AND NOT C)) AND {Bedingung 2} ((B OR C) OR (B AND C)) AND {Bedingung 3} ((A OR B) OR (NOT A AND NOT B)); |
AW: Bedingungen mit Boolean und Listbox ausgeben
Zitat:
Insgesamt würde ich das schon vom Ansatz her anders umsetzen
|
AW: Bedingungen mit Boolean und Listbox ausgeben
Ich würde das normalerweise ja auch "schöner" machen, aber da es sich um eine Schulaufgabe handelt, wollte ich keine didaktische Katastrophe abliefern :mrgreen:
|
AW: Bedingungen mit Boolean und Listbox ausgeben
Zitat:
Der Kern der Aufgabe ist wohl auch nicht wartungsfreundlichen Code zu produzieren |
AW: Bedingungen mit Boolean und Listbox ausgeben
Genau, den Code guckt sich ja später eh nie wieder jemand an. :roll:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz