Mostrando entradas con la etiqueta programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta programación. Mostrar todas las entradas

jueves, 4 de diciembre de 2014

Curso 2014-15. Logo. Pasar parámetros a primitivas que esperan una lista

Empecé a utilizar MSWLogo para enseñar programación a alumnos de ESO hace solo un par de años. La razón es que los equipos disponibles en las aulas de Tecnología en las que he tenido la oportunidad de dar clase cuentan con pocos recursos (procesador, memoria RAM, etc.) para los estándares del momento de redactar esta entrada. Sin embargo, al no disponer de otros medios, simplemente me adapté y opté por un lenguaje que aparece en diversos libros de texto, sobre todo asociado al uso de controladoras ENCONOR y CNICE.

En las primeras sesiones, tras enseñar a usar el bucle REPITE n [instrucciones], uno de los aspectos más interesantes a la hora de crear nuestros propios procedimientos es la posibilidad de pasar parámetros al código. Eso permite transformar el habitual primer ejemplo de dibujar un cuadrado de un tamaño dado en algo más dinámico, pudiendo pasar el tamaño del lado a un procedimiento CUADRADO redefinido y al que llamaré CUADRADOL :lado. Veamos el código de ambos procedimientos:



Procedimiento CUADRADO
Procedimiento CUADRADOL :lado
para cuadrado
repite 4 [ av 60 gd 90]
fin
para cuadradol :lado
repite 4 [ av :lado gd 90]
fin
Construcción de un cuadrado de lado 60 con el procedimiento CUADRADO
Construcción de un cuadrado de lado 150 con el procedimiento CUADRADOL :lado


Cuando quise extender esta idea a otras primitivas, como la que define el grosor del cursor usando una lista de parámetros entre corchetes, me tropecé con una dificultad. PONGROSOR [tamaño] se debe escribir poniendo números entre corchetes, si los sustituyes por variables no funciona.

Ejemplo:
pongrosor [10 10] ; Establece el grosor del lápiz en 10, el valor por defecto es 1
pongrosor [:g :g] ; Da error

Este mismo problema  surge con otras primitivas como PONCOLORRELLENO [rojo verde azul] o PONPOS [posición]. Revisé el manual que estaba usando: "Manual MSWLOGO abreviado 0809 con hipervínculos.pdf" y busqué en Internet sin éxito otras referencias en las que simplemente no me dijeran que sustituir los números por variables no estaba permitido.
Al final, decidí analizar el problema con más detenimiento y me dí cuenta de que lo que diferenciaba la forma de pasar parámetros a estas primitivas de las otras que ya conocía, era la existencia de los corchetes que los delimitaban. Mirando en la referencia del lenguaje, se puede ver que las listas emplean la misma sintaxis, encerrando entre corchetes los elementos que las forman. Entonces probé a construir una lista y pasarla directamente como parámetro a PONGROSOR y ¡Eureka! ¡Funciona!

Ejemplo:
El siguiente procedimiento recibe como parámetro el grosor de la línea. Los paréntesis que rodean a la primitiva LISTA son opcionales, se han escrito para distinguir con mayor claridad lo que se pasa como parámetros a PONGROSOR.
para cuadradog :grosor
    bp
    pongrosor (lista :grosor :grosor)
    repite 4 [av 100 gd 90]
fin



domingo, 9 de noviembre de 2014

Curso 2014-15. Ejercicios sencillos de programación

En esta entrada solo voy a poner el enunciado de los ejercicios que se van a hacer en clase usando PSeInt. Para tener más información y ver cómo se ha trabajado la asignatura en cursos pasados conviene que uséis los siguientes enlaces:
También tenéis información muy completa y más detallada en el blog de Tecnologías de 3º. Hay muchos ejemplos resueltos, por lo que os recomiendo que empecéis por aquí:
Y por fin los enunciados de los programas que tenéis que escribir para practicar:
  • Programa que lee un número del teclado e indica si es par o impar
    • Modificación. El programa debe indicar también si el número es cero
    • Modificación. El programa debe indicar si el número es positivo o negativo
  • Programa que lee dos números del teclado e imprime el mayor de ellos
    • Modificación. El programa debe indicar si se ha introducido el mismo número las dos veces
  • Programa que lee tres números del teclado e imprime el mayor de ellos
  • Programa que lee tres números del teclado, los ordena y los imprime de mayor a menor
  • Programa que lee un número por teclado y calcula la suma de todos los números desde 0 hasta ese número (incluyéndolo)
    • Pregunta. ¿Qué número hay que teclear para que el programa de un error por desbordamiento?
    • Modificación. El programa debe admitir números negativos y hacer la suma con la correspondiente modificación
    • Pregunta. En el caso del programa modificado, ¿coincide el número que hace que el programa dé un error?
  • Programa que lee dos números por teclado y calcula la suma de todos los números desde el primero al segundo, incluyendo a ambos en el resultado final
  • Programa que calcule el factorial de un número
  • Programa para calcular las raíces de una ecuación de 2º grado
    •  Modificación. El programa no debe dar error si las raíces son imaginarias, sino que debe indicarlo y calcular el resultado correspondiente
  • Programa que lee caracteres del teclado, los muestra por pantalla y se detiene al pulsar la letra Q
  • Programa que lee números por teclado y calcula su media aritmética. El programa debe parar al teclear el cero. En la pantalla deben aparecer los siguientes datos: suma acumulada, número de datos introducido y media aritmética.

