Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Consulta sobre InsertaNodo
Autor Mensaje
Thron1 Sin conexión
Empleado de Fotocopiadora
Cosas
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 35
Agradecimientos dados: 21
Agradecimientos: 7 en 2 posts
Registro en: Nov 2011
Mensaje: #1
Consulta sobre InsertaNodo Dudas y recomendaciones Algoritmos y Estructuras de Datos
Hola!! Queria saber si me pueden ayudar con esto, tengo que ordenar una lista de forma creciente, el primer nodo lo crea bien porque lo fui verificando con puntos de break en el programa, el problema es en el segundo nodo, cuando llega a "AntP^.Sgte:= PtrN;" despues del while final. Resulta que el programa me tira run time error SIGSEGV, jamas me habia aparecido. :/ gracias por leer![/code]




procedure InsertaNodo(VAR Lista: TLista; RValor: TInfo); {Ordena de menor a mayor}
var
PtrN: TLista;
Ptr: TLista;
AntP: TLista;
begin
New(PtrN);
PtrN^.Info:= RValor;
if (Lista=NIL) or (RValor.FacTotal<Lista^.Info.FacTotal) {Si lo que se quiere meter es menor al primero o si es el primer nodo a insertar}
then begin
PtrN^.Sgte:=Lista;
Lista:= PtrN;
end
else begin
Ptr:= Lista;
while (Ptr<>NIL) and (RValor.FacTotal>Ptr^.Info.FacTotal) do {Mientras lo que se quiere meter sea mayor al siguiente y no sea el fin de lista}
begin
AntP:= Ptr;
Ptr:= Ptr^.Sgte;
end;
AntP^.Sgte:= PtrN;
PtrN^.Sgte:= Ptr;
end;
end;



[code=plain]
Otros adjuntos en este tema
.jpg  insertar_nodo_sin_repetición.jpg ( 82,2 KB / 411) por ClauQ3
.jpg  insertar_con_repetición.jpg ( 63,75 KB / 410) por ClauQ3
05-12-2012 10:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rulo Sin conexión
Ultra Nerd Mod
By demons driven!
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.333
Agradecimientos dados: 51
Agradecimientos: 67 en 37 posts
Registro en: Apr 2009
BlogSpot
Mensaje: #2
RE: Consulta sobre InsertaNodo
Buenas, te borre los otros 3 threads que eran lo mismo que este.
Saludos.

Cita:Absolve me, save my reign
Have you forgotten me?
(Este mensaje fue modificado por última vez en: 05-12-2012 10:55 por rulo.)
05-12-2012 10:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rulo recibio 1 Gracias por este post
Thron1 (05-12-2012)
Thron1 Sin conexión
Empleado de Fotocopiadora
Cosas
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 35
Agradecimientos dados: 21
Agradecimientos: 7 en 2 posts
Registro en: Nov 2011
Mensaje: #3
RE: Consulta sobre InsertaNodo
Perdon, me aparecia un error en la pagina y pense que no se publicaba. Gracias!
05-12-2012 11:19
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rulo Sin conexión
Ultra Nerd Mod
By demons driven!
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.333
Agradecimientos dados: 51
Agradecimientos: 67 en 37 posts
Registro en: Apr 2009
BlogSpot
Mensaje: #4
RE: Consulta sobre InsertaNodo
Un aporte que tiene que ver mas con este thread en si.

¿Estas usando pascal en linux? (o freepascal) Porque SIGSEV es algo que te tira POSIX y, segun wikipedia, te lo tira por una violacion de segmento. Eso, en castellano significa que estas accediendo a memoria invalida (te pasaste del segmento, por ej, cuando reservas memoria para un array de 10 posiciones y haces arr[11] esa posicion de memoria cae fuera de tu segmento).

Cita:Absolve me, save my reign
Have you forgotten me?
(Este mensaje fue modificado por última vez en: 05-12-2012 13:24 por rulo.)
05-12-2012 11:25
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rulo recibio 1 Gracias por este post
Thron1 (06-12-2012)
ClauQ3 Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 9
Agradecimientos dados: 0
Agradecimientos: 8 en 3 posts
Registro en: Sep 2008
Mensaje: #5
RE: Consulta sobre InsertaNodo
Acá te dejo los algoritmos para Insertar nodos con y sin repetición.

