FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola Juampi,
Con esto puedes avanzar un poco. Esto al principio Y esto en los eventos correspondientes.
Un Saludo. p.d.: Sólo funciona con enteros y al final tienes que poner un = para que lo sume todo, ya lo modificas como quieras.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
#2
|
|||
|
|||
Baby steps lo mio xD
@[AgustinOrtu]
Estuve hablando con un amigo y al parecer el array dinámico no era lo que yo creía que era, y tampoco me permitiría tener "infinitos" números, que para eso pensara en punteros. Voy a tener que leer un poco sobre eso, tanto sobre arrays dinámicos como sobre punteros. @Casimiro Notevi ¿Es posible hacer la calculadora de Windows solo con variables?, de ser así, sé menos programación de lo que creía que sabía. ¿Cómo manejas solamente con variables que el usuario ingrese todos los números que se le plazca?. Repito la consigna por las dudas, mi idea no es hacer una calculadora cualquiera, es hacerla como la de Windows, que el usuario me puede ingresar n + n como me puede ingresar n + n + n - n -n + n / n * n + n... + n. Sinceramente no sé cómo guardar todos esos valores utilizando solo variables, no digo que no sea posible, sencillamente no me doy cuenta. @olbeup Hay varias líneas de ese código que no sé leer, no las termino de entender, pero veré si lo copio y ejecutándolo y probando logro entenderlo al completo. Saludos y gracias, les aviso cuando logre algo como la gente, jeje. |
#3
|
||||
|
||||
Con un arreglo dinamico podes tener tantos numeros como memoria tengas disponible (ok no es del todo precisa esa afirmacion, es un poco exagerado, pero podemos verlo de esa manera)
Si te fijas en como estan implementadas las estructuras que contienen datos (el ejemplo mas facil son las listas) veras que usan un arreglo dinamico, el cual van haciendo crecer a medida que hace falta meter mas elementos. Para eso estas clases van llevando la cuenta de cuantos elementos hay, cual es el tamaño actual del arreglo, realizan el "ensanchamiento" cuando es necesario, etc. Obviamente esto tiene un coste, porque los arreglos tratan de posiciones contiguas de memoria: si yo primero digo que hay un arreglo con 10 posiciones, se reserva en memoria 10 posiciones contiguas; si ahora quiero tener 15, necesito 15 posiciones. Si en donde estaba parado tengo para sumar las 5 posiciones, genial; pero si no, tengo que buscar una porcion de memroia en donde me entre un arreglo de 15 y despues moverlo. Todo esto se maneja de memoria automatica incluso si queres operar a un nivel "tan bajo" como es el de los arreglos dinamicos. Uno simplemente lo redimensiona, con el mismo codigo que mostre arriba, llamando a System.SetLength(variableArreglo, tamanoDeseado) y Delphi/Lazarus se encarga del resto. Si queres poder usar el arreglo dinamico, quiza requiera un poco mas de trabajo, aunque como aprendizaje esta buenisimo. Si queres usar algo ya hecho, en tu caso lo mas ideal seria una lista. No es estoy muy al dia con el tema de las clases en Lazarus, pero si realmente trata de ser lo mas Delphi-compatible posible, supongo que habra una clase TList en la unidad Classes.pas. Ejemplos y documentacion de esta clase hay por doquier. El problema que tiene esta clase es que el tipo de los elementos que guarda son punteros, porque permite guardar cualquier cosa. Va a implicar que aprendas a usar casting, lo cual a esta altura me parece demasiado Tambien podes considerar utilizar la version generica, TList<T>. Esta soluciona el problema del tipo que comentaba en el parrafo anterior. En pocas palabras, es lo mismo que la TList, pero esta permite solamente tener elementos del tipo que le indica el programador, esto lo hace mas seguro y comodo de usar ya que te olvidas del tema de punteros. Pero de nuevo, creo que te voy a marear demasiado con tanta informacion |
#4
|
||||
|
||||
Te recomiendo que investigues sobre tplex y tpyacc, son metacompiladores que te pueden tokenizar y calcular las expresiones de una cadena.
http://freecode.com/projects/dyacclex |
#5
|
|||
|
|||
Retomo el proyecto
@[AgustinOrtu]
Gracias por la aclaración, y dado lo que me dijiste ya guardé para leer más adelante "TCollection" en wiki.freepascal.org. Decidí inicialmente intentar hacer funcionar la calculadora con un máximo de números y una vez consiga ese objetivo parcial, después dar el paso a todos los números que el usuario quiera. Pienso que como comienzo e ir fijándome metas es razonable. @axesys Gracias, lo haré ni bien avance un poco más con el proyecto, que por ahora no he salido del botón +, je. En mi defensa aclarar que desde que abrí este hilo no debo haber pasado la media hora con el programa, no he tenido tiempo y acá estoy un Domingo, el único día "100% libre" que tengo, tratando de adelantar algo. @todos Les cuento lo que me tiene trancado ahora mismo, que estoy seguro que es una bobada importante pero no me estoy dando cuenta. Este es el código de mi botón +: Cita:
Es muy probable que la solución a esto sea extremadamente sencilla, y si bien termino de escribir esto y me voy a seguir pensando como se haría, quería que supieran en qué estaba trancado y mi decisión de por el momento acotar el array a "x" cantidad de lugares y después profundizar en arrays dinámicos, TList, etc. Gracias una vez más. |
#6
|
|||
|
|||
Quise editar y no pude
No dije nada, no dije nada, ya se me iluminó la lamparita con lo que me tenía trancado, jeje. Quise editar el mensaje anterior pero ya habían pasado 25 minutos.
Saludos |
#7
|
|||
|
|||
I'm back!
Buenas, no me conectaba desde el 29/5, hacía rato no me daba una vuelta por aquí. Por distintos motivos la calculadora la dejé en stand by pero esta semana la retomé y les quería pedir una mano porque estoy trancado.
Lo que me pasa es lo siguiente, hago múltiples operaciones y me dan todas ok hasta que hago la siguiente combinación: 5 + 5 - 1 x 2 / 2. Que de forma correcta (igual que la calculadora de Windows que es la que quiero emular, jeje) me da 9. 5 + 5 = 10 10 - 1 = 9 9 x 2 = 18 18 / 2 = 9 Pero la siguiente operación que hago después de esa secuencia me da mal. Ejemplo hago 5 x 5 y me da 24, 5 + 5 me da 9, 6 x 6 me da 35, 9 x 9 me da 80. Si, como podrán ver, me da uno menos del resultado correcto. Viendo eso sería sencillo identificar el problema pero no me doy cuenta que puede estar mal. Si teóricamente después de apretar el botón = vuelvo todo a cero, sería como cerrar y volver a ejecutar la calculadora (aunque evidentemente no lo es). Es más, por las dudas también aprieto el botón C que lo que hace es "poner todo en cero", y nada, hasta que no cierre la calculadora seguirá dando un número menos. Probando hice otra operación, en este caso 5 + 10 - 2 x 2 / 2 = 13 (correcto). Todo lo que hago luego de eso me da DOS números menos que lo correcto. Ejemplo 5 x 5 me da 23. Les dejo lo que yo entiendo que necesitarían ver de este código para que puedan decirme donde la estoy macaneando y un link al .exe de la calculadora (no se rían, está en fase ultra beta, jaja). Les dejo la declaración de variables, el form on create, el botón igual, el botón +, el botón C y un número, en este caso el 1. Cita:
drive.google.com/open?id=0B2s4ogym-XembWY5Vl8tV2tBcEE Si les sirve más el proyecto completo les dejo el link para descargar el rar. Aclaraciones: *Por el momento funciona solo haciendo click con el mouse, ya aprenderé como hacer para que los botones del teclado accionen (con animación incluida es mi idea, no sé si es posible) los botones de la calculadora. *Los únicos botones que andan son los números, los signos de +, -, X, /, el de borrar todo (C), el = y el de borrar de a uno (<). Desde ya muchas gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Opinión sobre la estabilidad actual de Lazarus/Free Pascal | Toni | Lazarus, FreePascal, Kylix, etc. | 34 | 06-02-2016 01:04:45 |
Soy desarrollador de Delphi ¿Que necesito saber para usar Lazarus? | Godzuki | Linux | 7 | 23-02-2012 23:54:34 |
Lazarus, Nemesis Pascal | rmendoza83 | Varios | 1 | 08-01-2009 17:41:08 |
Indy soporta Free Pascal/Lazarus | Delfino | Noticias | 6 | 15-01-2006 10:55:55 |
Free Pascal y Lazarus | Magician^ | Noticias | 7 | 31-03-2004 19:12:04 |
|