Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Jdacking 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 ;)
-
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:
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
-
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:
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 :(
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.
-
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:
#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