FoxPro/Visual FoxPro - ARRAYS.

 
Vista:
sin imagen de perfil

ARRAYS.

Publicado por DALSOM (612 intervenciones) el 08/04/2005 17:20:05
Hey guys, hello again, sorry by this in english, i just pasted the text from other forum to avoid rewrite it again.

Hello, i have a matriz that is composed from others more matriz. The final matriz on X or Y can be from 0 to
K; the K, in this case is 3 for columns or Y, and for the rows or X's is 3, and X and Y obey
the formula L=n(K)+(0=<a<K) where n and K must be more than 0,and can vary in each case. In this case,
n=1, K =3 , a=1 for the X's
n=1, K =3 , a=2 for the Y's

And, i have in other matriz the values of critical points : X=[3,6,7] Y=[3,5] . then your start point
will be the point P(1,5) and your finish point P(7,1).

1 2 3 4 5 6 7

1 |7 8 9| |16 17 18| |21|
2 |4 5 6| |13 14 15| |20|
3 |1 2 3| |10 11 12| |19|

4 |25 26 27| |31 32 33| |35|
5 |22 23 24| |28 29 30| |34|

sorted in this lineal matriz
A=|1,2,3,4,...,35|

and i want to sort to this order

Aº=|22,23,24,28,29,30,34,25,26,27,31,32,...,17,18,21|

To do this, i need a formula that say me the exact position of the start point in the matriz A, of any of its points, letting me reorder
the A matriz into Aº matriz.

How would be that equation.

Thanks a lot for try to help me.

Ing. David Brea
Dominican Republic.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ARRAYS.

Publicado por Roman Suazo (2723 intervenciones) el 08/04/2005 17:29:36
Explicas el asunto de una forma muy complicada... que es exactamente lo que queres hacer, es deicr , de que se trata el asunto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ARRAYS.

Publicado por Roman Suazo (2723 intervenciones) el 08/04/2005 18:00:24
Como dije anteriormente, o te faltan datos para ampliar la informacion o el asunto es muy matematico (se encesita cierta base teorica para resolverlo)...si este es un problema matematico famoso es muy probable que encuentres el pseudocodigo o solucion en la web
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:ARRAYS.

Publicado por DALSOM (612 intervenciones) el 08/04/2005 19:27:03
NO FALTA NINGUN DATO, Y NO ES UN PROBLEMA FAMOSO.
AUNQUE CREO QUE YA SE HABRA RESUELTO, PORQUE ESTAS HACIENDO SCROLL EN TU PANTALLA, LO QUE INDICA QUE EL ALGORITMO QUE SE UTILIZO, BASADO EN ESTE PROBLEMA MATEMATICO, FUNCIONA.

BIEN, ENCONTRE UNA FUNCION QUE ME CAPTURA LA PARTE VISIBLE DE UN FORM EN UN BMP, LO LIGUE CON UN PROGRAMA PARA HACER SCROLL, PARA PODER IMPRIMIR TODAS LAS DEMAS.

AHORA ESTOY TRATANDO DE MODIFICAR Y MEJORAR ESA FUNCION, PARA QUE TODO FOXERO TENGA UNA FUNCION NATIVA DE FOX QUE CAPTURE UN FORM COMPLETO, AUN ESTE SEA MAS GRANDE QUE LA PANTALLA MISMA COMO ES MI CASO.

LA MATRIZ GRANDE, O CUADRADA, REPRESENTA EL FORM EN CUESTION, LA MATRIZ LINEAL, ES ESTE MISMO FORM, PERO TODO EN UNA SOLA LINEA Y ORDENADO SEGUN EL ORDEN EN EL CUAL SE ENCONTRO.

POR LO QUE HAY QUE REORDENAR ESTE ARREGLO, PARA QUE QUEDE EL BMP ORDENADO, Y SEA LEGIBLE PARA EL USUARIO.

QUE ES LO QUE REPRESENTA LA SEGUNDA MATRIZ.

Y SI, SE RESUELVE CON MATEMATICAS PRIMERO ANTES DE PASARLO A CODIGO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:ARRAYS.

Publicado por DALSOM (612 intervenciones) el 12/04/2005 16:15:51
HOLA A TODOS, HE TARDADO UN POCO, PERO POR LO MENOS HE RESUELTO YA EL PROBLEMA MATEMATICO. AQUI LES TENGO LA RESPUESTA :

Dado que conocemos los puntos donde terminan las submatrices que componen la matriz de la cual se toman los valores para hacer la matriz A, tendremos que :

El primer punto de cada matriz, sera igual a la suma de todas las areas anteriores a esta mas 1, y el ultimo punto sera, la suma de todas las areas anteriores mas el area de la matriz en cuestion.

Para calcular el area, solo necesitamos las dimensiones absolutas de ancho (x) y de altura (y), y ejecutar la formula del area (ancho * alto).

Ahora ya que tenemos la forma de calcular el area de una sola, seria cuestion recorrer todas las matrices hasta llegar a la matriz de la cual queremos el primer punto.

GRACIAS A TODOS, POR INTENTAR AYUDARME, LA RESPUESTA, PARECE GRACIOSO, SURGIO CUANDO ALGUIEN AL TRATAR DE AYUDARME ME DIO UNA RESPUESTA ERRONEA, Y CORRIGIENDOLE LLEGO LA LUZ DEL ENTENDIMIENTO.

LA UTILIDAD DE ESTO, ES CAPTURAR UN FORMULARIO QUE SEA MAS GRANDE QUE LA MISMA PANTALLA, POR LO QUE LAS SUBMATRICES REPRESENTAN SECCIONES DE LA PANTALLA, Y LA MATRIZ [A] REPRESENTA EL CONJUNTO ORDENADO DEL GRAFICO FINAL QUE ESTA ORDENADO EN LA MATRIZ Aº .

AUN , NO HE PODIDO CODIFICARLO CORRECTAMENTE, PUES LA IMAGEN ME SALE DISTORCIONADA, PERO AGRADECERE CUALQUIER AYUDA, CREO QUE AUN NO HAY NINGUNA HERRAMIENTA QUE PODAMOS UTILIZAR PARA ESTE FIN, POR ESO LA INVESTIGACION.

GRACIAS.
DALSOM.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:ARRAYS.

Publicado por DALSOM (612 intervenciones) el 19/04/2005 19:39:28
HOLA A TODOS DE NUEVO, GRACIAS A TODOS AQUELLOS LOS QUE INTENTARON AYUDARME.

HOY HE COMPLETADO LA FUNCION QUE ME CONVIERTE UN FORMULARIO MUY GRANDE Y QUE NO CABE EN LA PANTALLA EN UN BMP. INTENTE PONER EL CODIGO AQUI, PERO PARECE QUE ES MUY LARGO.

AGRADECIMIENTOS ESPECIALES A :

ROMAN SUAZO (Primera persona en intentar ayudarme)
DAVID T. AMADOR (Su portal me dio algunas ideas)
FOX SITE.COM/ (Donde encontre el codigo inicial)
CHIQUI COCO (Me dio una respuesta erronea que me llevo a la real)
E. A. CABRERA P.(Profesor de maths y prog. que me dijo free your mind)
Chin Bae (Autor del BuildBmp)

LUEGO VERE COMO LO ADAPTO PARA PODER PUBLICARLO TODO EN ESTE FORO (LWP/VFPA), LO HARE, PUES NO ME DEJA PUBLICARLO EN ESTE FORO.

ES MUY UTIL PARA IMPRIMIR FORMULARIOS MUY GRANDES Y QUE EXCEDAN EL LIMITE DE LA PANTALLA.

Ing. David Brea ( DALSOM )
República Dominicana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

EL CODIGO FUENTE.

Publicado por DALSOM (612 intervenciones) el 25/05/2005 20:51:53
HOLA CHICOS, PENSE QUE SE HABIA PUBLICADO EL CODIGO FUENTE AQUI, PERO ENCONTRE QUE NO APARECE NADA. ESPERO ESTE AYUDE A MUCHOS. AUNQUE TAL VEZ NO PUEDAN ENTENDERLE, LES ASEGURO QUE FUNCIONA A LAS MIL MARAVILLAS, Y ES LA SOLUCION A ESE PROBLEMA MATEMATICO EXTRANO QUE DESCRIBI ANTERIORMENTE. PARA ESTE, TIENEN QUE TENER UN FORM CON SCROLLS, Y ALGUN GRAFICO EN EL, MAS GRANDE QUE LA PANTALLA. ESPERO QUE MEJOREN ESTE CODIGO PRONTO, PARA QUE PUEDA LEER MAS RAPIDO, O MEJOR DICHO, PARA QUE PRODUZCA UN BMP MAS RAPIDO QUE LEYENDO PIXEL POR PIXEL DE LA PANTALLA.

CUALQUIER DUDA, PUES ESCRIBANME A MI MAIL, Y CON GUSTO LE RESPONDERE.


FUNCTION BuildBMP(toForm, tcFile,tnX1,tnY1, tnX2, tnY2,tx,ty)
LOCAL nX1, nX2, nY1, nY2, nWidth, nHeight, nPixels, i, j, cBMP, cColArray,cPad,tnx1,tny2
STORE 1 TO toform.HScrollSmallChange,toform.VScrollSmallChange
DIMENSION pX(CEILING((tx/tnx2))) && Coordenadas X de división.
DIMENSION pY(CEILING((ty/tny2))) && Coordenadas Y de división.
DIMENSION Area(ALEN(Px),ALEN(Py))
STORE 0 TO pY,pX,Area
nX1 = TVL(tnX1, 0)
*nX2 = TVL(tnX2, toForm.Width-1)
nX2 = TVL(tx, tx-1)
nY1 = TVL(tnY1, 0)
nY2 = TVL(ty, ty-1)
nWidth = nX2 - nX1 + 1
***Ancho debe ser divisible por 4
***Para pegar cada linea con nulos.
cPad = REPLICATE(CHR(0),MOD(nWidth,4))
nHeight = nY2 - nY1 + 1
nPixels = nWidth * nHeight
IF nPixels < 1 THEN
RETURN .F.
ENDIF

cBMP = 'BM' + NumToDWord(54 + nWidth * nHeight * 3) + NumToWord(0) +NumToWord(0) + NumToDWord(54)
cBMP = cBMP + GetBMPInfoHeader(nWidth, nHeight)
STORE '' TO cColArray ,newcad
*- Valores criticos en la cadena del bmp.
valor=tnx2
FOR c=1 TO ALEN(px)
px(c)=valor
valor=IIF((valor+tnx2)>tx,tx,(valor+tnx2))
ENDFOR
valor=tny2
FOR c=1 TO ALEN(py)
py(c)=valor
valor=IIF((valor+tny2)>ty,ty,(valor+tny2))
ENDFOR
*---------------- Recorriendo valores criticos.
lcx=ALEN(Px)
lcy=ALEN(Py)
*toform.maxheight=toform.maxheight+17
*toform.height=toform.height+17
toform.setviewport(0,0)
FOR cy=1 TO lcy
Ly = iif(cy=1,1,Py(cy-1)+1) && Limite de la matriz en Y.
FOR cx=1 TO lcx
Lx = iif(cx=1,1,Px(cx-1)+1) && Limite de la matriz en X.
toform.setviewport(lx,ly)
FOR j = py(cy) TO Ly STEP -1
FOR i = Lx TO px(cx)
cColArray = cColArray + GetBinaryColor(toForm.Point(i,j))
ENDFOR
ENDFOR
Area(Cx,Cy)=LEN(cColArray) && Area al final de cada submatriz.
ENDFOR
ENDFOR
*---------------- Separacion de lineas.
toform.setviewport(0,0)
FOR cy=lcy TO 1 STEP -1
Ly = iif(cy=1,1,Py(cy-1)+1) && Limite de la matriz en Y.
CAi=0
FOR i=Py(cy) TO Ly STEP -1
FOR j = 1 TO lcx STEP 1 && Recorrido de toda X en la misma y.
IF j>1 && Area anterior.
An=Area((j-1),cy)
ELSE
IF cy>1
An=Area(lcx,(cy-1))
ELSE
An=0
ENDIF
ENDIF && Area anterior en An.
Lnx = IIF(j=1,Px(j),(Px(j)-Px(j-1)))*3 && Longitud absoluta de X en posicion actual.
Ai=Lnx*CAi+1 && Area Interna.
An=An+Ai
newcad=newcad+SUBSTR(cColArray,An,Lnx)
NEXT
CAi=CAi+1
newcad=newcad+cPad
NEXT
NEXT
cBmp=cBmp+newcad
STRTOFILE(cBMP, tcFile)
ENDFUNC
FUNCTION GetBMPInfoHeader(tnWidth, tnHeight)
LOCAL cHeader, cZero
cZero = NumToDWord(0)
cHeader = NumToDWord(40) + NumToDWord(tnWidth) + NumToDWord(tnHeight)
cHeader = cHeader + NumToWord(1) + NumToWord(24) + cZero + cZero
cHeader = cHeader + NumToDWord(3780) + NumToDWord(3780) + cZero + cZero
RETURN cHeader
ENDFUNC
FUNCTION GetBinaryColor(tnColor)
RETURN SUBSTR(BINTOC(MAX(tnColor,0) - DWORDOFFSET),2)
ENDFUNC
FUNCTION NumToDWord(tnVal)
LOCAL cBin
cBin = BINTOC(tnVal - DWORDOFFSET)
RETURN SUBSTR(cBin,4,1) + SUBSTR(cBin,3,1) + SUBSTR(cBin,2,1) +SUBSTR(cBin,1,1)
ENDFUNC
FUNCTION NumToWord(tnVal)
LOCAL cBin
cBin = BINTOC(tnVal - WORDOFFSET, 2)
RETURN SUBSTR(cBin,2,1) + SUBSTR(cBin,1,1)
ENDFUNC

FUNCTION TVL(tuParamValue, tuInitValue)
RETURN IIF(VARTYPE(tuParamValue) = VARTYPE(tuInitValue), tuParamValue,tuInitValue)
ENDFUNC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar