/* 3. Gegeben seien n Meßwerte ti und Ui mit ti = 0, 1, ..., n-1 und Ui in
Form von nicht ganzzahligen Zufallszahlen zwischen 0 und 10,
n ist einzulesen und <100.
Zu berechnen sind die Koeffizienten der Ausgleichsgeraden U = a*t + b wobei
a = DA/D und
b = DB/D ist, mit
DA= n*S(ti*Ui) - S(ti)*S(Ui),
DB=S(ti2)*S(Ui) - S(ti)*S(ti*Ui),     D=n*S(ti2) - S(ti)*S (ti),
jeweils über alle i = 1 . . n summiert.
Verwenden Sie dazu je eine Funktion zur Berechnung einer Summe aus n Summanden
und eine zur Berechnung einer Summe aus n Produkten von je 2 Faktoren!
------------------------------------------------------------------------------*/
#include <stdlib.h>
#define  anzmax 100
float sum( int anz, float feld[])
{ int i; float s=0;
  for( i=0; i<anz; i++) s= s+ feld[i];
  return s;
}
float prodsum( int anz, float a[], float b[])
{ int i; float s=0;
  for( i=0; i<anz; i++) s= s+ a[i] * b[i];
  return s;
}
int main()
{ float u[anzmax], t[anzmax], a, b, d, da, db;
  int i, n;
  printf("\n Anzahl der Messwerte (max. %i): ", anzmax);
  scanf("%i", &n);  if( n>anzmax) n=anzmax;
  for( i=0; i<n; i++){ t[i]= i;
                       u[i]= rand()/327.67;
                       printf(" t=%f, U=%f\n", t[i], u[i]);
                     }
   da= n* prodsum( n, t, u) - sum( n, t) * sum( n, u);

   db= prodsum( n, t, t)* sum( n, u) - sum( n, t) * prodsum( n, t, u);

   d = n* prodsum( n, t, t) - sum( n, t)*sum( n, t);

   if( d!=0)
   { a= da/d;
     b= db/d;
     printf("\n Ausgleichsgerade: U= %f*t + %f\n", a, b);
   }
   else printf("\n Keine Gerade! \n");
  printf("\n\n"); system("PAUSE");  return 0;
}
