Título: Ayuda: Código en Visual Basic 6.0
Publicado por: jduo en 19 Noviembre 2017, 01:13 am
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. :-\
Título: Re: Ayuda: Código en Visual Basic 6.0
Publicado por: engel lex en 19 Noviembre 2017, 02:15 am
#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
Título: Re: Ayuda: Código en Visual Basic 6.0
Publicado por: jduo en 19 Noviembre 2017, 02:37 am
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.
Título: Re: Ayuda: Código en Visual Basic 6.0
Publicado por: engel lex en 19 Noviembre 2017, 03:04 am
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
Título: Re: Ayuda: Código en Visual Basic 6.0
Publicado por: jduo en 19 Noviembre 2017, 13:24 pm
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
Título: Re: Ayuda: Código en Visual Basic 6.0
Publicado por: engel lex en 19 Noviembre 2017, 16:14 pm
Usa la lógica al programar estás dejando una variable al aire Aquí llegamos a una disyuntiva de interpretación calcule 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
Título: Re: Ayuda: Código en Visual Basic 6.0
Publicado por: Serapis en 20 Noviembre 2017, 00:57 am
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
|