Informática, pregunta formulada por gustarap10, hace 1 año

Realice un programa que genere una matriz cuadrada de números aleatorios de orden “m” en un rango de números determinado por el usuario, dicha matriz debe descomponerla en dos vectores, uno de números mayor que “n” y otro de números menores que “n”, donde “n”, igualmente lo determina el usuario al igual que la definición de la impresión ascendente o descendente de los vectores. Debe también informar al usuario la cantidad de números mayores y menores a

Respuestas a la pregunta

Contestado por LeonardoDY
2

En este programa faltó especificar el lenguaje, pero sigue el código en lenguaje C ya que es uno de los más utilizados para la programación en el nivel requerido por el problema

Empezamos diciendo que M es un tipo de datos fijo, ya que la programación no permite variar el tamaño de los arreglos (se puede armar una estructura de tamaño variable utilizando listas dinámicas pero complejizaría mucho el problema).

#define M //Orden de la Matriz.

int main(void)

{

int n; //Referencia

int i, j,cont1=0, cont2=0; //Variables auxiliares

int inferior, superior; //Limites de rango definidos por el usuario.

int mat[N][N]; //Matriz a llenar

int vecmenor[N];

int vecmayor[N];//Vectores para dividir los valores.

char ud;

printf ("Ingresar la referencia de partición: ");

scanf("%d",&n);//Acá solicio el número N;

printf ("Ingresar limite inferior: ");

scanf("%d",&inferior);//Acá solicio el limite inferior;

printf ("Ingresar limite superior: ");

scanf("%d",&superior);//Acá solicio el limite superior;

//empiezo a llenar la matriz con números aleatorios

for(i=0;i<N;i++)

for(j=0;j<N;j++)

mat[N][N]=random(superior)+inferior;//Random() genera enteros aleatorios entre o y el argumento.

//Ahora divido los valores.

for(i=0;i<N;i++)

for(j=0;j<N;j++)

if(mat[N][N]>n)

   vecmayor[cont1++]=mat[N][N];//Pongo los mayores a n

else

   vecmenor[cont2++]=mat[N][N];//Pongo los menores a n

printf("Hay %d números mayores a n y %d números menores o iguales a n\n", cont1, cont2);

printf("¿Mostrar en forma (a)scendente o (d)escendente?:");

scanf("%c", &ud);//Elijo el orden ascendente o descendente.

if(toupper(ud)=='A'){

printf(vector de menores a n:);

for(i =0;i<n;i++)

printf("%d, ",vecmenor[N]);

printf(vector de mayores a n:);

for(i =0;i<n;i++)

printf("%d, ",vecmayor[N]);

}

if(toupper(ud)=='D'){

printf(vector de menores a n:);

for(i =0;i<n;i++)

printf("%d, ",vecmenor[N]);

printf(vector de mayores a n:);

for(i =0;i<n;i++)

printf("%d, ",vecmayor[N]);

}

}


gustarap10: Me lo podrias explicar en Matlab o scilab
LeonardoDY: Sí, en Matlab la dinámica es parecida ya que se basan en matrices, y números aleatorios, si bien cambian algunas cosas:
LeonardoDY: Para el generador de números aleatorios, se usa primero el comando rng(0, 'twister'), con esto seteas el tipo de distribución que es el tipo y semilla predeterminados. Luego ejecutando X=rand(m) (de esta función existen otras variantes que devuelven un único número o un vector también), con el comando que acabamos de usar matlab ya devuelve la matriz de rango mxm de números aleatorios pero entre 0 y 1.
LeonardoDY: Para ajustarlo al rango lo qeu hacemos es primero multiplicarla por el ancho de ese rango (superior - Inferior) y sumarle el límite inferior.
X2 = X.(Superior - Inferior) + Inferior.
Tanto n, como Superior o Inferior los vas a inicializar en el script. Después es comparar con el doble lazo for anidado:

for i:m
for j:m
if (X2(i)(j)>n)
mayores(end+1) = X2(i)(j);
elsif(X2(i)(j) menores(end+1) = X2(i)(j);
end
end
end,
Otras preguntas