AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

if ... or ... else - Anwendungen

Ein Thema von de_arg · begonnen am 1. Jan 2004 · letzter Beitrag vom 4. Jan 2004
Antwort Antwort
Seite 1 von 3  1 23      
de_arg

Registriert seit: 1. Jan 2004
9 Beiträge
 
#1

if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 16:18
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;
Miniaturansicht angehängter Grafiken
prob.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#2

Re: if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 16:33
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:
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...
MfG
Peter
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
de_arg

Registriert seit: 1. Jan 2004
9 Beiträge
 
#3

Re: if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 16:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#4

Re: if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 17:13
nach welchen kriterien reihst du denn ein ? O_o
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
de_arg

Registriert seit: 1. Jan 2004
9 Beiträge
 
#5

Re: if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 17:15
Zitat von Pseudemys Nelsoni:
nach welchen kriterien reihst du denn ein ? O_o

was?
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#6

Re: if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 17:23
er fragte, auf welche weise du die zeilen einrückst.

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7
  Alt 1. Jan 2004, 17:26
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:
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
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:
Delphi-Quellcode:
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')));
dann könnte deine if-Bedingung danach wie folgt aussehen:
Delphi-Quellcode:
if GuterJunge then
begin
  // und hier geht´s dann mit anderen Bedingungen
  // bzw. Hilfsvariablen weiter
end;
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.
  Mit Zitat antworten Zitat
de_arg

Registriert seit: 1. Jan 2004
9 Beiträge
 
#8

Re: if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 18:01
Zitat von mirage228:
er fragte, auf welche weise du die zeilen einrückst.

mfG
mirage228

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
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#9

Re: if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 19:06
Moin!

Zitat von de_arg:
Zitat von mirage228:
er fragte, auf welche weise du die zeilen einrückst.

mfG
mirage228

wie 'auf welcher weise einrücken' - gibt mir ein beispiel...
Er meinte damit dass man dass dein Quellcode komisch strukturiert ist

Nomalerweise:

Delphi-Quellcode:
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;
Bei dir sieht's so aus:

Delphi-Quellcode:
procedure irgendwas;
begin
  if (a = 10) or (b = 20) or
(c = 30) then
    begin
      ....
    end;
end;
Aber nun zu deinem Problem:
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
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: if ... or ... else - Anwendungen

  Alt 1. Jan 2004, 19:15
@Niels: Ich wollt´s auch gerade erklären. So fasse ich mich aber kurz und verweise mal auf die Hier im Forum suchenUngarische Notation.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 Uhr.
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