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));

Recopilación ejercicios de fechas

Crear una función cuantoFalta(fecha) a la que le pasamos una fecha y nos devuelve cuantos días faltan hasta esa fecha

Crear una función primerosDeMes(anyo) que nos devuelva una lista con las fechas de los primeros de mes de ese año (1 de enero, 1 de febrero, 1 de marzo…)

Crear una función sanFermin(anyo) que nos devuelva una lista con las fechas de la canción de San Fermín (1 de enero, 2 de febrero, 3 de marzo…7 de julio)

Crear una función a la que le pasamos una fecha y nos devuelve true si es fin de semana y false en caso contrario
esFinDeSemana(cadena)

Crear una función a la que le pasamos un año, un mes y un día y nos devuelve una lista con todas las horas exactas de ese día
crearAgendaDia(2024,5,1)->[2024-5-1 00:00,2024-5-1 01:00,2024-5-1 02:00,2024-5-1 03:00,…2024-5-1 23:00]

Crear una función esViernes que nos devuelva true si hoy es viernes y false en caso contrario.

Crear una función vencimiento que pasándole un número de días nos devuelva la fecha de vencimiento, que es el día de hoy más ese número de días

Crear una función festivos que pasándole un mes y un año nos devuelva el número de sábados y domingos que tiene.

Crear una función laborables que pasandole un día, un mes y un año nos devuelva una cadena con los 15 días laborables siguientes (días entre lunes y viernes)

Lo mismo pero paasando una fecha y un entero con los números de días

Crear una función nextLeap que nos diga cual es el próximo año bisiesto. Si es el actual, el actual.

Crear una función malditoLunes que nos devuelva un array con todas las fechas de este año que caen en lunes

Soluciones cadenas


static String arbolito(int n)
{
// Dibuja por consola un arbolito de asteriscos
// arbolito(3)
// *1
// **2
// ***3
// Divide y vencerás
String res = "";
String cad = "";
for(int i = 1; i <= n; i++)
{
cad += "*";
res += cad + "\n";
}
return res;

}

static int contarLetra(String cadena, String letra)
{
cadena=cadena.ToLower();
letra=letra.ToLower();
// no devuelve el número de veces que letra aparece en cadena
// contarLetra("Hola amigo","o")->2
int cont = 0;
for(int i=0;i< cadena.Length; i++)
{
if (cadena.Substring(i, 1)== letra){
cont++;
}
}
return cont;
}
static int contarLetraIndex(String cadena, String letra)
{
cadena = cadena.ToLower();
letra = letra.ToLower();
// no devuelve el número de veces que letra aparece en cadena
// contarLetra("Hola amigo","o")->2
int cont = 0;
int pos=cadena.IndexOf(letra);
while (pos != -1)
{
cont++;
pos = cadena.IndexOf(letra, pos + 1);
}
return cont;
}