Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   generar arrays automaticamente (https://www.clubdelphi.com/foros/showthread.php?t=60239)

Drago26 25-09-2008 14:16:03

generar arrays automaticamente
 
hola soy nuevo en esto, quiesiera saber si alguien me puede ayudar con los arrays ya que tengo q trabajar con vectores en un trabajo del colegio. lo principal q quiero saber es si se puede generar vectores actumaticamente mediante un procedure. lo que tengo q hacer es trabajar con varios arrays a la vez, pero no se cuanto voy a necesitar, por eso quiero saber si se pueden generar automaticamente mediante el programita q estoy haciendo. el ejercicio es de camino critico de una materia llamada operativa, el tema de la materia es redes de proyecto, si pudiera ayudarme te lo agradeceria.

Delphius 25-09-2008 14:29:10

Cita:

Empezado por Drago26 (Mensaje 316214)
hola soy nuevo en esto, quiesiera saber si alguien me puede ayudar con los arrays ya que tengo q trabajar con vectores en un trabajo del colegio. lo principal q quiero saber es si se puede generar vectores actumaticamente mediante un procedure

Hola Drago26,
Bienvenido a clubdelphi.

Como eres nuevo te pediría que por favor te tomes unos minutos para leer la guia de estilo.

Con respecto a tu duda, ¿Podrías ser más explícito por favor? ¿A que te refieres con generar vectores automáticamente?
Si nos describieras con más detalles tu problema te podremos ser de más ayuda.

Saludos,

rauros 25-09-2008 15:14:27

En programación hay gente que no sabe de física, e incluso sabiendo no vamos a ayudarte en ella. Este foro es de programación, y la ayuda sobre la programación es esta:

Generar arrays automáticamente está mal dicho, lo que se hace es declarar un array dinámico, osea, que puede cambiar el tamaño mediante procedimientos. Imagina que necesitas hacer un array de números pero no sabes cuantos números necesitas, deberías hacer esto:

Código Delphi [-]
Var
ArrayDinamico: Array of integer
//como puedes ver no se le da tamaño al array

Begin
SetLength(ArrayDinamico,1);//Con esto le cambias el tamaño
ArrayDinamico[0]:=20;//Y así le das valor a esa variable.
End.

Nota: Al cambiar darle valor a un array tienes que tener en cuenta que se empieza contando de 0. Si declaras tamaño 3, tendrás los arrays 0,1 y 2. También puedes saber su tamaño con Length(ArrayDinamico).

Drago26 25-09-2008 17:02:33

te lo agradezco voy a probar a ver que sale, saludos

Delphius 26-09-2008 03:29:02

Cita:

Empezado por rauros (Mensaje 316229)
En programación hay gente que no sabe de física, e incluso sabiendo no vamos a ayudarte en ella. Este foro es de programación, y la ayuda sobre la programación es esta:

Generar arrays automáticamente está mal dicho, lo que se hace es declarar un array dinámico, osea, que puede cambiar el tamaño mediante procedimientos. Imagina que necesitas hacer un array de números pero no sabes cuantos números necesitas, deberías hacer esto:

Código Delphi [-]Var ArrayDinamico: Array of integer //como puedes ver no se le da tamaño al array Begin SetLength(ArrayDinamico,1);//Con esto le cambias el tamaño ArrayDinamico[0]:=20;//Y así le das valor a esa variable. End.


Nota: Al cambiar darle valor a un array tienes que tener en cuenta que se empieza contando de 0. Si declaras tamaño 3, tendrás los arrays 0,1 y 2. También puedes saber su tamaño con Length(ArrayDinamico).

El problema no es que esté mal dicho, sino que la palabra que no es, a mi modo de ver, correctamente empleada es "automáticamente".
El verbo no es el problema. El leer generar, me lleva a interpretar de que deseaba declarar un array.
El lio, disculpenme si molesto a alguien con mis siguientes palabras, es como ya he mencionado: la palabra automáticamente.

NO necesariamente debe ser dinámico. Tranquilamente puede interpretarse a dicha palabra en un marco "temporal". Por poner un ejemplo, a lo mejor se desea declarar un array de 10 (supongamos que siempre es de 10) cuando se llame a un procedimiento, y/o cuando se cumpla cierta condición.

Mi primera impresión me llevó a pensar que tal vez se refería a arrays dinámicos, pero por las dudas preferí pedir amablemente de que explicase mejor.
Además señalo que el decir "pero no se cuanto voy a necesitar" da la idea de que no sabe cuantos arrays necesita, y no de que "tamaño" los necesita.

Me alegro rauros que hayas aparecido a la ayuda de Drago26, he estado fuera unas cuantas horas. He vuelto un tanto idiota, e intuyo que se ve reflejado en la forma en que me he expresado.

Disculpenme que haya señalado esos errores semanticos. No es muy correcto lo que hice, mi intensión es demostrar que el post de Drago26 puede interpretarse de muchas maneras.
Muy posiblemente rauros haya acertado a la duda. Más yo quiero pedir a Drago26 que por favor, en una próxima oportunidad, sea un tanto más explícito.
No le digo que sea Cervantes, pero al menos haber ordenado las ideas de otro modo evitaría las malas interpretaciones.

Saludos,

gatosoft 26-09-2008 04:33:50

Hey hey... amigos no olviden algo importante...!!!

LIBERAR LOS RECURSOS

Oye Drago26... cuando termines de utilizar tu array haz lo siguiente:

Código Delphi [-]
  ArrayDinamico := nil;

Bueno esta es una de las pocas ocasiones en las que se libera memoria de este modo... el otro caso que conozco es en los timage

Código Delphi [-]
  Image1.Picture := nil;

No se si alguien conozca otro caso.

Solo por curiosidad:

En general para liberar memoria de tus objetos debes hacer

Código Delphi [-]
  Objeto.free;

Yo siempre he considerado que el caso de Image1.Picture:= nil es un Bug ... por que dentro de la lógica, lo que haces cuando apuntas una variable tipo Objeto o Tipo Puntero (que al final son lo mismo), es perder la direccion de memoria donde está alojado tu objeto, mas no liberandolo

Entonces, es correcto

Objeto.Free;
Objeto:=nil;

Incorrecto:

Objeto:=nil;
Objeto.Free;

Por que en este segundo caso pierdes la direccion de memoria y cuando vayas a hacer Object.Free no va a encontrar un objeto que liberar...

Para el caso de trabajar directamente con apuntadores... debes utilizar metodos de separacion y liberacion de memoria (como New y Dispose) y al final si haces Puntero.=nil;

Saludo,

Lepe 26-09-2008 10:12:22

Cita:

Empezado por Delphius (Mensaje 316441)
He vuelto un tanto idiota, e intuyo que se ve reflejado en la forma en que me he expresado.

pues no. Te has expresado como siempre.... :D :D :p

Saludos

rauros 26-09-2008 12:40:26

Cita:

Da la idea de que no sabe cuantos arrays necesita, y no de que "tamaño" los necesita.
Yo de ahí entiendo que lo que quiere drago26 es un montón de arrays. En ese caso lo que tienes que hacer es un array dinámico de arrays :D ...

Código Delphi [-]
Type 
  ArrayInteger = Array [especificar tamaño] of integer
End;

Var
 ArrayDinámico: Array of ArrayInteger;

Begin
SetLength(ArrayDinamico, especificar tamaño);
ArrayDinámico[Seleccionar Array][Seleccionar integer]:=Un Integer;
End;


La franja horaria es GMT +2. Ahora son las 18:46:12.

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