Voy a ir intercalando en el post capturas de las cosas que se ven. Pero lo cambios internos son los interesantes.
Ahora hay coloreado de sintaxis también en el diagrama, y una flecha de verdad para la asignación.
Veamos un ejemplo. Hasta hace pocas versiones, internamente el intérprete guardaba todas las instrucciones como strings en todo momento. Durante el análisis sintáctico, previo a la ejecución, se normalizaban los strings. Cambios como eliminar comentarios y espacios en blanco adicionales, pasar todo a mayúsculas, etc. Luego, la ejecución tenía que volver a analizar cada instrucción para saber qué hacer, pero esta segunda pasada era bastante más simple gracias a la normalización previa. Aún así, es trabajo repetido que se puede evitar. Y no solo para ganar en eficiencia (eso se nota poco), sino para simplificar el código, y evitar tener que implementar cada cambio o cada nueva instrucción dos veces.
Entonces asocié a cada instrucción un valor de un enum que indica de qué tipo es, de forma que el análisis sintáctico setee esa etiqueta para que luego la ejecución no tenga que volver a procesar el string. Más aún, en el camino, mientras hacía esa modificación, que implicó cambiar cientos de líneas, aproveché para pulir otros detallecitos relacionados al mismo código. Todas estas cosas son pequeños pasos rumbo a un rediseño que probablemente debería hacer de cero, pero por falta de tiempo lo haré de a poco (y tardaré más). El problema es que cada uno es una nueva fuente potencial de bugs.
Ya se pueden hacer operaciones con varias entidades al mismo tiempo (selección múltiple)
En cualquier caso, son cosas que harán más simple el trabajo de agregar nuevas funcionalidades, como por ejemplo el manejo de registros. Se necesitan muchísimos de esos pasos para una implementación decente de esta funcionalidad. Pero varios ya se han dado, y otros están cerca. Tal vez en unos pocos meses pueda presentar una primera versión con soporte para registros.
Como este, hay otros cambios interesantes para hacer. Siempre, sin perder de vista que quiero un lenguaje simple y con fines 100% didácticos. Entonces debo aclarar que de todos los cientos de cambios que puedan imaginar, la definición de registros es la única cosa realmente nueva que sí me interesa. Además de eso, los otros cambios que tienen prioridad son los tendientes a perfeccionar o solucionar problemas de las funcionalidades ya presentes, como arreglos y funciones. Detalles como por ejemplo que los arreglos no se copian, y solo se pasan a funciones por referencia, obedecen más a las limitaciones de un lenguaje real o a una cuestión de implementación, que al verdadero sentido de un pseudocódigo.
Se pueden renombrar y definir variables con click derecho.
En fin, aunque no dispongo de mucho tiempo, en esta etapa sí dispongo de mucho entusiasmo como para trabajar en estas novedades. Así que tengo la esperanza de que 2016 sea un gran año para la evolución del intérprete. Veremos.
Hola
ResponderEliminarAl normalizar una línea de código, implica tiempo de ejecución extra, propongo esta idea
Funciones de edición que realice una normalización básica al igual como lo hacen otros IDEs, normalización básica que se puede aprovechar para que cuando se ejecute las transformaciones internas de interpretación, estas sean menores, ganando velocidad de ejecución (microsegundos) pero en n líneas pueden significar n segundos.
Por favor mirar en NOTEPAD++ v6.9.1 en español, en el menú EDITAR las funciones OPERACIONES DE LIMPIEZA
1: QUITAR ESPACIOS AL FINAL o después de una línea de código, en el proceso de edición (copiar, pegar) involuntariamente se agregan caracteres de espacio que son invisibles, por esta razón también es importante otras funciones en PSEInt para hacer visibles símbolos especiales de edición, en NOTEPAD++ están en el menú VISTA, submenú MOSTRAR SIMBOLOS: Mostrar Carácter de Espacio, Mostrar Carácter de Tabulación, Mostar Carácter de salto de línea, Mostrar Carácter de ajuste de línea, etc.
Mostrar Carácter de Espacio activo, durante el proceso de edición, permite manualmente ver, que espacios sobran, en especial los finales, por que otros, aunque sobren le dan legibilidad al código
Unos editores (me incluyo) prefieren espacios extras en las sentencias como
Algoritmo prueba_de_velocidad_de_ejecucion
Dimensión a[ 20 ], d[ 2, 3 ];
a[ 10 ] <- (3 + 5) / 2; d[ 1, 2 ] <- a[ 10 ];
Escribir a[ 10 ], " " , -d[ 1, 2 ]*6;
DIMENSIÓN A1[ 20 ], D2[ 1 ];
Fin Algoritmo
Y a otros editores no les agrada espacios extras
Algoritmo prueba_de_velocidad_de_ejecucion
Dimensión a[ 20],d[2,3];
a[10]<-(3+5)/2; d[1,2]<-a[10];
Escribir a[10]," ",-d[ 1, 2 ]*6;
FinAlgoritmo
Otra función importante puede ser como lo llama NOTEPAD++ ELIMINAR ESPACIOS SOBRANTES Ó INNECESARIOS
Dimensión a[ 20 ], d[ 2, 3 ]; => Dimensión a[ 20],d[2,3];
a[ 10 ] <- (3 + 5) / 2; d[ 1, 2 ] <- a[ 10 ]; => a[10]<-(3+5)/2; d[1,2]<-a[10];
Escribir a[ 10 ], " " , -d[ 1, 2 ] * 6; => Escribir a[10]," ",-d[ 1, 2 ]*6;
Para ganar un poco más de tiempo, si se convierte las tabulaciones a espacios, solo se requiere verificar un solo tipo de código ESPACIO (ASCII#39) y no (#9, 10, 12) NOTEPAD++ lo llama TABs a ESPACIO(s)
Y para saber si hay ganancia de tiempo por favor mostrar en la salida el tiempo invertido
*** Ejecución Iniciada. ***
4 -24
*** Ejecución Finalizada en 1.381516 segundos ***
Sería una muy buena noticia que PSeInt soportara registros
ResponderEliminarTambién estoy de acuerdo con la inclusion o soporte de registros, pero que opinas Alejandro de mi primer comentario
ResponderEliminarGracias
Lo de eliminar espacios son exquisiteces del programador. Se pueden incluir o no.
EliminarSaludos,
ResponderEliminarLa implementación de Registros (register en pascal) me parece genial, y desde hace tiempo lo esperaba. Ademas, con esta implementación se puede comenzar a pensar en la implmentación de FILE para maninpular archivos (secuenciales), lo que daría UNA COMPLETA SUPER UTILIDAD AL ENSEÑAR.
Gracias por su Software.
Hola, a partir de este año utilizo PSeInt para enseñar. Es un gran programa y una gran herramienta. Agradezco tu gran aporte.
ResponderEliminarAlgo que veo sería muy productivo de implementar sería la inicialización de los arreglos en una sola línea.
Ejemplo: En vez de asignar los valores así:
diaSemana[0] <- "Lunes"
diaSemana[1] <- "Martes"
diaSemana[2] <- "Miércoles"
diaSemana[3] <- "Jueves"
diaSemana[4] <- "Viernes"
diaSemana[5] <- "Sábado"
diaSemana[6] <- "Domingo"
Que se pudiera hacer así de manera más práctica:
diaSemana <- ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"]
Esto se vuelve mucho más práctico a medida que el número de elementos es mayor. Igualmente, en el caso de matrices poder inicializar una matriz 3x3 en una línea. Ej:
identidad <- [1,0,0; 0,1,0; 0,0,1]
Si se pudiera estaría feliz de contribuir. Hace mucho no trabajo con c++ pero depronto una guía hacia cuáles funciones serian las claves para editar, y con gusto lo haría para contribuir al desarrollo de esta gran herramienta.
Saludos
Hacer esto diaSemana <- ["Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"] sería crear una enumeración y no asignarles valores a un arreglo. Además la expresión diaSemana[0] <- "Lunes" no tiene sentido pues [0] no indica la posición sino la cantidad de espacio del arreglo.
Eliminar+1
ResponderEliminarHay una versión paralela de PSEINT llamada PSEINT REBEL, que se desarrollo solo por 1 año, que inicio a agregar nuevas características al "lenguaje" de seudocodigo pero el autor abandono la idea =[
https://sourceforge.net/projects/pseintrebel/?source=directory
También es muy necesario implementar la definicion y declaración de arreglos en una sola linea como forma alternativa y como lo hace QBASIC64, es decir poder elegir el rango o intervalo de los elemntos
DEFINIR VECTOR(1 HASTA 3) COMO REAL
DEFINIR MATRIZ(1 HASTA 3, 1 HASTA 8) COMO REAL
Ó
DEFINIR VECTOR(0 HASTA 2) COMO REAL
DEFINIR MATRIZ(0 HASTA 2, 0 HASTA 7) COMO REAL
¿Estan de acuerdo?
Sí, la verdad es muy práctico en una sola línea. Depronto lo preferiría siguiendo la misma sintaxis:
EliminarDefinir matriz[3,4] como Cadena
Con seguridad que veremos todas estas mejoras implementadas poco a poco.
Saludos!!
+1
ResponderEliminarHay una versión paralela de PSEINT llamada PSEINT REBEL, que se desarrollo solo por 1 año, que inicio a agregar nuevas características al "lenguaje" de seudocodigo pero el autor abandono la idea =[
https://sourceforge.net/projects/pseintrebel/?source=directory
También es muy necesario implementar la definicion y declaración de arreglos en una sola linea como forma alternativa y como lo hace QBASIC64, es decir poder elegir el rango o intervalo de los elemntos
DEFINIR VECTOR(1 HASTA 3) COMO REAL
DEFINIR MATRIZ(1 HASTA 3, 1 HASTA 8) COMO REAL
Ó
DEFINIR VECTOR(0 HASTA 2) COMO REAL
DEFINIR MATRIZ(0 HASTA 2, 0 HASTA 7) COMO REAL
¿Estan de acuerdo?
Hace mucho 2 años que no uso PSint :(
ResponderEliminarMe gusto cuando lo maneje Felicidades a quien lo creo , hizo o hicieron un GRAN TRABAJO :D :D . Aunque me agradaria que fuese un poco mas parecido a un lenguaje de programacion :D :D por que asi los estudiantes pudieran hacer programas potentes con una sencilles al estilo BASIC pero en español :D
y por eso me agradaria que hubieran las siguientes cosas:
-> Poder hacer blibiotecas ya saben estilo C donde desde un programa principal pueda llamar a subrutinas o funciones dentro de otro archivo , creo que le daria un plus por que asi algunos programadores pudiera hacer bliotecas que ayuden a extender las capacidades de PSeint
-> Manejo de fecha y hora ya saben funciones para saber dia , mes , año , hora , minuto , segundo.
-> Manejo de listas ya saben lo que sigue de un vector :D
-> Manejo basico de archivos :
* Poder escribir en un archivo basicamente linea por linea.
* Poder leer en un archivo igual linea por linea.
-> Poder saber con una funcion si se presiono una tecla o no .
-> limpiar pantalla con una funcion:
* Limpiar pantalla de la ventana donde se esta ejecutando el codigo cuando yo lo hacia lo tenia que hacer un un para y escribir q se repetia como 20 veces :(
* Ubicar en pantalla ya saben tipo gotoxy o locate.
* Estaria bien que pudieran ligarlo a un compilador libre que con 1 solo boton se convirtiera el codigo a un lenguaje de programacion y luego se compile y ya tener un ejecutable , estarian bien con FREE PASCAL ya que es libre y multiplataforma :D pero yo no decido eso :(
Se que solo soy un loco con sus ideas pero pienso que estas ideas aun que suenen un poco exageradas como estudiante que soy me hubiera gustado hacer todo eso en PSeint para poder aprender mejor y mas facil ya que creo que de eso se trata PSeint de ayudar a los estudiantes y personas que quieren programar a comprender , analizar y crear psuedocódigo de una forma sencilla y practica a tal modo que lo puedan aplicar a un lenguaje de programacion sin dificultad.
Gracias por su atencion , sigan trabajando asi en PSeint un estudiante se los agradece :D :D
Como veo te gustan las narraciones con historia, va la mía, la que incluye una pregunta para vos.
ResponderEliminarSoy profesor de matemática, trabajo en un Profesorado de Educación Secundaria en Matemática, y suelo ocupar algunos algoritmos para abordar algunos conceptos, un poco porque me gustan (puro hobbie, nada más) y también porque veo positiva la relación entre la Ciencia y la lógica implicada al pensar y escribir los mismos. Bueno, anteriormente trabajé con DFD pero en el receso estuve leyendo algunos artículos sobre aplicaciones didácticas y encontré uno que hablaba de PseInt, lo descargué, probé, y me gustó; y aunque no soy experto en el tema, te felicito por tu trabajo.
Pero, ahora me encuentro ante un problema particular, en el que me gustaría me ayudes, la cuestión es que estaba evaluando si un número es superimpar (también encontré el enunciado navegando) es decir, que todas sus cifras sean impar, y al escribir el algoritmo y probarlo me encuentro ante un error muy particular, que resumo con la siguiente captura de pantalla:
https://goo.gl/N55X7Z
Donde el resultado debería ser 0.2 y esta diferencia hace que el proceso falle. Ahora bien, como te comenté es particular, porque probando con otros valores no pasa.
Bien, hasta acá llega mi saber y espero me ayudes en esto.
Deseo tus proyectos progresen y sigas en pos de 10 años más.
Disculpá, la imagen es: https://goo.gl/photos/1x8SoafLNGcSz1i98
ResponderEliminarDe antemano gracias por considerar el caso.
Saludos.
No pude reproducir el problema. ¿Sigue pasando con la última versión? En caso afirmativo lo mejor sería iniciar un hilo en el foro de reporte de errores.
Eliminar