Ejercicio clase

Vamos a crear una clase producto con las siguientes propiedades:
String Referencia
String Nombre
int Stock
Double Precio

Vamos a crear una propiedad virtual PVP que es el precio más el iva (21%) solo de lectura
En el stock vamos a comprobar en el setter que no ponemos valores negativos

Vamos a crear un constructor con todos los datos, uno con todos los datos menos el nombre (y le pondremos como nombre la referencia) y uno solo con la referencia y el precio (en nombre pondremos la referencia y en stock 0).
Probad a crear algún producto.

Sobrecarga de constructores

En program

  Persona pepe=new Persona();
            Persona pepe1 = new Persona("Pepe");
            Persona pepe2 = new Persona("pepe",30);
 

En la clase:

 public Persona(): this("Anonimo")
        {
            
        }
        public Persona(String nombre):this(nombre,18)
        {
            
        }
        public Persona(String nombre, int edad)
        {
            Nombre = nombre;
            Edad = edad;
        }

Ejemplo clases

class Persona
    {
        // A la manera de java, creo getter y setter
        private int sueldo;
        public int getSueldo()
        {
            return sueldo;
        }
        public void setSueldo(int sueldo)
        {
            this.sueldo = sueldo;
        }

        // Propiedad sin ninguna modificación. El get y el set se hacen tal cual
        public int Edad { get; set; }

        // Propiedad que tiene un campo privado asociado y que en el get o el set
        // Hacemos o comprobaciones o algo
        private string _nombre; // Campo privado para almacenar el valor de la propiedad
        public string Nombre
        {
            get => "Don/doña "+_nombre; // Descriptor de acceso get (lectura)
            set
            {
                // Descriptor de acceso set (escritura)
                if (!string.IsNullOrEmpty(value))
                {
                    _nombre = value;
                }
            }
        }
        protected int id;
    }

Ejemplos tuplas y ejercicio

  var tuple = (1, "hello");
            Console.WriteLine(tuple);
            Console.WriteLine(tuple.Item1);
            Console.WriteLine(tuple.Item2);
            var namedTuple = (Number: 1, Message: "hello");
            Console.WriteLine(namedTuple.Number);
            Console.WriteLine(namedTuple.Message);
            int[] valores = { 1, 2, 3, 4, 5, 6, 77 };
            var res=GetMinMax(valores);
            Console.WriteLine(res.Item1 );
            Console.WriteLine(res.Item2);
            var (a, b) = res;
            Console.WriteLine(a);
            Console.WriteLine(b);
            var(min,max) = GetMinMax(valores);
            Console.WriteLine(min);
            Console.WriteLine(max);

            (max, min) = (min, max);
            Console.WriteLine(min);

            // Modificar la función pivote a la que le pasabamos una lista de números
            // y nos devuelve en formato de tupla dos listas. Una con los números
            // más pequeños que el pivote y otra con las mayores
            // pivote([1,2,3,4,5,6,7],3)=>([1,2],[4,5,6,7]
            // pivote([1,2,3,4,5,6,7],1)=>([],[2,3,4,5,6,7]
            // pivote([1,2,3,4,5,6,7],7)=>([1,2,3,4,5,6],[])
            // pivote([1,2,3,4,5,6,7],8)=>([1,2,3,4,5,6,7,8],[])

 public static (List<int>,List<int>) pivote(List<int> lista, int elemento)
{
List<int> izq=new List<int>();
List<int> der = new List<int>();
foreach(int numero in lista)
{
if (numero < elemento)
{
izq.Add(numero);
}
if (numero > elemento)
{
der.Add(numero);
}
}
return (izq, der);
}

Ejemplos hashset

 HashSet<int> numeros = new HashSet<int>();

            // Agregar elementos al HashSet
            numeros.Add(1);
            numeros.Add(2);
            numeros.Add(3);
            numeros.Add(1);
            // Iterar a través del HashSet con foreach
            foreach (int numero in numeros)
            {
                Console.WriteLine(numero);
            }
            HashSet<int> masnumeros = new HashSet<int>() { 3, 4, 5, 6 };
            numeros.SymmetricExceptWith(masnumeros);
            foreach (int numero in numeros)
            {
                Console.WriteLine(numero);
            }

            // Cread dos hashset con nombres de dos clases (clase1 y clase2)
            // Y mostrad:
            // Los nombres que estén en las dos clases
            // Los nombres de la primera clase que no están en la segunda

