Problem mit Methode!
-
Hallo zusammen,
ich habe folgendes Problem. Ich habe eine Mehthode (Vradial), die mir mittels einer Formel Werte ausrechnet und diese mit return zurückgibt. Eine weitere Methode (Table 3) erstellt dann eine Wertetabelle, in dem ich dort Vradial in eine for - Schleife setzte. Nun möchte ich, dass bei der for-Schleife in bestimmten Schritten aufgezählt wird. Dazu habe ich eine weitere Methode erstellt, die ich h__inkrement genannt habe. Diese soll einfach den Inkrementwert zurückgeben. So sieht das aus:float __fastcall TCelirity::h__inkrement (int R) { int h, ymax; ymax = pow(pow(RGalax,2) - pow(R,2), 0.5); h = ymax / 10; return h; //h ist der Inkrementwert, der hier zurückgegeben wird!!! } //---------------------------------------------------------------------- float __fastcall TCelirity::VRadial (int i) { // i = y R = 15; h__inkrement (R); // hier wird dann die Methode "angwandt" Rq = pow(pow(R,2)+ pow(i,2),0.5) / i; Vrad = V1 (12) * Rq - V1 (15) * R/i; return Vrad; } //--------------------------------------------------------------------------- void __fastcall TCelirity::Table3 (TStringGrid *grid) { grid->Cells[0][0] = "--------------------"; grid->Cells[1][0] = "Wert Vrad"; for (float i = 1; i < 15; i+=h) // hier ist h unbekannt, was auch eigentlich { // logisch ist, aber wie mache ich es bekannt? VRadial (i); grid->Cells[0][i] = "y = " + FloatToStr (i); grid->Cells[1][i] = FloatToStrF (Vrad, ffNumber, 8, 2); } }
Ich habe überlegt h__inkrement erst in der Mehode Table 3 "anzuwenden", doch geht das nicht, weil dann R unbekannt ist!! Könnt ihr mir helfen??
Ich hoffe ihr versteht mein Problem
Vielen Dank
lg, freakC++
-
irgendwie hast du den Sinn von "return" immernoch nicht verstanden, denn auch in den Zeilen 19/28/30 wird der eigentliche Verwendungszweck schlicht ignoriert und du verwendest stattdessen eine globale bzw. übergeordnete Variable.
int __fastcall TCelirity::h__inkrement (int R) { int h, ymax; ymax = pow(pow(RGalax,2) - pow(R,2), 0.5); h = ymax / 10; return h; } //---------------------------------------------------------------------- float __fastcall TCelirity::VRadial (int i, int R) { float Vrad; Rq = pow(pow(R,2)+ pow(i,2),0.5) / i; Vrad = V1 (12) * Rq - V1 (15) * R/i; return Vrad; } //--------------------------------------------------------------------------- void __fastcall TCelirity::Table3 (TStringGrid *grid) { grid->Cells[0][0] = "--------------------"; grid->Cells[1][0] = "Wert Vrad"; int R = 15; int h = h__inkrement(R); for (float i = 1; i < R; i+=h) { float VRad = VRadial(i,R); grid->Cells[0][i] = "y = " + IntToStr (i); grid->Cells[1][i] = FloatToStrF (VRad, ffNumber, 8, 2); } }
so sollte das funktionieren.
Warum ist ein Increment bei dir vom Typ float?
-
Hey,
vielen Dank für die rasche Antwort. Ok, mir wurde hier ja schon eingebläut, dass ich globale Variabeln verwenden soll, aber ich denke, dass wenn diese immer wieder auftauchen (ich hab ja nur einen Programmausschnitt gezeigt), sollten doch diese auch global sein?Wofür wäre dann eine solche Vereinbarung überhaupt gut? In jedem Buch/Tutorial, das ich bis jetzt gemacht habe, wird fast nur mit globalen Variabeln gearbeitet!! Ich versuche zwar auch lokal zu bleiben, aber warum nicht global wenn die Variabel immer wieder kommt??
Vielen Dank
lg, freakC++
-
-
-
Hallo zusammen,
vielen Dank für die Links. Ich hab mir die Artikel durchgelesen (wobei ich manchmal noch Schwierigkeiten hatte alles zu verstehen). Zwar sind mir viele Punkte klar, doch leider ist mir dennoch nicht ganz verständlich, warum ich in diesem Fall hier keine globale variabel nehmen soll. Ich brauch sie doch ständig!Naja...warum ich mit float das Inkrement vereinbare?! Es handelt sich halt um keine ganze Zahl - ganz einfach! Man sieht das ja auch an der Rechnung, in der h erstellt wird. Es muss ja eigentlich eine Dezimalzahl herauskommen.
Vielen Dank
lg, freakC++
-
wenn du ein float als Ergebnis haben willst sollten deine internen Variablen aber auch float sein. Dein Rechnung ist auch arg umständlich. pow ist eine der langsamsten Funktionen die es gibt. Dabei brauchst du sie gar nicht.
int __fastcall TCelirity::h__inkrement (int R) { float ymax = sqrt(RGalax * RGalax - R * R); // was für ein Typ ist RGalax? return ymax / 10.0; }
etc.
-
Jo, der Fehler ist mir dann auch aufgefallen. Ich werde dann sqrt nutzen! Naja...und soviel wie möglich auch globale Variabeln^^
Vielen Dank
lg, freakC++
-
Also freakC++,
nochmal so, dass du es evtl. verstehst: Versuche die Verwendung von GLOBALEn VARIABLEN zu VERMEIDEN BZW. so GERING wie möglich zu HALTEN!!!!
MfG
-
Alles klar!
Das sollte deutlich genug gewesen sein!lg, freakC++