Numeración en líneas de un cuadro de texto |
Responder |
Autor | ||
Adrianet
Habitual Unido: 26/Marzo/2015 Localización: Valencia Estado: Sin conexión Puntos: 135 |
Tema: Numeración en líneas de un cuadro de texto Enviado: 12/Septiembre/2022 a las 12:36 |
|
Hola amigos del foro. Hoy vengo a trasladarles un pequeño problema que me ha surgido en el código de un programa de números que tengo entre manos. He intentado cambiar varias veces los bucles pero no coge bien la numeración de los "i", cogiendo el 1 como primero y terminando en el último elemento del array. Comentar que desde mi último post, he estado estudiando la utilización de matrices o arrays, y practicando con diversos ejemplos (sobre todo del tema de "juegos con números"), y he comprobado, como decían fcoval y Mihura que son muy interesantes y prácticos para solucionar ciertos problemas con valores generados dinámicamente.... en fin paso a pegar estas líneas, donde expongo las líneas de código que utilizo y el formato del formulario que empleo, ... EXTRAER PRIMOS Y NO PRIMOS DE UNA LISTA DE 10 NUMEROS CONSECUTIVOS. Dim i As
Integer, j As Integer, cont As Integer Dim xnum
As Integer Dim
listanum(10) As Integer Dim
Primos(10) As Integer Dim
NoPrimos(10) As Integer Dim
primernumero As Integer Private Sub cmdInsertar_Click() primernumero = InputBox("Introduce el primer número de la lista...") For i = 0 To 10 - 1 listanum(i) = primernumero + i TxtNumeros.Value = TxtNumeros.Value &
i + 1 & "- " & listanum(i) & vbCrLf Next i End Sub '------------------------------------------- Private
Sub cmdCalcular_Click() Dim
listanum2(10) As Integer
For i = 0 To 10 - 1 listanum2(i) = listanum(i) Next i
For i = 0 To 10 - 1 cont = 0 xnum = listanum2(i) For j = 1 To xnum If (listanum2(i) Mod j = 0) Then cont = cont + 1 End If Next j If cont = 2 Then Primos(i) = listanum2(i) Else NoPrimos(i) = listanum2(i) End If Next i For i = 0 To 10 - 1 If Primos(i) <> 0 Then TxtPrimos.Value = TxtPrimos.Value & i
+ 1 & "- " & Primos(i) & vbCrLf End If If NoPrimos(i) <> 0 Then TxtNoPrimos.Value = TxtNoPrimos.Value
& i + 1 & "- " & NoPrimos(i) & vbCrLf End If Next i End Sub
‘********************************** Botones INSERTAR CALCULAR 1- 10 2-
11 1- 10 2- 11 4- 13 3- 12 3- 12 8-
17 5- 14 4- 13 10- 19 6- 15 5- 14 7- 16 6- 15 9- 18 7- 16 8- 17 9- 18 10- 19
‘***********************************************
No consigo que numere bien los cuadros de texto de los primos y noPrimos: 2- 13 2- 12 3- 17 3- 14 4- 19 4- 15 5- 16 6- 18 He tratado de aplicar estas líneas, … pero tampoco funciona, sigue haciendo lo de antes, .. p2 =
UBound(Primos()) np2 = UBound(NoPrimos()) For i = 0 To p2 If Primos(i) <> 0 Then TxtPrimos.Value = TxtPrimos.Value & i
+ 1 & "- " & Primos(i) & vbCrLf End If Next i For i = 0 To np2 If NoPrimos(i) <> 0 Then TxtNoPrimos.Value = TxtNoPrimos.Value
& i + 1 & "- " & NoPrimos(i) & vbCrLf End If Next i '-------------- Puede ser que el error o falta de código sea elemental, pero no consigo encotrarlo. Agradecería su ayuda, Saludos a todos. Adrián.
|
||
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14734 |
Enviado: 12/Septiembre/2022 a las 18:26 | |
Como decía -Marta-, un código no es más que un montón de líneas con instrucciones colocadas con cierta gracia para que nuestra máquina haga lo que queremos.
Pero en realidad no es así: las instrucciones harán lo que le DIGAMOS que haga, que no siempre coincide con lo que QUEREMOS que haga. En este caso hace exactamente lo que pides. Los valores de i siempre iran desde el límite inferior(LBound) del array hasta el límite superior (UBound). Creo que estás complicando en exceso el código. Yo lo plantearía así: - Solicitar el primer numero - Bucle de 0 a 9 - En cada iteración: + actualizar la lista de numeros + mirar si el número es primo (una función externa) + si lo es, actualizar la lista de primos; si no lo és, la de No-primos El código seria parecido a esto:
Editado: ese código almacena el contenido en variables de texto. Deberás traspasar (o cambiar) las variables a los cuadros de texto adecuados. Por otro lado tenemos la función que devuelve si es primo o no un número pasado como argumento:
Escrito del tirón. Un saludo Editado por xavi - 12/Septiembre/2022 a las 18:28 |
||
Adrianet
Habitual Unido: 26/Marzo/2015 Localización: Valencia Estado: Sin conexión Puntos: 135 |
Enviado: 13/Septiembre/2022 a las 10:31 | |
Hola Xavi, gracias por responder. Tu repuesta es sencillamente genial, simple y directa. Nosotros, los aprendices, le damos mil vueltas al asunto, y llenamos la hoja con líneas de código para conseguir un resultado (muchas veces imperfecto); en cambio vosotros, los maestros, nos asombráis con vuestra sencilla manera de resolver las cosas. Ya he probado tu código para mi ejemplo, y funciona genial. La cuestión de la numeración en los dos cuadros de texto (para los primos y para los no primos) no se puede conseguir, pero no importa demasiado, ya que es esta un cuestión más estética, de presentación en pantalla, que otra cosa. En tu código sólo utilizas un array para recoger y presentar los 10 números, y el resto de acciones se resuelven sin necesidad de ellos. En cambio yo utilizaba cuatro. En fin, tu respuesta me ha aportado una lección de perspectiva y resolución. Gracias. Por mi parte, nada más que añadir, quedando totalmente resuelto el asunto de este post. Saludos a todos. Adrián. |
||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3859 |
Enviado: 13/Septiembre/2022 a las 11:06 | |
¿Qué parte es la que no se puede conseguir? Igual si es posible si nos dices donde te falla... o donde no es exactamente como quieres. Un saludo. Luis
|
||
El Búho es un pajarraco
|
||
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14734 |
Enviado: 13/Septiembre/2022 a las 11:26 | |
Creo que mi código devuelve, para cada cadena de primos/no-primos tanto el número como su posición dentro de la secuencia inicial.
Pero si te vale, perfecto. Por cierto: no utilizo ningún array ;-) Un saludo
|
||
Adrianet
Habitual Unido: 26/Marzo/2015 Localización: Valencia Estado: Sin conexión Puntos: 135 |
Enviado: 13/Septiembre/2022 a las 12:36 | |
Hola Ibuluz, A continuación pego el código final que estoy usando en el ejemplo ( que es de Xavi, adaptado con los nombres de mis variables) Extraer primos y
no primos de una lista de 10 números consecutivos. Option
Compare Database Dim i As
Integer, j As Integer, cont As Integer Dim xnum
As Integer Dim
listanum(10) As Integer Dim Primos(10) As Integer Dim NoPrimos(10) As Integer Dim numero As Integer Private Sub cmdInsertar_Click() Numero = InputBox("Introduce el primer número de la lista...") For i = 0 To 9 listanum(i) = Numero + i TxtNumeros.Value = TxtNumeros.Value &
i + 1 & "- " & listanum(i) & vbCrLf If Esprimo(Numero + i) Then TxtPrimos.Value = TxtPrimos.Value
& i + 1 & "- " & Numero + I & vbCrLf Else TxtNoPrimos.Value = TxtNoPrimos.Value & i
+ 1 & "- " & Numero + I & vbCrLf End If Next i End Sub Function EsPrimo(Numero As Integer) As Boolean Dim l As Integer Dim lngCuentaCeros As Integer For l = 1 To Numero If Numero Mod l = 0
Then lngCuentaCeros = lngCuentaCeros +
1 End If Next l EsPrimo = (lngCuentaCeros = 2) End Function esto es lo que ofrece el código: Cuadros de texto: 1- 10 2-
11 1- 10 2- 11 4- 13 3- 12 3- 12 8-
17 5- 14 4- 13 10- 19 6- 15 5- 14 7- 16 6- 15 9- 18 7- 16 8- 17 9- 18 10- 19 ‘*********************************************** No consigo que numere bien los cuadros de texto de los primos y noPrimos: Primos: 1- 11 NoPrimos: 1- 10 2- 13 2- 12 3- 17 3- 14 4- 19 4- 15 5- 16 6- 18 |
||
Adrianet
Habitual Unido: 26/Marzo/2015 Localización: Valencia Estado: Sin conexión Puntos: 135 |
Enviado: 13/Septiembre/2022 a las 12:43 | |
Hola Xavi,.. Tienes toda la razón, no usas ningún array, ... tal y como está tu línea de código: strNumeros = strNumeros & i + 1 &
"-" & lngNumero + i & vbCrLf listanum(i) = Numero + i TxtNumeros.Value = TxtNumeros.Value &
i + 1 & "- " & listanum(i) & vbCrLf
Disculpa por mi error de apreciación y gracias de nuevo. Saludos |
||
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14734 |
Enviado: 13/Septiembre/2022 a las 13:41 | |
Vale. Yo entendí que querías mostrar la posición de cada numero en el conjunto "completo" cuando, simplemente, quieres ordenarlos de 1 a n dentro de cada lista.
Yo crearía 2 contadores y los incrementaría en cada evaluación de primo/no-primo. Ese contador es el que utilizaria en lugar del "& i + 1" que aparece antes de mostrar el numero. Además, en tu código, podrías eliminar todos los Array sin problemas.
|
||
Adrianet
Habitual Unido: 26/Marzo/2015 Localización: Valencia Estado: Sin conexión Puntos: 135 |
Enviado: 13/Septiembre/2022 a las 13:54 | |
Muy cierto, lo que dices en efecto, puedo hacer For i = 0 To 9 TxtNumeros.Value = TxtNumeros.Value & i + 1 & "- " & Numero + i & vbCrLf Next i y no uso el array. Voy a ver como aplico tu consejo de los dos contadores, y resuelvo lo de la numeración de los numeros obtenidos como resultado en primos y no primos. Un saludo Adrián |
||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3859 |
Enviado: 13/Septiembre/2022 a las 15:27 | |
La misma función de Xavi pero con las numeraciones que quieres
Dim i As Integer Dim iNopri As Integer Dim iSiPri As Integer Dim strNumeros As String Dim strPrimos As String Dim strNoPrimos As String lngNumero = CLng(InputBox("Dame primer numero")) iNopri = 0 iSiPri = 0 For i = 0 To 9 strNumeros = strNumeros & i + 1 & "-" & lngNumero + i & vbCrLf If EsPrimo(lngNumero + i) Then strPrimos = strPrimos & iSiPri + 1 & "-" & lngNumero + i & vbCrLf iSiPri = iSiPri + 1 Else strNoPrimos = strNoPrimos & iNopri + 1 & "-" & lngNumero + i & vbCrLf iNopri = iNopri + 1 End If Next i Un saludo.
Editado por lbauluz - 13/Septiembre/2022 a las 15:28 |
||
El Búho es un pajarraco
|
||
Adrianet
Habitual Unido: 26/Marzo/2015 Localización: Valencia Estado: Sin conexión Puntos: 135 |
Enviado: 14/Septiembre/2022 a las 08:02 | |
Hola Ibauluz Sí, efectivamente, eso mismo que tu has hecho lo hice anoche, ... siguiendo las indicaciones de Xavi. Gracias, de todas formas por tu aportación en este post. Bueno, ahora sí que creo que queda el tema cerrado. Si me permiten, pego aquí el código, tal y como lo tengo en mi formulario. Este código, ofrecido por el maestro Xavi, es la solución simplificada al código que yo implementaba en un principio, complicándome la cosa al utilizar varios arrays, y que sin utilizarlos muestra el resultado de una manera muy eficiente. Gracias Xavi. ,---------------------------------------------------- EXTRAER PRIMOS Y
NO PRIMOS DE UNA LISTA DE 10 NUMEROS CONSECUTIVOS. Option Compare Database Dim i As
Integer, j As Integer, Numero As Integer Dim iprimo As Integer, inoprimo As Integer Private Sub cmdCalcular_Click() Numero = InputBox("Introduce el primer número de la lista...") iprimo =
0 inoprimo
= 0
For i = 0 To 9 TxtNumeros.Value = TxtNumeros.Value &
i + 1 & "- " & Numero + i & vbCrLf
If EsPrimo(Numero + i) Then TxtPrimos.Value = TxtPrimos.Value & iprimo + 1 & "- " & Numero + i & vbCrLf iprimo = iprimo + 1 Else TxtNoPrimos.Value = TxtNoPrimos.Value & inoprimo + 1 & "- " & Numero + i & vbCrLf inoprimo = inoprimo + 1 End If Next i End Sub
Function
EsPrimo(Numero As Integer) As Boolean Dim i As Integer Dim CuentaCeros As Integer For i = 1 To Numero If Numero Mod i = 0 Then CuentaCeros = CuentaCeros + 1 End If Next i EsPrimo = (CuentaCeros = 2) End Function Saludos a todos los miembros del foro. Adrián. |
||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |