marcoshuck icon

Archivos y cadenas

marcoshuck | PRO | 11/01/13 01:33:13 AM UTC | 0 ⭐ | 399 👁️ | Never ⏰ | []
C |

2.89 KB

|

None

|

0 👍

/

0 👎

#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