Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Serapis

#1391
De entrada la función es una función abstracta, es decir hace un filtrado de elementos sin necesidad de saber cual es el contenido de aquellos elementos, más allá de saber que al parecer aloja (al menos) dos tipos de datos, rechazando aquellos que son de tipo buleano.

Por otro lado el código es bastante sucio...

En VB6 un variant es un tipo que en principio puede contener a cualquier otro tipo, incluso un array del propio tipo variant, más aún podría contener una colección del tipo que sea u ocultar todo un árbol...
...por lo que el uso (correcto) de la función requiere en gran medida saber qué datos son los que recibe la función de otro modo es fácil incurrir en errores.
Una ventaja del tipo Variant es que relaja el chequeo de tipos, lo que lo hace apto para ser usado en funciones que precisen ser tratadas por igual sin distintición del tipo de datos (esto es, no exige así, disponer de una función de ídéntica funcionalidad para tratar otro tipo de datos, solo por tratarse de un tipo distinto. Resulta incómodo esos lenguajes que fuerzan a hacer por ejemplo una función sort(), para cada tipo de datos que se quiera ordenar: una para ordenar arrays de bytes, otra para arrays de cadenas, otra para arrays de enteros, etc...).

La función además de sucia adolece de alguna imprecisión que puede incurrir en error, por ejemplo al asumir que el vector comienza en el índice 1. Así sería más correcto cambiar la firma de los bucles desde:
Código (vb) [Seleccionar]

for i = 1 to cant

a una más precisa:
Código (vb) [Seleccionar]

dim inicio as long
'...
inicio = LBound(vector)
'...
for i = inicio to cant


Esto excluye posibles errores en vectores cuyo índice no comience en 1. Salvo que se se tenga la absoluta certeza de que siempre comienzan en 1...
Debe notarse que en VB6, un array admite cualquier valor en el subíndice inicial, mientras que muchos lenguajes lo fijan a 0 ó incluso 1 (como pasa en varias versiones de Fortran).

El redimensionamiento del array 'mat', no tiene sentido que sea de dos dimensiones cuando en una dimensión solo habrá un elemento.
Pero claro, tampoco puede alegarse que esté mal, por que en vb6 un array puede ser redimensionado posteriormente conservando su contenido, pero en tal caso, sólo con la última dimensión. ...luego, si fuera de la función (en otra parte del código desde el que se llama) se lleva a cabo tal redimensionado tendría validez, aunque discutida, pués hay maneras más eficaces de llevarlo a cabo pero sobre todo por eficiencia, pués nada impide pasar un segundo o tercer parámetros para indicar la dimensión e índice.
Todavía otro asunto más espinoso es que el array parece ordenado por columnas en vez de por filas, una vez más como digo tiene validez si fuera se ha de redimensionar y asignar después otros arrays...
(para que se entienda mejor, lo propio es dimensionar por filas así:
Código (vb) [Seleccionar]

redim mat(1 to 1, 1 to aux)

...lógicamente acorde a la declaración en el resto del código debe igualmente ser intercambiado de lugar las variables acorde a que apunten a cada dimensión correctamente.)

En definitiva el código es muy sucio y a buen seguro que teniendo el resto del código del que forma parte de lo que sea que se pretende hacer, acepta sí o sí lugar a mucha optimización.

En cuando al código, lo que hace es...
1 - En el primer bucle localiza que elementos del array no son de tipo buleano, con el único propósito de contarlos.
2 - Cuando termina dicho bucle usa ese valor de cuenta (conoce cuantos elementos hay que no son buleano), para dimensionar (alojar memoria para) un array con dicho número de elementos (mat).
3 - Luego en el segundo bucle, se localiza los mismos elementos contados en el primero, pero ahora con el propósito de ser asignados al nuevo array... secuencialmente.

El resultado es que procedente de un array de entrada con valores que tiene buleanos y otros tipos de datos (no se entra en que otros tipos de datos puedan ser), se filtra para devolver otro array que contienee exclusivamente todos aquellos elementos que no son de tipo bucleano. El primer bucle es necesario porque a priori se desconoce cuantos son buleanos y cuantos de otro/s tipo/s. Lo que se vaya a hacer después con dichos datos, nada se sabe.

Sobre lo que dices que hace el código (completo) que te hallan pasado, en principio no puede afirmarse, ni negarse nada, sin conocer los datos u otro código adicional, porque la función como te he indicado es de naturaleza abstracta, solo puede afirmarse de ella que filtra elementos de tipo buleanos (sin saber (ni necesitarlo para hacerlo) qué otros tipos contiene).



Un array de variants puede contener elementos heterogéneos. Por ejemplo:
Código (vb) [Seleccionar]

dim x() as variant    ' define que que x es un array dinámico con elementos individuales variant.
dim by as byte, bo as boolean
dim j as integer, k as integer
dim s as string
dim img as IpictureDisp

by= 255
bo = TRUE
j =18765: k = (j\by)
s = "Hola"    ' asignado un simple string...
s = Dir("C:\windows\web\wallpaper\*.jpg")    ' ahora asignado la ruta de una imagen jpg (si existen en esa carpeta imágenes jpg, toma la primera).
set img = loadpicture(s)

' alojando espacio en memoria para 100 elementos de tipo variant para el array x
redim x(0 to 99)  
' Asignación a los elementos del array, diferentes tipos (heterogéneos), como ejemplo.
x(0) = by
x(1)= bo
x(2) = j
x(3) = k
x(4) = s
set x(5) = img

msgbox x(4)        ' la ruta de la imagen... con el nombre dle fcihero.
msgbox "el valor del índice 3 del array x, es: " & x(1)     ' True
msgbox cstr(x(3))    ' el integer asignado a la posición 3, que lo convertimos a un string para su presentación
' (la conversión no es requerida persé. ...se hace una conversión explícita del tipo integer a string, cuando el tipo esperado a la derecha (en la asignación) es de tipo string y el de la izquierda (el resultado de la expresión) es de tipo numérico).

Al igual que en cualquier otro lenguaje el uso de tipos variants (tipos universales, un tipo que puede actuar, representar o comportarse como otro), sale costoso, esto es especialmente más cierto en vb6 que en otros lenguajes por la forma en que se aborda, y son la solución equivalente a las uniones disponibles en otros lenguajes, como ADA por ejemplo.

Si tienes alguna duda a cualquier respecto, pregunta...
#1392
Citar¿Conoces este juegazo?
¡https://www.youtube.com/watch?v=wRT7Iqkczao
Yo dejé los juegos atrás hace más de 25 años...

Precisamente un objetivo primordial de la informática se basa en resolver cualquier problema sin necesidad de tener que conocer el funcionamiento de algo. Siempre habrá quien haga un análisis de requisitos que si será alguien que conozca al menos parcialmente el tema, la función del programador es transformar esos requisitos en código, sin importar de que se trata. De otro modo los programadores serían personas capacitadas exclusivamente para un tema especifico y nada más.
...la informática hace lo mismo que las matemáticas, se abstrae del objetivo final centrándose exclusivamente en el problema, es sólo la interfaz final del usuario la que pudiera necesitar ser amigable con el problema específico que trata.

Es decir, si necesitas que alguien conozca eso juego para poder ayudarte, mal vamos. Se supone que basta que tú, seas el que esté versado en el juego, se supone tambié que debieras ser capaz de trasladar la problemática subyacente a una prosa para que cualquiera pueda orientarte en la soución.

Citar
Citar...yo quisiera variar las posiciones de los jugadores todo lo posible, aunque sin variar la formación (como 3-4-3).
Quiero que se varíen la posición de los jugadores individualmente, no como un grupo.
Ya. Pero el problema contigo es que siempre te mueves en medio de la ambigüedad, jamás eres capaz de dar las reglas precisas, exactas que definan lo que pretendes, siempre hay que añadir suposiciones para rellenar huecos y al final incluso así uno nunca acierta. Al final añades 'reglas' que después, ni siquiera intervienen, luego con ello solo añdes más confusión.

