|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - olla
Páginas: [1]
1
« en: Miércoles 8 de Mayo de 2002, 13:24 »
Hay tienes el principal, ten encuenta que debes de tener implementada la clase arbol para poder insertar nodos en un arbol:
Voy a suponer que tengo un arbol de números enteros:
void main() { arbol a;//me creo un árbol a.insorden(3);//introduzco numeros en el árbol a.insorden(5); a.insorden(1); a.insorden(8); a.insorden(9); //me recorro los nodos del arbol con los algoritmos de ayer. inorden(a); preorden(a); postorden(a); //ten encuenta que los tres se recorren el arbol pero en diferente orden. a.borarbol();//borro todo el arbol }
2
« en: Martes 7 de Mayo de 2002, 12:42 »
Vamos a ver: -RECURSIVAMENTE:
Hay tres métodos Inorden, Preorden y Postorden, según el orden de recorrido de los nodos.
Inorden: Primero procesamos el Hijo Izquierdo luego la raiz y finalmente el Hijo Derecho.
void inorden(arbol a) { arbol de,iz; datosarbol x; if (!a.vacio()) { iz=a.hijoizq(); de=a.hijoder(); x=a.raiz(); inorden(iz); write(x)//proceso la raiz según el caso inorden(de); } }
Preorden: Primero procesamos la raiz, luego el Hijo Izquierdo y finalmente el Hijo Derecho.
void preorden(arbol a) { arbol de,iz; datosarbol x; if (!a.vacio()) { iz=a.hijoizq(); de=a.hijoder(); x=a.raiz(); write(x)//proceso la raiz según el caso inorden(iz); inorden(de); } }
Postorden: Primero procesamos el Hijo Izquierdo luego el Hijo Derecho y finalmente la raiz.
void postorden(arbol a) { arbol de,iz; datosarbol x; if (!a.vacio()) { iz=a.hijoizq(); de=a.hijoder(); x=a.raiz(); inorden(iz); inorden(de); write(x)//proceso la raiz según el caso } }
NO RECURSIVO.
En cuanto al recorrido no recursivo se hace con la ayuda de una cola, se trata de un recorrido por niveles.
void recorrido(arbol a) { cola c; arbol b; c.crearcola(); c.inscola(a);//inserto el arbol en la cola while (!c.colavacia()) { c.frentecola(b); iz=b.hijoizq(); de=b.hijoder(); x=b.raiz(); write(x);//proceso raiz según caso c.inscola(iz); c.inscola(de); } }
Espero que te haya servido de ayuda...
3
« en: Jueves 2 de Mayo de 2002, 12:21 »
Backtraking es una metodología para resolver algoritmos recursivos. Pruebas por una lado de la recursividad y se ves que no se va a dar con la solución vuelve hacia atrás y tira por otro cámino.
Basicamente es esto, si quieres más información, dílo en este foro y te la envio o te la posteo.
4
« en: Lunes 8 de Abril de 2002, 13:12 »
A esto es a lo que yo me refiero, respecto a Tenesor, no contestes sino lo sabes, eres un "contestador compulsivo", no pasa nada si no lo sabes te callas y punto, nadie te va decir nada. Yo cuando algo no lo se, no contesto y espero a que alguien lo haga y aprendo.
Esta ha sido tu ayuda a lori:
"Y bueno, para lo que dices, para el 1º no tiene mas que hacer un bucle que vaya leyendo y comprobando caracter a caracter el string (no tiene nada que ver con las pilas, es todo funciones de strings) y cargando a las pilas. En el 2º caso lees una pila y la insertas en otra. Y bueno, del 3º ya no se que decirte. "
Respecto a lo primero, ok de acuerdo es algo fácil y lógico, pero luego vas y le dices que para copiar una pila en otra sólo debe de ir leyendo de una pila e insertandola en la otra, jojojojo, tu si que sabes, anda que estamos de ...... Me estás demostrando que no tienes ni p.i de lo que es una pila y ni de como funciona. Espero que Lori no te haya hecho mucho caso porque sino ........ Y respecto a la tercera respuesta, bueno sólo hay que leerla ("no se que decirte"), ya te vale tio¡¡¡.
Vamos a ver Lori: 1º) Te recorres al cadena de caracteres y vas analizando cada caracter y lo almacenas en una Pila según el caso. Para saber que tipo de caracter es solamante tienes que calcular su código ascii (creo que es con la fución ord(caracter)), según en el rango en el que se encuentre será un numero, un caracter especial o una letra.ç 2º) Para copiar una pila en otra debes de ayudarte de una lista en la que las extracciones e inserciones las hagas por el principio. Es decir lees de la pila y lo vuelcas en la lista,para luego leer de la lista y volcarlo en la otra pila, de esta forma tendrás una pila exactamente igual a la otra. 3º) Muy facil: Copia una pila en otra directamente sin pasar por la lista , es decir lees de una y copias en la otra, de esta forma tendrás las mismas letras en dos pilas pero en orden inverso. Solo deberás de comprobar que ambas palabras sean iguales. Saludos.
5
« en: Lunes 8 de Abril de 2002, 12:36 »
Pregunta un poco absurda creo pero bueno ahí va la va la respuesta: Al tratarse de un Array, estamos hablando de una estructura estática, es decir que el tamaño se lo pones tu en el momento de la declaración.
int array[20]: Array de 20 posiciones de enteros.
Si lo que quieres es saber la longuitid de una cadena de caracteres, que no es más que un array de caracteres utiliza la función strlen , que te devuelve un entero.
6
« en: Viernes 8 de Marzo de 2002, 09:21 »
Aclaraciones: - char aux[45]-->Vector unidimensional de caracteres, es decir una cadena de caracteres. - char aux[2][45]-->Vector bidimensional, es decir vector formado por dos palabras, el primer indice [2], nos indica las filas (palabras), y el segundo [45] las columnas (letras que conforman las palabras). - char *aux[45]-->Idem de anterior, salvo que en esta ocasión al poner el * la primera dimension (filas) del vector nos la estamos declarando de forma dinámica, es decir no conoceremos su tamaño en tiempo de compilación sino en tiempo de ejecución, por lo que habrá que reservar memoría (aunque en nuestro caso no será necesario). - char **aux-->Idem de anterior, pero en este caso las dos dimensiones estan declaradas dinamicamente (punteros). - char aux[2][2][23]-->Tridimensional,.... y así sucesivamente.
Para una mayor aclaración podeis realizar un pequeño ejemplo con una estructura como la anterior, y realizarle una inspección (inspect, creo que es ALT-F4) a la variable aux en Borland C 3.11 o superior. Al hacer esta inspección vereis la forma real que tiene el vector.
Respecto al uso de ficheros, en este caso no es recomendable, como ya dije ayer puesto estos están orientados a otros menesteres: información sobre usuarios, agendas, etc, es decir información que pueda llegar a ocupar incluso varios Mb. En nuestro caso por mucho que crezca nuestro vector nunca llegará a ocupar tanta memoria como para realentizar el funcionamiento del programa. Por otra parte "tenesor" creo que no te has enterado, de como va el programa. Es una simulación, con esto quiero decir que no depende de ninguna compañia de telefonía ni deun tamaño standar de sms, ni nada por el estilo. Han determinado 140 caracteres como podrián haber dicho 345, eso da igual. Fijate en los dos vectores: tab-->Almacena la frase. tab2--> El equivalente en SMS a una palabra normal de la lengua. Recuerda que ese equivalente lo han determinado ellos y que se puede cambiar en cualquier momento, porque solo es una simulación.
De todas esto debe de confirmarlo covman, pero creo que está muy claro. Por último se me olvidaba decir, que en este programa no se contempla la posiblidad de ampliar el diccionario SMS, osea que siempre tendrá un tamaño fijo. De todas formas si quisieramos ampliar el diccionario en cualquier momento, deberíamos de olvidarnos del utilizar vector para almacenar las palabras y utilizar estructuras dinámicas, como por ejemplo listas enlazadas. Pero eso sí nunca ficheros, ya que no es eficiente para casos tan triviales como estos, es más rápido un proceso de búsqueda en una estructura cualquiera que en fichero (abrir fichero, comprobra que existe, cerrar fichero...), no,no.
Espero que todo haya quedado aclarado.
Hasta pronto.
7
« en: Jueves 7 de Marzo de 2002, 17:56 »
Vamos a ver, veo ciertos fallos que pueden hacer que tu programa falle. No le hagas caso a tenesor (no te enfades, ahora te estás equivocando). Las declaraciones de tab y tab2 están hechas de forma correcta, lo que has hecho es declararte un vector o tabla de caracteres, puesto que has puesto char *tab[64], al poner el asterisco (puntero) le está indicando que vas a tener un matriz de dos dimensiones. Por ejemplo: char aux[20]="Tenesor"; char *aux2[20]="Pedro,Juan,Miguel,Alfonso.."; printf("%s",aux[1]);--> Escribiría por pantalla la el carácter 'e' printf("%s",aux[1]);-->Escribiría por pantalla la cadena 'Juan' correspondiente a la segunda posición del vector. Recuerda que en las cadena de caracteres y/o vectores su índice empieza a contar desde 0 hasta n. Creo que esta aclaración no iba para tí, porque pienso que lo entendiste a la primera tal como veo en el código, esta aclaración está dirigida a otra persona (jeje).
Lo que debes de hacer:
1º)La cabecera de la función normalsms debe de ser así: void normalsms(char frase1[40]), debes de indicarle en el tipo de datos la longitud de la cadena que le vas a pasar en este caso 40, como hiciste anteriormente con la variable copia(char copia[40]). 2º)Es una locura hacer lo que dice "tenesor" (no me estoy cebando contigo, sólo te corrigo),puesto que es una tontería y no es eficiente utilizar un fichero para algo tan simple. Con las estructuras de datos que estás utilizando vas sobrado, puesto que la busqueda en un fichero es más complicada y más lenta que la busqueda en un vector. 3º)Pasos a seguir en la función normalsms: - Debes de recorrer la frase de entrada (frase1) hasta encontrar un espacio en blanco, momento en el cual tendremos una palabra. - Comparar si esa palabra existe en el vector tab y si es así mostrar en pantalla la palabra correspondiente en el vector tab2. -Para recorrerte (frase1) hasta encontrar un espacio en blanco, puedes utilizar alguna función de la clase string.h, consulta algún manual o ayuda, ahora mismo no recuerdo ninguna, pero te aseguro que la hay.De todas formas creo que ese recorrido lo tienes bien.
Espero haberte/os sido de ayuda ...
8
« en: Jueves 7 de Marzo de 2002, 16:11 »
Vamos a ver Afrodita, explicate que es lo que quieres, porque es que no me entero. Dices que quieres el mismo programa pero en lugar de ficheros con punteros ¿?. No te comprendo o tu no te explicas bien. Estas mezclando ficheros (estructuras contenedoras de datos) con punteros (direcciones de memoria). Aclarate y aclarame y si puedo te ayudaré.
9
« en: Jueves 7 de Marzo de 2002, 13:45 »
De verdad piensas, que vas a aprobar, aunque alguién te conteste, y te deje un código. No será lo que te piden y no te vas a enterar de nada. Cúrratelo un poco e intenta hacerlo tu solo, si no sabes, aprende y otro año será. Piensa que hay gente que ha tardado varios años y convocatorias para aprobar una asigantura de programación, Y desde luego cuando la aprobó no fue copiando, es muy dificil comprender y explicar un código que no es tuyo.
10
« en: Jueves 7 de Marzo de 2002, 09:42 »
Jo,jo,jo, noto cierto aire de ostilidad. Bueno quiero zanjar esta polémica absurda, sólo quiero decir que lo mio fue una reflexión, en voz alta, nada más. No pretendía que me contarás tu vida, tenesor, ni como funciona un foro... Por cierto no me conoces de nada y por lo tanto no tienes ni p.i, de mis conocimientos en este y otros lenguajes, pero eso si una cosa te digo, llevo bastante más de 6 meses programando en este lenguaje. Desde luego debes de ser un hacha en C, con 6 meses de experiencia eh?. Por penúltimo,decirte que me he quedado realmente sorprendido con tus conocimientos, -Pascal: Lenguaje didáctico, recuerdo que lo estudié mi primer año de carrera, allá por el 93, potente y en la vanguardia de los lengujes de programación, jeje. -Delphi: Basado en Pascal, pero visual, la caña, tb es de lo último es lenguajes. -Visual Basic: No está mal, pero quien no sabe ya algo de Visual Basic. Tu si que sabes, según veo cuando pasen 10 años empezarás a programar con ASP,PHP,JSP,JAVASCRIPT,XML, etc....y te sentirás orgulloso, no?.
Sin rencores......
11
« en: Miércoles 6 de Marzo de 2002, 17:19 »
Solo una pregunta, esto es un foro cerrado o abierto, porque por lo que estoy viendo todos preguntan y contesta nuestro queridisimo "tenesor". Que haríamos sin él, anda a ver si eres capaz de controlarte un poco y deja que los demás tb contesten eh? campeón. Tu limítate a moderar, no te enfades, es solo un pensamiento...
Páginas: [1]
|
|
|