Buenas tardes, me gustaría ver si alguien me pudiera echar una mano.
Me ponen una lista de ejercicios y el último dice así.
Escribe un programa que, dado un número entero, calcule la suma de todos sus dígitos que sean pares. Para extraer los dígitos usaremos un bucle que divida X por 10 sucesivamente. El resto de cada división corresponde a cada uno de los dígitos.
Estoy dándome cabezazos y no sé donde estoy fallando...
Gracias de antemano.
Un saludo. :-\
#numero a procesar
entero numero = 1203918273981723
#donde se almacena el resultado
entero suma = 0
#para saber si es par o no el numero de digito
booleano par = falso
#ciclo
mientras numero mayor que 0:
#Sacamos el ultimo diigito
entero digito = modulo(numero , 10)
#si es par lo agregamos a la sumatoria
si par: suma = suma + digito
#negamos par para que invierta su contenido (verdadero a falso y viceversa)
par = not par
#dividimos el numero entre 10 para rodarlo una posicion
numero = numero / 10
fin mientras
No funciona.. aquí el código
Private Sub Form_Load()
Dim numero As Integer
Dim suma As Integer
Dim par As Boolean
Dim digito As Integer
numero = InputBox("Introduce un numero: ")
par = False
suma = 0
While numero > 0
digito = numero Mod 10
If digito Mod 10 = 0 Then
suma = suma + digito
par = True
numero = numero / 10
End If
Wend
MsgBox ("La suma de los digitos pares han sido: " & suma)
End Sub
[MOD] usar etiquetas GeSHi para publicar código.
la linea 19 carece de sentido, no se de donde lo sacaste, igual que la 22
en la 19 ves si es par, es la 22 niegas el valor de par
Correcto llevas razón engel, cambio el 10 por el 2 para saber si es par o no, pero no entiendo al línea 22, cuando ejecuto el código; introduce el usuario 44 devuelve 8, aparentemente funciona pero cuando introduzco 88 se queda colgado...
Private Sub Form_Load()
Dim numero As Integer
Dim suma As Integer
Dim par As Boolean
Dim digito As Integer
numero = InputBox("Introduce un numero: ")
par = False
suma = 0
While numero > 0
digito = numero Mod 10
If digito Mod 2 = 0 Then
suma = suma + digito
par = True
numero = numero / 10
End If
Wend
MsgBox ("La suma de los digitos pares han sido: " & suma)
End Sub
Usa la lógica al programar estás dejando una variable al aire
Aquí llegamos a una disyuntiva de interpretación
Citarcalcule la suma de todos sus dígitos que sean pares.
Puede ser la suma de los dígitos cuya
posición sea par (la que estoy haciendo) o la suma de los dígitos cuyo valor sea par
Define un camino y armalo, pero no a medio de ambos
Te corrijo el código in situ...
Private Sub Form_Load()
Dim numero As Integer, suma As Integer, digito As Integer ' , par As Boolean no hace falta
numero = InputBox("Introduce un numero: ") ' si ofrece un valor superior a 32767 generará un error de desbordamiento, mejor si lo declaras como 'long', en vez de 'integer'
'par = False
'suma = 0 con la declaración ya se establece el valor a 0.
Do While (numero > 0)
digito = (numero Mod 10)
If ((digito And 1) = 0) Then ' "mod 2" es lo mismo que "and 1", pero así mucho más rápido
suma = (suma + digito)
'par = True
End If
numero = (numero \ 10) ' esta línea debe quedar fuera del condicional
' se debe ejecutar si o si en cada ciclo, para tener acceso al siguiente dígito
' además debe ser "\" (una división entera) no "/"
' ...O bien eliminar los decimales con: numero = Int(numero / 10)
' porque dejará decimales y al ser 'numero' declarado entero forzará un redondeo que falsea el resultado...
Loop
MsgBox ("La suma de los digitos de valor par es: " & suma)
End Sub