[C/C#/C++] C++ und PHP Lineares Gleichungssystem

Dieses Thema im Forum "Projekte / Codes" wurde erstellt von PC-Overload, 18. März 2006 .

  1. 18. März 2006
    C++ und PHP Lineares Gleichungssystem

    also ich hab neulich mit einem freund ein programm in c geschrieben, und danach in php umgecodet,damit das jeder benutzen kann, es sollte für 7. klässler und für 11. und 12. klässler interessant sein,
    da es lineare Gleichungssysteme löst...
    ein programm zur lösung der p-q-formel ist in arbeit (inzwischen fast fertig):

    http://www.tobsolution.de/mathe

    ist es immer verfügbar,

    hier ist der c beta-code vom gauß'schen algorithmus (=lineares gleichungssystem) (die letzten fehlenden schleifen usw. haben wir erst in php gefunden, deshalb müsste der code nicht 100%ig vollständig sein):
    ---------------------------------------------------------------------------------------------------------
    Code:
    #
    # Gauss'scher Algorithmus
    #
    
    # include <stdio.h>
    
    # define MAX 10
    
    
    int n,m; // n Unbekannte, m Gleichungen
    double a[MAX][MAX+1];
    
    
    static void eingabe()
    {
     int i,j;
     char str[20];
    
     m = 0;
     while( m <=0 || m > MAX )
     {
     printf( "Anzahl Gleichungen eingeben: \n" );
     fgets( str, 20, stdin );
     m = atoi( str );
     }
     n = 0;
     while( n <=0 || n > MAX )
     {
     printf( "Anzahl Unbekannter eingeben: \n" );
     fgets( str, 20, stdin );
     n = atoi( str );
     }
     for( i = 0; i < m; ++i )
     {
     for( j = 0; j < n; ++j )
     {
     printf( "Koeffizient %d von Gleichung %d eingeben: \n", j+1, i+1 );
     fgets( str, 20, stdin );
     a[i][j] = atof( str );
     }
     printf( "rechte Seite von Gleichung %d eingeben: \n", i+1 );
     fgets( str, 20, stdin );
     a[i][n] = atof( str );
     }
    }
     
    static void ausgabe()
    {
     int i,j;
    
     for( i = 0; i < m; ++i )
     {
     for( j = 0; j < n; ++j )
     printf( " %+7.2f ", a[i][j] );
     printf( " %+7.2f\n", a[i][n] );
     }
    }
    
    static void tausche_zeilen( int z1, int z2 )
    {
     int i;
     double x;
    
     for( i = 0; i <= n; ++i )
     {
     x = a[z1][i];
     a[z1][i] = a[z2][i];
     a[z2][i] = x;
     }
    }
    
    // unterhalb von "zeile" alle Werte von "spalte" auf 0 bringen
    static void dreieck( int zeile, int spalte )
    {
     int i, j;
     double x;
    
     if( a[zeile][spalte] == 0 )
     {
     for( i = zeile + 1; i < m; ++i )
     {
     if( a[i][spalte] != 0 )
     {
     tausche_zeilen( zeile, i );
     break;
     }
     }
     if( a[zeile][spalte] == 0 )
     return;
     }
     for( i = zeile + 1; i < m; ++i )
     {
     x = a[i][spalte] / a[zeile][spalte];
     for( j = 0; j <= n; ++j )
     a[i][j] = a[i][j] - a[zeile][j] * x;
     }
    }
    
    // "zeile" umformen, "spalte" auf 1 bringen 
    static void einsen( int zeile, int spalte )
    {
     int i;
     double x;
    
     if( a[zeile][spalte] == 0 )
     return;
     
     x = a[zeile][spalte];
     for( i = 0; i <= n; ++i )
     a[zeile][i] = a[zeile][i]/x;
    }
    
    // oberhalb von "zeile" alle Werte von "spalte" auf 0 bringen
    static void diagonale( int zeile, int spalte )
    {
     int i, j;
     double x;
    
     if( a[zeile][spalte] == 0 )
     return;
     
     for( i = zeile - 1; i >= 0; --i )
     {
     x = a[i][spalte] / a[zeile][spalte];
     for( j = 0; j <= n; ++j )
     a[i][j] = a[i][j] - a[zeile][j] * x;
     }
    }
    
    
    
    main()
    {
     int i,j;
    
     eingabe();
     printf( "\n\neingegebene Werte:\n" );
     ausgabe();
    
    // Dreiecksgestalt erzeugen
     if( m <= n )
     j = m - 1;
     else
     j = n;
     for( i = 0; i < j; ++i )
     dreieck( i, n - i - 1 );
     printf( "\n\nWerte nach dreieck():\n" );
     ausgabe();
    
    // Diagonale auf 1 bringen
     if( m <= n )
     j = m;
     else
     j = n;
     for( i = 0; i < j; ++i )
     einsen( i, n - i - 1 );
     printf( "\n\nWerte nach einsen():\n" );
     ausgabe();
    
    // Diagonalgestalt erzeugen
     if( m <= n )
     j = m;
     else
     j = n;
     for( i = j; i >= 1; --i )
     diagonale( i, n - i - 1 );
     printf( "\n\nWerte nach diagonale():\n" );
     ausgabe();
    
    // Ergebnis pruefen, ausgeben
    
    }
    ---------------------------------------------------------------------------------------------------------------
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.