• Sábado 27 de Abril de 2024, 05:16

Autor Tema:  elevar al cuadrado los elementos de un array  (Leído 5924 veces)

hanada

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
elevar al cuadrado los elementos de un array
« en: Viernes 28 de Mayo de 2010, 04:47 »
0
HOLA¡ :hola:
Soy nueva aqui y quiero ver si me pueden ayudar con un codigo:
se supone que tengo que elevar al cuadrado 10 numeros que se introducen en un textbox y mostrarlos en un listbox
utilizando arrays en visual basic 6.0

pero me sale un error sobre variables mal definidas o algo asi
este es mi codigo:

Option Explicit
Dim NUMERO(10) As String
DIM RESULTADO(10) AS INTEGER
DIM N AS INTEGER
Private Sub cmdAGREGAR
If Len(Trim(Text1.Text)) = 0 Then
MsgBox ("DEBE INTRODUCIR UN NUMERO")
Text1.SetFocus
ElSE
Dim I As Long
Dim TOTAL As Long
For I = 1 To UBound(NUMERO)
If Len(Trim(NUMERO(I))) > 0 Then
TOTAL= TOTAL + 1
NUMERO= Text1.Text
N=VAL(NUMERO(TOTAL+1))
RESULTADO(TOTAL+1)=N*N
End If
Next I
Text1.Text = ""
Text1.SetFocus
End If
End Sub
Private Sub cmdMOSTRAR
Dim I As Integer   
For I = 1 To UBound(NUMERO)
If Len(Trim(NUMERO(I))) > 0 Then
List1.AddItem RESULTADO
End If
Next I
End Sub

 
de antemano muchas gracias por sus sugerencias

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: elevar al cuadrado los elementos de un array
« Respuesta #1 en: Viernes 28 de Mayo de 2010, 15:29 »
0
Como tienes el código sin indentar da pereza leerlo. He hallado algunos errores incluído conceptuales...
La variable 'numero', es una matriz, no puedes asignar un valor único a una matriz completa, sino que debes establecerlo a elemento en una posición concreta.

Código: Visual Basic
  1. '  Esto no es válido:
  2. NUMERO = Text1.Text
  3.  
  4. '  Esto si es válido:
  5. NUMERO(i) = Text1.Text
  6.  
  7.  ' y  Esto también es válido:
  8. NUMERO(6) = Text1.Text
  9.  

Luego hay errores conceptuales, por ejemplo,  estableces una matriz de 11 elementos pero luego sólo usas 10. Las matrices declaradas sin specificar su elemento inferor se basan en la declaración Option Base, que por defecto (cuando se omite) es 0.
Entonces si tu dices
Código: Visual Basic
  1.  
  2. Dim x(10)  ' va del elemento 0 al 10, por que option base no se estableció, por defecto es 0
  3. dim x(1 to 10) ' va del elemento 1 al 10, por que lo he declarado explícitamente
  4. dim x(-5 to 5) ' va del eleemnto -5 al elemento 5, por que lo he declarado explícitamente
  5.  
  6.  

Ahora si yo establezco en el código:
Código: Visual Basic
  1.  
  2.    Option base 1
  3. Dim x(10)  ' va del elemento 1 al 10, por que option base se estableció en 1
  4. dim x(0 to 10) ' va del elemento 0 al 10, por que lo he declarado explícitamente
  5. dim x(-5 to 5) ' va del eleemnto -5 al elemento 5, por que lo he declarado explícitamente
  6.  
  7.  

Luego cometes otro error, si tienes que mostrar 10 textos, es correcto hacer un bucle con ese número de iteraciones, pero el textbox sólo se establece 1 vez antes de que tu ejecutes tu código. Esto no es consecuente. si el valor introducido fue 5, toda la matriz tendrá el mismo resultado, porque textbox1.text no cambia.

La solución: o bien pones un textbox por cada elemento de la matriz, o bien solicitas el texto mediante inputbox, tesoluciono el problema precisamente usando este último método..
Código: Visual Basic
  1.  
  2. Dim RESULTADO(1 To 10) As Long
  3. Dim N As Integer
  4.  
  5. Private Sub cmdAGREGAR_Click()
  6.     Dim I As Byte
  7.     Dim txt As String
  8.    
  9.     For I = 1 To UBound(NUMERO)
  10.         Do
  11.             txt = InputBox("Introduce un número...entre -32767 y 32767", "elemento " & I & " de 10", I)
  12.             If Abs(Val(txt)) > 32767 Then
  13.                 txt = ""
  14.             End If
  15.         N = Val(txt)
  16.         Loop While N = 0
  17.         RESULTADO(I) = N * N
  18.     Next I
  19. End Sub
  20.  
  21.  

He hecho varios cambios, fíjate en porqué los he hecho...
La matriz Numero sobra ya, si recogemos los valores al momento de usarlos.
La matriz resultado de ha dmensionado desde 1 a 10 elementos, para ser coherentes.
El texto se recoge con inputbox, puesto que la variable es un entero, el texto sólo es aceptado si el texto está dentro del rango de entero y ese valor es distinto de 0 (esta última restricción habría que pensársela ya que 0 es un número válido).
La matriz resultado se ha declarado como long, porque si se declara como integer cuando hallemos el cuadrado de ciertos valores provocará desbordamiento.
La variable de contador i, se declaró como byte, sólo utiliza un rango 1-10, suficiente para su contenido.

Un bucle do...loop no optimizado controla que se introduzca un texto válido. Sería preferible usar la expresión if isnumeric(txt) luego... también te recuerdo que -32768 es un valor integer lo mismo que 0. Perfeccionar el método es cosa a tu esfuerzo.
....etc...
«Ma non troppo»
----> ModoVacaciones = False<----

hanada

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: elevar al cuadrado los elementos de un array
« Respuesta #2 en: Viernes 28 de Mayo de 2010, 22:19 »
0
Gracias por contestar, si no tengo el codigo indentado(o como se diga) es por que aun no sabia  como hacerlo  :brickwall:  pero bueno lo de pedir los numeros en un ciclo no me esta permitido, afuerza tiene que ser con el textbox y mostrarlos en un listbox
oh y tambien es obligatoria la matriz numero pero ya me di una mejor idea de como hacerlo
gracias :good: