![]() |
Combinaciones
Hola de nuevo, esta vez me gustaria saber una cosa, que supongo que más de uno se habrá planteado alguna vez.
Yo tengo 2 Edit, y en uno tengo un 4 escrito, y en el otro un 6. Estos 2 los convierto a Integer con la funcion StrToInt() y entonces, necesitaria saber un bucle, que vaya haciendo desde el 4 hasta el 6 lo siguiente: Empiezo con 4 y con aaaa Paso a aaab aaac, aaad, aaaf, [...], aaaA, aaaB, [...] aaAa, aaAb, aaAc... y asi succesivamente, con numeros inclusive. Despues con 5 letras lo mismo, y finalmente con 6 letras igual. De ahi los numeros de los Edit, de 4 letras hasta 6 letras. Alguna solución? Gracias de antemano, Delar |
Son un par de recorridos For y la función Chr creo que es suficiente.
¿Exactamente qué necesitas? |
Lo que pido, que haga un loop provando todas las posibilidades desde el numero minimo de letras hasta el maximo, indicado en los Edit.
Saludos, Delar |
Ya he entendido lo que pides; Lo que yo te digo (o intentaba decirte) es que intentes hacerlo tú y si tienes algun problema te ayudaremos encantados, pero no solemos hacer código a medida por aquí.
Intenta hacer el FOR que haga el recorrido y a ver si te sale; Si no te sale pon el código y lo revisamos; Si te da algun error, pon el error y lo discutimos... Un saludo. |
Es que no se hacer un FOR de letras, lo se hacer de numeros y con algun que otro problemilla (que tarde o temprano consigo solucionar)
|
Cita:
Como te dijo Neftali. ¿Porqué no expones tu código y erroes? Asi podremos ayudarme mejor. Saludos, |
Bueno, veamos las cosas de otra manera, vamos a realizar lo que antes se conocia como una prueba de escritorio, escribe aquí como lo harias manualmente, a partir de eso, entonces seguramente cualquiera de nosotros te dara ideas de como hacerlo.
Te parece? Salud OS. |
Este es el codigo al que llegue:
Con esto almaceno el caracter 1 en str[1]. Hasta ahi bien, pero como hago combinaciones del tipo str[1]str[1]str[1]str[1], str[1]str[1]str[1]str[2], str[1]str[1]str[1]str[3]... Cuando el ultimo str se pone en 255 pues el penultimo sube al dos y se repite lo mismo pero asi: str[1]str[1]str[2]str[1],str[1]str[1]str[2]str[2],str[1]str[1]str[2]str[3],... y asi succesivamente hasta que todos los str lleguen a 255. Saludos, Delar |
Ya me confundi.
Inicialmente querias hacer esto aaaa aaab aaac ..... aaaA aaaB aaaC ..... aaAa aaAb aaAc ..... Estoy en lo correcto? Salud OS. |
Correctisimo.
|
Y cuando llegue al maximo (zzzz) se cambie a 5 cifras, cuando acabe las 5, cambia a 6, y asi hasta el numero indicado en el Edit.
Parece dificil, se os escapara esto, maestros del Delphi? Yo lo estoy haciendo, pero no se hacer para que pase de las 4 a las 5 cifras, de las 5 a las 6, etc... sino que a mi manera tendria que hacer una funcion para cada cifra. En cuanto acabe el codigo os cuento ;) Saludos, Delar |
Cita:
Una variante podría ser esta:
Prueba el código y amplíalo. Además si no quieres los 255 caracteres (creo que sólo quieres letras) ajusta los for para que en lugar de comenzar por 1 comiencen por el número correspondiente a la "a". |
Ya eso ya lo hice, del 48 a 122.
Saludos y gracias ;) |
En el momento en que le pones más de dos, el programa deja de responder y empieza a chupar recursos.
|
Es normal, piensa que lo has metido en un buqle bastante largo...
Para eso está:
Puedes ponerlo para que se procesen mensajes; Es decir, si lo colocas cuando "cambias" los Edit, te dará tiempo a ver los resultados. |
Ahora si que es perfectisimo.
Saludos! DUDA SOLUCIONADA |
Cita:
Por ejemplo, el fragmento de código
está perfecto para cuatro símbolos. Pero entendí de lo que describes, que el número de símbolos se especifica durante la ejecución. ¿Cómo haces para manajera un número variable? Porque no puedes agegar un ciclo for durante la ejecución. // Saludos |
Um claro, ese es el problema, pero bueno, podria hacer que el bucle fuese del maximo, por ejemplo 10 de maximo, entonces si el numero indicado es 10, hace el bucle con los 10, si es de 9, el bucle con los 9, y asi succesivamente.
|
Si tenemos tres letras (a,b,c), las combinaciones con dos elementos serían:
Código:
aa Código:
aaa Código:
baa Código:
caa Todo esto lo digo, porque se puede hacer un procedimiento recursivo para evitar el número variable de índices. Un ejemplo:
Al procedimiento Combinaciones le pasas la lista de símbolos o letras que desees, así como el número de elementos que quieras poner. El procedimeitno colocará en el tercer parámetro todas las combinaciones. Un ejemplo de uso:
// Saludos |
u.U Tiene buena pinta, lo probaré en cuanto pueda.
Saludos! |
La franja horaria es GMT +2. Ahora son las 02:06:26. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi