7 Arreglos
En las secciones anteriores se ha trabajado con tipos de datos primitivos o elementales (atomic types) que representan un único dato como un número entero o real, una letra o un valor booleano. Sin embargo, en muchas situaciones se requiere trabajar con una colección de valores que agrupados hacen parte de un todo. Los tipos de datos compuestos son estructuras de datos que permiten en una misma variable e identificador puede representar más de un dato o valor primitivo. Hay dos tipos de datos compuestos con los que ya hemos trabajado, uno de ellos son las cadenas, que son una secuencia de carácteres, y el otro son los números complejos, que están compuestos por dos números reales.
En esta sección se hará una revisión de los arreglos o arrays, tipos de datos compuestos y estructuras de datos básicas que incorporan una gran mayoría de lenguajes de programación. Un arreglo es una colección finita de datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y reciben un nombre común. Para referirse a un determinado elemento de un arreglo se deberá utilizar un índice, el cual especifica su posición relativa dentro del arreglo. Los arreglos podrán ser unidimensionales o multidimensionales, sin embargo, como la memoria de la computadora es lineal, un arreglo multidimensional tendrá que tener un equivalente linealizado (un arreglo unidimensional equivalente) para su almacenamiento en memoria.
Se espera que al finalizar las actividades de esta sección, el estudiante tenga clara la manera en que se hace uso de los arreglos en el diseño de un algoritmo bajo el paradigma de programación imperativa estructurada.
- Leer las secciones 7.1 a 7.6 del libro: L. Joyanes Aguilar, Fundamentos de programación: algoritmos, estructura de datos y objetos. McGraw Hill, 2020 [Online]. Disponible en http://www.ebooks7-24.com.ezproxy.unal.edu.co/?il=10409 o en http://www.ebooks7-24.com.ezproxy.biblored.gov.co/?il=10409
En sus propias palabras, explique lo que le transmitió y lo que le enseño cada parte de lo que leyó en el texto, incluya su discusión, reflexiones y conclusiones al respecto; exponga lo que no entendió e intente encontrar por su cuenta respuestas a las preguntas que le surgieron, para poder compartirlas en clase.
7.1 Arreglos unidimensionales
Ya se mencionó que un arreglo es una colección finita de datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y reciben un nombre común. En el caso de un arreglo unidimensional estamos hablando de una estructura de datos que tendría cierta equivalencia o similaridad con el objeto matemático: vector, ya que ambos corresponden a una secuencia de valores ordenados, que son indexados por un único índice asociado a una única dimensión. El tamaño de un arreglo unidimensional es la cantidad de elementos del arreglo en su única dimensión.
Las variables de tipo arreglo se deben declarar como cualquier otra variable. Sin embargo, cuando un arreglo se declara, adicionalmente se debe informar el tipo de dato de los elementos del arreglo. Es decir, la declaración se debe hacer en función de otro tipo de dato conocido o previamente definido. En pseudocódigo, la declaración de un arreglo unidimensional podría hacerse de la siguiente manera:
arreglo tipo_dato: nombre_arreglo[tamaño_arreglo], …
…
Dependiendo del lenguaje de programación, la indexación de los elementos del arreglo: nombre_arreglo va de 0 a tamaño_arreglo - 1 o de 1 a tamaño_arreglo. Usando los valores del índice, los elementos de un arreglo son igualmente accesibles y cualquiera de ellos puede ser seleccionado para lo que se desee hacer. Para seleccionar el elemento en la posición i del arreglo, se escribe: nombre_arreglo[i]. Para todo efecto práctico, cada elemento del arreglo: nombre_arreglo se comporta como si fuese una variable de tipo: tipo_dato.
Los elementos de un arreglo se pueden recorrer por completo, mediante el uso de una estructura iterativa y una variable que pase por todos los valores de la indexación. Por ejemplo:
mientras i < tamaño_arreglo hacer
escribir(nombre_arreglo[i])
i <- i + 1
fin_mientras
De la misma manera en que ocurre con los demás tipos de datos, un subprograma puede recibir variables de tipo arreglo o puede devolver una variable de tipo arreglo. La capacidad de devolver una variable de tipo arreglo permite a un subprograma devolver uno o más valores o datos de un mismo tipo de dato.
Especialmente en el caso de los arreglos, debemos tener claras las dos formas distintas en que un programa principal puede pasar / un subprograma puede recibir los parámetros, parámetros por valor y parámetros por referencia.
7.1.1 Paso de parámetros por valor
Paso por valor o paso por copia significa que cuando se llama un subprograma, este recibe una copia de los valores de los parámetros en un espacio de memoria aparte. Si el valor de un parámetro se modifica mediante una o más asignaciones o instrucciones del subprograma, el cambio solamente tiene efecto dentro del subprograma y no por fuera de él.
En varios lenguajes de programación, los parámetros que sean de un tipo de dato primitivo o elemental se suelen pasan por valor / copia.
7.1.2 Paso de parámetros por referencia
Paso por referencia o paso por dirección significa que cuando se llama un subprograma, este recibe la dirección de lo que se le halla dado a los parámetros. Esto quiere decir que las etiquetas, identificadores o nombres de los parámetros al interior del subprograma quedan apuntando a elementos con sus propios espacios de memoria que existen y se encuentran fuera del subprograma. Esto también quiere decir que cuando una o más asignaciones o instrucciones del subprograma modifican los valores de los parámetros, estas modificaciones tienen efecto en los espacios de memoria que existen y seguirán existiendo fuera del subprograma (las modificaciones dentro del subprograma tendrán efecto dentro y fuera del subprograma).
En varios lenguajes de programación, los parámetros que sean de tipo de dato arreglo (array) se suelen pasar por referencia / dirección.
7.2 Arreglos multidimensionales
Los arreglos multidimensionales son aquellos en donde cada elemento del arreglo está indexado por más de un índice (por más de un subíndice cuando los elementos del arreglo se denotan de la siguiente manera: a_{i,j,k,l}). La dimensión de un arreglo es la cantidad de índices distintos que tenga o use el arreglo para sus elementos (en a_{i,j,k,l} serían 4 dimensiones). Cada índice tendrá una cantidad máxima de valores posibles y esa cantidad se denomina el tamaño de cada dimensión (n, m, o y p si 0 \leq i < n, 0 \leq j < m, 0 \leq k < o, 0 \leq l < p). La cantidad total de elementos del arreglo es igual al producto de los tamaños de todas las dimensiones ((n)(m)(o)(p)). Cuando se habla del tamaño de un arreglo, se está refiriendo a los tamaños de cada dimensión (el arreglo con elementos a_{i,j,k,l} es de tamaño n \times m \times o \times p).
En pseudocódigo, la declaración de un arreglo multidimensional podría hacerse de la siguiente manera:
arreglo tipo_dato: nombre_arreglo[tam_dim1, tam_dim2, tam_dim3, …], …
…
Obviamente, un arreglo bidimensional necesita dos índices para poder identificar a cada elemento del arreglo (de la misma manera en que cada elemento de una matriz tiene asociado dos subíndices). La referencia a un determinado elemento del arreglo bidimensional requiere emplear un primer valor para el primer índice y un segundo valor para el segundo índice (si es de alguna utilidad, el primer valor se puede interpretar como un número de fila y el segundo como un número de columna, pero no se está obligado a seguir esta interpretación). Por ejemplo, nombre_arreglo[0, 0] hace referencia al elemento de la posición: 0, 0 (en la interpretación mencionada, el elemento de la fila 0 y la columna 0). Cada elemento del arreglo tendrá todos los beneficios y limitaciones de una variable de tipo: tipo_dato. Para seleccionar un elemento de un arreglo multidimensional bastaría hacer: nombre_arreglo[i, j, k, ...], para los valores i, j, k, etc. que correspondan a la posición del elemento deseado.
Para recorrer por completo los elementos de un arreglo bidimensional se requiere usar dos estructuras iterativas anidadas y dos variables que pasen por todos los valores de ambas indexaciones (una estructura y una variable por cada una de las dos dimensiones). Por ejemplo, fijando el valor para el primer índice mientras se recorren los valores del segundo índice (recorrido por filas, es decir se fija una fila mientras se recorren las columnas, para luego pasar a la siguiente fila, etc.):
mientras i < tam_dim1 hacer
j <- 0
mientras j < tam_dim2 hacer
escribir(nombre_arreglo[i, j])
j <- j + 1
fin_mientras
i <- i + 1
fin_mientras
o, fijando el valor para el segundo índice mientras se recorren los valores del primer índice (recorrido por columnas, es decir se fija una columna mientras se recorren las filas, para luego pasar a la siguiente columna, etc.):
mientras j < tam_dim2 hacer
i <- 0
mientras i < tam_dim1 hacer
escribir(nombre_arreglo[i, j])
i <- i + 1
fin_mientras
j <- j + 1
fin_mientras
Para recorrer los elementos de un arreglo de d dimensiones, se requieren d estructuras iterativas anidadas con sus respectivas d variables para los d índices.
7.3 Ejercicios
7.3.1 Parte A
Para los siguientes puntos:
- Implemente un único programa principal que se encargue de interactuar con el usuario y que le permita probar los subalgoritmos requeridos con los valores que desee.
- Los subalgoritmos deben recibir todo arreglo como un parámetro por referencia / dirección.
Realice un adecuado análisis y diseño de un subalgoritmo cuya única tarea sea:
Almacenar en todos los elementos un arreglo real
arregloRecibeDatosde tamañok, un mismo número realreal1(El subalgoritmo recibearregloRecibeDatos,real1yk. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para una variable de tipo arreglo, algo similar a lo que hacevariable = 1.2paravariablede tipo de dato real.Imprimir por pantalla los valores almacenados en cada uno de los elementos de un arreglo real
arregloTieneDatosde tamañok(El subalgoritmo recibearregloTieneDatosyk. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para una variable de tipo arreglo, algo similar a lo que haceescribir(variable)para unavariablede un tipo de dato elemental / primitivo.Almacenar en un arreglo real
arregloRecibeDatosde tamañok, los números reales que el usuario ingrese por teclado (El subalgoritmo recibearregloRecibeDatosyk. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para una variable de tipo arreglo, algo similar a lo que haceleer(variable)para unvariablede un tipo de dato elemental / primitivo.Almacenar en un arreglo real
arregloRecibeDatosde tamañok, los valores de cada uno de los elementos de otro arreglo realarregloTieneDatosdel mismo tamaño (El subalgoritmo recibearregloRecibeDatos,arregloTieneDatosyk. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para variables de tipo arreglo, algo similar a lo que hacevariable1 = variable2para unavariable1yvariable2de un tipo de dato elemental / primitivo.Almacenar en un arreglo real
arregloRecibeDatosde tamañok, una secuencia de valores generados a partir de: un número realvalInipara el valor inicial de la secuencia y un número realvalIncrempara el incremento (o decremento si es un número negativo) que se debe aplicar (El subalgoritmo recibearregloRecibeDatos,k,valIniyvalIncrem. El subalgoritmo no devuelve.). No es necesario un número real para el valor final de la secuencia, ya que el valor final queda totalmente determinado por el valor inicial, el incremento y el tamaño del arreglo. Si el valor inicial es 1.23, el incremento es -0.98 y el tamaño es 5, entonces al valor final no le queda de otra que ser -2.69 (Los valores que recibiríaarregloRecibeDatosserían 1.23, 0.25, -0.73, -1.71 y -2.69).Almacenar en un arreglo real
arregloResultadode tamañok, el inverso aditivo de cada uno de los elementos de otro arreglo realarregloTieneDatosdel mismo tamaño (El subalgoritmo recibearregloResultado,arregloTieneDatosyk. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para variables de tipo arreglo, algo similar a lo que haceresultado = -variablepararesultadoyvariablede tipo de dato real.Devolver la suma de todos los elementos de un arreglo real
arregloTieneDatosde tamañok(El subalgoritmo recibearregloTieneDatosyk. El subalgoritmo devuelve un número realrealResultado.).Almacenar en un arreglo real
arregloResultadode tamañok, la suma término a término de los elementos de dos arreglos realesarregloPrimerSumandoyarregloSegundoSumando, del mismo tamaño quearregloResultado(El subalgoritmo recibearregloResultado,arregloPrimerSumando,arregloSegundoSumandoyk. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultadode tamañok, la suma de un número realrealSumando1con cada uno de los elementos de un arreglo realarregloSumando2del mismo tamaño quearregloResultado(El subalgoritmo recibearregloResultado,realSumando1,arregloSumando2yk. El subalgoritmo no devuelve.). ¿Qué debo hacer si adicionalmente quiero un subalgoritmo que haga la suma de cada uno de los elementos de un arreglo realarregloSumando1con un número realrealSumando1(Este subalgoritmo recibearregloResultado,arregloSumando1,realSumando2yk. Este subalgoritmo no devuelve)?.Almacenar en un arreglo real
arregloResultadode tamañok, la suma acumulada de los elementos de otro arreglo realarregloTieneDatosdel mismo tamaño (El subalgoritmo recibearregloResultado,arregloTieneDatosyk. El subalgoritmo no devuelve.). Es decir, para un arreglo con los valores2.1,4.3,6.5y8.7(en ese orden), el arreglo resultante con la suma acumulada deberá tener los valores2.1,6.4,12.9y21.6(en ese orden).Devolver el producto de todos los elementos de un arreglo real
arregloTieneDatosde tamañok(El subalgoritmo recibearregloTieneDatosyk. El subalgoritmo devuelve un número realrealResultado.).Almacenar en un arreglo real
arregloResultadode tamañok, el producto término a término de los elementos de dos arreglos realesarregloPrimerFactoryarregloSegundoFactor, del mismo tamaño quearregloResultado(El subalgoritmo recibearregloResultado,arregloPrimerFactor,arregloSegundoFactoryk. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultadode tamañok, el producto de un número realrealFactor1con cada uno de los elementos de un arreglo realarregloFactor2del mismo tamaño quearregloResultado(El subalgoritmo recibe dos arreglos y un número real. El subalgoritmo no devuelve.). ¿Qué debo hacer si adicionalmente quiero un subalgoritmo que haga la suma de cada uno de los elementos de un arreglo realarregloFactor1con un número realrealFactor1(Este subalgoritmo recibearregloResultado,arregloFactor1,realFactor2yk. Este subalgoritmo no devuelve)?Almacenar en un arreglo real
arregloResultadode tamañok, el producto acumulado de los elementos de otro arreglo realarregloTieneDatosdel mismo tamaño (El subalgoritmo recibearregloResultado,arregloTieneDatosyk. El subalgoritmo no devuelve.). Es decir, para un arreglo con los valores2.0,3.0,5.0y7.0(en ese orden), el arreglo resultante con el producto acumulado deberá tener los valores2.0,6.0,30.0y210.0(en ese orden).Devolver el producto punto / escalar de los dos objetos matemáticos vector asociados a dos arreglos reales
arregloPrimerFactoryarregloSegundoFactordel mismo tamañok(El subalgoritmo recibearregloPrimerFactor,arregloSegundoFactoryk. El subalgoritmo devuelve un número realrealResultado.).Almacenar en un arreglo real
arregloResultadode tamañok, la diferencia término a término de los elementos de dos arreglosarregloMinuendoyarregloSustraendo, del mismo tamaño quearregloResultado. (El subalgoritmo recibearregloResultado,arregloMinuendo,arregloSustraendoyk. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultadode tamañok, la diferencia de cada uno de los elementos de un arreglo realarregloMinuendo, del mismo tamaño quearregloResultado, con un número realrealSustraendo. (El subalgoritmo recibearregloResultado,arregloMinuendo,realSustraendoyk. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultadode tamañok, la diferencia de un número realrealMinuendoy cada uno de los elementos de un arreglo realarregloSustraendodel mismo tamaño quearregloResultado(El subalgoritmo recibearregloResultado,realMinuendo,arregloSustraendoyk. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultadode tamañok-1, la diferencia “respecto a un (1) elemento hacia atrás” de otro arreglo realarregloTieneDatosde tamañok(El subalgoritmo recibearregloResultado,arregloTieneDatosyk. El subalgoritmo no devuelve.). Es decir, para un arreglo con los valores1.2,3.4,7.8y-9.0(en ese orden), el arreglo resultante con la diferencia “respecto a un (1) elemento hacia atrás” deberá tener los valores2.2,4.4y-16.8(en ese orden).Almacenar en un arreglo real
arregloResultadode tamañok, el cociente término a término de los elementos de dos arreglos realesarregloDividendoyarregloDivisor, del mismo tamaño quearregloResultado. (El subalgoritmo recibearregloResultado,arregloDividendo,arregloDivisoryk. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultadode tamañok, el cociente de cada uno de los elementos de un arreglo realarregloDividendo, del mismo tamaño quearregloResultado, con un número realrealDivisor. (El subalgoritmo recibearregloResultado,arregloDividendo,realDivisoryk. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultadode tamañok, el cociente de un número realrealDividendoy cada uno de los elementos de un arreglo realarregloDivisordel mismo tamaño quearregloResultado(El subalgoritmo recibearregloResultado,realDividendo,arregloDivisoryk. El subalgoritmo no devuelve.).Devolver el valor booleano que corresponda, dependiendo de si son iguales, los dos objetos matemáticos vector asociados a dos arreglos reales
arregloDatosVector1yarregloDatosVector2, ambos de tamañok(El subalgoritmo recibearregloDatosVector1,arregloVector2yk. El subalgoritmo devuelve un valor booleanoboolResultado.). Es decir, un subalgoritmo que hace para variables de tipo arreglo, algo similar a lo que hacevariable1 == variable2paravariable1yvariable2de un tipo de dato elemental / primitivo.Devolver el valor booleano que corresponda, dependiendo de si son diferentes, los dos objetos matemáticos vector asociados a dos arreglos reales
arregloDatosVector1yarregloDatosVector2, ambos de tamañok(El subalgoritmo recibearregloDatosVector1,arregloVector2yk. El subalgoritmo devuelve un valor booleanoboolResultado.). Es decir, un subalgoritmo que hace para variables de tipo arreglo, algo similar a lo que hacevariable1 <> variable2paravariable1yvariable2de un tipo de dato elemental / primitivo.Devolver la norma euclidiana al cuadrado del objeto matemático vector asociado a un arreglo real
arregloDatosVectorde tamañok(El subalgoritmo recibearregloDatosVectoryk. El subalgoritmo devuelve un número realrealResultado.).Devolver la distancia euclidiana al cuadrado entre los dos objetos matemáticos vector asociados a dos arreglos reales
arregloDatosVector1yarregloDatosVector2, ambos de tamañok(El subalgoritmo recibearregloDatosVector1,arregloVector2yk. El subalgoritmo devuelve un número realrealResultado.).
7.3.2 Parte B
Para los siguientes puntos:
- Los subalgoritmos deben recibir todo arreglo como un parámetro por referencia / dirección.
- Se debe poder trabajar y manipular los datos de lo que podría ser un arreglo multidimensional, sin ningún problema, mediante el uso de un arreglo unidimensional. Esto para mostrar que todo arreglo multidimensional internamente es una colección lineal de posiciones consecutivas de memoria (es decir, internamente es equivalente a un arreglo unidmensional).
Realice un adecuado análisis y diseño de un subalgoritmo cuya única tarea sea:
Almacenar en un arreglo (unidimensional) real
arregloRecibeDatosMatrizde tamañok = n*p, los elementos de un objeto matemático matriz de tamaño n \times m que el usuario ingrese por teclado (El subalgoritmo recibearregloRecibeDatosMatriz,nyp. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que almacena adecuadamente en un arreglo unidimensional, los datos de una matriz dada elemento a elemento por el usuario mediante el teclado (Ayuda: pida y almacene los datos de la matriz de manera consecutiva por columnas).Imprimir por pantalla los valores almacenados en cada uno de los elementos de un arreglo (unidimensional) real
arregloTieneDatosMatrizde tamañok = n*pque tiene almacenados adecuadamente por columnas los datos de un objeto matemático matriz de tamaño n \times p (El subalgoritmo recibearregloTieneDatosMatriz,nyp. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que imprima adecuadamente el contenido de un arreglo unidimensional, que tiene almacenados los datos de una matriz, que por ejemplo se recibió usando el subalgoritmo del punto anterior.Devolver el elemento de la posición
i,jde los datos de un objeto matemático matriz de tamaño n \times p, que fue almacenado adecuadamente por columnas, en un arreglo (unidimensional) realarregloTieneDatosMatrizde tamañok = n*p(El subalgoritmo recibearregloTieneDatosMatriz,i,j,nyp. El subalgoritmo devuelve un número realrealElemento.). Es decir, un subalgoritmo que devuelve un elemento de una matriz que está almacenada en un arreglo unidimensional.Almacenar en un arreglo (unidimensional) real
arregloMatrizResultadode tamañok = n*p, los datos de la matriz resultado del producto término a término entre dos matrices almacenadas en los arreglos unidimensionales:arregloMatrizPrimerFactoryarregloMatrizSegundoFactordel mismo tamaño quearregloMatrizResultado(El subalgoritmo recibearregloMatrizResultado,arregloMatrizFactor1,arregloMatrizFactor2,nyp. El subalgoritmo no devuelve.). ¿hay varias potenciales soluciones para el subalgoritmo solicitado? ¿entre ellas cuál sería la más eficiente? ¿es posible aprovechar el subalgoritmo que hace el producto término a término de los elementos de dos arreglos reales, solicitado en un ejercicio de la Parte A?Almacenar en un arreglo (unidimensional) real
arregloMatrizResultadode tamañok = n*p, los datos de la matriz resultado del producto matricial entre dos matrices almacenadas en los arreglos unidimensionales:arregloMatriz1de tamañok1 = n*myarregloMatriz2de tamañok2 = m*p(El subalgoritmo recibearregloMatrizResultado,arregloMatrizFactor1,arregloMatrizFactor2,n,myp. El subalgoritmo no devuelve.).
7.3.3 Parte C
“Monte Carlo methods, or Monte Carlo experiments, are a broad class of computational algorithms that rely on repeated random sampling to obtain numerical results. The underlying concept is to use randomness to solve problems that might be deterministic in principle. They are often used in physical and mathematical problems and are most useful when it is difficult or impossible to use other approaches. Monte Carlo methods are mainly used in three problem classes: optimization, numerical integration, and generating draws from a probability distribution.”
Monte Carlo method - Wikipedia
Para los siguientes puntos:
Los subalgoritmos deben recibir todo arreglo como un parámetro por referencia / dirección.
Consultar:
Blanco Castañeda, Liliana. (2004). Probabilidad. Editorial UN.
Capítulo 8: Simulaciones básicas 8.1: Generación de números aleatorios
https://repositorio.unal.edu.co/bitstream/handle/unal/53471/9587014499.PDF?sequence=2y
Press, W. H., William, H., Teukolsky, S. A., Saul, A., Vetterling, W. T., & Flannery, B. P. (2007). Numerical recipes 3rd edition: The art of scientific computing. Cambridge university press.
Chapter 7: Random Numbers
7.0: Introduction, 7.1: Uniform Deviates
http://numerical.recipes/book/book.html
Realice un adecuado análisis y diseño de un subalgoritmo cuya única tarea sea:
Almacenar en un arreglo entero
arregloResultadode tamañok, una secuencia de k valores pseudoaleatorios enteros, generados mediante el método denominado linear congruential generator (método que tiene una fórmula de la forma(multiplier * seed + summand) mod modulus). El subalgoritmo recibearregloResultado,seed,multiplier,summand,modulus,k. El subalgoritmo no devuelve.Almacenar en un arreglo real
arregloResultadode tamañok, una secuencia de k valores pseudoaleatorios enteros entre dos números enteros dadosentero1yentero2, añadiendo un paso más a la generación de valores enteros con el método: linear congruential generator (método que tiene una fórmula de la forma(multiplier * seed + summand) mod modulus). El subalgoritmo recibearregloResultado,entero1,entero2,seed,multiplier,summand,modulus,k. El subalgoritmo no devuelve. Si ya tengo un arreglo con valores pseudoaleatorios enteros generados, ¿puedo transformar esos valores que ya tengo, para obtener un arreglo con valores pseudoaleatorios enteros entre dos números enteros dadosentero1yentero2?Almacenar en un arreglo real
arregloResultadode tamañok, una secuencia de k valores pseudoaleatorios reales entre 0 y 1, añadiendo un paso más a la generación de valores enteros con el método: linear congruential generator (método que tiene una fórmula de la forma(multiplier * seed + summand) mod modulus). El subalgoritmo recibearregloResultado,seed,multiplier,summand,modulus,k. El subalgoritmo no devuelve. Si ya tengo un arreglo con valores pseudoaleatorios enteros generados, ¿puedo transformar esos valores que ya tengo, para obtener un arreglo con valores pseudoaleatorios reales entre 0 y 1?Almacenar en un arreglo real
arregloResultadode tamañok, una secuencia de k valores pseudoaleatorios reales entre dos números reales dadosreal1yreal2, añadiendo un par de pasos más a la generación de valores enteros con el método: linear congruential generator (método que tiene una fórmula de la forma(multiplier * seed + summand) mod modulus). El subalgoritmo recibearregloResultado,real1,real2,seed,multiplier,summand,modulus,k. El subalgoritmo no devuelve. ¿Si ya tengo un arreglo con valores pseudoaleatorios enteros generados, ¿puedo transformar esos valores que ya tengo, para obtener un arreglo con valores pseudoaleatorios enteros entre reales dadosreal1yreal2?