• Lunes 12 de Mayo de 2025, 04:40

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Epa

Páginas: 1 ... 8 9 [10]
226
C/C++ / Re: Duda De Principiante
« en: Martes 9 de Enero de 2007, 00:26 »
Buenas

Citar
asi como veo que lo quieres usar seria mejor usar un enum .

un enum?  :blink:

pero el enum almacena constantes, o me equivoco?

tengo una base de datos (binaria) de 20.000 registros aprox, cada registro tiene 32 campos booleanos entre otros. Asique me parecio algo logico perder un poco de velocidad a cambio de ahorrarme 28 bytes por registro

Quisas estoy equivocado, si te parece asi te agradeceria q me lo digas, soy bastante nuevo en c/c++, y cosas como esta, entre tantas otras, en vb no existen  :ph34r:

Saludos

227
VBA / Re: Uso De Reportman
« en: Martes 9 de Enero de 2007, 00:07 »
Buenas.

Ni idea cual es el problema  :D
Pero puedes probar forzando a la ventana a restaurarse con la api SetWindowPlacement.
Si la ventana no carga los controles, o esta colgada, fijate si le pasas algun parametro q sea correcto, tambein prueba luego de abrirla, mostrar el ultimo error q se produjo.

No es un gran aporte pero ojala te ayude, saludos.

228
VBA / Re: Convertir Archivo Pdf A Txt
« en: Martes 9 de Enero de 2007, 00:00 »
Buenas.

Si te fijas en la carpeta del acrobat, hay una carpeta q se llama ActiveX, alli hay 4 dlls
Y una que se llama AcroPDF.dll, crea una preferencia a esa dll, es probable q ya este en la lista el nombre es "Adobe Acrobat 7.0 Type Library".
En esa dll tienes todas (o varias) de las funciones del acrobat, en la clase AcroPDDoc hay una fuincion "Save" puede q con esa puedas guardarlo como texto. Si no funciona, hay muchas funciones para pasar paginas o cuadros a texto, puedes ir pasando y guardando.

Espero te sirva.
Saludos

229
Visual Basic 6.0 e inferiores / Re: Necesito Ayuda...
« en: Lunes 8 de Enero de 2007, 23:45 »
Buenas.

Para ordenar los arhivos, si usas el nombre, puedes comparar los nombres como numeros, o sea con los operadores >, <, >=, <= esto te devolvera cual es el mas "grande" o sea, de su codigo ascii, en caso de que empiezen por la misma letra, compara la segundo y asi.
Sino puedes como mencionas ponerle un identificador y oredenarlo en base a eso.

En cuanto a la comparacion, q es lo que quieres comparar, atributos o datos. Si son datos ya depende de los datos que tengan. Y necesitas ver con que criterios compararlos. No es lo mismo comparar cualesquiera dos archivos.

230
C/C++ / Re: Duda De Principiante
« en: Viernes 5 de Enero de 2007, 00:29 »
Muchas gracias, justo lo q necesitaba ^^


Saludos

231
Visual Basic 6.0 e inferiores / Re: 1 != 1 ??
« en: Viernes 5 de Enero de 2007, 00:22 »
Muchas gracias.

Me ha sido de gran utilidad ese aporte.

Ya que es un problema numerico, pase el numero a un string de 1 byte y lo comparo como cadenas y fuinciona.

Gracias nuevamente.
Saludos

232
C/C++ / Duda De Principiante
« en: Jueves 4 de Enero de 2007, 20:12 »
Buenas.

Tengo una pequeña duda de los mapas de bits.

Si yo hago por ejemplo un mapa de bits con 8 variables bool de 1 bit cada una

Código: Text
  1.  
  2. struct MapaBits {
  3.    bool valor1:1;
  4.    bool valor2:1;
  5.    bool valor3:1;
  6.    bool valor4:1;
  7.    bool valor5:1;
  8.    bool valor6:1;
  9.    bool valor7:1;
  10.    bool valor8:1;
  11. }
  12.  
  13.  
Existe alguna forma de asignarle el valor a los 8 bits a partir de una variable de 1 byte, como un char.

Por ejemplo:
char a = '/126'
que en binario seria "01111110"

y que los boolean tomen los balores de los bits del char...
valor1 = false
valor2 = true
...
valor8 = false

Bueno, esa es mi duda.
Gracias de antemano
Saludos

233
Visual Basic 6.0 e inferiores / Re: 1 != 1 ??
« en: Jueves 4 de Enero de 2007, 19:55 »
Buenas, aqui pongo un poco mejor, el codigo.
Acabo de intentarlo con variables de tipo single, pero se pierde demasaiada precision, y necesito q sea todo exacto. Y Speed es una variable, no una constante, ya que puede variar dependiendo unas cosas.

Timer
Código: Text
  1.  
  2. Private Sub tmrMove_Timer()
  3.  
  4. nx = posX[CODE]
  5. ny = posY
  6.  
  7. With m_Input
  8. If actMov = D_NONE Then
  9.    
  10.       If (.Key(Key_RControl)) Or (.Key(Key_LControl)) Then
  11.         If .Key(Key_Left) Then
  12.           Look = Act_Look + L_WEST
  13.         ElseIf .Key(Key_Right) Then
  14.           Look = Act_Look + L_EAST
  15.         ElseIf .Key(Key_Down) Then
  16.           Look = Act_Look + L_SOUTH
  17.         ElseIf .Key(Key_Up) Then
  18.           Look = Act_Look + L_NORTH
  19.         End If
  20.       Else
  21.         If .Key(Key_Left) Then
  22.           Look = Act_Look + L_WEST
  23.           actMov = D_WEST
  24.           Call GetTile(D_WEST)
  25.         ElseIf .Key(Key_Right) Then
  26.           Look = Act_Look + L_EAST
  27.           actMov = D_EAST
  28.           Call GetTile(D_EAST)
  29.         ElseIf .Key(Key_Down) Then
  30.           actMov = D_SOUTH
  31.           Look = Act_Look + L_SOUTH
  32.           Call GetTile(D_SOUTH)
  33.         ElseIf .Key(Key_Up) Then
  34.           Look = Act_Look + L_NORTH
  35.           actMov = D_NORTH
  36.           Call GetTile(D_NORTH)
  37.         End If
  38.       End If
  39. Else
  40.     lastMov = actMov
  41.     Call GetTile(D_LAST)
  42. End If
  43. End With
  44.  
  45. End Sub
  46.  
  47.  

El timer llama al procedimiento GetTile() q solo hace unas comprobaciones y llama a Walk()

Estas son las variables
Código: Text
  1.  
  2. Public actMov As Integer
  3. Public lastMov As Integer
  4. Public Speed As Double
  5. Public Movement As Double
  6. Public posX As Double
  7. Public posY As Double
  8.  
  9.  


