MUGPERU
  Search 
Tuesday, January 06, 2009 ..:: Foros de Discusión ::.. Register  Login
Foros MUGPERU Minimize
Subject: Algoritmo matematico
Prev Next
You are not authorized to post a reply.

Author Messages
Elmercillo01
Posts:13

25/05/2005 09:17 PM  
Hola Amigos
Bueno tengo un problema de algoritmo necesito un programa :
Que tiene que hacer es ingresar dos numeros decimales y convertirlos a binarios.
Luego va existir botones en los cuales los suma , resta de los numeros y complemento a dos.
Agradeceria mucho su ayuda...

richie_crazy57
Posts:203

26/05/2005 11:01 AM  

Hola, Elmercillo01:

Aquí está la rutina para convertir de decimales a binarios. La encontré en esta Web y la he modificado para utilizar el código adminiistrado de VC++ .NET (si deseas el código original, está en la página, además tiene una explicación detallada del funcionamiento de este algoritmo que, como ves no utiliza recursividad, sino iteraciones.)

short decimalABinario(unsigned long decimal, char binario __nogc⎬])

{

   short indice,digitos_significativos=0;

   unsigned long temp;

   for(indice=31;indice>=0;indice--)

   {

      temp=decimal/(1<<indice);

      if(temp>0)

      {

         binario[indice]=(char)('0'+temp);

         decimal=decimal%(1<<indice);

         if(!digitos_significativos)

            digitos_significativos=indice;

      }

      else

      {

         binario[indice]='0';

      }

   }

   return digitos_significativos;

}

Puedes apreciar que utiliza el tipo de datos unsigned long, por lo cual este método solamente funciona con enteros positivos de hasta 32 bits (4 bytes). A continuación te incluyo el código que utilicé para el evento click en el botón de convertir a decimales.

private: System::Void btnABinario_Click(System::Object *  sender, System::EventArgs *  e)

{

      short digitos_significativos,indice;

      char valorBinario __nogc⎬]

 

      unsigned long numDecimal;

      try {

            txtBinario->Text="";

            numDecimal = Convert::ToUInt32(txtDecimal->Text);

                  if (numDecimal < 0)

                  MessageBox::Show("No es un entero positivo.");

            else {

                  digitos_significativos = decimalABinario(numDecimal,valorBinario);

                  StringBuilder* sb = new StringBuilder();

 

                  /*

                  * Si deseas todos los 0s iniciales utiliza

                  * for(index=31;index>=0;index--)

            ≈nbsp;     */

                  for(indice=digitos_significativos;indice>=0;indice--) {

                        sb->Append(__box(valorBinario[indice]));

                  }

                  txtBinario->Text = sb->ToString();

            }

      } catch(Exception* ex) {

            MessageBox::Show(ex->Message);

      }

}

Para la cuestión de la suma y la resta de los binarios, puedes implementar métodos que sumen/resten los binarios directamente, o puedes sumar/restar sus equivalentes decimales y luego convertir el resultado en decimal.

Como ya te habrás dado cuenta por el otro thread de este foro, recién estoy comenzando a utilizar este lenguaje, pero sé que puedo ayudarte en algo. Ahora no tengo mucho tiempo, pero en estos días te puedo mandar la solución completa. Sino, puedes guiarte del código de arriba. Por lo pronto, para el complemento, te puedo adelantar que primero tienes que restarle uno al número binario y luego puedes recorrer el arreglo de valores significativos (arreglo de char) y cambiar los ceros por unos y viceversa.

Hasta la próxima. Bye.

Я!©ђ!Є ©Я∆ZΨ

You are not authorized to post a reply.
Forums > Lenguajes de Programación > C++ > Algoritmo matematico



ActiveForums 3.7
        
Copyright 2001-2008 MUGPERU   Terms Of Use  Privacy Statement