Creo tu no vas a cambiar tu actitud te diga lo que te diga, ni tu aptitud por más que te aconseje 'estudia esto' o 'repasa aquello' así que  no voy a comentar más... voy a ceñirme al problema salvo que las escasa reglas dadas vuelvan a alterarse/redifirse en otro mensaje y se desdigan d elo que ahora pudiera entenderse .



De entrada tiene que quedarte claro que dado una serie de por ejemplo 10 valores tomando solo 1, cualquiera de las otros 9 restantes, son igualmente variantes de ese otro valor, siempre y cuando al sistema se le suponga ser aleatorio. Si fuera secuencial (1º, 2º,3º...), entonces cuanto más cercano y de valor menor, tanto más 'cercano', pués para llegar al 9º hay que pasar por el 8º antes, para llegar al 8º hay que pasar por el 7º, etc...

Luego cuando tu dices que "variar al equipo lo más posible", matemáticamente carece de sentido, cualquiera de las variaciones entre todas las combinaciones posibles es igual de variada, no existe un grado de 'más'.
Por otro lado la acotación está admitida, cuando se dan reglas (sin ellas no), por ejemplo ciñendo el problema a un asunto específico, uno puede añadir una regla adicional como por ejemplo: 'ninguno debe repetir posición de la vez anterior', ó 'no más de dos pueden repetir posición anterior', etc... eso descarta variaciones, peor todavías las restantes deben considerarse igualmente equiprobables y equidistantes salvo que nuevas reglas vengan a restringir y acotar aún más, entonces podría alegarse que con cada regla se acota un grado de 'distancia'.
Luego tu primer problema es definir cuantas y cuáles son las reglas que necesitas quese cumplan, y entre las variaciones que resten después de aplicar esas reglas serán de igual 'distancia'. Descartando una u otra regla la distancia puede considerarse variada, para las variaciones que que queda acotadas por esa regla...

Si con grupos intentaste decir la variación de cantidad de elementos en dicho grupo, tal que al final la suma de toso ellos se mantenga en un total, tampoco es difícil definir un algoritmo que realice la tarea, pero todavia son precisas algunas reglas, como cantidad máximo de grupos (el máximo sin esa restricción será el grupo formado por solo un elemento, luego siendo 11 jugadores serían 11 grupos), sin esa restricción el mínimo será un grupo, todos pertenecen a 1 solo grupo), también deeb definirse reglas que individualicen cada grupo, por ejemplo llamado a un grupo defensas ppodríaa cotarse que el vamos minimo de elemntos que admite sea 2 y el máximo (por ejemplo) 5... por supuesto debes asegurarte que esas acotaciones sean congruentes entre sí, es decir que si un grupo se acota a un máximo de 7 y otro a 5, y se consideran 4 grupos, y el total de elementos son 11, solo esos 2 grupos ya superan el total, por lo que cuando para un grupo se eligió el máximo, ser congruente implica  que el resto de grupos puesto a su mínimo no puede superar el total, si se supera ese límite debe ser reducido hasta el total de elementos.
Entonces tu primera tarea es definir esas reglas:
A - Cuantos elementos participan (al saber que se trata de jugadores de fútbol, sabemos que s elimita a 11).
B - Cuantos grupos debe haber
C - Para cada grupo, dar un valor mínimo y máximo.

Con esos 3 datos debe construirse entonces un algoritmo, primero que pruebe la congruencia de las reglas dadas, y luego que 'imprima' los resultados de las agrupaciones.

La segunda tarea es determinar que elementos pueden formar parte de qué grupo, por ejemplo quizás solo 3 jugadores sean admitidos como porteros.
Este algoritmo es distinto del anterior y no afecta aquel, aquél define los grupos y éste que elementos pueden participar en qué grupo. Obviamente si fuere muy restriuctivo, podría dejar elementos sin participación en grupo alguno, porque el grupo ya tiene su máximo y en los grupos que cabe alguno más no puede formar parte... no pasa nada, simplemente esa variación es decartada porque no cumple las premisas. El problema pasaría de latente a existente solo si con esas restricciones fuera imposible formar una sola variación. Llevando una cuenta d elas variaciones aceptadas y rechazadas, se puede al final conocer la 'tolerancia' de tales restricciones.



