#include <stdio.h>
#include <stdlib.h>
#define SIZE_RENGLON 12
/* Estructuras */
typedef struct
{
float lado_1,
lado_2,
lado_3,
sup;
} unTriangulo;
typedef struct
{
float coord_x1,
coord_y1,
coord_x2,
coord_y2,
coord_x3,
coord_y3;
} tresPuntos;
int main(int argc, char *argv[])
{
FILE * fcoords; /* Handle del archivo de coordenadas */
FILE * ftriangulos; /* Handle del archivo de los triángulos */
unTriangulo Tr; /* Sea un triangulo definido por la estructura unTriangulo */
tresPuntos Tp; /* Sean tres puntos definidos por la estructura tresPuntos */
int i, /* Contador */
size_tr; /* Tamaño del archivo de triángulos */
float perim; /* Perimetro de cada triángulo */
char tmp[SIZE_RENGLON]; /* Una cadena de caracteres que recolecta los renglones con las respectivas coordenadas */
fcoords = fopen("coordenadas.txt", "rt");
if(!fcoords)
{
printf("Error al abrir el archivo coordenadas.txt.\n");
system("PAUSE>NULL");
fclose(fcoords);
exit(-1);
}
ftriangulos = fopen("triangulos.bin", "rb+");
/* Primera parte */
while(!feof(fcoords))
{
if(fgets(tmp, SIZE_RENGLON+1, fcoords))
{
sscanf(tmp, "%f %f %f %f %f %f", &Tp.coord_x1, &Tp.coord_y1, &Tp.coord_x2, &Tp.coord_y2, &Tp.coord_x3, &Tp.coord_y3);
printf("Punto 1: %.2f %.2f | Punto 2: %.2f %.2f | Punto 3: %.2f %.2f\n", Tp.coord_x1, Tp.coord_y1, Tp.coord_x2, Tp.coord_y2, Tp.coord_x3, Tp.coord_y3);
Tr.lado_1 = sqrt(pow(Tp.coord_x1 - Tp.coord_x2, 2) + pow(Tp.coord_y1 - Tp.coord_y2, 2));
Tr.lado_2 = sqrt(pow(Tp.coord_x2 - Tp.coord_x3, 2) + pow(Tp.coord_y2 - Tp.coord_y3, 2));
Tr.lado_3 = sqrt(pow(Tp.coord_x3 - Tp.coord_x1, 2) + pow(Tp.coord_y3 - Tp.coord_y1, 2));
perim = Tr.lado_1 + Tr.lado_2 + Tr.lado_3;
Tr.sup = sqrt((perim/2) * (perim/2 - Tr.lado_1 ) * (perim/2 - Tr.lado_2 ) * (perim/2 - Tr.lado_3 ));
printf("Lado 1: %.2f. Lado 2: %.2f. Lado 3: %.2f. Superficie: %.2f.\n", Tr.lado_1, Tr.lado_2, Tr.lado_3, Tr.sup);
fwrite(&Tr, sizeof(unTriangulo), 1, ftriangulos);
printf("--------------------------------------------------------------\n");
}
}
/* Segunda parte */
printf("Mostrar resultado del archivo: (Presione una tecla para continuar).\n");
system("PAUSE>NULL");
fseek(ftriangulos, 0, SEEK_END);
size_tr = ftell(ftriangulos)/sizeof(unTriangulo);
fseek(ftriangulos, 0, SEEK_SET);
for(i = 0; i < size_tr; i++)
{
fread(&Tr, sizeof(unTriangulo), 1, ftriangulos);
printf("Lado 1: %.2f. Lado 2: %.2f. Lado 3: %.2f. Superficie: %.2f.\n", Tr.lado_1, Tr.lado_2, Tr.lado_3, Tr.sup);
}
system("PAUSE>NULL");
fclose(fcoords);
fclose(ftriangulos);
return 0;
}
Comments