Les vencimos

1º Bachillerato · TIC I

Lección 31 · C · Programación

Proyecto de programación

1º Bachillerato · TIC I · Decreto 40/2022 CyL

Objetivos

  1. Enunciar el problema en una frase con entrada, proceso y salida.
  2. Implementar una solución que use vector o función y una estructura de control.
  3. Probar con casos escritos de antemano, incluido el empate del umbral.
  4. Decir qué queda simulado (GPIO 18, D13, luz) y qué es el programa.
  5. Dejar el código en un estado que otra persona del grupo pueda ejecutar aquí.

Explicación

El proyecto del bloque C no es una libreta de fragmentos. Es un programa que resuelve un problema definido, con la sintaxis y la depuración que ya has practicado, y con una salida que se pueda mirar. El problema definido de este hilo sigue siendo el patio: a partir de varias lecturas, decidir si se avisa. Puedes cambiar el sitio (aula de música, pasillo, invernadero del instituto) si la frase de problema sigue teniendo un dato, una regla y un efecto. «Hacer un programa bonito» no es un problema.

Enunciado

Se escribe antes del código y cabe en pocas líneas. Quién lo necesita: el grupo de la visita. Qué entra: cuatro lecturas de luz en la escala 0–1023. Qué se calcula: la media. Qué sale: HIGH si la media es menor que 500, LOW en caso contrario, y el valor de la media para que una persona pueda comprobarlo. Qué no entra: la foto del patio, el mapa, la música del acto. Esas piezas fueron del bloque A. Meterlas otra vez sin que la regla las use es disfrazar un programa corto.

Diseño mínimo

Hace falta un vector, porque el problema habla de varias lecturas y no de una. Hace falta una función media, porque el cálculo se nombra y se prueba aparte. Hace falta un si, porque hay dos salidas. No hace falta un objeto, ni un juego, ni un segundo bucle. El proyecto no se valora por el número de estructuras: se valora porque las que hacen falta están y las que no hacen falta no estorban. Quitar es parte de diseñar.

Plan de pruebas

Antes de ejecutar, escribe tres casos. Uno: [100, 100, 100, 100], media 100, HIGH. Dos: el del editor, media 480, HIGH. Tres: [700, 700, 700, 700], media 700, LOW. Y el empate: [500, 500, 500, 500], media 500, LOW, porque la condición es estricta. Si no tienes el cuarto caso, no has cerrado la regla. El laboratorio confirma; no inventa los casos por ti.

Depuración de proyecto

Si la media no es 480, no sigas con el LED. El fallo está en el vector o en la función, lección 27 y 29. Si la media es 480 y el estado es LOW, el fallo está en el si. Un cambio cada vez. El interruptor de GPIO 18 no forma parte de los casos: es la maqueta de la salida para enseñarla al lado. Si lo usas como si fuera la variable estado, falseas la prueba.

Qué entregar

El pseudocódigo en el editor, la traza de los casos en el cuaderno, una frase de qué simula el pin 13 y el GPIO 18, y la cabecera de licencia de la lección 29 si el código es del grupo. No se entrega una captura de un IDE que no se ha abierto ni un vídeo del LED real que no existe. Si el centro tiene placas y el profesor amplía fuera de esta página, ese montaje es otra actividad: no sustituye a la traza que sí se puede repetir en cualquier aula de Castilla y León sin material.

Límites

No hay usuario y contraseña, no hay servidor, no hay «publicar el proyecto». El bloque A ya explicó el alojamiento como concepto. El proyecto C se abre con file://, como el resto del curso. Si tu programa necesita una librería que no está en la página, no es entregable aquí: reescríbelo con el pseudocódigo del laboratorio. Eso también es una decisión de ingeniería, no una limitación que se esconde.

Cuando funcione el ejemplo, cambia una sola lectura y predice el estado antes de pulsar Ejecutar. Si aciertas tres veces, el proyecto ya no depende de un número memorizado. Esa es la diferencia entre entregar 480 y entregar un avisador.

Etapas del proyecto enunciado diseño pruebas entrega
El enunciado no se salta. Las pruebas incluyen el empate. El pin simulado no es uno de los casos: es la maqueta de la salida.

Glosas de esta lección

Problema definido. Una frase con dato, regla y efecto. No es un tema libre.

Caso de prueba. Entrada escrita de antemano y salida esperada.

Empate. Media igual al umbral. Con <, la salida es LOW.

Alcance. Lo que el programa no hace y dices que no hace: red, placa, fotos.

Entrega. Editor, traza, frase del pin, licencia. Reproducible en file://.

Un cambio. La misma disciplina de depuración, ahora sobre el conjunto.

Maqueta. El interruptor GPIO 18. Se compara con estado, no lo sustituye.

Criterio 3.1. Programa con sintaxis, depuración y una salida que se puede seguir. El juego era la lección 30; esto es el problema.

Ejemplos resueltos

Ejemplo 1 — Problema hinchado

«Una app de la Semana de la Ciencia con mapa, música y foro». No cabe y no se puede probar el viernes. Se vuelve al enunciado de la media y el pin.

Ejemplo 2 — Prueba única

Solo se ejecuta el ejemplo y se da por válido. Falta el caso 700 y el 500. Se añaden al cuaderno y se ejecutan cambiando el vector.

Ejemplo 3 — Estado escrito a mano

escribe "HIGH" después de la media, sin si. El caso 700 seguiría diciendo HIGH. El si tiene que ser quien asigne estado.

Decisiones de aula

Cada caso es una entrega del avisador del patio del IES Duero (Aranda de Duero). Lee la situación antes de la decisión.

1. Empezar por el canvas

Situación. El grupo diseña el círculo y aún no hay umbral.

No conviene. Porque la demo se ve.

Decisión. Cerrar los cuatro casos en el cuaderno y solo después preocuparse de cómo se ve el HIGH.

Por qué: Diseñar el círculo antes de tener umbral deja una salida visual sin casos, que es la lección del objeto vacía. El proyecto exige la regla: los cuatro casos en el cuaderno, con el empate. La demo que se ve no sustituye a la predicción escrita.

2. Ocho estructuras

Situación. Hay para, mientras, tres si y dos funciones que no se llaman.

No conviene. Para que parezca completo.

Decisión. Dejar el vector, la media y un si. Borrar lo que no se llama.

Por qué: Ocho estructuras, con funciones que no se llaman, no completan el programa: el código muerto se pudre. En la próxima lectura alguien cree que ese mientras es la regla y depura el sitio equivocado. Se dejan el vector, la media y el si que el enunciado pide.

3. Placa como entrega

Situación. Sin UNO en el aula, el grupo pide aplazar el proyecto.

No conviene. Porque si no hay LED real no hay programa.

Decisión. Entregar la traza y la maqueta de GPIO 18, y describir D13 como paralelo.

Por qué: Sin UNO en el aula no se aplaza el proyecto. El algoritmo no espera al pedido de material, y la simulación declarada es evaluable. Se entrega la traza y la maqueta del GPIO 18, y se describe el D13 como paralelo, no como placa ausente.

4. Umbral distinto en la memoria

Situación. El editor dice 500 y el cuaderno 400.

No conviene. Porque el 400 «salía mejor» en un ensayo.

Decisión. Un solo umbral, el mismo en el enunciado, en el editor y en los casos.

Por qué: Si el editor dice 500 y el cuaderno 400, hay dos umbrales y por tanto dos proyectos. Quien corrige no puede adivinar cuál es el oficial, aunque el 400 «saliera mejor» en un ensayo. El número es uno, el mismo en los dos sitios.

El mismo avisador, en tres lenguajes

El problema no cambia: si la luz del patio del IES Duero baja de 500, hay que avisar. Cambia quién ejecuta. El pseudocódigo lo ejecuta el laboratorio de esta página. El sketch lo compilaría el IDE de Arduino hacia la UNO. El fragmento de Python lo ejecutaría una Raspberry Pi con gpiozero, si hubiera placa. Aquí no hay placa.

Núcleo del proyecto

La media se prueba sola. El si no sabe cuántas casillas había, solo el número que recibió. Eso es encapsular bien.

let m = media(lecturas)
si m < umbral
  let estado = "HIGH"
si no
  let estado = "LOW"
fin

Casos, no en el sketch todavía

Estos comentarios son el plan. Si el código contradice un caso, manda el caso acordado y se corrige el código, no al revés.

// caso A: media 100 -> HIGH
// caso B: media 480 -> HIGH
// caso C: media 700 -> LOW
// caso D: media 500 -> LOW

Si hubiera placa

Misma regla. La página no graba ni abre el pin. Quien tenga la placa en otra hora parte de esta traza, no de una captura.

int m = media(lecturas, 4);
digitalWrite(13, m < 500 ? HIGH : LOW);
# Pi: led.on() si m < 500, GPIO 18

Casos de aceptación

CasoVectorMediaEstado
A[100, 100, 100, 100]100HIGH
B[420, 510, 390, 600]480HIGH
C[700, 700, 700, 700]700LOW
D[500, 500, 500, 500]500LOW
E[500]500LOW

D y E distinguen < de <=. Si tu programa enciende en D, no has implementado el enunciado de esta página: has implementado otro, y tienes que decirlo.

Traza con las lecturas del patio

HoraUna lectura¿Es la media?Aviso
17:30420—no uses una sola hora como media
17:32510—no uses una sola hora como media
17:35390—no uses una sola hora como media
17:41600—no uses una sola hora como media
17:48500—no uses una sola hora como media
18:02250—no uses una sola hora como media
18:15880—no uses una sola hora como media
18:27499—no uses una sola hora como media

Una lectura suelta no es el proyecto. La media mezcla horas. Por eso el caso B no coincide con «encender a las 17:30»: a las 17:30 hay 420, pero la decisión mira las cuatro.

