Ejercicio Linq funciones

Vamos a crear un juego de torretas y vamos a crear la clase Torreta que tiene como propiedades:

Nombre

Posicion(x,y) struct con propiedades x e y

Rango (int)

Ataque(int)

Sería conveniente, a efectos de lo que vamos a hacer después, sobreescribir los métodos toString() Equals() y getHashCode()

Vamos a crear una lista de torretas que van a abarcar un terreno de 400×400. Tendremos un cuadrado de 4×4 torretas colocadas en las posiciones

(50,50) (150,50) (250,50)(350,50)

(50,150) (150,150) (250,150)(350,150)

(50,250) (150,250) (250,250)(350,250)

(50,350) (150,350) (250,350)(350,350)

El nombre será correlativo (Torreta1,Torreta2,…) el rango de todas es de 100 y el ataque es la suma de las coordenadas dividido por 10.

A partir de aquí:

Mostrar todas las torretas que tienen potencia de ataque superior a 50

Mostrar todas las torretas que tienen potencia de ataque superior a 50 en la primera fila

Mostrar las torretas ordenadas por la posición y después por ataque.

¿Cual es la media de ataque de todas las torretas?

¿Cual es la torreta de menos ataque?

¿Hay alguna torreta que tenga una potencia de ataque mayor de 60? (Si o no, no buscarla)

Mostrar las torretas que puedan atacar a la posición (200,200). Calcular la potencia de ataque que converge en ese punto.

Ejercicio extensión String

Vamos a extender el tipo string añadiendo las siguientes funciones:

trimAll() ->Elimina todos los espacios de una cadena. Ejemplo:


string cad="    hola    que    tal   ";

Console.Writeline(cad.trimALL);

Mostraría:

holaquetal

toTitle() -> Convierte la primera letra de cada palabra en mayúsculas y el resto en minúsculas. Ejemplo:


string cad = "hola que tal";
Console.WriteLine(cad.toTitle());
string cad = "HOLA que TAL";
Console.WriteLine(cad.toTitle());
string cad = "hOLA qUE tAl";
Console.WriteLine(cad.toTitle());

Mostraría:

Hola Que Tal

Hola Que Tal

Hola Que Tal

reverse() -> Nos da la vuelta a la cadena. Ejemplo:


string cad = "hola que tal";
Console.WriteLine(cad.reverse());

Nos mostraría:

lat euq aloh

palindromo() -> Nos devuelve true si la cadena es palíndroma (se lee igual empezando por el principio o por el final) No hay que tener en cuenta espacios, pero de momento ignoremos los acentos. Ejemplo:


string cad = "Isaac no ronca asi";
Console.WriteLine(cad.palindromo());

Mostraría: true

Ejercicio LINQ

