Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: jduo en 19 Noviembre 2017, 01:13 am



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
Código:
#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

Código
  1. Private Sub Form_Load()
  2.  
  3. Dim numero As Integer
  4. Dim suma As Integer
  5. Dim par As Boolean
  6. Dim digito As Integer
  7.  
  8.  
  9.  
  10. numero = InputBox("Introduce un numero: ")
  11.  
  12. par = False
  13. suma = 0
  14.  
  15.    While numero > 0
  16.  
  17.        digito = numero Mod 10
  18.  
  19.        If digito Mod 10 = 0 Then
  20.        suma = suma + digito
  21.  
  22. par = True
  23.  
  24.        numero = numero / 10
  25.        End If
  26.    Wend
  27.  
  28.  
  29.        MsgBox ("La suma de los digitos pares han sido: " & suma)
  30.  
  31.  
  32.  
  33. End Sub
  34.  
  35.  


[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...

Código
  1. Private Sub Form_Load()
  2.  
  3. Dim numero As Integer
  4. Dim suma As Integer
  5. Dim par As Boolean
  6. Dim digito As Integer
  7.  
  8.  
  9.  
  10. numero = InputBox("Introduce un numero: ")
  11.  
  12. par = False
  13. suma = 0
  14.  
  15.    While numero > 0
  16.  
  17.        digito = numero Mod 10
  18.  
  19.        If digito Mod 2 = 0 Then
  20.        suma = suma + digito
  21.  
  22. par = True
  23.  
  24.        numero = numero / 10
  25.        End If
  26.    Wend
  27.  
  28.  
  29.        MsgBox ("La suma de los digitos pares han sido: " & suma)
  30.  
  31.  
  32.  
  33. 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
Citar
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...

Código
  1. Private Sub Form_Load()
  2.    Dim numero As Integer, suma As Integer, digito As Integer ' , par As Boolean no hace falta
  3.  
  4.    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'
  5.    'par = False
  6.    'suma = 0  con la declaración ya se establece el valor a 0.
  7.    Do While (numero > 0)
  8.        digito = (numero Mod 10)
  9.        If ((digito And 1) = 0) Then ' "mod 2" es lo mismo que "and 1", pero así mucho más rápido
  10.            suma = (suma + digito)
  11.            'par = True
  12.        End If
  13.        numero = (numero \ 10) ' esta línea debe quedar fuera del condicional
  14.        ' se debe ejecutar si o si en cada ciclo, para tener acceso al siguiente dígito
  15.        ' además debe ser "\" (una división entera) no "/"
  16.        ' ...O bien eliminar los decimales con: numero = Int(numero / 10)
  17.        ' porque dejará decimales y al ser 'numero' declarado entero forzará un redondeo que falsea el resultado...
  18.    Loop
  19.  
  20.    MsgBox ("La suma de los digitos de valor par es: " & suma)
  21. End Sub
  22.