[RESUELTO] ¿Como encontrar el valor máximo de una matriz?

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
valenteres
Mensajes: 81
Registrado: Mié Jun 17, 2015 6:04 pm

[RESUELTO] ¿Como encontrar el valor máximo de una matriz?

Mensaje por valenteres »

Buenas tardes:

En un código he definido una variable como matriz. En el proceso de cálculo se asignan valores da los diferentes elementos de la matraz.
Necesito encontrar el los valores máximo y mínimo.

He visto que para los rangos hay funciones específicas. Las funciones:

Código: Seleccionar todo

Minimo = Rango.ComputeFunction(com.sun.star.sheet.GeneralFunction.MIN)
Maximo = Rango.ComputeFunction(com.sun.star.sheet.GeneralFunction.MAX)
Proporcionan los valores mínimo y máximo del rango. He probado a sustituir Rango por la matriz y no ha funcionado.

¿Hay un equivalente para matrices?

Muchas gracias
Última edición por valenteres el Lun Ene 25, 2016 11:04 am, editado 1 vez en total.
-------------------------------------------------------------
"Como no sabían que era imposible, lo hicieron"

Open Office 4.1.1
Libre Office 5.0
Windows 10
-------------------------------------------------------------
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por xiseme »

Supongo que no quieres recorrer los elementos de la matriz en un bucle For-next
... En el proceso de cálculo se asignan valores da los diferentes elementos de la matraz ...
Me pregunto si no es posible tener un Vmax y Vmin (variables) que capturen ese máx-mín al asignar los valores.
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por mauricio »

______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
valenteres
Mensajes: 81
Registrado: Mié Jun 17, 2015 6:04 pm

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por valenteres »

Buenas tardes de nuevo:

Una alegría verte por aquí Mauricio.
Tus indicaciones, como siempre, han sido acertadas y ha funcionado.

He generado una matriz "normal" y el código ha funcionado correctamente.
La matriz origen de datos corresponde a una variable personalizada.

Código: Seleccionar todo

Type TEstad
	Num As Long		'Número de datos
	Med As Double	'Valor medio
	Max As Double	'Valor máximo
	Min As Double	'Valor mínimo
	Des as Double	'Desviación estandar de la muestra
End Type

Type TSerie		'Parámetros necesarios para definir la serie
	....
	EstX as New TEstad	'Estdísticos de los valores X
	EstY as New TEstad	'Estdísticos de los valores Y
	EstY2 as New TEstad	'Estdísticos de los valores Y secundario
	....
End Type
Con los valores máximos genero una nueva matriz:

Código: Seleccionar todo

For Co1 = 0 to Ubound(GSerie())
	MatAux(Co1)=GSerie(Co1).EstX.Max
Next Co1
Si aplico el procedimiento a la matriz MatAux funciona adecuadamente

Código: Seleccionar todo

util.msgbox(util.max(MatAux))

Maximo=util.max(util.max(MatAux))
MsgBox Maximo
Cuando sustituyo MatAux por la original GSerie(Co1).EstX.Max:

Código: Seleccionar todo

util.msgbox(util.max(GSerie.EstX.Max)
Presenta el siguiente error
Error al utilizar variable personalizada como matriz
Error al utilizar variable personalizada como matriz
Si se puede utilizar la matriz original (supongo que sí), se simplifica el código.

Muchas gracias u un saludo
-------------------------------------------------------------
"Como no sabían que era imposible, lo hicieron"

Open Office 4.1.1
Libre Office 5.0
Windows 10
-------------------------------------------------------------
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por mauricio »

Es lógico, según veo, en GSerie(Co1).EstX.Max, tienes un valor flotante, el método max requiere una matriz, lo dice claramente el error mostrado...

lo siguiente debe de funcionar...

Código: Seleccionar todo

    util.msgbox(util.max(Array(GSerie.EstX.Max)))
pero... ¿para que quieres el valor máximo de un solo valor?... seguramente me estoy perdiendo de algo más que tienes y no lo veo o no lo pusiste, pero... MAX con EasyDev siempre te devolverá el máximo de una matriz de valores...

Manejar matrices con Python es una delicia, como pueden ver aquí: http://easydev.readthedocs.org/en/latest/arrays.html
y casi todo disponible ahora desde Basic (u otros lenguajes de macros) por medio de EasDev...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
valenteres
Mensajes: 81
Registrado: Mié Jun 17, 2015 6:04 pm

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por valenteres »

Buenas tardes:

Tuve un error por un corta-pega de código, pero desafortunadamente el resultado es el mismo.
Una matriz "normal" funciona sin problemas, pero la matriz generada con un tipo personalizado de variable, da error de variable de objeto no establecida.

El código utilizado es el siguiente:

Código: Seleccionar todo

Sub EscEjes(ESerie() As Object)

Dim Minimo As Double
Dim Maximo As Double
Dim Co1 as integer
Dim nSer as integer
Dim util as Object

Dim MatAux()

Redim MatAux(Ubound(ESerie()))

util = createUnoService("org.universolibre.EasyDev")

For Co1 = 0 to Ubound(ESerie())
	MatAux(Co1)=ESerie(Co1).EstX.Max
Next Co1

Maximo=util.max(MatAux)
MsgBox Maximo

util.msgbox(util.max(MatAux))

'a=Array(ESerie.EstX.Max)
'a=Array(ESerie().EstX.Max)
'util.msgbox(util.max(Array(ESerie.EstX.Max)))
util.msgbox(util.max(ESerie.EstX.Max))
End Sub
La matriz ESerie corresponde a un tipo personalizado de variable
Con el lazo For - Next paso un componente de esa variable a una matriz auxiliar
Cuando utilizo la matriz auxiliar funciona sin problemas
Cuando utilizo la matriz ESerie da el siguiente error:
Error con Matrices
Error con Matrices
Las instrucciones que están comentadas con comilla, dan todas el error indicado en la imagen

La estructura de la variable personalizada es la siguiente:

Código: Seleccionar todo

Type TEstad
	Num As Long		'Número de datos
	Med As Double	'Valor medio
	Max As Double	'Valor máximo
	Min As Double	'Valor mínimo
	Des as Double	'Desviación estandar de la muestra
End Type

Type TSerie		'Parámetros necesarios para definir la serie
	Doc as Object	'Documento en el que están los datos de la serie
	Hoja as Integer	'Hoja en el que están los datos de la serie
	ColX as Integer	'Columna en la que están los datos de las abscisas (x)
	Coly as Integer	'Columna en la que están los datos de las ordenadas (y)
	FilA as Long	'Primera Fila con datos
	FilZ as Long	'Última Fila con datos
	FilT as Long	'Fila con el título de la serie
	EstX as New TEstad	'Estdísticos de los valores X
	EstY as New TEstad	'Estdísticos de los valores Y
	EstY2 as New TEstad	'Estdísticos de los valores Y secundario
	EjeY as Integer		'En el caso del eje Y: =0 Eje principal, =1 eje secundario
	FacEsc as Single	'Factor escala con respecto a la serie de referenicia: Intervalo inicial de la Serie(0)
	IndSol as Single	'Indice de solapamiento con la Serie(0).  Sirve para separar el trazado de dos series
						'Pueden estar en el mismo o diferente ejeY que la serie(0)
						'El valor asignado corresponde al % de solapamiento con la serie(0)
						'El valor varía entre 0-100
						'	
	FTxt as Integer	'Formato de la serie		
End Type
El objetivo final es controlar los parámetros de escala de los ejes del gráfico.
Esa variable personalizad tiene los parámetros correspondientes a las series. Por una parte los datos que definen los rangos de datos y por otra parte los dato de interés, por ejemplo los valores máximos y mínimos de cada intervalo

Pretendo obtener los valores máximo y mínimo correspondientes a cada eje, teniendo en cuenta los intervalos de las diferentes series a las que se asigna ese eje.
En este caso tengo dos series con los datos en ESerie(0) y ESerie(1)
Los valores Minimos de cada serie correspondientes al eje X están en:

ESerie(0).EjeX.Min
ESerie(1).EjeX.Min

Me interesa obtener el valor mínimo de los dos, y en el caso de n series en el mínimo de los valores ESerie(0-n).EjeX.Min
Los mismo ocurre con los valores máximos

En el caso de utilizar un eje Y secundario, me interesa "sincronizarlo" con el eje Y principal, de forma que la rejilla del eje Y coincida con la rejilla del eje Y2. Para ello necesito conocer los valores extremos de uno y otro de la misma forma que he indicado en el caso del eje X

Muchas gracias
-------------------------------------------------------------
"Como no sabían que era imposible, lo hicieron"

Open Office 4.1.1
Libre Office 5.0
Windows 10
-------------------------------------------------------------
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por mauricio »

valenteres escribió: Una matriz "normal" funciona sin problemas, pero la matriz generada con un tipo personalizado de variable, da error de variable de objeto no establecida.
Claro, es una matriz de objetos, no una matriz de valores...
valenteres escribió: Los valores Minimos de cada serie correspondientes al eje X están en:

ESerie(0).EjeX.Min
ESerie(1).EjeX.Min

Me interesa obtener el valor mínimo de los dos,
si solo tienes dos valores a comparar, una comparación simple debe de funcionar...
valenteres escribió: Pretendo obtener los valores máximo y mínimo correspondientes a cada eje, teniendo en cuenta los intervalos de las diferentes series
Si sabes el origen de los valores, entonces obtén el máximo y el mínimo directamente de los valores origen...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
valenteres
Mensajes: 81
Registrado: Mié Jun 17, 2015 6:04 pm

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por valenteres »

Buenas tardes:

Muchas gracias Mauricio
El problema de base es si estos procedimientos pueden o no utilizarse con matrices generadas a partir de variables de tipos personalizados.
No acabo de entender la diferencia entre los dos tipos de matrices -objetos y valores-, la "normal" se ha definido como Double. La de tipo personalizado cada elemento tiene su definición.

Sobre el número de elementos a comparar, en este caso son dos, pero corresponde al número de series que se representan en el gráfico. Desde luego que está la alternativa del lazo, pero si existe en procedimiento, el código se simplifica.

Respecto a los mínimos y máximos de los ejes, es precisamente los valores que pretendo obtener, y son consecuencia de los valores de las series. Por ello necesito los valores mínimos y máximos de todas las series, para comparación entre ellos, obtener los valores extremos de los ejes.

Un saludo
-------------------------------------------------------------
"Como no sabían que era imposible, lo hicieron"

Open Office 4.1.1
Libre Office 5.0
Windows 10
-------------------------------------------------------------
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por mauricio »

Siento, reitero el siento... que estas confundiendo la gimnasia con la magnesia...

la función máximo opera sobre valores... siempre, reitero el siempre... ¿las variables personalizadas son valores?... respuesta, no... son objetos...
valenteres escribió:necesito los valores mínimos y máximos de todas las series, para comparación entre ellos, obtener los valores extremos de los ejes.
Reitero... los valores de las series están (supongo), en rangos de celdas, no esperes a tener los valores en las series para obtener los máximos y mínimos, obtenlos de las celdas donde tomas los datos, con las funciones de matrices con que cuenta EasyDev, es pan comido...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
valenteres
Mensajes: 81
Registrado: Mié Jun 17, 2015 6:04 pm

Re: ¿Como encontrar el valor máximo de una matriz?

Mensaje por valenteres »

Buenos días:

En primer lugar, mi más sincero agradecimiento a Mauricio, por su dedicación y por su paciencia.

Tomo nota de las posibilidades de cada una de las vías. Estos son los mimbres que tenemos para hacer el cesto.
Entiendo que lo mas práctico va a ser generar esa matriz auxiliar.

A modo de reflexión. Los rangos los tengo identificados. He obtenido los valores extremos de cada rango. Supongo que podría obtener el valor mínimo de varios rangos considerados conjuntamente, y de igual forma el valor máximo. Quizás lo intente. Si no encuentro solución por esta vía, seguiré con la matriz auxiliar.

Reitero, una vez más, mi mas sincero agradecimiento.

Un saludo
-------------------------------------------------------------
"Como no sabían que era imposible, lo hicieron"

Open Office 4.1.1
Libre Office 5.0
Windows 10
-------------------------------------------------------------
Responder