| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
dark_1
Registrado: 09 Oct 2007 Mensajes: 6
| Publicado: 09/10/2007 3:53 pm | | | Título: Comparacion de palabras, Almacenamiento de ellas mismas... |
| Saludos! Bueno, recurro al foro por la razon que no se me ocurre (y dios google no me ayuda mucho tampoco) cómo guardar varias palabras en un mismo tipo
Me explico; la idea del programa es la igualdad de conjuntos, le pido al usuario que ingrese 2 elementos y que el programa muestre en pantalla los Conjuntos que cumplen con tener a ambos elementos
-El problema que tengo, es que los conjuntos deben tener solo palabras como elementos, es decir;
| Código: | Conjunto A = Casa, Auto, Calle 29... Conjunto B = Calle 29, Auto, Llaves, Mouse... Conjunto C = Mouse, Botella, Calendario /*acá el usuario ingresa, por ejemplo, auto y calle., entonces el programa muestra en pantalla que los conjuntos que cumplen con tener a ambos elementos serian Conjunto A, Conjunto B*/ |
Lo que está en el code no tengo idea como hacerlo, intente con la libreria string.h, pero no me permite guardar mas de 1 frase.
-Ya, Si se logrará guardar los conjuntos como esta mostrado arriba, como lo haria para que el programa buscara los elementos tal que exista(n) algun(os) conjunto(s) que cumpla(n) con lo pedido? Hay una funcion en la libreria string.h que se llama "strncmp" que compara la igualdad de dos palabras, y le asigna valor numerico igual a cero si son iguales.
Porfavor, El que pueda ayudarme con lo que pueda, estaria muy agradecido.
Cualquier ayuda sirve, si saben de alguna libreria que quizas podria servir, posteenla y la estudiare, pero porfavor ayudenme, busque en dios google varias librerias y la string.h me parece la mas adecuada.
Disculpen si rompi alguna regla con postear acá la pregunta, o si me extendi demasiado
Uso el dev-c++ 4.9.9.2 y tengo intel pentium 4
Ultima edición por dark_1 el 09/10/2007 7:26 pm; editado 2 veces |
| | Volver arriba | |  | cheroky
Registrado: 22 Sep 2005 Mensajes: 1372 Ubicación: En ecx esperando un call
| Publicado: 09/10/2007 5:22 pm | | | Título: |
| Para empezar con buen pie deberías reportar el lenguaje que vas a utilizar y ser mas explicito con tu problema.
Por otra parte el problema que mencionas es posible que se pueda afrontar con tipos abstractos de datos (TAD) , formando una colección de elementos de igual o distinto tipo, en C esto se construye con estructuras.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
| | Volver arriba | |  | dark_1
Registrado: 09 Oct 2007 Mensajes: 6
| Publicado: 09/10/2007 5:24 pm | | | Título: |
| uff, lo siento, el lenguaje es C.
Puedes explicarme como seria con "Estructuras"?
Gracias por responder ^^ |
| | Volver arriba | |  | | cheroky
Registrado: 22 Sep 2005 Mensajes: 1372 Ubicación: En ecx esperando un call
| Publicado: 10/10/2007 5:43 am | | | Título: |
| El uso de estructuras en C es un tema básico incluido en todos los manuales/tutórales sobre el lenguaje. Cualquier duda concreta que tengas al respecto no dudes en preguntarla.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3841 Ubicación: Mexico
| Publicado: 10/10/2007 7:30 am | | | Título: Re: Comparacion de palabras, Almacenamiento de ellas mismas. |
| | dark_1 escribió: | | Lo que está en el code no tengo idea como hacerlo, intente con la libreria string.h, pero no me permite guardar mas de 1 frase. |
El almacenamiento de cadenas de texto (en la forma de arrays de caracteres) es parte del lenguaje y no necesitas utilizar las funciones declaradas en <string.h>. ¿Cual es tu nivel en el lenguaje C?
Si todavia no han visto el tema de las cadenas de texto me temo que no vas a poder desarrollar el programa (ya que usando arrays es la forma mas simple).
En una forma muy general utilizando arrays de arrays (mal llamadas matrices) los conjuntos se declararian asi:
| Código: | #define LONG_MAX_CADENA 128
/* ... */
char A[][LONG_MAX_CADENA] = { "Casa", "Auto", "Calle 29", };
char B[][LONG_MAX_CADENA] = { "Calle 29", "Auto", "Llaves", "Mouse" };
char C[][LONG_MAX_CADENA] = { "Mouse", "Botella", "Calendario" }; |
Y para comparar cada una de las cadenas introducidas por el usuario (o leidas de un archivo, etc.) con las de cada conjunto utilizarias las funciones strcmp y strncmp.
Por ultimo como ya te indico Cheroky lo mejor que puedes hacer tanto en el tema de arrays como estructuras es la lectura de un buen tutorial y/o libro, mas informacion sobre esto en la base de datos de los foros y en las secciones "Cursos" y "Enlaces" de este sitio.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | dark_1
Registrado: 09 Oct 2007 Mensajes: 6
| Publicado: 10/10/2007 9:49 am | | | Título: Re: Comparacion de palabras, Almacenamiento de ellas mismas. |
| | Código: | #include <stdio.h> #include <string.h> #include<windows.h>
int main(){ char Conjunto A[3][20] = { "Camion", "Viana", "Calle 29"}; char Conjunto B[3][20] = { "vina", "alvares", "choca"}; char Elemento1[20]; char Elemento2[20]; gets(Elemento1); gets(Elemento2); int i; for(i=0;i<3;i++){ if (strcmp(Conjunto A[i], Elemento1) == 0){ for(i=0;i<3;i++){ if (strcmp(Conjunto A[i], Elemento2) == 0) printf("Conjunto A cumple \n"); } } }
system("pause"); return 0; } |
Esto es lo que saque a puro string, y el bucle
| Código: | for(i=0;i<3;i++){ if (strcmp(Conjunto A[i], Elemento1) == 0){ for(i=0;i<3;i++){ if (strcmp(Conjunto A[i], Elemento2) == 0) printf("Conjunto A cumple\n"); } } } |
lo va a hacer "N veces" donde N es el numero de conjuntos; Respecto a este bucle, hay alguna manera de no hacerlo N veces,y que el programa busque en cada conjunto, no se si se podra con un for o un do while.. |
| | Volver arriba | |  | | rir3760

