|
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 - thot_ohm
1
« en: Sábado 14 de Enero de 2006, 21:13 »
Opino que debo conseguirme algún manualillo de assembler porque no entiendo ni papa. En cuanto al nombre del S.O. que les parece S.O.I. (Sistema Operativo Independiente), haciendo una especie de analogía entre SOI y SOY del verbo SER.
2
« en: Jueves 12 de Enero de 2006, 22:18 »
En el IDE de Turbo Pascal en el menú Options/Memory Sizes. Si Stack es el segmento de memoria usado por las variables estáticas (arrays, etc..) y el Heap es el usado por las variables dinámicas (punteros).
3
« en: Jueves 12 de Enero de 2006, 21:55 »
Ya me leí los artículos de Bob Esponja (aparte de varios por Wikipedia, Google y afines). La verdad que no sé ni por donde cogerlo. Pero el ánimo es el mismo. Lo que pasa es que no entiendo el 80 por ciento de lo que se dice (busqué la definición de kernel en Wikipedia  ). Por lo que veo el kernel o núcleo es el que se encarga de determinar el acceso y uso de los programas, del hardware. ¿Por donde se empezaría en nuestro caso? ¿Como hacer para que un programa hecho en Pascal controle esto? Toro, por lo que veo es libre, pero no ví donde poder descargar el fuente, por lo menos para darle un vistazo. Bob, únete.
4
« en: Jueves 12 de Enero de 2006, 21:26 »
Pues me parece una excelente idea Micropais. No he leído todavía los artículos que menciona Bob Esponja, quise escribir esto antes de leerlos porque, en principio, y como proyecto, me gusta. Claro, yo soy un pobre iluso  que de programación sé, en una escala del 1 al 10, pues como un -1 jeje. He hecho alguna que otra cosilla en Pascal, pero vamos, que de experto nada. De todas maneras, soy muy inquieto y estaré pendiente de este post (claro, si se lleva adelante), y si puedo aportar algo, ahí estaré.
5
« en: Miércoles 11 de Enero de 2006, 15:34 »
¿Qué has hecho? ¿Donde tienes error? ¿Dudas específicas?
6
« en: Viernes 6 de Enero de 2006, 14:29 »
QUOTE Y, sinceramente, pienso que Visual Basic en un futuro me quedará como me quedó Flash+ActionScript: De adorno y para la historia. Aprendí Flash y algo de ActionScript hace unos 8 meses, ahora ya se me olvidó todo y me siento idiota. Hubiera preferido aprender aunque sea JScript, pero no Flash porque eso es para Diseñadores y Animadores, cosa que no lo soy (bendito sea Dios!! kicking.gif ).
Bueno eso suele ocurrir, pero depende de tu enfoque o de tu trabajo, tengo amigos que se lamentan de haber aprendido C en la universidad porque nunca lo usaron y hoy en dia hacen paginas web o programas en flash.
Yo me lamentaba de todo lo que habia aprendido de bases de datos y java en la universidad porque crei que nunca lo iva a usar para nada, que lo mio era el C y el C++ y fue lo que me dedique a aprender....
Hoy en dia trabajo desarrollando en bases de datos oracle y java. blink.gif
O sea, aprender de todo un poco, por lo menos saber su funcionamiento y operación. Luego, la vida y el trabajo, te dirá en qué área profundizar.
7
« en: Jueves 5 de Enero de 2006, 20:38 »
Yo de C no sé mucho (por no decir nada), pero te puedo dar una idea de por donde entrarle.
Metes la palabra en un arreglo, cada letra en una posición del arreglo. Luego recorres el arreglo hasta que encuentres una posición vacía (es decir que se acabe la palabra) y luego vas retrocediendo por el arreglo imprimiendo cada carácter. Con un par de contadores y un par de bucles debes poder resolverlo.
Código no te puedo decir porque apenas me he bajado un par de tutoriales, pero bueno, el algoritmo prácticamente ahí lo tienes.
8
« en: Jueves 5 de Enero de 2006, 20:19 »
Buenas tardes: Acá de nuevo yo con mis dudas (existenciales jeje). Tengo una lista doblemente enlazada la cual inicializo así: Cab y Fin, son los punteros Cabecera y Final que están declarados como una variable tipo PunteroLista y éste tipo tiene esta estructura: PunteroLista = ^NodoLista; NodoLista = record Datos : TipoDatos; Sig : PunteroLista; Ant : PunteroLista; end;
En un momento del código, necesito consultar un dato, cuyo procedimiento es este: procedure ConsultarDato(Info : TipoDatos; var Encontrado : boolean; var Act, Ant : PunteroLista); begin Ant := Cab; Act := Ant^.sig; while not (Act^.Datos.Nombre = Info.Nombre) and (Act <> nil) do begin Ant := Act; Act := Act^.sig; end; if (Act^.Datos.Nombre = Info.Nombre) then Encontrado := true else Encontrado := false; end;
TipoDatos es un tipo con diferentes campos. Ok. Fíjense en las dos primeras líneas de éste procedimiento. Ant := Cab copia la información de Cab en la variable Ant, por lo que en la primera pasada Ant debe ser Nil y apuntar a Nil (¿no?). Le puse un watch a esta variable (Ant) y efectivamente, en la primera pasada toma el valor Nil. En la segunda línea, Act pasa a ser el valor apuntado por Ant^.sig, que, como Ant apunta a Nil, Act debería valer Nil (¿no?), por lo que, en la primera pasada, el while que viene no se ejecutaría. Pues no. Le puse un watch a la variable Act y ésta no toma el valor Nil y el while se ejecuta dos veces antes de que Act tome el valor Nil. En la primera pasada del while (desde Act := Ant^.sig), Act toma el valor PTR($FF02,$E07), en la segunda pasada toma el valor PTR($6030,$18FC), terminando la segunda pasada (en la instrucción Act := Act^.sig), toma el valor Nil. ¿Qué estoy haciendo mal?
9
« en: Jueves 5 de Enero de 2006, 14:22 »
Ah, se me olvidaba lo prometido. El link para bajar el Visual C++ 2005 Express Edition es este: Visual C++ 2005 Express EditionEs un iso que hay que quemar a un CD. El link lleva automáticamente a la descarga. Go for it.
10
« en: Jueves 5 de Enero de 2006, 14:17 »
Ok, gracias Juank. Ya lo estoy bajando.
Y gracias Eternal Idol por la clara aclaración jejeje.
11
« en: Miércoles 4 de Enero de 2006, 23:10 »
Gracias JuanK Creo que me iré por el que me recomiendas como mejor, Visual C++ .NET 2005. Lo estoy buscando en la página de Microsoft pero sólo consigo Visual C++ 2005 Express Edition, que por lo que veo es una versión light. Voy a buscar en Google a ver que encuentro. Es totalmente posible, de hecho en delphi (que hasta donde se es la 'continuacion' de pascal) se puede tambein
Pues déjame volver a ver en la universidad no vaya a ser que esté metiendo una gran pata gorda y esté confundiendo Delphi con C. De nuevo, mil gracias y aviso si consigo el Visual C++ .NET 2005 y posteo el link para futuras consultas.
12
« en: Miércoles 4 de Enero de 2006, 15:48 »
Buenos días y feliz año! Estudio Ingeniería de Sistemas en Venezuela. He hecho algún que otro programa en Pascal, con mayor o menor desenvoltura  . Dentro de un par de semestres, según el plan de estudios, empezarán a exigirnos a programar en C. Cuando empecé a programar en Pascal tuve que aprender muchas cosas en muy poco tiempo, es por eso que quiero tomar previsiones con C para que no me agarren con los pantalones abajo  . Pensé en buscar algún manual en Internet (que los hay a patadas), pero, antes de bajar uno u otro me asaltan varias dudas, a lo mejor estúpidas, pero que más vale resolverlas ahora que no cuando tenga que dar marcha atrás por no preguntar. 1.- ¿Cuales son las diferencias entre C, C++, Builder y todo eso?¿Son versiones actualizadas o es algo así como la diferencia entre FreePascal, Pascal o Borland Turbo Pascal? 2.- ¿Cual de estos compiladores es el más recomendable (para buscar los tutoriales específicos)? 3.- Imagino que compilador e interfaz de usuario (donde escribo el código) forman parte de un mismo paquete ¿Hay algún sitio donde se pueda descargar éste paquete? 4.- Adentrándonos ya en el tema ¿Es posible programar para Windows en C o es como Pascal que se limita a DOS? 5.- ¿C o VisualBasic? Muchas gracias por la ayuda que le puedan prestar a este novatillo y disculpen si pregunté algo demasiado absurdo
13
« en: Viernes 30 de Diciembre de 2005, 20:35 »
Gracias Amilus.
Cuando llamo al procedimiento cambiar, me llevo los parámetros que viste, Lista, mayor y menor. Lo que no estoy seguro es si esto esta bien o no. La verdad es que me ha costado bastante hacer el programita y eso ha sido leyendo de un lado y de otro y adaptando código. Voy a adjuntar el código completo del programa a ver si le puedes echar un vistazo y me dices si voy bien.
Gracias por tu tiempo.
14
« en: Viernes 30 de Diciembre de 2005, 17:11 »
Hola Amilus: He probado así como dices tú, incluso acabo de modificar el procedimiento para probar la forma que me indicas, pero la lista no se ordena. No entiendo cuando dices que dejo un montón de nodos huérfanos  . Simplemente cambio la información de un nodo a otro, pero no toco la estructura de la lista. Si te refieres al Aux que queda siempre por ahí pues con un dispose lo arreglo, no? Bueno, tu me dices en que me estoy equivocando. Gracias.
15
« en: Viernes 30 de Diciembre de 2005, 16:42 »
16
« en: Viernes 30 de Diciembre de 2005, 15:15 »
Buenas. Para ordenar una lista de punteros mediante el método de inserción, ¿cual sería la estructura apropiada? ¿lista enlazada o lista doblemente enlazada? Para implementar el método de ordenación por inserción, debemos ser capaces de recorrer la lista en ambos sentidos, ya que compara un elemento L Sé que la respuesta parece obvia y sería más fácil usar una lista doblemente enlazada, lo que pasa es que ya tengo el programa hecho conuna lista enlazada simple y dos procedimientos de ordenación (selección y burbuja) ya implementados y para usar una lista doblemente enlazada debo replantear casi todo el programa  . Gracias por su ayuda.
17
« en: Viernes 30 de Diciembre de 2005, 14:53 »
Rescatando un poco este post y para dejar la solución al problema que planteaba para futuras consultas. Lo del "error while linking" y el "exitcode=216" al parecer lo provocaba el compilador (FreePascal), probé con TurboPascal y corre sin problemas. El procedimiento cambiar quedó definitivamente de la siguiente manera: procedure Cambiar (var Lista : TipoListaEnlazada; var Mayor, Menor : PunteroLista); var Aux : PunteroLista; begin new(Aux); Aux^.Datos := Mayor^.Datos; Mayor^.Datos := Menor^.Datos; Menor^.Datos := Aux^.Datos; end;
Lo que hice fué simplemente cambiar los datos contenidos en los punteros sin cambiar sus enlaces. No se si será medio chapucera esta forma, pero así funciona. Agradecería cualquier sugerencia, pero como digo, funciona.
18
« en: Viernes 9 de Diciembre de 2005, 16:15 »
Probé en otra computadora y no me daba el "error while linking". Ahora puedo ejecutar el programa, pero en plena ejecucion me da un error. Exitcode =216. Que es esto??
19
« en: Jueves 8 de Diciembre de 2005, 20:28 »
Se me olvidaba Alpha. Burbuja, creo, es el que compara los datos de una lista de a dos de forma consecutiva y si el primero es mayor que el segundo se intercambian. Es decir: 5->4->8->2 Suponiendo que es un array (olvidémonos de los punteros un rato  ), primero compara 5 y 4, como 5 es más mayor, los intercambia: 4->5->8->2 Ahora compara 5 y 8, quedaría igual. Luego Compara 8 y 2 y como se cumple la condición: 4->5->2->8 Y así iterativamente hasta que lo ordena. Suponiendo que el array (A)sea de 4 elementos el código sería algo así: for j:=1 to 3 do for i:=1 to 3 do if (A[i] > A[i+1]) then Cambiar(A[i],A[i+1])
Selección compara un elemento con el resto de los elementos del array. Es decir: 5->4->8->2 Compara 5 con 4, los cambia: 4->5->8->2 Ahora compara 4 con 8 (el tercer elemento) y queda igual. Por último compara el 4 con el 2, y por supuesto, los intercambia: 2->5->8->4 El código es algo así: for Recorrido:= 1 to N-1 do for J :=Recorrido+1 to N do If (A[Recorrido]>A[J]) then Cambiar(A[Recorrido],A[J])
Es decir la idea de éste último método de ordenación es ubicarse en la primera posición del array, seleccionar el elemento de menor tamaño y ponerlo en la primera posición, luego se ubica en la segunda posición y busca el siguiente elemento más pequeño y lo pone en ésta segunda posición etc... Vamos, según tengo yo entendido. Como yo estoy aprendiendo, es muy probable que éste equivocado en algún punto. La idea no es dármela de listillo, si no de aprender. Si estoy errado, por favor díganme donde. Gracias.
20
« en: Jueves 8 de Diciembre de 2005, 19:23 »
Gracias Enko, gracias Alpha. Por lo que deduzco ambos tienen razón. Todo emocionado voy a compilar y va y me sale "Error while linking" y se situa en la última línea de código, al lado del último end. Que es eso?
21
« en: Martes 6 de Diciembre de 2005, 14:21 »
Nadie me puede sugerir nada?
He estado dándole vueltas a la cosa. Supongamos que mi lista enlazada es esta:
rosa->alberto->luis->nil
Queremos intercambiar rosa con alberto. Debería asignar a rosa la dirección a la que apunta alberto. Esto sería: rosa^.sig := alberto^.sig y a alberto asignarle la dirección que tiene rosa ahora y alberto pasaría a ser la cabecera de la lista. Ok, no estoy seguro de cómo hacer esto.
Sugerencias???
22
« en: Domingo 4 de Diciembre de 2005, 14:46 »
Modifiqué el procedimiento de ordenación por selección usando bucles for. procedure Seleccion (var Lista : TipoListaEnlazada); var Ref, Next : PunteroLista; N, J, I : byte; begin if not ListaVacia(Lista) then begin Ref := Lista; N := Longitud(Lista); for I := 1 to N-1 do begin Next := Ref^.Sig; for j := I + 1 to N do begin if Ref^.Datos.Nombre > Next^.Datos.Nombre then Cambiar(Lista, Ref, Next); Next := Next^.Sig; end; Ref := Ref^.Sig; end; end else begin writeln ('La lista est vac¡a. No hay elementos para ordenar'); readln; end; ImprimeLista(Lista); end;
Longitud es una función que devuelve el número de nodos de la lista enlazada. Acá está el código: function Longitud (Lista: TipoListaEnlazada): byte; var n: PunteroLista; i: word; begin n := Lista; i := 0; while n <> nil do begin n := n^.sig; i := i + 1 end; Longitud := i end;
Ok. Sigo teniendo el mismo error: La lista sigue desordenada. Intuyo que el error, proviene del procedimiento cambiar. Probando, lo cambié por éste: procedure Cambiar (var Lista : TipoListaEnlazada; var Mayor, Menor : PunteroLista); var Aux : PunteroLista; begin new(Aux); Aux := Mayor; Mayor := Menor; Menor := Aux; dispose(Aux); end;
pero sigue estando la lista desordenada. Por favor, alguna sugerencia?
23
« en: Sábado 3 de Diciembre de 2005, 21:35 »
Ya comprobé que Pascal permite comparaciones directas sobre los tipos string (tenía duda en eso. Acá está el código con el que probé esto: program ordenacadena; var a, b : string; begin writeln('primera cadena: '); readln(a); writeln('segunda cadena: '); readln(b); if a < b then writeln(a, ' est antes en el abecedario que ', b); if a > b then writeln(b, ' est antes en el abecedario que ', a); readln; end.
24
« en: Sábado 3 de Diciembre de 2005, 21:06 »
Buenas. Ante todo, como siempre, gracias al que se tome su tiempo en leer y tratar de ayudarme en ésta duda que paso a explicar. Tengo una lista enlazada creada con punteros cuya estructura es: type TipoNombre = String[15]; TipoClave = string[3]; TipoSector = String[2]; TipoHabitantes = integer; PunteroLista = ^NodoLista; NodoLista = record Nombre : TipoNombre; Clave : TipoClave; Sector : TipoSector; Habitantes : TipoHabitantes; Sig : PunteroLista; end; TipoListaEnlazada = PunteroLista; var Lista : TipoListaEnlazada;
Sé que los campos de datos del puntero los puedo meter en un solo tipo record, pero quise postearlo así, pues para ver si quedaba más claro. Ok. Creo mi lista y empiezo a meter datos como un degenerado  . La muestro en pantalla y perfecto, se muestran en orden inverso en el que yo los introduje ya que el procedimiento de inserción lo hace al principio de la lista (deliberadamente). Seguidamente, se me pide ordenar la lista generada mediante diferentes métodos (inserción, selección, burbuja...). Ahora estoy con el procedimiento de selección y es acá donde tengo el problema. He revisado el código, y hasta donde me llegan mis conocimientos, parece estar bien, pero cuando imprimo la lista después de haber ejecutado el procedure, ésta sigue estando igual de desordenada. Éste es el procedure: procedure Seleccion (var Lista : TipoListaEnlazada); var Ref, Next : PunteroLista; begin if not ListaVacia(Lista) then begin Ref := Lista; repeat Next := Ref^.Sig; while Next <> nil do begin if Ref^.Nombre > Next^.Nombre then Cambiar(Ref, Next); Next := Next^.Sig; end; Ref := Ref^.Sig; until Ref = nil; end else begin writeln ('La lista esta vac¡a. No hay elementos para ordenar'); readln; end; end;
El procedure Cambiar es este: procedure Cambiar (var Mayor, Menor : PunteroLista); var Aux : PunteroLista; begin new(Aux); Aux^.Sig := Mayor^.Sig; Mayor^.Sig := Menor^.Sig; Menor^.Sig := Aux^.Sig; dispose(Aux); end;
El campo clave para ordenar, como puede verse, es el nombre de la ciudad. Yo estoy haciendo las comparaciones directas ya que leí por ahí que pascal reconoce a>b o luis<diana. No sé si estoy pasando bien la lista por valor (si es que esto se puede) o es que debo crear una nueva lista con los nuevos valores ordenados (cosa que me parece que carece de valor), o no estoy haciendo correctamente el intercambio de los nodos en el procedimiento Cambiar. Estoy nuevo en esto de los punteros y estoy bastante enredado. El procedimiento Selección está adaptado de un procedimiento de ordenación por selección creado para arrays unidimensionales y aunque ustedes probablemente lo vean fácil, a mi me costó bastante debido a mi inexperiencia y debido a ella, no me extrañaría que tuviera algo malo  . Bueno, creo que eso es. Gracias, de nuevo, a todos por su atención y perdón por el ladrillito.
25
« en: Martes 8 de Noviembre de 2005, 20:07 »
Buenas.
Tengo un programa ya codificado y casi, totalmente funcional (lo del casi, lo extiendo más tarde). Adjunto el código para que lo consulte quien lo deseé.
En éste programa, hay varios procedmientos (AbreArchivoX, GuardaArchivoX), que hacen prácticamente lo mismo. He intentado poner éstos procedimientos en uno sólo, pero estoy un poco verde en lo que se refiere a pasar variables (o constantes) por valor o por referencia. Intuyo que, por ejemplo, en el caso de AbrirArchivo, podría implementar un único procedimiento en el cual me puedo llevar, cuando lo llamo, la ruta del archivo que necesito abrir como un string, pero a la hora de asignar éste string a la variable tipo file, sí necesito procedimientos separados, a no ser que use una estructura case (o un if anidado), lo que me parece poco eficiente. Sugiéranme una línea de acción para tener menos procedimientos en el programa.
También tengo muchas variables globales. Quisiera usarlas localmente, pero tengo un poco de miedo de hacerlo ya que no manejo muy bien los conceptos de pasar variables por valor o por referencia. Si alguno de ustedes me puede dar una rápida explicación se lo agradecería.
Por último, fíjense en el procedimiento DeterminarCiudad, ya que debo tener algún error que se me escapa, ya que a la hora de que me diga cual es la ciudad elegida para construir el hospital no me escribe nada. Creo que los cálculos hechos en el array de las distancias están correctos, pero como digo, no imprime el nombre de la ciudad. Seguro es una estupidez, pero no termino de verla.
Gracias a todos por tomarse parte de su valioso tiempo en ayudar a este "Perdido en Pascal".
Saludos.
|
|
|