Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #define MAX_NOM_FICHERO 8
- #define EXT 4
- #define MAX_FICHEROS 6
- #define MAX_COLA (10+1)
- #define LLENA 1
- #define NO_LLENA 0
- #define VACIA 1
- #define NO_VACIA 0
- typedef struct{
- int inicio;
- int fin;
- char Nombre[MAX_COLA][(MAX_NOM_FICHERO + EXT + 1)];
- }tCola;
- void inicializarCola (tCola *cola);
- void obtenerN (int *pTirada);
- void mandarFicherosPorLote (int pTirada, char *argv[], tCola *cola, int comprobarLlena, int *encolados);
- void imprimirFicheros (tCola cola);
- void desencolar (tCola *cola, int comprobarB);
- void comprobarColaLLena(tCola cola, int *huecos);
- void comprobarColaVacia(tCola cola, int *comprobarB);
- int main (int argc, char *argv[]){
- int i;
- int pTirada;
- tCola cola;
- int encolados;
- int huecos;
- int comprobarB;
- int again;
- int error = 0;
- if (argc != 7){
- printf ("Error, se esperaban 6 nombres de ficheros.");
- error = 1;}
- for (i=1; i != argc; i++){
- if ((strlen (argv[i]))>MAX_NOM_FICHERO){
- printf ("Error, los ficheros tienen mayor extension de la esperada.");
- error =1;}}
- inicializarCola (&cola);
- printf("\n TRAZA\t Se ha inicializado la cola. Inicio = %d\t Final = %d", cola.inicio, cola.fin);
- if (error == 0){
- do{
- obtenerN (&pTirada);
- printf("\n Se tira el dado y se obtiene el numero de elementos que se va a encolar: %d\n\n\n", pTirada);
- comprobarColaLLena(cola, &huecos);
- mandarFicherosPorLote (pTirada, argv, &cola, huecos, &encolados);
- printf("Se han podido encolar %d archivos.", encolados);
- printf ("\nDespues de encolar, los indices de control de la cola son:\n inicio = %d\t final = %d",
- cola.inicio, cola.fin);
- imprimirFicheros (cola);
- printf ("Se va a proceder a desencolar un fichero.\n\n");
- comprobarColaVacia(cola, &comprobarB);
- desencolar (&cola, comprobarB);
- printf ("\n\nDespues de desencolar, los indices de control de la cola son: Inicio: %d\t Fin: %d\n\n", cola.inicio, cola.fin);
- printf ("Quiere volver a encolar ficheros?: Si(1)\t No(Cualquier otro numero)");
- scanf ("%d", &again);
- }while (again == 1);
- }
- return 0;
- }
- /*
- * Función: inicializarCola
- * Establece los valores iniciales de inicio y fin en 0.
- */
- void inicializarCola (tCola *cola){
- cola->inicio = 0;
- cola->fin = 0;
- }
- /*
- * Función: obtenerN
- * Ofrece de forma aleatoria un número que se asocia al que en el enunciado es llamado "n".
- * Parámetros de entrada:
- * no tiene
- * Precondiciones
- * no tiene
- * Parámetros de salida:
- * Tirada: número n.
- */
- void obtenerN (int *pTirada){
- *pTirada = (1 + (rand()%MAX_FICHEROS));}
- /*
- * Función: mandarFicherosPorLote
- * Concatena a los N primeros ficheros la extensión txt y los añade a la cola de ficheros.
- * Parámetros de entrada:
- * argv
- * Precondiciones
- * no tiene
- * Parámetros de salida:
- * tCola
- */
- void mandarFicherosPorLote (int pTirada, char *argv[], tCola *cola, int huecos, int *encolados){
- int i;
- if(huecos < pTirada){
- pTirada = huecos;}
- for (i=0; i < pTirada; i++){
- strcpy(cola->Nombre[cola->fin], argv[i+1]);
- strcat(cola->Nombre[cola->fin], ".txt");
- cola->fin = (cola->fin+1)%MAX_COLA;}
- *encolados = i;}
- /*
- * Función: imprimirFicheros
- * Escribe los nombres de los ficheros correspondientes.
- */
- void imprimirFicheros (tCola cola){
- int indice;
- printf ("\n\n El contenido de la cola es: ");
- for (indice=cola.inicio; indice != cola.fin; indice=(indice+1)){
- printf ("\n %s", cola.Nombre[indice]);}
- printf("\n FIN DE COLA\n");}
- /*
- * Función: desencolar
- * Elimina el fichero al que apunta inicio.
- * Parámetros de entrada:
- * cola
- * Precondiciones
- * no tiene
- * Parámetros de salida:
- */
- void desencolar (tCola *cola, int comprobarB){
- if (comprobarB == 0){
- printf ("El archivo %s ha sido impreso.", cola->Nombre[cola->inicio]);
- cola->inicio = (cola->inicio+1)%MAX_COLA;}
- else
- printf ("No se puede desencolar, la cola esta vacia.");
- }
- /*
- * Función: comprobarColaLLena
- * Comprueba si la cola está llena.
- * Parámetros de entrada:
- * cola
- * Precondiciones
- * no tiene
- * Parámetros de salida:
- * comprobarLlena
- */
- void comprobarColaLLena(tCola cola, int *huecos){
- if (cola.inicio>cola.fin)
- *huecos = (MAX_COLA - cola.inicio) + cola.fin;
- if (cola.inicio<cola.fin)
- *huecos = (cola.fin - cola.inicio)+1;
- if (cola.inicio==(cola.fin+1)
- *huecos = 0;}
- /*
- * Función: comprobarColaVacia
- * Comprueba si la cola está vacía.
- * Parámetros de entrada:
- * cola
- * Precondiciones
- * no tiene
- * Parámetros de salida:
- * comprobarB
- */
- void comprobarColaVacia (tCola cola, int *comprobarB){
- if (cola.inicio==cola.fin)
- *comprobarB = VACIA;
- else
- *comprobarB = NO_VACIA;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement