|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
derUnwissende Gast
|
Verfasst am: 03.09.2002, 14:27 Titel: Fehlermeldung |
|
|
Und zwar hab ich ein sehr sehr billiges ,,Programm" geschrieben was Zahlen in ein Prdoukt aus Primzahlen zerlegen soll.
Hier der Code:
[code:1:2bf1df812e]
#include <iostream.h>
void Division(float Zahl, float Divisor);
void DivisorZuweisen(float Divisor);
void Primzahl (float Divisor);
void Pruefung(float Zahl);
float ErgebnisDivision, ErgebnisSubtraktion, uZahl, divisor=2;
int Startzahl;
bool primzahl= false;
short anzahl=-1, frage;
int zahl[20];
int main(void)
{
cout<<"Bitte geben sie eine Zahl ein die sie zerlegen lassen wollen:\n";
cin>>uZahl;
Startzahl=(int)uZahl;
if(uZahl==1)
{
Division(uZahl,1);
}
else if(uZahl>999999)
{
cout<<"Die von ihnen ausgewaehlte Zahl ist zu grosz, sie darf maximal 999999 sein.\n";
main();
}
else
{
Division(uZahl, divisor);
}
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////
void Division(float Zahl, float Divisor)
{
ErgebnisDivision=Zahl/Divisor;
ErgebnisSubtraktion =ErgebnisDivision - (int)ErgebnisDivision;
if(ErgebnisSubtraktion > 0
)
{
DivisorZuweisen(divisor);
}
else
{
zahl[anzahl]=(int)Divisor;
uZahl=ErgebnisDivision;
if(uZahl<=1)
divisor=1;
}
else
{
divisor=2;
}
Pruefung(uZahl);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
void DivisorZuweisen(float Divisor)
{
if(primzahl==true)
{
primzahl=false;
divisor=Divisor;
Division(uZahl, divisor);
}
else
{
Divisor++;
Primzahl(Divisor);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
void Primzahl(float Divisor)
{
if(Divisor>7)
{
{
primzahl=false;
DivisorZuweisen(Divisor);
}
else
{
primzahl=true;
DivisorZuweisen(Divisor);
}
}
else if(Divisor>5)
{
if(Divisor/2 - (int)(Divisor/2) == 0 || Divisor/3 - (int)(Divisor/3) == 0 || Divisor/5 - (int)(Divisor/5) == 0)
{
primzahl=false;
DivisorZuweisen(Divisor);
}
else
{
primzahl=true;
DivisorZuweisen(Divisor);
}
}
else if(Divisor>3)
{
if(Divisor/2 - (int)(Divisor/2) == 0 || Divisor/3 - (int)(Divisor/3) == 0)
{
primzahl=false;
DivisorZuweisen(Divisor);
}
else
{
primzahl=true;
DivisorZuweisen(Divisor);
}
}
else if(Divisor>2)
{
{
primzahl=false;
DivisorZuweisen(Divisor);
}
else
{
primzahl=true;
DivisorZuweisen(Divisor);
primzahl=false;
DivisorZuweisen(Divisor);
}
else
{
primzahl=true;
DivisorZuweisen(Divisor);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
void Pruefung(float Zahl)
{
if((Zahl/divisor==1)&&(Zahl!=2))
{
cout<<"Die Zahl: "<<Startzahl<<" ist das Produkt folgender Zahlen:\n";
{
cout<<zahl[i]<<" * ";
}
cout<<"\b\b \n";
cout<<"Wenn sie erneut eine Zahl zerlegen moechten bestaetigen sie bitte mit 1,\num das Program zu verlassen eine beliebig andere Taste druecken\n";
cin>>frage;
if(frage==1)
{
main();
}
}
else
{
divisor=2;
Division(uZahl, divisor);
|
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 03.09.2002, 14:33 Titel: |
|
|
was denn für eine fehlermeldung? |
|
Nach oben |
|
|
Gast
|
Verfasst am: 03.09.2002, 20:36 Titel: |
|
|
einfach die normale Windowsfehlermeldung ,,Diese Anwendung wird aufgrund eines ungültigen Vorgangs geschlossen. ..."
und wenn man auf Debug geht kommt ,,Stack Overflow" und es wird auf die Funktion ,,DivisorZuweisen" verwiesen. |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 03.09.2002, 20:52 Titel: |
|
|
Ich hab mir den Code zwar nicht genau angeschaut, aber du scheinst in den Beiden Funktionen DivisorZuweisen() und Primzahl() eine Rekursion eingebaut zu haben, die keine Abbruchbedingung erreicht... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 03.09.2002, 20:55 Titel: |
|
|
Ich habe dein Code jetzt nicht ausführlich gelesen, aber ich glaube es liegt daran, dass du in der Funktion "DivisiorZuweisen" die Funktion "Primzahl" aufrufst, die wiederum die Funktion "DivisiorZuweisen aufruft". So ensteht unter Umständen ein unendlicher Durchgang und der Stack wird mit zu viel Speicher belastet! |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 03.09.2002, 20:58 Titel: |
|
|
Genau das hab ich mit Rekursion ohne Abbruchbedingung gemeint... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 03.09.2002, 21:00 Titel: |
|
|
Oh, da war warst du wohl schneller als ich !
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 03.09.2002, 22:00 Titel: |
|
|
AFE... guck mal auf die Post-Zeiten... beide fast gleichzeitig (naja... 3 min Unterschied, aber manche brauchen halt länger zum tippen ) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Sören JLI Master Trainee
Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 04.09.2002, 12:55 Titel: |
|
|
Naja, muss nicht sein, dass ich länger gebraucht habe. Da AFE ja vielleicht schon ein paar Minuten eher angefangen hat, und sein Post abgesendet hat während ich noch beim Tippen war! Du gehst davon aus, dass wir beide gleichzeitig angefangen haben(vielleicht hab ich sogar eher angefangen und fast doppelt so lange gebraucht wie AFE!).
PS.:puh, das war jetzt ein verwirrender Satz!
|
|
Nach oben |
|
|
derUnwissende Gast
|
Verfasst am: 05.09.2002, 16:55 Titel: |
|
|
Hat jemand einen Vorschlag wie man das ,,Program" umschreiben könnte, dass es auch mit solch Zahlen funktioniert? Oder muss man dafür am besten nochmal neu mit anderen Ansätzen anfangen? |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|