Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-03-2005
Luli Luli is offline
Miembro
 
Registrado: oct 2004
Posts: 76
Poder: 20
Luli Va por buen camino
Lightbulb Llenar un arreglo bidimensional ...

Hola, nuevamente ando por aqui con un problemita, es que necesito llenar un arreglo bidimensional con ' ' espacios en blanco o con un caracter, por ejemplo 'i' la razón es que en esa tabla (o arreglo) se guardan el nombre de una variable y su valor, pero tambien hay ocasiones en que solo se guarda el nombre de la variable y el espacio del valor queda sin nada, entonces tengo que buscar en la tabla si hay espacios vacios y es ahi donde tengo el problema, porque supongo que para que sea eficaz la busqueda el arreglo debe ser llenado primero con espacios en blanco o con el mismo caracter y despues se ira llenando con los nombres de las variables y los valores pero cuando tengo uqe buscar, buscaré ya sea los espacios en blanco ó el caracter, la cosa es que me sale un error cuando lo quiero llenar con estos dos elementos, otra cosa, el array es de tipo String porque asi lo necesito para guardar los nombres de las variables... El codigo que uso es el siguiente:

Código:
 
...
 
for i=0 to Altura do
   for j=0 to 1 do
Tabla[i,j]=' ';
end;
...
¿Me podrian ayudar? muchas gracias de antemano
Responder Con Cita
  #2  
Antiguo 17-03-2005
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.285
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
¿Puedes poner cómo tienes definido el array?
¿Estático o dinámico? y los límites que utilizas.
__________________
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 18-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
No soy muy amigo de los arrays dinamicos, así que te propongo que lo hagas de otra forma.

Usando Objetos

EDITO: para el caso de valores por defecto (el espacio o la letra 'i' como decias), te conviene más este otro ejemplo:
uso de objeto Tlist

un saludote

Última edición por Lepe fecha: 18-03-2005 a las 11:57:14.
Responder Con Cita
  #4  
Antiguo 18-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Luli
la cosa es que me sale un error cuando lo quiero llenar con estos dos elementos


Código:
for i=0 to Altura do
   for j=0 to 1 do
Tabla[i,j]=' ';
end;
¿Y cuál es el error? Aunque no puedo asegurarlo da la impresión de que estás excediendo el límite de los índices del arreglo: si Altura es el número de renglones y el índice comienza en 0 entonces el ciclo debe ser

Código Delphi [-]
for i:=0 to Altura - 1 do
  for j:=0 to 1 do
    Tabla[i,j] :=' ';

Cita:
Empezado por Lepe
No soy muy amigo de los arrays dinamicos
¿Por qué?

// Saludos
Responder Con Cita
  #5  
Antiguo 18-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues es por vuestra culpa , me refiero a todos los que me presentaron al TobjectList, Tqueque,Tstack y a todos estos colegas, siempre que pienso en Arrays... digo... NO, mejor objetos.

Los asiduos al foro, quizás penseis que soy un poco pesado con el tema del TobjectList, pero creo que el hecho de no usarlos, es por desconocimiento. A todos nos enseñan a trabajar con arrays, es uno de los ejemplos más comunes de la Universidad o manuales, sin embargo, del ObjectList (al menos en mi caso) nadie me habló de ellos.

El principal problema que le veo a los arrays, es que justo despues de asignarle el nuevo tamaño, tienes que "perder tiempo" en inicializarlos con valores, y despues controlar los errores.

Por otra parte, en cuanto pasas de 2 dimensiones, suele ser muy engorroso trabajar con ellos.

En casos puntuales sigo trabajando con arrays, pero me parece acertado comentar otras alternativas. (si creen que me equivoco, decidmelo)

Un saludote
Responder Con Cita
  #6  
Antiguo 18-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Lepe
Por otra parte, en cuanto pasas de 2 dimensiones, suele ser muy engorroso trabajar con ellos.
¿Y se te hace más fácil manejar arreglos bidimensionales con objetos TList? ¿Cómo lo haces? ¿Cuál sería la sintaxis para manjear, digamos, una matriz de 5x3x6?

Yo creo que cada cosa tiene su lugar y en este caso de un arreglo bidimensional de cadenas, el uso de arreglos, dinámicos o estáticos, me parece lo más adecuado, máxime cuando los mayores problemas con los que te puedes enfrentar son con el uso de índices en cuyo caso únicamente hay que tener cuidado en no rebasar los límites inferior y superior:

Código Delphi [-]
var
  Matriz: array of array of String;
  I, J: Integer;

