Pascal/Turbo Pascal - Corrección de procedimiento

 
Vista:

Corrección de procedimiento

Publicado por Juan (83 intervenciones) el 07/12/2007 19:55:10
Este procedimiento de insertar ordenado en array está bien? porque la condición del while no me convence:

Procedure InsertaOrdenado (var vec:tvec; elem:tinfo;cardi:word);
begin
while (cardi < 1) and (elem< vec[cardi-1]) do begin
v[cardi]:=v[cardi-1];
cardi:=cardi-1
end;
v[cardi]:=elem
end;

Otra cosa, si alguien me puede explicar el procedimiento porque no lo entiendo relamente, ese cardi me hace dudar, y al parecer se pisan unos datos con otros, mm no se, a ver si me pueden aclarar esto, saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Corrección de procedimiento

Publicado por Mariano (57 intervenciones) el 07/12/2007 20:18:51
Holaaaaa, yo t conteste abajo ya, pero t explico bien aca
el while me habia equivocado disculpa es cardi > 1
ahoraa, como funciona
ponele que vos en un vector no tenes ningun dato
card = 0
pones un dato, card se incrementa 1 (o sea card=1) pregunta es card > 1 es falso
entonces ni entra, y a v[1]:=elem.
ahora cuando inserta un nuevo dato, se incrementa nuevamente uno cardi, x lo ques es 2
y pregunta
es 2 > 1 (verdaderoo y es el el nuevo elemento a agregar < v[1] (en este caso)
si es menor, quiere decir que tiene q ir antes, por lo q se corre uno hacia abajo y se inserta, y asii sucesivamente.

un abrazoo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Corrección de procedimiento

Publicado por Juan (83 intervenciones) el 07/12/2007 20:42:10
Pero este procedimiento sirve para cuando el subindice delvector empieza en 0 no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Corrección de procedimiento

Publicado por Mariano (57 intervenciones) el 07/12/2007 21:47:07
No para cualquier valor , pero lo unico q la variable cardi tiene q representar la cantidad de elmentos que tiene cargado el vector, q no es lo mismo q la maxima
Veo que no confias mucho en el procedimiento, xq no agarras, y creas un vector d 1 a 5 x ej, y citas este modulo con 5 numeros, y dps mostras en pantalla el vecto y me decis q pasa :)

Un abrazoo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Corrección de procedimiento

Publicado por juan (83 intervenciones) el 07/12/2007 23:51:18
Nono, no me malinterpretes, me representa una ayuda gigante esto y realmente estoy agradecido. Solo que probe un vector y me funcionó unicamente empezando con subindice de 1, si empezaba el subindice de 0 me encontré con que me pisa los valores, lo único que le tuve que hacer un pequeño ajuste,quedó así:

Begin

while (cardi>=1) and (elem<vec[cardi]) do

begin
v[cardi+1]:=v[cardi];
cardi:=cardi-1
end;

v[cardi+1]:=elem

end;

está bien eso para los vectores que empiezan de 1????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Corrección de procedimiento

Publicado por Mariano (57 intervenciones) el 08/12/2007 00:36:58
ahhh sii ta bien, si empieza dsd 0 si, esta bien, yo xq nunnk suelo usar ocmo subindice 0, arranco x convension desd uno, aunq eso no quiera decir que este mal :)

sisis asi esta bienn!!
un abrazooo queridoo!!

Mariano F
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Corrección de procedimiento

Publicado por juan (83 intervenciones) el 08/12/2007 02:44:34
Nono, disculpa, pero lo que quize decir es que el procedimiento que te puse es si arranca desde 1 el vector, porque el que me diste vos seriva solo para arrancar desde cero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar