kein fehler beim compilieren, stürzt aber ab...
-
hallo!
nach langen problemen mit einer header-datei bin ich nun endlich dabei mein apfelmännchen-programm zu schreiben.
der compiler gibt mir jetzt keine fehler mehr zurück - aber es sind noch welche drinnen, da es - anscheinend beim unterprogramm - abstürzt.
hier ist mein code:
//Programm Apfelmann.cpp using namespace std; #include <iostream> #include <cmath> #include "xwindows.h" int main() { double nx; double ny; int nn; double x; double y; cout << endl << "Programm Apfelmann.cpp" << endl << endl; double niter(double x,double y); //Deklaration eines Objektes der Klasse Xwindow XWindow fenster(800,0); //Oeffne Fenster der Groesse xmax*ymax fenster.Open (nx, ny, "Apfelmaennchen"); //Fuelle das Fenster for (nx = 0; nx <= 500;) { for (ny = 0; ny <= 500;) { niter(x,y); fenster.SetColor(1. - nn/(30.0)); fenster.DrawPoint(nx, ny); ny = 2.5/ny; } nx = 2.5/nx; } return 0; } //Unterprogramm zur Iteration int u; int v; int z; int w; int uneu; int vneu; int nn; double niter(double x,double y) { for (int i = 1; i <= 200; i++) { w = z; for (u = -2.0; u <= 1.25;) { for (v = -1.25; v <= 1.25;) { uneu = u*u - v*v + x; vneu = 2*u*v + y; if(uneu^2 + vneu^2 > 4){i = nn; break;} u = uneu; v = vneu; } return nn; } } }und das steht in der konsole, wenn ich es laufen lasse:
Programm Apfelmann.cpp
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 1 (X_CreateWindow)
Value in failed request: 0x0
Serial number of failed request: 7
Current serial number in output stream: 15weiß jmd, was da los ist?
wäre für hilfe sehr danbar!
lg
Dharma
-
Erstmal: Das Programm ist ein Krampf - globale Variablen, aber dann ein lokal definierter Funktions-Prototyp.
Zweitens:
for (nx = 0; nx <= 500;) { for (ny = 0; ny <= 500;) { niter(x,y); fenster.SetColor(1. - nn/(30.0)); fenster.DrawPoint(nx, ny); ny = 2.5/ny; } nx = 2.5/nx; }Diese Schleife dürfte dir recht bald mit einem "Division by Zero" um die Ohren fliegen - ny wird mit 0 initialisiert und dann dividierst du 2.5 durch ny.
Drittens: Schränke bitte etwas feiner ein, wo es kracht - entweder per Debugger oder zur Not indem du nach jeder Anweisung eine Statusmeldung an cerr sendest.
-
if(uneu^2 + vneu^2 > 4){i = nn; break;}Bist du sicher, dass du hier nicht eher uneu*uneu + vneu*vneu haben willst?
Weil ^ ist der bitweise xor-Operator.