martes, 3 de marzo de 2009

Newton-Raphson C#

El método de Newton-Raphson (para encontrar raíces). Aquí el programa se detiene cuando el valor del error porcentual es menor al indicado por el usuario. SOLO FUNCIONA PARA LA FUNCIÓN YA DADA. El usuario no puede meter la función:

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

/* Tarea de Newton Raphson
* Autor: Jonathan Astudillo López
* Fecha: 2 de marzo del 2009
*
*/

namespace NewtonRaphson
{
class ProgramNewtonRaphson
{
static double fx(double x)
{
return x-Math.Cos(x);//Función
}

static double dfx(double x)
{
return 1+Math.Sin(x);//Derivada
}

static void Main(string[] args)
{
double toler,x1,x0,ea;//variables
int i;
string answer;

Console.WriteLine("Programa Newton Raphson para la función x-cos(x)");
Console.ReadLine();

do
{

Console.WriteLine("Coloca el valor inicial, x0");//Pedir el valor de x0, me pareció interesante pedirselo al usario
x0 = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Coloca el valor de la tolerancia");
toler = Convert.ToDouble(Console.ReadLine());

x1 = x0 - (fx(x0) / dfx(x0));//Newton Raphson
i = 1;
ea = Math.Abs(((x1 - x0) / x1) * 100);

Console.WriteLine();
Console.WriteLine("# de itereación\t x0\t x1\t f(x0)\t df(x0)\t Error");
do
{
Console.WriteLine();
Console.WriteLine("{0} \t{1:0.0000000000}\t{2:0.0000} \t {3:0.0000} \t {4:0.0000} \t {5:0.0000}", i, x0, x1, fx(x0), dfx(x0), ea);
x1 = x0 - (fx(x0) / dfx(x0)); //esto es lo que será la nueva x1
i = i + 1; //en si no cambia los datos, solo nos indica el número de iteraciones que se han hecho
ea = Math.Abs(((x1 - x0) / x1) * 100);//lo que importa en el while

} while (Math.Abs(ea) > toler); //Se hará el ciclo mientras que ea sea mayor al valor dado en tol

Console.ReadLine();
Console.WriteLine("¿Quieres hacerlo de nuevo? Escribe SI para hacerlo de nuevo");
answer=Console.ReadLine();
} while (answer == "si" || answer == "SI" || answer == "Si" || answer == "sI");
}
}
}

Campo eléctrico en C#

Campo eléctrico:

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

/* Tarea de funciones, Campo eléctrico
* Autor: Jonathan Astudillo López
* Fecha: 9 de febrero del 2009
*
*/

namespace CampoElectrico
{
class ProgramFuncionesCampoElectrico
{
static double campo(double q, double x, double a, double k)
{
return (((q * x * k*Math.Pow(10, 9)) / (Math.Pow((x * x + a * a), 1.5))));//la ecuación del campo eléctrico

}
static void Main()
{
double qu, xu, au; //declaramos las variables que vamos a usar
string respuestausuario; //lo que el usuario va a introducir
const double ku=9; // k es una constante para estos cálculos
double campoelectrico;
string answer;

do //uso el do para que ejectue el programa hasta la condición indicada en while
{

Console.WriteLine("Bienvenido a la aplicación para el campo eléctrico");
Console.WriteLine();
Console.WriteLine("Presiona enter para continuar");
Console.ReadLine();
Console.WriteLine("Introduce el valor de q");//el usuario introduce el primer valor, q
respuestausuario = Console.ReadLine();
qu = Convert.ToDouble(respuestausuario);//se convierte a double lo que el usario escribió
//se hará lo mismo con el resto de las variables

Console.WriteLine("Introduce el valor de x");
respuestausuario = Console.ReadLine();
xu = Convert.ToDouble(respuestausuario);

Console.WriteLine("Introduce el valor de a");
respuestausuario = Console.ReadLine();
au = Convert.ToDouble(respuestausuario);

campoelectrico = campo(qu, xu, au, ku);

Console.WriteLine("El campo eléctrico es ={0}", campoelectrico);//resultado final

Console.ReadLine();
Console.WriteLine("¿Quieres calcular otro campo eléctrico? (si/no)");//le pregunta al usario que quiere hacerlo de nuevo
answer = Console.ReadLine();
}

while (answer == "si" || answer == "Si" || answer == "SI");//si el usario coloca otra cosa que no sea lo mencionado, se sale

}
}
}

Van der Waals C#

Van der Waals, tal vez la fórmula esté mal (Creo que me la dieron mal), pero lo imporante es la estructura del código. Le empecé a agregar if's para las contantes (a y b), pero luego me di cuenta que eran MUCHOS elementos (dah!!! ya sé), y pues lo dejé solo en tres elementos...:

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

/* Tarea de funciones, Van der Waals
* Autor: Jonathan Astudillo López
* Fecha: 9 de febrero del 2009
*
*/

