welcome: please sign in
location: FH-Rosenheim / Programmieren_1 / Der_Gaussche_Algorithmus_in_C

Gausscher Algorithmus in C

#include "projekt.h"
#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int n;
    int status=1;
    double **a;
    double *x; 
    scan_anzahl(&n);
    a = (double **) malloc_dmatrix(&n);
    x = (double *) malloc_darray(&n);
    scan_gleichung(n,a);
    berechnung(n,a);
    unbekannte(n,a,x,&status);
    ausgabe(n,x,status,a);
    free_darray(x);
    free_dmatrix(&n, a);
    return (0);
}

#ifndef PROJEKT_H
#define PROJEKT_H

typedef enum {false, true} bool;
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

double **malloc_dmatrix(int *p_n);
double *malloc_darray(int *p_n);
void free_dmatrix(int *p_n, double **pp_dmatrix);
void free_darray(double *p_darray);
void scan_anzahl (int *p_n);
void scan_gleichung (int n, double **a);
void berechnung (int n, double **a);
void unbekannte (int n, double **a, double *x, int *p_status);
void ausgabe (int n, double *x, int status, double **a);

#endif

#include "projekt.h"

void line (int n, char c)
{
    int i;
    for (i=1; i<=n; i++)
        printf ("%c", c);
    printf ("\n");
}

void scan_anzahl (int *p_n)
{
    do
    {   
        printf ("Bitte Anzahl der Gleichungen eingeben : ");
        scanf  ("%i", p_n);
        if (0 > *p_n)
        {   
            printf ("Anzahl der Gleichungen muss groesser NULL sein!!!");
        }
        fflush (stdin);
    }
    while (0 > *p_n);
}

void scan_gleichung (int n, double **a)
{
    int i,j;
    for (i=1; i<=n; i++)
    {   
        printf ("Bitte geben Sie die Koeffizienten der %i.Gleichung ein:\n", i);
        line (54,'-');
        for(j=1; j<=n; j++)
        {   
            printf ("a[%i][%i]: ", i, j);
            scanf ("%lf", &a[i][j]);
        }
        j=n+1;
        printf ("Ergebniss der %i.Gleichung: ", i);
        scanf  ("%lf", &a[i][j]);
        line (26,'-');
    }
}

void berechnung (int n, double **a)
{
    int i,j,k,m;
    int l=1;
    for (k=1,m=1; k<=n; l++,k++,m++)
    {   
        for (i=l+1; i<=n; i++)
        {   
            for (j=n+1; j>=1; j--)
            {   
                a[i][j]= (a[k][j]*a[i][m]) - (a[k][m]*a[i][j]);
            }
        }
    }
}

void unbekannte (int n, double **a, double *x, int *p_status)
{
    int k,i,j,l;
    double summe;
    for (k=1; k<=n; k++)
    {   
        x[k]=0;
    }
    for (i=n; i>=1; i--)
    {   
        summe=0;
        for(j=1,l=n; l>=1; j++,l--)
        {   
            summe = summe + a[i][l]*x[l];
        }
        summe= a[i][j]-summe;
        if (a[i][i]==0)
        {   
            *p_status=0;
        }
        x[i]= summe / a[i][i];
    }
}

void ausgabe (int n, double *x, int status, double **a)
{
    int i,j;
    printf ("Die Ergebnisse lauten:\n");
    if (status == 0)
    {   
        printf ("Das Gleichungssystem hat keine Loesung, da ein Koeffizient 0 ist !!!");
        for (i=1; i<=n; i++)
        {   
            for (j=1; j<=n; j++)
            {   
                printf ("%+lf ", a[i][j]);
            }
            printf (" = %lf", a[i][j]);
        }
    }
    else
    {   
        for (i=1; i<=n; i++)
        {   
            printf ("x%i= %lf  ", i, x[i]);
        }
    }
    printf("\n");
}

double *malloc_darray(int *p_n)
{
    double *p_darray;
    if(NULL == (p_darray =  malloc((size_t) ((*p_n)+1) * sizeof(double))))
        return NULL;
    return p_darray;
}

double **malloc_dmatrix(int *p_n)
{
    int i;
    double **pp_dmatrix;
    if(NULL == ((pp_dmatrix) =  malloc((size_t) ((*p_n)+1) * sizeof(double *))))
        return NULL;
    for(i=0; i<=(*p_n); i++)
    {
        if(NULL == ((pp_dmatrix[i]) =  malloc((size_t) ((*p_n)+2) * sizeof(double))))
            return NULL;
    };
    return pp_dmatrix;
}

void free_darray(double *p_darray)
{
    free(p_darray);
}

void free_dmatrix(int *p_n, double **pp_dmatrix)
{
    int i;
    for(i=0; i<=(*p_n); i++)
    {
        free(pp_dmatrix[i]);
    };
    free(pp_dmatrix);
}

FH-Rosenheim/Programmieren_1/Der_Gaussche_Algorithmus_in_C (last edited 2008-07-14 09:55:41 by localhost)