INSERTA CON REPETICIÓN:

   

INSERTA SIN REPETICIÓN:
aclaración: en este caso lo que hace es insertar un nodo vacio y te devuelve un puntero y una booleana donde esta última en tu respectivo programa principal tendrás que evaluarla con un if
para saber si fue o no insertado, usando en casi positivo el puntero que apunta a dicho nodo, que es devuelto por el mismo procedimiento, para cargar los datos en el mismo.

   
(Este mensaje fue modificado por última vez en: 05-12-2012 17:32 por ClauQ3.)
05-12-2012 17:25
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] ClauQ3 recibio 1 Gracias por este post
Thron1 (06-12-2012)
Thron1 Sin conexión
Empleado de Fotocopiadora
Cosas
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 35
Agradecimientos dados: 21
Agradecimientos: 7 en 2 posts
Registro en: Nov 2011
Mensaje: #6
RE: Consulta sobre InsertaNodo
(05-12-2012 11:25)rulo escribió:  Un aporte que tiene que ver mas con este thread en si.

¿Estas usando pascal en linux? (o freepascal) Porque SIGSEV es algo que te tira POSIX y, segun wikipedia, te lo tira por una violacion de segmento. Eso, en castellano significa que estas accediendo a memoria invalida (te pasaste del segmento, por ej, cuando reservas memoria para un array de 10 posiciones y haces arr[11] esa posicion de memoria cae fuera de tu segmento).

No, no estoy usando linux y ya habia visto que ese error es por el tema de la memoria reservada, pero pense que no podia ser eso.


(05-12-2012 17:25)ClauQ3 escribió:  Acá te dejo los algoritmos para Insertar nodos con y sin repetición.

INSERTA CON REPETICIÓN:



INSERTA SIN REPETICIÓN:
aclaración: en este caso lo que hace es insertar un nodo vacio y te devuelve un puntero y una booleana donde esta última en tu respectivo programa principal tendrás que evaluarla con un if
para saber si fue o no insertado, usando en casi positivo el puntero que apunta a dicho nodo, que es devuelto por el mismo procedimiento, para cargar los datos en el mismo.

El ultimo if del de "con repeticion" no seria lo mismo preguntar si Lista=nil ? Ese es el que estaria usando, pero el error no viene por el lado del algoritmo me parece
(Este mensaje fue modificado por última vez en: 06-12-2012 04:58 por Thron1.)
06-12-2012 04:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
ClauQ3 Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 9
Agradecimientos dados: 0
Agradecimientos: 8 en 3 posts
Registro en: Sep 2008
Mensaje: #7
RE: Consulta sobre InsertaNodo
(06-12-2012 04:56)Thron1 escribió:  El ultimo if del de "con repeticion" no seria lo mismo preguntar si Lista=nil ? Ese es el que estaria usando, pero el error no viene por el lado del algoritmo me parece

La expresión LISTA = B contempla 2 casos por el TRUE:

1) LISTA = NiL
2) LISTA apunta al primer nodo y B también.

Es decir por el TRUE inserto el nodo al principio si la lista está vacia o bien el nodo q quiero insertar es menor o igual al que tengo al principio de la estructura. Por tanto la respuesta es que NO está
bien contemplar solo 1 de los casos ( LISTA = NiL ) porque en realidad son 2 y me estaría perdiendo esa posibilidad.

Si querés clarificar la estrategia te dejo estos 2 videos para que lo analises.







(Este mensaje fue modificado por última vez en: 06-12-2012 05:59 por ClauQ3.)
06-12-2012 05:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] ClauQ3 recibio 1 Gracias por este post
Thron1 (10-12-2012)
Thron1 Sin conexión
Empleado de Fotocopiadora
Cosas
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 35
Agradecimientos dados: 21
Agradecimientos: 7 en 2 posts
Registro en: Nov 2011
Mensaje: #8
RE: Consulta sobre InsertaNodo
(06-12-2012 05:54)ClauQ3 escribió:  
(06-12-2012 04:56)Thron1 escribió:  El ultimo if del de "con repeticion" no seria lo mismo preguntar si Lista=nil ? Ese es el que estaria usando, pero el error no viene por el lado del algoritmo me parece

