AGB  ·  Datenschutz  ·  Impressum  







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

Gleitkomma Problem

Ein Thema von Garrad · begonnen am 7. Apr 2008 · letzter Beitrag vom 8. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Garrad
(Gast)

n/a Beiträge
 
#1

Gleitkomma Problem

  Alt 7. Apr 2008, 19:27
Ich hab für die schule nen Programm geschrieben. Jetztt kommt immer der fehler mit ... ist kein gültiger Gleitkommawert. Ich hab keine Ahnung woran das liegen könnte wär nett wenn mir jemand helfen könnte.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    RadioGroup1: TRadioGroup;
    GroupBox1: TGroupBox;
    Label10: TLabel;
    Label11: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    function ziehen:integer;
    function gegner:real;
    function Gewonnen:real;
    function Verloren:real;
    procedure FormCreate(Sender: TObject);
      private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var b,c,w,L:integer;
  Form1: TForm1;

implementation

{$R *.dfm}
function Tform1.ziehen:integer;
var a:integer;
begin
randomize;
a:=1+random(13);
    if a=0 then label1.Caption:='zwei';
    if a=1 then label1.Caption:='drei';
    if a=2 then label1.Caption:='vier';
    if a=3 then label1.Caption:='fünf';
    if a=4 then label1.Caption:='sechs';
    if a=5 then label1.Caption:='sieben';
    if a=6 then label1.Caption:='acht';
    if a=7 then label1.Caption:='neun';
    if a=8 then label1.Caption:='zehn';
    if a=9 then label1.Caption:='Bube';
    if a=10 then label1.Caption:='Dame';
    if a=11 then label1.Caption:='König';
    if a=12 then label1.Caption:='Ass';


        if a=0 then b:=b+2;
           if a=1 then b:=b+3;
           if a=2 then b:=b+4;
           if a=3 then b:=b+5;
           if a=4 then b:=b+6;
           if a=5 then b:=b+7;
           if a=6 then b:=b+8;
           if a=7 then b:=b+9;
           if a=8 then b:=b+10;
           if a=9 then b:=b+10;
           if a=10 then b:=b+10;
           if a=11 then b:=b+10;
           if a=12 then b:=b+10;
ziehen:=b;

end;
function Tform1.gegner:real;
var i:integer; a:real;
begin
label1.visible:=false;
b:=0;
repeat
ziehen;
until b>=17;
a:=strtofloat(Label5.caption);
label4.caption:=inttostr(b);
label1.visible:=false;
if b>21 then Gewonnen //gleitkomma Problem
else
begin
if b>a then Verloren; //Gleitkomma Problem
if b=21 then Verloren;
if b=a then label9.Caption:='unentschieden';
if a>b then Gewonnen //Gleitkomma Problem
end;
c:=100;
For i:=0 to 2 Do
begin
RadioGroup1.Items.Delete(i);
RadioGroup1.Items.Insert(i,(floattostr(strtofloat(label11.caption)*(0.4+i/10))));
end;
Button1.Caption:='Neues Spiel';
Button2.Enabled:=false;


end;


function Tform1.Gewonnen:real;
var i:integer;

begin
label9.caption:='Gewonnen';

For i:=0 to 2 do
  begin if RadioGroup1.ItemIndex=i
  then label11.Caption:=inttostr(strtoint(label11.caption)+strtoint(RadioGroup1.Items.Strings[i]));
  end;

For i:=0 to 2 Do
begin
RadioGroup1.Items.Delete(i);
RadioGroup1.Items.Insert(i,(floattostr(strtofloat(label11.caption)*0.4)));
end;
label7.Caption:=floattostr (strtofloat(label7.Caption)+1);
b:=0;
Button1.Caption:='Neues Spiel';
Button2.Enabled:=false;
end;


function Tform1.Verloren:real;
var i:integer;
begin

label9.caption:='Verloren';

For i:=0 to 2 do
  begin if RadioGroup1.ItemIndex=i
  then label11.Caption:=inttostr(strtoint(label11.Caption)-strtoint(RadioGroup1.Items.Strings[i]));
  end;

For i:=0 to 2 Do
begin
RadioGroup1.Items.Delete(i);
RadioGroup1.Items.Insert(i,(floattostr(strtofloat(label11.caption)*0.4)));
end;
label8.Caption:=floattostr (strtofloat(label8.Caption)+1);
b:=0;
Button1.Caption:='Neues Spiel';
Button2.Enabled:=false;

end;


