|
Mostrar Mensajes
|
Páginas: 1 2 3 [4]
|
33
|
Programación / Programación C/C++ / Re: problema con un programa de estructura de datos
|
en: 10 Enero 2014, 14:43 pm
|
vale ya lo resolvi, restructurando el programa y con ciclos while. Por si a alguien le interesa esta fue mi solucion: #include <stdio.h> #include <stdlib.h> #define TAM 100 #define TRUE 1 #define FALSE 0 //ESTRUCTURAS typedef struct reservas { int mes; int dia; int hora; char nombre[30]; }reservas; typedef struct mesa{ int Numero; int NumeroMaximoDeComensales; int Categoria; int Piso; char Camarero[30]; reservas Reserva[TAM]; }Mesa; Mesa lista[TAM]; int n=0; int m[TAM]; //MODULOS AUXILIARES int posicion(int Nmesa) //modulo para ecncontrar la posicion de una mesa indicando su numero { int pos,i; for(i=0;i<n;i++) { if (lista[i].Numero==Nmesa) { pos=i; return pos; } else { //acota el error de que no exista ninguna mesa con ese numero printf("NO HAY NINGUNA MESA CON EL NUMERO %i",Nmesa ); return 101; } } } //MODULOS PRINCIPALES void Reserva(Mesa Nueva,int pos) //modulo para hacer una reserva { int validacion=TRUE,i; int romper=FALSE; printf("A nombre de quien quiere realizar la reserva.? "); gets(Nueva. Reserva[m [pos ]]. nombre); do{ printf("Para cuando desea realizar la reserva:\n"); scanf("%i",&Nueva. Reserva[m [pos ]]. mes); scanf("%i",&Nueva. Reserva[m [pos ]]. dia); printf("hora(desde 0 a 24): "); scanf("%i",&Nueva. Reserva[m [pos ]]. hora); if (Nueva.Reserva[m[pos]].mes>12 || Nueva.Reserva[m[pos]].mes<0 || Nueva.Reserva[m[pos]].dia>31 || Nueva.Reserva[m[pos]].dia<0 || Nueva.Reserva[m[pos]].hora>24 || Nueva.Reserva[m[pos]].hora<0) { romper=FALSE; } else { romper=TRUE; } }while(romper!=TRUE); for (i=0;i<n;i++) { if (lista[pos].Reserva[i].mes==Nueva.Reserva[m[pos]].mes && lista[pos].Reserva[i].dia==Nueva.Reserva[m[pos]].dia && lista[pos].Reserva[i].hora==Nueva.Reserva[m[pos]].hora) { validacion=FALSE; printf("Ya hay una reserva hecha en esa mesa en esa fecha"); } } if (validacion!=FALSE) { lista[pos].Reserva[m[pos]]=Nueva.Reserva[m[pos]]; m[pos]=m[pos]+1; } } void EliminarMesa(int pos) //Eliminar una mesa del registro { int i; if(pos<n && pos>=0) { n--; for(i=pos;i<n;i++){ lista[i]=lista[i+1]; } } } void MostrarReservas(int pos) //Muestra las reservas hechas a una mesa indicada { int i; printf("LAS RESERVAS DE ESA MESA SON [hora/dia/mes]\n\n"); for (i=0;i<m[pos];i++) { printf("%i\\%i\\%i\t\t%s\n",lista [pos ]. Reserva[i ]. hora,lista [pos ]. Reserva[i ]. dia,lista [pos ]. Reserva[i ]. mes,lista [pos ]. Reserva[i ]. nombre); } } void Aumentar(int AumentoComensales,int pos) //Modulo que aumenta el numero de comensales de una mesa { lista[pos].NumeroMaximoDeComensales=lista[pos].NumeroMaximoDeComensales+AumentoComensales; } void Disminuir(int DisminucionComensales,int pos)//Modulo que dismuye el numero de comensales de una mesa { if (DisminucionComensales>=lista[pos].NumeroMaximoDeComensales) { printf("ERROR LA DISMINUCION ES MAYOR AL MAXIMO DE NUMERO DE COMENSALES"); } else lista[pos].NumeroMaximoDeComensales=lista[pos].NumeroMaximoDeComensales-DisminucionComensales; } int Adjuntar(Mesa Nueva)//Modulo que se asegura de que se puede puede introducir la mesa a la lista de mesa y la incluye { int i,validacion1; for (i=0;i<n;i++) { if (lista[i].Numero==Nueva.Numero) { validacion1=FALSE; } } if(n<TAM && validacion1!=FALSE) { lista[n]=Nueva; n++; return TRUE; } else return FALSE; } void listado() // muestra por pantalla todas las mesas del registro { int i; printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MESAS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> \n\n"); for (i=0;i<n;i++) { printf("\nel numero de la mesa es: %i\n",lista [i ]. Numero); printf("el numero maximo de comensales es: %i\n",lista [i ]. NumeroMaximoDeComensales); printf("la categoria es: %i\n",lista [i ]. Categoria); printf("el piso en la que esta la mesa es: %i\n",lista [i ]. Piso); printf("el camarero en de la mesa es: %s\n",lista [i ]. Camarero); } } ModificarMesa(int pos)// modifica los datos de una mesa { int opcion; do{ printf("1. Modificar Numero\n"); printf("2. Modificar Numero Maximo de Comensales\n"); printf("3. Modificar Categoria\n"); printf("4. Modificar Piso\n"); printf("5. Modificar Camarero\n"); printf("Que deseas modificar.? "); switch (opcion) { case 1: printf("Introduzca el nuevo numero de la mesa: "); scanf("%i",&lista [pos ]. Numero); break; case 2: printf("Introduzca el nuevo numero maximo de comensales: "); scanf("%i",&lista [pos ]. NumeroMaximoDeComensales); break; case 3: printf("Introduzca la nueva categoria: "); scanf("%i",&lista [pos ]. Categoria); break; case 4: printf("Introduzca el nuevo piso: "); scanf("%i",&lista [pos ]. Piso); break; case 5: printf("Introduzca el nuevo camarero: "); gets(lista [pos ]. Camarero); case 6: printf("Datos Modificados correctamente"); break; default: printf("ERROR NUMERO NO ASIGNADO"); break; } }while(opcion!=6); } void Guardar()//guarda los todas las mesas y reservas en un archivo txt { int i,j; FILE *fichero; fichero =fopen("Restaurante.txt","w"); for (i=0;i<n;i++) { fprintf(fichero ,"%i\n",lista [i ]. Numero); fprintf(fichero ,"%i\n",lista [i ]. NumeroMaximoDeComensales); fprintf(fichero ,"%i\n",lista [i ]. Categoria); fprintf(fichero ,"%i\n",lista [i ]. Piso); fprintf(fichero ,"%s\n",lista [i ]. Camarero); for (j=0;j<m[i];j++) { fprintf(fichero ,"%i\n",lista [i ]. Reserva[j ]. mes); fprintf(fichero ,"%i\n",lista [i ]. Reserva[j ]. dia); fprintf(fichero ,"%i\n",lista [i ]. Reserva[j ]. hora); fprintf(fichero ,"%s\n",lista [i ]. Reserva[j ]. nombre); } } printf("Datos Guardados correctamente"); } void Cargar()//carga todas las mesas y reservas que esten guardadas en el archivo restaurante.txt { int i,j; FILE *fichero; fichero =fopen("Restaurante.txt","r"); for (i=0;i<n;i++) { fscanf(fichero ,"%i",&lista [i ]. Numero); fscanf(fichero ,"%i",&lista [i ]. NumeroMaximoDeComensales); fscanf(fichero ,"%i",&lista [i ]. Categoria); fscanf(fichero ,"%i",&lista [i ]. Piso); fscanf(fichero ,"%s",&lista [i ]. Camarero); for (j=0;j<m[i];j++) { fscanf(fichero ,"%i",&lista [i ]. Reserva[j ]. mes); fscanf(fichero ,"%i",&lista [i ]. Reserva[j ]. dia); fscanf(fichero ,"%i",&lista [i ]. Reserva[j ]. hora); fscanf(fichero ,"%s",&lista [i ]. Reserva[j ]. nombre); } } printf("Datos Cargados correctamente"); } void menu()//menu del programa { int opcion,res,AumentoComensales,DisminucionComensales,Nmesa,pos; Mesa Nueva; do { printf("\n1. Introduce nueva mesa en el restaurante\n"); printf("2. Elimina una mesa del restaurante\n"); printf("3. Aumentar numero de comensales de una mesa\n"); printf("4. Disminuir numero de comensales de una mmesa\n"); printf("5. Reservar una mesa\n"); printf("6. listar reservas de una mesa\n"); printf("7. Modificar datos de una mesa\n"); printf("8. Guardar datos en Fichero\n"); printf("9. Cargar datos en un Fichero\n"); printf("10. Mostrar Mesas\n"); printf("\n Que deseas hacer.? "); switch(opcion) { case 1: printf("Numero de la mesa: "); scanf("%i",&Nueva. Numero); printf("Numero Maximo de comensales: "); scanf("%i",&Nueva. NumeroMaximoDeComensales); scanf("%i",&Nueva. Categoria); res=Adjuntar(Nueva); if (res==TRUE) { printf("La mesa se ha adjuntado correctamente\n"); } else { printf("la mesa no se ha adjuntado correctamente es posible que ya exista una mesa con ese numero\nvuelve a intentarlo\n"); } break; case 2: do{ printf("Introduce el numero de la mesa: "); pos=posicion(Nmesa); }while(pos==101); EliminarMesa(pos); break; case 3: do{ printf("Introduce el numero de la mesa: "); pos=posicion(Nmesa); }while(pos==101); printf("En cuanto deseas aumentar el numero de comensales.?"); scanf("%i",&AumentoComensales ); Aumentar(AumentoComensales,pos); break; case 4: do{ printf("Introduce el numero de la mesa: "); pos=posicion(Nmesa); }while(pos==101); printf("En cuanto deseas aumentar el numero de comensales.?"); scanf("%i",&DisminucionComensales ); Disminuir(DisminucionComensales,pos); break; case 5: do{ printf("Introduce el numero de la mesa: "); pos=posicion(Nmesa); }while(pos==101); Reserva(Nueva,pos); break; case 6: do{ printf("Introduce el numero de la mesa: "); pos=posicion(Nmesa); }while(pos==101); MostrarReservas(pos); break; case 7: do{ printf("Introduce el numero de la mesa: "); pos=posicion(Nmesa); }while(pos==101); ModificarMesa(pos); break; case 8: Guardar(); break; case 9: Cargar(); break; case 10: listado(); break; case 11: break; default: printf("ERROR NUMERO NO ASIGNADO"); break; } }while (opcion!=11); printf("Gracias por utilizar nuestra aplicacion"); } main() { menu(); }
Basicamente lo que hecho ha sido antes de entrar en los modulos desde el modulo menu evaluar si existe o no una mesa con el numero introducido sino existe te vuelve a preguntar el numero de la mesa y si existe entonces pasa a la funcion que vayas a realizar
|
|
|
34
|
Programación / Programación C/C++ / problema con un programa de estructura de datos
|
en: 10 Enero 2014, 12:43 pm
|
Buenas a todos. Os traigo un problema a ver si alguien me puede ayudar. Estoy haciendo un programa de una base de datos de un restaurante(es un trabajo de la uni) este es el codigo fuente: #include <stdio.h> #include <stdlib.h> #define TAM 100 #define TRUE 1 #define FALSE 0 //ESTRUCTURAS typedef struct reservas { int mes; int dia; int hora; char nombre[30]; }reservas; typedef struct mesa{ int Numero; int NumeroMaximoDeComensales; int Categoria; int Piso; char Camarero[30]; reservas Reserva[TAM]; }Mesa; Mesa lista[TAM]; int n=0; int m[TAM]; //MODULOS AUXILIARES int posicion(int Nmesa) //modulo para ecncontrar la posicion de una mesa indicando su numero { int pos,i; for(i=0;i<n;i++) { if (lista[i].Numero==Nmesa) { pos=i; return pos; } else { //acota el error de que no exista ninguna mesa con ese numero printf("NO HAY NINGUNA MESA CON EL NUMERO %i",Nmesa ); menu(); //fallo por llamar una funcion que todavía no ha sido definida pero que no influye en ejecuccion del programa } } } //MODULOS PRINCIPALES void Reserva(int Nmesa,Mesa Nueva) //modulo para hacer una reserva { int pos,validacion=TRUE,i; pos=posicion(Nmesa); printf("A nombre de quien quiere realizar la reserva.? "); gets(Nueva. Reserva[m [pos ]]. nombre); printf("Para cuando desea realizar la reserva:\n"); scanf("%i",&Nueva. Reserva[m [pos ]]. mes); scanf("%i",&Nueva. Reserva[m [pos ]]. dia); printf("hora(desde 0 a 24): "); scanf("%i",&Nueva. Reserva[m [pos ]]. hora); for (i=0;i<n;i++) { if (lista[pos].Reserva[i].mes==Nueva.Reserva[m[pos]].mes && lista[pos].Reserva[i].dia==Nueva.Reserva[m[pos]].dia && lista[pos].Reserva[i].hora==Nueva.Reserva[m[pos]].hora) { validacion=FALSE; printf("Ya hay una reserva hecha en esa mesa en esa fecha"); } } if (validacion!=FALSE) { lista[pos].Reserva[m[pos]]=Nueva.Reserva[m[pos]]; m[pos]=m[pos]+1; } } void EliminarMesa(int Nmesa) //Eliminar una mesa del registro { int pos,i; pos=posicion(Nmesa); if(pos<n && pos>=0) { n--; for(i=pos;i<n;i++){ lista[i]=lista[i+1]; } } } void MostrarReservas(int Nmesa) //Muestra las reservas hechas a una mesa indicada { int i,pos; pos=posicion(Nmesa); printf("LAS RESERVAS DE ESA MESA SON [hora/dia/mes]\n\n"); for (i=0;i<m[pos];i++) { printf("%i\\%i\\%i\t\t%s\n",lista [pos ]. Reserva[i ]. hora,lista [pos ]. Reserva[i ]. dia,lista [pos ]. Reserva[i ]. mes,lista [pos ]. Reserva[i ]. nombre); } } void Aumentar(int Nmesa,int AumentoComensales) //Modulo que aumenta el numero de comensales de una mesa { int pos; pos=posicion(Nmesa); lista[pos].NumeroMaximoDeComensales=lista[pos].NumeroMaximoDeComensales+AumentoComensales; } void Disminuir(int Nmesa,int DisminucionComensales)//Modulo que dismuye el numero de comensales de una mesa { int pos; pos=posicion(Nmesa); if (DisminucionComensales>=lista[pos].NumeroMaximoDeComensales) { printf("ERROR LA DISMINUCION ES MAYOR AL MAXIMO DE NUMERO DE COMENSALES"); } else lista[pos].NumeroMaximoDeComensales=lista[pos].NumeroMaximoDeComensales-DisminucionComensales; } int Adjuntar(Mesa Nueva)//Modulo que se asegura de que se puede puede introducir la mesa a la lista de mesa y la incluye { int i,validacion1; for (i=0;i<n;i++) { if (lista[i].Numero==Nueva.Numero) { validacion1=FALSE; } } if(n<TAM && validacion1!=FALSE) { lista[n]=Nueva; n++; return TRUE; } else return FALSE; } void listado() // muestra por pantalla todas las mesas del registro { int i; printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<MESAS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> \n\n"); for (i=0;i<n;i++) { printf("\nel numero de la mesa es: %i\n",lista [i ]. Numero); printf("el numero maximo de comensales es: %i\n",lista [i ]. NumeroMaximoDeComensales); printf("la categoria es: %i\n",lista [i ]. Categoria); printf("el piso en la que esta la mesa es: %i\n",lista [i ]. Piso); printf("el camarero en de la mesa es: %s\n",lista [i ]. Camarero); } } ModificarMesa(Nmesa)// modifica los datos de una mesa { int opcion,pos; pos=posicion(Nmesa); do{ printf("1. Modificar Numero\n"); printf("2. Modificar Numero Maximo de Comensales\n"); printf("3. Modificar Categoria\n"); printf("4. Modificar Piso\n"); printf("5. Modificar Camarero\n"); printf("Que deseas modificar.? "); switch (opcion) { case 1: printf("Introduzca el nuevo numero de la mesa: "); scanf("%i",&lista [pos ]. Numero); break; case 2: printf("Introduzca el nuevo numero maximo de comensales: "); scanf("%i",&lista [pos ]. NumeroMaximoDeComensales); break; case 3: printf("Introduzca la nueva categoria: "); scanf("%i",&lista [pos ]. Categoria); break; case 4: printf("Introduzca el nuevo piso: "); scanf("%i",&lista [pos ]. Piso); break; case 5: printf("Introduzca el nuevo camarero: "); gets(lista [pos ]. Camarero); case 6: printf("Datos Modificados correctamente"); break; default: printf("ERROR NUMERO NO ASIGNADO"); break; } }while(opcion!=6); } void Guardar()//guarda los todas las mesas y reservas en un archivo txt { int i,j; FILE *fichero; fichero =fopen("Restaurante.txt","w"); for (i=0;i<n;i++) { fprintf(fichero ,"%i\n",lista [i ]. Numero); fprintf(fichero ,"%i\n",lista [i ]. NumeroMaximoDeComensales); fprintf(fichero ,"%i\n",lista [i ]. Categoria); fprintf(fichero ,"%i\n",lista [i ]. Piso); fprintf(fichero ,"%s\n",lista [i ]. Camarero); for (j=0;j<m[i];j++) { fprintf(fichero ,"%i\n",lista [i ]. Reserva[j ]. mes); fprintf(fichero ,"%i\n",lista [i ]. Reserva[j ]. dia); fprintf(fichero ,"%i\n",lista [i ]. Reserva[j ]. hora); fprintf(fichero ,"%s\n",lista [i ]. Reserva[j ]. nombre); } } printf("Datos Guardados correctamente"); } void Cargar()//carga todas las mesas y reservas que esten guardadas en el archivo restaurante.txt { int i,j; FILE *fichero; fichero =fopen("Restaurante.txt","r"); for (i=0;i<n;i++) { fscanf(fichero ,"%i",&lista [i ]. Numero); fscanf(fichero ,"%i",&lista [i ]. NumeroMaximoDeComensales); fscanf(fichero ,"%i",&lista [i ]. Categoria); fscanf(fichero ,"%i",&lista [i ]. Piso); fscanf(fichero ,"%s",&lista [i ]. Camarero); for (j=0;j<m[i];j++) { fscanf(fichero ,"%i",&lista [i ]. Reserva[j ]. mes); fscanf(fichero ,"%i",&lista [i ]. Reserva[j ]. dia); fscanf(fichero ,"%i",&lista [i ]. Reserva[j ]. hora); fscanf(fichero ,"%s",&lista [i ]. Reserva[j ]. nombre); } } printf("Datos Cargados correctamente"); } void menu()//menu del programa { int opcion,res,AumentoComensales,DisminucionComensales,Nmesa; Mesa Nueva; do { printf("\n1. Introduce nueva mesa en el restaurante\n"); printf("2. Elimina una mesa del restaurante\n"); printf("3. Aumentar numero de comensales de una mesa\n"); printf("4. Disminuir numero de comensales de una mmesa\n"); printf("5. Reservar una mesa\n"); printf("6. listar reservas de una mesa\n"); printf("7. Modificar datos de una mesa\n"); printf("8. Guardar datos en Fichero\n"); printf("9. Cargar datos en un Fichero\n"); printf("10. Mostrar Mesas\n"); printf("\n Que deseas hacer.? "); switch(opcion) { case 1: printf("Numero de la mesa: "); scanf("%i",&Nueva. Numero); printf("Numero Maximo de comensales: "); scanf("%i",&Nueva. NumeroMaximoDeComensales); scanf("%i",&Nueva. Categoria); res=Adjuntar(Nueva); if (res==TRUE) { printf("La mesa se ha adjuntado correctamente\n"); } else { printf("la mesa no se ha adjuntado correctamente es posible que ya exista una mesa con ese numero\nvuelve a intentarlo\n"); } break; case 2: printf("Introduce el numero de la mesa: "); EliminarMesa(Nmesa); break; case 3: printf("Introduce el numero de la mesa: "); printf("En cuanto deseas aumentar el numero de comensales.?"); scanf("%i",&AumentoComensales ); Aumentar(Nmesa,AumentoComensales); break; case 4: printf("Introduce el numero de la mesa: "); printf("En cuanto deseas aumentar el numero de comensales.?"); scanf("%i",&DisminucionComensales ); Disminuir(Nmesa,DisminucionComensales); break; case 5: printf("Introduce el numero de la mesa: "); Reserva(Nmesa,Nueva); break; case 6: printf("Introduce el numero de la mesa: "); MostrarReservas(Nmesa); break; case 7: printf("Introduce el numero de la mesa: "); ModificarMesa(Nmesa); break; case 8: Guardar(); break; case 9: Cargar(); break; case 10: listado(); break; case 11: break; default: printf("ERROR NUMERO NO ASIGNADO"); break; } }while (opcion!=11); printf("Gracias por utilizar nuestra aplicacion"); } main() { menu(); }
el problema que tengo es en el modulo posicion. Este modulo lo que hace es que en la lista de mesas encuentra la posicion en la que se encuentra la mesa con el numero introducido anteriormente, este numero es el numero de la mesa (no se si me explico).Mi problema es que si se introduce un numero de mesa y no hay ninguna mesa que tenga ese numero quiero que vaya al modulo menu y no continue, pero al invocar el modulo menu como esta puesto da un error ya que llamo a la funcion menu antes de definirla. Como se podria solucionar eso?
|
|
|
36
|
Programación / Programación C/C++ / Re: invertir un vector en C
|
en: 23 Noviembre 2013, 20:44 pm
|
mad_soft es cierto que el recorrido inverso seria la solucion a imprimir por pantalla el vector inverso, pero lo que necesito no es imprimir el inverso en pantalla sino sobrescribir encima del vector c su inverso sin utilizar otro vector para hacerlo, aunque gracias por la idea.
|
|
|
37
|
Programación / Programación C/C++ / invertir un vector en C
|
en: 23 Noviembre 2013, 19:34 pm
|
Hola buenas a todos. Estaba haciendo un programa en el que ya viene dado un vector y tienes que imprimir el inverso sin utilizar un vector auxiliar. La forma que se me ocurrio fue esta #include <stdio.h> #include <stdlib.h> main() { //Declaracion de variables int i,c[]={1,2,3,4,5,6}; int j; //Bucle de inversion for (i=0;i<=5;i++) c[i]=c[5-i]; //Impresion del invertido del vector for (j=0;j<=5;j++) printf("el vector invertido es %i",c [j ]); }
El problema es que para los valores c[3]hasta c[5] ya se han invertido por lo que vuelve a invertir los mismos tres valores. Si alguien encuentra una solucion se agradeceria mucho.
|
|
|
|
|
|
|