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, 2 de diciembre de 2013

Curso 2013-14. Modelo de examen de Logo del curso 2012-13 y soluciones

Algunos me habéis pedido que os enseñe algún modelo de examen de cursos anteriores. Bueno, ya hay una entrada en este mismo blog en la que podéis encontrar modelo, soluciones y un fichero con el código en logo listo para cargar en el intérprete MSWLogo.
Espero que os sea de ayuda.

También he reorganizado la carpeta compartida para que os resulte más fácil encontrar la información. Es muy recomendable que veáis la presentación "Programación de Control" de Pedro Ruiz.

Os recuerdo que para el examen podéis tener sobre la mesa el "Manual abreviado para el aprendizaje de MSWLogo básico". Son 21 páginas, de las que debería ser suficiente las 2 primeras. Condiciones:
  1. No es obligatorio tener el manual. Quien crea que lo va a necesitar que lo imprima.
  2. El manual es de uso individual, no se podrá pasar a otros compañeros durante el examen.

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

domingo, 20 de octubre de 2013

Curso 2013-14. Apuntes sobre sistemas de numeración y funciones lógicas

Vais a redactar vuestros propios apuntes sobre sistemas de numeración y funciones lógicas. Como punto de partida podéis acceder a la web http://arantxa.ii.uam.es/~ig/. Pulsáis sobre el enlace que pone Teoría y os dirigís a los siguientes enlaces:
  • Tema 3: Sistemas de numeración. Codificación binaria. Tenéis que leer hasta la página 16. ATENCIÓN, se trata de una presentación y en cada página hay dos diapositivas, de modo que tendríais que llegar hasta el sistema de numeración octal, que empieza en la diapositiva número 32.
  • Tema 5: Álgebra de Boole. Funciones lógicas. Cada diapositiva ocupa una página. Podéis pasar por alto los diagramas de tiempos. Fijáos que vienen ejemplos de aplicación, no hace falta aprenderlos de memoria, pero sí entender cómo se usan las puertas lógicas en situaciones reales. Tras un apartado en el que nos habla de los tipos de puertas lógicas comerciales que existen, pasa al álgebra de Boole y la demostración de los postulados y teoremas. Esa información también la podéis encontrar en la Wikipedia, en la página http://es.wikipedia.org/wiki/Álgebra_de_Boole, pero la notación matemática que usa en algunos apartados os puede resultar difícil de comprender.
Mi recomendación para la parte de funciones lógicas es que tratéis de organizarlas en una tabla donde aparezcan:
  • Nombre, definición, tabla de verdad, símbolo, equivalencia con interruptores (esto último os puede ser de gran ayuda a la hora de diseñar).
El trabajo es individual y lo recogeré el próximo viernes.

lunes, 10 de junio de 2013

Curso 2012-13. Trabajo sobre lenguajes de programación

El trabajo deberá desarrollar los siguientes puntos:

  • ¿Qué son los lenguajes de programación?
  • Evolución. Línea de tiempo.
  • Clasificación. Hay más de una forma de clasificarlos, aquí van unas cuantas, pero hay más:
    • Nivel: alto, medio o bajo. Obligatorio hacer una gráfica con el nivel de los lenguajes de programación que pongamos como ejemplo (al menos diez). 
    • Modo de ejecución: compilado o interpretado.
    • Paradigma: lógico, funcional, etc.
    • Lenguajes para la web.
  • Ejemplos simples de programas resueltos con distintos lenguajes (sumar dos números, imprimir un mensaje en pantalla, calcular las raíces de una ecuación de segundo grado, etc.).
  • Conclusiones.

lunes, 15 de abril de 2013

Curso 2012-13. RobotProg 1.1

Vamos a comenzar el tema de robótica empleando el programa RobotProg 1.1 que se encuentra instalado en los ordenadores del aula. El programa, junto con el tutorial original en inglés y los archivos de ejemplo se pueden descargar de su web pinchando en los enlaces. También he preparado una traducción al castellano del tutorial, podéis descargarlo en el siguiente enlace: Tutorial de RobotProg 1.1 en español.
Se puede obtener un listado completo del lenguaje del robot, visitando la siguiente página: https://sites.google.com/site/robotprogbr/robot-language-summary, por si desapareciese, la reproduzco a continuación:

Robot Language Summary
 Keyword  comment
 Begin  First executed block in a program
 End  Ends the execution of the current program or subroutine
 Input  Input instruction to enter a variable value with keyboard
Example: Input myVariable
 Display  Output instruction to show texts and variables values
Example: Display "The value of A is ", A
 While  Used in the header of a loop
 This key word must be followed by a logical condition.
Example: While Not WallAhead
 Wend  End of a while loop
 For  Used in the header of a loop. Examples:
For i = 1 To 10
For k = 5 To 25 step 5
 To  Used in the header of a loop
 Step  Used in the header of a loop
 Next  End of a for loop
 MoveForward  Robot command; the robot move to the tile ahead
 TurnRight  Robot command; the robot turns on the right but stays on the same tile
 TurnLeft  Robot command; the robot turns on the left but stays on the same tile
 Mark  Robot command; the robot paints a mark on the tile
 Erase  Robot command; the robot erases the mark on the tile
 Reload  Robot command; if the robot is over a socket, its energy is set to the maximum
 GetBall  Robot command; the robot takes the ball if it is on the same tile.
 DropBall  Robot command; the robot puts the ball on the tile.
 ThrowBall  Robot command; the robot throws the ball 3 tiles ahead
 WallAhead  Logical function returning true if the robot is facing a wall
 WallOnRight  Logical function returning true if the robot has a wall on its right side
 WallOnLeft  Logical function returning true if the robot has a wall on its left side
 Out  Logical function returning true if the robot is on an outer tile (darker tile), returning false otherwise
 RobotOnSocket  Logical function returning true when the robot occupies a tile containing an energy socket
 MarkedSquare  Logical function returning true if there is a mark on the tile occupied by the robot.
 SquareAheadOccupied  Logical function returning true if the tile ahead is occupied by an other robot
 BallOnGround  Logical function returning true if the ball is on the ground
 DistanceFromWall  Function returning a number equal to the number of tiles between the robbot and the nearest wall ahead
 Energy  Function returning a number representing the remaining energy of the robot
 xRobot  Function returning the x coordinate of the robot on the ground.
 yRobot  Function returning the y coordinate of the robot on the ground.
 dxRobot  Function returning the direction of the robot along the x axis (-1, 0 or 1)
 dyRobot  Function returning the direction of the robot along the y axis (-1, 0 or 1)
 xBall  Function returning the x coordinate of the ball on the ground.
 yBall  Function returning the y coordinate of the ball on the ground.
 And  Logical operator
 Or  Logical operator
 Not  Logical operator
 True  Logical constant
 False  Logical constant
 =  Assignment operator
 ()  Parenthesis to be used in logical and numerical expressions
 + - * /  Numerical operators producing a numerical result with numerical operands
 = > >= < <=  Comparison operators producing a logical result with numerical operands

A petición vuestra, aquí os dejo la tabla traducida:

Sumario del Lenguaje del Robot



 Palabra reservada
 Comentario
 Begin
 Primer bloque ejecutado en un programa
 End
 Finaliza la ejecución del programa o subrutina actual
 Input
 Instrucción de entrada de datos para introducir el valor de una variable desde el teclado
Ejemplo: Input myVariable
 Display
 Instrucción de salida para mostrar valores de variables y textos
Ejemplo: Display "El valor de A es ", A
 While
 Usado en la cabecera de un bucle while
 Esta palabra reservada debe ir seguida de una condición lógica
Ejemplo: While Not WallAhead
 Wend
 Fin de un bucle while (While end)
 For variable = valor inicial
 Usado en la cabecera de un bucle for. Ejemplos:
For i = 1 To 10 (Step es opcional, no siempre aparece)
For k = 5 To 25 step 5.
 To valor final
 Usado en la cabecera de un bucle for
 Step n
 Usado en la cabecera de un bucle for. Step es opcional.
 Next
 Fin de un bucle for


 MoveForward
 Comando del robot; el robot se mueve hasta la baldosa delante de él
 TurnRight
 Comando del robot; el robot gira a la derecha, pero permanece en la misma baldosa
 TurnLeft
 Comando del robot; el robot gira a la izquierda, pero permanece en la misma baldosa
 Mark
 Comando del robot; el robot pinta una marca en la baldosa
 Erase
 Comando del robot; el robot borra una marca de la baldosa
 Reload
 Comando del robot; si el robot está sobre un enchufe, su energía se carga al máximo
 GetBall
 Comando del robot; el robot agarra el balón si éste está en la misma baldosa
 DropBall
 Comando del robot; el robot deja el balón sobre la baldosa
 ThrowBall
 Comando del robot; el robot lanza el balón 3 a baldosas delante de él


 WallAhead
 Función lógica; devuelve verdadero (true) si el robot está cara a una pared
 WallOnRight
 Función lógica; devuelve verdadero (true) si el robot tiene una pared a su derecha
 WallOnLeft
 Función lógica; devuelve verdadero (true) si el robot tiene una pared a su izquierda
 Out
 Función lógica; devuelve verdadero (true) si el robot está sobre una baldosa externa (baldosa más oscura), devuelve falso (false) en cualquier otro caso
 RobotOnSocket
 Función lógica; devuelve verdadero (true) cuando el robot ocupa una baldosa que contiene un enchufe de energía
 MarkedSquare
 Función lógica; devuelve verdadero (true) si hay una marca sobre la baldosa ocupada por el robot
 SquareAheadOccupied
 Función lógica; devuelve verdadero (true) si la baldosa de delante está ocupada por otro robot
 BallOnGround
Función lógica; devuelve verdadero (true) si el balón está en el suelo


 DistanceFromWall
 Función que devuelve un número igual al número de baldosas entre el robot y la pared más próxima delante de él
 Energy
 Función que devuelve un número que representa la energía que le queda al robot
 xRobot
 Función que devuelve la coordenada x del robot sobre el terreno
 yRobot
 Función que devuelve la coordenada y del robot sobre el terreno
 dxRobot
 Función que devuelve la dirección del robot a lo largo del eje x (-1, 0 or 1)
 dyRobot
 Función que devuelve la dirección del robot a lo largo del eje y (-1, 0 or 1)
 xBall
 Función que devuelve la coordenada x del balón sobre el terreno
 yBall
 Función que devuelve la coordenada y del balón sobre el terreno


 And
 Operador lógico
 Or
 Operador lógico
 Not
 Operador lógico
 True
 Constante lógica
 False
 Constante lógica


 =
 Operador de asignación
 ()
 Paréntesis; para ser usados en expresiones lógicas y numéricas
 + - * /
 Operadores numéricos; producen un resultado numérico con operandos numéricos
 = > >= < <=
 Operadores de comparación; producen un resultado lógico con operandos numéricos