Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Jarol Salazar en 26 de Septiembre 2019, 02:18
-
Buenas!
Soy yo de nuevo, esta vez es una duda sobre matrices, nos dejaron un laboratorio donde tenemos que hacer una "escalera" con las matrices.
Es algo tal que así:
1
12
123
1234
Con "n" cantidad de valores, quisiera que me ayudaran con el código.
No hay nada hecho por eso no agrego el código (Obviamente xD)
Muchas gracias.
-
Te propongo esta solución.
Hay comentarios explicando.
Para rellenar la matriz uso un while y un for anidado. Es lo más lioso del programa, de hecho, no me ha salido a la primera.
Yo empiezo a rellenar por abajo, desde 1 hasta n. Bueno, en realidad va desde 0 hasta n-1, pero le sumo 1 antes de guardar el valor en la matriz.
Tras rellenar la última columna, n se decrementa y así repetimos el proceso en la penúltima columna, solo que ahora va de 1 hasta n-1.
Luego de 1 hasta n-2....
Así hasta llegar a la primera fila, donde solo guardaremos un 1.
El resto de posiciones se quedan con valor 0. Al imprimir en pantalla la matriz, evitamos imprimir los valores 0, así da efecto de escalera.
public class Escalera {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
//Pedimos cantidad de valores
int n;
System.out.print("¿Cuántos valores?: ");
n = teclado.nextInt();
//Creamos matriz
int[][] escalera = new int[n][n];
/*
* Llenamos matriz. Podemos empezar desde abajo
* con un bucle hasta n.
* Cada iteracion n se reduce hasta llegar a 0
* para así recorrer todas las filas desde n-1 hasta 0.
* Para recorrer las columnas usaremos otro varaible
* de un bucle for, que habrá que aumentar en 1 el valor
* de n en cada iteración para que recorra correctamente
* todas las columnas.
*/
while (n >= 0) {
n--;
for (int j = 0; j < n+1; j++)
escalera[n][j] = j+1;
}
/*
* Mostramos la matriz.
* Evitaremos imprimir los valores 0
* que no han recibido valores.
* Esto dará sensación de escalera.
*/
for (int j = 0; j < escalera.length; j++) {
for (int z = 0; z < escalera[0].length; z++)
if (escalera[j][z] != 0)
System.out.print(escalera[j][z]);
System.out.println();
}
teclado.close();
}
}
En pantalla tenemos este resultado:
¿Cuántos valores?: 5
1
12
123
1234
12345
-
Hola, buenas, espero que todos esten muy bien.
La siguiente informacion que les dare, si es de matrices pero es de matrices dispersas.
el ejercicio esta en UML( lenguaje de modelado unificado), y este tiene algunas especificaciones:
Tenga en cuenta la siguientes clases para todos los puntos del taller.
clase Tripletas
privado:
real: Mat[ ][ ]
entero: N,M
publico:
Tripletas ( entero: x )
real: obtenerDato( entero: i, j)
asignarDato(entero: i, j; real: d)
real :promedio()
entero:mayor()
entero: promedioPares()
entero: vecesMayor()
entero:catidadPares()
fin clase
Tripletas:: Tripletas (entero x)
N =x
M = 3
Mat = nuevo real[ N ][ M]
fin metodo
entero:Tripletas::obtenerDato(entero: i,j)
devolver ( Mat[ i ][ j ] )
fin metodo
Tripletas::asignarDato(entero: i, j: real n)
Mat[ i ][ j ] = n
fin metodo
Asuma que se tiene un objeto de la clase Tripletas con N = 12 y la matriz Mat[ ][] que se muestra a continuación.
Hacer la prueba de escritorio al método insertar con los parámetros 2, 3, 10.
lógico:Tripleta:: insertar (entero:f,c; real: d )
lógico: respuesta= falso
entero: i = 2, j , du = Mat[1] [3]+1
mientrar i <=du and Mat[ i ] [ 1 ]< f haga
i = i+1
fin mientras
mientras i <=du and Mat[ i ][ 1 ]= f and Mat[ i ][ 2 ]< c and haga
i = i+1
fin mientras
si i < N –1 entonces
respuesta = verdadero
si i > du entonces
Mat[i+1][1]=Mat[1]
Mat[i+1][2]=Mat[2]
Mat[ i ][1]= f
Mat[ i ][2]= c
Mat[ i ][3]= d
si no
para j = du + 1 hasta i , -1
Mat[ j +1][1]=Mat[ j ][1]
Mat[ j +1][2]=Mat[ j ][2]
Mat[ j +1][3]=Mat[ j ][3]
fin para
Mat[ i ][1]= f
Mat[ i ][2]= c
Mat[ i ][3]= d
fin si
Mat[ 1 ][3]= Mat[ 1 ][3] +1
finsi
devolver( respuesta)
fin metodo
Utilizando la misma matriz del punto anterior realice la prueba de escritorio a los algoritmos mostrados.
Parte 1
real:Tripleta:: promedio ()
entero: i , Z
entero: du = Mat[1] [3]+1
real suma = 0, prom
para i = 2 hasta du ,1
suma = suma + Mat[ i ][3]
fin para
Z =Mat[1][1]*Mat[1][2]
prom = sum/Z
devolver( prom)
fin metodo
i =
Z=
du=
¿que hace el método?
Parte 2
Tripleta:: MMMM ()
entero: i = 2, f, k
entero: du = Mat[1] [3]+1
mientrar i <=du haga
f =Mat[ i ][1]
k = Mat[ i ][3]
mientrar i <=du and Mat[ i ][1]= f haga
si Mat[ i ][3] > k entonces
k = Mat[ i ][3]
fin si
i = i + 1
fin mientras
mostrar( f , k )
fin mientras
fin metodo
i=
f=
k=
du=
mostrar=
¿que hace el método?
implementarle a la clase Tripletas cada uno de los siguientes métodos.
(tenga en cuenta los ceros de la matriz original)
1. devolver el promedio de datos pares de la matriz.
2. devolver la cantidad de datos impares.
3. mostrar la suma de datos de cada columna.
4. mostrar el promedio de cada fila.
5. mostrar las filas que tienen el mayor promedio.
6. eliminar una tripleta, se recibe la fila, columna y dato.
7. devolver las veces que se presenta el dato mayor.
8. mostrar el mayor de los datos impares si no hay notificarlo.
9. mostrar el menor de los dato pares que tienen suma de dígitos mayor a 10, si no hay notificarlo.
10. mostrar los datos que tienen la mayor suma de dígitos.
11. mostrar los datos que tienen la mayor cantidad de dígitos pares.
12. mostrar el porcentaje de dígitos impares de cada dato.
13. mostrar la suma de dígitos de cada dato.
14. mostrar la suma de dígitos de todos los números de la matriz.
15. mostrar cada dato de la matriz y las veces que se presenta (no repetir mensajes).
se que es un taller largo pero enserio necesito de su ayuda no se que paso seguir. Abjunte el archivo en zip de lo que llevo, espero me ayuden y de antemano muchas gracias por el apoyo.