La expresión LISTA = B contempla 2 casos por el TRUE:

1) LISTA = NiL
2) LISTA apunta al primer nodo y B también.

Es decir por el TRUE inserto el nodo al principio si la lista está vacia o bien el nodo q quiero insertar es menor o igual al que tengo al principio de la estructura. Por tanto la respuesta es que NO está
bien contemplar solo 1 de los casos ( LISTA = NiL ) porque en realidad son 2 y me estaría perdiendo esa posibilidad.

Si querés clarificar la estrategia te dejo estos 2 videos para que lo analises.








Los vi, muy interesantes. Lo pude solucionar, en esta parte "while (Ptr<>NIL) and (RValor.FacTotal>=Ptr^.Info.FacTotal) do" tenia que poner >= y habia puesto solo > entonces el AntP no se creaba si se salia del while con el primer nodo. Pude solucionarlo pero el error SIGSEGV ahora me lo tira en una BusquedaBinaria en vector que jamas me lo habia tirado, creo que el compilador tiene algun problema, creo diferentes archivos de datos y con cada uno el error salta en un lugar distinto, los var no tienen nada que ver.
06-12-2012 06:59
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rulo Sin conexión
Ultra Nerd Mod
By demons driven!
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.333
Agradecimientos dados: 51
Agradecimientos: 67 en 37 posts
Registro en: Apr 2009
BlogSpot
Mensaje: #9
RE: Consulta sobre InsertaNodo
Si te tira un error de segmento es eso, estas violando tu segmento (bueno, chocolate por la noticia no?).
Los punteros son una manera de manejar la memoria. Pero si intentas acceder afuera del espacio de memoria que se te asigno, te va a tirar ese error.
En el caso de AntP que vos mencionas, si no te lo crea, entonces esta en null y no podes acceder a los miembros de algo que es null.

Yo te recomendaria detallar el error antes de asumir que el que se equivoca es el compilador. Fijate si nos podes dar mas detalles de eso. O al menos, proba con otro compilador, si te siguen tirando el mismo error, es mas probable que el error este en tu codigo.

Cita:Absolve me, save my reign
Have you forgotten me?
06-12-2012 15:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rulo recibio 1 Gracias por este post
Thron1 (10-12-2012)
Thron1 Sin conexión
Empleado de Fotocopiadora
Cosas
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 35
Agradecimientos dados: 21
Agradecimientos: 7 en 2 posts
Registro en: Nov 2011
Mensaje: #10
RE: Consulta sobre InsertaNodo
El problema con AntP era justamente ese! Estaba en null. Lo pude solucionar. Ahora el problema es este: tengo un archivo de productos ordenado por codigo de producto y uno de ventas sin orden, la idea es modificar el stock del de productos con el de ventas. Pase el archivo de productos a un vector y cada vez que lee el archivo de ventas, hace una busqueda binaria en el vector de productos para modificar el stock. Ahora el error de segmento me lo tira en la busqueda binaria! Gracias a todos por las respuestas!!
10-12-2012 21:16
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanuiit Ausente
♫ I'm Blue ...
... Da ba dee, da ba da ♫
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 8.871
Agradecimientos dados: 216
Agradecimientos: 627 en 211 posts
Registro en: Aug 2010
Mensaje: #11
RE: Consulta sobre InsertaNodo
Probablemente estés manejando mal otra vez la estructura y por eso el error. Quizás estás intentando acceder a una posición que no hay, que está por fuera. O sea, si mi array es [1..100] y quizás en algún momento hace un vec[101], ponele
Pasá el código si no lo podés solucionar

ALGORITMOS

Apuntes: Mem. Dinámica - Mem. Estática - Proc. y Funciones || Guías: Módulos + 83 Ejercicios || Finales: 2004-2013


[Imagen: digitalizartransparent.png]

[Imagen: firmananiv2.png]
10-12-2012 22:05
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 2 invitado(s)