martes, 10 de diciembre de 2013

Curso 2013-14. Exámenes de Logo y PSeInt

Podéis encontrar los enunciados del examen de Logo y PSEInt aquí, las soluciones que yo os propongo aquí, el código en Logo aquí y, para acabar, el código PSEInt: hipotenusa y compara dos números.
Los archivos con código tenéis que descargarlos y abrirlos con MSWLogo y PSEInt. Descubriréis que he modificado el procedimiento estrella para que haga unas variaciones sobre la figura propuesta.

lunes, 11 de noviembre de 2013

Curso 2013-14. Ejercicios sencillos de programación con PseInt


Los ejercicios los recogeré el viernes 15 de noviembre de 2013 a última hora.
  • Se trata de un trabajo individual
  • Para todos los ejercicios hay que hacer el diagrama de flujo y el pseudocódigo.
A continuación os doy los enunciados y breves indicaciones teóricas insertadas entre medias y resaltadas en verde. Algunos de ellos ya los hemos probado en clase, así que no debería resultaros difícil resolverlos.




  1. Suma de dos números.
Estructuras de control. Tomas de decisión
  • Alternativa simple: IF (condición) THEN (grupo de acciones)
  • Alternativa doble: IF (condición) THEN (grupo de acciones 1) ELSE (grupo de acciones 2)
  • Alternativa múltiple: SEGÚN (condición) HACER
CASO 1 (grupo de acciones 1)
CASO 2 (grupo de acciones 2)

CASO n (grupo de acciones n)

  1. Comparar dos números e imprimir el mayor.
  2. Comparar dos números e indicar si el primero es mayor, igual o menor que el segundo.
Variables auxiliares. Se emplean en intercambios de variables, como índices que se incrementan una cantidad prefijada o como acumuladores para almacenar resultados.

  1. Comparar tres números e imprimir el mayor.
  2. Introducir tres números, ordenarlos de menor a mayor e imprimirlos en ese orden.
  3. Calcular el área de un rectángulo dados los dos lados.
  4. Calcular la longitud de una circunferencia y la superficie del círculo dado el radio.
  5. Calcular la hipotenusa de un triángulo rectángulo dados los catetos.
  6. Programa que convierta una velocidad en Km/h a m/s.
  7. Programa que permita decidir en qué unidad se introduce la velocidad (Km/h o m/s) y la convierta a la otra.
Estructuras de control. Bucles
  • Repetir DESDE HASTA: DESDE (variable←valor_inicial) HASTA (variable=valor_final) HACER (grupo de acciones)
  • REPETIR MIENTRAS: REPETIR (acciones) MIENTRAS (condición)
  • HACER HASTA: HASTA QUE (condición) HACER (acciones)
Los dos últimos bucles son muy parecidos, la diferencia es que en el primero se ejecutan las acciones al menos una vez, pues la condición se chequea al final del bucle; en el segundo la condición se comprueba antes de entrar en él, de modo que si ya se cumple, no se entrará y se saltará al final del mismo.

  1. Suma de los diez primeros números enteros.
  2. Preguntar un número e imprimir su tabla de multiplicar.
Estos dos ejercicios hay que resolverlos utilizando los tres tipos de bucles. Es decir, hay que resolverlos una vez usando un bucle DESDE-HASTA, otra vez con un bucle REPETIR-MIENTRAS y, por último, usando un bucle HACER-HASTA.

viernes, 25 de octubre de 2013

Curso 2013-14. Diagramas de flujo y pseudocódigo

Vamos a empezar a trabajar los diagramas de flujo. También se les ha denominado organigramas y ordinogramas, por si encontráis esa forma de llamarlos en alguna página web, que no os sorprenda.
Podéis encontrar los símbolos básicos en esta página, aunque hay otras muchas en Internet.
Para hacer prácticas con el ordenador vamos a necesitar un programa. Os recomiendo que descarguéis Dia Diagram Editor. También usaremos PseInt, que podéis descargar de aquí.
En clase hemos creado unos pocos diagramas sencillos:
  • Suma de dos números y mostrar resultado por pantalla.
  • Pedir dos números por teclado y mostrar la suma impresa.
  • Algoritmo de un sistema de riego automatizado que se activa de noche si la tierra está seca.
Aquí os dejo algunos ejercicios propuestos para practicar:
  • Algoritmo del sistema de control de la lámpara interior de un vehículo que se activa al abrir una o varias puertas.
  • Algoritmo que pide dos números y muestra en pantalla un mensaje diciendo cuál es el mayor o si son iguales
  • Algoritmo que pide tres números, los ordena de mayor a menor y los imprime en ese orden.
El diagrama de flujo del primer ejemplo, hecho con Dia 0.97.2, la suma de dos números:

Si usamos PSeInt, tendremos que introducir el pseudocódigo y el programa nos genera el diagrama de flujo. También nos permite ejecutar el programa resultante, incluso paso a paso y con explicaciones. Aquí os dejo unas cuantas capturas de pantalla:

Suma de dos números con PSeInt

Las pestañas laterales de la ventana de PSeInt se pueden desplegar

Diagrama de flujo generado por PSeInt a través de PSDraw v2

PSDraw también tiene dos desplegables. El primero está arriba a la izquierda

Y el segundo está en el margen derecho de la ventana

PSeInt también permite ejecutar el pseudocódigo que acabamos de programar:

PSeInt ejecutando el pseudocódigo para la suma de dos variables