• Viernes 8 de Noviembre de 2024, 11:42

Mostrar Mensajes

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
Pascal / Invalid File Handle
« en: Martes 26 de Diciembre de 2006, 15:56 »
Saludos, tengo un grave problema. Primero quiero preguntarles: se puede hacer esto:

Código: Text
  1.  
  2. RegArch=Record
  3.                      AEnteros=File of integer;
  4.                      AReales= file of real;
  5.                      end;
  6.  
  7.  

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
Pascal / Ayuda Sobre Punteros.
« en: Jueves 5 de Octubre de 2006, 16:07 »
Tengo que duda nuevo:
Código: Text
  1.  
  2. type
  3.      ptrnodo=^nodo;
  4.      nodo=record
  5.                      elem:TElemento; {telemento=integer}
  6.                      sig:ptrNodo;
  7.                      end;
  8.  
  9.  

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
Pascal / Eliminar Datos De Un Archivo
« 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?

Código: Text
  1.  
  2. Assign(Archivo, 'auxi.dat'); &#60;----- Esto se hizo al principio del programa.
  3. Begin
  4.     Writeln('Ingrese &#60;0 para Eliminar todos los sudoku en el archivo.');
  5.     Writeln('o ingrese la posicion en el archivo para Eliminar un sudoku particular del archivo.');
  6.     Write('Su opcion? '); Readln(pos);
  7.     if pos&#60;0 then  Rewrite(Archivo)
  8.     else
  9.     if (Pos&#62;FileSize(Archivo)-1) then Writeln('Posicion afuera del archivo.') else
  10.     Begin
  11.         Assign(ArchAux, 'auxi.dat');
  12.         Rewrite(ArchAux);
  13.         For I:=0 to pos-1 do
  14.         Begin
  15.                 Seek(Archivo, I);
  16.                 Read(Archivo, AuxClase);
  17.                 Seek(ArchAux, I);
  18.                 Write(ArchAux, AuxClase);
  19.         end;
  20.         k:=fileSize(Archivo)-1;
  21.         For pos:=I+2 to k do
  22.         Begin
  23.             Seek(Archivo, pos);
  24.             Read(Archivo, AuxClase);
  25.             Seek(ArchAux, pos-1);
  26.             Write(ArchAux, AuxClase);
  27.         end;
  28.         Close(Archivo);
  29.         Close(ArchAux);
  30.         Erase(Archivo);
  31.         Rename(ArchAux, 'Datos.dat');
  32.         Reset(Archivo);
  33.     end;
  34. end;
  35.  
  36.  
El tipo de los datos no importa, pero el algoritmo, es correcto???
Grax

4
Pascal / Resolver Sudoku
« 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
Pascal / Tdas Eficiencia En Uso De Momoria.
« en: Martes 6 de Diciembre de 2005, 22:49 »
Código: Text
  1.  
  2. Unit tdaAlgo;
  3. Type
  4.   PtrArlgo=^Sth;
  5.   Sth=Record
  6.       A:Ta;
  7.       B:Tb;
  8.       …
  9.       End;
  10.   TAlgo=ptrAlgo;
  11.  
  12. Procedure CrearAlgo(VAR A:TALGO);
  13. Begin
  14.   A:=Nil;
  15. End;
  16.  
  17. Procedure CargarAlgo(var A:Talgo);
  18. Begin
  19.   NEW(A);
  20.   With A^ do
  21.   Begin
  22.     …
  23. End;
  24. End;
  25.  
  26.  

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
Pascal / Mostrar Matriz Graficamente.
« 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
Pascal / B-tree (arboles B) Eliminacion
« 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
Pascal / Error: La Cpu [marca] Ha Encontrado...
« 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!!!!!!!!!!  :angry:

Les agradeceria si me dieran una piesta de que pasa....

9
Pascal / Mostrar Arboles Graficamente
« en: Viernes 28 de Octubre de 2005, 22:15 »
Alguien me pasaria, o diria (pag web) de algun PROGRAMA, no quiero hacer nada yo  :D , (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
Pascal / Pregunta Sobre Asignacion De Punteros
« 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:

Código: Text
  1.  
  2. Type
  3.   ptrnodo=^nodo;
  4.   nodo=record
  5.     info:trotulo;
  6.     Hijo,sig:ptrnodo;
  7.     end;
  8.  
  9.   TRIE=ptrNodo;
  10.  
  11.  
  12. Procedure CrearNodo(var A:PtrNodo; x:trotulo);
  13. Begin
  14.      New(A); A^.hijo:=nil; A^.sig:=nil; AsignarRotulo(x, A^.info);
  15. end;
  16. {-------------------------------------------------------------------------------------------}
  17. Procedure AgregarClave(var A:Trie; X:trotulo);
  18. var
  19. I:integer; T,ant:PtrNodo;
  20. Begin
  21.   I:=1; IF A=nil then New(A);
  22.                 t:=a^.hijo;
  23. { ACA! mi pregunta es: En t que se &#34;pone&#34; 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?
  24. Si sigen leyendo el codigo un poco mas, se van a dar cuenta mejor de lo que pregunto }
  25.  
  26.  
  27.   While (I&#60;=Length(X)) do
  28.   Begin
  29.     While (T&#60;&#62;nil) and (IgualRotulo(T^.info, X[I])) do
  30.     Begin
  31.       Ant:=T;
  32.       T:=T^.hijo;
  33.       Inc(I);
  34.     end;
  35.     If T=nil then CrearNodo(T, X[I]) else
  36.     Begin
  37.       While (T&#60;&#62;nil) and (MenorRotulo(T^.info, X[I])) do
  38.       Begin
  39.         ant:=T;
  40.         T:=T^.sig;
  41.       end;
  42.       If t=nil then CrearNodo(T, X[I]) else
  43.         if Not IgualRotulo(T^.info, x[I]) then
  44.         Begin
  45.           CrearNodo(Ant^.sig, x[I]);
  46.           Ant^.sig^.sig:=T;
  47.           T:=ant^.sig;
  48.         end;
  49.     end;
  50.      T:=T^.hijo; Inc(I);
  51.   end;
  52.         AsignarRotulo(AsignarRotuloNulo, T^.info);
  53. end;
  54.  
  55.  
  56.  
Gracias!

11
Pascal / Insertar(a:arbolbalanceadoporaltura; X:trotulo);
« 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!!!!


Código: Text
  1.  
  2. Procedure AgregarHijo(VAR A:AVL; X:Trotulo; var cod:integer);
  3. Var
  4. Balance:Integer;
  5. Begin
  6. if A&#60;&#62;nil then
  7.   Begin
  8.     if IgualRotulo(x, A^.info) {x=A^.info} then cod:=1 else
  9.     If MenorRotulo(x, A^.info) {x&#60;A^.info} then AgregarHijo(A^.HI, X, cod) else
  10.                         AgregarHijo(A^.HD, x, cod);
  11.                 cod:=0;
  12.     Balancear(A);
  13.   end else
  14.   Begin
  15.     New(A); AsignarRotulo(x, A^.info); {A^.info:=X}
  16.     A^.hi:=nil; A^.hd:=nil;
  17.   end;
  18. end;
  19. {-----------------------------------------------------------------------------------}
  20. Function Altura(A:AVL):Integer; {Simplemente saca la altura de un arbol, los arboles nulos tiene altura -1}
  21. Var
  22. ASI,ASD:integer;
  23. Begin
  24.   If A=nil then ALtura:=-1 else
  25.   Begin
  26.     ASI:=Altura(A^.HI)+1;
  27.     ASD:=Altura(A^.HD)+1;
  28.     If ASI&#60;=ASD then Altura:=ASD else ALtura:=ASI;
  29.   end;
  30. end;
  31. {-----------------------------------------------------------------------------------}
  32. Procedure RotSimpleDerecha(var A:AVL);
  33. var
  34. q,temp:ptrAVL;
  35. Begin
  36.   if A&#60;&#62;nil then
  37.   Begin
  38.     Q:=A^.HI;
  39.     Temp:=Q^.hd;
  40.     Q^.HD:=A;
  41.     A^.HI:=temp;
  42.                 a:=Q;
  43.   end;
  44. end;
  45. {-----------------------------------------------------------------------------------}
  46. Procedure RotSimpleIzquierda(VAR A:AVL);
  47. Var
  48. q,temp:ptrAVL;
  49. Begin
  50.   If A&#60;&#62;nil then
  51.   Begin
  52.     Q:=A^.hd;
  53.     temp:=Q^.HI;
  54.     Q^.hI:=A;
  55.     A^.hd:=temp;
  56.                 a:=q;
  57.   end;
  58. end;
  59. {-----------------------------------------------------------------------------------}
  60. Procedure Balancear(var A:AVL);
  61. Var
  62. Balance{,stack}:Integer;
  63. Begin
  64.         stack:=0;
  65.   If A&#60;&#62;nil then
  66.   Begin
  67.     Balance:=Altura(A^.HI)-Altura(A^.HD);
  68.     While (Balance=2) or (Balance=-2) {and (stack&#60;=3)} do
  69.     Begin
  70.       If balance=2 then RotSimpleDerecha(A) else
  71.                                                               RotSimpleIzquierda(A);
  72.       Balance:=Altura(A^.HI)-Altura(A^.HD); {inc(stack);}
  73.     end;
  74.   end;
  75. end;
  76. {-----------------------------------------------------------------------------------}
  77.  
  78.  
Gracias, espero que me puedan ayudar...  :unsure:

12
Pascal / Caminomaslargo De Un Digrafo
« 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:

Código: Text
  1.  
  2.  
  3. {------------------------------------------------------------------------------------------------------}
  4. Procedure CaminoMasLargo(G:tdigrafo; v1,v2:trotulo; var c:tdaLista.Lista; var cod:integer);
  5. var
  6. cjto:tdaCjtoD.conjunto; L:tdaLista.lista;
  7. Begin
  8.   if not DigrafoVacio(G) then
  9.   Begin
  10.     tdaLista.VaciarLista(C);
  11.     Dominio(g, cjto); {procedimiento que transforma el dominio del mapeo en un conjunto}
  12.     if (tdaCjtoD.Pertenencia(v1, cjto)) and (tdaCjtoD.Pertenencia(v2, cjto)) then
  13.     Begin
  14.       tdaLista.CrearLista(L); CaminoMasLargoAux(g, v1, v2, c, L);
  15.       tdaLista.Insertar(c, tdaLista.longitud(C)+1, v2, cod);
  16.           {Lista, posicion en la lista, elemento, codigo de error}
  17.     end;
  18.   end else cod:=4
  19. end;
  20. {---------------------------------------------------------------------------------------------------}
  21. Procedure CaminoMasLargoAux(G:Tdigrafo; v1,v2:trotulo; var c,L:tdaLista.lista);
  22. var
  23. Lrang:tdaLista.Lista; I,cod,pos:integer;
  24. Begin
  25.   tdaLista.Insertar(L, tdaLista.longitud(L)+1, v1, cod);
  26.   Valor(G, v1, Lrang, cod); {procedimiento del TDAMapeoAMucho que dado un dominio (=trotulo) te devuelve el rango en este caso Lrang}
  27.   I:=1;
  28.   
  29.   While (I&#60;=tdaLista.Longitud(LRang)) do
  30.   Begin
  31.     tdaLista.Recuperar(Lrang, I, v1, cod); {recupera de la lista Lrang el elemento v1, en la posicion I, devuelve un codigo cod tambien}
  32.     Inc(I);
  33.     tdaLista.Localizar(Lrang, v1, pos, cod); {Localiza v1, en la lista lrang, si no lo encuentra cod&#60;&#62;0 else cod=0 y en pos devuelve la posicion del mismo}
  34.     
  35.     While (I&#60;=tdaLista.Longitud(Lrang)) and (cod=0) do
  36.     Begin
  37.       tdaLista.Recuperar(Lrang, I ,v1, cod);
  38.       tdaLista.Localizar(L, v1, pos, cod);
  39.       Inc(I);
  40.     end;
  41.   end;
  42.   If (I&#60;=tdaLista.Longitud(LRang)) or (IgualRotulo(v1,v2)) then
  43.   Begin
  44.     if (IgualRotulo(v1, v2)) and (tdaLista.Longitud(C)&#60;tdaLista.Longitud(L)) then tdaLista.AsignarLista(L, C) else
  45.     if Not (IgualRotulo(v1, v2)) then CaminoMasLargoAux(G, v1,v2, c, L);
  46.   end;
  47.   tdaLista.Eliminar(L, tdaLista.Longitud(L), cod);
  48. end;
  49.  
  50.  
  51.  


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
Pascal / Vaciar Arbol Binario
« 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.


Código: Text
  1.  
  2. type
  3.         PtrTree=^Tree;
  4.         Tree=record
  5.                 info:TRotulo;
  6.     HD,HI:ptrTree;
  7.                 end;
  8.   Arbol=ptrTree;
  9. {-----------------------------------------------------------------------------------}
  10. {Primero viene el de mas abajo}
  11. Procedure VaciarArbolAux(A:arbol);
  12. Begin
  13.   if not ArbolVAcio(A) then
  14.   Begin
  15.     VaciarArbolAux(a^.HD);
  16.     VaciarArbolAux(A^.HI);
  17.                 if A&#60;&#62;nil then
  18.                               Dispose(A);
  19.   end;  
  20. end;
  21. {-----------------------------------------------------------------------------------}
  22. Procedure VaciarArbol(var A:arbol);
  23. Begin
  24.   if not ArbolVAcio(A) then
  25.   Begin
  26.     VaciarArbolaux(a);
  27.                                 a:=nil;
  28.   end;
  29. end;
  30.  
  31.  

PD: Si esta mal, me ayudan ha hacerlo bien????  :huh:

14
Pascal / Recorrido Por Niveles
« 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
Pascal / Arreglo Donde Los Indices Son Caracteres
« 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
Pascal / Duda Sobre Recursividad
« 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
Pascal / Analisis De Eficiencia De Algoritmos
« 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
Pascal / Analisis De Eficiencia De Algoritmos
« 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
Pascal / Tda Numero Binario Usando Lista Con Punteros
« 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]