fehler in einer while-schleife



  • Hallo Leute

    ich habe eine schulaufgabe ausprobiert, und bin dabie auf ein Problem gestoßen. meine "while"-schleife scheint nicht zu funktionieren. sobald ich den button drücke, hängt sich das programm auf. Kann mir jemand sagen, wo mien fehler liegt?

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    #include <math.h>
    
    #include "spirale_u.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    const int XUrsprung = 300;
    const int YUrsprung = 300;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    zf->Canvas->MoveTo(XUrsprung, 20);
    zf->Canvas->LineTo(XUrsprung, 580);
    zf->Canvas->MoveTo(20, YUrsprung);
    zf->Canvas->LineTo(580, YUrsprung);
    }
    //---------------------------------------------------------------------------
    void wandlePolarKartesisch(float r, float phi, float &x, float &y)
    {
    	y = r * sin(phi);
    	x = r * cos(phi);
    }
    //---------------------------------------------------------------------------
    void transformiereKoordinaten(float x, float y, int &xP, int &yP)
    {
    	xP = floor(x + XUrsprung + 0.5);
    	yP = floor(y - YUrsprung + 0.5);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::btnZeichneClick(TObject *Sender)
    {
    float phi, r, x, y;
    int xP, yP;
    phi = 0;
    while(phi <= 3 * M_PI)
    	{
    	r = 30 * phi;
    	wandlePolarKartesisch(r, phi, x, y);
    	transformiereKoordinaten(x, y, xP, yP);
    	zf->Canvas->Pixels[xP][yP] = clRed;
    	phi <- phi + (M_PI/100);
    	}
    }
    

    ich kann mir gut vorstellen, dass es ein leichtsinnsfehler ist, aber ich habe jetzt 6wochen ferien gehabt und finde rein gar nichts 😞

    danke schonmal im vorraus!

    Barnibas



  • phi <- phi + (M_PI/100);

    Sehr kreativ. Soll das eine Zuweisung sein? Dann doch bitte wie gehabt so:

    phi = phi + (M_PI/100);
    

    Was du geschrieben hast ist ein "kleiner als" und ein "minus". Auch wenn das in manch einer Sprache als Zuweisung benutzt wird, in C++ ist das nicht so.



  • Wie ist M_PI definiert? Ich nehme mal an, wie Π...

    phi <- phi
    

    Diese Syntax ist sehr verwirrend. Mach das unäre Minus direkt vor phi .

    Dann wirst du auch sehen, warum sich phi nicht verändert. Du hast einfach einen Ungleichungs-Ausdruck als Statement stehen. Dein Compiler sollte dir da auch eine Warnung geben, etwas wie "warning: statement has no effect".

    ~Edit: Bashar, du Bastard! Zu langsam...~ 🙂



  • wie ich gewusst hab, dass es sowas ist 😡 das kommt daher, dass unser lehrer uns unsere struktogramme immer so machen lässt. ich hab zwar immernoch ienen fehler drin, denn es acht nicht das, was es soll, aber es häng sich nicht mehr auf^^ danke für deine hilfe!



  • Sone schrieb:

    Wie ist M_PI definiert? Ich nehme mal an, wie Π...

    Ich weis nicht, das ist eine Konstante, die in "math.h" enthalten ist.

    Sone schrieb:

    phi <- phi
    

    Diese Syntax ist sehr verwirrend. Mach das unäre Minus direkt vor phi .

    Dann wirst du auch sehen, warum sich phi nicht verändert. Du hast einfach einen Ungleichungs-Ausdruck als Statement stehen. Dein Compiler sollte dir da auch eine Warnung geben, etwas wie "warning: statement has no effect".

    Ich versteh nicht ganz, was du mir damit sagen willst, aber eine warnung bekomme ich nicht!



  • Ich versteh nicht ganz, was du mir damit sagen willst

    Dasselbe wie Bashar. 🙂

    aber eine warnung bekomme ich nicht!

    Das ist ... ungünstig. Warnungen helfen dir sehr. Welchen Compiler nutzt du? VC++?



  • Sone schrieb:

    Das ist ... ungünstig. Warnungen helfen dir sehr. Welchen Compiler nutzt du? VC++?

    wo finde ich das heraus? wenn dir das was sagt: ich benutze "Turbo C++" von "Borland"



  • Barnibas schrieb:

    wo finde ich das heraus?

    Im Benutzerhandbuch deines Compilers.

    wenn dir das was sagt: ich benutze "Turbo C++" von "Borland"

    Nun ja, alles was ich finden konnte: Warn-Flags beginnen mit -w. Das nützt auch nicht viel.



  • Ich glaube nicht, dass Compilerflags an der Stelle notwendig sind. Klick mal die Einstellungsdialoge durch, bei den Compileroptionen muss es da was zum Thema Warnungen geben. Stell das Warnungslevel so hoch wie möglich, aber nur so hoch, dass du nicht mit Warnungen aus der vcl.h und anderen nicht von dir stammenden Headern erschlagen wirst.



  • Bashar schrieb:

    Stell das Warnungslevel so hoch wie möglich, aber nur so hoch, dass du nicht mit Warnungen aus der vcl.h und anderen nicht von dir stammenden Headern erschlagen wirst.

    Dazu sollte man Headersuchpfade mit einem Flag wie -isystem angeben, sodass keine Warnungen dafür generiert werden.
    Sollte auch in den Einstellungen liegen, wie Headersuchpfade an den Compiler übergeben werden. Ich lasse alle als Systemverzeichnisse angeben.



  • also laut unserem lehrer, zeigt der turbo c++ alle warnung an, die ich verursachen könnte.....ich glaube, mir wurde nichts angezeigt, weil sich das programm ja aufhängt und ich deswegen nicht auf dem "natürlichen" weg zurück in Turbo c++ gelange.

    wie dem auch sei, mein problem ist gelöst und dafür danke ich dir/euch 🙂
    gute nacht!



  • Barnibas schrieb:

    also laut unserem lehrer, zeigt der turbo c++ alle warnung an, die ich verursachen könnte

    Ich hab vor 20 Jahren schon "Statement has no effect"-Warnungen in Turbo C++ gesehen, glaube nicht, dass die das inzwischen abgeschafft haben 😉



  • Du hast also mit 13 Programmieren angefangen? Interessant.



  • Sone schrieb:

    Du hast also mit 13 Programmieren angefangen? Interessant.

    Nein mit 10, du Logiker.



  • Bashar schrieb:

    Sone schrieb:

    Du hast also mit 13 Programmieren angefangen? Interessant.

    Nein mit 10, du Logiker.

    Spätestens mit 13, hätte ich sagen sollen.



  • Turbo C++ ist ja auch uralter Schrott - kein Wunder dass du keine Warnung bekommst. Selbst eine ordentliche IDE weist dich darauf hin.



  • ich hab das nur, weil wir in der schule mit Borland c++ arbeiten und die eben ähnlich aufgebaut sind. außerdem hab ichs dadurch auch kostenlos^^und nem geschenken gaul guckt man nicht ins maul 😉



  • VS ist auch kostenlos und funktioniert wenigstens.



  • kannst du mir nen link schicken, wo ich mir das mal angucken kann?


Anmelden zum Antworten