Código: Text
  1.  
  2. Public Sub Walk(Direction As Integer)
  3.   Select Case Direction
  4.  
  5.     Case D_NORTH
  6.       posY = posY - Speed
  7.       Movement = Movement + Speed
  8.      
  9.     Case D_SOUTH
  10.       posY = posY + Speed
  11.       Movement = Movement + Speed
  12.      
  13.     Case D_EAST
  14.       posX = posX + Speed
  15.       Movement = Movement + Speed
  16.      
  17.     Case D_WEST
  18.       posX = posX - Speed
  19.       Movement = Movement + Speed
  20.      
  21.     Case D_LAST
  22.       Select Case lastMov
  23.         Case D_NORTH
  24.           If 1 = Int(Movement) Then
  25.             Movement = 0
  26.             actMov = D_NONE
  27.             lastMov = D_NONE
  28.             Look = Act_Look + L_NORTH
  29.           ElseIf Movement = 0.3 Then
  30.             Look = Act_Look + L_NORTH + 1
  31.             posY = posY - Speed
  32.             Movement = Movement + Speed
  33.           ElseIf Movement = 0.3 Then
  34.             Look = Act_Look + L_NORTH + 2
  35.             posY = posY - Speed
  36.             Movement = Movement + Speed
  37.           Else
  38.             posY = posY - Speed
  39.             Movement = Movement + Speed
  40.           End If
  41.          
  42.         Case D_SOUTH
  43.           If 1 = Int(Movement) Then
  44.             Movement = 0
  45.             actMov = D_NONE
  46.             lastMov = D_NONE
  47.             Look = Act_Look + L_SOUTH
  48.           ElseIf Movement = 0.3 Then
  49.             Look = Act_Look + L_SOUTH + 1
  50.             posY = posY + Speed
  51.             Movement = Movement + Speed
  52.           ElseIf Movement = 0.6 Then
  53.             Look = Act_Look + L_SOUTH + 2
  54.             posY = posY + Speed
  55.             Movement = Movement + Speed
  56.           Else
  57.             posY = posY + Speed
  58.             Movement = Movement + Speed
  59.           End If
  60.          
  61.         Case D_EAST
  62.             If 1 = Int(Movement) Then
  63.               Movement = 0
  64.               actMov = D_NONE
  65.               lastMov = D_NONE
  66.               Look = Act_Look + L_EAST
  67.             ElseIf Movement = 0.3 Then
  68.               Look = Act_Look + L_EAST + 1
  69.               posX = posX + Speed
  70.               Movement = Movement + Speed
  71.             ElseIf Movement = 0.6 Then
  72.               Look = Act_Look + L_EAST + 2
  73.               posX = posX + Speed
  74.               Movement = Movement + Speed
  75.             Else
  76.               posX = posX + Speed
  77.               Movement = Movement + Speed
  78.             End If
  79.            
  80.         Case D_WEST
  81.           If 1 = Int(Movement) Then
  82.             Movement = 0
  83.             actMov = D_NONE
  84.             lastMov = D_NONE
  85.             Look = Act_Look + L_WEST
  86.           ElseIf Movement = 0.3 Then
  87.             Look = Act_Look + L_WEST + 1
  88.             posX = posX - Speed
  89.             Movement = Movement + Speed
  90.           ElseIf Movement = 0.6 Then
  91.             Look = Act_Look + L_WEST + 2
  92.             posX = posX - Speed
  93.             Movement = Movement + Speed
  94.           Else
  95.             posX = posX - Speed
  96.             Movement = Movement + Speed
  97.           End If
  98.       End Select
  99.   End Select
  100.   Debug.Print Movement
  101. End Sub
  102.  
  103.  

Los 0.3 y 0.6 en realidad son variables q dependen de speed, pero no hace ninguna diferencia.

Bueno, espero no se haga muy engorroso. Aver si alguien tiene idea q error estoy cometiendo.

En cuanto al valor de Movement lo imprimo directamente en la ventana inmediato, como tipo double y aparece "1" asique no creo q sea ese el problema

Bueno, eso es todo, gracias desde ya.
Saludos

234
Visual Basic 6.0 e inferiores / Re: Select Case Dudas De Uso
« en: Jueves 4 de Enero de 2007, 05:15 »
Buenas.

Mi aporte  :D

Código: Text
  1.  
  2. Private Sub Check1_Click(Index As Integer)
  3.   Static suma
  4.   Dim a As Byte
  5.   suma = 0
  6.   For a = 1 To 4
  7.     If Check1(a - 1).Value Then suma = suma + (10 * a)
  8.   Next
  9.   Print Str(suma)
  10. End Sub
  11.  
  12.  
Saludos

235
Visual Basic 6.0 e inferiores / Re: Leer Pixeles Directo Del Archivo De Imagen
« en: Jueves 4 de Enero de 2007, 05:03 »
:whistling:

me parece q no lei bien el post.

El archivo BMP tiene 4 partes:
1-cabecera de archivo
2-cabecera de bitmap
3-tabla de colores
4-bytes de imagen

los datos de las cabeceras son:

Código: Text
  1.  
  2. Bytes           Informacion
  3. 0-1              Letras BM
  4. 2-5              Tamaño del archivo
  5. 6-9              Reservado
  6. 10-13           Datos de imagen
  7. 14-17           Tamaño de la cabezera de bitmar
  8. 18-21           Anchura
  9. 22-25           Altura
  10. 26-27           Numero de planos
  11. 28-29           Tamaño de cada punto
  12. 30-33           Compresion
  13. 34-37           Tamaño de la imagen
  14. 38-41           Resolucion horizontal
  15. 42-45           Resolucion Vertical
  16. 46-49           Tamaño de la tabla de colores
  17. 50-53           Contador de colores importantes
  18.  
  19.  

