Junio 17, 2018, 09:56:22 pm

Autor Tema: Duda Pascal! AYUDA  (Leído 1770 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tenaciousd

  • Me das tu IP?
  • *
  • Mensajes: 53
  • Sexo: Masculino
    • Ver Perfil
Duda Pascal! AYUDA
« en: Noviembre 02, 2010, 04:09:33 pm »
Hola amigos! me gustaria q me ayuden a sacarme una duda con un programa en pascal!

La situacion es la siguiente:

   Estaba resolviendo un algoritmo en el q tengo q trabajar con  Punteros,arboles y listas. Tengo q hacer una funcion q me busque un Nodo dentro de un arbol

lo hice utilizando recursion, el programa no me tira errores ni nada..solamente q cuando lo imprimo el valor q busqe la variable o Nodo me devuelve este valor: -88

Código: (pascal) You are not allowed to view links. Register or Login
Program Busca;
Type
PuntArbol=^TipoNodo;
TipoNodo=record
nro:integer;
min,max:PuntArbol;
end;
//--------------------------------
function buscaNodo(buscar:integer; var arbol:PuntArbol): PuntArbol;
begin
if arbol^.nro < buscar then buscaNodo(buscar,arbol^.max);
if arbol^.nro=buscar then begin
buscaNodo:=arbol;
end;
if arbol^.nro < buscar then buscaNodo(buscar,arbol^.min);
end;
//--------------------------------
Procedure CargarArbol(var arbol:PuntArbol; valor:integer);
begin
if arbol=nil then begin
new(arbol);
arbol^.nro:=valor;
arbol^.min:=nil;
arbol^.max:=nil;
end
else
begin
if arbol^.nro < valor then CargarArbol(arbol^.max,valor);
if arbol^.nro > valor then CargarArbol(arbol^.min,valor);
end;
end;
//--------------------------------
var arbol,nodo:PuntArbol;
valor,buscar:integer;
begin
nodo:=nil;
arbol:=nil;
readln(valor);
while valor <> 0 do begin
CargarArbol(arbol,valor);
readln(valor);
end;
writeln('Ingrese el Valor que desea buscar');
readln(buscar);
nodo:=buscaNodo(buscar,arbol);
writeln('El Numero esta en un nuevo nodo:',nodo^.nro);
end.


nose como como saber donde esta el error ya q me devuelve ese valor sea cual sea el valor q busco dentro de un arbol



se les agradece su aporte..
« Última modificación: Noviembre 07, 2010, 07:02:30 pm por JaAViEr »

Desconectado jep

  • Night Elf Druid
  • Colaborador
  • ****
  • Mensajes: 1773
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #1 en: Noviembre 02, 2010, 04:15:38 pm »
postea el code, sino no se puede hacer nada

Desconectado tenaciousd

  • Me das tu IP?
  • *
  • Mensajes: 53
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #2 en: Noviembre 02, 2010, 04:19:10 pm »


ahita amigo

Desconectado tenaciousd

  • Me das tu IP?
  • *
  • Mensajes: 53
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #3 en: Noviembre 02, 2010, 04:46:21 pm »
Bueno amigos soy el mismo q postio..jaja
les comento q espere q alguien me tire una ayuda pero mientras tanto encontre una solucion q no me parese muy acertada


en ves de hacer el modulo q busca el puntero una funcion la utilice coomo un procedimiento...ahora me devuelve correctamente el valor a buscar...

no era la idea pero por ahora no le puedo hacer nada..jajaj

cuando pueda lo soluciono :D

Desconectado jep

  • Night Elf Druid
  • Colaborador
  • ****
  • Mensajes: 1773
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #4 en: Noviembre 02, 2010, 04:56:24 pm »
no debería ser asi la funcion para buscar ?

Código: (pascal) You are not allowed to view links. Register or Login
function buscaNodo(buscar:integer; var arbol:PuntArbol): PuntArbol;
begin
if arbol^.nro < buscar then
buscaNodo:=buscaNodo(buscar,arbol^.max);
if arbol^.nro=buscar then begin
buscaNodo:=arbol;
end;
if arbol^.nro > buscar then
buscaNodo:=buscaNodo(buscar,arbol^.min);

end;

Desconectado tenaciousd

  • Me das tu IP?
  • *
  • Mensajes: 53
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #5 en: Noviembre 02, 2010, 05:05:20 pm »
function buscaNodo(buscar:integer; var arbol:PuntArbol): PuntArbol;
begin
   if arbol^.nro < buscar then
      buscaNodo:=buscaNodo(buscar,arbol^.max);
   if arbol^.nro=buscar then begin
      buscaNodo:=arbol;
   end;
   if arbol^.nro > buscar then
      buscaNodo:=buscaNodo(buscar,arbol^.min);

end;
[/code]


si tendria q ser asi..pero le eh cambiado las sentencias de varios modos y me sigue con lo mismo...anda perfectoo pero le valor q me devuelve la funcion es -88  buscando cualqier numero..

Desconectado jep

  • Night Elf Druid
  • Colaborador
  • ****
  • Mensajes: 1773
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #6 en: Noviembre 02, 2010, 05:12:22 pm »
yo probé y me anda bien asi, seguro que cambiaste? fijate que como estaba antes, cuando llamabas a la funcion en forma recursiva, no estabas colocando ese resultado en la salida, asi que estabas imprimiendo basura

Desconectado tenaciousd

  • Me das tu IP?
  • *
  • Mensajes: 53
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #7 en: Noviembre 02, 2010, 05:17:24 pm »


disculpame por mi ingnorancia...jajaja no me habia dado cuenta de la modificacion q le habias echo...ahora si me anda y comprendi mi error...pero de hacerlo asi apurado pase por alto el detalle de como llamar recursivamente a la funcion

muchas gracias
« Última modificación: Noviembre 02, 2010, 05:20:39 pm por tenaciousd »

Desconectado jep

  • Night Elf Druid
  • Colaborador
  • ****
  • Mensajes: 1773
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #8 en: Noviembre 02, 2010, 05:20:45 pm »
aqui va el code

Código: (pascal) You are not allowed to view links. Register or Login
Program Busca;
Type
PuntArbol=^TipoNodo;
TipoNodo=record
nro:integer;
min,max:PuntArbol;
end;
//--------------------------------
function buscaNodo(buscar:integer; var arbol:PuntArbol): PuntArbol;
begin
if arbol^.nro < buscar then
buscaNodo:=buscaNodo(buscar,arbol^.max);
if arbol^.nro=buscar then begin
buscaNodo:=arbol;
end;
if arbol^.nro > buscar then
buscaNodo:=buscaNodo(buscar,arbol^.min);

end;
//--------------------------------
Procedure CargarArbol(var arbol:PuntArbol; valor:integer);
begin
if arbol=nil then begin
new(arbol);
arbol^.nro:=valor;
arbol^.min:=nil;
arbol^.max:=nil;
end
else
begin
if arbol^.nro < valor then CargarArbol(arbol^.max,valor);
if arbol^.nro > valor then CargarArbol(arbol^.min,valor);
end;
end;
//--------------------------------
var arbol,nodo:PuntArbol;
valor,buscar:integer;
begin
nodo:=nil;
arbol:=nil;
readln(valor);
while valor <> 0 do begin
CargarArbol(arbol,valor);
readln(valor);
end;
writeln('Ingrese el Valor que desea buscar');
readln(buscar);
nodo:=buscaNodo(buscar,arbol);
writeln('El Numero esta en un nuevo nodo:',nodo^.nro);
end.

y aqui la prueba que hice
Código: You are not allowed to view links. Register or Login
jep@jep-PC ~/otros/pascal# ./pr4.exe
1
2
3
4
0
Ingrese el Valor que desea buscar
2
El Numero esta en un nuevo nodo:2

jep@jep-PC ~/otros/pascal# ./pr4.exe
8
4
6
2
0
Ingrese el Valor que desea buscar
8
El Numero esta en un nuevo nodo:8

Desconectado tenaciousd

  • Me das tu IP?
  • *
  • Mensajes: 53
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #9 en: Noviembre 02, 2010, 05:24:03 pm »


muy atento de tu parte Jep saludos!!

Desconectado WaesWaes

  • Actualmente es
  • Colaborador
  • ****
  • Mensajes: 4402
  • You are not prepared!
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #10 en: Noviembre 02, 2010, 05:24:51 pm »
Lo que pasa es que vos al principio decis que

nodo:=buscaNodo(buscar,arbol);

Y despues decis en los if de la funcion.....nada.....acordate que una funcion la tenes que evaluar en algo...te queda como dice jep...

if arbol^.nro < buscar then
      buscaNodo:=buscaNodo(buscar,arbol^.max);

fijate que la diferencia con el tuyo es que el despues del then iguala la el valor de la funcion a la nueva funcion que llama....

Saludos!

Nota: no tenes que pasar parametros con var a una funcion....

Desconectado tenaciousd

  • Me das tu IP?
  • *
  • Mensajes: 53
  • Sexo: Masculino
    • Ver Perfil
Re: Duda Pascal! AYUDA
« Respuesta #11 en: Noviembre 02, 2010, 05:32:43 pm »

Que haces? como andas???

emm si me di cuenta del error q tenia..se me paso re por alto eso

es un error importante..no me di cuenta ni cuando me llo aclaro Jep porq lo vi asi nomas...dije "es lo mismo q tengo yo" jajja y desp me di cuenta

Google?


resuelto
Duda programacion en pascal

Iniciado por lordheero

3 Respuestas
1175 Vistas
Último mensaje Junio 27, 2012, 11:37:11 pm
por lordheero
question
duda en pascal mayusculas

Iniciado por shitoman

5 Respuestas
1562 Vistas
Último mensaje Junio 05, 2012, 11:04:50 pm
por Solid Water
question
Duda programa pascal(SOLUCIONADO)

Iniciado por xavik22

2 Respuestas
1237 Vistas
Último mensaje ſeptiembre 30, 2009, 04:58:23 am
por xavik22
question
Duda con programa en pascal de recursividad

Iniciado por Psioh

2 Respuestas
911 Vistas
Último mensaje Noviembre 16, 2013, 04:41:13 pm
por Psioh
question
ayuda en pascal

Iniciado por shitoman

4 Respuestas
1083 Vistas
Último mensaje Octubre 13, 2011, 06:31:10 am
por shitoman
xx
[Ayuda Pascal]

Iniciado por nightwalker

0 Respuestas
1019 Vistas
Último mensaje Marzo 09, 2009, 03:05:41 am
por nightwalker
question
Ayuda pascal

Iniciado por rayner

9 Respuestas
1159 Vistas
Último mensaje Octubre 16, 2011, 09:22:44 pm
por bendroide
xx
Ayuda con pascal

Iniciado por avechuche

1 Respuestas
1331 Vistas
Último mensaje Agosto 29, 2008, 01:37:02 am
por nightwalker
xx
AYUDA CON PASCAL !

Iniciado por lpnu

1 Respuestas
1924 Vistas
Último mensaje ſeptiembre 05, 2010, 07:07:54 pm
por tenaciousd
xx
AYUDA EN PASCAL (NOTEPAD++)

Iniciado por lpnu

6 Respuestas
5442 Vistas
Último mensaje ſeptiembre 11, 2010, 06:12:57 pm
por pelak09