Mostrando entradas con la etiqueta vectores en c#. Mostrar todas las entradas
Mostrando entradas con la etiqueta vectores en c#. Mostrar todas las entradas

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#

Matrices en C#

Matrices en C# 

Este también es un tipo de dato estructurado, que está compuesto por n dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n índices, uno para cada dimensión. 
Conceptos básicos

Los arreglos multidimensionales tienen más de una dimensión. En C#, las dimensiones se manejan por medio de un par de corchetes, dentro de los que se escriben los valores de cada dimensión, separados por comas.
Operaciones.
Para manejar un arreglo, las operaciones a efectuarse son:

  • Declaración del arreglo, 
  • Creación del arreglo,
  • Inicialización de los elementos del arreglo, 
  •  Acceso a los elementos del arreglo. 

A continuación describiremos cada una de estas operaciones, en C#.

Declaración de Matrices en C#


La sintaxis para declarar un arreglo multidimensional es la siguiente:

<tipo>[ , ...]<identificador >; 

Donde:
Tipo indica el tipo correspondiente a los elementos del arreglo,Identificador es el nombre del arreglo, y el par de corchetes, la coma y las diéresis,[ , ...], representan las dimensiones del arreglo. Los corchetes encierran todas las comas necesarias para separar las dimensiones del arreglo.

Ejemplos:

double [ , ] bidim;// Dos dimensiones.
int [ , , ] tridim ;// Tres dimensiones.
char [ , , , ] enciclopedia;// Cuatro dimensiones. 

Observe que, en la declaración, el espacio entre los corchetes está vacío. Esto se debe a que, durante dicha operación, no se reserva espacio en la memoria.
Creación
La creación de un arreglo multidimensional consiste en reservar espacioen la memoria para todos sus elementos, utilizando la siguiente sintaxis:

<identificador > =new<tipo> [dim1, dim2 ... dimN] 

Donde:

new es el operador para gestionar espacio de memoria, en tiempo de ejecución, dim1, dim2 ,dimN son valores enteros que representan las dimensiones del arreglo.
El tamaño del arreglo es el resultado de multiplicar los valores de las dimensiones y representa el número de elementos del arreglo.
Veamos la siguiente gráfica donde se muestra una matriz (2x5), en donde se almacena 5 nombres con sus respectivas edades 

Resta de Vectores en C#

Resta de Vectores en C#

Realizar un programa que Reste dos vectores y los almacene en un tercer vector 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector
{
    class PruebaVector
    {
        private int[] A;//Declaramos un vector A
        private int[] B;//Declaramos un vector B
        private int[] C;//Declaramos un vector C
        public void Cargar()
        {
            Console.Write("Ingrese la longitud de los vectores a restar: ");
            string linea;
            linea = Console.ReadLine();
            int n = int.Parse(linea);
            A = new int[n];
            B = new int[n];
            C = new int[n];
            Console.WriteLine("Ingresando valores al vector A");
            for (int i = 0; i< A.Length; i++)
            {
                Console.Write("Ingrese componente [" + ( i + 1 ) +"]: ");
                linea = Console.ReadLine();
                A[i] = int.Parse(linea);
            }
            Console.WriteLine("Ingresando valores al vector B");
            for (int j = 0; j< B.Length; j++)
            {
                Console.Write("Ingrese componente [" + (j + 1) + "]: ");
                linea = Console.ReadLine();
                B[j] = int.Parse(linea);
            }
            for (int i = 0; i< A.Length; i++)
            {
                C[i]=A[i]-B[i];           
            }
        }
        public void Visualizar()
        {
            Console.WriteLine("La resta de los vecores es: ");
            for (int i = 0; i< A.Length; i++)
            {
                Console.Write("["+C[i]+"] ");
            }
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            PruebaVector pv = new PruebaVector();
            pv.Cargar();
            pv.Visualizar();
        }
    }
}

 Al ejecutar el código muestra el siguiente resultado

Suma de vectores en C#

Suma de vectores en C#

Realizar un programa que sume dos vectores y los almacene en un tercer vector 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector
{
    class PruebaVector
    {
        private int[] A;//Declaramos un vector A
        private int[] B;//Declaramos un vector B
        private int[] C;//Declaramos un vector C
        public void Cargar()
        {
            Console.Write("Ingrese la longitud de los vectores a sumar: ");
            string linea;
            linea = Console.ReadLine();
            int n = int.Parse(linea);
            A = new int[n];
            B = new int[n];
            C = new int[n];
            Console.WriteLine("Ingresando valores al vector A");
            for (int i = 0; i< A.Length; i++)
            {
                Console.Write("Ingrese componente [" + ( i + 1 ) +"]: ");
                linea = Console.ReadLine();
                A[i] = int.Parse(linea);
            }
            Console.WriteLine("Ingresando valores al vector B");
            for (int j = 0; j< B.Length; j++)
            {
                Console.Write("Ingrese componente [" + (j + 1) + "]: ");
                linea = Console.ReadLine();
                B[j] = int.Parse(linea);
            }
            for (int i = 0; i< A.Length; i++)
            {
                C[i]=A[i]+B[i];           
            }
        }
        public void Visualizar()
        {
            Console.WriteLine("La suma de los vecores es: ");
            for (int i = 0; i< A.Length; i++)
            {
                Console.Write("["+C[i]+"] ");
            }
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            PruebaVector pv = new PruebaVector();
            pv.Cargar();
            pv.Visualizar();
        }
    }
}
Al ejecutar el código muestra el siguiente resultado


Ejercicios de Arreglos Multi-dimensionales en C#

Ejercicios de Arreglos Multi-dimensionales en C#

Realizar un programa que defina un vector de 5 componentes de tipo float que representen las alturas de 5 personas.
Obtener el promedio de las mismas. Contar cuántas personas son más altas que el promedio y cuántas más bajas.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector2
{
    class PruebaVector2
    {
        private float[] alturas;
        private float promedio;
        public void Cargar()
        {
            alturas = new float[5];
            for (int f = 0; f< 5; f++)
            {
                Console.Write("Ingrese la altura de la persona: "+(f+1)+": ");
                string linea = Console.ReadLine();
                alturas[f] = float.Parse(linea);
            }
        }
        public void CalcularPromedio()
        {
            float suma;
            suma = 0;
            for (int f = 0; f< 5; f++)
            {
                suma = suma + alturas[f];
            }
            promedio = suma / 5;
            Console.WriteLine("Promedio de alturas es:" + promedio);
        }
        public void MayoresMenores()
        {
            int may, men;
            may = 0;
            men = 0;
            for (int f = 0; f< 5; f++)
            {
                if (alturas[f] > promedio)
                {
                    may++;
                }
                else
                {
                    if (alturas[f] < promedio)
                    {
                        men++;
                    }
                }
            }
            Console.WriteLine("Cantidad de personas mayores al promedio:" + may);
            Console.WriteLine("Cantidad de personas menores al promedio:" + men);
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            PruebaVector2 pv2 = new PruebaVector2();
            pv2.Cargar();
            pv2.CalcularPromedio();
            pv2.MayoresMenores();
        }
    }
}
Al ejecutar el código muestra el siguiente resultado

Ejercicios Resueltos de Vectores en C#

Ejercicios Resueltos de Vectores en C#

Se tienen las notas del primer parcial de los alumnos de dos cursos, Matemática y el Física, cada curso cuenta con 5 alumnos.
Realizar un programa que muestre el curso que obtuvo el mayor promedio general.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector6
{
    class PruebaVector6
    {
        private int[] quimica; //Declaramos un vector para el curso Química
        private int[] fisica; //Declaramos un vector para el curso Física
        private int[] vecSuma;//Declaramos un vector para la suma
        public void Cargar()
        {
            quimica = new int[5]; //Asignamos una longitud de 5 al vector química
            fisica = new int[5]; //Asignamos una longitud de 5 al vector Física 
            Console.WriteLine("Ingrese notas del curso Quimica");
            for (int f = 0; f< 5; f++)
            {
                Console.Write("Ingrese nota "+(f+1)+": ");
                string linea;
                linea = Console.ReadLine();
                quimica[f] = int.Parse(linea);
            }
            Console.WriteLine("Ingrese notas del Fisica");
            for (int f = 0; f< 5; f++)
            {
                Console.Write("Ingrese nota "+(f+1)+": ");
                string linea;
                linea = Console.ReadLine();
                fisica[f] = int.Parse(linea);
            }
        }
        public void CalcularPromedios()
        {
            int suma1 = 0;
            int suma2 = 0;
            for (int f = 0; f< 5; f++)
            {
                suma1 = suma1 + quimica[f];
                suma2 = suma2 + fisica[f];
            }
            int promedioa = suma1 / 5;
            int promediob = suma2 / 5;
            if (promedioa > promediob)
            {
                Console.WriteLine("El curso de Quimica tiene un promedio mayor.");
            }
            else
            {
                Console.WriteLine("El curso de Fisica tiene un promedio mayor.");
            }
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            PruebaVector6 pv = new PruebaVector6();
            pv.Cargar();
            pv.CalcularPromedios();
        }
    }
}