Registrado: 01 Oct 2004 Mensajes: 3841 Ubicación: Mexico
| Publicado: 11/10/2007 8:29 am | | | Título: |
| Ese programa no compilaria ya que en C los nombres dados a los objetos no pueden contener espacio blanco (espacio, tabulador, etc.):
| Código: | char Conjunto A[3][20] = { "Camion", "Viana", "Calle 29" };
char Conjunto B[3][20] = { "vina", "alvares", "choca" }; |
Para corregirlo lo mas sencillo es sustituir el espacio por un caracter valido como el guion bajo:
| Código: | char Conjunto_A[3][20] = { "Camion", "Viana", "Calle 29" };
char Conjunto_B[3][20] = { "vina", "alvares", "choca" }; |
En cuanto al numero de operaciones que realiza la busqueda en este caso (con solo tres elementos) en realidad no importa (lease no impacta el rendimiento del programa).
En casos con un mayor numero de elementos y donde se requiera una busqueda mas eficiente se puede utilizar la busqueda binaria ya sea una funcion propia o la provista por la biblioteca estandar de C.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | dark_1
Registrado: 09 Oct 2007 Mensajes: 6
| Publicado: 11/10/2007 9:59 am | | | Título: |
| Oka gracias!.
estudiare mas los strings, son super utiles (con los arrays) |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |