Para segunda evaluación.................... Ejercicios de matrices
1.- Crear una matriz de 3×3 con los números del 1 al 9. Mostrar por pantalla, tal como aparece en la matriz.
public
class
Ejercicio_1 {
public
static
void
main(String[] args) {
int
matriz[][]=
new
int
[
3
][
3
];
//i = filas y j = columnas
for
(
int
i=
0
;i<matriz.length;i++){
for
(
int
j=
0
;j<matriz[
0
].length;j++){
matriz[i][j]=(i*matriz.length)+(j+
1
);
System.out.print(matriz[i][j]+
" "
);
}
System.out.println(
""
);
}
}
}
2.-
Crear una matriz de 5 filas y n columnas (se pide al usuario). Rellenarlo con números aleatorios entre 0 y 10.import
java.util.Scanner;
public
class
Ejercicio_2 {
public
static
void
main(String[] args) {
Scanner sn=
new
Scanner(System.in);
System.out.println(
"Escriba un numero de columnas"
);
int
columnas=sn.nextInt();
int
matriz[][]=
new
int
[
5
][columnas];
for
(
int
i=
0
;i<matriz.length;i++){
for
(
int
j=
0
;j<matriz[
0
].length;j++){
matriz[i][j]=generaNumAleatorio(
0
,
9
);
System.out.print(matriz[i][j]+
" "
);
}
System.out.println(
""
);
}
}
public
static
int
generaNumAleatorio(
int
minimo,
int
maximo){
return
(
int
)Math.floor(Math.random()*(minimo-(maximo+
1
))+(maximo+
1
));
}
}
3.-
Crear dos matrices de nxn y sumar sus valores, los resultados se deben almacenar en otra matriz.import
java.util.Scanner;
public
class
Ejercicio_3 {
public
static
void
main(String[] args) {
Scanner sn=
new
Scanner(System.in);
System.out.println(
"Escribe un tamaño"
);
int
tamanio=sn.nextInt();
int
matriz1[][]=
new
int
[tamanio][tamanio];
int
matriz2[][]=
new
int
[tamanio][tamanio];
int
resultado[][]=
new
int
[tamanio][tamanio];
for
(
int
i=
0
;i<matriz1.length;i++){
for
(
int
j=
0
;j<matriz1[
0
].length;j++){
System.out.println(
"Escriba el valor para la fila "
+i+
" y columna "
+j+
" de la matriz 1"
);
matriz1[i][j]=sn.nextInt();
System.out.println(
"Escriba el valor para la fila "
+i+
" y columna "
+j+
" de la matriz 2"
);
matriz2[i][j]=sn.nextInt();
resultado[i][j]=matriz1[i][j]+matriz2[i][j];
}
}
System.out.println(
"Matriz 1"
);
muestraMatriz(matriz1);
System.out.println(
"Matriz 2"
);
muestraMatriz(matriz2);
System.out.println(
"Matriz resultante"
);
muestraMatriz(resultado);
}
public
static
void
muestraMatriz(
int
[][] matriz){
for
(
int
i=
0
;i<matriz.length;i++){
for
(
int
j=
0
;j<matriz[
0
].length;j++){
System.out.print(matriz[i][j]+
" "
);
}
System.out.println(
""
);
}
}
}
4.-
Nos piden que implementemos el software para una máquina expendedora de golosinas.Cada golosina tiene un nombre y un precio para ahorrar tiempo, os paso los datos que tendrá a continuación (copiar y pegar):
String[][] nombresGolosinas = {
{
"KitKat"
,
"Chicles de fresa"
,
"Lacasitos"
,
"Palotes"
},
{
"Kinder Bueno"
,
"Bolsa variada Haribo"
,
"Chetoos"
,
"Twix"
},
{
"Kinder Bueno"
,
"M&M'S"
,
"Papa Delta"
,
"Chicles de menta"
},
{
"Lacasitos"
,
"Crunch"
,
"Milkybar"
,
"KitKat"
}
};
double
[][] precio = {
{
1.1
,
0.8
,
1.5
,
0.9
},
{
1.8
,
1
,
1.2
,
1
},
{
1.8
,
1.3
,
1.2
,
0.8
},
{
1.5
,
1.1
,
1.1
,
1.1
}
};
También tendrán una cantidad inicial, que en principio será de 5.
Tendremos un pequeño menú con las siguientes opciones:
- Pedir golosina: pedirá la posición de la golosina que quiera. Esta máquina tiene golosinas en cada posición, identificados por su fila y columna, que será lo que introduzca el usuario al pedir una golosina, por ejemplo si el usuario teclea 20 significa que está pidiendo la golosina que está en la fila 2 columna 0. Cuando no haya más golosinas se le indicará al usuario. Solo puede pedir una golosina y supondremos que el usuario siempre tiene dinero al elegir. Recuerda de disminuir la cantidad la pedir.
- Mostrar golosinas: mostrara todas las golosinas disponibles. Mostrará el código que debe introducir el usuario, el nombre y el precio. La cantidad no se mostrará.
- Rellenar golosinas: esta es una función exclusiva de un técnico por lo que nos pedirá una contraseña, si el usuario escribe “MaquinaExpendedora2017” le pedirá la posición de la golosina y la cantidad.
- Apagar maquina: sale del programa, antes de salir mostrara las ventas totales durante la ejecución del programa.
El programa debe ser modularizado, es decir, todas las funciones que veas que sean necesarias debes crearlas, así como todas aquellas acciones que veas que se repitan. Piensa que funciones pueden ser.
Las funciones deben ser lo más genéricas posibles.
No se deben utilizar POO para este ejercicio.
import
java.util.InputMismatchException;
import
java.util.Scanner;
public
class
Ejercicio_matrices_DDR_08 {
//Creamos un scanner estatico para
static
Scanner sn =
new
Scanner(System.in);
public
static
void
main(String[] args) {
//Llamo al método menu
menu();
}
/**
* Muestra el menu, solicita la opcion y las ejecuta
*/
public
static
void
menu() {
//Nombre de las golosinas
String[][] nombresGolosinas = {
{
"KitKat"
,
"Chicles de fresa"
,
"Lacasitos"
,
"Palotes"
},
{
"Kinder Bueno"
,
"Bolsa variada Haribo"
,
"Chetoos"
,
"Twix"
},
{
"Kinder Bueno"
,
"M&M'S"
,
"Papa Delta"
,
"Chicles de menta"
},
{
"Lacasitos"
,
"Crunch"
,
"Milkybar"
,
"KitKat"
}
};
//Precio de las golosinas
double
[][] precio = {
{
1.1
,
0.8
,
1.5
,
0.9
},
{
1.8
,
1
,
1.2
,
1
},
{
1.8
,
1.3
,
1.2
,
0.8
},
{
1.5
,
1.1
,
1.1
,
1.1
}
};
int
cantidad[][] =
new
int
[
4
][
4
];
//Relleno la matriz con 5
rellenarMatriz(cantidad,
5
);
//Indica si salimos o no
boolean
salir =
false
;
int
opcion, fila, columna, cantidadNueva;
String pos, password;
double
ventaTotales =
0
;
//Bucle para pedir las opciones hasta que elijamos salir
while
(!salir) {
//opciones
System.out.println(
"1. Pedir golosina"
);
System.out.println(
"2. Mostrar golosinas"
);
System.out.println(
"3. Rellenar golosinas"
);
System.out.println(
"4. Apagar maquina"
);
try
{
//Pide una opcion
System.out.println(
"Introduce un numero: "
);
opcion = sn.nextInt();
//Realiza una de las opciones
switch
(opcion) {
case
1
:
//Pido la posicion
pos = pedirCadena(
"Introduce la posicion que quieras"
);
//Valido la posicion
if
(validarPos(nombresGolosinas, pos)) {
//Extraigo la fila y columna
fila = extraerNumero(pos,
0
);
columna = extraerNumero(pos,
1
);
//Indico si hay valores en la matriz
if
(hayValorPosicion(cantidad, fila, columna)) {
//Muestro la golosina
System.out.println(
"Aqui tiene su golosiona: "
+ nombresGolosinas[fila][columna] +
". Gracias por su compra"
);
//Reduzco la cantidad en 1
reducirPosicion(cantidad, fila, columna,
1
);
//aumento la cantidad
ventaTotales += precio[fila][columna];
}
else
{
System.out.println(
"No hay mas golosinas de este tipo, espere al técnico para que la rellene"
);
}
}
else
{
System.out.println(
"La posicion introducida no es valida"
);
}
break
;
case
2
:
//muestro las golosinas
mostrarGolosionas(nombresGolosinas, precio);
break
;
case
3
:
//pido el password
password = pedirCadena(
"Introduce la contraseña"
);
//Compruebo si es correcta la contraseña
if
(cadenaIguales(password,
"MaquinaExpendedora2017"
)) {
//Pido la posicion
pos = pedirCadena(
"Introduce la posicion que quieras"
);
//Extraigo los numeros
fila = extraerNumero(pos,
0
);
columna = extraerNumero(pos,
1
);
//Validamos la posicion dada
if
(validarPos(nombresGolosinas, pos)) {
//Introducimos la cantidad
cantidadNueva = pedirInteger(
"Introduce la cantidad"
);
//Aumentamos la cantidad en el valor dado
aumentarPosicion(cantidad, fila, columna, cantidadNueva);
System.out.println(
"Se ha incrementado la cantidad"
);
}
else
{
System.out.println(
"La posicion introducida no es valida"
);
}
}
else
{
System.out.println(
"La contraseña incorrecta"
);
}
break
;
case
4
:
//Muestro las ventas
System.out.println(
"Las ventas han sido de "
+ventaTotales);
salir =
true
;
break
;
default
:
System.out.println(
"Las opciones son entre 1 y 7"
);
}
//controla la excepcionn en caso de que se introduzca un valor no correcto
}
catch
(InputMismatchException e) {
System.out.println(
"Debes escribir un numero"
);
sn.next();
}
}
System.out.println(
"Fin del menu"
);
}
/**
* Rellena la matriz con un numero
* @param matriz
* @param num
*/
public
static
void
rellenarMatriz(
int
[][] matriz,
int
num) {
for
(
int
i =
0
; i < matriz.length; i++) {
for
(
int
j =
0
; j < matriz.length; j++) {
matriz[i][j] = num;
}
}
}
/**
* Pide una cadena
* @param mensaje
* @return
*/
public
static
String pedirCadena(String mensaje) {
System.out.println(mensaje);
String cadena = sn.next();
return
cadena;
}
/**
* Pide un integer
* @param mensaje
* @return
*/
public
static
int
pedirInteger(String mensaje) {
System.out.println(mensaje);
int
numero = sn.nextInt();
return
numero;
}
/**
* Valida si una posicion es correcta
* @param matriz
* @param pos
* @return
*/
public
static
boolean
validarPos(String[][] matriz, String pos) {
if
(pos.length() !=
2
) {
return
false
;
}
if
(!(esNumero(pos.substring(
0
,
1
)) && esNumero(pos.substring(
1
,
2
)))) {
return
false
;
}
int
fila = extraerNumero(pos,
0
);
int
columna = extraerNumero(pos,
1
);
if
(!((fila >=
0
&& fila < matriz.length) && (columna >=
0
&& columna < matriz[
0
].length))) {
return
false
;
}
return
true
;
}
/**
* Indico si un String es un numero
* @param num
* @return
*/
public
static
boolean
esNumero(String num) {
try
{
Integer.parseInt(num);
return
true
;
}
catch
(NumberFormatException e) {
return
false
;
}
}
/**
* Extraigo el numero, -1 si ha habido un error
* @param numero
* @param pos
* @return
*/
public
static
int
extraerNumero(String numero,
int
pos) {
int
num = -
1
;
if
(esNumero(numero)) {
num = Integer.parseInt(numero.substring(pos, pos +
1
));
}
return
num;
}
/**
* Reduce la cantidad de una posicion en concreto
* @param matriz
* @param fila
* @param columna
* @param cantidad
*/
public
static
void
reducirPosicion(
int
[][] matriz,
int
fila,
int
columna,
int
cantidad) {
matriz[fila][columna] -= cantidad;
}
/**
* Indica si en una posicion hay un valor mayor que 0
* @param matriz
* @param fila
* @param columna
* @return
*/
public
static
boolean
hayValorPosicion(
int
[][] matriz,
int
fila,
int
columna) {
if
(matriz[fila][columna] >
0
) {
return
true
;
}
return
false
;
}
/**
* Muestra las golosinas
* @param nombres
* @param precios
*/
public
static
void
mostrarGolosionas(String[][] nombres,
double
[][] precios) {
for
(
int
i =
0
; i < nombres.length; i++) {
for
(
int
j =
0
; j < nombres[i].length; j++) {
System.out.println(i +
""
+ j +
" "
+ nombres[i][j] +
" "
+ precios[i][j]);
}
}
}
/**
* Indica si dos cadenas son iguales
* @param cadena1
* @param cadena2
* @return
*/
public
static
boolean
cadenaIguales(String cadena1, String cadena2) {
if
(cadena1.equals(cadena2)) {
return
true
;
}
else
{
return
false
;
}
}
/**
* Aumenta la cantidad de una posicion
* @param matriz
* @param fila
* @param columna
* @param cantidad
*/
public
static
void
aumentarPosicion(
int
[][] matriz,
int
fila,
int
columna,
int
cantidad) {
matriz[fila][columna] += cantidad;
}
}
5.-
Queremos realizar una encuesta a 10 personas, en esta encuesta indicaremos el sexo (1=masculino, 2=femenino), si trabaja (1=si trabaja, 2= no trabaja) y su sueldo (si tiene un trabajo, sino sera un cero) estará entre 600 y 2000 (valor entero). Los valores pueden ser generados aleatoriamente. Calcula y muestra lo siguiente:
- Porcentaje de hombres (tengan o no trabajo).
- Porcentaje de mujeres (tengan o no trabajo).
- Porcentaje de hombres que trabajan.
- Porcentaje de mujeres que trabajan.
- El sueldo promedio de las hombres que trabajan.
- EL sueldo promedio de las mujeres que trabajan.
Usa todos los métodos que veas necesarios, piensa que es aquello que se repite o que puede ser mejor tenerlo por separado.
public
class
EncuestaApp {
public
static
void
main(String[] args) {
final
int
ENCUESTADOS=
10
;
//Creamos la tabla de la Encuesta, no importa si es de 3x20 o 20x3
int
lista[][]=
new
int
[
3
][ENCUESTADOS];
//Rellenamos la tabla
rellenoSexo(lista);
rellenoTrabajo(lista);
rellenoSueldo(lista);
//Mostramos la tabla, es opcional mostrarla
imprimirArray(lista);
//Mostramos los datos
System.out.println(
"Hay un "
+porcHombresMujeres(lista,
1
)+
" % de hombres"
);
System.out.println(
"Hay un "
+porcHombresMujeres(lista,
2
)+
" % de mujeres"
);
System.out.println(
"Hay un "
+porcHombresMujeresTrabajo(lista,
1
,
1
)+
" % de hombres que trabajan"
);
System.out.println(
"Hay un "
+porcHombresMujeresTrabajo(lista,
2
,
1
)+
" % de mujeres que trabajan"
);
System.out.println(
"Hay un "
+porcHombresMujeresTrabajo(lista,
1
,
2
)+
" % de hombres que no tiene trabajo"
);
System.out.println(
"Hay un "
+porcHombresMujeresTrabajo(lista,
2
,
2
)+
" % de mujeres que no tiene trabajo"
);
System.out.println(
"El sueldo medio es de "
+promedioSueldo(lista,
1
,
1
));
System.out.println(
"El sueldo medio es de "
+promedioSueldo(lista,
2
,
1
));
}
public
static
void
rellenoSexo (
int
lista[][]){
for
(
int
i=
0
;i<lista[
0
].length;i++){
int
numero=(
int
)Math.floor(Math.random()*
2
+
1
);
lista[
0
][i]=numero;
}
}
public
static
void
rellenoTrabajo (
int
lista[][]){
for
(
int
i=
0
;i<lista[
1
].length;i++){
int
numero=(
int
)Math.floor(Math.random()*
2
+
1
);
lista[
1
][i]=numero;
}
}
public
static
void
rellenoSueldo (
int
lista[][]){
for
(
int
i=
0
;i<lista[
1
].length;i++){
for
(
int
j=
0
;j<lista[
2
].length;j++){
if
(lista[
1
][j]==
2
){
lista[
2
][j]=
0
;
}
else
{
int
numero=(
int
)Math.floor(Math.random()*
1000
+
500
);
lista[
2
][j]=numero;
}
}
}
}
public
static
void
imprimirArray (
int
lista[][]){
//Esto solo es cuestion de estetica
String datoEncuesta[]={
"Sexo"
,
"Trabajo"
,
"Sueldo"
};
for
(
int
i=
0
;i<lista.length;i++){
System.out.println(datoEncuesta[i]);
for
(
int
j=
0
;j<lista[i].length;j++){
System.out.println(
"En la fila "
+i+
" y columna "
+j+
" tiene "
+lista[i][j]);
}
}
}
public
static
double
porcHombresMujeres (
int
lista[][],
int
sexo){
int
contador=
0
;
for
(
int
i=
0
;i<lista[
0
].length;i++){
if
(lista[
0
][i]==sexo){
contador+=
1
;
}
}
double
porcentaje=(contador*
100
)/lista[
0
].length;
return
porcentaje;
}
public
static
double
porcHombresMujeresTrabajo (
int
lista[][],
int
sexo,
int
trabajo){
int
contador=
0
;
double
porcentaje_sexo=
0
;
double
porcentaje=
0
;
for
(
int
i=
0
;i<lista[
0
].length;i++){
if
(lista[
0
][i]==sexo && lista[
1
][i]==trabajo){
contador+=
1
;
}
}
if
(sexo==
1
){
porcentaje_sexo=porcHombresMujeres(lista,
1
);
porcentaje=(contador*
100
)/(porcentaje_sexo/
10
);
}
else
{
porcentaje_sexo=porcHombresMujeres(lista,
2
);
porcentaje=(contador*
100
)/(porcentaje_sexo/
10
);
}
return
porcentaje;
}
public
static
double
promedioSueldo(
int
lista[][],
int
sexo,
int
trabajo){
int
contador=
0
;
double
suma=
0
;
double
promedio=
0
;
for
(
int
i=
0
;i<lista[
0
].length;i++){
if
(lista[
0
][i]==sexo && lista[
1
][i]==trabajo && lista[
2
][i]!=
0
){
suma+=lista[
2
][i];
contador+=
1
;
}
}
promedio=suma/contador;
return
promedio;
}
}
Comentarios
Publicar un comentario