marcoshuck

Archivos y cadenas

Oct 31st, 2013
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.89 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define SIZE_RENGLON 12
  5.  
  6. /*  Estructuras   */
  7. typedef struct
  8. {
  9.     float lado_1,
  10.     lado_2,
  11.     lado_3,
  12.     sup;
  13. } unTriangulo;
  14.  
  15. typedef struct
  16. {
  17.     float coord_x1,
  18.     coord_y1,
  19.     coord_x2,
  20.     coord_y2,
  21.     coord_x3,
  22.     coord_y3;
  23. } tresPuntos;
  24.  
  25. int main(int argc, char *argv[])
  26. {
  27.     FILE * fcoords; /* Handle del archivo de coordenadas */
  28.     FILE * ftriangulos; /* Handle del archivo de los triángulos */
  29.     unTriangulo Tr; /* Sea un triangulo definido por la estructura unTriangulo */
  30.     tresPuntos Tp; /* Sean tres puntos definidos por la estructura tresPuntos */
  31.     int i, /* Contador */
  32.     size_tr; /* Tamaño del archivo de triángulos */
  33.     float perim; /* Perimetro de cada triángulo */
  34.     char tmp[SIZE_RENGLON]; /* Una cadena de caracteres que recolecta los renglones con las respectivas coordenadas */
  35.    
  36.     fcoords = fopen("coordenadas.txt", "rt");
  37.     if(!fcoords)
  38.     {
  39.         printf("Error al abrir el archivo coordenadas.txt.\n");
  40.         system("PAUSE>NULL");
  41.         fclose(fcoords);
  42.         exit(-1);
  43.     }
  44.     ftriangulos = fopen("triangulos.bin", "rb+");
  45.     /* Primera parte */
  46.     while(!feof(fcoords))
  47.     {
  48.         if(fgets(tmp, SIZE_RENGLON+1, fcoords))
  49.         {
  50.             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);
  51.             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);
  52.             Tr.lado_1 = sqrt(pow(Tp.coord_x1 - Tp.coord_x2, 2) + pow(Tp.coord_y1 - Tp.coord_y2, 2));
  53.             Tr.lado_2 = sqrt(pow(Tp.coord_x2 - Tp.coord_x3, 2) + pow(Tp.coord_y2 - Tp.coord_y3, 2));
  54.             Tr.lado_3 = sqrt(pow(Tp.coord_x3 - Tp.coord_x1, 2) + pow(Tp.coord_y3 - Tp.coord_y1, 2));
  55.             perim = Tr.lado_1 + Tr.lado_2 + Tr.lado_3;
  56.             Tr.sup = sqrt((perim/2) * (perim/2 - Tr.lado_1 ) * (perim/2 - Tr.lado_2 ) * (perim/2 - Tr.lado_3 ));
  57.             printf("Lado 1: %.2f. Lado 2: %.2f. Lado 3: %.2f. Superficie: %.2f.\n", Tr.lado_1, Tr.lado_2, Tr.lado_3, Tr.sup);
  58.             fwrite(&Tr, sizeof(unTriangulo), 1, ftriangulos);
  59.             printf("--------------------------------------------------------------\n");
  60.         }
  61.     }
  62.     /* Segunda parte */
  63.     printf("Mostrar resultado del archivo: (Presione una tecla para continuar).\n");
  64.     system("PAUSE>NULL");
  65.     fseek(ftriangulos, 0, SEEK_END);
  66.     size_tr = ftell(ftriangulos)/sizeof(unTriangulo);
  67.     fseek(ftriangulos, 0, SEEK_SET);
  68.     for(i = 0; i < size_tr; i++)
  69.     {
  70.         fread(&Tr, sizeof(unTriangulo), 1, ftriangulos);
  71.         printf("Lado 1: %.2f. Lado 2: %.2f. Lado 3: %.2f. Superficie: %.2f.\n", Tr.lado_1, Tr.lado_2, Tr.lado_3, Tr.sup);
  72.     }
  73.     system("PAUSE>NULL");
  74.     fclose(fcoords);
  75.     fclose(ftriangulos);
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment