C++ SINTAXIS EJERCICIOS NIVEL 2 CDYPC 1BACH
Centuriones
de la Verdad
20 ejercicios de C++ en Arduino IDE
El Lince de la Noche, Repálago, Butan-Hero, Psique de Plata y la Justicia Ciega necesitan tu código para frenar al Doctor Mente y su Clan del Mal. ¡La Centuria te convoca!
⚡ Secuencia
6 ejerciciosRepálago recorrió el perímetro del juzgado en 0,02 segundos. El tribunal necesita calcular esa velocidad.
Repálago recorre 120 metros (el perímetro del juzgado) en 0.02 segundos. Calcula e imprime su velocidad en m/s y también en km/h.
float porque los valores tienen decimales. Un int no puede guardar 0.02.- Declara
float espacio = 120.0;yfloat tiempo = 0.02; - Divide:
float velocidad = espacio / tiempo; - Para km/h:
float velKmh = velocidad * 3.6; - Imprime ambas con
Serial.println()
// S-01: Velocidad de Repálago void setup() { Serial.begin(9600); float espacio = 120.0; // metros float tiempo = 0.02; // segundos float velMs = espacio / tiempo; float velKmh = velMs * 3.6; Serial.print("Velocidad Repalago: "); Serial.print(velMs); Serial.println(" m/s"); Serial.print("En km/h: "); Serial.print(velKmh); Serial.println(" km/h"); } void loop() { }
Una bombona de Butan-Hero tiene presión = 4.5 atm y volumen = 30 litros. La energía liberada en la explosión es presión × volumen. Calcula e imprime la energía en atm·L y también el doble de energía si usa dos bombonas.
- Declara
float presion = 4.5;yfloat volumen = 30.0; - Calcula:
float energia = presion * volumen; - Para doble:
float energiaDoble = energia * 2;
// S-02: Energía de las bombas de Butan-Hero void setup() { Serial.begin(9600); float presion = 4.5; float volumen = 30.0; float energia = presion * volumen; float energiaDoble = energia * 2; Serial.print("Energia 1 bombona: "); Serial.print(energia); Serial.println(" atm*L"); Serial.print("Energia 2 bombonas:"); Serial.print(energiaDoble); Serial.println(" atm*L"); } void loop() { }
En Arduino, la función millis() devuelve el tiempo en milisegundos. Si Psique necesita concentrarse 90 segundos, calcula cuántos milisegundos son, cuántas microsegundos son y cuántos minutos tarda.
millis() y micros() son funciones reales de Arduino que usarás para medir tiempos en sensores y actuadores.- Declara
int segundos = 90; - Usa
longpara milisegundos porque puede ser un número muy grande:long ms = (long)segundos * 1000; - Para microsegundos:
long us = ms * 1000; - Para minutos usa
float:float minutos = segundos / 60.0;
// S-03: Conversión de tiempos de Psique de Plata void setup() { Serial.begin(9600); int segundos = 90; long ms = (long)segundos * 1000; long us = ms * 1000; float minutos = segundos / 60.0; Serial.print("Segundos: "); Serial.println(segundos); Serial.print("Milisegundos: "); Serial.println(ms); Serial.print("Microsegundos: "); Serial.println(us); Serial.print("Minutos: "); Serial.println(minutos, 2); } void loop() { }
La capa del Lince es triangular con base = 1.8 metros y altura = 2.4 metros. Calcula el área de la capa e imprímela. También calcula cuántas capas se podrían hacer con 10 metros cuadrados de tela.
- Declara
float base = 1.8;yfloat altura = 2.4; float area = (base * altura) / 2;- Para capas posibles:
float capas = 10.0 / area;— usaintsi quieres el número entero.
// S-04: Área de la capa del Lince de la Noche void setup() { Serial.begin(9600); float base = 1.8; float altura = 2.4; float area = (base * altura) / 2; int capas = (int)(10.0 / area); Serial.print("Area de la capa: "); Serial.print(area, 2); Serial.println(" m2"); Serial.print("Capas con 10 m2: "); Serial.println(capas); } void loop() { }
El termómetro del laboratorio del Doctor Mente marca 98.6 °F. Convierte esa temperatura a Celsius y a Kelvin. Imprime los tres valores.
- Declara
float fahrenheit = 98.6; float celsius = (fahrenheit - 32) * 5.0 / 9.0;float kelvin = celsius + 273.15;- Imprime los tres con una o dos decimales:
Serial.println(celsius, 2);
// S-05: Fahrenheit a Celsius y Kelvin void setup() { Serial.begin(9600); float fahrenheit = 98.6; float celsius = (fahrenheit - 32) * 5.0 / 9.0; float kelvin = celsius + 273.15; Serial.print("Fahrenheit: "); Serial.print(fahrenheit, 1); Serial.println(" F"); Serial.print("Celsius: "); Serial.print(celsius, 2); Serial.println(" C"); Serial.print("Kelvin: "); Serial.print(kelvin, 2); Serial.println(" K"); } void loop() { }
El escudo de Justicia Ciega recibe una tensión de 12 voltios y circula una corriente de 0.8 amperios. Calcula la resistencia (Ley de Ohm), la potencia disipada y la energía consumida en 30 segundos.
- Declara
float V = 12.0; float I = 0.8; float t = 30.0; float R = V / I;float P = V * I;float E = P * t;— la energía sale en julios (W·s)
// S-06: Ley de Ohm — escudo de Justicia Ciega void setup() { Serial.begin(9600); float V = 12.0; // voltios float I = 0.8; // amperios float t = 30.0; // segundos float R = V / I; float P = V * I; float E = P * t; Serial.print("Resistencia: "); Serial.print(R, 2); Serial.println(" ohmios"); Serial.print("Potencia: "); Serial.print(P, 2); Serial.println(" W"); Serial.print("Energia: "); Serial.print(E, 2); Serial.println(" J"); } void loop() { }
🔀 Selección
7 ejerciciosDeclara bool esDeNoche = true. Usa un if / else simple: si es de noche imprime "Lince en acción. Patrulla iniciada.", si no imprime "Lince en reposo. Esperando la oscuridad."
- Declara
bool esDeNoche = true;— prueba cambiando afalse. - La condición más corta:
if (esDeNoche)— funciona directamente conbool. - El
elseno necesita condición.
// C-01: if/else — ¿sale el Lince a patrullar? void setup() { Serial.begin(9600); bool esDeNoche = true; // Cambia a false y vuelve a ejecutar if (esDeNoche) { Serial.println("Lince en accion. Patrulla iniciada."); } else { Serial.println("Lince en reposo. Esperando la oscuridad."); } } void loop() { }
Declara int toxinas = 73. Usa if / else: si el nivel supera 50, imprime "¡PELIGRO! Sopa envenenada por Lady Calabaza."; si no, imprime "Sopa segura. Buen provecho.". Imprime también el nivel de toxinas.
analogRead() se compara con un umbral exactamente así.- Declara
int toxinas = 73;— prueba con 30 para el otro caso. - Condición:
if (toxinas > 50) - Imprime el valor de toxinas antes del if con
Serial.println(toxinas)
// C-02: if/else — detector de toxinas de Lady Calabaza void setup() { Serial.begin(9600); int toxinas = 73; // Prueba con 30 Serial.print("Nivel de toxinas: "); Serial.println(toxinas); if (toxinas > 50) { Serial.println("PELIGRO! Sopa envenenada por Lady Calabaza."); } else { Serial.println("Sopa segura. Buen provecho."); } } void loop() { }
Declara int villanosDetectados = 4. Clasifica así:
— 1 villano → "Nivel VERDE: amenaza menor."
— 2 a 5 villanos → "Nivel AMARILLO: Centuriones en alerta."
— Más de 5 → "Nivel ROJO: ¡Todos los Centuriones a combatir!"
- Primer
if: comprueba sivillanosDetectados == 1 else if: compruebavillanosDetectados <= 5(ya sabemos que es >1)else: el resto (más de 5)- Prueba con valores 1, 4 y 8.
// C-03: if/else if/else — nivel de amenaza void setup() { Serial.begin(9600); int villanosDetectados = 4; // Prueba con 1, 4 y 8 Serial.print("Villanos detectados: "); Serial.println(villanosDetectados); if (villanosDetectados == 1) { Serial.println("Nivel VERDE: amenaza menor."); } else if (villanosDetectados <= 5) { Serial.println("Nivel AMARILLO: Centuriones en alerta."); } else { Serial.println("Nivel ROJO: Todos los Centuriones a combatir!"); } } void loop() { }
Declara int cargaPct = 45 (porcentaje de carga de la bombona). Clasifica con tres ramas:
— Más de 70% → "Bombona llena. Butan-Hero al 100%."
— Entre 30% y 70% → "Bombona a medias. Usar con moderacion."
— Menos de 30% → "Bombona casi vacia. Recargar antes del combate."
if/else if/else.- Comprueba primero el caso más alto:
if (cargaPct > 70) else if (cargaPct >= 30)— si llegamos aquí sabemos que ya es ≤70elsecubre menos de 30%
// C-04: if/else if/else — carga de la bombona void setup() { Serial.begin(9600); int cargaPct = 45; // Prueba con 80, 45 y 15 Serial.print("Carga bombona: "); Serial.print(cargaPct); Serial.println("%"); if (cargaPct > 70) { Serial.println("Bombona llena. Butan-Hero al 100%."); } else if (cargaPct >= 30) { Serial.println("Bombona a medias. Usar con moderacion."); } else { Serial.println("Bombona casi vacia. Recargar antes del combate."); } } void loop() { }
Declara bool globoDetectado = true y bool confettiDetectado = true. Activa el escudo solo si ambos son true. Si solo uno está activo, imprime "Amenaza parcial. Vigilando.". Si ninguno, imprime "Todo tranquilo."
&& (AND) exige que ambas condiciones sean verdaderas. En IoT se usa para activar alarmas solo cuando coinciden varios sensores.- Primer
if:if (globoDetectado && confettiDetectado) else if:if (globoDetectado || confettiDetectado)detecta si al menos uno es trueelse: ninguno activo
// C-05: && — ataque combinado de ThunderClown void setup() { Serial.begin(9600); bool globoDetectado = true; bool confettiDetectado = true; if (globoDetectado && confettiDetectado) { Serial.println("ALERTA MAXIMA: Escudo activado contra ThunderClown!"); } else if (globoDetectado || confettiDetectado) { Serial.println("Amenaza parcial. Vigilando."); } else { Serial.println("Todo tranquilo."); } } void loop() { }
Declara int puntuacion = 82. Clasifica en cuatro rangos:
— 90 o más → "Medalla de Oro. Ejemplar actuacion."
— 70 a 89 → "Medalla de Plata. Buena defensa."
— 50 a 69 → "Medalla de Bronce. Mejorable."
— Menos de 50 → "Sin medalla. A entrenar mas."
- Empieza por el valor más alto:
if (puntuacion >= 90) - Cada
else ifno necesita límite superior porque ya lo descartamos antes. - Usa cuatro ramas:
if / else if / else if / else - Prueba con 95, 75, 60 y 40.
// C-06: Clasificación de medallas — 4 rangos void setup() { Serial.begin(9600); int puntuacion = 82; // Prueba con 95, 75, 60 y 40 Serial.print("Puntuacion: "); Serial.println(puntuacion); if (puntuacion >= 90) { Serial.println("Medalla de Oro. Ejemplar actuacion."); } else if (puntuacion >= 70) { Serial.println("Medalla de Plata. Buena defensa."); } else if (puntuacion >= 50) { Serial.println("Medalla de Bronce. Mejorable."); } else { Serial.println("Sin medalla. A entrenar mas."); } } void loop() { }
Declara bool doctorMentePresente = true, int villanosEnSala = 2 y bool sistemaActivado = false. Psique activa sus poderes si (Doctor Mente presente O más de 3 villanos) Y el sistema NO está activado. Si el sistema ya está activo, imprime que no hace falta.
! (NOT) invierte un booleano. !sistemaActivado es true cuando el sistema está desactivado. Muy útil en control de actuadores.- La condición completa:
if ((doctorMentePresente || villanosEnSala > 3) && !sistemaActivado) - Los paréntesis internos agrupan el OR primero.
!sistemaActivadoes verdadero cuandosistemaActivadovalefalse.- Prueba cambiando
sistemaActivadoatrue.
// C-07: ||, && y ! — Psique activa sus poderes void setup() { Serial.begin(9600); bool doctorMentePresente = true; int villanosEnSala = 2; bool sistemaActivado = false; if ((doctorMentePresente || villanosEnSala > 3) && !sistemaActivado) { Serial.println("Psique de Plata activa sus poderes mentales!"); } else if (sistemaActivado) { Serial.println("Sistema ya activo. Psique en reserva."); } else { Serial.println("Sin amenaza suficiente. Psique descansa."); } } void loop() { }
🔁 Bucles
7 ejerciciosUsa un bucle for que cuente de 1 a 10 e imprima en cada vuelta: "Zancada 1 de Repalago.", "Zancada 2 de Repalago."… Al finalizar imprime "¡Vuelta completa!"
for se usa para repetir lecturas de sensores un número exacto de veces, por ejemplo para promediar 10 medidas.for (int i = 1; i <= 10; i++)- Dentro:
Serial.print("Zancada "); Serial.print(i); Serial.println(" de Repalago."); - El mensaje final va fuera del bucle, después del
}
// B-01: for — zancadas de Repálago void setup() { Serial.begin(9600); for (int i = 1; i <= 10; i++) { Serial.print("Zancada "); Serial.print(i); Serial.println(" de Repalago."); } Serial.println("Vuelta completa!"); } void loop() { }
Usa un bucle for para imprimir la tabla de multiplicar del 7 del 1 al 10, en formato: "7 x 1 = 7 (Butanito 1)"
Serial.print() seguido de varios Serial.print() permite construir una línea entera. Solo el último usa println().- Bucle:
for (int i = 1; i <= 10; i++) - El resultado:
7 * i - Encadena varios
Serial.print()y al finalSerial.println()
// B-02: for — tabla del 7 con los Butanitos void setup() { Serial.begin(9600); for (int i = 1; i <= 10; i++) { Serial.print("7 x "); Serial.print(i); Serial.print(" = "); Serial.print(7 * i); Serial.print(" (Butanito "); Serial.print(i); Serial.println(")"); } } void loop() { }
Usa un bucle for que cuente de 10 hasta 1 (en orden descendente) e imprima cada número. Al llegar a 0 imprime "¡Campo mental activado!". Pista: el incremento puede ser negativo.
for también puede decrementar: for (int i = 10; i >= 1; i--). El i-- resta 1 en cada vuelta.- Empieza en 10:
for (int i = 10; i >= 1; i--) - La condición de parada es
i >= 1(el bucle para cuando i llega a 0) i--es la versión corta dei = i - 1- El mensaje final va fuera del bucle.
// B-03: for descendente — cuenta atrás del Dr. Mente void setup() { Serial.begin(9600); for (int i = 10; i >= 1; i--) { Serial.println(i); } Serial.println("Campo mental activado!"); } void loop() { }
Usa un bucle for del 1 al 12. Para cada número, imprime si es par o impar. Formato: "Globo 4: PAR (gas venenoso)" o "Globo 3: IMPAR (confeti radiactivo)". Pista: usa el operador módulo %.
% (módulo) devuelve el resto de la división. n % 2 == 0 es verdadero cuando n es par. Se usa mucho en Arduino para alternar estados.- Bucle:
for (int i = 1; i <= 12; i++) - Dentro:
if (i % 2 == 0)→ es par - El
elsecubre los impares. - Construye la línea con varios
Serial.print()
// B-04: for + if — globos de ThunderClown par/impar void setup() { Serial.begin(9600); for (int i = 1; i <= 12; i++) { Serial.print("Globo "); Serial.print(i); Serial.print(": "); if (i % 2 == 0) { Serial.println("PAR (gas venenoso)"); } else { Serial.println("IMPAR (confeti radiactivo)"); } } } void loop() { }
Declara int resistencia = 100. Usa un bucle while que reste 15 en cada vuelta mientras la resistencia sea mayor que 0. Imprime la resistencia en cada golpe. Al terminar imprime "Escudo destruido. Justicia Ciega contraataca."
while es perfecto cuando no sabes cuántas veces se repetirá algo, solo la condición de parada. Igual que esperar a que un sensor llegue a un valor.- Condición:
while (resistencia > 0) - Dentro: resta 15 y luego imprime.
- Si tras restar queda negativo, la impresión mostrará un valor negativo. ¿Lo ves en el resultado?
- El mensaje final va después del cierre del while.
// B-05: while — escudo de Justicia Ciega bajo ataque void setup() { Serial.begin(9600); int resistencia = 100; while (resistencia > 0) { resistencia -= 15; Serial.print("Golpe recibido! Resistencia: "); Serial.println(resistencia); } Serial.println("Escudo destruido. Justicia Ciega contraataca."); } void loop() { }
El Doctor Mente se esconde en la habitación 8. Declara int habitacion = 1. Usa un bucle while que avance de habitación en habitación imprimiendo "Revisando habitacion X..." hasta encontrar la 8. Cuando la encuentre imprime "¡Doctor Mente encontrado en la habitacion 8!"
- Condición:
while (habitacion != 8)— el bucle para cuando llega a 8. - Dentro: imprime y luego incrementa
habitacion++ - El mensaje de “encontrado” va fuera del while.
- ¿Qué pasaría si el Doctor se esconde en la habitación 1? ¿Entraría el bucle?
// B-06: while — Lince busca al Doctor Mente void setup() { Serial.begin(9600); int habitacion = 1; while (habitacion != 8) { Serial.print("Revisando habitacion "); Serial.print(habitacion); Serial.println("..."); habitacion++; } Serial.println("Doctor Mente encontrado en la habitacion 8!"); } void loop() { }
Declara int bateriaMental = 100. Usa un while que consuma 12 unidades por vuelta mientras la batería sea mayor que 0. En cada vuelta imprime el nivel. Si el nivel está entre 1 y 30, añade al mensaje "[MODO EMERGENCIA]". Al terminar imprime "Psique sin energia."
while con un if interno es un patrón muy potente: el bucle controla cuándo parar y el if decide qué hacer en cada iteración según el estado actual.- Condición del while:
while (bateriaMental > 0) - Dentro: resta 12 primero, luego comprueba con
ifsi el nivel es ≤ 30. - Usa
Serial.print()para el nivel y luego elifpara añadir o no el mensaje de emergencia. - El valor puede quedar negativo al final — ¿es un problema? ¿Cómo lo protegerías?
// B-07: while + if — batería de Psique de Plata void setup() { Serial.begin(9600); int bateriaMental = 100; while (bateriaMental > 0) { bateriaMental -= 12; Serial.print("Bateria mental: "); Serial.print(bateriaMental); if (bateriaMental > 0 && bateriaMental <= 30) { Serial.print(" [MODO EMERGENCIA]"); } Serial.println(); } Serial.println("Psique sin energia."); } void loop() { }
Etiqueta:arduino, c++, IES MONTERRROSO, sintaxis
