Ante todo una felicitación a los creadores de este canal. Me han ayudado a entender muchas cosas. En efecto, pude detectar un par de detalles, el primero cuando se llenan los libros no avisa eso es muy simple. La que realmente me puso a pensar es como solucionar el problema de añadir un libro cuando una biblioteca no existe, para ello solo condicione con for(j = 0; j < 1; j++){ aux2 = bi[1].lleno_bi; // dentro de corchetes pongo 1 ya que basta con que una biblioteca este creada para que // se cumpla la condición } y todo el contenido de anadelib a partir del scanf lo condiciono con if(aux2 == 1){ . . . } else{ printf("Debes introducir primero una biblioteca. "); } automáticamente el vuelve a preguntar si deseas realizar si quieres otra operación.
en realidad veo que poca gente continua el primer video miles de visitas y ahora menos yo me veré la serie entera pero me tomo mi tiempo para entender solo tengo 14 y aunque no es muy complicado por que tu lo explicas muy bien
tienes razon, lo que pasa es que debe haber algunos en videos anteriores que todavia no llegaron a este nivel. Es decir, uno empieza en el video 1(y continua aprendiendo) generando 1 visita; luego en el video 2 lo vio, genera otra visita, pero llego por ejemplo hasta el bloque 2 y mañana sigue el programa. en este caso la diferencia deberia ser menor. pd igual hay muchisimos que lo dejan.
Que buen video. Ojala nunca le pierdas las ganas ni el amor a lo que haces. Despues de tantos años ayudas a muchos. Siempre le doy Like a tus video por tus muy buenas explicaciones! Sea lo que sea que estas haciendo ahora - el que persevera triunfa- Mucha suerte y feliz 2019
De verdad gracias por realizar estos vídeos se que hace tiempo que los publicaste pero igual me son de utilidad, en este encontré un detalle que al correr el programa y es que si solo he añadido una biblioteca y decido agregar un libro me aparece un menú para elegir a que biblioteca agregarlo con los números 0,1,2 como opciones en 0 la biblioteca que agregue y las que están vacías sin nombre pero igual me permite agregar libros sin haber creado las bibliotecas y consultarlos. por eso se me ocurrió crear una condición en anadelib() en la parte del menú if(bi[i].lleno_bi==1){ ...} para que solo muestre las bibliotecas que se han creado. Excelentes vídeos (y)
bueno al ser basicamente un refrito del video anterior, logrte entender muchisimo mas de lo que habia entendido el video anterior, bastante bien estructurado el video aunque en si me gustaria que se explicara un poco mas los tipos de estructuras que se deben hacer en estos casos
Buen video aunque extenso bastante bien explicado, creo que la repeticion prolongada de como acceder a las bibliotecas me dejo bastante claro como utilizar estructuras anidadas, apesar de que no las uso para programar microcontroladores, en algun momento sera muy util. Dejo aqui mi codigo como buen samaritano por si a alguien le sirviese o lo desea comparar: #include #include #define N 50 typedef struct{ char nombre_lib[N]; char autor[N]; int lleno; }libro; typedef struct{ char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; biblioteca bi[3]; void vacio(); void cambio(char palabra[N]); void anadebi(); void anadelib(); void consulta(); int main(){ int op; char key;
vacio();
do{ do{ printf("\tElige una opcion a realizar "); printf("(1) Anadir una nueva biblioteca. "); printf("(2) Anadir un libro a una biblioteca. "); printf("(3) Consultar un libro. "); fflush(stdin); scanf("%i",&op); }while(op3);
switch(op){ case 1: anadebi(); break; case 2: anadelib(); break; case 3: consulta(); break; } printf("Quieres realizar alguna otra operacion?"); printf(" \t\t"); fflush(stdin); scanf("%c",&key);
}while(key =='S' || key == 's'); return 0; } void vacio(){ int i, j; for(i=0 ; i
Buenas tardes, Emilio este curso me ha parecedio muy excelente, voy por este video y he aprovechado mucho las explicaciones, ya tenia algo de conocimiento en c pero esto me ha servido de mucho, he agregado algunas cosas a tu codigo y lo comprato para que me des tu opinion: //Realizar un programa para controlar varias bibliotecas usando estructuras dentro de estructuras #include #include #define N 50 typedef struct{ // Tipo estructura para crear un libro nuevo char nombrelib[N]; char autorlib[N]; int liblleno; }libros; typedef struct{ // Tipo estructura para crear una estructura nueva char nombrebib[N]; libros libro[10]; int bibllena; }biblioteca; biblioteca bib[3]; //Función para crear las bibliotecas, en este caso 3 //Prototipos de las funciones void vacio(); void cambio(char texto[N]); void agbiblioteca(); void aglibro(); void agrega(int cont); void consulta(); //Función principal int main(){ int op; char key; vacio(); do{ do{ system("cls"); printf("** ** ** ** Menu Principal ** ** ** "); printf("** ** "); printf("** 1 Agregar una nueva biblioteca. ** "); printf("** 2 Agregar un libro a una biblioteca ** "); printf("** 3 Consultar un libro. ** "); printf("** ** "); printf("** ** ** ** Menu Principal ** ** **
"); printf("Que operacion desea realizar: "); scanf("%i",&op); }while(op < 1 || op > 3); switch(op){ case 1:{ agbiblioteca(); break; } case 2:{ aglibro(); break; } case 3:{ consulta(); break; } } printf("
Quieres realizar alguna operacion mas? (S/N): "); fflush(stdin); scanf("%c",&key); }while(key == 'S' || key == 's'); return 0; } //Función para inicializar las bibliotecas y los libros en cada una de ellas void vacio(){ int i,j; for (i = 0; i < 3; i++){ bib[i].bibllena=0; for (j = 0; j < 10; j++){ bib[i].libro[i].liblleno=0; } } } //Función para cambias los por \0 en los string ingresasdos por teclado y recogidas on fgets void cambio(char texto[N]){ int i; for (i = 0; i < N; i++){ if (texto[i] == ' '){ texto[i] = '\0'; } } } //Función para agregar bibliotecas void agbiblioteca(){ int i,aux; aux=0; for (i=0;i
Algunos habrán pensado que si el libro que se consulta o el autor no están en la biblioteca, ¿Qué pasa? Yo he utilizado un contador el la función consultar, cada vez que se encuentra un libro o un autor el contador aumenta. al final, si no hay libros o autores con ese nombre el contador será igual a cero (o a lo que sea) y con un if podemos mostrar por pantalla que no se ha encontrado nada. Gracias al creador de este contenido y saludos. FUNCIÓN CONSULTAR() : void consulta(){ int op,i,j,aux,contador; char buscar[N]; contador=0; do{ printf("Que quieres buscar nombre del libro o nombre del autor "); printf("(1)Nombre Libro "); printf("(2)Nombre Autor "); scanf("%d",&op); }while(op2); switch(op){ case 1:{ printf("Introduce el nombre del libro: "); fflush(stdin); fgets(buscar,N,stdin); cambio(buscar); for(i=0;i
hola compañero quiero darte las gracias por este curso desde que empece a programar con javascript y php soy esclavo de mi ordenador XD en el curso de desarrollo de aplicaciones que hice nos dieron una ligera intro de C y el profesor afirmo que conprendiendo la logica y los conceptos basicos de programacion podriamos comprender cualquier lenguage de programacion buscando videos tutoriales o cursos como este que la verdad esta genial te as lucido me encanta C cuando acabe de ver tus videos practicare un tiempo y luego ire a por C++ para pasarme a java que es el que me interesa de verdad El curso que hice estaba enfocado al desarrollo y diseño de paginas web ya saves HTML CSS etc.. y bueno estoy haciendo una web pero la e detenido para salir de el navegador y pulir mas la parte de la programacion.. e tenido un problemilla en este ejemplo (ejercisio) y es que no me muestra el nombre de la biblioteca en los resultados te paso el codigo aver si lo encuentras el compilador no me da errores y se ejecuta perfectamente todo lo demas anterior mente usaba geany en linux pero ya estoy en dev c++ por que tube un problemilla con el depurador de geany muchas gracias por todo un saludo.
EL ARCADEMAN Lo primero, en vez de estudiar C++ para luego pasarte a Java, hazlo al reves, primero Java (que aqui tienes el curso de iniciacion completo) y luego cuando comprendas los conceptos podras saltar a C++ que es mucho mas complejo si quieres. Sobre tu error en el codigo, pasale el depurador, si el problema no es de compilacion, depurador siempre. Un saludo.
muchas gracias necesitaba esa orientacion iba a buscar esa comparacion asi que lo mas probable es que empezace por java de todas formas me as ahorado mucho tiempo boy a depurara el programa y ver si doy con el fallo un saludo..
hola amigo creias que abia abandonado jejeje nooo es que e estado ocupado con un prllecto de php que me encargaron continuo desde aqui pero pienso repasar todos los ideos nuevamente un saludo
Hola Emilio, en primer lugar enhorabuena por el curso. Te doy un 10! Tengo un par de preguntas que me surgen desde hace varios vídeos: ¿Existe alguna diferencia importante si uso la sentencia "break" para salir de un bucle en vez de usar una ruta de escape con una variable "aux"? Y otra: ¿Por qué introduces strings con fgets y usas cambio() en vez de scanf("%longitud[^ ]", array)? ¿No es más sencillo? Espero tu respuesta! Muchas gracias por todo!
break solo se puede usar en el switch y usa fgets para poder llenar el array de caracteres y limitar el numero de caracteres que va a coger la funcion de la entrada estandar para evitar asi que escriba sobre posiciones de memoria que no se han reservado para el array. con scanf solo puedes meter los elementos 1 a 1 y es mucho mas tedioso.
@@melakugarciabonacho234 break solo en un switch? Por qué? Yo lo uso en bucles for y me va divinamente... Me gustaría saber el motivo, tal vez esté incurriendo en un error garrafal que desconozco. Y scanf con el formato que he dado antes: scanf("%longitud[^ ]", array) donde pone longitud pones el numero de caracteres que coge la funcion de entrada, y con [^ ] le estas indicando que siga cogiendo caracteres hasta encontrar un salto de linea, por lo tanto coge espacios. ¿?
una preg mas, para q sirve la ruta de escape en 12:08 porque a lo mejor quisiera poner mas bibliotecas y con la ruta de escape meto solo una y entonces el for como q estaria de mas pues solo haria un ciclo,no??
/* Esta es mi version del programa, esta ligeramente mejorada y con casi las mismas instrucciones. Espero les sirva. Bloque 06.04: Estructuras de estructuras y ejemplo de gestion de varias bibliotecas Version por: Cesar Gamboa Fecha de creacion: 10/11/18 */ #include #include #define const_LongMax 50 //Prototipos de funciones void func_vaciar_cadena(); void funcAgregaBiblioteca(); void funcAgregaLibro(); void funcConsultaLibro(); void funcCambiarCadena(char cCadena[const_LongMax]); typedef struct{ char nombre_libro[const_LongMax]; char nombre_autor[const_LongMax]; int iLleno_libro; }libro; typedef struct{ char nombre_biblioteca[const_LongMax]; libro li[10]; // Se definen 10 libros maximo por biblioteca int iLleno_biblioteca; }biblioteca; biblioteca bi[3]; //Se definen 3 bibliotecas que es una estructura dentro de una estructura int main(){ system("color 0A"); //Fondo negro y letras verde claro func_vaciar_cadena(); int iOpcion; char cKey; do{ do{ system("cls"); printf(" [ 1 ] Agregar una nueva biblioteca"); printf(" [ 2 ] Agregar un libro a una biblioteca"); printf(" [ 3 ] Consultar un libro"); printf(" [ 4 ] Terminar
"); printf("
Su opcion:"); scanf("%i",&iOpcion); }while(iOpcion4); switch(iOpcion){ case 1:{ funcAgregaBiblioteca(); break; } case 2:{ funcAgregaLibro(); break; } case 3:{ funcConsultaLibro(); break; } case 4:{ system("cls"); printf(" Muchas gracias por usar nuestro software. "); //system("pause"); return 0; break; } } }while(iOpcion!=4); } void func_vaciar_cadena(){ //Vacia las estructuras escribiendo 0 en el campo lleno de cada registro int i,j; for(i=0;i
En la función consulta, se define aux = 1 para que "no quede en cero" y así no entre al if del otro ciclo for, pero justo antes del if, aux esta definida como una comparación que devuelve (-1, 0 ó 1), de modo que no hacía falta definirla en el anterior ciclo for puesto que no va a quedar siempre en cero.
Emilio, ayuda, pliss, cuando realizo la consulta de la biblioteca que ingrese y el libro que ingrese, buscando por nombre del libro o autor no me sale el nombre de la biblioteca :( #include #include #define N 50 typedef struct{ char nombre_lib[N]; char autor[N]; int lleno_lib; }libro; typedef struct{ char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; biblioteca bi[3]; void vacio(); void cambio(char palabra[N]); void anadebi(); void anadelib(); void consulta(); int main (){ int op; char key; vacio(); system ("cls"); do{ do{ printf ("
Elije que deseas hacer:
"); printf (" (1) Anadir una nueva biblioteca. "); printf (" (2) Anadir un libro a una biblioteca. "); printf (" (3) Consultar un libro. "); printf (" Opcion: "); scanf ("%i",&op); }while (op < 1 || op > 3); switch (op){ case 1: { anadebi (); break; } case 2:{ anadelib(); break; } case 3:{ consulta(); break; } } printf (" Introduce si deseas realizar otra operacion: (S/N) "); fflush (stdin); scanf ("%c",&key); system ("cls"); }while (key == 'S' || key == 's' ); system ("pause"); return 0; } void vacio(){ int i,j; for (i = 0; i < 3 ; i++){ bi[i].lleno_bi = 0; for(j = 0; j < 3; j++){ bi[i].lib[j].lleno_lib = 0; } } } void cambio(char palabra[N]){ int i; for (i = 0; i < N; i++){ if (palabra[i] == ' '){ palabra[i] = '\0'; } } } void anadebi(){ int i, aux; aux = 0; for (i = 0; i < 3 && aux == 0; i++){ if (bi[i].lleno_bi == 0){ printf (" Introduce un nombre para la biblioteca: "); fflush (stdin); fgets (bi[i].nombre_bi, N, stdin); cambio(bi[i].nombre_bi); bi[i].lleno_bi = 1; aux = 1; } } if (aux == 0){ printf ("
No queda ningun hueco libre para una nueva biblioteca. "); } } void anadelib (){ int i, op, aux; aux = 0; for (i = 0; i < 3 && aux == 0; i++){ if (bi[i].lleno_bi == 1){ printf (" (%i) %s.", i+1, bi[i].nombre_bi); } } printf ("
Opcion: "); scanf ("%i",&op); for (i = 0; i < 10 && aux == 0; i++){ if (bi[op].lib[i].lleno_lib == 0){ printf (" Introduce el nombre del libro: "); fflush (stdin); fgets (bi[op].lib[i].nombre_lib, N, stdin); cambio(bi[op].lib[i].nombre_lib); printf (" Introduce el nombre del autor: "); fflush (stdin); fgets (bi[op].lib[i].autor, N, stdin); cambio(bi[op].lib[i].autor); bi[op].lib[i].lleno_lib = 1; aux = 1; } } } void consulta (){ int i, j, op, aux; char buscar[N]; aux = 1; do{ printf (" Buscar:
"); printf (" (1) Nombre del Libro "); printf (" (2) Nombre del Autor "); printf (" Opcion: "); scanf ("%i",&op); }while (op < 1 || op > 2); switch (op){ case 1: { printf (" Introduce el nombre del libro: "); fflush (stdin); fgets (buscar, N, stdin); cambio(buscar); for (i = 0; i < 3 ; i++){ aux == 1; for (j = 0; j < 10 ; j++){ aux = strcmp (buscar, bi[i].lib[j].nombre_lib); if (aux == 0){ printf ("
El libro %s se encuentra en la biblioteca %s . ", buscar, bi[i].nombre_bi); printf (" El autor del libro es %s.
",bi[i].lib[j].autor); } } } break; } case 2: { printf (" Introduce el nombre del autor: "); fflush (stdin); fgets (buscar, N, stdin); cambio(buscar); for (i = 0; i < 3 ; i++){ aux == 1; for (j = 0; j < 10 ; j++){ aux = strcmp (buscar, bi[i].lib[j].autor); if (aux == 0){ printf ("
El libro del autor %s se llama %s y esta en la biblioteca %s . ", buscar, bi[i].lib[j].nombre_lib, bi[i].nombre_bi); } } } break; } } }
@@EmpiezaAProgramar Muchas gracias por tus videos , de verdad me estan sirviendo mucho, me ha tocado repetir desgraciadamente la materia de Algoritmos Y Programación 2 por el tema de la memoria dinamica , listas enlazadas y eso... pero contigo esta vez me siento mejor encaminado para aprobar ya que estoy puliendo las bases
@@agustinlyon8173 Me alegro. Ahora mismo estoy haciendo videos de listas enlazadas en Java y tengo ya hechos de pilas enlazadas y otros tipos de pilas, vamos es una lista de estructuras de datos, te lo pongo aqui por si te interesa: ua-cam.com/play/PLw8RQJQ8K1yTwy6YBA6pHTrpaLzhDUvWI.html
@@EmpiezaAProgramar Excelente gracias !! Solo hay una cosa y es que en la materia solo vemos C como lenguaje de programación xD :( . Java lo veo es después de esta materia para ver lo que es POO básicamente . Pero igual seguramente los veré llegado el momento , gracias de nuevo por tus aportes 👍🏻🙌🏻
La verdad que excelente el contenido, solo quería preguntar algo, no entiendo muy bien para que sirve que hagas un bucle for y después le pongas una ruta de escape con aux=0 si después de usar una sola vez el bucle se cambia a aux=1 para salir, es decir, mi duda es porque utilizar un bucle for si solo se hará una repetición?
Una pregunta y si por ejemplo quisieras borrar un libro, como se podria realizar, un libro o un item entero del struct. Muchisimas gracias por tus videos
Hola, en primera medida queria agradecerte lo bien que explicas y la onda que le pones, segui asi. En segundo lugar va la consulta jeje. En el momento de comparar los array de string discrimina la mayusculas de las minusculas; por ejemplo al cargar el nombre del libro El nombre del viento y luego buscamos el nombre del viento. no lo encuentra ¿hay manera de preever esto? o una solucion. Gracias.
Me sale el programa, pero cuando le doy a la opción 2, la primera vez no sale nada, me hace un salto de línea y no se ejecuta, tengo que volver a poner nuevamente la opción 2 y a la segunda si me sale, ¿por qué?
Tengo una pregunta, por qué en la función añadelib solo introduces una variable ( i ) para recorrer las bibliotecas y los libros con los bucles for, y en la función consulta introduces dos variables ( i , j ), que es lo que yo creo que es lo correcto
+Javier Rio Ortega En añadelib no se utilizan dos variables porque sólo se recorren los libros, el numero de la biblioteca en donde se quiere añadir un libro es ingresado por teclado, por lo que no es necesario recorrer las 3. En consulta si se recorren las tres bibliotecas y a su vez los libros de cada una, por eso hacen falta dos variables, una para las bibliotecas y una para los libros :)
Hola, como estas? No se seguiras atendiendo esto pero tengo un unico problema al compilar. Me dice "undefined reference to WinMain" en una linea en la cual no hay nada. Que puede ser?. Muchisimas gracias por los videos!
hola emilio, yo tengo un problema con el depurador, segui todos tus pasos que diste (creo que era a eso del bloque 5 o 4) y añado los vigilantes, esto lo otro y cuando le doy para depurar me dice que tengo que ejecutar el programa, hasta ahi todo correcto... ejecuto el programa y se me crashea, me dice que dejo de responder, y cuando pongo aceptar se me cierra el dev-c++. si tienes alguna idea de que es lo que causa esto lo agradecería. PD ya probre haciendo eso que ponias la linea de codigo en rojo y aun asi no funciona. espero tu respuesta, saludos.
+Guille5381 los break "rompen" con el concepto de programación estructurada, digamos que es más recomendable usar variables de control. Además, si usas el brake es más complicado después saber por qué salió
+Empieza A Programar jajajaj no tienes pasiencia para explicar a quien tiene alguna duda si no la explicas es xq nos mandas a ir a los videos anteriores
Carlos Santaella No tiene sentido explicar una duda que se despeja con (literalmente) 0.34 segundos buscando en Google... Ademas, tampoco hay que quedarse con una sola fuente, cualquier programador decente VIVE consultando paginas web como stackexchange, APIs, etc...
Hola amigo, soy estudiante de ingenieria en sistemas y tengo una tarea muy parecida a este algoritmo, para mi seria de gran ayuda que me dijeras como puedo agregar el mismo libro en varias bibliotecas? cuando inserto el mismo libro en distintas bibliotecas al momento de buscar el libro me dice que no esta en la biblioteca. Gracias de ante mano
fijate que este codigo esta mejor hecho, cuando buscas un libro o autor te da lo que es referido a ese libro o autor, si encuentra 2 libros con el mismo nombre o mismo autor te los imprime(tambien funciona si estan en dif bibliotecas). //Bloque 6.4: Estructuras de Estructuras y Ejemplo de Gestion de varias Bibliotecas #include #include #define N 50 typedef struct{ char nombre_lib[N]; char autor[N]; int lleno_lib; }libro; typedef struct{ char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; biblioteca bi[3]; void vacio(); void cambio(char palabra[N]); void anadebi(); void anadelib(); void consulta (); void BuscarLibro(); void BuscarAutor(); int main(){ int op; char key; vacio(); do{ do{ printf("Elige una opcion a realizar: "); printf("(1) Anadir una nueva biblioteca. "); printf("(2) Anadir un libro a una biblioteca. "); printf("(3) Consultar un libro. "); scanf("%i",&op); }while(op3); switch(op){ case 1:{ anadebi(); break; } case 2:{ anadelib(); break; } case 3:{ consulta(); break; } } system("pause"); system("cls"); printf("Quieres realizar alguna operacion mas? [S/N]: "); fflush(stdin); scanf("%c",&key); system("cls"); }while(key=='S' || key =='s' || (key!= 'n' && key !='N')); system ("pause"); return 0; } void vacio(){ int i,j; for(i=0;i
Ademas el codigo asi simple como esta no es eficiente por que diferencia entre mayusculas y minusculas. y al hacer una busqueda si escribimos el nombre del libro o el autor sin mayusculas no lo encuentra o viceversa (dependiendo de como esta guardado el libro). en el pdf que el dejo el esta una funcion que nos ayuda a solucionar eso :3 me lei todo el pdf y me lo acuerdo xD desde hace 4 cap
Hola, Emilio, te resultará muy tostón si te envió todo mi código? Le he dado mil vueltas, y no consigo ver el error... Al compilar, y poner el número 1, por ejemplo, me sale "Quieres realizar alguna operacion mas? (S/N)", pero tecleando 2 y 3, también falla. Ayuda! :( //Realizar un programa para controlar varias bibliotecas usando estructuras dentro de estructuras #include #include #define N 50 typedef struct { char nombre_lib[N]; char autor [N]; int lleno_lib; }libro; typedef struct{ char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; biblioteca bi [3]; void vacio(); void cambio (char palabra [N]); void anadebi(); void anadelib(); void consulta(); int main (){ int op; char key; vacio(); do{ do{ printf("Elige una opcion a realizar: "); printf("(1) Anadir una nueva biblioteca. "); printf("(2) Anadir un libro a una biblioteca. "); printf("(3) Consultar un libro. "); scanf("%i", &op); }while(op3); switch(op){ case 1:{ anadebi(); break;} case 2:{ anadelib(); break;} case 3:{ consulta(); break; } } printf(" ------------- "); printf("Quieres realizar alguna operacion mas? (S/N): "); fflush(stdin); scanf("%c", &key); }while (key == 'S' || key == 's'); system("pause"); return 0; } void vacio(){ int i, j; for(i=0; i
Ahi esta el codigo sin agregar nada de mi parte: //Realizar un programa para controlar varia bibliotecas usando estructuras dentro de estructuras. #include #include #define N 50 typedef struct{ char nombre_lib[N]; char autor[N]; int lleno_lib; }libro; typedef struct{ char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; biblioteca bi[3]; void vacio (); void cambio(char palabra[N]); void anadebi (); void anadelib(); void consulta (); int main(){ int op; char key;
vacio();
do{ do{ printf("Elige una opcion a realizar: "); printf("(1) Anadir una nueva biblioteca. "); printf("(2) Anadir un libro a tu coleccion. "); printf("(3) Consultar un libro. "); scanf("%i",&op);
}while(op < 1 || op > 3);
switch (op){ case 1:{ anadebi(); break; } case 2:{ anadelib(); break; } case 3:{ consulta(); break; }
system("pause"); return 0; } void vacio (){//Nuestra variable lleno la pone a 0 int i,j;
for (i = 0; i < 3; i++){ bi[i].lleno_bi = 0; for (j = 0; j < 10; j++){ bi[i].lib[j].lleno_lib = 0; } } } void cambio (char palabra[N]){ int i; for (i = 0; i < N; i++){ if (palabra[i]== ' '){ palabra[i]= '\0'; } } } void anadebi (){ int i,aux; aux = 0; for (i = 0; i < 3 && aux == 0;i++){ if (bi[i].lleno_bi == 0){ printf ("Introduce un nombre para la biblioteca: "); fflush(stdin); fgets (bi[i].nombre_bi,N,stdin); cambio(bi[i].nombre_bi);
bi[i].lleno_bi = 1; aux = 1; } }
if (aux == 0){ printf ("No queda ningun hueco libre para una nueva biblioteca. "); } } void anadelib(){ int i,op,aux; aux = 0;
for (i = 0;i < 3; i++){ if (bi[i].lleno_bi == 1); printf("(%i) %s. ",i,bi[i].nombre_bi); } scanf("%i",&op);
for(i = 0; i < 10 && aux == 0;i++){ if (bi[op].lib[i].lleno_lib == 0){ printf ("Introduce el nombre del libro: "); fflush(stdin); fgets(bi[op].lib[i].nombre_lib,N,stdin); cambio (bi[op].lib[i].nombre_lib);
printf ("Introduce el nombre del autor: "); fflush(stdin); fgets(bi[op].lib[i].autor,N,stdin); cambio (bi[op].lib[i].autor);
bi[op].lib[i].lleno_lib = 1; aux = 1; } } } void consulta (){ int i,j,op,aux; char buscar[N]; aux = 1;
do{ printf ("Que quieres buscar, nombre libro o nombre autor: "); printf ("(1)Nombre libro. "); printf ("(2)Nombre autor. "); scanf ("%i",&op); }while(op < 1 || op > 2);
switch(op){ case 1: { printf("Introduce el nombre del libro: "); fflush(stdin); fgets(buscar, N, stdin); cambio(buscar);
for (i = 0; i < 3; i++){ aux = 1; for(j = 0;j < 10; j++){ aux = strcmp(buscar,bi[i].lib[j].nombre_lib); if (aux == 0 ){ printf ("El libro %s se encuentra en la biblioteca %s. ",buscar,bi[i].nombre_bi); printf ("El autor del libro es %s. ",bi[i].lib[j].autor); } } } break; } case 2:{ printf("Introduce el nombre del autor: "); fflush(stdin); fgets(buscar, N, stdin); cambio(buscar);
for (i = 0; i < 3; i++){ aux = 1; for(j = 0;j < 10; j++){ aux = strcmp(buscar,bi[i].lib[j].autor); if (aux == 0 ){ printf ("El libro %s se encuentra en la biblioteca %s. ",bi[i].lib[j].nombre_lib,bi[i].nombre_bi);
Hola! lo primero muchas gracias por el vídeo. he copiado el código tal cual intentando hacerlo por mi parte y revisando unas cuantas veces y creo que lo tengo idéntico a ti pero aún así cuando ejecuto el programa y después de haber añadido libros y bibliotecas cuando intento buscar realiza la búsqueda me imprime el resultado pero se cierra la consola con un error de windows... podríais ayudarme de alguna manera?
Me da un error, no se cual es //Realizar un programa para controlar varias bibliotecas usando estructuras dentro de las estructuras. #include #include #define N 50 typedef struct { char nombre_lib[N]; char autor[N]; int lleno_lib; }libro; typedef struct { char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; biblioteca bi[3]; void vacio (); void cambio (char palabra[N]); void anadebi (); void anadelib (); int main (){ int op; char key; vacio (); do { do{ printf ("Elige una opcion a realizar: "); printf ("(1) Añadir una nueva biblioteca. "); printf ("(2) Añadir un libro a una biblioteca. "); printf ("(3) Consultar un libro. "); scanf ("%i",&op); }while (op < 1 || op > 3); switch (op) { case 1: { anadebi (); break; } case 2: { anadelib (); break; } case 3: { consulta (); break; } } printf ("Quieres realizar alguna operacion mas? (S/N): "); fflush (stdin); scanf ("%c",&key); }while (key == 's' || key == 's'); system ("pause"); return 0; } void vacio () { int i, j; for (i = 0; i < 3; i++) { bi[i].lleno_bi = 0; for (j = 0; j < 10; j++) { bi[i].lib[j].lleno_lib = 0; } } } void cambio (char palabra[N]) { int i; for (i = 0; i < N; i++) { if (palabra[i] == ' ') { palabra[i] = '\0'; } } } void anadebi () { int i, aux; aux = 0; for (i = 0; i < 3 && aux == 0; i++) { if (bi[i].lleno_bi == 0) { printf ("Introduce un nombre para la biblioteca: "); fflush (stdin); fgets (bi[i].nombre_bi, N, stdin); cambio (bi[i].nombre_bi); bi[i].lleno_bo = 1; aux = 1; } } if (aux == 0) { printf ("No queda ningun hueco libre para nueva biblioteca. "); } } void anadelib () { int i, op, aux; aux = 0; for (i = 0; i < 3; i++) { if (bi[i].lleno_bi == 1) { printf ("(%i) %s. ",i, bi[i].nombre_bi); } } scanf ("%i",&op); for (i = 0; i < 10 && aux == 0; i++) { if (bi[op].lib[i].lleno_lib == 0) { printf ("Introduce el nombre del libro: "); fflush (stdin); fgets (bi[op].lib[i].nombre_lib, N, stdin); cambio (bi[op].lib[i].nombre_lib); printf ("Introduce el nombre del autor: "); fflush (stdin); fgets (bi[op].lib[i].autor, N, stdin); cambio (bi[op].lib[i].autor); bi[op].lib[i].lleno_lib = 1; aux = 1; } } } void consulta () { int op, i, j, aux; char buscar[N]; aux = 1; do { printf ("Que quieres buscar, nombre libro o nombre autor: "); printf ("(1) Nombre Libro. "); printf ("(2) Nombre Autor. "); scanf ("%i",&op); }while (op < 1 || op > 2); switch (op) { case 1: { printf ("Introduce el nombre del Libro: "); fflush (stdin); fgets (buscar, N, stdin); cambio (buscar); for (i = 0; i < 3; i++) { aux = 1; for (j = 0; i < 10; j++) { aux = strcmp (buscar, bi[i).lib[j].nombre_lib); if (aux == 0) { printf ("El libro %s se encuentra en la biblioteca %s. ",buscar, bi[i].nombre_bi); printf ("El autor del libro es %s. ",bi[i].lib[j].autor); } } } break; } case 2: { printf ("Introduce el nombre del Libro: "); fflush (stdin); fgets (buscar, N, stdin); cambio (buscar); for (i = 0; i < 3; i++) { aux = 1; for (j = 0; i < 10; j++) { aux = strcmp (buscar, bi[i).lib[j].autor); if (aux == 0) { printf ("El libro %s se encuentra en la biblioteca %s. ",bi[i].lib[j].nombre_lib, bi[i].nombre_bi); printf ("El autor del libro es %s. ",bi[i].lib[j].autor); } } } break; } } }
Hola! Muchas gracias por tus palabras, la verdad, es que es complicado que la gente le de a "me gusta", pero bueno, todo sea eso! Si te ha gustado este video, ya veras los que vienen mas adelante, en uno hice un sistema de batallas, muy rudimentario, pero que si se amplia se puede aplicar a algun juego :D y en Java tengo en mente muchas mas cosas, pero acepto ideas! Un saludo.
A ese vídeo me tocará llegar en no mucho creo, a mi me gustaría avanzar algo más con las IA, que supongo que son comerse un poquito más la cabeza que con la IA de tu vídeo del tres en raya(que planeo intentar mejorar por mi cuenta) jaja aunque la IA entre en el nivel medio de c o en programación orientada a objetos(no se donde va exactamente), planeo mirarme todo sobre c, java, c++ y programación orientada a objetos por ahora. En cuanto pueda te dejaré una donación aunque tal vez ya a finales de verano que tengo planeado un viaje xD Y si impartes clases online y tengo dinero me tendrás de alumno, no lo dudes! Un saludo!
#include #include #define N 50 typedef struct{ char nombre_lib[N]; char autor[N]; int lleno_lib; }libro; typedef struct{ char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; void vacio(); void anadebib(); void anadelib(); void consulta(); void cambio(char palabra[N]); biblioteca bi[3]; int main(){ int op; char key; vacio(); do{ do{ printf("-------------------------------------------------------- "); printf("************* BIENVENIDOS ************ "); printf("--------------------------------------------------------
"); printf("(1) Anadir una nueva biblioteca. "); printf("(2) Anadir un libro a una biblioteca. "); printf("(3) Consultar un libro. "); scanf("%d", &op); }while(op < 1 || op > 3);
switch(op){ case 1: anadebib(); break; case 2: anadelib(); break; case 3: consulta(); break; } printf("Desea hacer otra operacion?... (S/N) "); fflush(stdin); scanf("%c", &key); }while(key == 's' || key == 'S');
system("pause"); return 0; } void vacio(){ int i, j; for(i = 0; i < 3; i++){ bi[i].lleno_bi = 0; for(j = 0; j < 10; j++){ bi[i].lib[j].lleno_lib = 0; } } } void anadebib(){ int i, aux; aux = 0; for(i = 0; i < 3 && aux == 0; i++){ if(bi[i].lleno_bi == 0){ printf("Introduzca un nombre para la biblioteca. "); fflush(stdin); fgets(bi[i].nombre_bi, N, stdin); cambio(bi[i].nombre_bi);
bi[i].lleno_bi = 1; aux = 1; } }if(aux == 0){ printf("No queda ningun espacio libre. "); } } void anadelib(){ int i, op, aux; aux = 0; for(i = 0; i < 3; i++){ if(bi[i].lleno_bi == 1){ printf("(%d) %s. ", i+1,bi[i].nombre_bi); } }scanf("%d", &op);
for(i = 0; i < 10 && aux == 0; i++){ if(bi[op].lib[i].lleno_lib == 0){ printf("Introduzca el nombre del libro: "); fflush(stdin); fgets(bi[op].lib[i].nombre_lib, N, stdin); cambio(bi[op].lib[i].nombre_lib);
printf("Introduzca el autor del libro: "); fflush(stdin); fgets(bi[op].lib[i].autor, N, stdin); cambio(bi[op].lib[i].autor);
bi[op].lib[i].lleno_lib = 1; aux = 1; } } } void consulta(){ int op, i, j, aux; char buscar[N]; aux = 1;
printf("(1) Buscar nombre de libro. "); printf("(2) Buscar nombre de autor. "); scanf("%d", &op); }while(op < 1 || op > 2);
switch(op){ case 1:{ printf("Introduzca el nombre del libro: "); fflush(stdin); fgets(buscar, N, stdin); cambio(buscar);
for(i = 0; i < 3; i++){ aux = 1; for(j = 0; j < 10; j++){ aux = strcmp(buscar, bi[i].lib[j].nombre_lib); if(aux == 0){ printf("El libro %s se encuentra en la biblioteca %s. ", buscar, bi[i].nombre_bi); printf("el autor del libro es %s. ", bi[i].lib[j].autor); } } } break; } case 2:{ printf("Introduzca el nombre del autor: "); fflush(stdin); fgets(buscar, N, stdin); cambio(buscar);
for(i = 0; i < 3; i++){ aux = 1; for(j = 0; j < 10; j++){ aux = strcmp(buscar, bi[i].lib[j].autor); if(aux == 0){ printf("El libro %s se encuentra en la biblioteca %s. ", bi[i].lib[j].nombre_lib, bi[i].nombre_bi); } } } break; } } } void cambio(char palabra[N]){ int i; for(i = 0; i < N; i++){ if(palabra[i] == ' '){ palabra[i] = '\0'; } } }
Antes que nada muchas gracias por el video; si alguien ve este comentario me gustaría que me dijesen cual es el error en mi código ya que lo he copiado tal cual y me arroja los siguientes errores: - Linea 93. [Warning] passing argument 1 of 'fgets' makes pointer from integer without a cast. - Linea 94. [Note] expected 'char * __restrict__' but argument is of type 'int'. - Linea 76. [Note] expected 'char *' but argument is of type 'int'. CÓDIGO EN C. #include #include #include #define N 50 typedef struct { char nombre_lib[N]; char autor[N]; int lleno_lib; } libro; typedef struct { char nombre_bi[N]; libro lib[10]; int lleno_bi; } biblioteca; biblioteca bi[3]; void vacio(); void cambio(char palabra[N]); void anadebi(); void anadelib(); void consulta(); int main(){ int op; char key; vacio(); do{ do{ printf("Elige una opcion a realizar: "); printf("(1) Añadir una nueva biblioteca. "); printf("(2) Añadir un libro a una biblioteca. "); printf("(3) Consultar un libro. "); scanf("%i",&op); }while(op < 1 || op > 3); switch(op){ case 1:{ anadebi(); break; } case 2:{ anadelib(); break; } case 3:{ consulta(); break; } } printf("Quieres realizar alguna operacion mas? (S/N): "); fflush(stdin); scanf("%c",&key); }while(key == 'S' || key == 's'); system ("pause"); return 0; } void vacio(){ int i,j; for (i = 0; i < 3; i++){ bi[i].lleno_bi = 0; for (j = 0; j < 10; j++){ bi[i].lib[j].lleno_lib = 0; } } } void cambio(char palabra[N]){ int i; for (i = 0; i < N; i++){ if (palabra[i] == ' '){ palabra[i] = '\0'; } } } void anadebi(){ int i, aux=0; for (i=0 ; i
Con opc 1, introducidos tres nombres a la biblioteca, al intentar la 4 da el mensaje pero falla y sale. Si alguien ve el fallo, que avise pf. Gracias #include #include #define N 50 typedef struct{ char nombre_lib[N]; char autor[N]; int lleno_lib; }libro; typedef struct{ char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; biblioteca bi[2]; void vacio (); void cambio(char palabra[N]); void anadebi(); //void anadelib(); //void consulta(); int main (){ int op; char key; vacio(); do{ do{ printf ("Elige que deseas hacer-> "); printf ("(1) Anadir nueva biblioteca "); printf ("(2) Anadir un libro a una biblioteca "); printf ("(3) Consultar un libro "); scanf("%i", &op); }while (op < 1 || op > 2); switch (op){ case 1: anadebi(); break; case 2: //anadelib(); break; case 3: //consulta(); break; } printf ("Deseas realizar otra operacion? (S/N) "); /*Este mensaje sale bien, pero luego salta a system("pause") No espera la entrada de S ó s*/ scanf("%c", &key); }while(key == 'S' || key == 's'); system ("pause"); return 0; } void vacio (){ int i, j; for (i = 0; i < 2; i++){ bi[i].lleno_bi = 0; for (j = 0; j < 10; j++){ bi[i].lib[j].lleno_lib = 0; } } } void cambio(char palabra[N]){ int i; for (i =0; i < N; i++){ if (palabra[i] == ' '){ palabra[i] = '\0'; } } } void anadebi(){ int i, aux; aux = 0; for (i = 0; i < 2 && aux == 0; i++){ if (bi[i].lleno_bi == 0){ printf ("Introduce un nombre para la biblioteca "); fflush(stdin); fgets(bi[i].nombre_bi, N, stdin); cambio(bi[i].nombre_bi); bi[i].lleno_bi = 1; aux = 1; } } if (aux == 0){ printf("No queda hueco libre para nueva biblioteca "); } }
+Empieza a Programar no he podido solucionar este ejercicio: /*27.- Se dispone de la información relativa a 100 estaciones meteorológicas diferentes repartidas por una determinada área geográfica. Conocemos el nombre de las estaciones y la cantidad de lluvia en litros/m2 que recogieron durante el año pasado en cada uno de los 12 meses. Implementa la estructura adecuada para almacenar dicha información. Realiza las funciones necesarias para determinar en qué punto llovió más y en cual menos y la cantidad media de agua recogida en las estaciones meteorológicas durante cada mes*/ Todo esta perfecto pero me trabo cuando tengo que realizar el promedio para saber donde llovio mas, cosa obvia parece pero me trabe espero alguien me ayude
Hola buenas tengo un problema, al momento de ejecutar y cuando se abre la consola, se queda un rato pensando y despues dice que el archivo .exe a dejado de funcionar. Aqui les dejo mi codigo: //Realizar un pograma para controlar varias bibliotecas usando estructuras dentro de estructuras #include #include #define N 50 typedef struct{ char nombre_lib[N]; char autor[N]; int lleno_lib; }libro; typedef struct{ char nombre_bi[N]; libro lib[10]; int lleno_bi; }biblioteca; biblioteca bi[3]; void vacio(); void cambio(char palabra[N]); void anadebi(); void anadelib(); void consulta(); int main(){ int op; char key; vacio(); do{ do{ printf("Elige una opcion a realizar: "); printf("(1) Anadir una nueva biblioteca. "); printf("(2) Anadir un libro a una biblioteca. "); printf("(3) Consultar un libro. "); scanf("%i", &op); }while (op < 1 || op > 3); switch(op){ case 1: anadebi(); break; case 2: anadelib(); break; case 3: consulta(); break; } printf("Quieres realizar alguna operacion mas? (S/N): "); scanf("%c",&key); }while(key == 'S' || key == 's'); system("pause"); return 0; } void vacio(){ int i,j; for (i = 0; i < N; i++){ bi[i].lleno_bi = 0; for (j = 0; j < 10; j++){ bi[i].lib[i].lleno_lib = 0; } } } void cambio(char palabra[N]){ int i; for (i == 0; i < N; i++){ if (palabra[i] == ' '){ palabra[i] = '\0'; } } } void anadebi(){ int i, aux; aux = 0; for(i = 0; i < 3 && aux == 0; i++){ if (bi[i].lleno_bi == 0){ printf("Introduce un nombre para la biblioteca: "); fflush(stdin); fgets(bi[i].nombre_bi, N, stdin); cambio(bi[i].nombre_bi); bi[i].lleno_bi = 1; aux = 1; } } if (aux == 0){ printf("No queda ningun hueco libro para una nueva biblioteca. "); } } void anadelib(){ int i, op, aux; aux = 0; for(i = 0; i < 3; i++){ if(bi[i].lleno_bi == 1){ printf("(%i) %s. ",i,bi[i].nombre_bi); } } scanf("%i",&op); for (i = 0; i < 10 && aux ==0 ; i++){ if(bi[op].lib[i].lleno_lib == 0){ printf("Introduce el mnombre del libro: "); fflush(stdin); fgets(bi[op].lib[i].nombre_lib, N, stdin); cambio(bi[op].lib[i].nombre_lib); printf("Introduce el mnombre del Autor: "); fflush(stdin); fgets(bi[op].lib[i].autor, N, stdin); cambio(bi[op].lib[i].autor); bi[i].lib[i].lleno_lib = 1; aux = 1; } } } void consulta(){ int op, i, j, aux ; char buscar[N]; aux = 1; do { printf("Que quieres buscar, nombre lirbo o nombre autor: "); printf("(1) Nombre Libro. )"); printf("(2) Nombre Autor. "); scanf("%i", &op); }while(op < 1 || op > 2); switch (op){ case 1: { printf("Introduce el nombre del libro: "); fflush(stdin); fgets(buscar, N, stdin); cambio(buscar); for ( i = 0; i < 3; i++){ aux = 1; for(j = 0; j < 10; j++){ aux = strcmp(buscar, bi[i].lib[j].nombre_lib); if (aux == 0){ printf("El libro %s se encuentra en la biblioteca %s. ", buscar,bi[i].nombre_bi); printf("el Autor del libro es %s. ",bi[i].lib[j].autor); } } } break; } case 2: { printf("Introduce el nombre del autor: "); fflush(stdin); fgets(buscar, N, stdin); cambio(buscar); for ( i = 0; i < 3; i++){ aux = 1; for(j = 0; j < 10; j++){ aux = strcmp(buscar, bi[i].lib[j].autor); if (aux == 0){ printf("El libro %s se encuentra en la biblioteca %s. ", bi[i].lib[j].nombre_lib, bi[i].nombre_bi); } } } break; } } }
¡Qué bonita es la informática..!
Ante todo una felicitación a los creadores de este canal. Me han ayudado a entender muchas cosas.
En efecto, pude detectar un par de detalles, el primero cuando se llenan los libros no avisa eso es muy simple. La que realmente me puso a pensar es como solucionar el problema de añadir un libro cuando una biblioteca no existe, para ello solo condicione con
for(j = 0; j < 1; j++){
aux2 = bi[1].lleno_bi; // dentro de corchetes pongo 1 ya que basta con que una biblioteca este creada para que
// se cumpla la condición
}
y todo el contenido de anadelib a partir del scanf lo condiciono con
if(aux2 == 1){
.
.
.
}
else{
printf("Debes introducir primero una biblioteca.
");
}
automáticamente el vuelve a preguntar si deseas realizar si quieres otra operación.
de 400 000 personas que vieron el video 1 ya solo quedamos 12 500 en este XD que facil se rinde la gente, con lo bien explicado que esta
Lo cierto es que la gente empieza con muchas ganas, pero lo van dejando poco a poco, una pena :(.
con esfuerzo he llegado hasta este video,gracias emilio
en realidad veo que poca gente continua el primer video miles de visitas y ahora menos yo me veré la serie entera pero me tomo mi tiempo para entender solo tengo 14 y aunque no es muy complicado por que tu lo explicas muy bien
Me vas a decir que ha sido fácil! Y más después del, por otro lado magistral, bloque 6.3! Aquí llegamos la vieja guardia.
tienes razon, lo que pasa es que debe haber algunos en videos anteriores que todavia no llegaron a este nivel. Es decir, uno empieza en el video 1(y continua aprendiendo) generando 1 visita; luego en el video 2 lo vio, genera otra visita, pero llego por ejemplo hasta el bloque 2 y mañana sigue el programa. en este caso la diferencia deberia ser menor.
pd igual hay muchisimos que lo dejan.
Este vídeo violó por completo mi cerebro xD
Que buen video. Ojala nunca le pierdas las ganas ni el amor a lo que haces. Despues de tantos años ayudas a muchos. Siempre le doy Like a tus video por tus muy buenas explicaciones! Sea lo que sea que estas haciendo ahora - el que persevera triunfa- Mucha suerte y feliz 2019
De verdad gracias por realizar estos vídeos se que hace tiempo que los publicaste pero igual me son de utilidad, en este encontré un detalle que al correr el programa y es que si solo he añadido una biblioteca y decido agregar un libro me aparece un menú para elegir a que biblioteca agregarlo con los números 0,1,2 como opciones en 0 la biblioteca que agregue y las que están vacías sin nombre pero igual me permite agregar libros sin haber creado las bibliotecas y consultarlos. por eso se me ocurrió crear una condición en anadelib() en la parte del menú if(bi[i].lleno_bi==1){ ...} para que solo muestre las bibliotecas que se han creado. Excelentes vídeos (y)
bueno al ser basicamente un refrito del video anterior, logrte entender muchisimo mas de lo que habia entendido el video anterior, bastante bien estructurado el video aunque en si me gustaria que se explicara un poco mas los tipos de estructuras que se deben hacer en estos casos
Buen video aunque extenso bastante bien explicado, creo que la repeticion prolongada de como acceder a las bibliotecas me dejo bastante claro como utilizar estructuras anidadas, apesar de que no las uso para programar microcontroladores, en algun momento sera muy util.
Dejo aqui mi codigo como buen samaritano por si a alguien le sirviese o lo desea comparar:
#include
#include
#define N 50
typedef struct{
char nombre_lib[N];
char autor[N];
int lleno;
}libro;
typedef struct{
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
biblioteca bi[3];
void vacio();
void cambio(char palabra[N]);
void anadebi();
void anadelib();
void consulta();
int main(){
int op;
char key;
vacio();
do{
do{
printf("\tElige una opcion a realizar
");
printf("(1) Anadir una nueva biblioteca.
");
printf("(2) Anadir un libro a una biblioteca.
");
printf("(3) Consultar un libro.
");
fflush(stdin);
scanf("%i",&op);
}while(op3);
switch(op){
case 1:
anadebi();
break;
case 2:
anadelib();
break;
case 3:
consulta();
break;
}
printf("Quieres realizar alguna otra operacion?");
printf("
\t\t");
fflush(stdin);
scanf("%c",&key);
}while(key =='S' || key == 's');
return 0;
}
void vacio(){
int i, j;
for(i=0 ; i
Buenas tardes, Emilio este curso me ha parecedio muy excelente, voy por este video y he aprovechado mucho las explicaciones, ya tenia algo de conocimiento en c pero esto me ha servido de mucho, he agregado algunas cosas a tu codigo y lo comprato para que me des tu opinion:
//Realizar un programa para controlar varias bibliotecas usando estructuras dentro de estructuras
#include
#include
#define N 50
typedef struct{ // Tipo estructura para crear un libro nuevo
char nombrelib[N];
char autorlib[N];
int liblleno;
}libros;
typedef struct{ // Tipo estructura para crear una estructura nueva
char nombrebib[N];
libros libro[10];
int bibllena;
}biblioteca;
biblioteca bib[3]; //Función para crear las bibliotecas, en este caso 3
//Prototipos de las funciones
void vacio();
void cambio(char texto[N]);
void agbiblioteca();
void aglibro();
void agrega(int cont);
void consulta();
//Función principal
int main(){
int op;
char key;
vacio();
do{
do{
system("cls");
printf("** ** ** ** Menu Principal ** ** **
");
printf("** **
");
printf("** 1 Agregar una nueva biblioteca. **
");
printf("** 2 Agregar un libro a una biblioteca **
");
printf("** 3 Consultar un libro. **
");
printf("** **
");
printf("** ** ** ** Menu Principal ** ** **
");
printf("Que operacion desea realizar: ");
scanf("%i",&op);
}while(op < 1 || op > 3);
switch(op){
case 1:{
agbiblioteca();
break;
}
case 2:{
aglibro();
break;
}
case 3:{
consulta();
break;
}
}
printf("
Quieres realizar alguna operacion mas? (S/N): ");
fflush(stdin);
scanf("%c",&key);
}while(key == 'S' || key == 's');
return 0;
}
//Función para inicializar las bibliotecas y los libros en cada una de ellas
void vacio(){
int i,j;
for (i = 0; i < 3; i++){
bib[i].bibllena=0;
for (j = 0; j < 10; j++){
bib[i].libro[i].liblleno=0;
}
}
}
//Función para cambias los
por \0 en los string ingresasdos por teclado y recogidas on fgets
void cambio(char texto[N]){
int i;
for (i = 0; i < N; i++){
if (texto[i] == '
'){
texto[i] = '\0';
}
}
}
//Función para agregar bibliotecas
void agbiblioteca(){
int i,aux;
aux=0;
for (i=0;i
Eres un crak, eres mi idolo, maquina, saludos desde El Slavador
Algunos habrán pensado que si el libro que se consulta o el autor no están en la biblioteca, ¿Qué pasa?
Yo he utilizado un contador el la función consultar, cada vez que se encuentra un libro o un autor el contador aumenta. al final, si no hay libros o autores con ese nombre el contador será igual a cero (o a lo que sea) y con un if podemos mostrar por pantalla que no se ha encontrado nada.
Gracias al creador de este contenido y saludos.
FUNCIÓN CONSULTAR() :
void consulta(){
int op,i,j,aux,contador;
char buscar[N];
contador=0;
do{
printf("Que quieres buscar nombre del libro o nombre del autor
");
printf("(1)Nombre Libro
");
printf("(2)Nombre Autor
");
scanf("%d",&op);
}while(op2);
switch(op){
case 1:{
printf("Introduce el nombre del libro:
");
fflush(stdin);
fgets(buscar,N,stdin);
cambio(buscar);
for(i=0;i
hola compañero quiero darte las gracias por este curso desde que empece a programar con javascript y php soy esclavo de mi ordenador XD en el curso
de desarrollo de aplicaciones que hice nos dieron una ligera intro de C y el profesor
afirmo que conprendiendo la logica y los conceptos basicos de programacion podriamos comprender cualquier lenguage de programacion buscando videos tutoriales o cursos como este que la verdad esta genial te as lucido me encanta C cuando acabe de ver tus videos practicare un tiempo y luego ire a por C++ para pasarme a java que es el que me interesa de verdad El curso que hice estaba enfocado al desarrollo y diseño de paginas web ya saves HTML CSS etc.. y bueno
estoy haciendo una web pero la e detenido para salir de el navegador y pulir mas la parte de la programacion.. e tenido un problemilla en este ejemplo (ejercisio) y es que no me muestra el nombre de la biblioteca en los resultados te paso el codigo aver si lo encuentras el compilador no me da errores y se ejecuta perfectamente todo lo demas anterior mente usaba geany en linux pero ya estoy en dev c++ por que tube un problemilla con el depurador de geany muchas gracias por todo un saludo.
EL ARCADEMAN Lo primero, en vez de estudiar C++ para luego pasarte a Java, hazlo al reves, primero Java (que aqui tienes el curso de iniciacion completo) y luego cuando comprendas los conceptos podras saltar a C++ que es mucho mas complejo si quieres.
Sobre tu error en el codigo, pasale el depurador, si el problema no es de compilacion, depurador siempre.
Un saludo.
muchas gracias necesitaba esa orientacion iba a buscar esa comparacion asi que lo mas probable es que empezace por java de todas formas me as ahorado mucho tiempo boy a depurara el programa y ver si doy con el fallo
un saludo..
Eres un maquina esplicando muchas gracias tio
En el minuto 30:00 , no seria mejor generar una ruta de escape una vez que aux valga 0 en el primer ciclo for ya hacer que salga de ahi el programa??
hola amigo creias que abia abandonado jejeje nooo es que e estado ocupado con
un prllecto de php que me encargaron continuo desde aqui pero pienso repasar todos los ideos nuevamente un saludo
explicas muy muy bien
una duda, si en vez de crear una ruta de escape utilizo break, habrá algún problema?
¿la funcion vacio siempre vamos a tener que usarla cuando utilicemos vectores de estructuras y estructuras de estructuras?
Hola Emilio, en primer lugar enhorabuena por el curso. Te doy un 10!
Tengo un par de preguntas que me surgen desde hace varios vídeos:
¿Existe alguna diferencia importante si uso la sentencia "break" para salir de un bucle en vez de usar una ruta de escape con una variable "aux"?
Y otra:
¿Por qué introduces strings con fgets y usas cambio() en vez de scanf("%longitud[^
]", array)? ¿No es más sencillo?
Espero tu respuesta!
Muchas gracias por todo!
break solo se puede usar en el switch y usa fgets para poder llenar el array de caracteres y limitar el numero de caracteres que va a coger la funcion de la entrada estandar para evitar asi que escriba sobre posiciones de memoria que no se han reservado para el array. con scanf solo puedes meter los elementos 1 a 1 y es mucho mas tedioso.
@@melakugarciabonacho234 break solo en un switch? Por qué? Yo lo uso en bucles for y me va divinamente... Me gustaría saber el motivo, tal vez esté incurriendo en un error garrafal que desconozco. Y scanf con el formato que he dado antes: scanf("%longitud[^
]", array) donde pone longitud pones el numero de caracteres que coge la funcion de entrada, y con [^
] le estas indicando que siga cogiendo caracteres hasta encontrar un salto de linea, por lo tanto coge espacios.
¿?
una preg mas, para q sirve la ruta de escape en 12:08 porque a lo mejor quisiera poner mas bibliotecas y con la ruta de escape meto solo una y entonces el for como q estaria de mas pues solo haria un ciclo,no??
/*
Esta es mi version del programa, esta ligeramente mejorada y con casi las mismas instrucciones. Espero les sirva.
Bloque 06.04: Estructuras de estructuras y ejemplo de gestion de varias bibliotecas
Version por: Cesar Gamboa
Fecha de creacion: 10/11/18
*/
#include
#include
#define const_LongMax 50
//Prototipos de funciones
void func_vaciar_cadena();
void funcAgregaBiblioteca();
void funcAgregaLibro();
void funcConsultaLibro();
void funcCambiarCadena(char cCadena[const_LongMax]);
typedef struct{
char nombre_libro[const_LongMax];
char nombre_autor[const_LongMax];
int iLleno_libro;
}libro;
typedef struct{
char nombre_biblioteca[const_LongMax];
libro li[10]; // Se definen 10 libros maximo por biblioteca
int iLleno_biblioteca;
}biblioteca;
biblioteca bi[3]; //Se definen 3 bibliotecas que es una estructura dentro de una estructura
int main(){
system("color 0A"); //Fondo negro y letras verde claro
func_vaciar_cadena();
int iOpcion;
char cKey;
do{
do{
system("cls");
printf("
[ 1 ] Agregar una nueva biblioteca");
printf("
[ 2 ] Agregar un libro a una biblioteca");
printf("
[ 3 ] Consultar un libro");
printf("
[ 4 ] Terminar
");
printf("
Su opcion:");
scanf("%i",&iOpcion);
}while(iOpcion4);
switch(iOpcion){
case 1:{
funcAgregaBiblioteca();
break;
}
case 2:{
funcAgregaLibro();
break;
}
case 3:{
funcConsultaLibro();
break;
}
case 4:{
system("cls");
printf("
Muchas gracias por usar nuestro software. ");
//system("pause");
return 0;
break;
}
}
}while(iOpcion!=4);
}
void func_vaciar_cadena(){
//Vacia las estructuras escribiendo 0 en el campo lleno de cada registro
int i,j;
for(i=0;i
En la función consulta, se define aux = 1 para que "no quede en cero" y así no entre al if del otro ciclo for, pero justo antes del if, aux esta definida como una comparación que devuelve (-1, 0 ó 1), de modo que no hacía falta definirla en el anterior ciclo for puesto que no va a quedar siempre en cero.
Emilio, ayuda, pliss, cuando realizo la consulta de la biblioteca que ingrese y el libro que ingrese, buscando por nombre del libro o autor no me sale el nombre de la biblioteca :(
#include
#include
#define N 50
typedef struct{
char nombre_lib[N];
char autor[N];
int lleno_lib;
}libro;
typedef struct{
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
biblioteca bi[3];
void vacio();
void cambio(char palabra[N]);
void anadebi();
void anadelib();
void consulta();
int main (){
int op;
char key;
vacio();
system ("cls");
do{
do{
printf ("
Elije que deseas hacer:
");
printf (" (1) Anadir una nueva biblioteca.
");
printf (" (2) Anadir un libro a una biblioteca.
");
printf (" (3) Consultar un libro.
");
printf ("
Opcion: ");
scanf ("%i",&op);
}while (op < 1 || op > 3);
switch (op){
case 1: {
anadebi ();
break;
}
case 2:{
anadelib();
break;
}
case 3:{
consulta();
break;
}
}
printf ("
Introduce si deseas realizar otra operacion: (S/N) ");
fflush (stdin);
scanf ("%c",&key);
system ("cls");
}while (key == 'S' || key == 's' );
system ("pause");
return 0;
}
void vacio(){
int i,j;
for (i = 0; i < 3 ; i++){
bi[i].lleno_bi = 0;
for(j = 0; j < 3; j++){
bi[i].lib[j].lleno_lib = 0;
}
}
}
void cambio(char palabra[N]){
int i;
for (i = 0; i < N; i++){
if (palabra[i] == '
'){
palabra[i] = '\0';
}
}
}
void anadebi(){
int i, aux;
aux = 0;
for (i = 0; i < 3 && aux == 0; i++){
if (bi[i].lleno_bi == 0){
printf ("
Introduce un nombre para la biblioteca: ");
fflush (stdin);
fgets (bi[i].nombre_bi, N, stdin);
cambio(bi[i].nombre_bi);
bi[i].lleno_bi = 1;
aux = 1;
}
}
if (aux == 0){
printf ("
No queda ningun hueco libre para una nueva biblioteca.
");
}
}
void anadelib (){
int i, op, aux;
aux = 0;
for (i = 0; i < 3 && aux == 0; i++){
if (bi[i].lleno_bi == 1){
printf ("
(%i) %s.", i+1, bi[i].nombre_bi);
}
}
printf ("
Opcion: ");
scanf ("%i",&op);
for (i = 0; i < 10 && aux == 0; i++){
if (bi[op].lib[i].lleno_lib == 0){
printf ("
Introduce el nombre del libro: ");
fflush (stdin);
fgets (bi[op].lib[i].nombre_lib, N, stdin);
cambio(bi[op].lib[i].nombre_lib);
printf ("
Introduce el nombre del autor: ");
fflush (stdin);
fgets (bi[op].lib[i].autor, N, stdin);
cambio(bi[op].lib[i].autor);
bi[op].lib[i].lleno_lib = 1;
aux = 1;
}
}
}
void consulta (){
int i, j, op, aux;
char buscar[N];
aux = 1;
do{
printf (" Buscar:
");
printf (" (1) Nombre del Libro
");
printf (" (2) Nombre del Autor
");
printf ("
Opcion: ");
scanf ("%i",&op);
}while (op < 1 || op > 2);
switch (op){
case 1: {
printf ("
Introduce el nombre del libro: ");
fflush (stdin);
fgets (buscar, N, stdin);
cambio(buscar);
for (i = 0; i < 3 ; i++){
aux == 1;
for (j = 0; j < 10 ; j++){
aux = strcmp (buscar, bi[i].lib[j].nombre_lib);
if (aux == 0){
printf ("
El libro %s se encuentra en la biblioteca %s .
", buscar, bi[i].nombre_bi);
printf (" El autor del libro es %s.
",bi[i].lib[j].autor);
}
}
}
break;
}
case 2: {
printf ("
Introduce el nombre del autor: ");
fflush (stdin);
fgets (buscar, N, stdin);
cambio(buscar);
for (i = 0; i < 3 ; i++){
aux == 1;
for (j = 0; j < 10 ; j++){
aux = strcmp (buscar, bi[i].lib[j].autor);
if (aux == 0){
printf ("
El libro del autor %s se llama %s
y esta en la biblioteca %s .
", buscar, bi[i].lib[j].nombre_lib, bi[i].nombre_bi);
}
}
}
break;
}
}
}
Excelente video, esto parece tal cual un proyecto de programación que pondrían en mi universidad jeje
Son ejercicios de primero de mi universidad xD, asi que no vas muy desencaminado.
@@EmpiezaAProgramar Muchas gracias por tus videos , de verdad me estan sirviendo mucho, me ha tocado repetir desgraciadamente la materia de Algoritmos Y Programación 2 por el tema de la memoria dinamica , listas enlazadas y eso... pero contigo esta vez me siento mejor encaminado para aprobar ya que estoy puliendo las bases
@@agustinlyon8173 Me alegro. Ahora mismo estoy haciendo videos de listas enlazadas en Java y tengo ya hechos de pilas enlazadas y otros tipos de pilas, vamos es una lista de estructuras de datos, te lo pongo aqui por si te interesa: ua-cam.com/play/PLw8RQJQ8K1yTwy6YBA6pHTrpaLzhDUvWI.html
@@EmpiezaAProgramar Excelente gracias !! Solo hay una cosa y es que en la materia solo vemos C como lenguaje de programación xD :( . Java lo veo es después de esta materia para ver lo que es POO básicamente . Pero igual seguramente los veré llegado el momento , gracias de nuevo por tus aportes 👍🏻🙌🏻
La verdad que excelente el contenido, solo quería preguntar algo, no entiendo muy bien para que sirve que hagas un bucle for y después le pongas una ruta de escape con aux=0 si después de usar una sola vez el bucle se cambia a aux=1 para salir, es decir, mi duda es porque utilizar un bucle for si solo se hará una repetición?
para no usar la funcion cambio no puedes cambiar la funcion fgets por otra?? como gets??
Una pregunta y si por ejemplo quisieras borrar un libro, como se podria realizar, un libro o un item entero del struct. Muchisimas gracias por tus videos
Hola, en primera medida queria agradecerte lo bien que explicas y la onda que le pones, segui asi. En segundo lugar va la consulta jeje. En el momento de comparar los array de string discrimina la mayusculas de las minusculas; por ejemplo al cargar el nombre del libro El nombre del viento y luego buscamos el nombre del viento. no lo encuentra ¿hay manera de preever esto? o una solucion. Gracias.
emilio eres idolo
Hola tengo un problema... ejecuto el problema y da error, y hago depuracion y corre normal, cual sera el problema?
Me sale el programa, pero cuando le doy a la opción 2, la primera vez no sale nada, me hace un salto de línea y no se ejecuta, tengo que volver a poner nuevamente la opción 2 y a la segunda si me sale, ¿por qué?
Tengo una pregunta, por qué en la función añadelib solo introduces una variable ( i ) para recorrer las bibliotecas y los libros con los bucles for, y en la función consulta introduces dos variables ( i , j ), que es lo que yo creo que es lo correcto
+Javier Rio Ortega En añadelib no se utilizan dos variables porque sólo se recorren los libros, el numero de la biblioteca en donde se quiere añadir un libro es ingresado por teclado, por lo que no es necesario recorrer las 3. En consulta si se recorren las tres bibliotecas y a su vez los libros de cada una, por eso hacen falta dos variables, una para las bibliotecas y una para los libros :)
Hola, como estas? No se seguiras atendiendo esto pero tengo un unico problema al compilar. Me dice "undefined reference to WinMain" en una linea en la cual no hay nada. Que puede ser?. Muchisimas gracias por los videos!
Tengo una pregunta, cuando llego a 3 bibliotecas y quiero añadir otra, me tira el printf pero despues me saca del programa automaticamente ¿Por que ?
Utiliza el depurador y si no te funciona, utiliza otro IDE como Codeblocks.
Un saludo.
hola emilio, yo tengo un problema con el depurador, segui todos tus pasos que diste (creo que era a eso del bloque 5 o 4) y añado los vigilantes, esto lo otro y cuando le doy para depurar me dice que tengo que ejecutar el programa, hasta ahi todo correcto... ejecuto el programa y se me crashea, me dice que dejo de responder, y cuando pongo aceptar se me cierra el dev-c++. si tienes alguna idea de que es lo que causa esto lo agradecería. PD ya probre haciendo eso que ponias la linea de codigo en rojo y aun asi no funciona.
espero tu respuesta,
saludos.
Tremendo
Hola el código da error en la linea 52 y ademas está incompleto, podrías pasar el código completo. Muchas gracias
A mi no me da error, que es lo que te sale?
Si apruebo te lo dedico ;)
¿como puedo depurar en codeblocks?
Recuerda lo que digo en el video 1.1.1, no preguntes por otros IDEs.
Un saludo.
por que no usar la instrucción break simplemente para salir del bucle ?
+Guille5381 los break "rompen" con el concepto de programación estructurada, digamos que es más recomendable usar variables de control. Además, si usas el brake es más complicado después saber por qué salió
buen video aun ue en partes me perdi y tenia que regresar el video ya que es un programa mas conplejo
una pregunta, al usar la letra ñ el compilador me tira error, por que me sucede esto ??
desde ya gracias
+agus ratto Por qué crees tu?
+Empieza A Programar aaayy lmao
+Empieza A Programar jajajaj no tienes pasiencia para explicar a quien tiene alguna duda si no la explicas es xq nos mandas a ir a los videos anteriores
Carlos Santaella No tiene sentido explicar una duda que se despeja con (literalmente) 0.34 segundos buscando en Google...
Ademas, tampoco hay que quedarse con una sola fuente, cualquier programador decente VIVE consultando paginas web como stackexchange, APIs, etc...
mmm no sabia que existian esas pags
y en 13:20 si aux== 0 seria xq no he ingresado nunca nada con fgets y por lo tanto SI tendria los huecos libres, no entiendo xq dices lo contrario..
Hola amigo, soy estudiante de ingenieria en sistemas y tengo una tarea muy parecida a este algoritmo, para mi seria de gran ayuda que me dijeras como puedo agregar el mismo libro en varias bibliotecas? cuando inserto el mismo libro en distintas bibliotecas al momento de buscar el libro me dice que no esta en la biblioteca. Gracias de ante mano
Jean Carlos Marte Gomez Para aprender a hacerlo todo por ti mismo estan tooooodos los videos.
Un saludo.
fijate que este codigo esta mejor hecho, cuando buscas un libro o autor te da lo que es referido a ese libro o autor, si encuentra 2 libros con el mismo nombre o mismo autor te los imprime(tambien funciona si estan en dif bibliotecas).
//Bloque 6.4: Estructuras de Estructuras y Ejemplo de Gestion de varias Bibliotecas
#include
#include
#define N 50
typedef struct{
char nombre_lib[N];
char autor[N];
int lleno_lib;
}libro;
typedef struct{
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
biblioteca bi[3];
void vacio();
void cambio(char palabra[N]);
void anadebi();
void anadelib();
void consulta ();
void BuscarLibro();
void BuscarAutor();
int main(){
int op;
char key;
vacio();
do{
do{
printf("Elige una opcion a realizar:
");
printf("(1) Anadir una nueva biblioteca.
");
printf("(2) Anadir un libro a una biblioteca.
");
printf("(3) Consultar un libro.
");
scanf("%i",&op);
}while(op3);
switch(op){
case 1:{
anadebi();
break;
}
case 2:{
anadelib();
break;
}
case 3:{
consulta();
break;
}
}
system("pause");
system("cls");
printf("Quieres realizar alguna operacion mas? [S/N]: ");
fflush(stdin);
scanf("%c",&key);
system("cls");
}while(key=='S' || key =='s' || (key!= 'n' && key !='N'));
system ("pause");
return 0;
}
void vacio(){
int i,j;
for(i=0;i
Ademas el codigo asi simple como esta no es eficiente por que diferencia entre mayusculas y minusculas. y al hacer una busqueda si escribimos el nombre del libro o el autor sin mayusculas no lo encuentra o viceversa (dependiendo de como esta guardado el libro). en el pdf que el dejo el esta una funcion que nos ayuda a solucionar eso :3 me lei todo el pdf y me lo acuerdo xD desde hace 4 cap
+LionsLite Hahaha si, viste que bueno que esta terminar un ejercicio y pensar como podrías hacerlo más eficiente y/o entendible? :P
Hola, Emilio, te resultará muy tostón si te envió todo mi código? Le he dado mil vueltas, y no consigo ver el error... Al compilar, y poner el número 1, por ejemplo, me sale "Quieres realizar alguna operacion mas? (S/N)", pero tecleando 2 y 3, también falla. Ayuda! :(
//Realizar un programa para controlar varias bibliotecas usando estructuras dentro de estructuras
#include
#include
#define N 50
typedef struct {
char nombre_lib[N];
char autor [N];
int lleno_lib;
}libro;
typedef struct{
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
biblioteca bi [3];
void vacio();
void cambio (char palabra [N]);
void anadebi();
void anadelib();
void consulta();
int main (){
int op;
char key;
vacio();
do{
do{
printf("Elige una opcion a realizar:
");
printf("(1) Anadir una nueva biblioteca.
");
printf("(2) Anadir un libro a una biblioteca.
");
printf("(3) Consultar un libro.
");
scanf("%i", &op);
}while(op3);
switch(op){
case 1:{
anadebi();
break;}
case 2:{
anadelib();
break;}
case 3:{
consulta();
break;
}
}
printf("
-------------
");
printf("Quieres realizar alguna operacion mas? (S/N):
");
fflush(stdin);
scanf("%c", &key);
}while (key == 'S' || key == 's');
system("pause");
return 0;
}
void vacio(){
int i, j;
for(i=0; i
me pasa lo mismo :/
Ahi esta el codigo sin agregar nada de mi parte:
//Realizar un programa para controlar varia bibliotecas usando estructuras dentro de estructuras.
#include
#include
#define N 50
typedef struct{
char nombre_lib[N];
char autor[N];
int lleno_lib;
}libro;
typedef struct{
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
biblioteca bi[3];
void vacio ();
void cambio(char palabra[N]);
void anadebi ();
void anadelib();
void consulta ();
int main(){
int op;
char key;
vacio();
do{
do{
printf("Elige una opcion a realizar:
");
printf("(1) Anadir una nueva biblioteca.
");
printf("(2) Anadir un libro a tu coleccion.
");
printf("(3) Consultar un libro.
");
scanf("%i",&op);
}while(op < 1 || op > 3);
switch (op){
case 1:{
anadebi();
break;
}
case 2:{
anadelib();
break;
}
case 3:{
consulta();
break;
}
}
printf ("Deseas realizar otra operacion: (S/N)
");
fflush (stdin);
scanf("%c",&key);
}while(key == 'S' || key == 's');
system("pause");
return 0;
}
void vacio (){//Nuestra variable lleno la pone a 0
int i,j;
for (i = 0; i < 3; i++){
bi[i].lleno_bi = 0;
for (j = 0; j < 10; j++){
bi[i].lib[j].lleno_lib = 0;
}
}
}
void cambio (char palabra[N]){
int i;
for (i = 0; i < N; i++){
if (palabra[i]== '
'){
palabra[i]= '\0';
}
}
}
void anadebi (){
int i,aux;
aux = 0;
for (i = 0; i < 3 && aux == 0;i++){
if (bi[i].lleno_bi == 0){
printf ("Introduce un nombre para la biblioteca: ");
fflush(stdin);
fgets (bi[i].nombre_bi,N,stdin);
cambio(bi[i].nombre_bi);
bi[i].lleno_bi = 1;
aux = 1;
}
}
if (aux == 0){
printf ("No queda ningun hueco libre para una nueva biblioteca.
");
}
}
void anadelib(){
int i,op,aux;
aux = 0;
for (i = 0;i < 3; i++){
if (bi[i].lleno_bi == 1);
printf("(%i) %s.
",i,bi[i].nombre_bi);
}
scanf("%i",&op);
for(i = 0; i < 10 && aux == 0;i++){
if (bi[op].lib[i].lleno_lib == 0){
printf ("Introduce el nombre del libro: ");
fflush(stdin);
fgets(bi[op].lib[i].nombre_lib,N,stdin);
cambio (bi[op].lib[i].nombre_lib);
printf ("Introduce el nombre del autor: ");
fflush(stdin);
fgets(bi[op].lib[i].autor,N,stdin);
cambio (bi[op].lib[i].autor);
bi[op].lib[i].lleno_lib = 1;
aux = 1;
}
}
}
void consulta (){
int i,j,op,aux;
char buscar[N];
aux = 1;
do{
printf ("Que quieres buscar, nombre libro o nombre autor:
");
printf ("(1)Nombre libro.
");
printf ("(2)Nombre autor.
");
scanf ("%i",&op);
}while(op < 1 || op > 2);
switch(op){
case 1: {
printf("Introduce el nombre del libro: ");
fflush(stdin);
fgets(buscar, N, stdin);
cambio(buscar);
for (i = 0; i < 3; i++){
aux = 1;
for(j = 0;j < 10; j++){
aux = strcmp(buscar,bi[i].lib[j].nombre_lib);
if (aux == 0 ){
printf ("El libro %s se encuentra en la biblioteca %s.
",buscar,bi[i].nombre_bi);
printf ("El autor del libro es %s.
",bi[i].lib[j].autor);
}
}
}
break;
}
case 2:{
printf("Introduce el nombre del autor: ");
fflush(stdin);
fgets(buscar, N, stdin);
cambio(buscar);
for (i = 0; i < 3; i++){
aux = 1;
for(j = 0;j < 10; j++){
aux = strcmp(buscar,bi[i].lib[j].autor);
if (aux == 0 ){
printf ("El libro %s se encuentra en la biblioteca %s.
",bi[i].lib[j].nombre_lib,bi[i].nombre_bi);
}
}
}
break;
}
}
}
Hola!
lo primero muchas gracias por el vídeo.
he copiado el código tal cual intentando hacerlo por mi parte y revisando unas cuantas veces y creo que lo tengo idéntico a ti pero aún así cuando ejecuto el programa y después de haber añadido libros y bibliotecas cuando intento buscar realiza la búsqueda me imprime el resultado pero se cierra la consola con un error de windows... podríais ayudarme de alguna manera?
depurador y veras donde esta el error.
+Empieza A Programar
creo que esta después del bucle de búsqueda pero no me lo explico...
se cierra igual que cuando falta un aspersan
Me da un error, no se cual es
//Realizar un programa para controlar varias bibliotecas usando estructuras dentro de las estructuras.
#include
#include
#define N 50
typedef struct {
char nombre_lib[N];
char autor[N];
int lleno_lib;
}libro;
typedef struct {
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
biblioteca bi[3];
void vacio ();
void cambio (char palabra[N]);
void anadebi ();
void anadelib ();
int main (){
int op;
char key;
vacio ();
do {
do{
printf ("Elige una opcion a realizar:
");
printf ("(1) Añadir una nueva biblioteca.
");
printf ("(2) Añadir un libro a una biblioteca.
");
printf ("(3) Consultar un libro.
");
scanf ("%i",&op);
}while (op < 1 || op > 3);
switch (op) {
case 1: {
anadebi ();
break;
}
case 2: {
anadelib ();
break;
}
case 3: {
consulta ();
break;
}
}
printf ("Quieres realizar alguna operacion mas? (S/N): ");
fflush (stdin);
scanf ("%c",&key);
}while (key == 's' || key == 's');
system ("pause");
return 0;
}
void vacio () {
int i, j;
for (i = 0; i < 3; i++) {
bi[i].lleno_bi = 0;
for (j = 0; j < 10; j++) {
bi[i].lib[j].lleno_lib = 0;
}
}
}
void cambio (char palabra[N]) {
int i;
for (i = 0; i < N; i++) {
if (palabra[i] == '
') {
palabra[i] = '\0';
}
}
}
void anadebi () {
int i, aux;
aux = 0;
for (i = 0; i < 3 && aux == 0; i++) {
if (bi[i].lleno_bi == 0) {
printf ("Introduce un nombre para la biblioteca: ");
fflush (stdin);
fgets (bi[i].nombre_bi, N, stdin);
cambio (bi[i].nombre_bi);
bi[i].lleno_bo = 1;
aux = 1;
}
}
if (aux == 0) {
printf ("No queda ningun hueco libre para nueva biblioteca.
");
}
}
void anadelib () {
int i, op, aux;
aux = 0;
for (i = 0; i < 3; i++) {
if (bi[i].lleno_bi == 1) {
printf ("(%i) %s.
",i, bi[i].nombre_bi);
}
}
scanf ("%i",&op);
for (i = 0; i < 10 && aux == 0; i++) {
if (bi[op].lib[i].lleno_lib == 0) {
printf ("Introduce el nombre del libro: ");
fflush (stdin);
fgets (bi[op].lib[i].nombre_lib, N, stdin);
cambio (bi[op].lib[i].nombre_lib);
printf ("Introduce el nombre del autor: ");
fflush (stdin);
fgets (bi[op].lib[i].autor, N, stdin);
cambio (bi[op].lib[i].autor);
bi[op].lib[i].lleno_lib = 1;
aux = 1;
}
}
}
void consulta () {
int op, i, j, aux;
char buscar[N];
aux = 1;
do {
printf ("Que quieres buscar, nombre libro o nombre autor:
");
printf ("(1) Nombre Libro.
");
printf ("(2) Nombre Autor.
");
scanf ("%i",&op);
}while (op < 1 || op > 2);
switch (op) {
case 1: {
printf ("Introduce el nombre del Libro: ");
fflush (stdin);
fgets (buscar, N, stdin);
cambio (buscar);
for (i = 0; i < 3; i++) {
aux = 1;
for (j = 0; i < 10; j++) {
aux = strcmp (buscar, bi[i).lib[j].nombre_lib);
if (aux == 0) {
printf ("El libro %s se encuentra en la biblioteca %s.
",buscar, bi[i].nombre_bi);
printf ("El autor del libro es %s.
",bi[i].lib[j].autor);
}
}
}
break;
}
case 2: {
printf ("Introduce el nombre del Libro: ");
fflush (stdin);
fgets (buscar, N, stdin);
cambio (buscar);
for (i = 0; i < 3; i++) {
aux = 1;
for (j = 0; i < 10; j++) {
aux = strcmp (buscar, bi[i).lib[j].autor);
if (aux == 0) {
printf ("El libro %s se encuentra en la biblioteca %s.
",bi[i].lib[j].nombre_lib, bi[i].nombre_bi);
printf ("El autor del libro es %s.
",bi[i].lib[j].autor);
}
}
}
break;
}
}
}
El problema esta en la linea 96
Javier Catalán ua-cam.com/video/DYdJVn_k9i8/v-deo.html
Después de este pedazo de vídeo no entiendo como solo hay 3 me gusta xD
Hola! Muchas gracias por tus palabras, la verdad, es que es complicado que la gente le de a "me gusta", pero bueno, todo sea eso!
Si te ha gustado este video, ya veras los que vienen mas adelante, en uno hice un sistema de batallas, muy rudimentario, pero que si se amplia se puede aplicar a algun juego :D y en Java tengo en mente muchas mas cosas, pero acepto ideas!
Un saludo.
A ese vídeo me tocará llegar en no mucho creo, a mi me gustaría avanzar algo más con las IA, que supongo que son comerse un poquito más la cabeza que con la IA de tu vídeo del tres en raya(que planeo intentar mejorar por mi cuenta) jaja aunque la IA entre en el nivel medio de c o en programación orientada a objetos(no se donde va exactamente), planeo mirarme todo sobre c, java, c++ y programación orientada a objetos por ahora.
En cuanto pueda te dejaré una donación aunque tal vez ya a finales de verano que tengo planeado un viaje xD
Y si impartes clases online y tengo dinero me tendrás de alumno, no lo dudes!
Un saludo!
#include
#include
#define N 50
typedef struct{
char nombre_lib[N];
char autor[N];
int lleno_lib;
}libro;
typedef struct{
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
void vacio();
void anadebib();
void anadelib();
void consulta();
void cambio(char palabra[N]);
biblioteca bi[3];
int main(){
int op;
char key;
vacio();
do{
do{
printf("--------------------------------------------------------
");
printf("************* BIENVENIDOS ************
");
printf("--------------------------------------------------------
");
printf("(1) Anadir una nueva biblioteca.
");
printf("(2) Anadir un libro a una biblioteca.
");
printf("(3) Consultar un libro.
");
scanf("%d", &op);
}while(op < 1 || op > 3);
switch(op){
case 1: anadebib(); break;
case 2: anadelib(); break;
case 3: consulta(); break;
}
printf("Desea hacer otra operacion?... (S/N)
");
fflush(stdin);
scanf("%c", &key);
}while(key == 's' || key == 'S');
system("pause");
return 0;
}
void vacio(){
int i, j;
for(i = 0; i < 3; i++){
bi[i].lleno_bi = 0;
for(j = 0; j < 10; j++){
bi[i].lib[j].lleno_lib = 0;
}
}
}
void anadebib(){
int i, aux;
aux = 0;
for(i = 0; i < 3 && aux == 0; i++){
if(bi[i].lleno_bi == 0){
printf("Introduzca un nombre para la biblioteca.
");
fflush(stdin);
fgets(bi[i].nombre_bi, N, stdin);
cambio(bi[i].nombre_bi);
bi[i].lleno_bi = 1;
aux = 1;
}
}if(aux == 0){
printf("No queda ningun espacio libre.
");
}
}
void anadelib(){
int i, op, aux;
aux = 0;
for(i = 0; i < 3; i++){
if(bi[i].lleno_bi == 1){
printf("(%d) %s.
", i+1,bi[i].nombre_bi);
}
}scanf("%d", &op);
for(i = 0; i < 10 && aux == 0; i++){
if(bi[op].lib[i].lleno_lib == 0){
printf("Introduzca el nombre del libro: ");
fflush(stdin);
fgets(bi[op].lib[i].nombre_lib, N, stdin);
cambio(bi[op].lib[i].nombre_lib);
printf("Introduzca el autor del libro: ");
fflush(stdin);
fgets(bi[op].lib[i].autor, N, stdin);
cambio(bi[op].lib[i].autor);
bi[op].lib[i].lleno_lib = 1;
aux = 1;
}
}
}
void consulta(){
int op, i, j, aux;
char buscar[N];
aux = 1;
do{
printf("------------------------------------
");
printf("******** BUSCAR ********
");
printf("-----------------------------------
");
printf("(1) Buscar nombre de libro.
");
printf("(2) Buscar nombre de autor.
");
scanf("%d", &op);
}while(op < 1 || op > 2);
switch(op){
case 1:{
printf("Introduzca el nombre del libro: ");
fflush(stdin);
fgets(buscar, N, stdin);
cambio(buscar);
for(i = 0; i < 3; i++){
aux = 1;
for(j = 0; j < 10; j++){
aux = strcmp(buscar, bi[i].lib[j].nombre_lib);
if(aux == 0){
printf("El libro %s se encuentra en la biblioteca %s.
", buscar, bi[i].nombre_bi);
printf("el autor del libro es %s.
", bi[i].lib[j].autor);
}
}
}
break;
}
case 2:{
printf("Introduzca el nombre del autor: ");
fflush(stdin);
fgets(buscar, N, stdin);
cambio(buscar);
for(i = 0; i < 3; i++){
aux = 1;
for(j = 0; j < 10; j++){
aux = strcmp(buscar, bi[i].lib[j].autor);
if(aux == 0){
printf("El libro %s
se encuentra en la biblioteca %s.
", bi[i].lib[j].nombre_lib, bi[i].nombre_bi);
}
}
}
break;
}
}
}
void cambio(char palabra[N]){
int i;
for(i = 0; i < N; i++){
if(palabra[i] == '
'){
palabra[i] = '\0';
}
}
}
que locura!! jajaja
Antes que nada muchas gracias por el video; si alguien ve este comentario me gustaría que me dijesen cual es el error en mi código ya que lo he copiado tal cual y me arroja los siguientes errores:
- Linea 93. [Warning] passing argument 1 of 'fgets' makes pointer from integer without a cast.
- Linea 94. [Note] expected 'char * __restrict__' but argument is of type 'int'.
- Linea 76. [Note] expected 'char *' but argument is of type 'int'.
CÓDIGO EN C.
#include
#include
#include
#define N 50
typedef struct {
char nombre_lib[N];
char autor[N];
int lleno_lib;
} libro;
typedef struct {
char nombre_bi[N];
libro lib[10];
int lleno_bi;
} biblioteca;
biblioteca bi[3];
void vacio();
void cambio(char palabra[N]);
void anadebi();
void anadelib();
void consulta();
int main(){
int op;
char key;
vacio();
do{
do{
printf("Elige una opcion a realizar:
");
printf("(1) Añadir una nueva biblioteca.
");
printf("(2) Añadir un libro a una biblioteca.
");
printf("(3) Consultar un libro.
");
scanf("%i",&op);
}while(op < 1 || op > 3);
switch(op){
case 1:{
anadebi();
break;
}
case 2:{
anadelib();
break;
}
case 3:{
consulta();
break;
}
}
printf("Quieres realizar alguna operacion mas? (S/N): ");
fflush(stdin);
scanf("%c",&key);
}while(key == 'S' || key == 's');
system ("pause");
return 0;
}
void vacio(){
int i,j;
for (i = 0; i < 3; i++){
bi[i].lleno_bi = 0;
for (j = 0; j < 10; j++){
bi[i].lib[j].lleno_lib = 0;
}
}
}
void cambio(char palabra[N]){
int i;
for (i = 0; i < N; i++){
if (palabra[i] == '
'){
palabra[i] = '\0';
}
}
}
void anadebi(){
int i, aux=0;
for (i=0 ; i
Con opc 1, introducidos tres nombres a la biblioteca, al intentar la 4 da el mensaje pero falla y sale.
Si alguien ve el fallo, que avise pf. Gracias
#include
#include
#define N 50
typedef struct{
char nombre_lib[N];
char autor[N];
int lleno_lib;
}libro;
typedef struct{
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
biblioteca bi[2];
void vacio ();
void cambio(char palabra[N]);
void anadebi();
//void anadelib();
//void consulta();
int main (){
int op;
char key;
vacio();
do{
do{
printf ("Elige que deseas hacer->
");
printf ("(1) Anadir nueva biblioteca
");
printf ("(2) Anadir un libro a una biblioteca
");
printf ("(3) Consultar un libro
");
scanf("%i", &op);
}while (op < 1 || op > 2);
switch (op){
case 1:
anadebi();
break;
case 2:
//anadelib();
break;
case 3:
//consulta();
break;
}
printf ("Deseas realizar otra operacion? (S/N) "); /*Este mensaje sale bien, pero luego
salta a system("pause") No espera la entrada de S ó s*/
scanf("%c", &key);
}while(key == 'S' || key == 's');
system ("pause");
return 0;
}
void vacio (){
int i, j;
for (i = 0; i < 2; i++){
bi[i].lleno_bi = 0;
for (j = 0; j < 10; j++){
bi[i].lib[j].lleno_lib = 0;
}
}
}
void cambio(char palabra[N]){
int i;
for (i =0; i < N; i++){
if (palabra[i] == '
'){
palabra[i] = '\0';
}
}
}
void anadebi(){
int i, aux;
aux = 0;
for (i = 0; i < 2 && aux == 0; i++){
if (bi[i].lleno_bi == 0){
printf ("Introduce un nombre para la biblioteca ");
fflush(stdin);
fgets(bi[i].nombre_bi, N, stdin);
cambio(bi[i].nombre_bi);
bi[i].lleno_bi = 1;
aux = 1;
}
}
if (aux == 0){
printf("No queda hueco libre para nueva biblioteca
");
}
}
+Empieza a Programar no he podido solucionar este ejercicio:
/*27.- Se dispone de la información relativa a 100 estaciones meteorológicas diferentes
repartidas por una determinada área geográfica. Conocemos el nombre de las estaciones y
la cantidad de lluvia en litros/m2 que recogieron durante el año pasado en cada uno de los
12 meses. Implementa la estructura adecuada para almacenar dicha información. Realiza
las funciones necesarias para determinar en qué punto llovió más y en cual menos y la
cantidad media de agua recogida en las estaciones meteorológicas durante cada mes*/
Todo esta perfecto pero me trabo cuando tengo que realizar el promedio para saber donde llovio mas, cosa obvia parece pero me trabe espero alguien me ayude
Joder me acabo de dar cuenta que eres de mi misma universidad ajajaj. Encontraste trabajo?
Hola buenas tengo un problema, al momento de ejecutar y cuando se abre la consola, se queda un rato pensando y despues dice que el archivo .exe a dejado de funcionar.
Aqui les dejo mi codigo:
//Realizar un pograma para controlar varias bibliotecas usando estructuras dentro de estructuras
#include
#include
#define N 50
typedef struct{
char nombre_lib[N];
char autor[N];
int lleno_lib;
}libro;
typedef struct{
char nombre_bi[N];
libro lib[10];
int lleno_bi;
}biblioteca;
biblioteca bi[3];
void vacio();
void cambio(char palabra[N]);
void anadebi();
void anadelib();
void consulta();
int main(){
int op;
char key;
vacio();
do{
do{
printf("Elige una opcion a realizar:
");
printf("(1) Anadir una nueva biblioteca.
");
printf("(2) Anadir un libro a una biblioteca.
");
printf("(3) Consultar un libro.
");
scanf("%i", &op);
}while (op < 1 || op > 3);
switch(op){
case 1:
anadebi();
break;
case 2:
anadelib();
break;
case 3:
consulta();
break;
}
printf("Quieres realizar alguna operacion mas? (S/N): ");
scanf("%c",&key);
}while(key == 'S' || key == 's');
system("pause");
return 0;
}
void vacio(){
int i,j;
for (i = 0; i < N; i++){
bi[i].lleno_bi = 0;
for (j = 0; j < 10; j++){
bi[i].lib[i].lleno_lib = 0;
}
}
}
void cambio(char palabra[N]){
int i;
for (i == 0; i < N; i++){
if (palabra[i] == '
'){
palabra[i] = '\0';
}
}
}
void anadebi(){
int i, aux;
aux = 0;
for(i = 0; i < 3 && aux == 0; i++){
if (bi[i].lleno_bi == 0){
printf("Introduce un nombre para la biblioteca: ");
fflush(stdin);
fgets(bi[i].nombre_bi, N, stdin);
cambio(bi[i].nombre_bi);
bi[i].lleno_bi = 1;
aux = 1;
}
}
if (aux == 0){
printf("No queda ningun hueco libro para una nueva biblioteca.
");
}
}
void anadelib(){
int i, op, aux;
aux = 0;
for(i = 0; i < 3; i++){
if(bi[i].lleno_bi == 1){
printf("(%i) %s.
",i,bi[i].nombre_bi);
}
}
scanf("%i",&op);
for (i = 0; i < 10 && aux ==0 ; i++){
if(bi[op].lib[i].lleno_lib == 0){
printf("Introduce el mnombre del libro: ");
fflush(stdin);
fgets(bi[op].lib[i].nombre_lib, N, stdin);
cambio(bi[op].lib[i].nombre_lib);
printf("Introduce el mnombre del Autor: ");
fflush(stdin);
fgets(bi[op].lib[i].autor, N, stdin);
cambio(bi[op].lib[i].autor);
bi[i].lib[i].lleno_lib = 1;
aux = 1;
}
}
}
void consulta(){
int op, i, j, aux ;
char buscar[N];
aux = 1;
do {
printf("Que quieres buscar, nombre lirbo o nombre autor:
");
printf("(1) Nombre Libro.
)");
printf("(2) Nombre Autor.
");
scanf("%i", &op);
}while(op < 1 || op > 2);
switch (op){
case 1: {
printf("Introduce el nombre del libro: ");
fflush(stdin);
fgets(buscar, N, stdin);
cambio(buscar);
for ( i = 0; i < 3; i++){
aux = 1;
for(j = 0; j < 10; j++){
aux = strcmp(buscar, bi[i].lib[j].nombre_lib);
if (aux == 0){
printf("El libro %s se encuentra en la biblioteca %s.
", buscar,bi[i].nombre_bi);
printf("el Autor del libro es %s.
",bi[i].lib[j].autor);
}
}
}
break;
}
case 2: {
printf("Introduce el nombre del autor: ");
fflush(stdin);
fgets(buscar, N, stdin);
cambio(buscar);
for ( i = 0; i < 3; i++){
aux = 1;
for(j = 0; j < 10; j++){
aux = strcmp(buscar, bi[i].lib[j].autor);
if (aux == 0){
printf("El libro %s se encuentra en la biblioteca %s.
", bi[i].lib[j].nombre_lib, bi[i].nombre_bi);
}
}
}
break;
}
}
}
Para este tipo de cosas, el depurador siempre es la solucion! Un saludo.