Mostrando entradas con la etiqueta c# ejercicios resueltos. Mostrar todas las entradas
Mostrando entradas con la etiqueta c# ejercicios resueltos. Mostrar todas las entradas

Ejercicios con Clases en C#

Ejercicios con Clases en C#

Normalmente un problema resuelto con la metodología de programación orientada a objetos no interviene una sola clase, sino que hay muchas clases que interactúan y se comunican. Plantearemos un problema separando las actividades en dos clases.
Ejemplo 1
Un banco tiene 3 clientes que pueden hacer depósitos y extracciones. También el banco requiere que al final del día calcule la cantidad de dinero que hay depositada.
La Solución tendrá el siguiente esquema: Debemos definir los atributos y los métodos de cada clase:
Cliente
    atributos
        nombre
        monto
    métodos
        constructor
        Depositar
        Extraer
        RetornarMonto

Banco
    atributos
        3 Cliente (3 objetos de la clase Cliente)
    métodos
        constructor
        Operar
        DepositosTotales

Solución en C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace EjerciciosconClases
{
    class Cliente
    {
        private string nombre;
        private int monto;
        public Cliente(string nom)
        {
            nombre = nom;
            monto = 0;
        }
        public void Depositar(int m)
        {
            monto = monto + m;
        }
        public void Extraer(int m)
        {
            monto = monto - m;
        }
        public int RetornarMonto()
        {
            return monto;
        }
        public void Imprimir()
        {
            Console.WriteLine(nombre + " tiene depositado la suma de " + monto);
        }
    }
    class Banco
    {
        private Cliente cliente1, cliente2, cliente3;
        public Banco()
        {
            cliente1 = new Cliente("Yhonas");
            cliente2 = new Cliente("Ana");
            cliente3 = new Cliente("Pedro");
        }
        public void Operar()
        {
            cliente1.Depositar(100);
            cliente2.Depositar(150);
            cliente3.Depositar(200);
            cliente3.Extraer(150);
        }
        public void DepositosTotales()
        {
            int t = cliente1.RetornarMonto() +
                    cliente2.RetornarMonto() +
                    cliente3.RetornarMonto();
            Console.WriteLine("El total de dinero en el banco es:" + t);
            cliente1.Imprimir();
            cliente2.Imprimir();
            cliente3.Imprimir();
        }
        static void Main(string[] args)
        {
            Banco banco1 = new Banco();
            banco1.Operar();
            banco1.DepositosTotales();
            Console.ReadKey();
        }
    }
}
Al ejecutar el código muestra el siguiente resultado


Búsqueda Binaria en C#

Búsqueda Binaria en C#

El algoritmo de búsqueda binaria es un excelente método para buscar datos dentro de una estructura(generalmente un arreglo unidimensional). Se le da el nombre de búsqueda binaria por que el algoritmo divide en dos el arreglo, aludiendo al concepto de bit, el cual puede tener dos estados.
La única condición para usar este algoritmo es que los datos dentro del arreglo estén ordenados de menor a mayor.
La solución mas fácil para realizar una búsqueda es por fuerza bruta, pero este método puede resultar bastante ineficiente cuando se tiene una gran cantidad de datos, ya que habría que buscar posición por posición hasta encontrar el dato que queremos.
El código por fuerza bruta es bastante sencillo:

             for(int i=0; i<Arreglo.length; i++)
                     if(Arreglo[i] == elemento)
                     System.out.println("\nElemento encontrado en la posicion: " + i);

Solo se recorre todo el arreglo y verificamos si la posición i es igual al dato que queremos buscar, el código anterior se puede mejorar simplemente agregándole una bandera, pero aun así no es lo suficientemente bueno.
El algoritmo de búsqueda binaria es el siguiente:
  1. Se declaran los índices superior e inferior. El inferior en 0 y el superior con el tamaño del arreglo menos 1.
  2. Se calcula el centro del arreglo con la siguiente formula:  centro = (superior + inferior) / 2
  3. Verificamos si el arreglo en la posición centro es igual al dato que buscamos. Si es igual significa que encontramos el dato y retornamos centro.
  4. Si son diferentes verificamos si el arreglo en la posición centro es mayor al dato que queremos buscar. Si es mayor actualizamos superior: superior = centro - 1, si no actualizamos inferior: inferior = centro + 1.

 5. Volvemos al paso 2.
Si cuando ya no se cumpla la condición del ciclo y no se encontró el dato retornamos -1
indicando que el dato no se encuentra en el arreglo.

