|
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.
Temas - Ocean Soul
Páginas: [1]
1
« en: Martes 26 de Diciembre de 2006, 15:56 »
Saludos, tengo un grave problema. Primero quiero preguntarles: se puede hacer esto: RegArch=Record AEnteros=File of integer; AReales= file of real; end;
Porque el compilador no me da error, pero si aparece el error en tiempo de ejecucion de "6- invalid file handle" al intentar cerrar alguno de los archivo del registro. Que puedo ser?
2
« en: Jueves 5 de Octubre de 2006, 16:07 »
Tengo que duda nuevo: type ptrnodo=^nodo; nodo=record elem:TElemento; {telemento=integer} sig:ptrNodo; end;
Mas adelante, ha una variable: ejemplo:nodo, en el campo sig se le asigna la direccion de memoria x1, luego se hace: dispose(ejemplo^.sig) entonces (ejemplo^.sig<>NIL) y (ejemplo^.sig=x1). Esto es cierto? Yo creo que si, porque "el" dispose debe solo borrar el elemento al que apunta "sig". Es decir borra el elemento de memoria, pero no reescribe en ejemplo^.sig "el" NIL, sino que lo deja como esta, apuntando a nada... Que me dicen?
3
« en: Jueves 5 de Octubre de 2006, 15:33 »
Saludos, tengo una pregunta frecuente... El siguiente codigo supuestamente elimina un dato del archivo, ningun error aparece. Pero algo debe estar mal. Me adyudan? Assign(Archivo, 'auxi.dat'); <----- Esto se hizo al principio del programa. Begin Writeln('Ingrese <0 para Eliminar todos los sudoku en el archivo.'); Writeln('o ingrese la posicion en el archivo para Eliminar un sudoku particular del archivo.'); Write('Su opcion? '); Readln(pos); if pos<0 then Rewrite(Archivo) else if (Pos>FileSize(Archivo)-1) then Writeln('Posicion afuera del archivo.') else Begin Assign(ArchAux, 'auxi.dat'); Rewrite(ArchAux); For I:=0 to pos-1 do Begin Seek(Archivo, I); Read(Archivo, AuxClase); Seek(ArchAux, I); Write(ArchAux, AuxClase); end; k:=fileSize(Archivo)-1; For pos:=I+2 to k do Begin Seek(Archivo, pos); Read(Archivo, AuxClase); Seek(ArchAux, pos-1); Write(ArchAux, AuxClase); end; Close(Archivo); Close(ArchAux); Erase(Archivo); Rename(ArchAux, 'Datos.dat'); Reset(Archivo); end; end;
El tipo de los datos no importa, pero el algoritmo, es correcto??? Grax
4
« en: Viernes 22 de Septiembre de 2006, 16:36 »
Saludos, como andan??? Hace mucho que no escribo.... Pero bueno, tengo un problema y pensé en que talvez alguien pueda ayudarme. Resulta que estoy haciendo un programa para que cargue y resuelva "un" sudoku (famoso juego japonés, creo) El problema es que por alguna razón, al vaciar una de las tres listas (como tipo de dato abstracto (TDA)) que uso, me para el programa para mostrarme "Invalid pointer operation" (en el TDA! Muy raro, simplemente porque una lista es una estructura muy simple de "hacer"…) que significa, dispose(nil) o dispose(ptrnovalido), pero NO ES CIERTO! De hecho, le seguí el paso y adivinen: Estaba lo mas bien, yo, viendo el "watches", mientras se ejecutaba el programa leía una línea que no tenia nada que ver con ninguna de las lista, cuando de repente apareció, en la lista en cuestión, un elemento agregado con una dirección de memoria rarísima, entonces trate de ver que elemento podría tener; al abrirlo, resulto que si era “basura”. Esto me parece imposible, pero como sucedió debe ser que si es posible… Pascal andará mal? Otra cosa es que yo nunca me “meto” en la implementación de las listas, por lo que cualquier tipo de error del la clase que les menciones, no deberían ocurrir… Que tienen para decirme? Gracias por leer mi mensaje.
PD: Si quieren les publico la parte del codigo "problematico".
5
« en: Martes 6 de Diciembre de 2005, 22:49 »
Unit tdaAlgo; Type PtrArlgo=^Sth; Sth=Record A:Ta; B:Tb; … End; TAlgo=ptrAlgo; Procedure CrearAlgo(VAR A:TALGO); Begin A:=Nil; End; Procedure CargarAlgo(var A:Talgo); Begin NEW(A); With A^ do Begin … … … End; End;
De esta se hace mas eficiente el uso de memoria, pues la asignación de memoria de esta estructura, solo se efectúa cuando se CargarAlgo(var A:algo), y no simplemente por declarar una variable A:TAlgo, en la cláusula VAR un programa que usa la unidad, que es lo que sucedería si no se usa un puntero. Esto es cierto, no? Pero… que pasa cuando… Program UsetdaAlgo; Uses tdaAlgo; Type Archivo=file of TAlgo*; Var Arch:Archivo; *Porque pascal permite cualquier tipo salvo un archivo... entonces que guarda en el archivo?? Supongo que lo que lo que esta guardado en la dirección de memoria de A. Entonces que pasa?????????
6
« en: Miércoles 23 de Noviembre de 2005, 15:41 »
Hola, queria saber si alguien me puede pasar el codigo para mostrar una matriz cuadrada (o no).
Gracias!!!
7
« en: Martes 15 de Noviembre de 2005, 12:15 »
Saludos, necesito AYUDA: no me sale el procedimiento eliminar de un arbol B, si alguien tiene el codigo, no me lo pasaria?????? (Por favor). Antes que nada yo NO SE programacion orientada a objetos (o como sea que se le llame). Gracias denuevo.
Talvez a otro le pasa lo mismo que a mi asi que yo escribi el procedimiento de insercion en un arbol B, el codigo esta adjunto.
8
« en: Miércoles 2 de Noviembre de 2005, 03:06 »
Saludos, pues... simplemente estaba siguiendo la traza a un programa de arbol trie y derepente en esta parte del codigo: Writeln('...'); Write('...'); Readln(strings) {donde strings:string} me aparecio este cartel que dice: La cpu [marca] ha encontrado una instruccion no permitida [numeros raros] Cerrar o ignorar {ignorar no anda} Y NO PUEDO SEGUIR!!!!!!!!!! Les agradeceria si me dieran una piesta de que pasa....
9
« en: Viernes 28 de Octubre de 2005, 22:15 »
Alguien me pasaria, o diria (pag web) de algun PROGRAMA, no quiero hacer nada yo , (porque no tengo tiempo y ademas no se) que dado un arbole GENERICO lo muestre pero GRAFICAMENTE. Es decir algo asi: A / \ B C bueno, creo que se entiende lo que quiero decir. Porque los programa que yo hice para mostrar un arbol te lo muestra asi: ABC, pero no sabes quien es hijo de quien. Gracias
10
« en: Viernes 28 de Octubre de 2005, 01:21 »
Hola de nuevo. Tengo una duda sobre el manejo de punteros de pascal. En el siguiente codigo: Type ptrnodo=^nodo; nodo=record info:trotulo; Hijo,sig:ptrnodo; end; TRIE=ptrNodo; Procedure CrearNodo(var A:PtrNodo; x:trotulo); Begin New(A); A^.hijo:=nil; A^.sig:=nil; AsignarRotulo(x, A^.info); end; {-------------------------------------------------------------------------------------------} Procedure AgregarClave(var A:Trie; X:trotulo); var I:integer; T,ant:PtrNodo; Begin I:=1; IF A=nil then New(A); t:=a^.hijo; { ACA! mi pregunta es: En t que se "pone" la ubicacion de a^.hijo (que puede ser NIL o no) o simplemente un puntero NIL (dado el caso), que no tiene nada que ver con el A? Si sigen leyendo el codigo un poco mas, se van a dar cuenta mejor de lo que pregunto } While (I<=Length(X)) do Begin While (T<>nil) and (IgualRotulo(T^.info, X[I])) do Begin Ant:=T; T:=T^.hijo; Inc(I); end; If T=nil then CrearNodo(T, X[I]) else Begin While (T<>nil) and (MenorRotulo(T^.info, X[I])) do Begin ant:=T; T:=T^.sig; end; If t=nil then CrearNodo(T, X[I]) else if Not IgualRotulo(T^.info, x[I]) then Begin CrearNodo(Ant^.sig, x[I]); Ant^.sig^.sig:=T; T:=ant^.sig; end; end; T:=T^.hijo; Inc(I); end; AsignarRotulo(AsignarRotuloNulo, T^.info); end;
Gracias!
11
« en: Miércoles 26 de Octubre de 2005, 22:07 »
Buenas, alguien me prodria corregir el siguiente codigo: Es sobre Arboles balanceados por altura (AVL); El problema es cuando por ejemplo se ingresa el siguiente arbol: 50 13 40 el error bucle infinito se produce en el procedimiento Balancear(A:AVL). AYUDA!!!! Procedure AgregarHijo(VAR A:AVL; X:Trotulo; var cod:integer); Var Balance:Integer; Begin if A<>nil then Begin if IgualRotulo(x, A^.info) {x=A^.info} then cod:=1 else If MenorRotulo(x, A^.info) {x<A^.info} then AgregarHijo(A^.HI, X, cod) else AgregarHijo(A^.HD, x, cod); cod:=0; Balancear(A); end else Begin New(A); AsignarRotulo(x, A^.info); {A^.info:=X} A^.hi:=nil; A^.hd:=nil; end; end; {-----------------------------------------------------------------------------------} Function Altura(A:AVL):Integer; {Simplemente saca la altura de un arbol, los arboles nulos tiene altura -1} Var ASI,ASD:integer; Begin If A=nil then ALtura:=-1 else Begin ASI:=Altura(A^.HI)+1; ASD:=Altura(A^.HD)+1; If ASI<=ASD then Altura:=ASD else ALtura:=ASI; end; end; {-----------------------------------------------------------------------------------} Procedure RotSimpleDerecha(var A:AVL); var q,temp:ptrAVL; Begin if A<>nil then Begin Q:=A^.HI; Temp:=Q^.hd; Q^.HD:=A; A^.HI:=temp; a:=Q; end; end; {-----------------------------------------------------------------------------------} Procedure RotSimpleIzquierda(VAR A:AVL); Var q,temp:ptrAVL; Begin If A<>nil then Begin Q:=A^.hd; temp:=Q^.HI; Q^.hI:=A; A^.hd:=temp; a:=q; end; end; {-----------------------------------------------------------------------------------} Procedure Balancear(var A:AVL); Var Balance{,stack}:Integer; Begin stack:=0; If A<>nil then Begin Balance:=Altura(A^.HI)-Altura(A^.HD); While (Balance=2) or (Balance=-2) {and (stack<=3)} do Begin If balance=2 then RotSimpleDerecha(A) else RotSimpleIzquierda(A); Balance:=Altura(A^.HI)-Altura(A^.HD); {inc(stack);} end; end; end; {-----------------------------------------------------------------------------------}
Gracias, espero que me puedan ayudar...
12
« en: Lunes 17 de Octubre de 2005, 22:36 »
Saludos, nuevamente me veo en problemas, pues las profesoras se la han rebuscado para inventar que: un digrafo se implemente con otro TDA en este caso MAPEO A MUCHOS!!!! y encima quieren que implementemos la operacion CaminoMasLargo( G:tdigrafo; v1,v2:trotulo; var c:tLista); donde c es una lista de rotulos (es decir es el camino mas largo) Segun yo lo entiendo, el digrafo=MapeoMuchos seria una lista de registro cada nodo de esa lista tiene dos campos uno es el dominio (vertices) y el otro seria el rango (Lista de adyacencia de ese vertice). Bueno.... el codigo es este y mi favor que me digan si andaria: {------------------------------------------------------------------------------------------------------} Procedure CaminoMasLargo(G:tdigrafo; v1,v2:trotulo; var c:tdaLista.Lista; var cod:integer); var cjto:tdaCjtoD.conjunto; L:tdaLista.lista; Begin if not DigrafoVacio(G) then Begin tdaLista.VaciarLista(C); Dominio(g, cjto); {procedimiento que transforma el dominio del mapeo en un conjunto} if (tdaCjtoD.Pertenencia(v1, cjto)) and (tdaCjtoD.Pertenencia(v2, cjto)) then Begin tdaLista.CrearLista(L); CaminoMasLargoAux(g, v1, v2, c, L); tdaLista.Insertar(c, tdaLista.longitud(C)+1, v2, cod); {Lista, posicion en la lista, elemento, codigo de error} end; end else cod:=4 end; {---------------------------------------------------------------------------------------------------} Procedure CaminoMasLargoAux(G:Tdigrafo; v1,v2:trotulo; var c,L:tdaLista.lista); var Lrang:tdaLista.Lista; I,cod,pos:integer; Begin tdaLista.Insertar(L, tdaLista.longitud(L)+1, v1, cod); Valor(G, v1, Lrang, cod); {procedimiento del TDAMapeoAMucho que dado un dominio (=trotulo) te devuelve el rango en este caso Lrang} I:=1; While (I<=tdaLista.Longitud(LRang)) do Begin tdaLista.Recuperar(Lrang, I, v1, cod); {recupera de la lista Lrang el elemento v1, en la posicion I, devuelve un codigo cod tambien} Inc(I); tdaLista.Localizar(Lrang, v1, pos, cod); {Localiza v1, en la lista lrang, si no lo encuentra cod<>0 else cod=0 y en pos devuelve la posicion del mismo} While (I<=tdaLista.Longitud(Lrang)) and (cod=0) do Begin tdaLista.Recuperar(Lrang, I ,v1, cod); tdaLista.Localizar(L, v1, pos, cod); Inc(I); end; end; If (I<=tdaLista.Longitud(LRang)) or (IgualRotulo(v1,v2)) then Begin if (IgualRotulo(v1, v2)) and (tdaLista.Longitud(C)<tdaLista.Longitud(L)) then tdaLista.AsignarLista(L, C) else if Not (IgualRotulo(v1, v2)) then CaminoMasLargoAux(G, v1,v2, c, L); end; tdaLista.Eliminar(L, tdaLista.Longitud(L), cod); end;
Listo, que les parece, se entiende o no?. PD: Los procedimientos y funciones tiene nombres significativos!!! Asique por ejemplo: igualRotulo(v1,v2) simplemente devuelve true si v1=v2 sino false} Mas que Gracias !!!!!
13
« en: Jueves 6 de Octubre de 2005, 12:38 »
Hola de nuevo, queria preguntarles, esta mal lo que hice? O sea la intencion es querer borrar el arbol binario, pero no se si estoy borrando o simplemente generando basura en memoria. Otra Pregunta que se me desprende de esta es: Cuando uno pasa un puntero por valor, que es lo que hace Pascal? Copia un puntero a la variable pasada por valor (en este caso A) o crea todo la estructura denuevo? Cuando vean el codigo van a entender mejor lo que digo. type PtrTree=^Tree; Tree=record info:TRotulo; HD,HI:ptrTree; end; Arbol=ptrTree; {-----------------------------------------------------------------------------------} {Primero viene el de mas abajo} Procedure VaciarArbolAux(A:arbol); Begin if not ArbolVAcio(A) then Begin VaciarArbolAux(a^.HD); VaciarArbolAux(A^.HI); if A<>nil then Dispose(A); end; end; {-----------------------------------------------------------------------------------} Procedure VaciarArbol(var A:arbol); Begin if not ArbolVAcio(A) then Begin VaciarArbolaux(a); a:=nil; end; end;
PD: Si esta mal, me ayudan ha hacerlo bien????
14
« en: Miércoles 5 de Octubre de 2005, 22:55 »
Hola, les queria pedir a alquien si me pasaria o almenos ayudaria o me dijera algun sitio donde pueda encontrar algun algorimo para recorrer arboles binario por niveles. Gracias... PD: Es que no me sale hacerlo !!!!!
15
« en: Viernes 23 de Septiembre de 2005, 20:34 »
Hola denuevo. Pues... eso; como hago para que en una arreglo los indices sean TODOS los caracteres????
type
vec=array[aca que pongo?] of tipoelemento;
Gracias!!!
16
« en: Jueves 22 de Septiembre de 2005, 03:48 »
Buenas....
Tengo una duda GRAVE para el nivel que estoy (no lo voy a decir).
¿Pascal 6.0 o posterior apila las la informacion de las variables que se encuentran en la clausula VAR del procedimiento o funcion?
Por ejemplo:
Function nathing(muchas cosas irrelevantes para este ejemplo); VAR {las variables que van aca, su infomacion se apilan cuando se llama recursivamente????} Begin .......nathing:=nathing(bla bla);
end;
Gracias....
17
« en: Martes 13 de Septiembre de 2005, 21:59 »
Hola denuevo... Les tengo una pregunta: Como calculo el tiempo exacto en funcion de n del siguiente algoritmo?
Function Rec1(n:integer):integer; Begin if n<=1 then rec1:=1 else rec1:=rec1(n-1) + rec1(2*n); end;
Gracias!!!
18
« en: Jueves 8 de Septiembre de 2005, 23:33 »
Saludos, tengo un problema: No me sale este ejercicio: Expresar en funcion de n el tiempo de ejcucion exacto del sgt codigo;
Procedure Misterio(n:integer); Var i,k,j:integer;
Begin For I:=1 to n-1 do For J:=1 to n do for K:=1 to j do {alguna proposicion que requiera tiempo de ejecucion = 5} end;
Gracias de antemano.
19
« en: Jueves 25 de Agosto de 2005, 20:42 »
Hola, soy nuevo en este foro. Talvez suene medio atrevido, pero quisiera que alguien me pasara o dejara leer un tda Numero Binario usando el tda Lista con punteros simplemente enlazada. Porque tengo que hacer un trabajo para la univ'. O sino, me gustaria que me den una ayuda, porque no se bien como hacer un procedimiento para pasar de un numero binario a un decimal (usando Listas como dije antes). Yo defini el tda Numero Binario asi: type binario=record num:Lista; disp:tipoPosicion; {rango 0..32000 que tiene la posicion disponible en la lista num} end;
Gracias de antemano.
Páginas: [1]
|
|
|