000
22.12.2008, 15:03 Uhr
~JAY123
Gast
|
Hallo, ich studier Maschinenbau im ersten Semester und bin mit Informatik total überfordert. Ist für jemanden der erst 5 Vorlesungen und 4 Seminare C++ hatte einfach nicht lösbar.
Unser Professor hat uns ein Rahmenprogramm vorgelegt. Was nach unserer Erweiterung ein Lineares Gleichungssystem mit dem Gauß-Algorithmus lösen soll. Die Beschreibung und das Rahmenprogramm von unserem Professor findet ihr in der PDF.
Ich hoff es findet sich jemand. Da die Sache doch Recht anspruchsvoll ist. Wichtig wäre das, dass Rahmenprogramm weitgehend unangetastet bleibt und nur an den von unserem Prof mit dem vielsagenden Wort "Aufgabe" markierten Stellen erweitert wird.
Bräuchte das Programm bis zum 5.1.2009.
Kontakt ist über ICQ 468062448 oder Skype "Hans Maulwurf" möglich.
Ciao Martin
C++: |
// LGS.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. //
#include "stdafx.h" #include <stdio.h> #include <math.h>
/* Dieses Programm soll nur als Uebung dienen. Ein wesentliches Problem ist das anlegen von Speicher (new) ohne dass dieses wieder glöscht wird. Damit der Code aber einigermaßen übersichtlich bleibt und dennoch LGS variabler Größe gelöst werden können, wurden diese Mängel in Kauf genommen. */
int n; /* Hier darf ausnahmsweise eine globale Variable stehen. In objektorientierter Programmierung kann (und solte) diese beseitigt werden */
struct vector { float *elems; }; struct matrix { float **elems; }; void MatEin(matrix &A){ for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { printf("A[%d][%d] = ",i,j); scanf("%f",&A.elems[i][j]); } } vector InitVector(int n) { vector v; v.elems = new float[n]; return v; } matrix InitMatrix(int n) { matrix m; m.elems = new float*[n]; for (int i = n; i--; ) { m.elems[i] = new float[n]; } return m; } void MatAus(const matrix A){ for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) printf("%8.4f\t",A.elems[i][j]); printf("\n"); } printf("\n"); } void VecEin(vector &v){ for (int i = 0; i < n; i++) { printf("b[%d] = ",i); scanf("%f",&v.elems[i]); } } void VecAus(const vector v){ for (int i = 0; i < n; i++) printf("%8.4f\n",v.elems[i]); } void LGSAus(const matrix A, const vector b) { printf("\332"); for (int i = 0; i < n; i++) printf(" "); printf("\277 \332 \277\n"); for (int i = 0; i < n; i++) { printf("\263"); for (int j = 0; j < n; j++) printf("%9.4f " ,A.elems[i][j]); if (i == (n/2)) printf("\263 \372 x = \263%9.4f \263\n",b.elems[i]); else printf("\263 \263%9.4f \263\n",b.elems[i]); } printf("\300"); for (int i = 0; i < n; i++) printf(" "); printf("\331 \300 \331\n"); } int Pivot(const matrix A,int i, int j){ // liefert die Zeile des Pivt-Elements ab der i-ten Zeile in der j-ten Spalte // Aufgabe } matrix P(int i, int j) { // Permutationsmatrix welche die i-te und j-te Zeile vertauscht matrix H = InitMatrix(n); // Aufgabe return H; } matrix G(matrix A, int j) { matrix H = InitMatrix(n); //Aufgabe return H; } matrix L(matrix A, int j) { matrix H = InitMatrix(n); //Aufgabe return H; } // Überladene Operatoren matrix operator*(const matrix A, const matrix B) { matrix C = InitMatrix(n); // Aufgabe return C; } vector operator*(const matrix A, const vector b) { vector c = InitVector(n); // Aufgabe return c; }
int _tmain(int argc, _TCHAR* argv[]) { printf("Größe des Gleichungssystems > "); scanf("%d",&n); matrix A = InitMatrix(n), AProbe = InitMatrix(n); vector b = InitVector(n), bProbe = InitVector(n); MatEin(A); AProbe = A; VecEin(b); LGSAus(A,b); system("PAUSE"); // Obere Dreicksmatrix for(int j = 0; j < n; j++) { int i = Pivot(A,j,j); A = P(j,i)*A; MatAus(P(j,i)); MatAus(A); b = P(j,i)*b; b = G(A,j)*b; MatAus(G(A,j)); A = G(A,j)*A; MatAus(A); system("PAUSE"); } // Diagonalisierung for(j = n; j--;) { b = L(A,j)*b; A = L(A,j)*A; MatAus(A); system("PAUSE"); } LGSAus(A,b); printf("Jetzt noch die Probe A \372 x = \n"); bProbe = AProbe*b; VecAus(bProbe); system("PAUSE"); return 0; }
|
|