Autor Tema: Error en Pseint realizar suma binaria de números de n bits  (Leído 5853 veces)

Jdacking

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Error en Pseint realizar suma binaria de números de n bits
« en: 29 de Septiembre 2016, 04:13 »
Hola  :)

Soy estudiante del primer semestre de Ingeniería en Computación y me dejaron hacer una serie de ejercicios de pseudocódigo...

El problema en cuestión está en un ejercicio en el que debo sumar 2 números binarios de 20 bits, me las arregle para hacer que sumara don números binarios de hasta 11 bits, ya que al convertir un numero binario leído de 12 o más dígitos a un arreglo (para poder operarlo) y hacer la prueba del programa este no sirve   :-\

Adjunto el pedazo del programa en el que da el fallo


Algoritmo sin_titulo
   Dimension A(20)
   Escribir ("dame tu primer número")
   leer x
   Para i=20 hasta 1 con paso -1 hacer
      A(i)=x mod 2
      x=trunc(x/10)
   Fin para
   Para i=1 hasta 20 con paso 1 Hacer
      Escribir(A(i))
   FinPara
FinAlgoritmo

Esto es lo que dice la pantalla al ejecutar el programa

*** Ejecución Iniciada. ***
dame tu primer número
> 10101010101010101010
0
0
0
0
0
0
0
0
0
0
-1
0
-1
0
0
-1
0
0
0
0
*** Ejecución Finalizada. ***

Espero que alguien sepa que es lo que ocurre, si alguien quiere le mando el pseudocódigo de la suma por correo electronico ;)
« Última modificación: 08 de Octubre 2016, 18:50 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Error en Pseint
« Respuesta #1 en: 08 de Octubre 2016, 18:50 »
Buenas, ¿no puedes poner el pseudocódigo completo? Así quizás podamos ver dónde está el fallo.

He encontrado esta definición del proceso de suma binaria por si te ayuda:

Código: [Seleccionar]
Proceso sumarbinarios
Definir bin1, bin2,bin3 Como Entero
Mostrar "Ingrese un numero en binario"
Leer bin1
Mostrar "Ingrese un segundo número en binario"
Leer bin2
bin3 <- sumaBinaria(bin1,bin2)
Escribir bin3
FinProceso

Funcion retorno <- sumaBinaria(bin1, bin2)
Definir a, b, c, res como Entero
a <- BinarioADecimal(bin1)
b <- BinarioADecimal(bin2)
res <- a + b
c <- DecimalABinario(res)
retorno <- c
FinFuncion

Funcion retorno <- BinarioADecimal( bin )
Definir decimal,i como Entero
Definir digitos, d como Caracter
decimal <- 0
digitos <- ConvertirATexto(bin)
Para i<-0 Hasta Longitud(digitos)-1 Hacer
d <- SubCadena(digitos, i, i)
decimal <- decimal*2 + ConvertirANumero(d)
Fin Para
retorno <- decimal
FinFuncion

Funcion retorno <- DecimalABinario( dec )
Definir binario, resultado, resto como Entero
Definir digitos,d como Caracter
digitos <- ''
resultado <- dec
Mientras resultado > 0 Hacer
resto <- resultado Mod 2
d <- ConvertirATexto(resto)
digitos <- d + digitos
resultado <- trunc(resultado / 2)
FinMientras
binario <- ConvertirANumero(digitos)
retorno <- binario
FinFuncion

Salu2

Jdacking

  • Sin experiencia
  • *
  • Mensajes: 2
    • Ver Perfil
Re:Error en Pseint realizar suma binaria de números de n bits
« Respuesta #2 en: 14 de Octubre 2016, 00:24 »
Gracias por la respuesta
Dejé el pseudocódigo en binarios de 5 bits y así fue como funciono, porque con mas de 11 no :(

aquí el como dejé el pseudocodigo:

Código: [Seleccionar]
Algoritmo sin_titulo
Dimension A(5), B(5), C(6)
Escribir ("dame tu primer número")
leer x
Escribir ("dame tu segundo número")
leer x1
Para i=5 hasta 1 con paso -1 hacer
A(i)=x mod 2
x=trunc(x/10)
FinPara
para i=1 hasta 5 con paso 1
Escribir(A(i))
FinPara
Para i=5 hasta 1 con paso -1 hacer
B(i)=x1 mod 2
x1=trunc(x1/10)
FinPara
para i=1 hasta 5 con paso 1
Escribir(B(i))
FinPara
acarreo<-0
Para i=5 hasta 1 con paso -1 Hacer
Si A(i) + B(i) + acarreo=3 entonces
C(i+1)<-1
acarreo<-1
Sino
Si A(i) + B(i) + acarreo=2 entonces
C(i+1)<-0
acarreo<-1
Sino
Si A(i) + B(i) + acarreo=1 entonces
C(i+1)<-1
acarreo<-0
sino
Si A(i) + B(i) + acarreo=0 entonces
C(i+1)<-0
acarreo<-0
FinSi
FinSi
FinSi
FinSi
FinPara
C(1)<-acarreo
para i=1 hasta 6 con paso 1 hacer
escribir(C(i))
FinPara
FinAlgoritmo

Pantalla:


*** Ejecución Iniciada. ***
dame tu primer número
> 10101
dame tu segundo número
> 01101
1
0
0
0
1
0
*** Ejecución Finalizada. ***


si cambio el tamaño de los arreglos A y B a 20 y C a 21 cambiando tambien los ciclos ya no sirve :(
Código: [Seleccionar]
Algoritmo sin_titulo
Dimension A(20), B(20), C(21)
Escribir ("dame tu primer número")
leer x
Escribir ("dame tu segundo número")
leer x1
Para i=20 hasta 1 con paso -1 hacer
A(i)=x mod 2
x=trunc(x/10)
FinPara
Para i=20 hasta 1 con paso -1 hacer
B(i)=x1 mod 2
x1=trunc(x1/10)
FinPara
acarreo<-0
Para i=20 hasta 1 con paso -1 Hacer
Si A(i) + B(i) + acarreo=3 entonces
C(i+1)<-1
acarreo<-1
Sino
Si A(i) + B(i) + acarreo=2 entonces
C(i+1)<-0
acarreo<-1
Sino
Si A(i) + B(i) + acarreo=1 entonces
C(i+1)<-1
acarreo<-0
sino
Si A(i) + B(i) + acarreo=0 entonces
C(i+1)<-0
acarreo<-0
FinSi
FinSi
FinSi
FinSi
FinPara
C(1)<-acarreo
para i=1 hasta 21 con paso 1 hacer
escribir(C(i))
FinPara
FinAlgoritmo



Pantalla:


*** Ejecución Iniciada. ***
dame tu primer número
> 10101010101010101010
dame tu segundo número
> 10101001100110101011
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
*** Ejecución Finalizada. ***


 :( No entiendo.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Error en Pseint realizar suma binaria de números de n bits
« Respuesta #3 en: 19 de Octubre 2016, 20:56 »
Buenas, creo que no estás planteando bien el problema. Fíjate en este ejemplo en C, es mucho más breve de lo que tú planteas:

Código: [Seleccionar]
#include<stdio.h>

int main(){

    long int binary1,binary2;
    int i=0,remainder = 0,sum[20];

    printf("Enter any first binary number: ");
    scanf("%ld",&binary1);
    printf("Enter any second binary number: ");
    scanf("%ld",&binary2);

    while(binary1!=0||binary2!=0){
         sum[i++] =  (binary1 %10 + binary2 %10 + remainder ) % 2;
         remainder = (binary1 %10 + binary2 %10 + remainder ) / 2;
         binary1 = binary1/10;
         binary2 = binary2/10;
    }

    if(remainder!=0)
         sum[i++] = remainder;

    --i;
    printf("Sum of two binary numbers: ");
    while(i>=0)
         printf("%d",sum[i--]);

   return 0;
}


Ejemplo de resultado que devuelve el programa:

Enter any first binary number: 1100011
Enter any second binary number: 1101
Sum of two binary numbers: 1110000

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".