Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 18th, 2012  |  syntax: None  |  size: 4.40 KB  |  hits: 18  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5.  
  6. //Modela la estructura de una tabla de reservas
  7. typedef struct{
  8.         int segmentos;          // Numero de segmentos de las matrices de los ficheros f.txt y g.txt   
  9.         int ciclos;                     // Numero de ciclos de las matrices de los ficheros f.txt y g.txt
  10.         int *tabla;
  11. } TablaReservas;
  12.  
  13.  
  14. int main(){
  15.         char nom_fich1[] = "f.txt";
  16.         char nom_fich2[] = "g.txt";
  17.         TablaReservas tab_reserv1, tab_reserv2;         // Tablas de reservas del problema
  18.         int *vector11,*vector22,*vector12,*vector21;    // Vectores de colisiones
  19.  
  20.         tab_reserv1.tabla = (int*)malloc(10*10*sizeof(int));            // Reservamos memoria para la tabla de reservas de "f.txt"
  21.         tab_reserv2.tabla = (int*)malloc(10*10*sizeof(int));            // Reservamos memoria para la tabla de reservas de "g.txt"
  22.  
  23.         comprueba_ficheros();
  24.  
  25.         //Calculamos el numero de segmentos y ciclos de cada fichero
  26.         tab_reserv1.segmentos = calcula_segmentos(nom_fich1);           // Numero de segmentos de la tabla de reservas del fichero f.txt
  27.         tab_reserv2.segmentos = calcula_segmentos(nom_fich2);           // Numero de segmentos de la tabla de reservas del fichero g.txt
  28.         tab_reserv1.ciclos = calcula_ciclos(nom_fich1);                 // Numero de ciclos de la tabla de reservas del fichero f.txt
  29.         tab_reserv2.ciclos = calcula_ciclos(nom_fich2);                 // Numero de ciclos de la tabla de reservas del fichero g.txt
  30.  
  31.         //printf("Los segmentos de f.txt: %d\n",tab_reserv1.segmentos);
  32.         //printf("Los ciclos de f.txt: %d\n",tab_reserv1.ciclos);
  33.         //printf("Los segmentos de g.txt: %d\n",tab_reserv2.segmentos);
  34.         //printf("Los ciclos de g.txt: %d\n",tab_reserv2.ciclos);
  35.  
  36.         extrae_fichero(tab_reserv1, "f.txt");   // Leemos el fichero "f.txt" y lo almacenamos en la matriz1
  37.         extrae_fichero(tab_reserv2, "g.txt");   // Leemos el fichero "g.txt" y lo almacenamos en la matriz2
  38.  
  39.         //imprime_tabla_reserva(tab_reserv1);
  40.         //imprime_tabla_reserva(tab_reserv2);
  41.         return 0;
  42. }
  43.  
  44. //Procedimiento que comprueba si los ficheros son validos.
  45. comprueba_ficheros()
  46. {
  47.         FILE *fich1, *fich2;
  48.  
  49.         fich1 = fopen ("f.txt","r");                            // Apertura de ficheros para lectura
  50.         fich2 = fopen ("g.txt","r");
  51.        
  52.         if (fich1 == NULL){
  53.            printf("\nEl fichero f.txt no es valido.\n");       
  54.            exit(-1);
  55.         }
  56.  
  57.         if (fich2 == NULL){
  58.            perror("\nEl fichero g.txt no es valido.\n");                // Si alguno de los dos ficheros es invalido,
  59.            exit(-1);                                                    // salimos del programa.
  60.         }
  61.         printf("Los ficheros 'g.txt' y 'f.txt' son validos\n");
  62.  
  63.         fclose(fich1);                                                  // Cierre de ficheros
  64.         fclose(fich2);
  65. }
  66.  
  67. // Funcion que calcula el numero de segmentos de una tabla de reservas. Los segmentos coinciden
  68. // con el numero de filas de la tabla.
  69. int calcula_segmentos(char nom_fich[200])
  70. {
  71.         FILE *fich;
  72.         int total;                                              // Contador de segmentos
  73.         char cadena[50];                                        // Cadena auxiliar para ir sacando de fichero
  74.  
  75.         fich = fopen (nom_fich,"r");
  76.         total = 0;
  77.        
  78.         while (!feof(fich)){                                    // Mientras que no encuentre caracter final de fichero...
  79.            fgets(cadena,50, fich);                              // ...leemos una linea entera e
  80.            total++;                                             // incrementamos el numero de segmentos
  81.         }
  82.         fclose(fich);
  83.         return(total - 1);                                      // Retornamos el numero de segmentos de la tabla de reservas
  84. }
  85.  
  86. // Funcion que calcula el numero de ciclos de una tabla de reservas. Los ciclos coinciden con
  87. // el numero de columnas de la tabla.
  88. int calcula_ciclos(char nom_fich[200])
  89. {
  90.         FILE *fich;
  91.         char cadena[50];                                        // Cadena auxiliar para ir sacando de fichero
  92.         int total;                                              // Contador de ciclos
  93.  
  94.         fich = fopen (nom_fich,"r");
  95.         fgets(cadena,50, fich);                                 // Leemos una linea entera y la metemos en cadena
  96.         fclose(fich);
  97.         total = (strlen(cadena) - 1);                           // El numero de ciclos sera la longitud de la cadena extraida.
  98.         return(total);                                          // Retornamos el numero de ciclos de la tabla de reservas
  99. }
  100.  
  101. extrae_fichero(TablaReservas *t, char nom_fich[200])
  102. {
  103.         FILE *fich;
  104.         int i,j;
  105.         char c;
  106.  
  107.         fich = fopen (nom_fich,"r");
  108.         i = j = 0;
  109.  
  110.         while (!feof(fich)){                                            // Mientras no sea final de fichero...
  111.                 c = fgetc(fich);                                                // ... lee caracter
  112.                 if (c != '\n'){
  113.                         t->tabla[i][j] = (int)c - 48;                   // Se resta 48 para pasar de chat a int                                        
  114.                         j++;
  115.                 }else{
  116.                         i++;
  117.                         j = 0;
  118.                 }
  119.         }
  120.         fclose(fich);
  121. }
  122.  
  123. imprime_tabla_reserva(TablaReservas *t)
  124. {
  125.         int i, j;
  126.  
  127.         for (i = 0 ; i < t->segmentos ; i++){
  128.                 for (j = 0 ; j < t->ciclos ; j++)
  129.                         printf("%d",t->tabla[i][j]);                            // Escribimos el dato de la posicion i,j de la matriz
  130.                 printf("\n");
  131.         }
  132.  
  133. }