![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Números impares desde 1 hasta 1000
Hola, necesito ayuda con el siguiente ejercicio:
Escribe un programa que imprima en un objeto Memo los números impares desde 1 hasta 1000. Este es el código que he construido:
Me dice que el operador de relación != es ilegal. De antemano gracias por su ayuda. Saludos. |
#2
|
||||
|
||||
Para empezar, copia y pega correctamente tu código, pues ese código seguro que no te compila.
Después revisa esa línea que te da error, mezclando texto con números, al mismo tiempo que haces una comparación/validación ![]() Y para futuras preguntas, recuerda poner títulos descriptivos al problema que tienes, y no pongas el enunciado de la tarea que te han encomendado. ¿Has leído ya nuestra guía de estilo?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
Es que así esta mi código y perdón por no hacer bien el título.
|
#4
|
||||
|
||||
Voy a dejarte el siguiente código con el animo de que le tomes amor a la herramienta y no sólo se quede en que pudiste resolver la tarea, lo estoy haciendo sin Delphi a la mano sin embargo lee bien los comentarios y compara con el código que enviaste para que veas lo que estabas haciendo errado y cómo puedes mejorar tu producción de código, un abrazo:
Espero te sirva de ayuda y compartas con nosotros la calificación... de o de la profe ![]()
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ Última edición por jhonny fecha: 23-04-2017 a las 04:33:08. Razón: Es impar, no par como estaba saliendo |
#5
|
|||
|
|||
Muchas gracias jhonny me fue de gran ayuda tu código, y si ya vi cuales eran mis errores.
De nuevo muchas gracias y Saludos. |
#6
|
||||
|
||||
Cita:
LineComment Saludos Última edición por roman fecha: 23-04-2017 a las 00:25:44. |
#7
|
||||
|
||||
Cita:
¡Estupendo!, al ver que has reducido el tiempo de ejecución a la mitad usando ingenio puro. Sólo resta mejorar aún más la velocidad de ejecución, aprovechando las nuevas herramientas, sin ser algo perfecto porque faltaría el tema del ordenamiento (aunque en el ejercicio no piden que sea ordenado)... así: Agregando al uses las unidades System.Threading y System.SyncObjs...
Ejecutando este mismo ejercicio hasta 10000 en lugar de 1000, en mi maquina con el método anterior se demoró 3150 milisegundos en promedio, sin embargo con el segundo método 295 milisegundos en promedio. O cuando lo subí a 100000 el promedio con el ejercicio anterior fue de 33843 milisegundos, mientras que con el segundo ha sido de 2900 milisegundos.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ Última edición por jhonny fecha: 23-04-2017 a las 06:56:43. |
#8
|
||||
|
||||
¿Eso es de los últimos delphi? ¿qué hace, aprovechar el multiproceso?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#9
|
||||
|
||||
Cita:
![]()
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
#10
|
||||
|
||||
El código puede escribirse de muchas formas pero lo que lo retrasa el la línea Memo1.Lines.Add(
Si hacemos que el memo se escriba por mensajes, cualquiera de las formas se ejecuta en menos de 10 milisegundos:
Los bucles terminarán en escasos milisegundos aunque el Memo tardará en llenarse de forma ordenada lo que tarde Windows en tramitar la cola de mensajes. Saludos. |
#11
|
||||
|
||||
Se puede almacenar en memoria y luego, al terminar, asignarlo al memo. Así será incluso más rápido.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#12
|
||||
|
||||
Hola.
Si, el método Add es muy lento; yo he obtenido buenos resultados operando sobre una variable de tipo string y asignándola luego a la propiedad Text. Resultados para 1000 números usando la propuesta de roman en todos los casos: Código:
Concatenando : 203 µs. Mensaje : 261 µs. Método Add : 3320579 µs. Saludos ![]() Edito: Mas o menos como lo que dijo Casimiro mientras componía este ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 23-04-2017 a las 22:32:48. |
#13
|
||||
|
||||
Cierto, el manejo de cadenas de texto suele ser siempre lo más lento de todo.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#14
|
||||
|
||||
Bueno, pero antes de agregar líneas por PostMessage o concatenar y pegar, ¿han intentado un BeginUpdate - EndUpdate?
LineComment Saludos |
#15
|
||||
|
||||
Ahhh caramba, ¿VCL también tiene estos métodos?... porque los he usado es en FMX.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
#16
|
||||
|
||||
Sí, claro. Ahí han estado por siempre
![]() LineComment Saludos |
#17
|
||||
|
||||
Roman, definitivamente, sos el maestro
![]() Gracias hombre.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
#18
|
||||
|
||||
Oye jhonny, ¿podrías explicar un poco eso del TParallel? Bueno, es que ni la sintaxis entiendo
![]() ![]() LineComment Saludos |
#19
|
||||
|
||||
Cita:
TParallel es una clase que tiene varios métodos cuyo objetivo es ejecutar tareas (como su nombre lo indica) en paralelo, TParallel te hace más fácil el uso de los TTask (Que es como la nueva clase para manejo de hilos, si no que usa el TMonitor para la administración de la ejecución de hilos), es especial para aquellos casos de uso cotidiano, como lo es en este caso un mero for de toda la vida. TParallel tiene otro métodos a parte del for, el cual es Join... que también sirve para ejecutar varias tareas al tiempo... pero vamos a la explicación de la sintaxis y del asunto del &. 1) El &, este es un comodín que agregaron en Delphi (No recuerdo desde cual versión realmente), el cual sirve para que puedas ponerle como nombre a tus métodos aquellas palabras que siempre han sido reservadas... para el caso que vemos, la palabra For... entonces, podrías por ejemplo ponerle a un método de una clase tuya, el nombre While, anteponiendo simplemente &While... incluso podrías llamar tu método While usando TTuClase.While, sin el &... sin embargo soy de los que prefiere ponerle el & para evitar posibles "situaciones". 2) La sintaxis de TParallel:
Es muy curioso que preguntes por esto, porque tengo hace rato en el tintero un artículo donde quiero explicar este tema, aunque nunca encuentro es ¿Por dónde comenzar?, puesto que hay que explicar primero el uso de métodos anónimos, los class methods o bueno... tal vez al revés... me ayudaría mucho tu retroalimentación acerca de si se entendió más o menos lo que trato de explicar y lo que ha quedado en el completo aire para complementar y explicarlo mejor.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ Última edición por jhonny fecha: 24-04-2017 a las 19:50:11. |
#20
|
||||
|
||||
Hola roman.
Cita:
![]() Código:
Concatenando : 203 µs. Mensaje : 261 µs. Begin/Update : 858024 µs. Método Add : 3320579 µs. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Copiar números impares de un listbox a otro | ale4132 | Varios | 5 | 17-12-2012 19:33:10 |
Consulta Desde->Hasta | Luis M. | Firebird e Interbase | 6 | 30-07-2008 19:40:34 |
1000 Mil M 0011 1110 1000 3e8 | sakuragi | La Taberna | 29 | 05-03-2008 18:28:56 |
Poner puntos a los números mayores de 999 y hasta 1M | Pedro-Juan | Trucos | 2 | 26-12-2007 19:13:08 |
Factorial hasta 1000 | Cheswar | Varios | 29 | 21-09-2007 20:43:27 |
![]() |
|