namespace Van_der_Waals
{
class ProgramVanderWaals
{
static double presion(double n, double t, double v, double a, double b, double r)
{
return (((n * r * t) / (v - n * b)) - ((a * Math.Pow(n, 2)) / Math.Pow(v, 2)));
}
static void Main()
{
double nu,tu,vu,au,bu; //declaramos las variables que vamos a usar
string respuestausuario; //lo que el usuario va a introducir
const double ru = 0.08206; // r es una constante para estos cálculos
double presionu;
string answer;

do
{

Console.WriteLine("Bienvenido a la aplicación para la presión mediante la ecuación de Van der Waals");
Console.WriteLine("Introduce el valor de n (número de moles)");//el usuario introduce el primer valor, n
respuestausuario = Console.ReadLine();
nu = Convert.ToDouble(respuestausuario);//se convierte a double lo que el usario escribió
//se hará lo mismo con el resto de las variables

Console.WriteLine("Introduce el valor de T (temperatura en Kelvin)");
respuestausuario = Console.ReadLine();
tu = Convert.ToDouble(respuestausuario);

Console.WriteLine("Introduce el valor de V (volumen en litros)");
respuestausuario = Console.ReadLine();
vu = Convert.ToDouble(respuestausuario);

Console.WriteLine("Introduce el valor de a (constante de Van der Waals)");
respuestausuario = Console.ReadLine();
au = Convert.ToDouble(respuestausuario);

Console.WriteLine("Introduce el valor de b (otra constante de Van der Waals) ");
respuestausuario = Console.ReadLine();
bu = Convert.ToDouble(respuestausuario);

presionu = presion(nu, tu, vu, au, bu, ru);

if (au == 0.034 && bu == .0237)
Console.WriteLine("Escogiste el Helio");
else if (au == .211 && bu == .0171)
Console.WriteLine("Escogiste el Neón");
else if (au == 1.34 && bu == .0322)
Console.WriteLine("Escogiste Arsénico");
else
Console.WriteLine("Quien sabe qué elemento escogiste");

Console.WriteLine("La presión en atmósferas es ={0}", presionu);

Console.ReadLine();
Console.WriteLine("¿Quieres calcular otra presión? (si/no)");
answer=Console.ReadLine();
}
while (answer =="si"|| answer=="Si"|| answer=="SI");

}
}
}

Convertidor de Temperaturas C#

Les dejo un convertidor de temperaturas (solo de C a F). Tiene como "plus" adevertencias, usando if's (no afecta a nada en el cálculo, fue un requisito para la tarea):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/* Tarea de programa para convertir temperaturas
* Autor: Jonathan Astudillo López
* Fecha: 28 de enero del 2009
*
*/

namespace ConvertirTemperatura
{
class Programatermometro
{
static void Main()
{
//Variables para guardar los grados Celsius y Fahrenheit
double cel, far;
string usuario;

// Enseñar las opciones que tiene el usuario
Console.WriteLine("Elige el tipo de conversion");
Console.WriteLine("Presiona F si quieres convertir Celsius a Fahrenheit");
Console.WriteLine("Presiona C si quieres convertir Fahrenheit a Celsius");
Console.WriteLine("Elige F ó C: ");

// Recoger lo que puso el usuario
usuario = Console.ReadLine();

// Hacer las deciciones segun lo que haya marcado el usuario
//Las partes de switch y case fueron puestas a partir del tutorial 4
switch (usuario)

{
//El usuario puede elegir entre F mayúscula o minuscula, dará igual
case "F":
case "f":
Console.WriteLine("Conversion a F");

//Aparece en pantalla
Console.Write("Escribe los grados Celsius: ");

//Se leen los grados Celsius y se convierten a double
cel = Convert.ToDouble(Console.ReadLine());

// Se obtienen los grados Fahrenheit
far = cel * 9.0 / 5.0 + 32;

//Se muestran los grados Fahrenheit resultantes
Console.WriteLine("{0} grados Celsius son {1} grados Fahrenheit", cel, far);

//Se muestra un mensaje dependiendo de la temperatura
if (far < 97.5)
Console.WriteLine("Debajo de lo normal");
else if (far > 97.5 && far < 99.5)
Console.WriteLine("Normal");
else if (far <> 99.5)
Console.WriteLine("Un poco alta");
else
Console.WriteLine("Peligro");
Console.ReadLine();

//Si el usuario eligió C, se harán los cálculos correspondientes
//El usuario puede elegir entre C mayúscula o minuscula, dará igual
break;
case "C":
case "c":
Console.WriteLine("Conversion a C");

//Aparece en pantalla
Console.Write("Escribe los grados Fahrenheit: ");

//Se leen los grados Fahrenheit y se convierten a double
far = Convert.ToDouble(Console.ReadLine());

// Se obtienen los grados Celsius
cel = (far-32) * 5.0 / 9.0;

//Se muestran los grados Celsius resultantes
Console.WriteLine("{0} grados Fahrenheit son {1} grados Celsius", far, cel);

//Se muestra un mensaje dependiendo de la temperatura
if (cel < 36.4)
Console.WriteLine("Debajo de lo normal");
else if (cel > 36.4 && cel < 37.5)
Console.WriteLine("Normal");
else if (cel <> 37.5)
Console.WriteLine("Un poco alta");
else
Console.WriteLine("Peligro");
Console.ReadLine();
break;
}

}
}
}

Calcular el volumen de un cilindro en C#

Abro una nueva sección, sobre C#. Mi intención no es enseñarlo, ya que estoy aprendiendo como parte de mi clase de Métodos Numéricos. Sé poco, y por desgracia el curso deja fuera muchas cosas. Sin embargo, a lo largo del mismo he batallado haciendo los códigos. Por lo tanto he decidido postear MIS códigos por si a alguien le ayudan. Los códigos no son los mejores ni los más eficientes.... A estas alturas no me preocupan los derechos de autor. Pienso que deberían de ser un modelo, más que fusilarse todo.

Les dejo mi primer programa, uno muy sencillo: calcular el volumen de un cilindro:

using System;

class VolumenCilindro
{
static void Main()
{
double radio;
double altura;
double volumen;
string respuesta;
Console.Write("Escribe el radio en metros:");
respuesta = Console.ReadLine();
radio = Convert.ToDouble(respuesta);
Console.Write("Escribe la altura (tambien en metros):");
respuesta = Console.ReadLine();
altura = Convert.ToDouble(respuesta);
volumen = Math.PI * radio*radio*altura;
Console.WriteLine("El volumen del cilindro de radio {0}, altura {1} es: {2}m3",radio, altura, volumen);
Console.ReadLine();
}
}