/* loes1-37.c
   Loesung der Aufgabe 1-37 (1-35) */


#include <stdio.h>
#include <math.h>

int geradengleichung (float x1, float y1, float x2, float y2,
float *k, float *d)   /*
----------------------------------------------------------------
ermittelt aus zwei Punkten mit den Koordinaten x1,y1 und x2,y2
die Gleichung der Geraden y = k*x + d durch die zwei Punkte.
Falls x1 und x2 sich um weniger als 1E-6 unterscheiden, ist das
Resultat der Funktion 0 (Fehlerfall), sonst 1
---------------------------------------------------------------*/
{
  if ( fabs ( x2 - x1 ) < 1E-6 ) return 0;

    *k = (y2-y1)/(x2-x1);
    *d = y2 - *k * x2;
    return 1;
}


int main(void)
{
  float x1, y1, x2, y2, k, d;
  FILE *f;

  f = fopen("geradgl.out","w");

  /* Auf die Datei geradgl.out werden die Resultate zusaetzlich
     protokolliert, siehe Kap. 1.8 zur Arbeit mit Dateien */

  printf("%s%s",
    "Gleichung einer Geraden ermitteln\n",
    "Programm beenden mit Koordinaten x = y = 0 fuer Punkt 1!\n");

  do {
    printf("\n\nPunkt 1: x  y = "); scanf("%f %f", &x1, &y1);
    printf("Punkt 2: x  y = "); scanf("%f %f%*c", &x2, &y2);
    if (geradengleichung(x1, y1, x2, y2, &k, &d)) {
      printf(   "y = %8.3f*x %+-8.3f\n", k, d);
      fprintf(f, "y = %8.3f*x %+-8.3f\n", k, d); }
    else {
      printf("Die beiden Punkte sind identisch oder senkrechte Gerade durch x = %8.2f\n", x1);
      fprintf(f, "Die beiden Punkte sind identisch oder senkrechte Gerade durch x = %8.2f\n", x1); }
   } while (x1 != 0.0 || y1 != 0.0);

   fclose(f);
   printf("\nType Return to exit "); getchar();

   return 0;
}