Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-11-2017
Aszael Aszael is offline
Registrado
 
Registrado: nov 2017
Posts: 7
Poder: 0
Aszael Va por buen camino
Question Cómo lograr que un mismo procedimiento funcione para varios arreglos?

Saludos, señores. Estoy trabajando con varios arreglos y preciso que un mismo procedimiento funcione para todos ellos. Cada arreglo guarda distintos números, números que alguien introduzca a través de un Edit. Es decir:
Elem1[dim1]:=2,4,1
Elem2[dim2]:=9,8
Elem3[dim3]:=8,5,3

Tengo este procedimiento, que ordena el arreglo de menor a mayor:
Código Delphi [-]
procedure Vector.ordenarvector;
var c,m:integer;
begin
  for t:=1 to dim1 do begin
    c:=1;
    repeat
      if (elem1[t]>elem1[t+c]) and (elem1[t+c]>0)then begin
        m:=elem1[t];
        for i:=t+c to t+c do
          elem1[t]:=elem1[t+c];
        elem1[t+c]:=m
      end else
      c:=c+1;
    until c=dim1;
  end;
end;
Ahora como bien dicta la pregunta, ¿cómo puedo lograr que funcione para mis tres arreglos? Ya que este procedimiento solo me funciona para "Elem1".

Intente pasar Elem2[dim2]=9,8 a Elem1[dim1] y desde ahí ordenarlo, y luego pasarlo de Elem1 a Elem2 nuevamente, -funciona- pero interfiere con otros procedimientos que tengo.

PD: No puedo usar Sort's. Muchas gracias y saludos.
Responder Con Cita
  #2  
Antiguo 15-11-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Para eso se utilizan los parámetros en procedimientos y funciones.
Revisa estos links o si buscas en internet encontrarás muchos más.

http://docwiki.embarcadero.com/RADSt...ctions_(Delphi)
http://docwiki.embarcadero.com/RADSt...meters_(Delphi)

Se trata al final de modificar ese procemiento para que admita un parámetro de tipo array. De esa forma funcionará con todos los arrays (siempre que sean similares).

Haz pruebas y si no te sale comenta lo que has hecho aquí y iremos ayudándote.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 16-11-2017
Aszael Aszael is offline
Registrado
 
Registrado: nov 2017
Posts: 7
Poder: 0
Aszael Va por buen camino
Post

Cita:
Empezado por Neftali Ver Mensaje
Se trata al final de modificar ese procemiento para que admita un parámetro de tipo array. De esa forma funcionará con todos los arrays (siempre que sean similares).

Haz pruebas y si no te sale comenta lo que has hecho aquí y iremos ayudándote.
¿Te refieres a hacer esto? No pude ir ni para atrás ni para adelante, mi arreglo se desbordaba, falta de conocimiento debo decir:
Código Delphi [-]
procedure Vector.ordenarvector(elem:array of integer; dim: integer);
Hum, me falto decir que quería el mismo procedimiento para cada arreglo, y cada arreglo tiene su propio botón. No buscaba que con un solo botón se me ordenaran todos mis arreglos sino, solo los que yo quisiera. Encontré otra manera, bueno, al menos funciona -llorando por dentro-:

Cree dos procedimientos más y luego desde el programa principal hago la llamada:
Código Delphi [-]
//Unidad donde va la clase...
procedure Vector.copia(num:integer);
begin
  case num of
    1: for t:=1 to getDim(1) do
       x[t]:=getElem(t,1);
    2: for t:=1 to getDim(2) do
       x[t]:=getElem(t,2);
  end;
end;

procedure Vector.copiafinal(num: integer);
begin
  case num of
    1: for t:=1 to getDim(1) do
       elem1[t]:=x[t];
    2: for t:=1 to getDim(2) do
       elem2[t]:=x[t];
  end;
end; 

procedure Vector.ordenarvector(dim: integer);
var c,m:integer;
begin
  for t:=1 to dim do begin
    c:=1;
    repeat
      if (x[t]>x[t+c]) and (x[t+c]>0)then begin
        m:=x[t];
        for i:=t+c to t+c do
          x[t]:=x[t+c];
        x[t+c]:=m
      end else
      c:=c+1;
    until c=dim;
  end;
end;
//Fin unidad.               

//Programa principal...
procedure TP2.B1OrdenarClick(Sender: TObject);
begin
  v.copia(1);
  v.ordenarvector(v.getDim(1));
  v.copiafinal(1);
  ActualizarSG1;
end;  

procedure TP2.B2OrdenarClick(Sender: TObject);
begin
  v.copia(2);
  v.ordenarvector(v.getDim(2));
  v.copiafinal(2);
  ActualizarSG2;
end; 
//Fin programa principal.
Lo hago de esta manera para darle independencia a cada arreglo y que cuando haga una operación, el arreglo 2 o 3 no se una al 1 y viceversa.

Cómo habrás notado, estoy en pañales, trato de aprender, pero "¿arreglos en parámetros?" No, aún no he visto a fondo este tema. Te agradezco por tu tiempo y si tienes algún consejo para hacer más pequeño todo este código, o para no darle tantas vueltas al asunto, estoy más que dispuesto a leerte, gracias.
Responder Con Cita
  #4  
Antiguo 16-11-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
No se entiende lo que quieres y el codigo no ayuda.

Como debe quedar los datos ordenados?
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 16-11-2017
Aszael Aszael is offline
Registrado
 
Registrado: nov 2017
Posts: 7
Poder: 0
Aszael Va por buen camino
Cita:
Empezado por mamcx Ver Mensaje
No se entiende lo que quieres y el codigo no ayuda.

Como debe quedar los datos ordenados?
Ya solucioné, gracias.
Responder Con Cita
  #6  
Antiguo 16-11-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Aszael Ver Mensaje
¿Te refieres a hacer esto? No pude ir ni para atrás ni para adelante, mi arreglo se desbordaba, falta de conocimiento debo decir:
Código Delphi [-]

procedure Vector.ordenarvector(elem:array of integer; dim: integer);
Si, a eso me refería.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 19-11-2017
hal1967 hal1967 is offline
Miembro
 
Registrado: feb 2012
Posts: 32
Poder: 0
hal1967 Va por buen camino
¿Por qué pasan un parámetro de nombre dim?

¿No debería bastar con usar low y high?

algo como

Código:
for i:= low(v) to high(v) do
               ...
Responder Con Cita
  #8  
Antiguo 20-11-2017
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por hal1967 Ver Mensaje
¿Por qué pasan un parámetro de nombre dim?
¿No debería bastar con usar low y high?
Es correcto.
Y también se puede usar la función Length para saber la longitud del array, pero en este caso (yo al menos) no quise distraerle con más cosas que no fueran estrictamente del problema que tenía este usuario.

Tal vez él lo ve más claro así. Una vez solucionado el problema, se le puede añadir ese comentario como "mejora/optimización".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como abrir varios archivos.txt en un mismo Memo albelg Varios 5 18-05-2015 18:16:39
ayuda para lograr ejecutables pequeños michal C++ Builder 12 25-02-2015 20:02:43
Como hago para que funcione una aplicacion Firebird sin motor tulio Firebird e Interbase 2 04-07-2014 18:28:15
Lograr que funcione bien un richTextBox REHome .NET 2 06-12-2009 22:10:53
Usar un solo procedimiento almacendado para restar o sumar valores a un mismo registro Chogo Trucos 2 11-05-2007 18:39:01


La franja horaria es GMT +2. Ahora son las 13:16:16.


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
Copyright 1996-2007 Club Delphi