Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ordenacion de un array mediante el metodo de la burbuja (https://www.clubdelphi.com/foros/showthread.php?t=43280)

baby 07-05-2007 19:16:56

ordenacion de un array mediante el metodo de la burbuja
 
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í:
Código Delphi [-]
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

Cita:

Empezado por kuan-yiu
Se verá así:

Asi es :)
Código Delphi [-]
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

Cita:

Empezado por baby
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

Cita:

Empezado por seoane
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

Cita:

Empezado por baby
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.

Cita:

Empezado por baby
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...


La franja horaria es GMT +2. Ahora son las 21:47:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi