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)