Al ejecutar el código muestra el siguiente resultado

Ejercicios Resueltos de Arreglos en C#

Ejercicios Resueltos de Arreglos en C# 

Ejemplo 1

Realizar un programa que guardar los sueldos de 5 operarios en un arreglo de tipo vector

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector1
{
    class PruebaVector1
    {
        private int[] sueldos; //Declaramos un vector
        public void Cargar()
        {
            sueldos = new int[6]; //Inicializamos el vector en 5
            for (int f = 1; f< = 5; f++)
            {
                Console.Write("Ingrese sueldo del operario "+f+": ");
                String linea;
                linea = Console.ReadLine();
                sueldos[f] = int.Parse(linea); //Asignamos los 5 sueldos al vector
            }
        }
        //Muestra los sueldos de los operarios en el vector sueldos[f]
        public void Imprimir()
        {
            Console.Write("Los 5 sueldos de los aperarios \n");
            for (int f = 1; f< = 5; f++)
            {
                Console.Write("["+sueldos[f]+"] ");
            }
            Console.ReadKey();
        }
        //main principal
        static void Main(string[] args)
        {
            PruebaVector1 pv = new PruebaVector1();
            pv.Cargar();
            pv.Imprimir();
        }
    }
}
Al ejecutar el código muestra el siguiente resultado


Para la declaración de un vector le antecedemos al nombre los corchetes abiertos y cerrados:

private int[] sueldos;

Lo definimos como atributo de la clase ya que lo utilizaremos en los dos métodos.
En el método de Cargar lo primero que hacemos es crear el vector (en C# los vectores son objetos por lo que es necesario proceder a su creación mediante el operador new):
sueldos = new int[6];

Ejemplo 2
Una empresa tiene dos turnos (mañana y tarde) en los que trabajan 8 empleados (4 por la mañana y 4 por la tarde)
Desarrollar un programa que permita almacenar los sueldos de los empleados agrupados por turno.
Imprimir los gastos en sueldos de cada turno.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector
{
    class PruebaVector3
    {
        private float[] turnoM; //Declaramos un vector para el turno mañana
        private float[] turnoT; //Declaramos un vector para el turno tarde
        public void Cargar()
        {
            string linea;
            turnoM = new float[4]; //Asignamos al vector una de longitud 4
            turnoT = new float[4]; //Asignamos al vector una de longitud 4
            Console.WriteLine("Sueldos de empleados del turno de la mañana.");
            for (int f = 0; f< 4; f++)
            {
                Console.Write("Ingrese sueldo "+(f+1)+": ");
                linea = Console.ReadLine();
                turnoM[f] = float.Parse(linea); //Asignamos valores al vector turno mañana
            }
            Console.WriteLine("Sueldos de empleados del turno de la tarde.");
            for (int f = 0; f< 4; f++)
            {
                Console.Write("Ingrese sueldo "+(f+1)+": ");
                linea = Console.ReadLine();
                turnoT[f] = float.Parse(linea); //Asignamos valores al vector turno tarde
            }
        }
        public void CalcularGastos()
        {
            float man = 0;
            float tar = 0;
            for (int f = 0; f< 4; f++)
            {
               man = man + turnoM[f]; //Realizamos la suna de los valores del vector turno Mañana
               tar = tar + turnoT[f]; //Realizamos la suna de los valores del vector turno Tarde
            }
            Console.WriteLine("Total de gastos del turno de la mañana:" + man);
            Console.WriteLine("Total de gastos del turno de la tarde:" + tar);
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            PruebaVector3 pv = new PruebaVector3();
            pv.Cargar();
            pv.CalcularGastos();
        }
    }
}

Al ejecutar el código muestra el siguiente resultado