package leccion2;

import java.util.Scanner;

public class EjerciciosLeccion2 {
	public static void main(String[] args) {

		// OPERADORES ARITMÉTICOS
//	1. Si a, b y c son variables enteras con valores a=12, b=4, c=-6, determina el valor de las
		// siguientes expresiones aritméticas e imprime por pantalla sus resultados.

		int a = 12;
		int b = 4;
		int c = 6;
		int resultado;

		// a) a + b + c
		resultado = a + b + c;
		System.out.println("El resultado de la suma de " + a + " + " + b + " + " + c + " = " + resultado);

		// b) 2 * b + 3 * (a – c)
		resultado = 2 * b + 3 * (a - c);
		b *= 2;
		// (a-c)*= 3; //No se puede tan sencillo
		// (a-c)*3; //y lo almacenas donde quieras // me pensaba que se podia como esta
		// en el enunciado
		a *= 3;
		c *= 3;
		System.out.println("El resultado de la suma de " + 2 + " * " + b + " + " + 3 + " * " + (a + " - " + c) + " = "
				+ resultado);

		// c) a / b
		double ad = a;
		double bd = b;
		double resultadod;
		resultadod = a / b;
		System.out.println("El resultado que da esta division es " + ad + " / " + bd + " = " + resultadod);

		// d) a % b
		resultado = a % b;
		System.out.println("El cociente de la siguiente división da " + a + " / " + b + " = " + resultado);

		// e) a / c
		double ad2 = a;
		double cd2 = c;
		double resultadod2;
		resultadod2 = a / c;
		System.out.println("El resultado que da esta division es " + ad2 + " / " + cd2 + " = " + resultadod2);

		// f) a % c
		resultado = a % c;
		System.out.println("El cociente de la siguiente división da " + a + " / " + c + " = " + resultado);

		// g) a * b / c
		resultado = a * b / c;
		System.out.println("El resultado de esta operación da " + a + " * " + b + " / " + c + " = " + resultado);

		// h) a * (b / c)
		resultado = a * (b / c);
		System.out.println("El resultado de esta operación da " + a + " * " + (b + " / " + c) + " = " + resultado);

		// i) (a * c) % b
		resultado = (a * c) % b;
		System.out.println("El resultado de esta operación da " + (a + " * " + c) + " % " + b + " = " + resultado);

		// j) a * (c % b)
		resultado = a * (c % b);
		System.out.println("El resultado de esta operacion da " + a + " * " + (c + " % " + b) + " = " + resultado);

		// k) (3 * a – 2 * b) % (2 * a – c)
		resultado = (3 * a - 2 * b) % (2 * a - c);
		/*
		 * 3 *= a; 2 *= b; 2 *= a; 2 *= c;
		 */
		System.out.println("El resultado de esta operacion es " + (3 + " * " + a + " - " + 2 + " * " + b) + " % "
				+ (2 + " * " + a + " - " + c) + " = " + resultado);

		// l) 2 * ( a / 5 + (4 - b * 3)) % (a + c - 2)
		resultado = 2 * (a / 5 + (4 - b * 3)) % (a + c - 2);
		System.out.println(
				"El resultado de esta operacion es " + 2 + " * " + (a + " / " + 5 + " + " + (4 + " - " + b + " * " + 3))
						+ " %" + (a + " + " + c + " - " + 2) + " = " + resultado);

		// m) (a - 3 * b) % (c + 2 * a) / (a - c)
		resultado = (a - 3 * b) % (c + 2 * a) / (a - c);
		System.out.println("El resultado de esta operacion es " + (a + " - " + 3 + " * " + b) + " % "
				+ (c + " + " + 2 + " * " + a) + " / " + (a + " - " + c) + " = " + resultado);

		// n) a - b - c * 2
		resultado = a - b - c * 2;
		System.out.println(
				"El resultado de esta operacion es " + a + " - " + b + " - " + c + " * " + 2 + " = " + resultado);

		// *2. Realiza el ejercicio anterior, pero solicitando el valor por pantalla de
		// a, b y c y recogiendo el valor por teclado. no se q hay q hacer

		Scanner sc = new Scanner(System.in);
		System.out.println("Introduce el valor de a:");
		a = sc.nextInt();
		System.out.println("Introduce el valor de b:");
		b = sc.nextInt();
		System.out.println("Introduce el valor de c:");
		c = sc.nextInt();
		// a = sc.nextInt();
		// a) a + b + c
		resultado = a + b + c;
		System.out.println("El resultado de la suma de " + a + " + " + b + " + " + c + " = " + resultado);

		// b) 2 * b + 3 * (a – c)
		System.out.println("Introduce el valor de b:");

		resultado = 2 * b + 3 * (a - c);
		b *= 2;
		// (a-c)*= 3; //No se puede tan sencillo
		// (a-c)*3; //y lo almacenas donde quieras // me pensaba que se podia como esta
		// en el enunciado
		a *= 3;
		c *= 3;
		System.out.println("El resultado de la suma de " + 2 + " * " + b + " + " + 3 + " * " + (a + " - " + c) + " = "
				+ resultado);

		// c) a / b
		System.out.println("Introduce el valor de c:");
		resultadod = a / b;
		System.out.println("El resultado que da esta division es " + ad + " / " + bd + " = " + resultadod);

		// d) a % b
		System.out.println("Introduce el valor de d:");
		resultado = a % b;
		System.out.println("El cociente de la siguiente división da " + a + " / " + b + " = " + resultado);

		// e) a / c
		System.out.println("Introduce el valor de e:");
		resultadod2 = a / c;
		System.out.println("El resultado que da esta division es " + ad2 + " / " + cd2 + " = " + resultadod2);

		// f) a % c
		resultado = a % c;
		System.out.println("El cociente de la siguiente división da " + a + " / " + c + " = " + resultado);

		// g) a * b / c
		resultado = a * b / c;
		System.out.println("El resultado de esta operación da " + a + " * " + b + " / " + c + " = " + resultado);

		// h) a * (b / c)
		resultado = a * (b / c);
		System.out.println("El resultado de esta operación da " + a + " * " + (b + " / " + c) + " = " + resultado);

		// i) (a * c) % b
		System.out.println("Introduce el valor de i:");
		resultado = (a * c) % b;
		System.out.println("El resultado de esta operación da " + (a + " * " + c) + " % " + b + " = " + resultado);

		// j) a * (c % b)
		System.out.println("Introduce el valor de j:");
		resultado = a * (c % b);
		System.out.println("El resultado de esta operacion da " + a + " * " + (c + " % " + b) + " = " + resultado);

		// k) (3 * a – 2 * b) % (2 * a – c)
		resultado = (3 * a - 2 * b) % (2 * a - c);
		/*
		 * 3 *= a; 2 *= b; 2 *= a; 2 *= c;
		 */
		System.out.println("El resultado de esta operacion es " + (3 + " * " + a + " - " + 2 + " * " + b) + " % "
				+ (2 + " * " + a + " - " + c) + " = " + resultado);

		// l) 2 * ( a / 5 + (4 - b * 3)) % (a + c - 2)
		System.out.println("Introduce el valor de l:");
		resultado = 2 * (a / 5 + (4 - b * 3)) % (a + c - 2);
		System.out.println(
				"El resultado de esta operacion es " + 2 + " * " + (a + " / " + 5 + " + " + (4 + " - " + b + " * " + 3))
						+ " %" + (a + " + " + c + " - " + 2) + " = " + resultado);

		// m) (a - 3 * b) % (c + 2 * a) / (a - c)
		System.out.println("Introduce el valor de m:");
		resultado = (a - 3 * b) % (c + 2 * a) / (a - c);
		System.out.println("El resultado de esta operacion es " + (a + " - " + 3 + " * " + b) + " % "
				+ (c + " + " + 2 + " * " + a) + " / " + (a + " - " + c) + " = " + resultado);

		// n) a - b - c * 2
		System.out.println("Introduce el valor de n:");
		resultado = a - b - c * 2;
		System.out.println(
				"El resultado de esta operacion es " + a + " - " + b + " - " + c + " * " + 2 + " = " + resultado);

		// OPERADORES DE ASIGNACIÓN
		// 3. Si d y e son dos variables (double) con valores d=15.75 y e=2.01, utiliza
		// todos los
		// operadores de asignación vistos en clase para ir modificando //¿el valor de d
		// en base a e.?//
		// También debe imprimirse por pantalla la operación que se está realizando
		// sobre que
		// números y el resultado obtenido.

		double d = 15.75;
		double e = 2.01;

		// Añadir y asignar
		// Quiero incrementar 2 unidades a d
		d += 2;

		// Restar y asignar
		// Quiero decrementar 2 unidades a d
		d -= 2;

		// Multiplicar y asignar
		// Quiero multiplicar por 2 unidades a d
		d *= 2;

		// Dividir y asignar
		// Quiero dividir entre 2 unidades a d
		d /= 2;

		// Modulo y asignar
		// Quiero obtener el resto dividiendo entre 2 unidades a d
		d %= 2;

		// CASTING
		// 4. Explica el casting implícito y explícito con 4 ejemplos de cada uno de
		// ellos y comentarios de
		// forma que una persona que no sepa casi de programación pueda entenderlo de
		// una forma adecuadda.

		// El casting implícito es la forma en la que el programa , más tecnicamente el
		// compilador, que adapta el código para crear las operaciones necesarias."
		// Mientras que el casting explícito lo adapta el programador esplícitamente
		// para que el programa pueda convertir esas operaciones."

		// Casting implícito

		// 1)
		int num = 14;
		float num2 = num;

		// 2)
		short num3 = 33;
		double num4 = num3;

		// 3)
		byte num5 = 56;
		long num6 = num5;

		// 4)
		int num7 = 84;
		double num8 = num7;

		// Casting explícito

		// 1)
		byte num9 = 46;
		char num10;
		num10 = (char) num9;
		System.out.println("Caracter (46) en código ASCII: " + num10);

		// 2)
		long num11 = 325;
		int num12;
		num12 = (int) num11;
		System.out.println(num12);

		// int numero = 109;
		// char letra = (char) numero; // Casting Explícito.
		// System.out.println(letra);

		// 3)
		float num13 = 87;
		long num14;
		num13 = (long) num13;
		System.out.println(num13);

		// 4)
		float num15 = 87;
		byte num16;
		num15 = (byte) num15;
		System.out.println(num15);

	}
}
