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
arregloRecibeDatos
de tamañok
, un mismo número realreal1
(El subalgoritmo recibearregloRecibeDatos
,real1
yk
. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para una variable de tipo arreglo, algo similar a lo que hacevariable = 1.2
paravariable
de tipo de dato real.Imprimir por pantalla los valores almacenados en cada uno de los elementos de un arreglo real
arregloTieneDatos
de tamañok
(El subalgoritmo recibearregloTieneDatos
yk
. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para una variable de tipo arreglo, algo similar a lo que haceescribir(variable)
para unavariable
de un tipo de dato elemental / primitivo.Almacenar en un arreglo real
arregloRecibeDatos
de tamañok
, los números reales que el usuario ingrese por teclado (El subalgoritmo recibearregloRecibeDatos
yk
. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para una variable de tipo arreglo, algo similar a lo que haceleer(variable)
para unvariable
de un tipo de dato elemental / primitivo.Almacenar en un arreglo real
arregloRecibeDatos
de tamañok
, los valores de cada uno de los elementos de otro arreglo realarregloTieneDatos
del mismo tamaño (El subalgoritmo recibearregloRecibeDatos
,arregloTieneDatos
yk
. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para variables de tipo arreglo, algo similar a lo que hacevariable1 = variable2
para unavariable1
yvariable2
de un tipo de dato elemental / primitivo.Almacenar en un arreglo real
arregloRecibeDatos
de tamañok
, una secuencia de valores generados a partir de: un número realvalIni
para el valor inicial de la secuencia y un número realvalIncrem
para el incremento (o decremento si es un número negativo) que se debe aplicar (El subalgoritmo recibearregloRecibeDatos
,k
,valIni
yvalIncrem
. 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íaarregloRecibeDatos
serían 1.23, 0.25, -0.73, -1.71 y -2.69).Almacenar en un arreglo real
arregloResultado
de tamañok
, el inverso aditivo de cada uno de los elementos de otro arreglo realarregloTieneDatos
del mismo tamaño (El subalgoritmo recibearregloResultado
,arregloTieneDatos
yk
. El subalgoritmo no devuelve.). Es decir, un subalgoritmo que hace para variables de tipo arreglo, algo similar a lo que haceresultado = -variable
pararesultado
yvariable
de tipo de dato real.Devolver la suma de todos los elementos de un arreglo real
arregloTieneDatos
de tamañok
(El subalgoritmo recibearregloTieneDatos
yk
. El subalgoritmo devuelve un número realrealResultado
.).Almacenar en un arreglo real
arregloResultado
de tamañok
, la suma término a término de los elementos de dos arreglos realesarregloPrimerSumando
yarregloSegundoSumando
, del mismo tamaño quearregloResultado
(El subalgoritmo recibearregloResultado
,arregloPrimerSumando
,arregloSegundoSumando
yk
. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultado
de tamañok
, la suma de un número realrealSumando1
con cada uno de los elementos de un arreglo realarregloSumando2
del mismo tamaño quearregloResultado
(El subalgoritmo recibearregloResultado
,realSumando1
,arregloSumando2
yk
. 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 realarregloSumando1
con un número realrealSumando1
(Este subalgoritmo recibearregloResultado
,arregloSumando1
,realSumando2
yk
. Este subalgoritmo no devuelve)?.Almacenar en un arreglo real
arregloResultado
de tamañok
, la suma acumulada de los elementos de otro arreglo realarregloTieneDatos
del mismo tamaño (El subalgoritmo recibearregloResultado
,arregloTieneDatos
yk
. El subalgoritmo no devuelve.). Es decir, para un arreglo con los valores2.1
,4.3
,6.5
y8.7
(en ese orden), el arreglo resultante con la suma acumulada deberá tener los valores2.1
,6.4
,12.9
y21.6
(en ese orden).Devolver el producto de todos los elementos de un arreglo real
arregloTieneDatos
de tamañok
(El subalgoritmo recibearregloTieneDatos
yk
. El subalgoritmo devuelve un número realrealResultado
.).Almacenar en un arreglo real
arregloResultado
de tamañok
, el producto término a término de los elementos de dos arreglos realesarregloPrimerFactor
yarregloSegundoFactor
, del mismo tamaño quearregloResultado
(El subalgoritmo recibearregloResultado
,arregloPrimerFactor
,arregloSegundoFactor
yk
. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultado
de tamañok
, el producto de un número realrealFactor1
con cada uno de los elementos de un arreglo realarregloFactor2
del 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 realarregloFactor1
con un número realrealFactor1
(Este subalgoritmo recibearregloResultado
,arregloFactor1
,realFactor2
yk
. Este subalgoritmo no devuelve)?Almacenar en un arreglo real
arregloResultado
de tamañok
, el producto acumulado de los elementos de otro arreglo realarregloTieneDatos
del mismo tamaño (El subalgoritmo recibearregloResultado
,arregloTieneDatos
yk
. El subalgoritmo no devuelve.). Es decir, para un arreglo con los valores2.0
,3.0
,5.0
y7.0
(en ese orden), el arreglo resultante con el producto acumulado deberá tener los valores2.0
,6.0
,30.0
y210.0
(en ese orden).Devolver el producto punto / escalar de los dos objetos matemáticos vector asociados a dos arreglos reales
arregloPrimerFactor
yarregloSegundoFactor
del mismo tamañok
(El subalgoritmo recibearregloPrimerFactor
,arregloSegundoFactor
yk
. El subalgoritmo devuelve un número realrealResultado
.).Almacenar en un arreglo real
arregloResultado
de tamañok
, la diferencia término a término de los elementos de dos arreglosarregloMinuendo
yarregloSustraendo
, del mismo tamaño quearregloResultado
. (El subalgoritmo recibearregloResultado
,arregloMinuendo
,arregloSustraendo
yk
. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultado
de 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
,realSustraendo
yk
. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultado
de tamañok
, la diferencia de un número realrealMinuendo
y cada uno de los elementos de un arreglo realarregloSustraendo
del mismo tamaño quearregloResultado
(El subalgoritmo recibearregloResultado
,realMinuendo
,arregloSustraendo
yk
. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultado
de tamañok-1
, la diferencia “respecto a un (1) elemento hacia atrás” de otro arreglo realarregloTieneDatos
de tamañok
(El subalgoritmo recibearregloResultado
,arregloTieneDatos
yk
. El subalgoritmo no devuelve.). Es decir, para un arreglo con los valores1.2
,3.4
,7.8
y-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.4
y-16.8
(en ese orden).Almacenar en un arreglo real
arregloResultado
de tamañok
, el cociente término a término de los elementos de dos arreglos realesarregloDividendo
yarregloDivisor
, del mismo tamaño quearregloResultado
. (El subalgoritmo recibearregloResultado
,arregloDividendo
,arregloDivisor
yk
. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultado
de 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
,realDivisor
yk
. El subalgoritmo no devuelve.).Almacenar en un arreglo real
arregloResultado
de tamañok
, el cociente de un número realrealDividendo
y cada uno de los elementos de un arreglo realarregloDivisor
del mismo tamaño quearregloResultado
(El subalgoritmo recibearregloResultado
,realDividendo
,arregloDivisor
yk
. 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
arregloDatosVector1
yarregloDatosVector2
, ambos de tamañok
(El subalgoritmo recibearregloDatosVector1
,arregloVector2
yk
. El subalgoritmo devuelve un valor booleanoboolResultado
.). Es decir, un subalgoritmo que hace para variables de tipo arreglo, algo similar a lo que hacevariable1 == variable2
paravariable1
yvariable2
de 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
arregloDatosVector1
yarregloDatosVector2
, ambos de tamañok
(El subalgoritmo recibearregloDatosVector1
,arregloVector2
yk
. El subalgoritmo devuelve un valor booleanoboolResultado
.). Es decir, un subalgoritmo que hace para variables de tipo arreglo, algo similar a lo que hacevariable1 <> variable2
paravariable1
yvariable2
de un tipo de dato elemental / primitivo.Devolver la norma euclidiana al cuadrado del objeto matemático vector asociado a un arreglo real
arregloDatosVector
de tamañok
(El subalgoritmo recibearregloDatosVector
yk
. 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
arregloDatosVector1
yarregloDatosVector2
, ambos de tamañok
(El subalgoritmo recibearregloDatosVector1
,arregloVector2
yk
. 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
arregloRecibeDatosMatriz
de 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
,n
yp
. 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
arregloTieneDatosMatriz
de tamañok = n*p
que tiene almacenados adecuadamente por columnas los datos de un objeto matemático matriz de tamaño n \times p (El subalgoritmo recibearregloTieneDatosMatriz
,n
yp
. 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
,j
de los datos de un objeto matemático matriz de tamaño n \times p, que fue almacenado adecuadamente por columnas, en un arreglo (unidimensional) realarregloTieneDatosMatriz
de tamañok = n*p
(El subalgoritmo recibearregloTieneDatosMatriz
,i
,j
,n
yp
. 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
arregloMatrizResultado
de 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:arregloMatrizPrimerFactor
yarregloMatrizSegundoFactor
del mismo tamaño quearregloMatrizResultado
(El subalgoritmo recibearregloMatrizResultado
,arregloMatrizFactor1
,arregloMatrizFactor2
,n
yp
. 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
arregloMatrizResultado
de tamañok = n*p
, los datos de la matriz resultado del producto matricial entre dos matrices almacenadas en los arreglos unidimensionales:arregloMatriz1
de tamañok1 = n*m
yarregloMatriz2
de tamañok2 = m*p
(El subalgoritmo recibearregloMatrizResultado
,arregloMatrizFactor1
,arregloMatrizFactor2
,n
,m
yp
. 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
arregloResultado
de 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
arregloResultado
de tamañok
, una secuencia de k valores pseudoaleatorios enteros entre dos números enteros dadosentero1
yentero2
, 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 dadosentero1
yentero2
?Almacenar en un arreglo real
arregloResultado
de 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
arregloResultado
de tamañok
, una secuencia de k valores pseudoaleatorios reales entre dos números reales dadosreal1
yreal2
, 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 dadosreal1
yreal2
?