No obstante, y aunque pones una tabla, solo con poner números y algunas etiquetas, no alcanza a entender qué haces, porqué, y dónde quieres ir a parar. Las explicaciones que das resultan insuficientes, porque tu hablas como si previamente ya hubieras explicado todo y todos supieramos de que estás hablando, cuando la realidad es que todo está en tu cabeza.

'Creo', entender que con 'DifAbs', lo que pretendes es señalar la diferencia de posición para un elemento entre una permutación y otra. Si eso es todo lo que pretences, te señalo que no es correcto, porque ahondando por ahí el riesgo de llegar a variaciones cíclicas es casi seguro (es decir acabarias repintiendo ciertas combinaciones y otras 'lícitas' nunca se darían. Es harto difícil que dadas una reglas antojadas, generen todas las variaciones posibles (admitidas).
Si para tí eso de la 'distancia' entre la posición previa y la actal, es lo que buscas y te satisface, entonces considera la suma de todos como la distancia total. Aunque no veo que vaya a cambiar con eso de cambiar la distancia 'máxima'.
Básicamente la distancia máxima invidual será entre la primera posición y la última, la sumá máxima. Y La suma de distancias, para dar la máxima se conseguirá de varias formas: básicamente será la media de cada par por la mitad de elementos. Esto es, si tienes 10, la suma del (1+10), (2+9), (3+8), (4+7), (5+6) equivale a la suma de: (1+6), (2+7), (3+8), (4+9), (5+10).

Sobre tu problema de números negativos, al resultado de hacer la resta, súmale el valor mínimo alcanzable.
Es decir si antes tenias esto:
a) 5-8 = -3; b) 6-2 = 4; c) 3-9 = -6; d) 7-1 = 6
Ordenadas: -6, -3, 4, 6;  c,a,b,d

Y el valor mínimo alcanzable (aquella resta que da el valor menor), será: 1-9 = -8
Será equivalente a 8 + la resta:
a) 8+5-8 = 5; b) 8+6-2 = 12; c) 8+3-9 = 2; d) 8+7-1= 14
Ordenando: 2,5,12,14; c,a,b,d

c,a,b,d Que es el mismo resultado que tenías antes, pero ahora con valores positivos.
Con "es el mismo resultado", quiere decir que mantienen el orden y diferencias absolutas, el orden se ve 'c,a,b,d', y las diferencias pueden comprobarse:
d(0) - a(0) = 6 - (-6) = 12
d(1) - a(1) = 14 - (2) = 12

Si tu solución no yace en este tercer apartado, define claramente las dos tareas que te señalo (en el segundo apartado) para poder ayudarte...
#1393
El nombre genérico es transformación....
Se trata como un entorno 3d, al que se le pueden aplicar diferentes transformaciones partiendo de una matriz que va sumando transformaciones y al final se aplica todo de una sola vez, desplazamiento, rotación en cualquiera de los 3 ejes y escala.

Cuando solo se aplica uno o dos efectos, suele utilizarse exclusivamente una función dedicada, cuando debe aplicarse varios a la vez, la transformación e sla eelgida, porque las otras exigirían aplicarlas en secuencia ralentizando el proceso. Una vez hecha la multiplicación d elas matrices de cada transformación, se aplica y finalmente se proyecta en 2d.
#1394
No hay nada malo en automatizarlo todo y tener robots por todas partes, salvo porque al final los dueños serán los de siempre y los demás que se supone que haremos ?... Habrá alguna tarea en el futuro que no pueda ser desarrollada por un robot, y que al final venga a remplazar el puesto de trabajo de los humanos...?

Cuál es el objetivo final de robotizar todo?. Se supone que las máquinas tienen como objetivo principal facilitar la vida al hombre no complicársela. Lo segundo se está confirmando, ... y cuando lo primero se confirme también, será cuando llegue la "primera guerra mundial de humanos vs robots"...  :laugh: :laugh: :laugh:

Pero, pensándolo mejor, no creeis que la sustitución de empleos debería empezar por los dirigentes y dueños de las empresas y los políticos... ????. Es lo que más urge, por que son los auténticos culpables de casi todos los problemas que en este planeta hay... La avaricia junto a la necedad.
#1395
La cuestión es dependiente de si tal color tú lo aplicas o si ya está ahí...

A - Si los aplicas tú, se trata de iniciar otra vez el bucle que localiza el texto en cuestión y aplica el color amarillo, pero ahora en vez de aplicar el color, lo que aplicas es la fuente con la propiedad underline a true. La forma de aplicarlo será como más abajo señalo, pero la forma de localizarlo, es la misma que usaste para aplicar dicho color de selección (es decir esta forma de localizarlo, si existe será más óptima que la siguiente)...

B - Si en cambio el texto ya trae coloreado en origen el texto ("estaba así"), no queda otra que reconocerlo (en el sentido de hacer un análizarlo, no de aceptar un hecho), para ello basta un par de bucles y usando la propiedad: SelectionColor.

Ten encuenta que SelectionColor se refiere sólo al texto seleccionado actual, por lo que debes ser tu quien manipule dicha seleccion... y no tomar cualquier texto que pudiera haber sleccionado...
...nota también que el color de selección es uno en particular, el color aplicado a un texto seleccionado, pero si el texto seleccionado tiene un color en particular, refiere a dicho color, es decir un texto sin color sería el SelectionColorDefault por decirlo de alguna manera...

En pseudocódigo sería más o menos:


funcion AplicarEstilofuente (font f)
   entero, j, k


o quizás una firma más parametrizada...

funcion AplicarEstilofuente (negrita boolean, cursiva boolean, subrayada boolean, tachado boolean, size integer)
  entero, j, k
  font f

  with f  '.Style
     .Bold = negrita
     .Italic = cursiva
     .Underline = subrayada
     .Strikeout = tachado
     .Size = size
  end with

 ' ...


o quizás una firma algo menos parametrizada...
Código (vbnet) [Seleccionar]

funcion AplicarEstilofuente (Estilo FontStyle)
    entero, j, k
    font f.Style = Estilo

    ' posicionar la seleccion al comienzo:
    richtb.Selectionlength = 1
    bucle para k desde 0 hasta richtb.TextLength
        richtb.SelectionStart = k
        ' v ---- desde aquí se va seleccionando el texto 'amarillo'
        Si ritchtb.SelectionColor = amarillo luego    
            Hacer
                richtb.Selectionlength += 1  
            Repetir mientras ritchtb.SelectionColor = amarillo

            ' v ------ aquí aplicas el estilo de la fuente al texto seleccionado.
            richtb.selectionfont = f  
            ' avanzamos el contador del bucle principal hasta el final de la selección actual.
            k += richtb.Selectionlength -1 ' +0, +1, -1 afina, yo escribo al vuelo...
            ' sin parar en detalles nimios que puedes corregir cuando lo pruebes.
            ' la selección vuelve a ser 1 carácter hasta encontrar otro candidato.
            richtb.Selectionlength = 1  
        fin si
    siguiente
fin funcion


Por último nota que si el texto fuera muy muy largo, podría demorarse la presentación, así que es mejor evitar que se actualice la vista (redibujado) con cada cambio al aplicar selectionfont. Conviene por tanto congelar el redibujado al inicio y redibujarlo al final, usando:
- Antes de iniciar el bucle (mejor a la entrada de la función) un: richtb.SuspendLayout
- Y después del bucle (o mejor justo antes de salir) un: richtb.ResumeLayout
OJO: van en pareja si pones el primero más vale que no lvides poner el segundo...



p.d.: Olvidaba decirte que como esto no es un problema de programación si no con el lenguaje, debes siempre mirar la fuente original del lenguaje... que para eso proporcionan una referencia completa del lenguaje....
y si procede buscar en google "ejemplos de objeto/objeto.propiedad/objeto.metodo" antes de venir a quí como si fuera algo inexistente o imposible d elocalizar, a buen seguro en ggogle abundan ejemplos.

https://docs.microsoft.com/es-es/dotnet/api/system.windows.forms.richtextbox?view=netframework-4.8#propiedades
#1396
Si tienes 10 elementos (jugadores), y estos deben guardar su 'formación' 3-4-3, como tu dices y donde creo entender sería ABC-DEFG-HIJ (aunque luego a ti te sale una K, que hablando de fútbol debo suponer que se refiere al portero)... entonces, el problema consiste en considerar como elementos individuales (y por tanto permutables), a cada grpo en si... esto es:

X = ABC
Y = DEFG
Z = HIJ

Luego son solo 3 elementos los permutables... con tan pocos se puede hacer de cabeza... de entradas todas las poibles son 1*2*3 = 6, luego:
0 - XYZ
1 - XZY
2 - YXZ
3 - YZX
4 - ZXY
5 - ZYX
Estas variaciones, pueden ser un array... y
Ya solo te basta remplazar cada aparición del ítem que identifica un grupo, por los items que están contenidos en dicho grupo...
Si el portero también participa en las permutaciones y no va siempre al final (como me fuerza suponer), entonces el resultado sería: 1*2*3*4 = 24, y lógicamente empezarías por:
0 - XYZK
1 - XYKZ
2 - XZYK
3 - XZKY
4 - XKYZ
5 - XKZY
rellena tu las otras 3 series de 6, que comienzn con Y, Z y K.

Si no te entendí bien, detalla todas las reglas, no dejes que quien te lea tenga siempre que suponer cosas que tú debes ofrecer y dejar claras, como parte de tu exposición...
#1397
La gran parte de los infelices victimables de la ingeniería social, lo son, no por gilipolleces de niños, educación ni otras tonterías, sino por que en el fondo, son buenas personas, gente de buen corazón, confiadas... confiantes en que el resto del mundo también lo es. No se paran a pensar en lo absoluto de: "¿y por qué alguien iba a venir a intentar timarme a mi... si yo no tengo...?". Incluso aunque les expliques y les dés varias razones siguen sin aceptar encajar en esa 'caja' (a pesar de que son los únicos que encajan en una caja hecha su medida).

Una persona confiada de ese tipo, es la típica que se va a bañar a la playa y deja todas sus cosas encima de la toalla confiando que a su vuelta siga todo ahí... no es que confíe es que ni siquiera cabe en su cabeza el pensarse que no esté, ni plantearse esa pregunta.

Luego... la ingeniería social es un 'arte' (como generosamente suelen atriburise), o simplemente un abuso de la buena fé de la gente, algo que te encuentras ahí tirado?. Y no será que los que usan y abusan de la ingeniería social son realmente la antítesis de esos victimables?... los 'malos malotes', que buscan cómo aprovecharse de los demás?.
Quiero decir que si todo el mundo fuera inteligente en extremo y desconfiado en el mismo extremo, la capacidad de la inteligencia social para cumplir sus 'objetivos' sería completamente nula... luego, yo ni siquiera metería la palabra inteligente en ese término.
El uso de la inteligencia (la capacidad, no la palabra), conlleva sí o sí a resultados positivos, al menos en el terreno de lo conocido, cuando el factor 'suerte' es más que una variable una constante, yo dejaría fuera la palabra inteligencia... ¿quién siendo sensato, llamaría buen pescador al que pesca en una pecera?.
#1398
La velocidad a lo que algo se actualice, no es un índice válido en ninguna parte (salvo para inútiles sin conocimiento sólido de lo que hablan), para señalar que 'es mejor' A que B.

De entrada, una actualización sugiere que hay fallos que corregir, luego algo sin fallos... tendría razonablemente un tiempo mucho largo para 'actualizar'...