begin
  SetLength(Matriz, Altura, Ancho);
  for I := 0 to Altura - 1 do
    for J := 0 to Ancho - 1 do
      Matriz[I, J] := 'i';
end;

// Saludos
Responder Con Cita
  #7  
Antiguo 20-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Toda tabla de 2 dimensiones puede convertirse en un objeto con propiedades y métodos, por tanto, hasta ahí, prefiero usar Objetos. Si tiene más dimensiones, y hay que hacerlo, se hace, pero hacerlo pa ná... es tontería.

En serio, si unicamente va a escribir datos en el array, y despues leerlos, usaré un array, pero en cuanto haya que acceder al array para modificar ciertos datos, hacer comprobaciones, etc., busco otro método de implementarlo, ¿por qué? porque el código principal del programa se convierte en codigo de comprobaciones.

En el caso que nos ocupa, se tiene que asignar valores iniciales a cada fila, y al tiempo de leerlo, debe hacer 2 comprobaciones para una fila:

- el valor del nombre de la variable es bueno
- saber si se guarda el valor de la variable o no.

Esto implica realizar rutinas del tipo:

function Nombre Variable Es Bueno(indice de la tabla) : Boolean
function Tiene Valor Asignado(indice de la tabla):Boolean

Para rescatar el valor de una variable no puede usar AsString, AsDouble por ejemplo, cada vez que rescate un valor deberá convertirlo segun la necesidad; o peor aún.... realizando las conversiones sobre la marcha y repitiendo mucho código.

Todo se puede encapsular en un objeto con apenas 3 propiedades y 2 métodos privados, obteniendo mucha más claridad en el código.

Un saludote
Responder Con Cita
  #8  
Antiguo 23-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El uso de un objeto que encapsule un arreglo bidimensional o de las dimensiones que quieras no se elaciona con lo que has afirmado anteriormente. La pregunta prevalece: ¿en qué forma usas un TObjectList o un TList para implementar un arreglo?

Si he de mantener un arreglo, digamos para almacenar un tablero de ajedrez, ciertamente puedo pensar en un objeto Tablero con métodos para colocar las piezas y moverlas. Pero en su representación interna muy posiblemente seguiría usando un arreglo (en este caso estático) para mantener las posiciones de la fichas. Cada elemento del arreglo podría ser un record o, incuso, un objeto, pero el punto es que sigo sin ver la necesidad de una TList o TObjectList para representar un arreglo bidimensional.

// Saludos
Responder Con Cita
  #9  
Antiguo 23-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Cita:
Empezado por roman
La pregunta prevalece: ¿en qué forma usas un TObjectList o un TList para implementar un arreglo?
Un Tlist guarda una lista de "lo que quieras", un array guarda una lista de "lo que quieras", Si tienes N columnas, y se puede convertir en propiedades, Ya hemos sustituido el array por un Tlist.

No siempre puede sustituirse, incluso a veces, por comodidad es mejor un array que andar creando objetos en memoria, liberando y demás.

Estoy totalmente de acuerdo que los fallos que puede dar un array son mínimos, e incluso menores que un objeto. Por ejemplo, cada vez que creas un objeto, deberías usar un try except, en el caso de arrays, solamente usas un try except con la instrucción SetLegth en su interior y listo!!.

No respondí a la pregunta de la matriz 5x3x6, ya que, como es obvio, la única forma de hacerlo es mediante una matriz. (No voy a ser cabezota manteniendo una afirmación insulsa... y menos contigo , me podrías dar la del pulpo con afirmaciones muy contundentes )

Cita:
Empezado por roman
Si he de mantener un arreglo, digamos para almacenar un tablero de ajedrez, ciertamente puedo pensar en un objeto Tablero con métodos para colocar las piezas y moverlas. Pero en su representación interna muy posiblemente seguiría usando un arreglo (en este caso estático) para mantener las posiciones de la fichas. Cada elemento del arreglo podría ser un record o, incuso, un objeto,
Estoy totalmente de acuerdo.

Cita:
Empezado por roman
el punto es que sigo sin ver la necesidad de una TList o TObjectList para representar un arreglo bidimensional.
Un simple TStringGrid con 5 columnas, que quieres mantener en memoria. Puedes usar un Arreglo para mantenerlo, pero yo, prefiero un TobjectList por las ventajas que ofrece. Tú sabes de sobra cuales son

Por cierto, Mis felicitaciones por los Hijos de San Luis, que me tuvieron en Jaque hasta el último momento
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 06:06:01.


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