Advertisement
Guest User

Untitled

a guest
Dec 17th, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define MAX_NOM_FICHERO 8
  5. #define EXT 4
  6. #define MAX_FICHEROS 6
  7. #define MAX_COLA (10+1)
  8. #define LLENA 1
  9. #define NO_LLENA 0
  10. #define VACIA 1
  11. #define NO_VACIA 0
  12.  
  13. typedef struct{
  14. int inicio;
  15. int fin;
  16. char Nombre[MAX_COLA][(MAX_NOM_FICHERO + EXT + 1)];
  17. }tCola;
  18.  
  19. void inicializarCola (tCola *cola);
  20. void obtenerN (int *pTirada);
  21. void mandarFicherosPorLote (int pTirada, char *argv[], tCola *cola, int comprobarLlena, int *encolados);
  22. void imprimirFicheros (tCola cola);
  23. void desencolar (tCola *cola, int comprobarB);
  24. void comprobarColaLLena(tCola cola, int *huecos);
  25. void comprobarColaVacia(tCola cola, int *comprobarB);
  26.  
  27. int main (int argc, char *argv[]){
  28. int i;
  29. int pTirada;
  30. tCola cola;
  31. int encolados;
  32. int huecos;
  33. int comprobarB;
  34. int again;
  35. int error = 0;
  36.  
  37. if (argc != 7){
  38. printf ("Error, se esperaban 6 nombres de ficheros.");
  39. error = 1;}
  40.  
  41. for (i=1; i != argc; i++){
  42. if ((strlen (argv[i]))>MAX_NOM_FICHERO){
  43. printf ("Error, los ficheros tienen mayor extension de la esperada.");
  44. error =1;}}
  45.  
  46. inicializarCola (&cola);
  47. printf("\n TRAZA\t Se ha inicializado la cola. Inicio = %d\t Final = %d", cola.inicio, cola.fin);
  48. if (error == 0){
  49. do{
  50. obtenerN (&pTirada);
  51. printf("\n Se tira el dado y se obtiene el numero de elementos que se va a encolar: %d\n\n\n", pTirada);
  52. comprobarColaLLena(cola, &huecos);
  53. mandarFicherosPorLote (pTirada, argv, &cola, huecos, &encolados);
  54. printf("Se han podido encolar %d archivos.", encolados);
  55. printf ("\nDespues de encolar, los indices de control de la cola son:\n inicio = %d\t final = %d",
  56. cola.inicio, cola.fin);
  57. imprimirFicheros (cola);
  58. printf ("Se va a proceder a desencolar un fichero.\n\n");
  59. comprobarColaVacia(cola, &comprobarB);
  60. desencolar (&cola, comprobarB);
  61. printf ("\n\nDespues de desencolar, los indices de control de la cola son: Inicio: %d\t Fin: %d\n\n", cola.inicio, cola.fin);
  62. printf ("Quiere volver a encolar ficheros?: Si(1)\t No(Cualquier otro numero)");
  63. scanf ("%d", &again);
  64. }while (again == 1);
  65. }
  66.  
  67. return 0;
  68. }
  69.  
  70. /*
  71. * Función: inicializarCola
  72. * Establece los valores iniciales de inicio y fin en 0.
  73. */
  74. void inicializarCola (tCola *cola){
  75. cola->inicio = 0;
  76. cola->fin = 0;
  77. }
  78.  
  79. /*
  80. * Función: obtenerN
  81. * Ofrece de forma aleatoria un número que se asocia al que en el enunciado es llamado "n".
  82. * Parámetros de entrada:
  83. * no tiene
  84. * Precondiciones
  85. * no tiene
  86. * Parámetros de salida:
  87. * Tirada: número n.
  88. */
  89. void obtenerN (int *pTirada){
  90. *pTirada = (1 + (rand()%MAX_FICHEROS));}
  91.  
  92. /*
  93. * Función: mandarFicherosPorLote
  94. * Concatena a los N primeros ficheros la extensión txt y los añade a la cola de ficheros.
  95. * Parámetros de entrada:
  96. * argv
  97. * Precondiciones
  98. * no tiene
  99. * Parámetros de salida:
  100. * tCola
  101. */
  102. void mandarFicherosPorLote (int pTirada, char *argv[], tCola *cola, int huecos, int *encolados){
  103. int i;
  104.  
  105. if(huecos < pTirada){
  106. pTirada = huecos;}
  107. for (i=0; i < pTirada; i++){
  108. strcpy(cola->Nombre[cola->fin], argv[i+1]);
  109. strcat(cola->Nombre[cola->fin], ".txt");
  110. cola->fin = (cola->fin+1)%MAX_COLA;}
  111. *encolados = i;}
  112.  
  113. /*
  114. * Función: imprimirFicheros
  115. * Escribe los nombres de los ficheros correspondientes.
  116. */
  117. void imprimirFicheros (tCola cola){
  118. int indice;
  119.  
  120. printf ("\n\n El contenido de la cola es: ");
  121. for (indice=cola.inicio; indice != cola.fin; indice=(indice+1)){
  122. printf ("\n %s", cola.Nombre[indice]);}
  123. printf("\n FIN DE COLA\n");}
  124.  
  125. /*
  126. * Función: desencolar
  127. * Elimina el fichero al que apunta inicio.
  128. * Parámetros de entrada:
  129. * cola
  130. * Precondiciones
  131. * no tiene
  132. * Parámetros de salida:
  133. */
  134. void desencolar (tCola *cola, int comprobarB){
  135. if (comprobarB == 0){
  136. printf ("El archivo %s ha sido impreso.", cola->Nombre[cola->inicio]);
  137. cola->inicio = (cola->inicio+1)%MAX_COLA;}
  138. else
  139. printf ("No se puede desencolar, la cola esta vacia.");
  140. }
  141.  
  142. /*
  143. * Función: comprobarColaLLena
  144. * Comprueba si la cola está llena.
  145. * Parámetros de entrada:
  146. * cola
  147. * Precondiciones
  148. * no tiene
  149. * Parámetros de salida:
  150. * comprobarLlena
  151. */
  152. void comprobarColaLLena(tCola cola, int *huecos){
  153. if (cola.inicio>cola.fin)
  154. *huecos = (MAX_COLA - cola.inicio) + cola.fin;
  155. if (cola.inicio<cola.fin)
  156. *huecos = (cola.fin - cola.inicio)+1;
  157. if (cola.inicio==(cola.fin+1)
  158. *huecos = 0;}
  159. /*
  160. * Función: comprobarColaVacia
  161. * Comprueba si la cola está vacía.
  162. * Parámetros de entrada:
  163. * cola
  164. * Precondiciones
  165. * no tiene
  166. * Parámetros de salida:
  167. * comprobarB
  168. */
  169. void comprobarColaVacia (tCola cola, int *comprobarB){
  170. if (cola.inicio==cola.fin)
  171. *comprobarB = VACIA;
  172. else
  173. *comprobarB = NO_VACIA;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement