Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehlfunktion in if-Abfrage (https://www.delphipraxis.net/79046-fehlfunktion-if-abfrage.html)

TurboMartin 15. Okt 2006 13:41


Fehlfunktion in if-Abfrage
 
Hi DP :hi: !
Ich hbe folgenden Code:
Delphi-Quellcode:
  if zahlenarray1[1] = 1 then
    zahlenaray3moeglichezahlen[1] := zahlenaray3moeglichezahlen[1]+1               //
  else if zahlenarray1[1] = 2 then
         zahlenaray3moeglichezahlen[2] := zahlenaray3moeglichezahlen[2]+1          //
       else if zahlenarray1[1] = 3 then
              zahlenaray3moeglichezahlen[3] := zahlenaray3moeglichezahlen[3]+1;   // Zugewiesene Zahlen aus den Arrays z1 und z2
if zahlenarray1[2] = 1 then
  zahlenaray3moeglichezahlen[1] := zahlenaray3moeglichezahlen[1]+1               // lesen und z3z hinufügen
  else if zahlenarray1[2] = 2 then
         zahlenaray3moeglichezahlen[2] := zahlenaray3moeglichezahlen[2]+1          //
       else if zahlenarray1[2] = 3 then
              zahlenaray3moeglichezahlen[3] := zahlenaray3moeglichezahlen[3]+1;   //

  if zahlenarray2[1] = 1 then
    zahlenaray3moeglichezahlen[1] := zahlenaray3moeglichezahlen[1]+1
  else if zahlenarray2[1] = 2 then
         zahlenaray3moeglichezahlen[2] := zahlenaray3moeglichezahlen[2]+1
       else if zahlenarray2[1] = 3 then
              zahlenaray3moeglichezahlen[3] := zahlenaray3moeglichezahlen[3]+1;
  if zahlenarray2[2] = 1 then
    zahlenaray3moeglichezahlen[1] := zahlenaray3moeglichezahlen[1]+1
  else if zahlenarray2[2] = 2 then
         zahlenaray3moeglichezahlen[2] := zahlenaray3moeglichezahlen[2]+1
       else if zahlenarray2[2] = 3 then
              zahlenaray3moeglichezahlen[3] := zahlenaray3moeglichezahlen[3]+1;   // wie oben

  if z3z[1] = 1 then                      //
  begin                                   //
    if z3[2] <> 0 then                    //
    z3[1] := 1                             //
    else z3[2] := 1;                      //
  end                                     //
  else if z3z[2] = 1 then                 //
       begin                              // wo in z3z eine 1 steht, diese Zahl zu z3 hinzufügen.
         if z3[2] <> 0 then               //
         z3[1] := 2                        //
         else z3[2] := 2;                 //
       end                                //
       else if z3z[3] = 1 then            //
            begin                         //
              if z3[2] <> 0 then          //
              z3[1] := 3                   //
              else z3[2] := 3;            //
            end;                          //
  ShowMessage(IntToStr(z3z[1])+'+'+IntToStr(z3z[2])+'+'+IntToStr(z3z[3]));
  ShowMessage('z3: '+IntToStr(z3[1])+'+'+IntToStr(z3[2]);
z3z und z3 sin beide ein array [1..3] of Integer
Bei der ersen Meldung soll mir immer zweimal eine 1 angezeigt werden und eine 2. Das Funktioniert so auch.
Danach soll dann z3[1] und z3[2] die Zahl des Arrays übergeben werden, in der eine 1 steht.
so wie ich es mache, kriege ich aber immer nur für die zweite Zahl eine Zahl, und die erste ist immer 0.
Aber wieso? :gruebel:
Was mache ich falsch?

Union 15. Okt 2006 13:44

Re: Fehlfunktion in if-Abfrage
 
Delphi-Quellcode:
Was mache ich falsch
1. Formatierung
2. Dokumentation
3. Variablennamen

TurboMartin 15. Okt 2006 13:50

Re: Fehlfunktion in if-Abfrage
 
Zitat:

Zitat von Union
1. Formatierung

Die Formatierung ist aus einem Buch. :?


Zitat:

Zitat von Union
2. Dokumentation

Ändere ich direkt.


Zitat:

Zitat von Union
3. Variablennamen

Finde ich nicht. Für mich ist es klar alles.
Je länger die sind, umso eher schreibt man sie falsch.

Union 15. Okt 2006 13:54

Re: Fehlfunktion in if-Abfrage
 
Zitat:

Die Formatierung ist aus einem Buch.
Früher kam man für sowas noch in die Hölle...
Zitat:

Je länger die sind, umso eher schreibt man sie falsch.
Das ist ein einleuchtendes Argument. Aber anders herum: Je kürzer und ähnlicher sie sind, desto eher verwechselt man sie. Mir flimmert's jedenfalls vor den Augen. Ein Variablenname sollte etwas über die Verwendung aussagen, auch ohne Dokumentation. Was für Werte werden in diesen Arrays gespeichert?

Oxmyx 15. Okt 2006 13:56

Re: Fehlfunktion in if-Abfrage
 
Delphi-Quellcode:
if z1[1] = 1 then z3z[1] := z3z[1]+1
  else if z1[1] = 2 then z3z[2] := z3z[2]+1
       else if z1[1] = 3 then z3z[3] := z3z[3]+1;
Kann man so schreiben:

Delphi-Quellcode:
Inc(z3z[z1[1]]);
Wenn z1[1] nur 1, 2 oder 3 annehmen kann.

Benutze mal den Debugger.

JasonDX 15. Okt 2006 13:57

Re: Fehlfunktion in if-Abfrage
 
Zitat:

Zitat von TurboMartin
Zitat:

Zitat von Union
1. Formatierung

Die Formatierung ist aus einem Buch. :?

Orientiere dich daran, um Welten lesbarer. btw: was fuer ein Buch ist das? :gruebel:


Zitat:

Zitat von TurboMartin
Zitat:

Zitat von Union
3. Variablennamen

Finde ich nicht. Für mich ist es klar alles.
Je länger die sind, umso eher schreibt man sie falsch.

Je kuerzer sie sind, desto weniger versteht man, und desto eher macht man Fehler. Dein derzeitiges Problem ist das beste Beispiel. Einen falsch geschriebenen Variablennamen meckert der Compiler an. Einen Logikfehler darfst du selber suchen. Und das bereitet dir hier offensichtlich Schwierigkeiten. Was lernen wir daraus? Aussagekraeftige Variablennamen sind ein muss fuer jedes Programm mit mehr als 10 Zeilen!
Es kann sein, dass fuer dich alles klar ist, zumindest jetzt. Guck dir das Programm 2 Monate lang nich an, und versuch es nochmal zu verstehn. Ausserdem: Fuer dich ist alles klar, weil du den Code geschrieben hast. Ein Aussenstehender hat schon alleine Schwierigkeiten damit, den Quellcode zu verstehn, und ich habe schon lange aufgehoert, solche Quellcodes zu lesen.
Lektion Nr2: Aussagekraeftige Variablennamen verringern nicht nur die Fehlerwahrscheinlichkeit, sondern erhoehen auch die Wahrscheinlichkeit, dass jemand anderes deinen Quellcode liest und evt. auch korrigieren kann.

greetz
Mike

TurboMartin 15. Okt 2006 14:01

Re: Fehlfunktion in if-Abfrage
 
Zitat:

Zitat von Union
Zitat:

Die Formatierung ist aus einem Buch.
Früher kam man für sowas noch in die Hölle...
Zitat:

Je länger die sind, umso eher schreibt man sie falsch.
Das ist ein einleuchtendes Argument. Aber anders herum: Je kürzer und ähnlicher sie sind, desto eher verwechselt man sie. Mir flimmert's jedenfalls vor den Augen. Ein Variablenname sollte etwas über die Verwendung aussagen, auch ohne Dokumentation. Was für Werte werden in diesen Arrays gespeichert?

Delphi-Quellcode:
var z1, z2, z3, z3z: array [1..3] of Integer;
Am Anfang werden z1 und z2 Werte zugelost.
Da es bei z3 dann zu lange dauert bis es auch Werte hat lese ich aus, welche Werte schon verwendet werden.
Es gibt drei Werte: 1,2 und 3. Alle müssen am Ende 2 mal drin vorkommen.

r2c2 15. Okt 2006 14:35

Re: Fehlfunktion in if-Abfrage
 
Zitat:

Zitat von JasonDX
Orientiere dich daran,

Gibts sogar in ner deutschen Fassung: http://www.dsdt.info/grundlagen/styleguide/

Variablennamen:
Ich sag immer: Die beste Dokumentation is der Code selber. Wenn man schon aus den Bezeichnern rauslesen kannst, das passiert, brauchst du weniger Prosa zu schreiben. Die Heisenbergsche Unschärferelation für Programmierer: Code * Kommentar >= h :zwinker:

@TurboMartin:
Wenn du uns sagst, was der Code bezweckt, können wir vielleicht besser helfen...

mfg

Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 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