Pascal es un muy buen lenguaje sobretodo de cara al aprendizaje, de hecho Wirth lo diseñó precisamente para eso, y se convirtió (en su momento) en el lenguaje de facto usado en las universidades.
Uno de los mayores aportes que supuso (que pasa desapercibido para usuarios 'normales') es que el código conduce al compilador, es decir la especificación del lenguaje no difiere demasiado entre el código escrito y el compilado, lo que lo une más íntimamente al hardware y sobretodo ayuda a encarrilar más acertadamente a los algoritmos a ser más exactos y eficientes, de lo que hasta ese momento suponían ser otros lenguajes de programación de alto nivel. O dicho de un modo simplificado, es el primer lenguaje de alto nivel que no dista tanto de un lenguaje de bajo nivel. Todo ello se debe a que es un lenguaje estructurado... hasta entonces los lenguajes eran muy complejos (y a menudo muy extensos) y los compiladores aún mucho más.
Ahora, tiene serias limitaciones (respecto de lenguajes modernos).
C es un lenguaje muy complejo, básicamente es el Frankestein de la programación, cada idea nueva que aparece y sale 'rentable' se endosa en una nueva versión sin apenas tocar nada del resto del lenguaje y con una curva de aprendizaje largo. Aunque cuando uno conoce a fondo un lenguaje, aprender otro es más sencillo que partir de cero (conocimientos), para C esto no se aplica al 100%, pero si uno tiene suficientes conocimientos de ensamblador, hardware y sistemas operativos, resulta más asequible. Viniendo de Pascal, yo te recomendaría quizás Delphi (sigue activo), sería una actualización, un punto intermedio que te acercaría más a C pero sin salir de Pascal.
lo que me dices es como una tecnica de aprendizaje supervisado para predecir una función a partir de datos de entrenamiento.
No. No se trata de aprendizaje supervisado... No te dejes arrastrar por eso de 'alimentar'... pues en el sentido de entrada de datos, de suministrar los datos.
El algoritmo de silabación todo lo que debe hacer es una de dos opciones (pueden diseñarse para que sea uniforme y proporcione la misma respuesta).
- Pasado un string señalar si todo el string recibido representa una sílaba o no.
- Pasado un string (por ejemplo una palabra), reconocer una sílaba hasta donde logre reconocerla como tal (y lo más larga posible*) e indicar en que punto del string ha terminado esa sílaba.
Esa diferencia en el diseño de la respuesta del algoritmo, puede enfocarse como decía en función de la entrada que se le pretenda proporcionar.
El primero se presta a la combinatoria (A-ZZZZZZ, esto es A-Z, AA-ZZ, AAA-ZZZ,AAAA-ZZZZ, AAAAA-ZZZZZ, AAAAAA-ZZZZZZ). Este modo garantiza obtener absolutamente todas las sílabas que reconoce el idioma español (así sean raramente usadas (por ejemplo 'lex' como en 'sílex' o 'xi' como en 'léxico').
El segundo se presta a pasar como entrada un texto muy largo indicando un índice desde el que mirar y devolviendo el funto final reconocido, así el tramo intermedio entre ambos es la sílaba reconocida (si devuelve true, claro dada una entrada (que contiene la palabra) como 'ZZZZZZZZZZZZ', avanzaraía hasta el final sin descubrir ninguna sílaba.
Es decir hay dos algoritmos uno que determina si un string entrado es una sílaba o que avanza hasta reconocer una sílaba (o saltar si no lo es) y el algoritmo que le entrega esos strings al algoritmo de silabación y que cuando le devuelve una sílaba 'formada' que aún no contiene la añade a la lista de sílabas del español...
Esto, una vez completo el diccionario de sílabas, ya está no se necesita más... de hecho hasta e sprobable que buscando se encuentre algún fichero con todas las sílabas dle español (o casi todas). El primer método (descrito en este mensaje, es decir el de combinatoria) recogerá todas, e tanto el que recibe textos, recogerá solo las sílabas que consten en ese texto, luego para asegurarse que tengan una cantidad lo más amplía posible conviene que reciba muchos textos... las que finalmente no aparecieren es claro que son poco probables.
El mayor problema del alimentador por combinatoria, es que serán enormemente más las combinaciones (de hasta 6 letras) que no son sílabas que las que sí lo son. s
* Sea la palabra 'constructor': lógicamente el reconocedor podría aceptar 'co' como sílaba, pero la idea es dar la sílaba lo más larga que sea posible, luego 'con' también es una sílaba, peor ¿puede ser aún más larga?. Si la sílaba finalmente es 'cons'.
Veré si el fin de semana hecho una ojeada a las reglas vigentes de silabación de la gramática española para sugerir un pseudocódigo del algoritmo preciso...
mi idea es hacer, teniendo una lista de silabas directas, indirectas y trabadas apartir de esas listas probar todas las combinaciones posibles y tratar de formar palabras rapidamente ...
Precisamente por eso te digo, que obtener una lista lo más exaustiva de la sílabas reales, es algo que se hace de una vez y ya, no hay que ir retocando cada cierto tiempo nada. Es una cantidad finita. Un diccionario sin necesidad de crecer...
Finalmente a la hora de aplicar contraseñas, se aplica como te indicaba unos mensajes más arriba, concatenado sílabas de modo recursivo, que es si cabe más eficiente que leer una contraseña de fichero. Esto hace innecesario almacenar diccionarios de Gigabytes o Terabytes, basta ese pequeño diccionario de sílabas.
Es luego en este algoritmo donde uno puede operar para condicionar de formas más complejas... yo sugería (por ejemplo) la inclusión de dígitos (delante, en medio o detrás de una sílaba)...
Despues de terminar de desarrollar el programa para generar diccionario, dejare de publicar diccionario y traere el programa, me voy a poner mas tiempo a desarrollar el programa mejor.
Es lo mejor...
Esas variaciones a base de poner prefijos o sufijos, solo sirve para generar diccionarios interminables en ficheros y que jamás serán 'completos' al gusto de uno...
El diccionarios de sílabas lo creas una vez (con el programa para desarrollarlas que si funciona bien también se ejecutará una única vez), el tiempo entonces lo gastarás a futuro en simplemente filtrar el modo en que las sílabas se combinan para producir (en tiempo real, generar y usar), combinaciones específicamente acotadas...