![]() |
erweiterte IF - Bedingung
Guten Abend ihr,
ich habe mit Lazarus angefangen, für die Schule einen Vertretungsplan zu erstellen. Ich versuche seit einer Stunde, bei bestimmten Fällen keine Nachricht zu schicken:
Könnt ihr mir velleicht weiterhelfen? Lg Tilman |
AW: erweiterte IF - Bedingung
setz mal vor dem not jeweils noch eine offene Klammer und vor dem nächsten or eine geschlossene Klammer
oder
Delphi-Quellcode:
Ich schreibe einfach erstmal alles klein (
var
S1: String; S2: String; begin S1 := AnsiLowerCase(Edit1.Text); //klein schreiben S2 := Edit2.Text; // S2 := AnsiLowerCase(Edit2.Text); If ((S1 <> 'sekretäriat') and (S2 = 'Faldera123')) or ((S1 <> 'schüler') and (S2 = 'Klasse123')) then ShowMessage('falsch'); end;
Delphi-Quellcode:
) - so brauch ich nicht auf die Groß-/Kleinschreibung im Vergleich achten!
AnsiLowerCase
(case sensitive) |
AW: erweiterte IF - Bedingung
Den OR hat eine höhere Priorität wie AND
|
AW: erweiterte IF - Bedingung
Wann kommt falsch und bei welchen Eingabewerten?
Ich würde aber fast wetten du hat ein paar Klammern vergessen. Denn dein Code macht es aktuell so
Delphi-Quellcode:
if (not (edit1.Text = 'Sekretäriat')) and (edit2.Text = 'Faldera123')
or (not (edit1.Text = 'sekretäriat')) and (edit2.Text = 'Faldera123') or (not (edit1.Text = 'Schüler')) and (edit2.Text = 'Klasse123') or (not (edit1.Text = 'schüler')) and (edit2.Text = 'Klasse123') then showmessage('Falsch.');
Delphi-Quellcode:
Lösungen:
if ((edit1.Text <> 'Sekretäriat') and (edit2.Text = 'Faldera123'))
or ((edit1.Text <> 'sekretäriat') and (edit2.Text = 'Faldera123')) or ((edit1.Text <> 'Schüler') and (edit2.Text = 'Klasse123')) or ((edit1.Text <> 'schüler') and (edit2.Text = 'Klasse123')) then showmessage('Falsch.');
Delphi-Quellcode:
if not ((edit1.Text = 'Sekretäriat') and (edit2.Text = 'Faldera123'))
or not ((edit1.Text = 'sekretäriat') and (edit2.Text = 'Faldera123')) or not ((edit1.Text = 'Schüler') and (edit2.Text = 'Klasse123')) or not ((edit1.Text = 'schüler') and (edit2.Text = 'Klasse123')) then showmessage('Falsch.');
Delphi-Quellcode:
if not (edit1.Text = 'Sekretäriat') and not (edit2.Text = 'Faldera123')
or not (edit1.Text = 'sekretäriat') and not (edit2.Text = 'Faldera123') or not (edit1.Text = 'Schüler') and not (edit2.Text = 'Klasse123') or not (edit1.Text = 'schüler') and not (edit2.Text = 'Klasse123') then showmessage('Falsch.');
Delphi-Quellcode:
Diese drei Lösungen machen alle das Gleiche, wenn man die boolsche Algebra gelernt hat.
if (edit1.Text <> 'Sekretäriat') and (edit2.Text <> 'Faldera123')
or (edit1.Text <> 'sekretäriat') and (edit2.Text <> 'Faldera123') or (edit1.Text <> 'Schüler') and (edit2.Text <> 'Klasse123') or (edit1.Text <> 'schüler') and (edit2.Text <> 'Klasse123') then showmessage('Falsch.'); Siehe auch
Delphi-Quellcode:
if ((edit1.text='Sekretäriat') or (edit1.text='sekretäriat')) and (edit2.text='Faldera123') then
Wie im Mathe: Punktrechnung vor Strichrechnung ... AND vor OR und NOT so, wie das Minus von negativen Zahlen. Also solltest du dieses vielleicht besser lernen, z.B. über eines der unzähligen Tutorials. :wink: PS: ![]() [edit] ähhh, verwende doch bitte [delphi]...[delphi] @Helmi: Nach den NOT und um beide AND-Operatoren :zwinker: |
AW: erweiterte IF - Bedingung
Zitat:
Hab meinen Post noch erweitert |
AW: erweiterte IF - Bedingung
Ich mache die vergleiche meistens gern direkt case-insensitiv, da wo sie es sein sollen. (außer vielleicht wenn es sein muß, bezüglich der Performance auch vorher)
So, und nun sage mal jemand, warum man Mathe lernen soll ... braucht man ja eh nie wieder im Leben. :stupid: ------------ Es gibt 10 Arten von Menschen. Die, welche binär können, und jene, welche das nicht können. |
AW: erweiterte IF - Bedingung
Also:
Der Pc sagt mir jetzt verschiedene Sachen, unter anderem, bei dem Fall, wo er mich eigentlich einloggen sollte, dass die Eingabe falsch ist, und dann meldet er mich an. Wenn ich im oberen Fenster falsch bin, zeigt er mir gar keine Nachricht an. Und wenn ich im unteren Fenster falsch bin, sagt er mir, dass ich Falsch bin, öffnet mir auch gleichzeitig den Vertretungsplan. ICh habe das mit allen drei der Lösungen ausprobiert, keine funktioniert. :( Lg Tilman |
AW: erweiterte IF - Bedingung
Naja, etwas Wichtiges hast du immernoch vergessen zu erklären, was genau du wie prüfen willst.
Versuch es doch mal als deutschen Satz zu beschreiben. |
AW: erweiterte IF - Bedingung
wir wissen ja nicht, was dein Programm tut, bzw. tun soll
wir kennen bislang nur die paar Zeilen Code, die du uns in deinen ersten Post geschrieben hast und all unsere Glaskugeln sind zur Reparatur (sehr anfälliges Produkt) :-) |
AW: erweiterte IF - Bedingung
Zitat:
|
AW: erweiterte IF - Bedingung
|
AW: erweiterte IF - Bedingung
Sag ich ja.
|
AW: erweiterte IF - Bedingung
Ich auch ... nur nochmal zur Sicherheit, falls es keiner glauben will.
#4 :angle2: |
AW: erweiterte IF - Bedingung
Das geht in dem Monster-Post allerdings unter, Du solltest vielleicht Psalm und Vers angeben :mrgreen:
|
AW: erweiterte IF - Bedingung
Unter Berücksichtigung des Programmierstils des TE müsste das so aussehen:
Delphi-Quellcode:
Aber es sollte doch wohl 'Sekretariat' heissen und nicht 'Sekretäriat'.
procedure TForm1.Button1Click(Sender: TObject);
begin if ( ((Edit1.Text = 'Sekretäriat') or (Edit1.Text = 'sekretäriat')) and (Edit2.Text = 'Faldera123') ) then begin Form2.Show; Form1.Hide end; if ( ((Edit1.Text = 'Schüler') or (Edit1.Text = 'schüler')) and (Edit2.Text = 'Klasse123') ) then begin Form3.Show; Form1.Hide end; if ( ( not ((Edit1.Text = 'Sekretäriat') and (Edit2.Text = 'Faldera123')) ) and ( not ((Edit1.Text = 'sekretäriat') and (Edit2.Text = 'Faldera123')) ) and ( not ((Edit1.Text = 'Schüler') and (Edit2.Text = 'Klasse123')) ) and ( not ((Edit1.Text = 'schüler') and (Edit2.Text = 'Klasse123')) ) ) then begin ShowMessage('falsch'); end; end; |
AW: erweiterte IF - Bedingung
Das müsste dann logisch diesem hier entsprechen:
Delphi-Quellcode:
[edit] Zu dem Zugriff auf die globale Form1-Variable sag ich mal nichts. [/edit]
procedure TForm1.Button1Click(Sender: TObject);
begin if ( ((Edit1.Text = 'Sekretäriat') or (Edit1.Text = 'sekretäriat')) and (Edit2.Text = 'Faldera123') ) then begin Form2.Show; Form1.Hide end else if ( ((Edit1.Text = 'Schüler') or (Edit1.Text = 'schüler')) and (Edit2.Text = 'Klasse123') ) then begin Form3.Show; Form1.Hide end else begin ShowMessage('falsch'); end; end; |
AW: erweiterte IF - Bedingung
Zitat:
|
AW: erweiterte IF - Bedingung
Ich ja auch nicht ;)
|
AW: erweiterte IF - Bedingung
Wenn der TE das dann mal anpasst, dann könnte er seinen Units, Forms und Komponenten auch gleich ein paar sprechende Bezeichner verpassen. :stupid:
|
AW: erweiterte IF - Bedingung
[OT]
Sollte es nicht lieber ![]() Hoffentlich hab ich jetzt keinen Rechtschreibfehler in meinem besserwisserischen Beitrag hier. :-D [/OT] |
AW: erweiterte IF - Bedingung
Also: Ich habe in der Schule das Fach Informatik seit einem drei viertel Jahr.
Wir haben über die Osterferien die Aufgabenstellung erhalten, irgendetwas zu programmieren. Ich bin auf die Idee gekommen, einen Vertretungsplan zu erstellen, welcher nicht für die Schule an sich geeignet ist, sondern einfach eine gute Note gibt, da dieses Projekt ein bisschen umfangreicher ist. Ich habe mit einer Anmeldeform angefangen, welche sich nach richtiger Benutzer - und Passworteingabe entweder in die (neue) Form 2 des Schülers oder in die Form 3 des Sekretariats übergeht:
Code:
Das eigentliche Problem, dass sich mir dann gestellt hast, ist dass ich versucht hatte, eine Nachicht anzeigen zu lassen, wenn der Nutzername, oder das Passwort falsch ist.
procedure TForm1.Button1Click(Sender: TObject);
begin if (edit1.text='Sekretariat') or (edit1.text='sekretariat') and (edit2.text='123') then begin form2.show; form1.hide; end; if (edit1.text='Schüler') or (edit1.text='schüler') and (edit2.text='456') then begin form3.show; form1.hide; end; |
AW: erweiterte IF - Bedingung
Hi zusammen
Zitat:
In einem Record könnten die Inhalte der Edits abgelegt werden. Da unbekannt ist, was der TE damit genau festhält/vergleichen will, verzichte ich hier allerdings - auch zur Verdeutlichung - auf sprechende Namen.
Delphi-Quellcode:
Nun kann geprüft werden, ob die Felder den richtigen Inhalt haben.
MemberRecord = record
Edit1Text: String; Edit2Text :String;
Delphi-Quellcode:
Es scheint mir hier allerdings um 'Benutzer' einer Schule zu gehen - und die sind entweder Schüler oder Angestellte. Von daher müsste das wohl nochmal anders gelöst werden, zB. mit einer Klasse TSchulhausMembers...
begin
if MemberRecord.Edit1Text = AnsiLowerCase('Sekretariat') then begin if MemberRecord.Edit2Text <> 'Faldera123' then ShowMessage('Falsch'); end; if MemberRecord.Edit1Text = AnsiLowerCase('Schüler') then begin if MemberRecord.Edit2Text <> 'Klasse123' then ShowMessage('Falsch'); end end; Gruss Delbor |
AW: erweiterte IF - Bedingung
Zitat:
Aber das von Dir Bemängelte steht schon in #15. |
AW: erweiterte IF - Bedingung
Zitat:
|
AW: erweiterte IF - Bedingung
Jap, du hattest Recht, es funktioniert. Danke :D :thumb:
Liebe Grüße, Tilman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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