Cómo Encontrar el mayor de de tres Números [Código en Visual Basic.net]

,
Cómo Encontrar el mayor de de tres Números [Código en Visual Basic.net]Hola Amigos les mostrare un ejemplo sencillo como encontrar el mayor de tres números, este ejemplo ya ha sido desarrollado en otro lenguaje anteriormente, pero ahora lo desarrollare en el lenguaje de programación Visual Basic.net .Para que aquellos interesados en aprender este lenguaje aquí les muestro el código fuente de cómo se implementa este ejercicio.
Module Module1
   'Como encontrar el mayor de tres nuemeros en vB.net
   Sub Main()
       Dim num1, num2, num3 As Integer

       System.Console.WriteLine("Ingrese primer Numero")
       num1 = System.Console.ReadLine()

       System.Console.WriteLine("Ingrese segundo Numero")
       num2 = System.Console.ReadLine()

       System.Console.WriteLine("Ingrese Tercer Numero")
       num3 = System.Console.ReadLine()

       mayor(num1, num2, num3)
    End Sub
   Public Sub mayor(ByVal num1 As Integer, ByVal num2 As Integer,    
   ByVal num3 As Integer)
       Dim may As Integer
       may = num1
       If may < num2 Then
           may = num2
       End If
       If may < num3 Then
           may = num3
       End If
       System.Console.WriteLine("El mayor es {0}", may)
       System.Console.ReadLine()
   End Sub
End Module
Bueno como podran apreciar este algoritmo es muy sencillo, pero es la base para hacer cosas mas complejas, ahora te reto a que implementes un algoritmo que pueda encontrar el mayor de un número, dado una cantidad de números cualesquiera.

Como convertir un numero de base 10 a otra base [ Código en C++ y Java ]

,
Como convertir un numero de base 10 a otra base [ Código en C++ y Java ]Hola amigos , en esta ocasión voy a resolver uno de lo ejercicios más comunes durante nuestros pininos en programación, a la vez es muy útil para resolver otro tipo de problemas, me refiero al algoritmo que convierta un numero en base 10 a otra base, puede ser base 2, 3, 4 hasta base 16. Como pueden ver el algoritmo es general para diferentes bases.
En la siguiente figura se muestra la salida en pantalla al convertir el numero 165 a base 16.

El proceso general utilizado en el algoritmo es:
Descomponer el numero en base 10, según la base ingresada, y almacenarlo en un arreglo.
Los números de la descomposición que sean mayores a 9, transformarlos a su correspondiente letra del alfabeto según corresponda.

Ahora les dejo aquí el código fuente en C++, espero que les sea de mucha utilidad.
#include "iostream"
#include "conio.h"

using namespace std;

char* decimal_base(int N,int base)
{
// buffer que almacena el resultado
char* cad=new char[20];
//validar que la base este en el intervalo establecido
if(base<2||base>16)
 return NULL;
else
{
 //contador de numero
 int i=0;
 //vector para almacenart los digitos del numero
 int n[20];
 //descompone el numero en sus respectivos digitos segun la base
 while(N>0)
 {
     n[i]=N%base;
     N=N/base;
     i++;
 }
 i--;
 //contador de resultado
 int j=0;
 //convertir los digitos mayores a 10, en una letra del alfabeto
 while(i>=0)
 {
     if(n[i]>=0&&n[i]<=9)
     {
         cad[j]=char(n[i]+48);
     }
     else
     {
         switch(n[i])
         {
             case 10:cad[j]='A';break;
             case 11:cad[j]='B';break;
             case 12:cad[j]='C';break;
             case 13:cad[j]='D';break;
             case 14:cad[j]='E';break;
             case 15:cad[j]='F';break;
         }
     }
     i--;
     j++;
 }
 cad[j]='\0'; 
}
return cad;
}


int main(int argc, char *argv[])
{
int N,B; 
cout<<"Ingrese numero en base 10 a convertir: ";
cin>>N;
cout<<"Ingrese base (2,...,16):";
cin>>B;
cout<<"Su correspondiente en base "<<B<<" es:"; cout<<decimal_base(N,B);

cout<<endl;
system("PAUSE");
return 0;
}

Y por pedido de una amiga, aquí les dejo el código en java:
import javax.swing.JOptionPane;

public class bases {