Ejemplos Diccionario


Dictionary&lt;string, int&gt; edades = new Dictionary&lt;string, int&gt;();

// Agregar elementos al diccionario
edades.Add("Juan", 25);
edades.Add("Ana", 30);
edades.Add("Pedro", 22);

// Acceder a elementos por clave
int edadDeJuan = edades["Juan"];
Console.WriteLine($"Edad de Juan: {edadDeJuan}");
edades["Juan"] = 90;
edadDeJuan = edades["Juan"];
Console.WriteLine($"Edad de Juan: {edadDeJuan}");
// Iterar a través del diccionario con foreach
foreach (var kvp in edades)
{
Console.WriteLine($"{kvp.Key}: {kvp.Value} años");
}
foreach(var claves in edades.Keys)
{
Console.WriteLine(claves+"-"+ edades[claves]);
}
foreach (var valores in edades.Values)
{
Console.WriteLine(valores);
}
edades.Remove("Juan");
edades.Remove("Pepe");
foreach (var kvp in edades)
{
Console.WriteLine($"{kvp.Key}: {kvp.Value} años");
}
if (!edades.ContainsKey("Ana"))
{
edades.Add("Ana", 40);
}
if (edades.ContainsValue(30))
{
Console.WriteLine("Hay un alumno con 30 años");
}
if (edades.TryAdd("Pep", 30))
{
Console.WriteLine("Añadida Ana");
}
else
{
Console.WriteLine("No he podido añadir a Ana");
}
int edad;
if (edades.TryGetValue("Ana",out edad))
{
Console.WriteLine("Hemos obtenido el valor");
}
else
{
Console.WriteLine("No existe el valor");
}
if (edades.TryGetValue("Pablo", out edad))
{
Console.WriteLine("Hemos obtenido el valor");
}
else
{
Console.WriteLine("No existe el valor");
}

Probad a crear un diccionaro ‘traduccion’ de cadenas como clave y cadenas como valor e introducid algunas traducciones del español al inglés (ej ‘agua’, ‘water’).
Después probad a buscar esos valores.

Ejercicios listas

Estos ejercicios pueden hacerse utilizando listas o arrays:

1.- Crear una función a la que le pasamos una cadena y un tamaño y nos devuelve una lista de ese tamaño con la cadena como elemento

CreateList(“hola”,3)==>{“hola”,”hola”,”hola”}

2.- Crear una función suma a la que le pasamos una lista de enteros y nos devuelva la suma

Suma({1,2,3})===>6

3.- Crear una función extremos a la que le pasamos una lista de enteros y nos devuelva el mayor y el menor

Extremos({2,8,1})=>(1,8)

4.- Crear una función a la que le pasamos un tamaño y nos devuelve una lista de ese tamaño de enteros rellenando con los números naturales

CreateNumbers(5)===>{1,2,3,4,5}

5.- Crear una función hasOrder que devuelve un booleano si la lista de enteros que le pasamos está ordenada de menor a mayor

hasOrder(´{1,5,8,34})===>true

hasOrder(´{1,15,8,34})===>false

6.- Modificar la función anterior para que incluya un parámetro opcional que valga 0 o 1 indicando si queremos que el orden sea ascendente o descendente

(Si sabes hacerlo, utiliza un enum para el tipo)

7.- Crear una función ReverseNumbers que devuelva la lista invertido

ReverseNumbers({1,2,3,4})====>{4,3,2,1}

8.- Wscribir una función recortarPalabras a la que le pasamos una lista de palabras y una longitud y nos devuelve una lista con las palabras de esa lonitud o superior
recortarPalabras([“aa”,”bbb”,”cccc”,”dddddd”],4)->[“cccc”,”dddddd”]

