Mostrando entradas con la etiqueta c sharp. Mostrar todas las entradas
Mostrando entradas con la etiqueta c sharp. Mostrar todas las entradas

domingo, diciembre 21, 2008

Visual Basic vs C#

Otra vez saltó la campanada.

El lenguaje maltratado por los grandes gurús, Visual Basic, esta vez es más rápido que C#.

El miércoles anunciaba cómo en el cálculo de pi por el método de Montecarlo el programa C# sobre XP se comportaba mejor que el mismo programa en FORTRAN sobre Kubuntu.

En agosto ocurrió que un mismo programa Visual Basic corría más rápido que el equivalente C++.
En aquellas fechas busqué referencias en Internet y publiqué que "A veces VB es más rápido que C++"

Tiempos de ejecución:

KUBUNTU + FORTRAN (GCC-F77): 1 minuto 37 segundos.
XP + C#: 50 segundos.
XP + VB.NET: 39 segundos.

El programa:


El resultado:

Saludos.

lunes, diciembre 15, 2008

Comparativa C#, FORTRAN...mañana :-(

Hoy no va a poder ser.

No es culpa de Windows. Simplemente mi portátil está en estado crítico por desatención extrema.

Cada dos por tres se apaga solo. He pasado a C# el programita de pi con el método de montecarlo, pero no tengo ganas de estar arrancándolo cada 5 minutos para ver si termina la prueba.

Voy a aprovechar para explicar una cosa que igual no ha quedado clara.

Si alguien se fija en el programita FORTRAN verá que aleatoriamente genera un valor de 0 a 1 y se lo asigna a X. Luego hace lo mismo con la Y.

Esa X y la Y son la coordenada de un punto.

El círculo tiene un radio = 1.

Recordando un poco de geometría:

X^2 + Y^2 = R^2 es la ecuación que cumplen los puntos de la circunferencia (el borde exterior).

En una circunfernecia de radio 1, los puntos que cumplen X^2 + Y^2 <=1 son los que están dentro o en el borde del círculo.

Por eso en el programa se cuentan los casos que cumplen la condición anterior.

Saludos.

miércoles, agosto 27, 2008

Programa en C#




He ejecutado el mismo programa de los primos pero esta vez en C#. El límite fijado ha sido otra vez el número 100.000.000.

El resultado ha sido intermedio entre el código VB.NET (el más rápido con 10 minutos 21 segundos) y el código C++ (el más lento con 10 minutos 46 segundos después de activar la optimización de velocidad).

Exactamente con C# ha tardado 10 minutos 40 segundos.

Saludos.

El programa es el siguiente:


using System;
using System.IO;
using System.Globalization;

namespace BuscaPrimos
{
///
/// Descripción breve de Class1.
///

class Class1
{
///
/// Punto de entrada principal de la aplicación.
///

[STAThread]
static void Main(string[] args)
{

const string fichero = @"primos.txt";
System.IO.StreamWriter sw = new System.IO.StreamWriter(fichero);

string horaInicio = DateTime.Now.ToString("G",DateTimeFormatInfo.InvariantInfo);
int candidato = 5;
int pruebaDivisor;
int esPrimo;
int limiteSuperior;

Console.Write("Introduce el limite al que llegar: ");
limiteSuperior = Convert.ToInt32(Console.ReadLine());

sw.WriteLine(2);
sw.WriteLine(3);
while(candidato <= limiteSuperior)
{
pruebaDivisor = 5;
esPrimo = 1;
while(pruebaDivisor * pruebaDivisor <= candidato)
{
if(candidato % pruebaDivisor == 0)
{
esPrimo = 0;
break;
}
pruebaDivisor += 2;
}
if(esPrimo == 1)
sw.WriteLine(candidato);

candidato += 2;

pruebaDivisor = 5;
esPrimo = 1;
while(pruebaDivisor * pruebaDivisor <= candidato)
{
if((candidato % pruebaDivisor) == 0)
{
esPrimo = 0;
break;
}
pruebaDivisor += 2;
}
if(esPrimo == 1)
sw.WriteLine(candidato);

candidato += 4;
}

sw.Write("Hora de inicio: ");
sw.WriteLine(horaInicio);
sw.Write("Hora de final: ");
sw.WriteLine(DateTime.Now.ToString("G",DateTimeFormatInfo.InvariantInfo));
sw.Close();
Console.WriteLine("Fin.");
}
}
}