![]() |
if ... or ... else - Anwendungen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ich bescheftige mich mit Delphi noch nicht so lang und so weiter und hab folgendes Problem: Ich mach gerade ein Prog, das den Schulabschluss überprüft und bei der Überprüfung, überprüft er erst übergang 11, RSA und HAS. Nur ist das Prob, wenn ich bei der Ü11 überprüfung alle anwendungen beende und beim testen alle fächer wo es kurse gibt die höchste kurse anklicke springt er bei der überprüfung zum ende hin und zeigt nichts an und wenn ich drei end's zum ende der procedur verschiebe geht das, aber dann wenn die ganzen fächer die note 6 haben und über all die schlechteren kurse angeklickt sind springt er da zum end. hin und zeigt nichts an... wo liegt der fehler weis echt nicht mehr weiter
Delphi-Quellcode:
procedure TForm1.abClick(Sender: TObject);
begin hsa.visible:=false; hsa2.visible:=false; rsa.visible:=false; ue11.visible:=false; ka.visible:=false; gesamt:=((deutsch_n) + (englisch_n) + (mathematik_n) + (franz_n) + (physik_n) + (chemie_n) + (biologie_n) + (relligion_n) + (gl_n) + (bwu_n) + (sport_n) + (kunst_n) + (musik_n) + (latein_n) + (wpu4_n) + (wpu2_n)); if (((deutsch_k='e') and (englisch_k='a') and (mathematik_k='a')) or ((deutsch_k='g') and (englisch_k='a') and (mathematik_k='a')) or ((deutsch_k='e') and (englisch_k='b') and (mathematik_k='a')) or ((deutsch_k='e') and (englisch_k='a') and (mathematik_k='b'))) then begin if (((deutsch_k='e') and (physik_k='e') and (chemie_k='e') and (biologie_k='e')) or ((deutsch_k='g') and (physik_k='e') and (chemie_k='e') and (biologie_k='e')) or ((deutsch_k='e') and (physik_k='g') and (chemie_k='e') and (biologie_k='e')) or ((deutsch_k='e') and (physik_k='e') and (chemie_k='g') and (biologie_k='e')) or ((deutsch_k='e') and (physik_k='e') and (chemie_k='e') and (biologie_k='g'))) then begin if (((deutsch_n<=6) and (physik_n<=2) and (chemie_n<=3) and (biologie_n<=3)) or ((deutsch_n<=3) and (physik_n<=6) and (chemie_n<=2) and (biologie_n<=3)) or ((deutsch_n<=3) and (physik_n<=3) and (chemie_n<=6) and (biologie_n<=2)) or ((deutsch_n<=2) and (physik_n<=3) and (chemie_n<=3) and (biologie_n<=6)) or ((deutsch_n<=2) and (physik_n<=6) and (chemie_n<=3) and (biologie_n<=3)) or ((deutsch_n<=3) and (physik_n<=2) and (chemie_n<=6) and (biologie_n<=3)) or ((deutsch_n<=3) and (physik_n<=3) and (chemie_n<=2) and (biologie_n<=6)) or ((deutsch_n<=2) and (physik_n<=3) and (chemie_n<=3) and (biologie_n<=3))) then begin if ((deutsch_n<6) or (mathematik_n<6) or (englisch_n<6) or (gl_n<6)) then begin if (gesamt<=52) then begin ue11.visible:=true; end; end; end; end; end else begin if (deutsch_n<=4) and (deutsch_k='e') and (englisch_n<=4) and (englisch_k='a') and (mathematik_n<=4) and (mathematik_k='a') and (physik_n<=4) and (physik_k='e') and (chemie_n<=4) and (chemie_k='e') and (biologie_n<=4) and (biologie_k='e') and (franz_n<=4) and (franz_k='a') and (relligion_n<=4) and (gl_n<=4) and (bwu_n<=4) and (sport_n<=4) and (kunst_n<=4) and (musik_n<=4) and (latein_n<=4) and (wpu4_n<=4) and (wpu2_n<=4) then begin rsa.visible:=true; end else begin if (deutsch_n<=4) and (englisch_n<=4) and (mathematik_n<=4) and (physik_n<=4) and (chemie_n<=4) and (biologie_n<=4) and (franz_n<=4) and (relligion_n<=4) and (gl_n<=4) and (bwu_n<=4) and (sport_n<=4) and (kunst_n<=4) and (musik_n<=4) and (latein_n<=4) and (wpu4_n<=4) and (wpu2_n<=4) then begin hsa.visible:=true; hsa2.visible:=true; end else begin ka.visible:=true; end; end; end; end; |
Re: if ... or ... else - Anwendungen
Ich habe mir dieses Monstrum jetzt nicht wirklich angesehen, aber Du solltest vielleicht mal ein paar Hilfsvariablen einführen, um die bool'schen Ausdrücke übersichtlicher zu machen.
Außerdem muss ich sagen, habe ich nicht ganz kapiert, was mir dieses an Satzzeichen-Entzug leidende Gebilde sagen will: Zitat:
Peter |
Re: if ... or ... else - Anwendungen
Delphi-Quellcode:
procedure TForm1.abClick(Sender: TObject);
begin hsa.visible:=false; hsa2.visible:=false; rsa.visible:=false; // Die Abschlüsse ue11.visible:=false; ka.visible:=false; gesamt:=((deutsch_n) + (englisch_n) + (mathematik_n) + (franz_n) + (physik_n) + (chemie_n) + (biologie_n) + (relligion_n) + (gl_n) + (bwu_n) + (sport_n) + (kunst_n) + (musik_n) + (latein_n) + (wpu4_n) + (wpu2_n)); // Gesamtnote if (((deutsch_k='e') and (englisch_k='a') and (mathematik_k='a')) or ((deutsch_k='g') and (englisch_k='a') and (mathematik_k='a')) or ((deutsch_k='e') and (englisch_k='b') and (mathematik_k='a')) or ((deutsch_k='e') and (englisch_k='a') and (mathematik_k='b'))) then begin if (((deutsch_k='e') and (physik_k='e') and (chemie_k='e') and (biologie_k='e')) or ((deutsch_k='g') and (physik_k='e') and (chemie_k='e') and (biologie_k='e')) or ((deutsch_k='e') and (physik_k='g') and (chemie_k='e') and (biologie_k='e')) or ((deutsch_k='e') and (physik_k='e') and (chemie_k='g') and (biologie_k='e')) or ((deutsch_k='e') and (physik_k='e') and (chemie_k='e') and (biologie_k='g'))) then begin if (((deutsch_n<=6) and (physik_n<=2) and (chemie_n<=3) and (biologie_n<=3)) or ((deutsch_n<=3) and (physik_n<=6) and (chemie_n<=2) and (biologie_n<=3)) or ((deutsch_n<=3) and (physik_n<=3) and (chemie_n<=6) and (biologie_n<=2)) or ((deutsch_n<=2) and (physik_n<=3) and (chemie_n<=3) and (biologie_n<=6)) or ((deutsch_n<=2) and (physik_n<=6) and (chemie_n<=3) and (biologie_n<=3)) or ((deutsch_n<=3) and (physik_n<=2) and (chemie_n<=6) and (biologie_n<=3)) or ((deutsch_n<=3) and (physik_n<=3) and (chemie_n<=2) and (biologie_n<=6)) or ((deutsch_n<=2) and (physik_n<=3) and (chemie_n<=3) and (biologie_n<=3))) then begin if ((deutsch_n<6) or (mathematik_n<6) or (englisch_n<6) or (gl_n<6)) then begin if (gesamt<=52) then begin ue11.visible:=true; end; end; end; end; end // ^Ü11 überprüfung^ else begin if (deutsch_n<=4) and (deutsch_k='e') and (englisch_n<=4) and (englisch_k='a') and (mathematik_n<=4) and (mathematik_k='a') and (physik_n<=4) and (physik_k='e') and (chemie_n<=4) and (chemie_k='e') and (biologie_n<=4) and (biologie_k='e') and (franz_n<=4) and (franz_k='a') and (relligion_n<=4) and (gl_n<=4) and (bwu_n<=4) and (sport_n<=4) and (kunst_n<=4) and (musik_n<=4) and (latein_n<=4) and (wpu4_n<=4) and (wpu2_n<=4) then begin rsa.visible:=true; end // ^RSA überprüfung^ else begin if (deutsch_n<=4) and (englisch_n<=4) and (mathematik_n<=4) and (physik_n<=4) and (chemie_n<=4) and (biologie_n<=4) and (franz_n<=4) and (relligion_n<=4) and (gl_n<=4) and (bwu_n<=4) and (sport_n<=4) and (kunst_n<=4) and (musik_n<=4) and (latein_n<=4) and (wpu4_n<=4) and (wpu2_n<=4) then begin hsa.visible:=true; hsa2.visible:=true; end // ^HSA überprüfung^ else begin ka.visible:=true; //Kein Abschluss end; end; end; end; OK noch mal: Wenn ich auf Abschluss berechnen klicke und die Einstellungen so lasse (siehe Bild) geht er jede Zeile durch und zeigt am ende 'Kein Abschluss' an. Aber wenn ich alle Fächer wo es Kurse gibt, den höchsten Kurs anklicke (E oder A), erfüllt diese Einstellung bei der Überprüfung eine Zeile nicht (ist klar, wegen den Noten '6'). Das Problem hab ich gelöst, indem ich 3 end's unter der Ü11 Überprüfungen raus genommen habe und am ende der Procedur platziert habe. Aber dann geht die Anfangseinstellung nicht mehr (siehe Bild), da springt das Programm wieder auf end. und zeigt nichts an. |
Re: if ... or ... else - Anwendungen
nach welchen kriterien reihst du denn ein ? O_o
|
Re: if ... or ... else - Anwendungen
Zitat:
was? |
Re: if ... or ... else - Anwendungen
er fragte, auf welche weise du die zeilen einrückst.
mfG mirage228 |
Du wirst das Problem wahrscheinlich nicht finden, wenn du nicht (wie Peter Lustig vorschlug) ein paar Hilfsvariablen benutzt und denen das Ergebnis deiner ANDs und ORs zuweist. Es gehört zwar nicht gerade zu meinen Steckenpferden, aber dieses Monster:
Delphi-Quellcode:
ließe sich bestimmt etwas kürzen. Musst du aber gar nicht mal. Es würde schon genügen, wenn du deine Bedingungen nicht direkt prüfst, sondern sie einer bspw. einer Bool-Variablen zuweist:
if(((deutsch_k='e') and (englisch_k='a') and (mathematik_k='a')) or
((deutsch_k='g') and (englisch_k='a') and (mathematik_k='a')) or ((deutsch_k='e') and (englisch_k='b') and (mathematik_k='a')) or ((deutsch_k='e') and (englisch_k='a') and (mathematik_k='b'))) then
Delphi-Quellcode:
dann könnte deine if-Bedingung danach wie folgt aussehen:
GuterJunge := (((deutsch_k='e') and (englisch_k='a') and (mathematik_k='a')) or
((deutsch_k='g') and (englisch_k='a') and (mathematik_k='a')) or ((deutsch_k='e') and (englisch_k='b') and (mathematik_k='a')) or ((deutsch_k='e') and (englisch_k='a') and (mathematik_k='b')));
Delphi-Quellcode:
Dadurch wird´s übersichtlicher, du erkennst die Verschachtelungen der begin/end-Blöcke besser, und du dürftest das eigentliche Problem damit wahrscheinlich von selbst aufspüren.
if GuterJunge then
begin // und hier geht´s dann mit anderen Bedingungen // bzw. Hilfsvariablen weiter end; |
Re: if ... or ... else - Anwendungen
Zitat:
wie 'auf welcher weise einrücken' - gibt mir ein beispiel... @ MathiasSimmack: ha jetzt hab ich es verstanden, ich probier es mal aus, aber jetzt will ich erst ein buch (der richter und sein henker) zu ende lesen. Vielen Dank erstmal |
Re: if ... or ... else - Anwendungen
Moin!
Zitat:
Nomalerweise:
Delphi-Quellcode:
Bei dir sieht's so aus:
procedure irgendwas;
begin if (a = 10) or (b = 20) or (c = 30) then // das hab ich nur wegen dem Beispiel in die nächste Zeile getan begin doAnything; doAnythingElse; end; end;
Delphi-Quellcode:
Aber nun zu deinem Problem:
procedure irgendwas;
begin if (a = 10) or (b = 20) or (c = 30) then begin .... end; end; Was ist englisch_k und mathematik_k und so? Ich seh nicht wirklich durch in deinem Quellcode. Aber ich empfehl dir auf jeden Fall erstmal das ganze so zu machen wie's MathiasSimmack geschrieben hat. Vieleicht gibt's ja ne einfachere Möglichkeit die ich zur Zeit in deinem Quellcode nicht erkenne. MfG Niels |
Re: if ... or ... else - Anwendungen
@Niels: Ich wollt´s auch gerade erklären. :) So fasse ich mich aber kurz und verweise mal auf die
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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