Ayuda: Código en Visual Basic 6.0

Iniciado por jduo, 19 Noviembre 2017, 01:13 AM

0 Miembros y 2 Visitantes están viendo este tema.

jduo

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. :-\

engel lex

#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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jduo

#2
No funciona.. aquí el código

Código (vb) [Seleccionar]

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.

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jduo

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 (actionscript) [Seleccionar]
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


engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Serapis

#6
Te corrijo el código in situ...

Código (vb) [Seleccionar]

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