Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wieder ein Variablen Problem - komme nicht weiter. (https://www.delphipraxis.net/121566-wieder-ein-variablen-problem-komme-nicht-weiter.html)

AlexII 30. Sep 2008 13:19


Wieder ein Variablen Problem - komme nicht weiter.
 
Hallo, muss erst mal sagen, dass bis Gestern nie Probleme oder Fehler mit Variablen hatte, aber seit Gestern schon das zweite und zwar:

Habe bis jetzt diesen Code gehabt:

Delphi-Quellcode:
function RundeAufStelle(zahl: double; stellen: integer): double;
var multi: double;
begin
  multi:=IntPower(10, stellen);
  zahl:=round(zahl*multi);
  result:=zahl/multi;
end;

procedure TForm1.Note;
var note: Real;
begin
if (FiCountCorrect=0) and (jkeins=1) and (jkzwei=1) then
begin
note:=7;
end else if (FiCountCorrect=0) and (jkeins=1) then
         begin
         note:=65/10;
         end else if (FiCountCorrect=0) and (jkzwei=1) then
                  begin
                  note:=65/10;
                  end else if (FiCountCorrect=0) then
                           begin
                           note:=6;
                           end else if (jkeins=1) then
                                    begin
                                    note:=StrToFloat(Label3.Caption);
                                    note:=note+1/2;
                                    end else if (jkzwei=1) then
                                             begin
                                             note:=StrToFloat(Label3.Caption);
                                             note:=note+1/2;
                                             end else
                                                 begin
                                                 note:=StrToFloat(Label3.Caption);
                                                 note:=note-5/15;
                                                 end;
Label3.Caption:=FloatToStr(note);
Label7.Caption:=FloatToStr(RundeAufStelle(StrToFloat(Label3.Caption), 1));
end;
und hab diesen etwas auf diese Version geändert, aber der spinnt jetzt auf ein mal und ich bekomme eine Warnung "[Warnung] MAIN.pas(134): Variable 'cache' ist möglicherweise nicht initialisiert worden" Weiß nicht wo der Fehler liegt.

Delphi-Quellcode:
function RundeAufStelle(zahl: double; stellen: integer): double;
var multi: double;
begin
  multi:=IntPower(10, stellen);
  zahl:=round(zahl*multi);
  result:=zahl/multi;
end;

procedure TForm1.Note;
var note, cache: Real;
begin
if (FiCountCorrect=0) and (jkeins=1) and (jkzwei=1) then
begin
note:=7;
end else if (FiCountCorrect=0) and (jkeins=1) then
         begin
         note:=65/10;
         end else if (FiCountCorrect=0) and (jkzwei=1) then
                  begin
                  note:=65/10;
                  end else if (FiCountCorrect=0) then
                           begin
                           note:=6;
                           end else if (jkeins=1) then
                                    begin
                                    note:=cache;
                                    note:=note+1/2;
                                    end else if (jkzwei=1) then
                                             begin
                                             note:=cache;
                                             note:=note+1/2;
                                             end else
                                                 begin
                                                 note:=cache;
                                                 note:=note-5/15;
                                                 end;
cache:=note;
Label7.Caption:=FloatToStr(RundeAufStelle(cache, 1));
end;

Luckie 30. Sep 2008 13:23

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Sagt doch die Fehlermeldung, sie kann einen nicht definierten Wert annehmen.

Du gibst sie am Ende aus
Delphi-Quellcode:
Label7.Caption:=FloatToStr(RundeAufStelle(cache, 1));
Aber welchen Wert hat sie, wenn schon die erste if-Bedingung nicht zutrifft?

Und du solltest dringend dein Einrückungsstil überdenken und zumindest bei Postings hier im Forum dich ungefähr an den Borlandstil halten.

AlexII 30. Sep 2008 13:26

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Aber wenn ich die Variable cache durch Labe3.Caption ersetzte funktionier alles bestens. Ich verstehe die Logik nicht, hab ja nix verändert, nur label durch Variable ersetzt.

Luckie 30. Sep 2008 13:30

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Die Caption deines Labels hat einen definierten Anfangswert.

AlexII 30. Sep 2008 13:31

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Zitat:

Zitat von Luckie
Und du solltest dringend dein Einrückungsstil überdenken und zumindest bei Postings hier im Forum dich ungefähr an den Borlandstil halten.

Was für Stil? Hab das in der Fachabi so gelernt, alle Beschwerden bitte an das stattliche Schulwesen richten. :lol: Das hat mir der Staat so beigebracht. :gruebel:

AlexII 30. Sep 2008 13:35

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Luckie kannst du mir vielleicht wenigstens nen Tipp geben wie ich den Code richtig schreiben soll. :gruebel:

Luckie 30. Sep 2008 13:36

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Und wie kannst du da erkennen, welches end zu welchem begin gehört?

Was ist besser lesbar? Deins:
Delphi-Quellcode:
procedure TForm1.Note;
var note, cache: Real;
begin
if (FiCountCorrect=0) and (jkeins=1) and (jkzwei=1) then
begin
note:=7;
end else if (FiCountCorrect=0) and (jkeins=1) then
         begin
         note:=65/10;
         end else if (FiCountCorrect=0) and (jkzwei=1) then
                  begin
                  note:=65/10;
                  end else if (FiCountCorrect=0) then
                           begin
                           note:=6;
                           end else if (jkeins=1) then
                                    begin
                                    note:=cache;
                                    note:=note+1/2;
                                    end else if (jkzwei=1) then
                                             begin
                                             note:=cache;
                                             note:=note+1/2;
                                             end else
                                                 begin
                                                 note:=cache;
                                                 note:=note-5/15;
                                                 end;
cache:=note;
Label7.Caption:=FloatToStr(RundeAufStelle(cache, 1));
end;
Oder meins:
Delphi-Quellcode:
procedure TForm1.Note;
var
  note, cache      : Real;
begin
  if (FiCountCorrect = 0) and (jkeins = 1) and (jkzwei = 1) then
  begin
    note := 7;
  end
  else if (FiCountCorrect = 0) and (jkeins = 1) then
  begin
    note := 65 / 10;
  end
  else if (FiCountCorrect = 0) and (jkzwei = 1) then
  begin
    note := 65 / 10;
  end
  else if (FiCountCorrect = 0) then
  begin
    note := 6;
  end
  else if (jkeins = 1) then
  begin
    note := cache;
    note := note + 1 / 2;
  end
  else if (jkzwei = 1) then
  begin
    note := cache;
    note := note + 1 / 2;
  end
  else
  begin
    note := cache;
    note := note - 5 / 15;
  end;
  cache := note;
  Label7.Caption := FloatToStr(RundeAufStelle(cache, 1));
end;
Und dann sieht man auf den ersten Blick den Grund der Warnung.

DeddyH 30. Sep 2008 13:39

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Ich würde "cache" als Übergabeparameter definieren, dann kann m.E. nicht viel schiefgehen.

AlexII 30. Sep 2008 13:45

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Ich hab mich schon an meine bzw. staatliche (ist wirklich so, zu mindest in meiner Schule) Schreibweise gewöhnt, aber danke für die Muster. :thumb:

Ich komme mir schon dumm vor, aber sehe nix. Also die vierte Bedingung wird am Anfang immer erfüllt - note:=6; danach wird nach unten gesprungen und
Delphi-Quellcode:
cache:=note;
Label7.Caption:=FloatToStr(RundeAufStelle(cache, 1));
ausgeführt, somit ist die Variable cache gefüllt. Als nächste wird die letzte Anweisung immer ausgeführt, dabei sind doch alle zwei Variablen schon gefühlt. :wall:

Luckie 30. Sep 2008 13:48

Re: Wieder ein Variablen Problem - komme nicht weiter.
 
Aber das weiß ja der Compiler nicht, denn woher soll er wissen, dass FiCountCorrect immer null ist. Da stellt sich mir die Frage, warum nimmst du es als Bedingung auf, wenn es doch sowieso immer null?

Und was das else angeht:
Delphi-Quellcode:
else
  begin
    note := cache;
    note := note - 5 / 15;
  end;
cache ist undefiniert und es wird auch nicht definierter, wenn du es hin und her schiebst. Denn dann machst du:
Delphi-Quellcode:
cache := note;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr.
Seite 1 von 4  1 23     Letzte »    

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