para recuperar del archivo necesita recuperar datos como ancho y alto, resolucion, compresion y otras cosas, para poder interpretar bien los datos de la imagen. a menos q ya lo sepas y recuperes directamente la imagen. cuando abres el archivo te mueves a la posicion 53 + tamaño de la tabla de colores y tendras los bytes de imagen.

Saludos

236
Visual Basic 6.0 e inferiores / Re: Leer Pixeles Directo Del Archivo De Imagen
« en: Jueves 4 de Enero de 2007, 04:30 »
Buenas .
Sinceramente no se de donde es la funcion GetDIBits, aunque me paso algo similar. El problema es que mucha de estas funciones copian el el color directamente del monitor ( o sea de la memoria de imagen) por lo que si el pixel esta tapado o fuera del minitor no tomara bien el color.
Las dos opciones q tienes (creo, quisas hay mas) son leer directamente del fichero o de la memoria, cosa q no creo q sea sencillo en VB, investiga quisas con punteros puedas /ya q los punteros de vb son bastante limitados).

Espero te sirva, saludos.

237
Visual Basic 6.0 e inferiores / 1 != 1 ??
« en: Jueves 4 de Enero de 2007, 04:16 »
Buenas gentem tengo un problemita con una comparacion que me comio la cabeza varias horas y no logro entender cual es el problema.

Desde un timer se llama a una funcion q contiene ese codigo varias veces.
el problema es que Speed tiene el valor de 0.1, por lo que logicamente luego de 10 veces Movement tomara el valor de 1. sin embargo cuando toma ese valor pasa por alto el primer if hasta q Movement toma el valor de 1.1

Código: Text
  1.  
  2.           If 1 = Int(Movement) Then
  3.             Movement = 0
  4.             actMov = D_NONE
  5.             lastMov = D_NONE
  6.             Look = Act_Look + L_SOUTH
  7.           Else
  8.             posY = posY + Speed
  9.             Movement = Movement + Speed
  10.           End If
  11.  
  12.  

ya he intentado hacer un cast con Movement a una variable de tipo integer, crear una constante de valor 1 para la comparacion, de tipo entero y de tipo con coma flotante, compararlo de ambas maneras, pero no logro entender cual es el problema.

agregue al final de la funcion Debug.Print Movement y este el es resultado:

Código: Text
  1.  
  2.  0
  3.  0,1
  4.  0,2
  5.  0,3
  6.  0,4
  7.  0,5
  8.  0,6
  9.  0,7
  10.  0,8
  11.  0,9
  12.  1
  13.  1,1
  14.  0
  15.  
  16.  

Agradeceria enormemente cualquier ayuda.

Desde ya muchas gracias, saludos

238
Visual Basic para principiantes / Re: Ayuda: Lenguajes De Programación
« en: Miércoles 8 de Noviembre de 2006, 01:26 »
Buenas.

Me gustaria dejar mi opinion al respecto.

Para empezar, por lo menos en argentina, lo que sera tecnico de pc, no tiene relacion alguna con la programacion.
Las carreras que mas apuntan a eso, creo yo, con ingenieria en sistemas de iformacion (o ingenieria de software) o analista de sistemas.
Busca en internet los programas de las carreras y comparalos.

En cuanto a los lenguajes. No estoy de acuerdo con Soultaker. Todo es util, por algo se invento. Hay muchos lenguajes que son similares. Siempre es bueno saber lo mayor posible. Visual Basic es un buen lenguaje para comenzar a programar.
En mi opinion C/C++ es lo "mejor" aunque puede ser un poco complicado para empezar si no tienes experiencia.
Como te han mencionado, en internet hay muchos manueles utiles (el de "aprenda VB como si estubiese en primero no lo recomiendo) aunque si tienes la posibilidad compra un manual de carne y hueso (o papel :P), 2 de los cuales te puedo recomendar:
-Enciclopedia de Microsoft Visual Basic 6 de Francisco Javier Ceballos (realmente bueno)
-La Biblia de Visual Basic 6 (no se de quien es)

Bueno, espero te sirva mi aporte.
Saludos y buena suerte.

239
VB .NET / Re: Manejo De Cadenas Vb.net
« en: Martes 26 de Septiembre de 2006, 06:11 »
Buenas.

Quisas te puedan dar una mano en el foro de VB.NET  ;)


Aunque tambien podrias investigar un poco

Saludos

240
Visual Basic 6.0 e inferiores / Re: Unir Imagenes
« en: Martes 26 de Septiembre de 2006, 04:01 »
Buenas.

Segun mi opinion no es recomendable hacer lo que deceas, imaginate q haces una imagen de 200 megas, y la abres en un ordenador con 256 de ram y win xp, te imaginas lo q pasara.
Y por mas que sea una pc con muchas memoria, trabajar con imagenes tan grandes puede ser fastidioso.

Creo que si comentas q es lo q quieres hacer se puede hacer mas facil ayudarte.

Si por ejemplo quieres solo mostrar las imagenes como una sola, desde una aplicacion, puedes hacer una matriz con los nombres de las imagenes, y en una matriz de controles o en un control ir mostrando en la pantalla la cantidad de imagenes que entran. Entonces te desplasas sobre la matriz.
De este modo, solo almacenas en memoria las imagenes que estas viendo, y la matriz con los nombres, en vez de almacenar una imagen de cientos de megas.

Espero sirva, si quieres cuenta un poco q es lo q pretenes y se te pueda ayudar de otro modo.

Saludos

241
Visual Basic 6.0 e inferiores / Re: Error 91 Al Asignar Valor Del Tag De Un Formulario
« en: Martes 26 de Septiembre de 2006, 03:46 »
Bueno, aca dejo como lo solucione, q es bastante similar a tu funcion.

Espero que sea de utilidad para alguien.

Código: Text
  1.  
  2. Private Sub mnuEdicion_Click()
  3.   Dim frmTag As String
  4.  
  5.   On Error GoTo ErrHandler
  6.  
  7.   frmTag = Screen.ActiveForm.Tag
  8.  
  9.   If frmTag &#60;&#62; &#34;Main&#34; Then
  10.     mnuDeshacer.Enabled = True
  11.     ...
  12.   End If
  13.  
  14.   Exit Sub
  15.  
  16. ErrHandler:
  17.  
  18.   If Err.Number = 91 Then
  19.     mnuDeshacer.Enabled = False
  20.     ...
  21.   End If
  22.  
  23. End Sub
  24.  
  25.  

Nota: obviamente los puntitos no van, es solo q si pongo todos los menus, quedaria bastante largo.

242
Visual Basic para principiantes / Re: Texbox Que Solo Admita Números
« en: Martes 26 de Septiembre de 2006, 03:35 »
Buenas.

Aqui te dejo un codigo para validar entrada de datos.
En caso de que quieras admitir mas caracteres, los agregas a la variable letras y le cambias el tamaño segun la cantidad de caracteres que almacena


Dim Letras As String * 11 'La variable que contendra los caracteres admitidos
Dim Car As String 'La variable que recuperara el caracter ingresado

Private Sub Form_Load()
  Letras = "0123456789" & vbBack 'Se guardan los valores admitidos en la variable
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
  Car = Chr(KeyAscii) 'Se guarda el caracter ingresado, Chr convierte un valor en su
                                 'respectivo caracter
 
  If InStr(1, Letras, Car) = 0 Then 'Si el caracter no se encuentra dentro de los
    KeyAscii = 0                            'admitidos
  End If
End Sub


Siempre es bueno usar la propiedad .text para comparar, cambiar o recuperar datos porque sino haces referencia al control en si y no a su contenido, asi como usar las comillas ya que sino, estaras comparando una cadena de texto con un numero, que aveces puede traer problemas

If txtTalla.text = "0" then
...


Bueno, eso es todo, espero te sirva de algo
Saludos

243
Visual Basic 6.0 e inferiores / Re: Error 91 Al Asignar Valor Del Tag De Un Formulario
« en: Domingo 24 de Septiembre de 2006, 22:44 »
Ya encontre una solucion.  :lol:

Muchas gracias de todos modos.   :)

244
Dudas informáticas / Re: Duda Ilegal
« en: Domingo 24 de Septiembre de 2006, 00:43 »
Buenas.

Segun mi opinion.

Mas del 80% de los usuarios de PC, son gente que no entiende lo que es una pc. Y menos que menos de seguridad en una pc.

Hoy en dia el mercado de xDSL esta creciendo muy rapidamente, por lo que la gente esta mas timpo conectada (al no tener que pagar telefono)

Si simplemente haces un escaneo de IP's de en el rango de IPs de tu servidor, descubriras que es impresionante la cantidad de gente que tiene compartidos los discos duros, y mas sorprendente aun, los que no tienen contraseña de entre esos.

245
Hardware / Re: Mi Pc No Arranca
« en: Domingo 24 de Septiembre de 2006, 00:29 »
Buenas.

Como te mensionaron prueba resetearle el Bios.

Busca el manual de tu mother y fijate cuales son las agujas de la CMOS, y las aislas durante un par de segundos.

Si no pasa nada prueba ponerle otra fuente, es muy importante, ya que un transistor o resistencia puede estar dañado y con un colo cable que no envie el voltaje necesario puede causar mucho problemas.

La bios si se puede recargar, pero debes buscar a alguien que tenga experiencia al respecto, aunque puede salir mas barato un mother nuevo.

Saludos

246
Visual Basic 6.0 e inferiores / Re: Error 91 Al Asignar Valor Del Tag De Un Formulario
« en: Domingo 24 de Septiembre de 2006, 00:13 »
Buenas.
Gracias por el consejo, pero no sirve.
Probe con IsObject, IsEmpty e IsNull
Pero devuelven que si hay un abjeto y es el MDI, sin embargo sigue dando el error.

Gracias.

247
Visual Basic para principiantes / Re: Problemas Con Visual, Access97 Y Access2000
« en: Sábado 23 de Septiembre de 2006, 04:23 »
Microsoft DAO 3.51 Object Library  <--- Access 97
Microsoft DAO 3.6 Object Library    <--- Access 2000

248
VBA / Re: Como Grabar Un Txt... Antes De Apagar Windows
« en: Sábado 23 de Septiembre de 2006, 04:03 »
Cuando windows se cierra, manda un mensaje a las aplicaciones abiertas para cerrarlas, lo que puedes hacer es interseptar este mensaje con subclasificacion.
Cuando tu aplicacion recibe el mensaje (si no me equivoco es WM_CLOSE) guarda la hora, y se cierra.
A la aplicacion la puedes hacer invisible con la API SetWindowPlacement

Saludos

249
Visual Basic 6.0 e inferiores / Re: Problema Con Resolucion
« en: Sábado 23 de Septiembre de 2006, 03:32 »
Buenas.

No se entiende bien cual es el problema. Se corta solo tu aplicacion o todas, la barra de tareas tambien se corta? Si es asi, fijate cambiar la resolucion y la frecuencia del monitor.
Si el problema es solo de tu aplicacion prueba establecer el tamaño con la API SetWindowPos. O bien con los valores de Screen.Width y Screen.Height.

Saludos

250
Visual Basic 6.0 e inferiores / Error 91 Al Asignar Valor Del Tag De Un Formulario
« en: Sábado 23 de Septiembre de 2006, 02:48 »
Buenas gente.
Me surgio un problemita y me prgunte si alguien me podia dar una mano.

Tengo un editor de texto de multiples instancias.
El formulario MDI tiene todos los menus y quiero que si no hay ningun formulario de texto abierto, algunos de los menus se inhabiliten, para lo que hice lo siguiente.

El formulario MDI tiene como tag "Main"
Los formularios de texo tienen como tag:
En caso de que sea un nuevo docuemento, "Nuevo"
Caso que sea un archivo existente la ruta del archivo.

Luego en el evento click del menu (p.e.) Edicion

Dim frmTag as String

frmTag = Screen.ActiveForm.Tag

If frmTag = "Main"
...
Elseif frmtag = "Nuevo"
...
Else
...
End if

Pero cuando no hay ningun formulario abierto y llega a la linea:
frmTag = Screen.ActiveForm.Tag
Genera un error 91
"La Variable de Tipo Object o la variable de bloque With no está establecida"

Sin embargo, si eligo depurar el error y pongo el cursor sobre Screen.ActiveForm.Tag  
me muestra que tiene el valor "Main"

Probe declarar una variable objeto como formulario, y asignarle el formulario activo para luego guardar el tag, sin embargo genera el mismo error cuando intento asignarlo.

Espero agluien tenga una idea de como solucionarlo.

Gracias de antemano.
Saludos

Páginas: 1 ... 8 9 [10]