PDA

Ver la Versión Completa : ordenacion de un array mediante el metodo de la burbuja


baby
07-05-2007, 19:16:56
muy buenas a todos
soy novato en eso de delphi y queria hacer un programa que me ordena un array(p.e de 5 elementos) mediante el metodo de la bubuja pero al compilarlo me da error que no se localizarlo haber por favor si me podeis hechar la mano
esta es la codificacion que hice
var
Form1 : TForm1;
vector:array[1..5]of integer;
i,cont:integer;
implementation
procedure ordenar;
var
ord :string;
k,l,j,tmp:integer;
begin
ord:=' ';
for l:=1 to 5 do
for j:=1 to 4 do
begin
if (vector[j+1]<vector[j])then
begin
tmp:=vector[j+1];
vector[j+1]:=vector[j];
vector[j]:=tmp;
end;
end;
for k:=1 to 5 do
ord:=ord+' '+inttostr(vector[k]);
Form1.lblordenado.caption:='los datos del array ordenado sera '+ord;
end;
procedure mostrar;
var
s :string;
l :integer;
begin
s:=' ';
for l:=1 to 5 do
s:=s+' '+inttostr(vector[l]);

Form1.lblsinorde.Caption:='los datos del array son : '+s;
end;
{$R *.dfm}
procedure TForm1.BBTclClick(Sender: TObject);
begin
close;
end;
procedure TForm1.bbtacepClick(Sender: TObject);
var
n:integer;
begin
i:=i+1; // el indice k me lleva la cuenta de los datos en el array
n:=strtoint(Edtnum.Text);
cont:=cont+1; // contador de los datos
if (cont=6)then
mostrar // llamo al procedimiento mostrar
else
vector[i]:=n;
Edtnum.Clear;
Edtnum.SetFocus;
end;
procedure TForm1.btnorClick(Sender: TObject);
begin
ordenar;
end;
end.
gracias de antemano :(
disculparme compadres si existe la solucion en otro sitio :rolleyes: :o
saludos cordiales

kuan-yiu
07-05-2007, 19:26:00
Este código es muy poco claro, edita el mensaje y utiliza la etiqueda de código delphi para hacerlo más legible (y si puedes añade identación).
Se verá así:
procedure TForm1.btnorClick(Sender: TObject);
begin
ordenar;
end;

roman
07-05-2007, 19:33:21
Además de lo que comenta kuan-yiu, indica cuál es el error que te da, porque de otra forma es muy difícil ayudarte.

// Saludos

seoane
07-05-2007, 19:33:56
Se verá así:


Asi es :)

var
Form1 : TForm1;
vector:array[1..5]of integer;
i,cont:integer;
implementation
procedure ordenar;
var
ord :string;
k,l,j,tmp:integer;
begin
ord:=' ';
for l:=1 to 5 do
for j:=1 to 4 do
begin
if (vector[j+1]< vector[j])then
begin
tmp:=vector[j+1];
vector[j+1]:=vector[j];
vector[j]:=tmp;
end;
end;
for k:=1 to 5 do
ord:=ord+' '+inttostr(vector[k]);
Form1.lblordenado.caption:='los datos del array ordenado sera '+ord;
end;
procedure mostrar;
var
s :string;
l :integer;
begin
s:=' ';
for l:=1 to 5 do
s:=s+' '+inttostr(vector[l]);

Form1.lblsinorde.Caption:='los datos del array son : '+s;
end;
{$R *.dfm}
procedure TForm1.BBTclClick(Sender: TObject);
begin
close;
end;
procedure TForm1.bbtacepClick(Sender: TObject);
var
n:integer;
begin
i:=i+1; // el indice k me lleva la cuenta de los datos en el array
n:=strtoint(Edtnum.Text);
cont:=cont+1; // contador de los datos
if (cont=6)then
mostrar // llamo al procedimiento mostrar
else
vector[i]:=n;
Edtnum.Clear;
Edtnum.SetFocus;
end;
procedure TForm1.btnorClick(Sender: TObject);
begin
ordenar;
end;
end.

Pero lo que me gustaría saber es exactamente el error que te da. Eso nos daría una pista de pro donde empezar.

baby
07-05-2007, 19:44:34
gracias semone por la reescitura del codigo :)
en el momento de compilarlo me salta al fichero del project poniendo el cursor
a la ultima linea pero antes un mensaje de violacion de memoria ....

seoane
07-05-2007, 19:52:53
gracias semone por la reescitura del codigo :)
en el momento de compilarlo me salta al fichero del project poniendo el cursor
a la ultima linea pero antes un mensaje de violacion de memoria ....


:) Vamos mejorando, y si ya pusieras el mensaje completo seria perfecto :p

De todas formas, parece que el problema es que accedes a un componente que no esta creado. Pero viendo el código no se donde puede estar el error.

roman
07-05-2007, 20:01:36
parece que el problema es que accedes a un componente que no esta creado.

Eso, o un índice fuera de rango. El procedimiento bbtacepClick incrementa sospechosamente un índice i que no parece haber sido inicializado, pero realmente es muy difícil saber.

// Saludos

baby
07-05-2007, 20:18:45
nose que os digo compadres
acabo de ejecutarlo varias veces y no me daba el error que me estaba dando
antes :( :eek: :confused:
el problema que me resulta ahora al insertar numeros iguales en el edit
en el momento de llamar al metodo ordenar se muestra el mismo numero 2 veces aunque no se insertan en el mismo orden

:confused:

baby
07-05-2007, 20:22:28
tiene razon roman
pero aquel indice tio solamente lo hago para que se muestra al lado del control(label) la cuenta de los numeros que voy insertando

jacanche
07-05-2007, 21:43:41
nose que os digo compadres
acabo de ejecutarlo varias veces y no me daba el error que me estaba dando
antes :( :eek: :confused:


Al menos pienso que deberias inicializar los valores de las variables globales, delphi inicializa las variables globales pero no deberiamos confiarnos en esa caracteristica.


el problema que me resulta ahora al insertar numeros iguales en el edit
en el momento de llamar al metodo ordenar se muestra el mismo numero 2 veces aunque no se insertan en el mismo orden

:confused:

Si entiendo bien el parrafo, no le veo cual es el problema, en un arreglo de elementos ordenados siempre van a estar juntos los elementos iguales. Si el comportamiento que esperas es que solo aparezca una vez, al momento de insertar deberias de hacer una busqueda, si se encuentra el elemento ya no lo insertarias.
En fin, espero no confundir mas.

Saludos

baby
07-05-2007, 21:49:37
gracias jagach
entonces a cada vaz k kiero insertar tengo k efectuar la busqueda para saber si esta el elemento o no :o ¿?
saludos








==> recordar nuestros origines nos ayuda a no olvidar quien somos

jacanche
08-05-2007, 02:43:55
Si, asi es...