Anuncios

Bienvenidos sean a este post, hoy vamos a extender a nuestra programa llamado Lista, que vimos en el post anterior.

Anuncios

En este caso haremos que no solamente almacene los nombres de las personas sino tambien otros datos y como hacer unos calculos sobre ellos, a continuacion les dejo los codigos de las clases anteriores:

Lista.cs

using System;

class Program
{
	static int Main()
	{
		Personas persona = new Personas();
		persona.AgregarPersonas("Martin Miranda");
		persona.AgregarPersonas("Enzo Tortore");
		persona.AgregarPersonas("Marta Gargaglione");
		for(int i=0; i<persona.Contar(); i++)
		{
			Console.WriteLine(persona.Recuperar(i));
		}
		return 0;
	}
}
Anuncios

Personas.cs

using System;
using System.Collections.Generic;

class Personas
{
	List<string> listado;

	public Personas()
	{
		listado = new List<string>();
	}

	public void AgregarPersonas(string nombre)
	{
		listado.Add(nombre);
	}

	public string Recuperar(int i)
	{
		return listado[i];
	}

	public int Contar()
	{
		return listado.Count;
	}
}
Anuncios

Nuestro siguiente cambio sera la creacion de una nueva clase a la cual llamaremos Calculos.cs, abrimos el notepad, creamos el archivo y agregamos el siguiente codigo:

Calculos.cs

public class Calculos
{
	public Calculos()
	{

	}

	public float minEdad;
	public float maxEdad;
	public float minAltura;
	public float maxAltura;

}
Anuncios

En esta clase creamos un constructor predeterminado para la clase y agregamos cuatro variables, en donde almacenaremos la edad mas baja, la edad mas alta, la altura mas alta y la altura mas baja, en este caso los haremos todos public y de tipo float, sin definir nada extra, nuestra siguiente modificacion sera sobre Personas.cs, donde primero agregaremos la siguiente linea:

float[,] lista = new float[10,10];
Anuncios

Esta la agregaremos despues de la linea que declara a listado, en este caso sera un array de tipo float bidimensional, porque utilizara dos dimensiones, luego usamos un constructor con el mismo tipo del array y le definimos la maxima capacidad para cada dimension, en un segundo hablaremos del porque dos dimensiones, nuestra siguiente modificacion sera en AgregarPersonas:

public void AgregarPersonas(string nombre, float edad, float altura,int pos)
{
    listado.Add(nombre);
    lista[pos,0] = edad;
    lista[pos,1] = altura;
}
Anuncios

En este caso no recibira solamente una variable sino que ahora recibira cuatro, una para el nombre (como antes), otra para la edad y otra para la altura, estas dos ultimas de tipo float, y una ultima para la posicion en el array, si bien esto es poco practico lo hacemos asi para evitar mas complejidad en el codigo, para agregar el nombre seguira como antes pero para agregar la edad y la altura usaremos por un lado a pos donde sera para la primera dimension, luego usaremos la posicion 0 de la segunda dimension para la edad y la poscion 1 para la altura, con esto tendremos almacenado la edad y altura en una sola variable de tipo array en este caso, nuestra siguiente modificacion sera con el agregado del siguiente metodo:

public Calculos PublicarValores()
{
    Calculos calcular = new Calculos();
    for(int i=0; i< listado.Count; i++)
    {
        calcular.minEdad = Math.Min(lista[i, 0], calcular.minEdad);
        calcular.maxEdad = Math.Max(lista[i, 0], calcular.maxEdad);
        calcular.minAltura = Math.Min(lista[i, 1], calcular.minAltura);
        calcular.maxAltura = Math.Max(lista[i, 1], calcular.maxAltura);
    }

    return calcular;
}
Anuncios
Anuncios

En este caso vamos a crear un metodo llamada PublicarValores del tipo Calculos, esto lo haremos asi para poder acceder a las variables que declaramos en la clase Calculos y tambien para poder usarlas, nuestro siguiente paso sera crear un objeto de tipo Calculos llamado calcular porque recuerden que las funciones en C# siempre deben devolver el mismo valor con el cual se crearon, salvo void, despues de creado el objeto usaremos un bucle for para poder obtener los valores maximos y minimos de edad y altura, como pueden observar en el for usamos una variable int que iniciaremos con 0, el limite lo establecera la cantidad de elementos que contenga listado por medio de Count y por ultimo incrementamos la variable que iniciamos, nuestro siguiente paso sera obtener los datos pero vamos a ver una sola linea porque todas trabajan iguales:

calcular.minEdad = Math.Min(lista[i, 0], calcular.minEdad);
Anuncios
Anuncios

En este caso primero vamos a tomar a la variable minEdad de la clase Calculos por medio del objeto calcular, a ella le vamos a asignar por medio de la clase Math y el metodo Min el valor minimo entre dos valores pasados en los argumentos, para ello primero le enviaremos el valor de la posicion actual mediante i y el valor 0 (recuerden que en la segunda dimension usamos 0 para la edad y 1 para la altura) contra el valor actual de minEdad, si cumple que el valor de lista es menor que el actual procedera a reemplazarlo, lo mismo hace con la linea de minAltura y en los casos de valores maximos trabaja con el metodo Max exactamente de la misma forma pero en lugar del valor minimo lo hace con el maximo y si el valor de lista es mayor que el actual procede a reemplazarlo, por ultimo agregaremos estos dos metodos:

public float getEdad(int i)
{
    return lista[i, 0];
}
public float getAltura(int i)
{
    return lista[i, 1];
}
Anuncios

El primero nos permitira recuperar el valor de la edad almacenado en lista, observen como recibe un valor el cual lo usaremos para la posicion en el array, lo mismo ocurre con el otro que nos permite recuperar el valor de la altura, con esto terminamos las modificaciones en Personas.cs, veamos el nuevo codigo para Lista.cs

Lista.cs

using System;

class Program
{
	static int Main()
	{
		Personas personas = new Personas();

		personas.AgregarPersonas("Martin Miranda", 44, 1.69f,0);
		personas.AgregarPersonas("Enzo Tortore", 33, 1.79f, 1);
		personas.AgregarPersonas("Marta Gargaglione", 50, 1.65f, 2);
		personas.AgregarPersonas("Ariel Polizzi", 48, 1.71f, 3);
		personas.AgregarPersonas("Raul Picos", 51, 1.73f, 4);

		Calculos publicar = personas.PublicarValores();
		for (int i=0; i<personas.Contar(); i++)
		{
			Console.WriteLine(personas.Recuperar(i) + "\t" 
				+ personas.getEdad(i) + "\t" + personas.getAltura(i));
		}
		Console.WriteLine("EL mas alto mide: " + publicar.maxAltura);
		Console.WriteLine("EL mas bajo mide: " + publicar.minAltura);
		Console.WriteLine("EL mas viejo tiene: " + publicar.maxEdad 
			+ " años");
		Console.WriteLine("EL mas joven tiene: " + publicar.minEdad 
			+ " años");
		Console.ReadLine();		

		return 0;
	}
}
Anuncios

En este caso seguimos creando un objeto de la clase Personas pero ahora usaremos 5 veces el nuevo metodo AgregarPersonas para agregar los nombres, la edad, la altura y la posicion para el array, la f en los numeros de altura se usan para indicar al lenguaje que el numero informado es de tipo float y no double, de lo contrario podria generar un error, luego vamos a tener esta nueva linea:

Calculos publicar = personas.PublicarValores();
Anuncios

En este caso vamos a crear un objeto de la clase Calculos pero en lugar de usar el constructor usamos a PublicarValores con el objeto personas dando como resultado que genere correctamente el objeto, recuerden que PublicarValores tambien es de tipo Calculos y a su vez va a copiar los valores de personas que ya almacenamos, despues tendremos este bucle for:

for (int i=0; i<personas.Contar(); i++)
{
    Console.WriteLine(personas.Recuperar(i) + "\t" + personas.getEdad(i)
        + "\t" + personas.getAltura(i));
}
Anuncios

Donde nos mostrara en pantalla primero el nombre, luego la edad gracias al metodo getEdad y la altura por medio de getAltura, en todos los casos aprovechamos la variable i para informar la posicion, por ultimo tendremos estas cinco lineas:

Console.WriteLine("EL mas alto mide: " + publicar.maxAltura);
Console.WriteLine("EL mas bajo mide: " + publicar.minAltura);
Console.WriteLine("EL mas viejo tiene: " + publicar.maxEdad + " años");
Console.WriteLine("EL mas joven tiene: " + publicar.minEdad + " años");
Console.ReadLine();
Anuncios

En este caso mostraremos los datos generados por PublicarValores, obteniendo todos los datos que le solicitamos, la ultima linea sera para que espere por un Enter antes de cerrar la ventana, probemos de ejecutarlo para ver su salida:

C:\Users\tinchicus\Documents\Visual Studio 2019\B>lista
Martin Miranda  44      1,69
Enzo Tortore    33      1,79
Marta Gargaglione       50      1,65
Ariel Polizzi   48      1,71
Raul Picos      51      1,73
EL mas alto mide: 1,79
EL mas bajo mide: 0
EL mas viejo tiene: 51 años
EL mas joven tiene: 0 años


C:\Users\tinchicus\Documents\Visual Studio 2019\B>
Anuncios

En esta salida vemos que nos devolvio correctamente todos los datos de las personas, nos devolvio la altura y la edad maxima pero no nos devolvio la edad ni la altura minima, esto es porque al iniciar nuestro array el valor inicial de cero queda en el mismo por ende la primera vez que lo visita siempre va a encontrar este valor y ninguno va a ser menor a este, para evitar esta conducta se debe hacer la siguiente modificacion en el constructor de la clase Calculos.cs:

public Calculos()
{
    minEdad = float.MaxValue;
    minAltura = float.MaxValue;
}
Anuncios

En este caso vamos a inicializar los dos valores minimos con el maximo valor disponible con float, esto nos evita que inicie con 0, si probamos nuestra aplicacion ahora tendremos esta salida:

C:\Users\tinchicus\Documents\Visual Studio 2019\B>lista
Martin Miranda  44      1,69
Enzo Tortore    33      1,79
Marta Gargaglione       50      1,65
Ariel Polizzi   48      1,71
Raul Picos      51      1,73
EL mas alto mide: 1,79
EL mas bajo mide: 1,65
EL mas viejo tiene: 51 años
EL mas joven tiene: 33 años


C:\Users\tinchicus\Documents\Visual Studio 2019\B>
Anuncios

En esta salida podemos ver como ahora si nos trajo realmente los valores minimos de edad y altura, con esto podemos decir que la aplicacion esta funcionando correctamente.

Nota: Recuerden que para compilar multiples clases deben usar:
csc /out:Lista.exe *.cs

Donde Lista.exe es el nombre que va a recibir nuestro programa.
Anuncios

En resumen, hoy hemos visto como trabajar con clases de forma mas especifica, hemos creado una funcion a partir de una nueva clase, como nos permite trabajar con disintos formatos, nos permite otras operaciones, y como podemos mejorar nuestra utilidad de la aplicacion, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00