  public static String decimal_base(int N,int base)
  {
  // buffer que almacena el resultado
  String cad="";
     //validar que la base este en el intervalo establecido
      if(base<2||base>16)
          return "";
      else
   {
          //contador de numero
          int i=0;
          //vector para almacenart los digitos del numero
          int[] n=new int[20];
          //descompone el numero en sus respectivos digitos segun la base
          while(N>0)
          {
          n[i]=N%base;
          N=N/base;
          i++;
          }
      i--;
          //contador de resultado
          int j=0;
          //convertir los digitos mayores a 10, en una letra del alfabeto
          while(i>=0)
          {
          if(n[i]>=0&&n[i]<=9)
          {
                      cad+=""+n[i];
          }
          else
          {
                      switch(n[i])
                          {
                  case 10:cad+='A';break;
                  case 11:cad+='B';break;
                  case 12:cad+='C';break;
                  case 13:cad+='D';break;
                  case 14:cad+='E';break;
                  case 15:cad+='F';break;
                          //puedes seguir aumentado  
                      }
          }
          i--;
          j++;
      }
  }
  return cad;
}

 public static void main(String args[])
 {
     String cad="";
     int N,B;

     cad=JOptionPane.showInputDialog("Ingrese numero en base 10 a convertir:", "");
     N=Integer.parseInt(cad);

     cad=JOptionPane.showInputDialog("Ingrese base (2,...,16):", "");
     B=Integer.parseInt(cad);

     JOptionPane.showMessageDialog(null,"Su correspondiente en base "+B+" es: "+decimal_base(N,B));
 }
}

Algoritmo del máximo común divisor - implementado en java

,

Algoritmo del máximo común divisor - implentado en java

El algoritmo de Euclides representa un método efectivo para encontrar el máximo común divisor(mcd) entre dos números enteros positivos.El algoritmo consiste en varias divisiones euclidianas sucesivas. En la primera división se toma como dividendo el mayor de los números y como divisor el otro simplificando así un paso.Luego el divisor y el resto sirven, respectivamente, de dividendo y divisor de la siguiente división. El proceso se detiene cuando se obtiene un resto nulo.
La función de Euclides sería  representada así.

                            M    Si N=0
Euclides(M,N)=
                            Euclides(N,M mod N) en cualquier otro caso.

Este algoritmo se implementó en lenguaje de programación java, para que puedan verificar sus resultados.

                             
  1. public static int AlgortimoEuclidesMCD(int numero1,int numero2)
  2.     {
  3.         int mcd;
  4.     if(numero2==0)
  5.         {
  6.             mcd= numero1;
  7.         }
  8.     else
  9.         {
  10.            mcd=AlgortimoEuclidesMCD( numero2, numero1 % numero2);
  11.         }
  12.     return mcd;
  13.     }
  14.     public static void main(String[] args) {
  15.         // TODO code application logic here
  16.         int mcd=AlgortimoEuclidesMCD(2353,1651);
  17.         System.out.println(mcd);
  18.      }

Programación dinámica - Fibonacci [algoritmo - Java ]

,
Programación dinámica - Fibonacci [algoritmo - Java ]Existe una serie de problemas cuyas soluciones pueden ser expresadas recursivamente en términos matemáticos, y posiblemente la manera más natural de resolverlos es mediante un algoritmo recursivo. Sin embargo, el tiempo de ejecución de la solución recursiva, normalmente de orden exponencial y por tanto impracticable, puede mejorarse sustancialmente mediante la Programación dinámica la cual nos puede ofrecer una solución aceptable. La eficiencia de esta técnica consiste en resolver los subproblemas una sola vez, guardando sus soluciones en una tabla para su futura utilización. La Programación Dinámica no sólo tiene sentido aplicarla por razones de eficiencia, sino porque además presenta un método capaz de resolver de manera eficiente problemas cuya solución ha sido abordada por otras técnicas y ha fracasado. Donde tiene mayor aplicación la Programación Dinámica es en la resolución de problemas de optimización. En este tipo de problemas se pueden presentar distintas soluciones, cada una con un valor, y lo que se desea es encontrar la solución de valor óptimo (máximo o mínimo). Extracto obtenido de Técnicas de Diseño de Algoritmos de Rosa Guerequeta y Antonio Vallecillo.

En un post anterior se implementó el fibonacci usando recursividad dejo el enlace para que lo revisen y puedan comparar Fibonacci recursivo.
A Continuación les muestro el código fuente del algoritmo de fibonacci implementado con programación dinámica escrito en lenguaje java.


  1. public static int fibonacciDinamico(int numeroFib)
  2.     {
  3.     int tablaDinamica[]=new int[numeroFib];
  4.         if(numeroFib&lt;=1)
  5.         {
  6.             return 1;
  7.         }
  8.         else
  9.         {
  10.         tablaDinamica[0]=1;
  11.         tablaDinamica[1]=2;
  12.         for(int i=2;i&lt;numeroFib;i++)
  13.             {
  14.               tablaDinamica[i]=tablaDinamica[i-1]tablaDinamica[i-2];
  15.             }
  16.         }
  17.         return tablaDinamica[numeroFib-1];
  18.     }
  19.     public static void main(String[] args) {
  20.         // TODO code application logic here
  21.         int fibonacci;
  22.         fibonacci=fibonacciDinamico(5);
  23.         System.out.println(fibonacci);
  24.     }
  25.    

Cómo Ordenar Números utilizando el Algoritmo Quick Sort [Código en Visual Basic.net]

,
Cómo Ordenar Números utilizando el Algoritmo Quick Sort [Código en Visual Basic.net]Otro algoritmo de ordenamiento muy interesante es el Quick sort que actualmente es el más eficiente y veloz de los métodos de ordenación interna, C. A. Hoare su autor lo denominó Quick sort por la velocidad con la que ordenaba los elementos de un arreglo.

Aquí les muestro el código de este algoritmo utilizando el lenguaje de programación Visual Basic.net y al final veremos un ejemplo de cómo funciona este algoritmo.
Module Module1

   Sub Main()
       Dim vector(20) As Integer
       Dim b As Integer
       Dim i As Integer
       System.Console.Write("Ingrese Numero  de elementos a   
       ordenar:")
       b = System.Console.ReadLine()
       If 0 < b And b < 10000000000 Then
           For i = 1 To b
               System.Console.Write("elemento:")

               vector(i) = System.Console.ReadLine()
           Next
       Else
           System.Console.Write("Ingrese Numeros")

       End If

       quickSortRecursivo(vector, b)
       reportar(vector, b)

   End Sub

Public Sub quickSortRecursivo(ByRef vect() As Integer, ByVal n As Integer)
       reduceRecursivo(vect, 1, n)
   End Sub
   Public Sub reduceRecursivo(ByRef vector() As Integer, ByVal ini As Integer, ByVal fin As Integer)
       Dim izq, der, pos, aux As Integer
       Dim band As Boolean
       izq = ini
       der = fin
       pos = ini
       band = True
       While (band = True)
           band = False
           While (vector(pos) <= vector(der) And pos <> der)
               der = der - 1
           End While
           If pos <> der Then
               aux = vector(pos)
               vector(pos) = vector(der)
               vector(der) = aux
               pos = der
               While (vector(pos) >= vector(izq) And pos <> izq)
                   izq = izq + 1
               End While
               If (pos <> izq) Then
                   band = True
                   aux = vector(pos)
                   vector(pos) = vector(izq)
                   vector(izq) = aux
                   pos = izq

               End If
           End If
       End While
       If (pos - 1) > ini Then
           reduceRecursivo(vector, ini, (pos - 1))
       End If
       If (fin > (pos + 1)) Then
           reduceRecursivo(vector, (pos + 1), fin)
       End If

   End Sub
Public Sub reportar(ByRef vect() As Integer, ByVal b As Integer)
       Dim i As Integer

       For i = 1 To b
           System.Console.WriteLine("Reporte de elementos: posicion:{0} - elemento:{1}", i, vect(i))
       Next
       System.Console.ReadLine()
   End Sub
End Module

Bien, ahora explicaremos cual es la idea central de este algoritmo.

1. Se toma un elemento X de una posición cualquiera del arreglo.

2. Se trata de ubicar a X en al posición correcta del arreglo, de tal forma que todos los elementos que s encuentren a su izquierda sean menores o iguales a X y todos los elementos que se encuentren a su derecha sean mayores o iguales a X.

3. Se repite los pasos anteriores, pero ahora para los conjuntos de datos que se encuentran a la izquierda y a la derecha de la posición correcta de X en el arreglo.

4. El proceso termina cuando todos los elementos se encuentran en su posición correcta en el arreglo.

Intenta implementarlo en otro lenguaje de programación utilizando la misma idea.