Problem mit einem Array
-
Hi,
ich hab folgende Funktion geschrieben, die mir eine Transformationsmatrix berechnen soll. Dazu werden zwei Zahlen übergeben, zwei weitere aus globalen Variablen verwendet. Hier der code:
void calcTrans (int x, int y) { printf("%d %d\n",x,y); float *dest = new float[9]; float *tobeinv = new float[9]; dest[0]=0; dest[1]=xres/2; dest[2]=xres; dest[3]=yres; dest[4]=yres/2; dest[5]=0; dest[6]=1; dest[7]=1; dest[8]=1; tobeinv[0]=0; tobeinv[1]=x/2; tobeinv[2]=x; tobeinv[3]=y; tobeinv[4]=y/2; tobeinv[5]=0; tobeinv[6]=1; tobeinv[7]=1; tobeinv[8]=1; for (int i = 1;i < 10;i++) { printf("%d\t",dest[i-1]); if ( i%3 == 0 ) printf("\n"); } for (int i = 1;i < 10;i++) { printf("%d\t",tobeinv[i-1]); if ( i%3 == 0 ) printf("\n"); } trans = mmult(dest,inverse(tobeinv)); for (int i = 1;i < 10;i++) { printf("%d\t",trans[i-1]); if ( i%3 == 0 ) printf("\n"); } }Die for-Schleifen dienen der Ausgabe. Mein Problem ist jetzt, dass ich da immer 0 (für jedes Arrayelement) bekomme.
Ich fürchte, dass das ein Problem ist, das schon 1000 mal in den FAQs beantwortet wirde, aber entweder bin ich im Moment zu verbohrt, oder einfach zu dämlich da eine Lösung zu finden. An der nicht benutzten SuFu liegts nicht.
-
Wenn du schon mit printf() arbeitest, dann nimm bitte auch die richtigen Format-Kennungen - double (und float) Werte werden mit %e/%E (wissenschaftlich), %f ("normal") oder %g/%G (je nach Ausgabelänge) ausgegeben.
(aber nachdem du im C++ Board gelandet bist - nimm lieber cout für die Ausgaben, das erkennt selber den richtigen Typ)
-
Bei welchem Array erhältst du immer nur Nullen?
Und von welchen Datentyp sind die globalen Variablen 'xres' und 'yres' (globale Variablen sind böse!)
Außerdem: was ist 'trans' und sind die Funktionen 'mmult' und 'inverse' von dir selbst erstellt?Und du solltest den Speicher wieder am Ende freigeben bzw. gleich ein lokales Array benutzen.
In C++ solltest du außerdem 'cout' benutzen...An der nicht benutzten SuFu liegts nicht.
Super Spruch

-
Danke CStoll! dachte nicht, dass es sogar ein soooo dummer Fehler ist.
float zahl=10.0; printf("%d",zahl); // gibt 0 aus printf("%f",zahl); // gibt 10.000000 ausBei den Ausgaben handelt es sich "nur" um Debugausgaben. Da ich vor C++ Java programmiert hab, ging mir das printf schneller von der Hand als cout - werd mir aber nach dieser Erfahrung bei jedem printf auf die Finger klopfen

-
Alles eine Frage der Gewohnheit - ich finde
cout<<zahl;eleganter alsprintf("%f",zahl);. (und vor allem muß man sich bei cout nicht mehr damit beschäftigen, ob man nun die korrekte Formatkennung angegeben hat)