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 3 von 4     123 4      
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#21

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 15:17
Zitat von AlexII:
Zitat von jfheins:
Woher sind die denn bitte gefüllt? Vom vorherigen Aufruf?
Etwa nicht?
Bei lokalen Variablen: Nein, natürlich nicht
  Mit Zitat antworten Zitat
AlexII

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

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 15:21
Zitat von nahpets:
Der Compiler weiss nicht, dass FiCountCorrect = 0, was ist denn, wenn FiCountCorrect = 42 (warum auch immer).
Wieso nicht? Beim FormCreate wird die auf Null gesetzt und danach in ner Schleife immer verändert. Also sie ist immer im Griff.



Zitat von nahpets:
Bau doch am Anfang einfach direkt hinter dem ersten begin
cache := StrToFloat(Label3.Caption);
Ich wollte die Label3 gerade los werden, aber anscheinend lasse ich den Code so wie am Anfang, mit dem Label halt.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#23

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 15:39
Hallo,
Zitat von Alex:
Wieso nicht? Beim FormCreate wird die auf Null gesetzt und danach in ner Schleife immer verändert. Also sie ist immer im Griff.
Der Compiler guckt nicht den gesamten Quelltext und alle eingebundenen Units... durch, ob für eine bestimmte Situation eventuell unter Umständen vielleicht zu einem bestimmten Zeitpunkt eine bestimmte Bedingung irgendwo Aufgrund des Setzens von irgendwelchen Variabeln im Quelltext (ggfls. auch das Auslesen von Dateien, Datenbanken...) erfüllt sein könnte.
Er betrachtet die Prozudur losgelöst vom "Rest der Welt". Für ihn ist innerhalb der Prozedur nicht erkennbar, das cache immer und zu jedem Zeitpunkt einen Wert hat und er verlässt sich nicht darauf, dass eine Prozedur immer nur so aufgerufen wird, dass jede Variabel immer einen Wert hat.
Wenn er immer und überall überprüfen müsste, dass jede Variabel zu jeder Zeit, zu jeder Bedingung immer über gültige Werte verfügt, so müsste er zur Compilezeit das Programm mit sämtlichen möglichen Kombinationen von Werten... durchrechnen. Der Compiler, der das kann, der weiß auch, das die Antwort auf alle Fragen 42 ist

Zitat von Alex:
Ich wollte die Label3 gerade los werden, aber anscheinend lasse ich den Code so wie am Anfang, mit dem Label halt.
Einmal musst Du den Wert von Label3.Caption in die Prozedur bekommen, entweder in der Prozedur per Zuweisung oder eben als Parameter, wie von DeddyH schon beschrieben.

Stephan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#24

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 15:46
Aber als Übergabeparameter ist sie laut Luckie ja auch nicht initialisiert . Ich frag mich nur, wozu es die Dinger dann überhaupt gibt.
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
nahpets
(Gast)

n/a Beiträge
 
#25

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 15:50
Zitat von DeddyH:
Aber als Übergabeparameter ist sie laut Luckie ja auch nicht initialisiert . Ich frag mich nur, wozu es die Dinger dann überhaupt gibt.
Was? die Variabeln, schreiben wir überall 42 rein 8)
Stephan
  Mit Zitat antworten Zitat
AlexII

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

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 15:51
Ok danke dir. Muss mir mal heute alles über Proceduren durchlesen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 15:51
Delphi-Quellcode:
procedure foo(c: Real);
begin
  // tu was
end;

// ...;

procedure bar;
var
  cache: Real;
begin
  foo(cache);
end;
Wo ist sie jetzt initialisiert?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#28

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 15:53
Davon war ja nicht die Rede. Das Spiel kannst Du natürlich endlos treiben.
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
Eos-PVU

Registriert seit: 18. Dez 2006
2 Beiträge
 
#29

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 16:10
Hi!

Zuerst mal haben wir hier wohl das Mißverständnis, daß eine lokale Variable beim nächsten Prozeduraufruf noch ihren alten Wert habe - das mag bei anderen Programmiersprachen so sein, bei Delphi ist das nicht der Fall.

Aufgrund des unter Windows ereignisgesteuerten Programmablaufs kann man ja auch nicht vorhersagen, in welcher Reihenfolge was aufgerufen wird - Tastatur- Maus- und Fensterereignisse passieren nun mal unvorhersehbar und rufen (sofern vom Programmierer da etwas geschrieben wurde) ihre Ereignisverarbeitungen auf. Wenn dann lokale Variablen als Zwischenspeicher verwendet werden könnten, kämen die merkwürdigsten Ergebnisse heraus. Bei Verwendung globaler Variablen kann das auch unter Delphi passieren.

Leider hat der Fragesteller nicht die Zeile genannt, in der der Fehler gemeldet wird - die letzte Zeile dürfte es nicht sein.

Hier mal Luckies Umformung des Codes mit meinen Anmerkungen, wo der Compiler warnen sollte:

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; //==> cache möglicherweise nicht initialisiert
    note := note + 1 / 2;
  end
  else if (jkzwei = 1) then
  begin
    note := cache; //==> cache möglicherweise nicht initialisiert
    note := note + 1 / 2;
  end
  else
  begin
    note := cache; //==> cache möglicherweise nicht initialisiert
    note := note - 5 / 15;
  end;
  cache := note;
  Label7.Caption := FloatToStr(RundeAufStelle(cache, 1));
end;
Entweder cache als globale Variable im Formular haben oder als VAR-Parameter übergeben - dann natürlich vor dem ersten Aufruf der Prozedur das Initialisieren nicht vergessen.
Dabei könnte man dann auch gleich die übrigen globalen Werte per Parameter übergeben:

Delphi-Quellcode:
procedure TForm1.Note (const FiCountCorrect, jkeins, jkzwei: integer; var cache: real);
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 := 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;
Gruß

Eos-PVU
  Mit Zitat antworten Zitat
AlexII

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

Re: Wieder ein Variablen Problem - komme nicht weiter.

  Alt 30. Sep 2008, 16:22
procedure TForm1.Note (const FiCountCorrect, jkeins, jkzwei: integer; var cache: real); Aber FiCountCorrect, jkeins, jkzwei sind doch nicht constant oder wie meinst du das?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 13:40 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