AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wieder ein Variablen Problem - komme nicht weiter.
Thema durchsuchen
Ansicht
Themen-Optionen

Wieder ein Variablen Problem - komme nicht weiter.

Ein Thema von AlexII · begonnen am 30. Sep 2008 · letzter Beitrag vom 30. Sep 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:19
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:23
Sagt doch die Fehlermeldung, sie kann einen nicht definierten Wert annehmen.

Du gibst sie am Ende aus
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.
Michael
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:30
Die Caption deines Labels hat einen definierten Anfangswert.
Michael
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:31
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. Das hat mir der Staat so beigebracht.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:35
Luckie kannst du mir vielleicht wenigstens nen Tipp geben wie ich den Code richtig schreiben soll.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:36
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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:39
Ich würde "cache" als Übergabeparameter definieren, dann kann m.E. nicht viel schiefgehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:45
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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 13:48
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:
cache := note;
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 15:46 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