Con la clase Alumno (https://github.com/juanpablofuentes/CSharp/blob/master/LINQ/LinqBasico/LinqBasico/Alumno.cs) y los siguientes datos:


List<Alumno> listaAlumnos = new List<Alumno>()
{
new Alumno("Eva",20,6.0),
new Alumno("Ana",22,7.0),
new Alumno("Rosa",22,4.0),
new Alumno("Ot",20,3.0),
new Alumno("Iu",30,6.8),
new Alumno("Pep",32,5.9),
new Alumno("Laia",30,2.3),
new Alumno("Quim",32,1.7),
};

Crear las consultas LINQ y mostrar los datos para obtener lo siguiente:

1.- Alumnos que han aprobado mayores de 30 años.

2.- Agrupar por Aprobado/Suspendido y mostrar la lista

3.- Agrupar por la longitud del nombre ordenado de mayor a menor

4.- Agrupar por la longitud del nombre y mostrar aquellos grupos cuya suma de edades es mayor de 60

 

Ejercicio sobrescritura enumerable

Vamos a crear una clase Alumno que tiene nombre y nota. Crearemos también una clase Aula que tiene un nombre, una capacidad de tipo entero y una lista de alumnos. Pondremos la función matricular que nos añade un alumno a la lista y expulsar que nos quita un alumno de la lista.

Necesitaremos poder recorrer la lista de alumnos de la clase. También poder acceder mediante índice a los alumnos.

Sobreescribiremos el operador + para poder añadir un alumno o una aula. Comprobar que al añadir un alumno no superemos la capacidad de la clase.

Lista temas

OOP Herencia, abstract sealed (Adrià)

Interfaces (Rodrigo)

Inyección dependencia (Sergi)

Principios SOL (Manel)

Principios ID (Guillem)

Colecciones No genéricas (Norden)

Colecciones Genéricas: List, Dictionary (Jaume)

Tipos Custom Generics (Adrià Rojo)

Delegados (Zaka)

Eventos (Adam)

Sobreescritura binaria (Edu)

Sobreescritura IEnumerable (Alberto)

LINQ Query Syntax (including group by and subqueries) (David)

Ejercicio sobreescritura

Tenemos que modelar un juego y nos hace falta la clase ‘Blob’. Los blobs son unos monstruos que se definen por un entero ‘Ataque’ y un entero ‘Defensa’.

Crearemos la clase con esas propiedades y sobreescribiremos los siguiente:

toString: Devuelve una cadena «(Ataque,Defensa)»

equals: Dos blobs son iguales si tienen el mismo ataque y la misma defensa

+(blob,entero) Suma el entero al ataque

+(blob,blob) Suma el ataque al ataque y la defensa a la defensa

-(blob,entero) Resta el entero al ataque

-(blob,blob) Resta el ataque al ataque y la defensa a la defensa

*(blob, entero) Multiplica el ataque  y la defensa por el entero

*(blob,blob) Multiplica el ataque por el ataque y la defensa por la defensa

No sobreescribimos la división.

++(blob) Sumamos uno al ataque y la defensa

– -(blob) Restamos uno al ataque y la defensa

Decimos que un blob es mayor que otro si el ataque+defensa/2 de uno es mayor que lo mismo del otro. Crear un comparador y sobreescribir los operadores de comparación (>,<,>=,<=).

Ejercicio eventos lambda

Vamos a modificar el ejercicio de los tanques y las torretas.

Añadiremos una interfaz IAtaque que obligará a crear el método disparar. Tanques y torretas implementarán esta interfaz.

Vamos a crear una clase Disparo con las propiedades ‘direccion‘ y ‘potencia‘.

Tanto la torreta como los tanques van a tener el evento ataque que tendrá como parámetros el sender (this) y un Disparo. Este evento se invocará en el método Disparar, pasando como parámetros el propio objeto y la dirección del objeto y 100 de potencia en el caso de la torreta y 400 en el caso del tanque.

Ejercicio eventos

Tenemos una clase empleado con la propiedad nombre que se pide en el constructor.

Tenemos una clase empresa con una lista de empleados. La clase dispone de los métodos contratar y despedir que nos añaden o nos quitan un empleado de la lista respectivamente.

Vamos a crear un evento que cuando se despida a un empleado se active pasando como parámetro el empleado despedido.

Añadiremos una clase Administracion con los siguientes métodos: alta y baja. Ambos reciben un parámetro de tipo empleado y generan la documentación de dar de alta y de baja un empleado. Para este ejercicio, simplemente imprime por consola Nombre empleado estás contratado y Nombre empleado estás dado de baja.

Crear un evento para el alta y en el programa crear un objeto de la clase Administracion y suscribir los eventos de contratar y despedir a alta y baja respectivamente.

Ejercicio llamar delegados

Vamos a crear una clase CuentaCorriente con las propiedades (full) nombre y saldo.

La clase tendrá una lista de manejadores similar a la del coche, compuesta por un delegado void alerta(string) y una listaAlertas de tipo alerta. Esta lista será pública.

En el set de saldo llamaremos a la lista de alertas con el mensaje ‘saldo cambiado’.

En el programa crearemos un método void aviso (string) que simplemente nos muestra por consola el mensaje que le pasemos.

Crearemos una cuenta corriente llamada cuenta  y le pondremos en la lista de alertas el aviso. Después cambiaremos el saldo y comprobaremos que funciona.