25 de febrero de 2010

Listas Enlazadas

Estructura de datos abstracta (EDA) compuesta por un conjunto de nodos, donde cada uno de ellos contiene al menos: Información específica [Info(p)] y una dirección del próximo nodo de la lista [Next(p)].

Generalmente la dirección del primer nodo es almacenada en una variable First.

Operaciones sobre listas enlazadas

NewNodo(p): Crea un nuevo nodo en memoria, la dirección donde fue creado queda almacenada en p.

FreeNodo(p): Borra el nodo de memoria que se encuentra en la dirección almacenada en la variable p.

Ejemplo

:

En una lista enlazada se tienen los nombres de los estudiantes de análisis, la dirección del primer nodo está almacenada en la variable First, desarrolle un algoritmo que busque al estudiante DUVAN e inserte a la estudiante MARLENY inmediatamente después de DUVAN.


 

INICIO

    p=First

    encontrado = "No"

    MQ (encontrado="No" ^ p<>NULL) Haga

        SI info(p)="Duvan" ENTONCES

            encontrado="Si"

        SINO

            q=p

            p=Next(p)

        FIN SI

    FMQ

    NewNodo(r)

    infor(r)="Marleny"

    SI encontrado="No" ENTONCES

        SI First = NULL ENTONCES

            First=r

        SINO

            Next(q) = r

        FIN SI

    SINO

        SI p = First ENTONCES

            Next(r) = Next(p)

            Next(First) = r

        SINO

            Next(r) = Next(p)

            Nexp(p) = r

        FIN SI

        

    FINSI

FIN

Bisección y Newton Raptson en C Sharp

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


 

namespace AnalisisNumerico{


///
<summary>


/// Programa para encontrar las raices de una función.


///
</summary>


///
<Autor>Alexander Vásquez</Autor>


class
Program {


///
<summary>


/// Metodo principal, encargado de Invocarel metodo a ejecutar de acuerdo a los parametros recibidos.


///
</summary>


///
<param name="args">Nombre del metodo a ejecutar: BISECCION, NEWTON RAPTSON</param>


static
void Main(string[] args){


if(args[0].ToUpper().Equals("BISECCION")){

biseccion();

}


else
if (args[0].ToUpper().Equals("NEWTON") && args[1].ToUpper().Equals("RAPTSON")) {

newtonRaptson();

}


else {


Console.WriteLine("Método no se ha implentado");

}

}


///
<summary>


/// Medoto Newton Raptson


///
</summary>


private
static
void newtonRaptson(){


int iterMax = 0, iter = 0;


Double x = 0, xs = 0, fx = 0, f1x = 0, error=0;


string dato;


Console.WriteLine("Ingrese valor de X:");

dato = Console.ReadLine();

x = Convert.ToDouble(dato);


Console.WriteLine("Ingrese valor del Error:");

dato = Console.ReadLine();

error = Convert.ToDouble(dato);


Console.WriteLine("Ingrese numero maximo de iteraciones:");

dato = Console.ReadLine();

iterMax = Convert.ToInt32(dato);

fx = f(x);


while (Math.Abs(fx) > error && iter < iterMax) {

f1x = f1(x);

xs = x - fx / f1(x);

mostarDatos(iter, x, xs, fx, f1x);

x = xs;

fx = f(x);

iter++;

}

mostarDatos(iter, x, xs, fx, f1x);

}


///
<summary>


/// Mostrar los datos generados por el metodo newton raptson


///
</summary>


///
<param name="iter">Iteracion</param>


///
<param name="x">valor en el punto x</param>


///
<param name="xs">valor siguiente de x</param>


///
<param name="fx">valor de y en el punto x</param>


///
<param name="f1x">valor de dy en el punto x</param>


private
static
void mostarDatos(int iter, double x, double xs, double fx, double f1x) {


Console.Write("Iter: ");


Console.Write(iter.ToString());


Console.Write(" Xi=");


Console.Write(x.ToString());


Console.Write(" F(x)=");


Console.Write(fx.ToString());


Console.Write(" F'(x)=");


Console.Write(f1x.ToString());


Console.Write(" X(i+1)=");


Console.Write(xs.ToString());


Console.Write("\n");

}


 


///
<summary>


/// Metodo de Biseccion


///
</summary>


private
static
void biseccion(){


int iter = 0;


Double a = 0, b = 0, c = 0, fA = 0, fB = 0, fC = 0, error=0;


string dato;


Console.WriteLine("Ingrese valor de A:");

dato = Console.ReadLine();

a = Convert.ToDouble(dato);


Console.WriteLine("Ingrese valor de B:");

dato = Console.ReadLine();

b = Convert.ToDouble(dato);


Console.WriteLine("Ingrese valor del Error:");

dato = Console.ReadLine();

error = Convert.ToDouble(dato);


while ( Math.Abs(a-b)> error){

fA = f(a);

fB = f(b);

c = (Double)((a + b) / 2);

fC = f(c);

mostrar(a,fA,b,fB,c,fC,iter);


if (fA * fC < 0) {

b = c;

}


else {

a = c;

}

iter++;

}

mostrar(a, fA, b, fB, c, fC, iter);

}


///
<summary>


/// Metodo para mostrar los datos generados en el metod de biseccion


///
</summary>


///
<param name="a">Punto A</param>


///
<param name="fA">Valor de Y en el punto A</param>


///
<param name="b">Punto B</param>


///
<param name="fB">Valor de Y en el punto B</param>


///
<param name="c">Punto C: es el punto medio entre a y b</param>


///
<param name="fC">Valor de Y en el pnto B</param>


///
<param name="iter">Iteracion</param>


private
static
void mostrar(double a, double fA, double b, double fB, double c, double fC, int iter) {


Console.Write("Iter: ");


Console.Write( iter.ToString());


Console.Write(" A=");


Console.Write(a.ToString());


Console.Write(" F(A)=");


Console.Write(fA.ToString());


Console.Write(" B=");


Console.Write(b.ToString());


Console.Write(" F(B)=");


Console.Write(fB.ToString());


Console.Write(" C=");


Console.Write(c.ToString());


Console.Write(" F(C)=");


Console.Write( fC.ToString());


Console.Write("\n");

}


///
<summary>


/// Metodo que devuel ve el valor de y en el punto x


///
</summary>


///
<param name="x">Valor del punto x</param>


///
<returns>Valor de y</returns>


private
static
double f(double x) { return
Math.Pow(x, 2) - 4; }


///
<summary>


/// Metodo que devuelve la derivada de f(x)


///
</summary>


///
<param name="x">Valor de x</param>


///
<returns>Valor de la derivada en el punto x</returns>


private
static
double f1(double x) { return 2 * x; }

}

}

14 de febrero de 2010

Modelos Matemáticos


 

En una granja se tienen dos tipos de granos: el grano tipo 1 (T1) y el grano tipo 2 (T2) ; y se desea obtener una dieta adecuada a un costo mínimo.


 

La dieta entrega la cantidad que debe ser consumido cada uno de los nutrientes y debe ser mayor o igual a la Tabla.


 


 


 

Variables: Costo del grano Tipo 1 y Tipo 2 .


 

Función objetivo:


 

x= Grano Tipo 1

y= Grano Tipo 2

Restricciones

Almidón     

Proteínas     

Vitaminas     

No negatividad     


 


 


 

Restricción 1

    


 

 


 

Región No cumple.


 


 


 

Región cumple.

 

Restricción 2.


 


 


 

 


 


 


 

Región No cumple.


 


 


 

Región cumple.

 


 

Restricción 3


 

 


 


 


 

Región No cumple.


 


 


 

Región cumple.