Aunque se actualizara algo cada 30 minutos, sería acaso mejor solución que hacerlo cada 30 días o cada 300?. Rotundamente no (si las cosas se hacen bien, que hoy en día es algo de capa caída).

Hoy días las contínuas actualizaciones responden a 2 cuestiones...
A - Fallos a mansalva por inmadurez en la producción, repartido a partes iguales en causaa a: las prisas por sacar al mercado un producto, programadore sinexpertos (pero baratos).
B - La omnipresencia de la marca en la mente  del usuario, o simplemente la autopublicidad y el engaño haciendo creer a los ignorantes que con cada actualización se hace algo 'especial'... que en la mauyoría d elas veces será mentira. Puede incluso darse situaciones de actualizaciones, donde ni cambie absolutamente nada salvo el orden de los paquetes a 'reinstalar', con el único propósito de indicar a los usuarios que 'están en contínuo mivimiento y que 'cumplen' con la cita (fechas tontamente autoimpuestas).

En general el exceso de actualizaciones contínuas, lo único que de verdad refleja es la inmadurez de un producto, de sus directivos y puede que hasta de sus programadores. En fin, unos PU70S cansinos.
#1399
Programación General / Re: Matrices
3 Septiembre 2019, 01:37 AM
Una matriz de varias dimensiones, en realdad puedes verla como una matriz de una sola dimensión.

en la mayoría d elenguajes, las dimensiones de una matriz, viene ordenadas por filas no por columnas, luego es lo mismo que leer el texto de un libro, donde el número de línea vendría a ser la segunda dimensión, y cada palabra en la línea la primera dimensión (la primera a la derecha)...
Así un array como este: array(0-9, 0-3), en memoria estaría posicionado así:
0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3

Es decir ppuedes transformarlo en un array unidmensional simplemente recalculando las psoiciones con cada dimension, la primera (la de la derecha, siempre es correlativa), la siguiente, aumenta desde 0, hasta la cantidad que tiene precisamente la dimension previa, etc... si hay más dimensiones...

en cuanto a la cantidad de ítems del array unidimensional, será la multiplicación de los elementos de cada dimensón
Luego:



cantidad = arraybid1(cantidaddim1 * cantidaddim2 * ... )
memoria para arraunidim(0 a cantidad -1)

Bucle y 0 a 9
    Bucle x 0 a 3
        arrayunidim(n) = arraybid1(y, x) + arraybid2(y, x)
        n +=1
    siguiente
siguiente


En realidad es algo bastante simplón a lo que cualquiera con algo de lógica puede llegar... o simplemente repasando la documentación del lenguaje respecto d elos arrays.

La escuela del mínimo esfuerzo, hace programadores mediocres. Considera estudiar la documentación para tener una base sólida.
#1400
Foro Libre / Re: lanzo esta pregunta con respeto
30 Agosto 2019, 15:51 PM
Sí... el agua va permeando... con diferente resultado según el tiempo, porque cada grano ofrece una menor o mayor resistencia a la humedad.

Sin embargo son dos reacciones distintas. La temperatura y el tiempo aplicado, resulta en diferentes reacciones. Algunas sustancias (catalizadores) solo actúan si cierto calor consigue 'encenderlo'. El ejemplo claro (en la cocina) son las levaduras... donde además se pone de manifiesto la necesidad del tiempo.

En general, las legumbres se dejan a calo al menos 12 horas (típicamente toda la noche) y se les cambia el agua 2 o 3 veces, luego la cocción se realiza en poco tiempo. sin ello la cocción puede durar más del doble y la cocción no resulta ni completa ni homogénea (algunios granos estarán bien, y otros seguirán algo duros).

...pero vamos, para todo esto, puedes leerte un libro de cocina (si lo que te interesa son los alimentos), o mejor de química básica (si lo que te interesa es conocer las reacciones)...

Yo prefiero dejarte mejor este enlace:
https://es.wikipedia.org/wiki/Reacci%C3%B3n_qu%C3%ADmica