9.- Escribir una función a la que le pasamos una lista de números y nos devuelve los números en la posición par, los de posición impar los ignora
mitadPares([1,2,5,8,10])->[1,5,10]

10.- Escribir una función a la que le pasamos dos listas de enteros y nos devuelve true si tienen algún elemento en común y false en caso contrario
elementoComun([1,2,3],[4,5,6])->false
elementoComun([1,2,3],[4,5,6,3])->true

11.- Una funcion pivote de una lista de números nos divide la lista en 2 partes primero los menores del número que pasemos y por otra los mayores
pivote([4,1,9,5,3,7],6)->([4,1,5,3],[9,7])

12.- Funcion ordenarLista a la que le pasamos una lista de palabras y nos la ordena por la longitud de las cadenas
ordenarLista([“bbb”,”a”,”ddddd”,”cccc”])->[“a”,”bbb”,”cccc”,”ddddd”]

13.- Crear una función mediaAritmetica a la que le pasamos una lista de números y nos devuelve la media
mediaAritmetica([2,4,6])->4

14.- Crear una función a la que le pasamos una letra y un número y nos genera una lista con esa letra repetida una, dos y hasta n veces
generarCadenas(“a”,5)->[“a”,”aa”,”aaa”,”aaaa”,”aaaaa”]

15.- Una función palabras con caracter a la que le pasamos una cadena y nos devuelve la lista de palabras que tienen ese caracter
# palabrasConCaracter(‘hola que tal’,’a’)->[‘hola’,’tal’]

Mini ejercicio Queue

Random generadorAleatorio = new Random();
int numeroAleatorio = generadorAleatorio.Next(1, 101);
// Crear una fila, vamos a añadir 20 números aleatorios
// entre 1 y 100
// Y vamos a ‘procesar’ esos datos desencolando los elementos
// y haciendo lo siguiente:
// Si es par lo sumamos a una variable suma
// Si es impar lo ignoramos

Ejercicio listas

// Vamos a crear una lista de alumnos
// Vamos a añadir 10 alumnos de la siguiente manera:
// “Alumno 1”, “Alumno 2″,…,”Alumno 10″
// Vamos a borrar el alumno que esté en la posición 5
// Vamos a crear una función que nos diga si algún alumno
// tiene como subcadena la cadena que le pasemos
// existeSubcadena(alumnos,”7”)->true porque hay un “Alumno 7″
// existeSubcadena(alumnos,”27”)->false porque no subcadena “27”

Ejemplos Arrays

  int[] numeros;

            // También se puede definir e inicializar en una sola línea
            String[] numeros2 = new String[5];
            foreach(String num in numeros2) {
                Console.WriteLine(num);
            }
            String[] alumnos = { "ana", "pep", "iu" };
            foreach (String alumno in alumnos)
            {
                Console.WriteLine(alumno);
            }
            for(int i = 0; i < alumnos.Length; i++)
            {
                Console.WriteLine("El alumno "+i+" es " + alumnos[i]);
            }
            alumnos[1] = "Pepito grillo";
            for (int i = 0; i < alumnos.Length; i++)
            {
                Console.WriteLine("El alumno " + i + " es " + alumnos[i]);
            }
            
            int[,] matriz = { { 1, 2, 3 }, { 4, 5, 6}, { 7, 8, 9 } };
            foreach (int num in matriz)
            {
                Console.WriteLine(num);
            }
            for(int i = 0; i < matriz.GetLength(0); i++)
            {
                for(int j = 0; j < matriz.GetLength(1); j++)
                {
                    Console.Write(matriz[i, j]+"  ");
                }
                Console.WriteLine("");
            }
            int[][] matriz2 = new int[2][];
            matriz2[0] =new int[]{ 1,2};
            matriz2[1]= new int[] { 1, 2,4,4,5,6,6 };
            String[] frase = { "hola", "que", "tal", "Estamos" };
            Console.WriteLine(String.Join(",",frase));
            Array.Sort(frase);
            Console.WriteLine(String.Join(",", frase));
            Array.Reverse(frase);
            Console.WriteLine(String.Join(",", frase));