Datos personales

Mostrando entradas con la etiqueta Yield. Mostrar todas las entradas
Mostrando entradas con la etiqueta Yield. Mostrar todas las entradas

lunes, noviembre 24, 2008

YIELD y FIBONACCI

Ante la llamada de David Salgado para un concurso de código, he usado YIELD para aportar una solución que expongo aquí. Las razones de usar este sistema parten del siguiente razonamiento.
1º.-Había que mostrar los cálculos del orden 1 al 44 de Fibonacci.
2º.-Pensé en un bucle pero me acordé de YIELD, que a la postre es muy parecido si pensamos en ensamblador: un bucle es un salto x veces, YIELD se comporta de la misma manera, es un salto x veces, y así me quedaba el código más bonito y en una función. Los saltos son las intrucciones que menos ciclos de procesador ocupan en un procesador Intel.
3º.-Para las operaciones pensé en las sumas ya que son las operaciones aritméticas que menos ciclos de procesador necesitan.
4º.-Utilicé un array para almacenar los valores temporales porque su almacenamiento en memoria es contiguo y su acceso a memoria esta guardado en un registro del procesador y el acceso a la posición es un nº igual de bytes ya que los elementos son del mismo tipo.

Una de las cosas que se me escaparon y que no conocía, fué que mostrar los datos es más rápido en un formulario windows que en la consola.

Sin más, aquí os dejo el código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Fibonacci
{
class Program
{
static void Main(string[] args)
{
DateTime inicio=DateTime.Now;
foreach (long num in Fibonacci(44))
{
Console.WriteLine(num);
}
Console.WriteLine(DateTime.Now - inicio);
Console.ReadKey();
}
static IEnumerable Fibonacci(int n)
{
yield return 0;
yield return 1;
long[] nums = {0,0,1};
for (int i = 0; i <= n;i++ ) { nums[0] = nums[1] + nums[2]; nums[1] = nums[2]; nums[2] = nums[0]; yield return nums[0]; } } } }

sábado, septiembre 06, 2008

YIELD C#

En esta entrada vamos a ver un ejemplo de la nueva instrucción YIELD para C# 3.0 que podemos encontrar en Visual Studio 2008.

Como muchas de las nuevas características de C#, parece que todas estas vienen derivadas de las necesidades de nuevas instrucciones para LINQ, pero eso es harina de otro costal, ya sabrán los de Microsoft porqué está, yo sólo pretendo mostrar una utilidad de la misma.

Podemos comparar esta instrucción con la que nos encontramos en INFORMIX de RETURN x WITH RESUME; para procedimientos almacenados, ya que su función es parecida. Esta función nos devuelve un valor encubierto en un IEnumerable tantas veces como encuentre YIELD dentro de una iteración o bucle que a su vez se encuentre en una función.

Esto así, cuesta un poco de digerir si no se acompaña con un pequeño ejemplo:

El ejemplo mostrará de una lista de clientes, los clientes que superan la media de ventas del total de clientes. Este mismo ejemplo se puede hacer con LINQ, pero como lo que se pretende mostrar es YIELD pues omito cualquier alusión a LINQ.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EjemploYield
{
class Program
{
protected class Cliente
{
public int Codigo { get; set; }
public string Nombre { get; set; }
public double Ventas { get; set; }
public Cliente (int Codigo, string Nombre, double Ventas)
{
this.Codigo=Codigo;
this.Nombre=Nombre;
this.Ventas=Ventas;
}
}
static void Main(string[] args)
{
List clientes = new List {
new Cliente(1,"Pepe",100),
new Cliente(2,"Juan",12),
new Cliente(3,"Alfonso", 23),
new Cliente(4,"Pedro", 37),
new Cliente(5,"Martin",0),
new Cliente(6,"Antonio", 45)};
foreach (Cliente cli in ClientesSuperiorAMedia(clientes))
{
Console.WriteLine(cli.Nombre);
}
Console.ReadKey();
}
static IEnumerable ClientesSuperiorAMedia(List clientes)
{
double media = Media(clientes);
for (int i=0;i {
if (clientes[i].Ventas>=media)
{
yield return clientes[i];
}
}
}
static double Media(List clientes)
{
double suma = 0;
foreach (Cliente cli in clientes)
{
suma+=cli.Ventas;
}
return suma/clientes.Count;
}
}
}

Etiquetas

.net (1) ALGORITMO (4) algoritmos (1) Android (1) angular (2) aplicaciones WEB (1) ARGENTINA (1) ASP (4) asp .NET (1) ASP .NET Identity (1) attach (1) Azure (1) base de datos (1) BINDING (1) BioInformática (2) bootstrap (1) C (2) C# (27) castellano (1) catalán (1) Charla (1) CheckedListBox (1) Clase (1) clausura transitiva (2) CLIENTES (1) Closing (1) Combobox (1) Comisiones (1) CONCURSO (1) condones (1) consultas (1) corrupta (1) CORS OWIN (1) CORS WEB API 2 (1) Criptografía (1) CUENTA NARANJA (1) Custom Control (1) Daniel Seara (1) DATAGRIDVIEW (1) David Salgado (2) dendrograma (6) depurar (1) desarrollo (1) Deserializar (1) DEVCAMP (2) durex (1) e-DNI (1) el Guille (2) Eladio Rincón (1) elGamal (1) encriptación (1) encuesta (1) Entidad (1) ERROR (2) error 3624 (1) España (1) España es nido de víboras. (1) Euclides (1) Euclides extendido (1) evento (1) eventos. (1) factorización (1) factorizar (1) física (1) Framework 2.0 (1) Framework 3.5 (5) Framework 4 (2) Francisco González (1) Francisco Ruiz (1) GO (1) google (1) gossip (1) Grupos de usuarios (1) Guadalajara (1) Guille Comunity Tour (2) Gusenet (9) GUSENET. (1) Huelga informáticos (1) IBEX 35 (1) Idioma (1) IFT (1) IISExpress (1) Indice de Fuerza Tecnica (1) informática (1) Informix (1) ING DIRECT (1) INGDIRECT (1) Ingeniería Informática (2) Inteligencia artificial (5) Intro (1) IOS (1) IPad (1) IPhone (1) IV Aniversario (1) JavaScript (2) JPA (2) keybd_event (1) LA CAIXA (1) La Pineda (1) ladroentidad (1) Lector RSS (2) LINQ (5) LINQ2XML (1) ListBox (1) Live Distributed Objects (1) llenar (1) LOG (1) Madrid .NET (1) MainMenu (1) MAP (1) MAP 2011 (1) MAR DEL PLATA (1) matemáticas (1) Matriculación (1) MDIList (1) MdiWindowsListItem (1) MenuItem (1) MenuStrip (1) Microsoft (18) Microsoft Active Professional (1) Miguel Egea (2) MSDE 2 (1) MSDE 2000 (1) MVVM Light (2) mysql (1) NAMESPACE (1) Needleman (2) NET (1) NS (1) Oferta empleo (1) Office 14 (1) Office 2007 (1) Office 2009 (1) ON ERROR (1) OOB (1) Oscar Montesinos (1) OWIN (1) OWIN Security middleware (1) Paginación (1) PDC (1) Pedro Hurtado (1) PINTARTECA (1) PrinterSettings (1) Process (1) ProcessStartInfo (1) Programador (1) Relacional (1) robo (1) RSS (1) Rubén Garrigós (1) Salvador Ramos (1) Santa Pola (1) scrape (1) scraping (1) ScrollBar (1) Secretaría (1) SendInput (1) SENDKEYS (1) Sergio Vázquez (1) Serializar (1) Silverlight 2.0 (2) Silverlight 4 (1) Silverlight 5 (3) Silverlight. (1) Sindicado (1) Sistema Personal de Trading (3) Sistemas Distribuidos (1) SOLID SUMMIT 2009 (1) SPT (2) SQL Server (3) SQL Server 2000 (2) SQL Server 2005 (2) SQL Server 2008 (3) SQL Server Denali (1) SQL Server Information Services. (1) SQLU (1) SSIS (1) SUMMIT SQL (1) Suspect (1) Syndication (1) TAB (1) Tablas (1) Tarragona (1) Token bearer (1) ToolStripMenuItem (1) ToString() (1) Traductor (1) transacciones (1) treeview (1) truco (1) TRY CATCH (1) UCI (1) Unience (2) Universad (1) Universidad Oberta Catalunya (2) UOC (8) Usuarios. (1) VB (1) VB6 (1) VB9 (1) VIAJAR (1) Vila-seca (1) VISUAL BASIC (3) Visual Basic. (1) visual studio (1) Visual Studio 2005 (1) Visual Studio 2008 (16) Visual Studio 2010 (2) Visual Studio 2013 (1) VS2010 (1) VSTA (1) VSTO (1) WCF (1) WEB API (1) web.config (1) WebClient (1) WF (1) windows (1) Windows 7 (3) Windows 8 (2) Windows Azure (1) Windows pone (1) Windows Server 2008 (1) Windows Vista (1) woff (1) WP7 (1) WPF (1) Wunsch (2) XAML (4) XDocument (1) XElement (1) XML (3) XNA (1) Yield (2)