Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Simulation starten/anhalten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.01.2004, 13:10 Uhr
Puschel
Dr. med. Dipl. Prof. Virus


Moin, moin!

Ich habe folgendes Problem: Mein Simulation will nicht so wie ich will.
Immer wenn ich au den Start Button drücke bekomme ich folgende Fehlermeldung:

Code:
Fehlermeldung:
Im Projekt1.exe ist eine Exception der Klasse EInvalidOp aufgetreten.
Meldung "ungültige Gleitkomma Operation". ....



Mein Quelltext sieht so aus:


C++:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool bAbbruch, bSTOP, bENDE; //als globale Variablen vereinbaren
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
        wassermenge->Caption="0";
        duengermenge->Caption="0";
        tag->Caption="0";
        hoehe_pflanze->Caption="0";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::startClick(TObject *Sender)
{
double ergebnis,Hoehe,speicher_h,speicher_d,speicher_w;
double wasser,duenger;
int Pause;
        switch(Wasser->Text.ToInt())
                {
                case 1: ergebnis=ergebnis+1;break;
                case 2: ergebnis=ergebnis+2;break;
                case 3: ergebnis=ergebnis+3;break;
                case 4: ergebnis=ergebnis+4;break;
                case 5: ergebnis=ergebnis+5;break;
                case 6: ergebnis=ergebnis+6;break;
                case 7: ergebnis=ergebnis+7;break;
                case 8: ergebnis=ergebnis+8;break;
                case 9: ergebnis=ergebnis+9;break;
                case 10: ergebnis=ergebnis+10;break;
                };
        switch(Licht->Text.ToInt())
                {
                case 1: ergebnis=ergebnis+1;break;
                case 2: ergebnis=ergebnis+2;break;
                case 3: ergebnis=ergebnis+3;break;
                case 4: ergebnis=ergebnis+4;break;
                case 5: ergebnis=ergebnis+5;break;
                case 6: ergebnis=ergebnis+6;break;
                case 7: ergebnis=ergebnis+7;break;
                case 8: ergebnis=ergebnis+8;break;
                case 9: ergebnis=ergebnis+9;break;
                case 10: ergebnis=ergebnis+10;break;
                };
        switch(Duenger->Text.ToInt())
                {
                case 1: ergebnis=ergebnis+1;break;
                case 2: ergebnis=ergebnis+2;break;
                case 3: ergebnis=ergebnis+3;break;
                case 4: ergebnis=ergebnis+4;break;
                case 5: ergebnis=ergebnis+5;break;
                case 6: ergebnis=ergebnis+6;break;
                case 7: ergebnis=ergebnis+7;break;
                case 8: ergebnis=ergebnis+8;break;
                case 9: ergebnis=ergebnis+9;break;
                case 10: ergebnis=ergebnis+10;break;
                };
        switch(Regen->Text.ToInt())
                {
                case 1: ergebnis=ergebnis+1;break;
                case 2: ergebnis=ergebnis+2;break;
                case 3: ergebnis=ergebnis+3;break;
                case 4: ergebnis=ergebnis+4;break;
                case 5: ergebnis=ergebnis+5;break;
                case 6: ergebnis=ergebnis+6;break;
                case 7: ergebnis=ergebnis+7;break;
                case 8: ergebnis=ergebnis+8;break;
                case 9: ergebnis=ergebnis+9;break;
                case 10: ergebnis=ergebnis+10;break;
                };
        switch(Temp->Text.ToInt())
                {
                case 5: ergebnis=ergebnis+1;break;
                case 6: ergebnis=ergebnis+2;break;
                case 7: ergebnis=ergebnis+3;break;
                case 8: ergebnis=ergebnis+4;break;
                case 9: ergebnis=ergebnis+5;break;
                case 10: ergebnis=ergebnis+6;break;
                case 11: ergebnis=ergebnis+7;break;
                case 12: ergebnis=ergebnis+8;break;
                case 13: ergebnis=ergebnis+9;break;
                case 14: ergebnis=ergebnis+10;break;
                case 15: ergebnis=ergebnis+11;break;
                case 16: ergebnis=ergebnis+12;break;
                case 17: ergebnis=ergebnis+13;break;
                case 18: ergebnis=ergebnis+14;break;
                case 19: ergebnis=ergebnis+15;break;
                case 20: ergebnis=ergebnis+15;break;
                case 21: ergebnis=ergebnis-1;break;
                case 22: ergebnis=ergebnis-2;break;
                case 23: ergebnis=ergebnis-3;break;
                case 24: ergebnis=ergebnis-4;break;
                case 25: ergebnis=ergebnis-5;break;
                case 26: ergebnis=ergebnis-6;break;
                case 27: ergebnis=ergebnis-7;break;
                case 28: ergebnis=ergebnis-8;break;
                case 29: ergebnis=ergebnis-9;break;
                case 30: ergebnis=ergebnis-10;break;
                case 31: ergebnis=ergebnis-11;break;
                case 32: ergebnis=ergebnis-12;break;
                case 33: ergebnis=ergebnis-13;break;
                case 34: ergebnis=ergebnis-14;break;
                case 35: ergebnis=ergebnis-15;break;
                };
        if(ergebnis<=55 && ergebnis>=46)[b]!!![/b]//hier steht der Cursor wenn
                                                        Fehlermeldung ausgelöst
                {
                Hoehe=1;
                }
                else
                {
                if(ergebnis<=45 && ergebnis>=36)
                        {
                        Hoehe=5;
                        }
                        else
                        {
                        if(ergebnis<=35 && ergebnis>=26)
                                {
                                Hoehe=4;
                                }
                                else
                                {
                                if(ergebnis<=25 && ergebnis>=16)
                                        {
                                        Hoehe=3;
                                        }
                                        else
                                        {
                                        if(ergebnis<=15 && ergebnis>=5)
                                                {
                                                Hoehe=2;
                                                }
                                        }
                                }
                        }
                }
        switch(Wasser->Text.ToInt())
                {
                case 1 : wasser=0.05;break;
                case 2 : wasser=0.10;break;
                case 3 : wasser=0.15;break;
                case 4 : wasser=0.20;break;
                case 5 : wasser=0.25;break;
                case 6 : wasser=0.30;break;
                case 7 : wasser=0.35;break;
                case 8 : wasser=0.40;break;
                case 9 : wasser=0.45;break;
                case 10: wasser=0.50;break;
                };
        switch(Duenger->Text.ToInt())
                {
                case 1  : duenger= 1;break;
                case 2  : duenger= 2;break;
                case 3  : duenger= 3;break;
                case 4  : duenger= 4;break;
                case 5  : duenger= 5;break;
                case 6  : duenger= 6;break;
                case 7  : duenger= 7;break;
                case 8  : duenger= 8;break;
                case 9  : duenger= 9;break;
                case 10 : duenger=10;break;
                };
speicher_d=duenger;
duenger=0;
speicher_h=Hoehe;
Hoehe=0;
speicher_w=wasser;
Wasser=0;
bAbbruch=false;
bENDE=false;
int i=0;
        while(!bENDE)
                {
                while((i<=Tage->Text) && (!bAbbruch))
                        {
                        tag->Update();
                        tag->Caption=i;
                        hoehe_pflanze->Update();
                        Hoehe=Hoehe+speicher_h;
                        hoehe_pflanze->Caption=FloatToStrF(Hoehe,ffGeneral,6,2);
                        duengermenge->Update();
                        duenger=duenger+speicher_d;
                        duengermenge->Caption=duenger;
                        wassermenge->Update();
                        wasser=wasser+speicher_w;
                        wassermenge->Caption=wasser;
                        Application->ProcessMessages();
                        Sleep(1000);
                        i++;
                        }
                Application->ProcessMessages();
                }
                ShowMessage("ENDE");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pauseClick(TObject *Sender)
{
bAbbruch=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::weiterClick(TObject *Sender)
{
bAbbruch=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::endeClick(TObject *Sender)
{
bENDE=true;
}
//---------------------------------------------------------------------------



Danke wenn sich jemand den Quelltext ansieht und mir sagen könnte wo der Fehler steckt.

Programm: BCB6
--
Wenn man nichts tut, glaubt man, daß man für alles die Verantwortung trägt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.01.2004, 14:16 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


den fehler seh ich zwas spontan leider nicht aber du machst dir das mit den switchanweisungen ein bisschen kompliziert...


C++:
switch(Wasser->Text.ToInt())
                case 1: ergebnis=ergebnis+1;break;
                case 2: ergebnis=ergebnis+2;break;
                case 3: ergebnis=ergebnis+3;break;
                case 4: ergebnis=ergebnis+4;break;
                case 5: ergebnis=ergebnis+5;break;
                case 6: ergebnis=ergebnis+6;break;
                case 7: ergebnis=ergebnis+7;break;
                case 8: ergebnis=ergebnis+8;break;
                case 9: ergebnis=ergebnis+9;break;
                case 10: ergebnis=ergebnis+10;break;
                };


sowas geht einfacher...
das liefert dir genau das gleiche...


C++:
ergebnis+=Wasser->Text.ToInt();




das hier

C++:
switch(Temp->Text.ToInt())
                {
                case 5: ergebnis=ergebnis+1;break;
                case 6: ergebnis=ergebnis+2;break;
                case 7: ergebnis=ergebnis+3;break;
                case 8: ergebnis=ergebnis+4;break;
                case 9: ergebnis=ergebnis+5;break;
                case 10: ergebnis=ergebnis+6;break;
                case 11: ergebnis=ergebnis+7;break;
                case 12: ergebnis=ergebnis+8;break;
                case 13: ergebnis=ergebnis+9;break;
                case 14: ergebnis=ergebnis+10;break;
                case 15: ergebnis=ergebnis+11;break;
                case 16: ergebnis=ergebnis+12;break;
                case 17: ergebnis=ergebnis+13;break;
                case 18: ergebnis=ergebnis+14;break;
                case 19: ergebnis=ergebnis+15;break;
                case 20: ergebnis=ergebnis+15;break;
                case 21: ergebnis=ergebnis-1;break;
                case 22: ergebnis=ergebnis-2;break;
                case 23: ergebnis=ergebnis-3;break;
                case 24: ergebnis=ergebnis-4;break;
                case 25: ergebnis=ergebnis-5;break;
                case 26: ergebnis=ergebnis-6;break;
                case 27: ergebnis=ergebnis-7;break;
                case 28: ergebnis=ergebnis-8;break;
                case 29: ergebnis=ergebnis-9;break;
                case 30: ergebnis=ergebnis-10;break;
                case 31: ergebnis=ergebnis-11;break;
                case 32: ergebnis=ergebnis-12;break;
                case 33: ergebnis=ergebnis-13;break;
                case 34: ergebnis=ergebnis-14;break;
                case 35: ergebnis=ergebnis-15;break;
                };




kannst du z.b. so kürzer schreiben

C++:
ergebnis+=Temp->Text.ToInt();
if(Temp->Text.ToInt()>20)ergebnis-=50;
else ergebnis-=5;




den spass kann man bestimmt auch noch ein bisschen vereinfachen...

C++:
if(ergebnis<=55 && ergebnis>=46)!!!//hier steht der Cursor wenn
                                                        Fehlermeldung ausgelöst
                {
                Hoehe=1;
                }
                else
                {
                if(ergebnis<=45 && ergebnis>=36)
                        {
                        Hoehe=5;
                        }
                        else
                        {
                        if(ergebnis<=35 && ergebnis>=26)
                                {
                                Hoehe=4;
                                }
                                else
                                {
                                if(ergebnis<=25 && ergebnis>=16)
                                        {
                                        Hoehe=3;
                                        }
                                        else
                                        {
                                        if(ergebnis<=15 && ergebnis>=5)
                                                {
                                                Hoehe=2;
                                                }
                                        }
                                }
                        }
                }



irgenwie in der art

C++:
if(ergebnis>46)Hoehe=1;else Hoehe=(ergebnis+14)/10;




das wird

C++:
switch(Wasser->Text.ToInt())
                {
                case 1 : wasser=0.05;break;
                case 2 : wasser=0.10;break;
                case 3 : wasser=0.15;break;
                case 4 : wasser=0.20;break;
                case 5 : wasser=0.25;break;
                case 6 : wasser=0.30;break;
                case 7 : wasser=0.35;break;
                case 8 : wasser=0.40;break;
                case 9 : wasser=0.45;break;
                case 10: wasser=0.50;break;
                };




zu dem

C++:
wasser=Wasser->Text.ToInt()*0.05;


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 13.01.2004 um 14:21 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.01.2004, 14:28 Uhr
Puschel
Dr. med. Dipl. Prof. Virus


Das sagst du jetzt so. aber ich habe da schon einiges ausprobiert. Und eigentlich ist das die beste Lösung weil ich in diesem Abschnitt noch nicht rechnen Brauch und Multiplizieren un dividieren brauch ich sowie so nicht.

Aber trotzdem danke

Zum besseren Verständnis gibts das Programm auch per Mail.
--
Wenn man nichts tut, glaubt man, daß man für alles die Verantwortung trägt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.01.2004, 14:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


da musst du dir aber einer borlanduser suchen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.01.2004, 14:41 Uhr
Puschel
Dr. med. Dipl. Prof. Virus


Tja wenn sich mal einer melden würde.
Wahrscheinlich benutzt keiner den BCB6

Aber trotzdem danke für deine Tipps
--
Wenn man nichts tut, glaubt man, daß man für alles die Verantwortung trägt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.01.2004, 14:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du hättest es ein bisschen schlauer angehen müssen...
am besten schreibst du deine funktionen immer erstmal auf der konsole und bleibst so lange in ansi-c wie es geht...
die oberfläche dazu kann man dann später immer noch basteln...
das hätte in diesem fall den vorteil das man die besser helfen könnte und für dich selbst hast du den vorteil das du deine funktionen besser wiederverwenden bzw. leichter änderungen an dem programm vornehmen kannst... wenn du immer gleich alles in die GUI funktionen ballerst wird das ganze verdammt unübersichtlich (man findet nur schwer fehler), ist kaum wiederverwendbar und beschissen zu testen und es können nur die leute nutzen die genau die oberfäche verwenden die du auch verwendest....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.01.2004, 14:49 Uhr
Puschel
Dr. med. Dipl. Prof. Virus


ja klar hast ja recht ich denke ich werd das noch mal in ansi-c umschreiben und dann mal schauen
--
Wenn man nichts tut, glaubt man, daß man für alles die Verantwortung trägt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.01.2004, 20:20 Uhr
Bruder Leif
dances with systems
(Operator)


*g* Borland-User bin ich schon, den BCB hab ich auch lange benutzt, aber mit dem Fehler kann ich nicht viel anfangen. Eine Variable auf ihren Wert zu überprüfen löst normalerweise keine Exceptions aus. Welche Werte haben denn die Variablen?
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.01.2004, 09:52 Uhr
Puschel
Dr. med. Dipl. Prof. Virus


Tja die Variable hat nen wert zwischen 5 und 55. Kommt ganz drauf an welche eingabe Werte ich habe. Tja vorher hat ich auch ne einfache "for"-Schleife drine die ich dann durch die "While "-Schleife ersetzt habe und danach trat der Fehler auf, also denke ich mal das es daran liegt. wenn mir jemand eine ander möglichkeit erklärt oder gibt wäre ich dankbar für jeden Tipp.
--
Wenn man nichts tut, glaubt man, daß man für alles die Verantwortung trägt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: