domingo, 20 de agosto de 2023

Como utilizar una matriz 3D en vfp

Matriz en 3D




Este código implementa una forma creativa de emular una matriz tridimensional usando solamente un array unidimensional y una matriz bidimensional en VFP. La clave está en mapear cuidadosamente las posiciones de la matriz 3D deseada a elementos individuales del array 1D.


Primero se declara un array1d con el tamaño total de elementos que contendría la matriz 3D, en este caso 10 x 20 x 30 = 6000. Luego se declara una matriz2d de 10 x 20 que se usará para acceder a las posiciones de la matriz 3D emulada.


Se inicializa un contador pos que se usará para indexar incrementalmente el array1d. También se inicializa valor para ir asignando valores secuenciales a cada elemento del array.


Mediante dos ciclos anidados se recorren las filas y columnas de la matriz2d. En cada iteración se asigna el valor actual a la posición pos en el array1d. Luego se incrementa valor y pos para seguir asignando a las siguientes posiciones.


Además se asigna pos como el valor actual en la matriz2d. Esto sirve para mapear cada elemento de la matriz 3D a una posición en el array 1D.


Luego para acceder a un elemento en particular de la matriz 3D, se utilizan sus coordenadas (fila, columna, profundidad) para obtener la posición mapeada en la matriz2d. Ese valor se usa entonces para indexar directamente el array1d.


Al final se valida imprimiendo todos los valores asignados en el array1d, donde deberíamos ver los números de 1 a 6000. Esto confirma que cada posición se mapeó correctamente.

En resumen, este algoritmo permite emular matrices 3D de forma eficiente en VFP utilizando tan solo un array y una matriz. Aprovecha la indexación directa de arrays unidimensionales para simular el acceso a una estructura tridimensional. ¡Una gran muestra de creatividad e innovación! 

Local array1d[6000]

Local matriz2d[10, 20]

Local pos, valor

valor = 1

pos = 1

For i=1 To 10

For j=1 To 20

array1d[pos] = valor

valor = valor + 1

matriz2d(i,j) = pos

pos = pos + 1

Endfor

Endfor

* Acceder elemento (6,10,15)

elem = matriz2d(6,10)

pos = elem

? array1d[pos]

For i=1 To 6000

If !Empty(array1d[i] )

? array1d[i]

Endif

Endfor

0 comentarios:

Publicar un comentario