019
04.01.2004, 14:09 Uhr
~Lumina
Gast
|
Ich weiß, dass copy und paste nicht das Wahre ist, aber ich muss erst mal weiter kommen, hab momentan sowieso den vollen Brummschädel... sollte eigentlich im Bett bleiben.
Hab leider noch ein Problem... also ich will ja nicht nur eine Matrixdeterminante berechnen, sondern diese vom Benutzer eingeben lassen, möglichst nach Zeilen und Spalten sortiert. Das Problem dabei ist, dass dann immer dieselbe Ausgabe erzeugt wird. Wenn ich die Matrix fest vorgebe, funzt alles perfekt, zumindest soweit ich bin.
Meine Headerdatei sieht nun so aus:
C++: |
# include <stdio.h> # include <conio.h> # include <stdlib.h> # include <malloc.h>
void MatrInv(); double Det(double*matrix, int Rang); void LoesLinGS(); void EingabeDerMatrix(double mat[100], int Rang);
|
Die Funktion für die Eingabe der Matrix so:
C++: |
void EingabeDerMatrix(double*matrix, int Rang) { int Spalte, Zeile; int n=0;
for (Spalte = 0; Spalte < Rang; Spalte++) for (Zeile = 0; Zeile < Rang; Zeile++) { printf("%d. Zeile, %d. Spalte: ", Zeile+1, Spalte+1); scanf("%f", &matrix[n]); n++; } }
|
Hier soll die Determinante berechnet werden:
C++: |
double Det(double*matrix, int Rang) { double*h,r=matrix[0]*matrix[3]-matrix[1]*matrix[2]; int i, j, k, x = Rang-1, b = 1; if(Rang-2) { r = 0; for(i = -1; ++i<Rang; b = -b) { h=(double*)malloc(x*x*sizeof(double)); for(j=0; j<x; j++) for(k=0;k<x;k++) h[k+j * Rang-j] = matrix[(k<i?0:1) + Rang + k + j*Rang]; r+= b * matrix[i] * Det(h,x); free(h); } } return r; }
|
und schließlich der Ausschnitt aus meinem main:
C++: |
case '2': /* Determinantenberechnung */ { int Rang; double mat[100];
//double mat[]={1,2,-2, 1,2,1, -1,3,1}; // später weg!!
printf(" \"Determinantenberechnung\" gewaehlt\n\n" " Geben Sie den Rang/die Dimension der Matrix an, von der die" " Determinante\n berechnet werden soll: "); scanf("%d", &Rang);
EingabeDerMatrix(mat, Rang);
printf("\n Die Determinante der Matrix ist: %f", Det(mat,Rang)); getch(); break; }
|
wenn ich die Funkton Det mit dem auskommentierten "double mat..." verwende, liefert sie mir das richtige Ergebnis. Also: Der Fehler liegt wohl an der Eingabefunktion. Nur, wo?
Und noch was: Warum packt C keine const char bei mir? |