Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   erweiterte IF - Bedingung (https://www.delphipraxis.net/184659-erweiterte-if-bedingung.html)

MasterDoge 12. Apr 2015 20:52

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:
if (edit1.text='Sekretäriat') or (edit1.text='sekretäriat') and (edit2.text='Faldera123')
then begin
form2.show;
form1.hide;
end;
then begin
form3.show;
form1.hide;
end;
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.');
So weit habe ich das bis jetzt, aber es kommt jetzt jedes Mal die Nachrricht "Falsch".
Könnt ihr mir velleicht weiterhelfen?
Lg Tilman

Helmi 12. Apr 2015 21:02

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:
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;
Ich schreibe einfach erstmal alles klein (
Delphi-Quellcode:
AnsiLowerCase
) - so brauch ich nicht auf die Groß-/Kleinschreibung im Vergleich achten!
(case sensitive)

mkinzler 12. Apr 2015 21:05

AW: erweiterte IF - Bedingung
 
Den OR hat eine höhere Priorität wie AND

himitsu 12. Apr 2015 21:06

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:
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.');
Lösungen:

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:
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.');
Diese drei Lösungen machen alle das Gleiche, wenn man die boolsche Algebra gelernt hat.

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: Delphi-Referenz durchsuchenAnsiSameText


[edit]
ähhh, verwende doch bitte [delphi]...[delphi]

@Helmi: Nach den NOT und um beide AND-Operatoren :zwinker:

Helmi 12. Apr 2015 21:10

AW: erweiterte IF - Bedingung
 
Zitat:

Zitat von himitsu (Beitrag 1297365)
@Helmi: Nach den NOT und um beide AND-Operatoren :zwinker:

stimmt - sorry!

Hab meinen Post noch erweitert

himitsu 12. Apr 2015 21:18

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.

MasterDoge 12. Apr 2015 21:38

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

himitsu 12. Apr 2015 22:37

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.

Helmi 13. Apr 2015 05:17

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) :-)

DeddyH 13. Apr 2015 08:42

AW: erweiterte IF - Bedingung
 
Zitat:

Zitat von mkinzler (Beitrag 1297364)
Den OR hat eine höhere Priorität wie AND

Ist das nicht genau andersherum? IIRC gilt: NOT > AND > OR


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz