Gaußscher Algorithmus



  • Hallo Liebe Leute,

    ich bin Student der Fachrichtung Schiffsbetriebstechnik und wir sollen als Hausarbeit ein Programm mit C++ erstellen. Da unser Dozent nicht wirklich eine Hilfe ist habe ich große Schwierigkeiten und erhoffe mir hier Hilfe.

    Ich möchte zu folgendem Programm ein Struktogramm erstellen. Könnte mir da jemand behilflich sein?

    Danke, Bonjasky..........

    /--------------------------------------------------/
    /* Aufgabe : Gaußscher Algorithmus zur Lösung */
    /* Linearer Gleichungssysteme (n Gleich- /
    /* -ungen mit n Unbekanten) /
    /
    --------------------------------------------------
    /
    /* */
    /* Eingabe: Anzahl der Gleichungen */
    /* Koeffizienten des Gleichungssystems */
    /* (zeilenweise) */
    /* Ausgabe: Gestaffeltes System der Gleichungen /
    /* Lösungsvektor mit n Lösungen X1 bis Xn /
    /
    --------------------------------------------------
    /
    #include <iostream.h>
    #include <conio.h>
    #include <stdio.h>
    #include <iomanip.h>
    #include <math.h>

    void gauss(double a[][12], int n);
    void loes(double a[][12], int n, double l[]);

    int main(void)
    {
    double a[11][12], l[11];
    int n, i, j;
    /*
    n = 4;
    a[1][1] = 1; a[1][2] = -3; a[1][3] = 1.5; a[1][4] = -1; a[1][5] = -10.4;
    a[2][1] = -2; a[2][2] = 1; a[2][3] = 3.5; a[2][4] = 2; a[2][5] = -16.5;
    a[3][1] = 1; a[3][2] = -2; a[3][3] = 1.2; a[3][4] = 2; a[3][5] = 0;
    a[4][1] = 3; a[4][2] = 1; a[4][3] = -1; a[4][4] = -3; a[4][5] = -0.7;
    */
    cout<<"-- Gausscher Algorithmus zur Loesung Linearer Gleichungssysteme --";
    cout<<endl<<endl;
    /* Eingaben */
    cout << "Anzahl der Gleichungen > ";
    cin >> n;
    cout << endl;
    for(i = 1; i <= n; i = i + 1)
    for(j = 1; j <= n + 1; j = j + 1)
    {
    cout<<"Koeffizient ["<<i<<"]["<<j<<"] > ";
    cin >> a[i][j];
    }

    /* Gauásches Eliminationsverfahren */

    gauss(a, n);
    cout << "\nGestaffeltes System der Gleichungen: ";
    for(i = 1; i <= n; i = i + 1)
    {
    cout << endl;
    for(j = 1; j <= n+1; j = j + 1)
    cout << setw(8)<<fixed<<setprecision(2)<< a[i][j];
    }
    /* Ausgabe des Lösungsvektors */
    loes(a, n, l);
    cout <<"\n\nLoesungsvektor: ";
    for(i = 1; i <= n; i = i + 1)
    cout <<"\nX"<< i <<" = "<<setw(7)<<fixed<<setprecision(4)<<l[i];
    cout << "\n\nEnde <Taste>";
    getch();
    return (0);
    }

    /* Gauásches Eliminationsverfahren zur Lösung linearer Gleichungssysteme */
    void gauss(double a[][12], int n)
    {
    int i, j, s;
    double fak, vek[12];

    /* Schleife über die Zeilen (Gleichungen) 2 bis n */
    for(s = 2; s <= n; s = s + 1)
    {
    /* Schleife über die noch nicht eliminierten Zeilen */
    for(i = s; i <= n; i = i + 1)
    {
    /* Faktor berechnen: -a21/a11, -a31/a11, ..., -a32/a22, ... */
    if(a[s-1][s-1] == 0)
    cout <<"\nGleichungssystem nicht lösbar ";
    fak = -(a[i][s-1] / a[s-1][s-1]);
    /* Zeile 1 * Faktor zu Zeile 2 addieren, u.s.w. */
    for(j = s-1; j <= n + 1; j = j + 1)
    {
    vek[j] = a[s-1][j] * fak;
    a[i][j] = a[i][j] + vek[j];
    }
    }
    }
    }

    /* Sukzessive Bestimmung der Unbekannten */
    void loes(double a[][12], int n, double l[])
    {
    int i, j, s, typ;
    double sum;

    for(i = n; i >= 1; i = i - 1)
    {
    sum = 0;
    for(j = 1; j <= n; j = j + 1)
    if(j != i) sum = sum + a[i][j];
    sum = a[i][n+1] - sum;
    if(a[i][i] == 0)
    {
    typ = 0;
    for(i = 1; i <= n; i = i + 1)
    if(a[i][n+1] != 0) typ = 1;
    if(typ == 0) cout<<"\nUnendlich viele Lösungen";
    if(typ == 1) cout<<"\nGleichungssystem nicht lösbar";
    }
    l[i] = sum / a[i][i];
    for(s = n - 1; s >= 1; s = s - 1)
    a[s][i] = a[s][i] * l[i];
    }
    }



  • Zuerst mal den Code in Tags packen...
    http://c-plusplus.net/forum/viewtopic.php?t=39411



  • Kann mir kaum vorstellen, das sich jemand die Mühe macht.

    Im www findest du jedoch fertige Struktogramme ohne ende, z.B. hier
    http://www.luk-korbmacher.de/Schule/Wissen/gauss.htm
    Da das Vorgehen beim Gaußschen Algorithmus prinzipiell stets das gleiche ist, dürftest du damit wohl kaum etwas falsch machen.



  • Ich machs für Bares! Bei Interesse überweis mir....80€!


Anmelden zum Antworten