Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: h0oke en 31 Mayo 2009, 00:48 am



Título: Problema eliminacion elementos
Publicado por: h0oke en 31 Mayo 2009, 00:48 am
Aver si por aqui me pueden ayudar:

El enunciado consiste en borra los numeros de una lista que posean mayor cantidad de digitos pares que impares.

El problema que tengo es el siguiente:

N=4
array={1,2,3,4}
array con eliminaciones={1,3}  

N=10
array={1,2,3,4,5,6,7,8,9,10}
array con eliminaciones={1,3,4,6,7,9}  cuando tendria que ser:
array con eliminaciones={1,3,5,7,9,10}

Y otro error:
array={2,2,5}
array con eliminaciones={2,5}
Es decir cuando existen posiciones iniciales consecutivas, no asi en

array={5,2,2}
array con eliminaciones={5}


Código
  1. Private Sub Form_Load()
  2. cnt_p = 0
  3. cnt_i = 0
  4. Dim lista(100) As Integer
  5. Dim elim(100) As Integer
  6. Label1.Caption = "" 'Array
  7. Label2.Caption = "" 'Array con eliminaciones
  8. Label3.Caption = "" 'Posiciones a eliminar
  9. MsgBox "Inicializacion", vbOKOnly
  10. k = 0
  11. cant = InputBox("Cantidad: ")
  12. N = Val(cant)
  13. For i = 1 To N
  14.    entero = InputBox("Numero: ")
  15.    num = Val(entero)
  16.    lista(i) = num
  17. Next
  18. For i = 1 To N
  19.    Label1.Caption = Label1.Caption & lista(i) & ","
  20. Next
  21. For i = 1 To N
  22.    d_num = lista(i) 'Separo los digitos
  23.    While d_num <> 0
  24.        dig = d_num Mod 10
  25.        If dig Mod 2 = 0 Then 'Compruebo si son multiplos pares
  26.            cnt_p = cnt_p + 1
  27.        End If
  28.        If dig Mod 2 <> 0 Then
  29.            cnt_i = cnt_i + 1
  30.        End If
  31.        d_num = d_num \ 10
  32.    Wend
  33.    If cnt_p > cnt_i Then 'Si la cantidad de digitos pares es mayor a las impares
  34.        k = k + 1
  35.        elim(k) = i 'Array que contiene las posiciones
  36.    End If
  37.    cnt_p = 0
  38.    cnt_i = 0
  39.  
  40. Next
  41. For i = 1 To k
  42.    Label3.Caption = Label3.Caption & elim(i) & ","
  43. Next
  44. For i = 1 To k
  45.    pos = elim(i)
  46.    For j = pos To (N - 1)
  47.        lista(j) = lista(j + 1)
  48.    Next
  49.    N = N - 1
  50. Next
  51. For i = 1 To N
  52.    Label2.Caption = Label2.Caption & lista(i) & ","
  53. Next
  54. End Sub


Título: Re: Problema eliminacion elementos
Publicado por: h0oke en 31 Mayo 2009, 17:16 pm
Solucionado. ::)

Modificaciones:

Código
  1. If cnt_p > cnt_i Then
  2.     k = k + 1
  3.     elim(k) = i - cnt_elist
  4.     cnt_elist = cnt_elist + 1
  5. End If

Salu2!