Lectura guiada

Pide a otra persona que cambie una casilla y te diga el estado que espera. Si no sabe de dónde salir, tu enunciado no está en la entrega: está solo en tu cabeza. Escríbelo encima del editor, en el cuaderno.

Incluye el caso de vector de un solo elemento, [500]. La media es 500 y el estado es LOW. Sirve para comprobar que la función no da por hecho que hay cuatro casillas. Si el para está bien, funciona igual.

Firma con la cabecera de licencia. Aunque no vayas a publicar nada, el proyecto ya es un programa con autor. Si todo el texto es del grupo, MIT o una frase «código de aula, se puede copiar citando al grupo» es una decisión consciente, no un vacío.

Errores que se repiten

Rúbrica de esta lección

CriterioAún noEn procesoConseguidoNotable
EnunciadoNo hay fraseHabla del LEDDato, regla y efectoDice qué queda fuera
ProgramaFragmentos sueltosMedia o si, no ambosVector, función y siSin código muerto
PruebasSolo la demoDos casosLos cuatro, con el empatePredicción antes de ejecutar
ReproducibleDepende de una webSolo en tu sesión mentalSe ejecuta en esta páginaOtra persona del grupo lo abre en file://
PinSe afirma la placaNo se nombraGPIO 18 y D13 como paraleloestado y el interruptor no se confunden

Mini cierre

El proyecto es un enunciado, un programa corto y cuatro casos. HIGH y LOW salen del si. El pin de la página es la maqueta, no la prueba.

Comprueba

Abre cada pregunta, responde en el cuaderno y después mira la solución. El párrafo «Por qué» es la parte que se estudia.

1. ¿Por qué el caso de media 500 tiene que estar escrito aunque «casi nunca sale justo»?

Respuesta. Porque es el borde de la condición. Sin él no se sabe si el programa usa < o <=.

Por qué: Los casos cómodos, muy por debajo y muy por encima, pasan con las dos condiciones. El empate es el único que las distingue. Un proyecto que no lo prueba no tiene la regla cerrada, aunque la demo de 480 quede encendida.

2. ¿Qué sobra en un proyecto que calcula la media y también abre un mapa y un audio?

Respuesta. El mapa y el audio, salvo que la regla los use, y no los usa.

Por qué: Arrastran trabajo del bloque A al lugar donde hay que ver el si. Hacen la entrega más frágil (rutas, archivos) y no añaden un caso de prueba. Se pueden citar como contexto en una frase, no enlazarlos para que el programa «parezca grande».

3. La media sale 480 y estado sale LOW. ¿Dónde miras primero?

Respuesta. En el si y en el umbral, no en la función media.

Por qué: 480 ya confirma el recorrido del vector. El fallo está en la decisión: umbral distinto, comparación invertida o un escribe que pisa el estado. Volver a abrir la función es buscar en el sitio que ya ha dado la señal correcta.

En la vida real

Castilla y León, sin servidor

  • Un parte de laboratorio sin la pregunta que quería contestar no se puede corregir. El enunciado es esa pregunta.
  • En un IES de Miranda de Ebro o de Ciudad Rodrigo, cuatro casos escritos permiten que el profesor corrija sin tener la placa delante.
  • Entregar solo el resultado HIGH es como entregar solo la nota del examen, sin el desarrollo. La traza es el desarrollo.
  • Decir «falta material» no sustituye al algoritmo. El material, si llega, se enchufa a una regla que ya era cierta en papel.
Laboratorio · en esta página Abrir en pestaña →

Proyecto C en esta página. El editor es el programa. El canvas es la traza. Arriba, el problema tiene que seguir siendo el del patio o uno igual de cerrado. No abras otro módulo ni una placa real.

GPIO 18

Simulación local · sin hardware

Raspberry Pi (BCM) · paralelo didáctico Arduino UNO D13 · pin GPIO 18

Estado del pin: LOW · LED apagado

OFF

La salida del proyecto es este LED: cuando tu programa deje el estado en HIGH, el interruptor debería poder enseñar el mismo hecho a mano. No son el mismo mando; se comparan. HIGH enciende el LED (en la Pi, 3,3 V; en Arduino UNO el paralelo didáctico es digitalWrite HIGH en D13). No se envía nada fuera de esta página.

Pulsa Ejecutar. El resultado se queda en esta página.

Escribes y dibujas aquí mismo: no hay salto a otro módulo. La misma herramienta, a pantalla completa, está en l31-proyecto-programacion.html y en el marco (útil si el navegador permite file:// en iframes).

Reto Profesor

Cuatro casos, un si

Entrega el programa del editor con media y estado, y en el cuaderno los cuatro casos (100, 480, 700 y 500) con la salida esperada y la obtenida. Una de las obtenidas tiene que salir de una predicción hecha antes de ejecutar. Indica que GPIO 18 y D13 son el paralelo simulado. Una buena entrega la puede ejecutar otra persona sin preguntarte el umbral.

reto_id: bach1-tic-L31