procedure TForm1.Button1Click(Sender: TObject);
var a:real;
begin
if c=100 then
begin
Button1.Caption:='Karte ziehen';
Button2.Enabled:=true;
Label5.Caption:='0';
label1.Caption:=' ';
label1.visible:=true;
label4.Caption:=' ';
label9.Caption:=' ';
c:=0;
b:=0;
end
else
begin
if b>21 then verloren //gleitkomma problem
else
            begin
            if b=21 then gegner
              else
                begin
                a:=ziehen;
                Label5.Caption:=floattostr(a);
                end;
            end;

if a>21 then //gleitkomma problem

if a=21 then gegner

end;
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
gegner;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
c:=100;
RadioGroup1.Items.Insert(0,(floattostr(strtofloat(label11.caption)*0.4)));
RadioGroup1.Items.insert(1,(floattostr(strtofloat(label11.caption)*0.3)));
RadioGroup1.Items.insert(2,(floattostr(strtofloat(label11.caption)*0.2)));


end;

end.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Gleitkomma Problem

  Alt 7. Apr 2008, 19:38
.Gewonnen() und .Verloren() liefern dir eine Gleitkommazahl zurück.
Markus Kinzler
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Gleitkomma Problem

  Alt 8. Apr 2008, 13:59
1) Einrückung ist zum weinen.
2) Warum überall Functions? Du weist in keiner dieser je ein result zu, und nutzt den nicht vorhandnen Rückgabewert auch nirgends.
3) Haufenweise unnötige globale Variablen
4) Komponentenbenennung auf default lassen erleichtert die Arbeit nicht unbedingt.
5-10) Grundlagentutorials sind mal wieder der beste Tipp den man dir geben kann.

Delphi-Quellcode:
if a>21 then //gleitkomma problem

if a=21 then gegner
Was soll das werden z.B.?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.764 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Gleitkomma Problem

  Alt 8. Apr 2008, 14:33
Du hast nur Integer Variablen und nutzt dann aber StrToFloat...sehr seltsam.

Edit: Rest lieber wieder gestrichen...Unfug.
Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Gleitkomma Problem

  Alt 8. Apr 2008, 14:49
Du machst
inttostr(strtoint(label11.caption)+strtoint(RadioG roup1.Items.Strings[i]))
Doppelte Konvertierung -> das kannst Du Dir schenken -> macht es wieder ein Stück übersichtlicher.

Dann schreibst Du
RadioGroup1.Items.Delete(i);
Das kannst Du ersetzen durch
RadioGroup1.Items.Ckear;
und diesen Befehl vor die for-Schleife.

aus
if a=0 then label1.Caption:='zwei';
if a=1 then label1.Caption:='drei';
...

kannst Du ein case machen. Das geht schneller und ist besser lesbar.
Dann kannst Du alle gleichen if a= in den gleichen case-Fall stecken.

Dann solltest Du Dir mal den Borland StyleGuide reinziehen.
Da wird z.B. festgelegt, was man wann gross oder klein schreibt; wie man Variablen und Komponenten benennt; wie man die Einrückung macht; usw.

Soweit nur mal zur Programmierung.
Zu der Logik schreibe ich vielleicht später noch etwas, wenn Du meine obigen Anmerkungen umgesetzt hast.
Durch diesen Wust an Quellcode wühle ich mich nicht weiter durch.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Garrad
(Gast)

n/a Beiträge
 
#6

Re: Gleitkomma Problem

  Alt 8. Apr 2008, 15:18
Ich weiß das ich kein Programmierer bin/werde!!!
Das is alles einfach drauflosgeschrieben.
Ich hab mich bis jetzt auch nur in der schule damit beschäftigt--->hab noch ni was von programmierer form etc. gehört.
Ich will bloß wissen, wie ich verhindern kann, dass es mir eine Gleitkommazahl zurückliefert...
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#7

Re: Gleitkomma Problem

  Alt 8. Apr 2008, 15:24
a ist nicht initialisiert.
du musst es erst mit einem sinnvollen Wert initialisieren.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Garrad
(Gast)

n/a Beiträge
 
#8

Re: Gleitkomma Problem

  Alt 8. Apr 2008, 15:27
Problem is leider immer noch vorhanden habe jetzt
Delphi-Quellcode:
 begin
                a:=ziehen;
                Label5.Caption:=floattostr(a);
                if a>21 then verloren;
                if a=21 then gegner
                end;
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Gleitkomma Problem

  Alt 8. Apr 2008, 16:01
Herzlich Willkommen hier im Forum ,

ich möchte dir mal das eine oder andere Delphi Tutorial ans Herz legen... Gute Einstieg findest du z.B. bei den Schweizern.
  Mit Zitat antworten Zitat
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Gleitkomma Problem

  Alt 8. Apr 2008, 16:06
Du kannst immernoch deinen ersten Beitrag über den "edit"-Button ändern -> deshalb rüch vernünftig ein und ändere die Programmierprache Von Delphi .Net auf Delphi für Win32.
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:10 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