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

typedef struct {
  float side1, side2, hyp;
} TRIANGLE;

TRIANGLE *ReadFile (int *numTrianglesPtr);

void CalcHypotenuses (TRIANGLE *triangles, int numTriangles);

void DisplayTriangles (TRIANGLE *triangles, int numTriangles);


int main () {
  int numTriangles;
  TRIANGLE *triangles;
  
  triangles = ReadFile (&numTriangles);
  CalcHypotenuses (triangles, numTriangles);
  DisplayTriangles (triangles, numTriangles);
  free (triangles);
  return 0;
}


TRIANGLE *ReadFile (int *numTrianglesPtr) {
  char fileName[80];
  FILE *str;
  int i;
  TRIANGLE *triangles;

  printf ("Enter file name: ");
  scanf ("%s", fileName);

  if ( ! (str = fopen (fileName, "r")) ) {
    printf ("Hey!  No file!\n");
    exit (-1);
  }

  fscanf (str, "%d", numTrianglesPtr);

  triangles = (TRIANGLE *) malloc (*numTrianglesPtr * sizeof (TRIANGLE));

  for ( i=0 ; i < *numTrianglesPtr ; i++ ) {
    fscanf (str, "%f %f", &triangles[i].side1, &triangles[i].side2);
  }
  fclose (str);

  return (triangles);
}

void CalcHypotenuses (TRIANGLE *triangles, int numTriangles) {
  int i;

  for ( i=0 ; i < numTriangles; i++ ) {
    triangles[i].hyp = sqrt (triangles[i].side1 * triangles[i].side1 +
			     triangles[i].side2 * triangles[i].side2);
  }
}

void DisplayTriangles (TRIANGLE *triangles, int numTriangles) {
  int i;

  for ( i=0 ; i < numTriangles ; i++ ) {
    printf ("%f %f %f\n", triangles[i].side1, triangles[i].side2,
	    triangles[i].hyp);
  }
}

