Liebe Experten,
ich habe ein paar doofe Fragen zu stellen, da ich noch Neuling unter C++ bin, aber gerne und dringend ein kleines Programm beenden möchte.
Frage N°1)
Wie kann ich ein Array während des Programmablaufs dimensionieren?
Bsp.: Ich errechne während des Programms, daß mein Array genau 2500 Felder hat. Wie weise ich sie ihm dann zu?
Konkret:
Ich habe es so versucht, aber das funktioniert nicht:
double Rmoeg[AnzRmoeg];
beziehungsweise
double R[10][AnzRmoeg];
Frage N°2)
Warum funktioniert folgender Quelltext nicht und wie kann ich ihn funktionierend machen?
for(i=0; i’=’ : ‚double‘ kann nicht in ‚double [1]‘ konvertiert werden. Es gibt keine Konvertierungen von Feldtypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Felder gibt
So, jetzt ist mein Fragenkontingent für’s erste erschöpft. Ich wäre Euch sehr dankbar, wenn Ihr mir helfen könntet.
Viele Grüße
Bernhard Krämer
P.S: Falls jemand an meinem billigen Programm interessiert sein sollte, hier der gesamte, bisher geschriebe Quelltext. Der Sinn des Programms ist eine (noch zu programmierende) Iteration. Darüber habe ich im VB-Brett bereits etwas geschrieben, als ich das Programm noch unter VB programmieren wollte.
#include
#include
using namespace std;
double Rmin, Rmax, Cmin, Cmax;
double b[4];
int ER, EC;
int AnzRmoeg, AnzCmoeg;
double Minimum, Maximum;
void Init(void);
void Wertezuweisung(void);
void Rechnung(void);
void Init(void) {
Rmin = 50; Rmax = pow(10,6);
Cmin = 50; Cmax = 100;
ER = 24; EC = 12;
b[3] = -1.21354*pow(10,-18);
b[2] = -2.62549*pow(10,-13);
b[1] = -8.81737*pow(10,-8);
b[0] = -0.01;
Minimum = pow(10,20); Maximum = pow(10,-20);
}
void Wertezuweisung(void) {
double Hilfe1;
bool Hilfe2;
int i, j;
int Anzahl;
Hilfe1 = pow(10,floor(log10(Rmin))); //Hilfe1 entspricht dem Anfangswert der Dekade, in der sich Rmin befindet. Z.B. Rmin = 123 -> Hilfe1=100, Rmin = 0,05 -> Hilfe1 = 0,01
AnzRmoeg = ceil((log10(Rmax+1)-log10(Rmin))*ER); //detektiert die exakte Anzahl der möglichen Widerstandswerte
i = 0;
Hilfe2 = false;
double Rmoeg[AnzRmoeg];
while(Hilfe2 = false) {
Rmoeg[i] = pow(10, i/ER)*Hilfe1; //weist Rmoeg[i] einen Widerstandswert zu
//WICHTIG! HIER AUF max. 2 NACHKOMMASTELLEN RUNDEN!!
if(Rmoeg[i] >= Rmin) i++; //Wenn Rmoeg[i] unterhalb des gewünschten Bereiches liegt, wird die Variable i nicht inkrementiert -> Rmoeg[i] wird beim nächsten Schleifendurchgang mit dem nächsthöheren Widerstandswert überschrieben.
if(Rmoeg[i] > Rmax) Hilfe2 = true; //Wenn Rmoeg[i] überhalb des gewünschten Bereiches liegt, wird die Schleife beendet. Achtung: i ist 1 zu groß, weil hier der Widerstand schon überm Rmax steht.
}
Hilfe1 = pow(10,floor(log10(Cmin))); //Hilfe1 entspricht dem Anfangswert der Dekade, in der sich Rmin befindet. Z.B. Rmin = 123 -> Hilfe1=100, Rmin = 0,05 -> Hilfe1 = 0,01
AnzCmoeg = ceil((log10(Cmax+1)-log10(Cmin))*EC); //detektiert die exakte Anzahl der möglichen Kapazitätswerte
i = 0;
Hilfe2 = false;
double Cmoeg[AnzCmoeg];
while(Hilfe2 = false) {
Cmoeg[i] = pow(10, i/EC)*Hilfe1; //weist Cmoeg[i] einen Kapazitätswert zu
if(Cmoeg[i] >= Cmin) i++; //Wenn Cmoeg[i] unterhalb des gewünschten Bereiches liegt, wird die Variable i nicht inkrementiert -> Rmoeg[i] wird beim nächsten Schleifendurchgang mit dem nächsthöheren Widerstandswert überschrieben.
if(Cmoeg[i] > Cmax) Hilfe2 = true; //Wenn Cmoeg[i] überhalb des gewünschten Bereiches liegt, wird die Schleife beendet. Achtung: i ist 1 zu groß, weil hier der Widerstand schon überm Rmax steht.
}
double R[10][AnzRmoeg];
for(i=0; i