Ejercicio LINQ sintaxis query

Con la sintaxis de query obtener el nombre y la nota de los alumnos ordenados por edad descendente y nota descendente

También los alumnos aprobados ordenados por edad (todo el objeto)

Ejercicios LINQ

Con la lista de los alumnos de ejemplo obtener:

  • Los alumnos cuyo nombre empieza por ‘o’
  • ¿Cuántos alumnos hay aprobados?
  • Obtener una lista con el nombre de los aprobados
  • ¿Hay algún alumno que haya sacado un 10?
  • Obtener la media de las notas de los alumnos que han aprobado
  • Lo mismo para los suspendidos
  • Mostrar el nombre y la edad de los tres alumnos con mejor nota

Ruleta Solid

Tenemos una lista de alumnos

Tenemos cinco apartados en SOLID

Crear un programa que aleatoriamente asigne a cada alumno una letra

 

Desglose ejercicio cartas

Carta: número y palo

Baraja: colección de cartas
crear la baraja
mezclar la baraja
sacar carta

Jugador: nombre y una mano-> n cartas

Juego: Baraja
Jugadores
repartir cartas

Mus: Baraja Española y 4 jugadores
Grande, pequeña, pares y juego

Poker: Baraja Francesa y n jugadores entre 2 y 10
Escala de valores escalera de color hasta pareja

Ejercicio sobrecargas

Vamos a hacer una clase Futbolista con las siguientes propiedades

Nombre, Goles

Las ponemos en el constructor obligatorias

Vamos a sobrecargar los comparadores (>,<,>=,<=, == y !=) para que nos comparen los futbolistas por el número de goles.

Además sobrecargamos el toString para que nos muestre el nombre del futbolista y sus goles y el GetHashCode para que nos devuelva el hash combinado del nombre y el número de goles

 

Juegos de cartas

Vamos a desarrollar una serie de clases para jugar a la baraja.

Una baraja se compone de cartas, que suelen tener un palo y un valor.

Hay dos tipos de barajas clásicas. La francesa, de 52 cartas y la española, de 40. Cada una tiene sus palos y su numeración.

Con la baraja española podemos jugar a juegos como el MUS  y con la francesa a juegos como el póquer.

Quiero poder hacer partidas de mus y póquer y me gustaría tener unas clases que me puedan representar los valores de esas partidas e incluso saber que jugador es el que gana.

Por ejemplo, tengo que tener una baraja y de esa baraja tendré que poder barajarla (aleatorizarla) y repartir cartas (obtener cartas de la baraja).

En el caso del mus tengo 4 jugadores y se reparten 4 cartas a cada uno. Hay cuatro comprobaciones: Grande, pequeña, pares y juego. Tendríamos que poder saber cual de los 4 jugadores gana en cada apartado.

En el caso del póquer tenemos un número indeterminado de jugadores (entre 2 y…). Se reparten 5 cartas y tendríamos que saber qué jugador es el que gana. Aquí sólo tenemos una comprobación.

Tengo que identificar que clases voy a implementar. Si tendré o no herencia. Por ejemplo puedo tener una clase abstracta carta de la que deriven española y francesa. Lo mismo con las barajas. De los jugadores querré saber, como mínimo, el nombre y su mano (las cartas que le han tocado)

Hagamos un primer esqueleto sin implementar la funcionalidad, aunque sí indicándola.

En la baraja francesa el valor de una carta es su número, en la española es su número excepto si es un 11 o un 12, que es 10.

Una baraja debe tener todas las cartas. Si es española del 1 al 12 de cada palo (oros, copas, spadas y bastos). Si es francesa del 1 al 13 de cada palo (picas, diamantes, corazones y tréboles).

Una baraja debería poder desordenar las cartas.

 

Ejercicio: Clase Complejo

Crear una clase para trabajar con números complejos.

class Complejo

Tendrán una parte real y una imaginaria, ambas de tipo float. Deben inicializarse en el constructor (con parámetros). Crear un constructor vacío que ponga 0,0

Crearemos las siguientes funciones:

sumar(complejo) ->Suma al número el número complejo que le pasamos

multiplicar(complejo)->Multiplica por el complejo que le pasamos

igual(complejo) -> devuelve true si los números complejos son iguales

Todas estas funciones trabajan con el propio número.

Crearemos también una propiedad virtual de sólo lectura que nos devuelva el valor absoluto del número complejo. El valor absoluto viene definido por la raíz cuadrada de la suma del cuadrado de a y b

Además vamos a hacer:

Sobrecargar el ToString para que nos pinte una cadena con el número complejo. Si la parte real vale 5 y la imaginaria 3 nos escribe “5 + 3i”

Sobrecargar el equals para que si dos números complejos tienen la misma parte real y la misma parte imaginaria nos diga que son iguales

Ejemplo polimorfismo

En la clase base

 public virtual String saludo()
        {
            return "Hola "+Nombre;
        }

Clases hijas:

 public class Empleado :Persona
    {
        public int Sueldo { get; set; }
        public Empleado(String nombre)
        {
            Nombre=nombre;
        }
        public override String  saludo()
        {
            return "¡Que pasa " + Nombre;
        }
    }
 internal class Alumno:Persona
    {
        public Alumno(String nombre)
        {
            Nombre = nombre;
        }
        public override String saludo()
        {
            return "Bienvenido " + Nombre;
        }
    }