#include #include #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; }