Búsqueda Binaria en C# 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BusquedaBinaria
{
    class Busqueda
    {
        private int[] vector;
        public void Cargar()
        {
            Console.WriteLine("Busqueda Binaria");
            Console.WriteLine("Ingrese 10 Elementos");
            string linea;
            vector = new int[10];
            for (int f = 0; f< vector.Length; f++)
            {
                Console.Write("Ingrese elemento " + (f + 1) + ": ");
                linea = Console.ReadLine();
                vector[f] = int.Parse(linea);
            }
        }
        public void busqueda(int num)
        {
            int l = 0, h = 9;
            int m = 0;
            bool found = false;
            while (l <= h && found == false)
            {
                m = (l + h) / 2;
                if (vector[m] == num)
                    found = true;
                if (vector[m] > num)
                    h = m - 1;
                else
                    l = m + 1;
            }
            if (found == false)
            { Console.Write("\nEl elemento {0} no esta en el arreglo", num); }
            else
            { Console.Write("\nEl elemento {0} esta en la posicion: {1}", num, m + 1); }
        }
        public void Imprimir()
        {
            for (int f = 0; f< vector.Length; f++)
            {
                Console.Write(vector[f] + "  ");
            }
        }
        static void Main(string[] args)
        {
            Busqueda pv = new Busqueda();
            pv.Cargar();
            pv.Imprimir();
            Console.Write("\n\nElemento a buscar: ");
            int num = int.Parse(Console.ReadLine());
            pv.busqueda(num);
            Console.ReadKey();
           
        }
    }
}

Al ejecutar el código muestra el siguiente resultado



Vectores y Matrices en C#

Vectores y Matrices en C# 

Un array (matriz o vector) es un conjunto finito y ordenado de elementos homogéneos. La propiedad “ordenado” significa que el elemento primero, segundo y tercero,…, enésimo de un array puede ser identificado. Los elementos del array son homogéneos, es decir, del mismo tipo de datos. Los array también se conocen como matrices-en matemáticas- y tablas- en cálculos financieros.

En otras palabras un arreglo es una especie de variable que contiene muchos valores pero cada uno con una posición diferente. Un arreglo puede ser unidimensional o vectorial, bidimensional o matricial, o multi-dimencional.

Vectores en C#

Qué es un vector? Un vector (o arreglo unidimensional) es una estructura de datos en la cual se almacena un conjunto de datos de un mismo tipo. Es decir que un arreglo es una lista de n elementos que posee las siguientes características:

  • Se identifica por un único nombre de variable
  • Sus elementos se almacenan en posiciones contiguas de memoria
  • Se accede a cada uno de sus elementos en forma aleatoria

Matrices en C#

Ejercicios con Vectores en C#

Ejercicios con Vectores en C# 

Veamos algunos ejercicios con vectores en c#, que nos ayudaran a entender mejor el tema acerca de los vectores en c#.

Empezaremos con la búsqueda del mayor y menor elemento de un vector, lo mismo que su posición.

En la siguiente gráfica se muestra un ejemplo de como un vector almacena datos:


Ejemplo 1

Realizar un programa que permita ingresar los nombres de 5 operarios y sus sueldos respectivos. Mostrar el sueldo mayor y el nombre del operario.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector
{
    class PruebaVector
    {
        private string[] nombres; //Declaramos un vector de tipo estring para los nombres
        private float[] sueldos; //Declaramos un vector de tipo float para los sueldos
        public void Cargar()
        {
            nombres = new string[5];
            sueldos = new float[5];
            for (int f = 0; f< nombres.Length; f++)
            {
                Console.Write("Ingrese el nombre del empleado "+(f+1)+": ");
                nombres[f] = Console.ReadLine();
                Console.Write("Ingrese el sueldo "+(f+1)+": ");
                string linea;
                linea = Console.ReadLine();
                sueldos[f] = float.Parse(linea);
            }
        }
        public void MayorSueldo()
        {
            float mayor;
            int pos;
            mayor = sueldos[0];
            pos = 0;
            for (int f = 1; f< nombres.Length; f++)
            {
                if (sueldos[f] > mayor)
                {
                    mayor = sueldos[f];
                    pos = f;
                }
            }
            Console.WriteLine("El empleado con sueldo mayor es :" + nombres[pos]);
            Console.WriteLine("Tiene un sueldo de: " + mayor);
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            PruebaVector pv = new PruebaVector();
            pv.Cargar();
            pv.MayorSueldo();
        }
    }
}

Al ejecutar el código muestra el siguiente resultado


Ejemplo 2

Realizar un programa que ingrese un vector de n elementos e imprimir el menor y un mensaje si se repite dentro del vector dicho numero. 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector
{
    class PruebaVector
    {
        private int[] vec;//Declaramos un vector
        private int menor;
        public void Cargar()
        {
            Console.Write("Ingrese la longitud del vector:");
            string linea;
            linea = Console.ReadLine();
            int n = int.Parse(linea);
            vec = new int[n];
            for (int f = 0; f < vec.Length; f++)
            {
                Console.Write("Ingrese componente ["+(f+1)+"]: ");
                linea = Console.ReadLine();
                vec[f] = int.Parse(linea);
            }
        }
        public void MenorElemento()
        {
            menor = vec[0];
            for (int f = 1; f< vec.Length; f++)
            {
                if (vec[f] < menor)
                {
                    menor = vec[f];
                }
            }
            Console.WriteLine("El elemento menor es: " + menor);
        }
        public void RepiteMenor()
        {
            int cant = 0;
            for (int f = 0; f< vec.Length; f++)
            {
                if (vec[f] == menor)
                {
                    cant++;
                }
            }
            if (cant > 1)
            {
                Console.WriteLine("Se repite el numero.");
            }
            else
            {
                Console.WriteLine("No se repite el menor.");
            }
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            PruebaVector pv = new PruebaVector();
            pv.Cargar();
            pv.MenorElemento();
            pv.RepiteMenor();
        }
    }
}
Al ejecutar el código muestra el siguiente resultado

Objetos en C#

Declaración de Objetos en C#

Cuando uno plantea una clase en lugar de especificar todo el algoritmo en un único método (lo que hicimos en los primeros pasos de este tutorial) es dividir todas las responsabilidades de las clase en un conjunto de métodos.

Declaración de una clase y un Objeto




Declaración de varios Objetos dentro de un Clase




Ejemplo:

Definir tres clases llamada tren, avión y barco, luego definir una clase llamada transporte y en ella definir los objetos de las clases anteriores.




Otra forma de declarar objetos definidos como arreglos de objetos



Ejercicios Resueltos de Clases en C#

Ejercicios Resueltos de Clases en C# 

Ejemplo 1
Desarrollar un programa que permita ingresar los lados de un triángulo e implemente los siguientes métodos: inicializar los atributos, imprimir el valor del lado mayor y otro método que muestre si es equilátero o no.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaClase
{
    class Triangulo
    {
        private int lado1, lado2, lado3;
        //Metodo inicializar
        public void Inicializar()
        {
            string linea;
            Console.Write("Ingrese lado 1:");
            linea = Console.ReadLine();
            lado1 = int.Parse(linea);
            Console.Write("Ingrese lado 2:");
            linea = Console.ReadLine();
            lado2 = int.Parse(linea);
            Console.Write("Ingrese lado 3:");
            linea = Console.ReadLine();
            lado3 = int.Parse(linea);
        }
        //Metodo lado mayor
        public void LadoMayor()
        {
            Console.Write("Lado mayor:");
            if (lado1 > lado2 && lado1 > lado3)
            {
                Console.WriteLine(lado1);
            }
            else
            {
                if (lado2 > lado3)
                {
                    Console.WriteLine(lado2);
                }
                else
                {
                    Console.WriteLine(lado3);
                }
            }
        }
        //Metodo es equilatero
        public void EsEquilatero()
        {
            if (lado1 == lado2 && lado1 == lado3)
            {
                Console.Write("Es un triángulo equilátero");
            }
            else
            {
                Console.Write("No es un triángulo equilátero");
            }
        }
        static void Main(string[] args)
        {
            Triangulo triangulo1 = new Triangulo();
            triangulo1.Inicializar();
            triangulo1.LadoMayor();
            triangulo1.EsEquilatero();
            Console.ReadKey();
        }
    }
}
Al ejecutar el código muestra el siguiente resultado



Este problema requiere definir tres atributos de tipo entero donde almacenamos los valores de los lados del triángulo:

          private int lado1, lado2, lado3;
El primer método que deberá llamarse desde la main es el Inicializar donde cargamos los tres atributos por teclado:
       public void Inicializar()  {}
El método LadoMayor muestra el valor mayor de los tres enteros ingresados:
       public void LadoMayor() {}
Como podemos observar cuando un problema se vuelve más complejo es más fácil y ordenado separar los distintos algoritmos en varios métodos y no codificar todo en la main.
El último método de esta clase verifica si los tres enteros ingresados son iguales:
       public void EsEquilatero() {}
En la main creamos un objeto de la clase Triangulo y llamamos los métodos respectivos:
static void Main(string[] args)
        {
            Triangulo triangulo1 = new Triangulo();
            triangulo1.Inicializar(); //llamando al método inicializar()
            triangulo1.LadoMayor(); //llamando al método LadoMayor()
            triangulo1.EsEquilatero(); //llamando al método EsEquilatero()
            Console.ReadKey();
        }



Ejemplo 2

Realizar un programa que tenga una clase que permita ingresar el nombre y la edad de una persona. Mostrar los datos ingresados. Imprimir un mensaje si es mayor de edad (edad>=18)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaClase
{
    class Persona
    {
        private string nombre;
        private int edad;
        //Método Inicializar()
        public void Inicializar()
        {
            Console.Write("Ingrese nombre:");
            nombre = Console.ReadLine();
            string linea;
            Console.Write("Ingrese edad:");
            linea = Console.ReadLine();
            edad = int.Parse(linea);
        }
        //Método Imprimir()
        public void Imprimir()
        {
            Console.Write("Nombre:");
            Console.WriteLine(nombre);
            Console.Write("Edad:");
            Console.WriteLine(edad);
        }
        //Método es EsMayorEdad()
        public void EsMayorEdad()
        {
            if (edad >= 18)
            {
                Console.Write("Es mayor de edad");
            }
            else
            {
                Console.Write("No es mayor de edad");
            }
            Console.ReadKey();
        }
        // Main principal del programa
        static void Main(string[] args)
        {
            Persona per1 = new Persona();
            per1.Inicializar(); //Llamando al método Inicializar();
            per1.Imprimir();    //Llamando al método Imprimir();
            per1.EsMayorEdad(); //Llamando al método EsMayorEdad
        }
    }
}

Al ejecutar el código muestra el siguiente resultado