003
02.01.2004, 14:58 Uhr
~Lumina
Gast
|
@ Windalf:
Ja, ich spiele auf deine Rätsel an. Ich habe auch vor allem Probleme mit der Matrixübergabe, d.h. es steht am Ende immer irgendwie 0 drin. Ich weiß, dass dabei nur die Adresse übergeben wird und dann die Werte an der übergebenen Adresse geändert werden. In der FH haben wir so etwas ähnliches mit Matrixaddition programmiert. Da hat es komischerweise gefunzt.
ich habe eine Headerdatei:
C++: |
# include <stdio.h> # include <conio.h> # include <stdlib.h>
void MatrInv(int Rang, int mat[10][10], int matrixkosy[100]); void DetBer(); void LoesLinGS();
void MatrEingabe(int Rang, int mat[10][10], int matrixkosy[100]);
|
das ist meine Funktionssammlung:
C++: |
# include "Fkt_Sammlung.h"
/****************************************************************/ /* Funktion: DetBer */ /* Zweck: Berechnung der Determinante einer Matrix */ /* */ /****************************************************************/
void DetBer() { printf(" Determinante berechnen!"); getch(); }
/****************************************************************/ /* Funktion: LoesLinGS */ /* Zweck: Loesung eines linearen Gleichungssystems */ /* */ /****************************************************************/
void LoesLinGS() { printf(" Lineares Gleichungssystem loesen!"); getch(); }
/****************************************************************/ /* Funktion: MatrInv */ /* Zweck: Bildung der Inversen einer Matrix */ /* */ /****************************************************************/
void MatrInv(int Rang, int mat[10][10], int matrixkosy[100]) { int UntDet1, UntDet2, UntDet3; int Determinante;
printf("%d", matrixkosy[1]); printf("%d", matrixkosy[2]); printf("%d", matrixkosy[3]); printf("%d", matrixkosy[4]); printf("%d", matrixkosy[5]); printf("%d", matrixkosy[6]); printf("%d", matrixkosy[7]); printf("%d", matrixkosy[8]); printf("%d", matrixkosy[9]);
UntDet1 = matrixkosy[5] * matrixkosy[9] - matrixkosy[6] * matrixkosy[8]; UntDet2 = matrixkosy[1] * matrixkosy[9] - matrixkosy[3] * matrixkosy[7]; UntDet3 = matrixkosy[1] * matrixkosy[5] - matrixkosy[2] * matrixkosy[4];
Determinante = matrixkosy[1] * UntDet1 - matrixkosy[2] * UntDet2 + matrixkosy[3] * UntDet3; printf("Die Determinante ist: %d", Determinante);
getch(); }
/****************************************************************/ /* Funktion: MatrEingabe */ /* Zweck: Eingabe einer Matrix zur späteren Bearbeitung */ /* */ /****************************************************************/
void MatrEingabe(int Rang, int mat[10][10], int matrixkosy[100]) { int Spalte, Zeile; int n=1;
for (Spalte = 0; Spalte < Rang; Spalte++) for (Zeile = 0; Zeile < Rang; Zeile++) { printf("%d. Zeile, %d. Spalte: ", Zeile+1, Spalte+1); //scanf("%d", &mat[Zeile][Spalte]); scanf("%d", &matrixkosy[n]); matrixkosy[n] = mat[Zeile][Spalte]; n++;
}
}
|
und schließlich mein Main:
C++: |
# include "Fkt_Sammlung.h"
const char Wahl_MatInv = '1', Wahl_DetBer = '2', Wahl_LinGlS = '3', WahlAbbruch = '4';
void main(void) { char wahl;
do { system("cls"); printf("\n Waehlen Sie aus den folgenden Alternativen:\n" " *********************************************************\n" " * *\n" " * %c) Matrixinvertierung *\n" " * %c) Determinantenberechnung *\n" " * %c) Loesung eines linearen Gleichungssystems *\n" " * %c) Abbruch *\n" " * *\n" " *********************************************************\n\n", Wahl_MatInv, Wahl_DetBer, Wahl_LinGlS, WahlAbbruch);
wahl=getch(); printf("\n");
switch(wahl) { case '1': /* Matrixinvertierung */ { int Rang; int mat[10][10]= {0}; // int Spalte, Zeile; int matrixkosy[100];
printf(" \"Matrixinvertierung\" gewaehlt\n\n" " Geben Sie den Rang/die Dimension der zu invertierenden Matrix an: "); scanf("%d", &Rang); MatrEingabe(Rang, mat, matrixkosy); MatrInv(Rang, mat, matrixkosy); /* for (Spalte = 0; Spalte < Rang; Spalte++) { for (Zeile = 0; Zeile < Rang; Zeile++) { printf("%d", UnterDetMat[Zeile][Spalte]); printf("\n"); } printf("\n"); } */ getch(); break; }
case '2': /* Determinantenberechnung */ { printf(" \"Determinantenberechnung\" gewaehlt\n\n"); DetBer(); break; }
case '3': /* Loesung eines linearen Gleichungssystems */ { printf(" \"Loesung eines linearen Gleichungssystems\" gewaehlt\n\n"); LoesLinGS(); break; }
case '4': /* Keine weiteren Aktionen. */ { printf(" Abbruch!\n\n"); break; } default: { printf("Fehlerhafte Auswahl!\n"); } } /* Ende des SWITCH */ } while(wahl!=WahlAbbruch); /* Ende der DO-WHILE-Schleife */ }
|
und wenn du damit noch was anfangen kannst, dann bitte sag mir, was da falsch läuft...
mfg Lumina Dieser Post wurde am 02.01.2004 um 15:44 Uhr von Pablo editiert. |