← Tornar a l'índex d'exercicis

Exercicis i Qüestionaris U2: Control de Flux

Autoavaluació interactiva d'U2

Aquests qüestionaris avaluen el control del flux d'un programa: decisions amb if-else i switch, repeticions amb for, while i do-while, i interrupcions amb break i continue.

1. Sentències Condicionals (if-else i switch)

Determina la sortida del programa segons els camins d'execució presos.

Construeix el codi que determina si num és parell o senar:

Arrossega des d'ací (o clica dues línies per intercanviar-les):

if ( num % 2 == 0 ) {
println("Parell");
} else {
println("Senar");
}

Si val és 50, quina és la sortida d'aquest codi?

if (val == 10) { println("val == 10"); } else if (val >= 20 && val < 50) { println("20 <= val < 50"); } else { if (val < 20) { println("val < 20"); } else { println("val >= 50"); } }
val < 20
val >= 50
val == 10
20 <= val < 50
Cap d'aquestes

Selecciona l'exemple correcte de la sentència condicional

if i < j { String a = "Hello"; }
if (i < j): String a = "Hello";
if (i < j) { String a = "Hello"; }
if {i < j} ( String a = "Hello"; )
if [i < j] String a = "Hello";

Selecciona la sortida del programa segons el valor de la variable a.

if (a <= 0) { if(a == 0) { println("a"); } else { println("b"); } } print("c");

a = 0

a
ab
ac
c

a = -1

ab
bc
ac
c

a = 1

ab
bc
ac
c

Construeix el codi que recomana què has d'agafar per ixir de casa segons el temps que fa:

Arrossega des d'ací (o clica dues línies per intercanviar-les):

if (plou) {
if (vent) {
print("Posa't l'impermeable! 🧥");
} else {
print("Bring an umbrella! ☔️");
}
} else {
if (fred) {
print("Agafa l'abric 🥶");
} else {
print("Disfruta el dia! 🌈☀️");
}
}

Què imprimeix el següent programa?

String foo = "B"; int bar = 0; switch (foo){ case "A" -> bar += 10; case "B" -> bar += 20; case "C" -> bar += 30; default -> bar += 40; } println(bar);
20

2. Estructures Repetitives (Bucles for, while, do-while)

Calcula el nombre d'iteracions i el resultat del programa en executar bucles.

Selecciona tots els bucles que imprimeixen "LoOOops" exactament 10 vegades.

for (int i = 0; i < 9; i++) { println("LoOOops"); }
for (int i = 0; i <= 9; i++) { println("LoOOops"); }
for (int i = 0; i < 10; i++) { println("LoOOops"); }
for (int i = 0; i <= 10; i++) { println("LoOOops"); }
for (int i = 13; i < 23; i++) { println("LoOOops"); }
Emparella el nom de cada bloc d'aquest bulce for:
for (int i = 0; i < 10; i++) { println("Hola"); }
Inicialització
int i = 0
Condició
i < 10
Actualització
i++
Cos del bucle
{ println("Hola"); }

Quins dels següents for fan exactament 100 iteracions?

for (int i = 0; i < 100; i++)
for (int i = 0; i <= 100; i++)
for (int i = 1; i < 100; i++)
for (int i = 1; i <= 100; i++)

Quins dels següents for imprimiran el número 100?

for (int i = 0; i < 100; i++) { println(i); }
for (int i = 0; i <= 100; i++) { println(i); }
for (int i = 99; i < 101; i++) { println(i); }
for (int i = 100; i <= 101; i++) { println(i); }
for (int i = 100; i < 100; i++) { println(i); }
for (int i = 100; i <= 100; i++) { println(i); }

Què imprimeix el següent codi?

int i = 0; for (int k = 0; k < 100; k++) { i++; } println(i);
101
100
0
99

3. Salts de Control (break i continue)

Comprova com s'interrompen o es continuen els bucles en trobar aquestes sentències.

Què imprimeix el següent codi?

for (int i = 0; i < 11; i++) { if (i % 2 != 0) { continue; } print(i + " "); }
0 2 4 6 8 10
1 3 5 7 9
0 2 4 6 8 10 11
0

Quants números imprimex el següent programa?

for (int i = 0; i < 5; i++) { println(i); if (i < 3) { continue; } else { for (int j = 0; j < 5; j++) { println(j); } } }
15

4. Exercicis Pràctics de Control de Flux

Exercicis proposats

  1. Classificador de nombres:

    Llegeix un número enter i indica si és positiu, negatiu o zero, i si és parell o senar.

    Introdueix un número: 7 El número 7 es positiu i senar.
  2. Major de tres números:

    Llegeix tres números enters i mostra quin es el major. Si hi ha empat, indica-ho amb un missatge.

    Introdueix el primer número: 7 Introdueix el segon número: 12 Introdueix el tercer número: 5 El número 12 es el major.
  3. Precio de la entrada:

    Un parc d'atracciones cobra segons l'edat:

    • menors de 3 anys: gratis
    • de 3 a 12 anys: 5 €
    • de 13 a 17 anys: 10 €
    • de 18 a 64 anys: 15 €
    • 65 anys o més: 7 €
    Introdueix l'edat: 25 El preu de l'entrada és de 15 €.
  4. Temps de pantalla:

    La teua aplicació de benestar digital advertix a l'usuari segons les hores d'ús de pantalla diàries.

    • Ús saludable
    • Ús moderat
    • Ús elevat
    • Possible addicció
    Hores de pantalla diàries: 25 Possible addicció.
  5. Variants

    Crea una variant dels dos exercicis anteriors amb la temàtica que t'agrade. Exemples:

    • rang en un videojoc segons els punts: (bronce, plata, oro, diamante)
    • nivell de risc d'un pacient segons els signes vitals (baix, moderat, alt, crític)
    • nivel de influencer segons el nombre de seguidors: cuenta en creimiento, nano-influencer, micro-influencer, macro-influencer, mega-influencer
    • bateria en el mòbil: crítica, baixa, mitjana, completa
  6. switch2if

    Transforma el següent codi amb switch a un codi amb if-else:

    String clase = IO.readln("Elige tu clase (guerrero, mago, arquero, cazador, ladrón): "); String habilidad = switch (clase) { case "guerrero" -> "Golpe sísmico: daño masivo en área"; case "mago" -> "Tormenta arcana: lluvia de meteoritos"; case "arquero", "cazador" -> "Disparo certero: crítico garantizado a distancia"; case "ladrón" -> "Sombra veloz: invisibilidad durante 5 segundos"; default -> "Clase desconocida: ¡crea un personaje nuevo!"; }; IO.println("Habilidad especial: " + habilidad);
  7. if2switch

    Transforma el següent codi amb if-else a un codi amb switch:

    String tipo = IO.readln("Tipo de tu Pokémon (fuego, agua, planta, eléctrico, tierra, roca): "); String debilidad; if (tipo.equals("fuego")) { debilidad = "Agua, Tierra y Roca"; } else if (tipo.equals("agua")) { debilidad = "Planta y Eléctrico"; } else if (tipo.equals("planta")) { debilidad = "Fuego"; } else if (tipo.equals("eléctrico")) { debilidad = "Tierra"; } else if (tipo.equals("tierra") || tipo.equals("roca")) { debilidad = "Agua y Planta"; } else { debilidad = "Tipo desconocido: ¡consulta la Pokédex!"; } IO.println("Débil ante: " + debilidad);
  8. expressió / sentencia switch

    Fes un programa equivalent, transformant la següent expressió switch a una sentència switch:

    String hand1 = IO.readln("Elige tu mano (piedra, papel, tijera): "); String hand2 = IO.readln("Elige la mano de tu oponente (piedra, papel, tijera): "); String result = switch (hand1+hand2) { case "piedrapiedra", "papelpapel", "tijeratijera" -> "Empate"; case "piedratijera", "papelpiedra", "tijerapapel" -> "Ganaste"; case "piedrapapel", "papeltijera", "tijerapiedra" -> "Perdiste"; default -> "Mano desconocida: ¡elige piedra, papel o tijera!"; }; IO.println("Resultado: " + result);
  9. Accés a l'aplicació

    Implementa en Java el següent diagrama, que decideix si un usuari pot accedir a una app.

    Llegeix per teclat l'edat del jugador (int) i si el seu compte està verificat (boolean), i imprimix el missatge corresponent.

    flowchart TD
        A([INICI]) --> B{"¿Edat >= 18?"}
        B -- Sí --> C{"¿Compte verificat?"}
        C -- Sí --> D["Acces concedit"]
        C -- No --> E["Verifica el compte abans de continuar"]
        B -- No --> F["Acces denegat: edat minima 18 anys"]
                        

    L'estructura del codi pot ser:

    int edat = IO.readln("Introdueix la teva edat: "); boolean compteVerificat = IO.readln("¿Compte verificat? (true/false): ").equalsIgnoreCase("true"); if ( ) { if ( ) { } else { } } else { } /* Pista: el `if-else` exterior correspon al primer rombe del diagrama (edat). El `if-else` interior nomes s'executa quan la condicio exterior es certa, per tant nomes es mira si el compte esta verificat quan l'edat es suficient.*/
  10. Accés al mode Clasificatoria

    El següent diagrama mostra les condicions que ha de complir un jugador per accedir al mode Clasificatoria d'un videojoc.

    Implementa el codi corresponent amb sentències if-else.

    flowchart TD
        A([INICI]) --> B{"¿Nivell >= 30?"}
        B -- No --> C["Acces denegat:
        puja de nivell"]
        B -- Sí --> D{"¿Email verificat?"}
        D -- No --> E["Acces denegat:
        verifica el teu email"]
        D -- Sí --> F{"¿Sancions actives?"}
        F -- Sí --> G["Acces denegat:
        compte sancionat"]
        F -- No --> H["Acces concedit al
        mode Clasificatoria"]
                        
    int nivell = IO.readln("Introdueix el teu nivell: "); boolean emailVerificat = IO.readln("¿Email verificat? (true/false): ").equalsIgnoreCase("true"); boolean sancionsActives = IO.readln("¿Sancions actives? (true/false): ").equalsIgnoreCase("true"); // depenent del valor de les variables // s'ha d'imprimir un missatge d'accés concedit o denegat // amb la raó corresponent
  11. Qualitat de vídeo en streaming

    Implementa el següent diagrama de flux, que decideix la qualitat de vídeo en streaming segons la velocitat de connexió i el tipus de pla del servei.

    flowchart TD
        A([INICI]) --> B{"¿Velocitat >= 25 Mbps?"}
        B -- No --> C{"¿Velocitat >= 5 Mbps?"}
        B -- Sí --> D{"¿Pla Premium?"}
        C -- No --> E["Qualitat: 480p"]
        C -- Sí --> F{"¿Pla Premium?"}
        D -- Sí --> G["Qualitat: 4K"]
        D -- No --> H["Qualitat: 1080p"]
        F -- Sí --> I["Qualitat: 1080p"]
        F -- No --> J["Qualitat: 720p"]
                        
    int velocitat = ...
  12. Reptes for

    Imprimix:

    1. 1_000_000 de vegades "Hola, món!"
    2. els números del 25 al 250_000
    3. una línia de 24 caracters "------------------------"
    4. els números del 25 al -25
    5. "Hola!" 10 vegades, numerant cada línia: 1. Hola!, 2. Hola!, ...
    6. els números del 0 al 100 de 10 en 10
    7. els números del 100 al 0 de 5 en 5
    8. els quadrats dels números del 1 al 10, indicant el número: El quadrat de 1 es 1, El quadrat de 2 es 4, ...
    9. els números del 2 al 50, comptant de 2 en 2
    10. els números imparells de l'1 al 51
    11. els múltiples de 7 des del 7 al 100
    12. la taula de multiplicar del 6: 6 x 1 = 6, 6 x 2 = 12, ..., 6 x 10 = 60
  13. Taula de multiplicar

    Demana un enter N i mostra la seva taula de multiplicar de l'1 al 10 utilitzant un bucle for.

    Introduix un número: 7 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 7 x 10 = 70
  14. Saltant d'un numero a un altre

    Demana un enter INI, un enter FIN i un enter PAS, i mostra els números des de INI a FIN comptant de PAS en PAS.

    Introduix INI: 13 Introduix FIN: 20 Introduix PAS: 2 13 15 17 19
  15. Múltiples

    Demana un enter INI, un enter FIN i un enter M, i mostra només els números des de INI a FIN que siguen múltiples de M.

    Introduix INI: 13 Introduix FIN: 20 Introduix M: 5 15 20

    En este exercici necessitaràs utilitzar un bucle for amb una condició if a l'interior.

    for ( ) { if ( ) { } }
  16. Parell/imparell

    Imprimix els números de l'1 al 50, escrivint "parell" o "senar" al costat de cada un.

    1 senar 2 parell 3 senar 4 parell 5 senar 6 parell 7 senar 8 parell 9 senar 10 parell ...
  17. Me quiere, no me quiere

    Demana un enter N i imprimix la frase "Me quiere", alternant amb "No me quiere", N vegades.

    Introduix un número: 3 Me quiere No me quiere Me quiere
  18. FizzBuzz

    Imprimix els números de l'A al B, substituint els múltiples de 3 per "Fizz", els múltiplos de 5 per "Buzz", i els múltiplos de 15 per "FizzBuzz".

    Introdueix A: 1 Introdueix B: 100 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz ...
  19. El robot aspirador

    Un robot aspirador recorre una habitación siguiendo una línea recta. Sabemos desde qué posición comienza, a qué distancia queremos que llegue y cuántos centímetros avanza en cada movimiento.

    Escribe un programa que pida:

    • La posición inicial.
    • La posición del objetivo.
    • La distancia que avanza el robot en cada movimiento.

    El programa debe mostrar la posición del robot después de cada movimiento, empezando por la posición inicial.

    El robot debe seguir avanzando hasta que supere el objetivo, y se debe mostrar su posición final.

    Por ejemplo, si comienza en la posición 0, el objetivo está en 100 cm y avanza 30 cm cada vez:

    Posición inicial: 0 Posición objetivo: 100 Distancia por movimiento: 30 0 30 60 90 120

    El 120 se muestra aunque el objetivo sea 100, porque es la primera posición que supera el objetivo. Después de mostrar 120, el programa debe terminar.

    Requisitos:

    • Utiliza un bucle for.
    • Utiliza break para terminar el bucle.
    • No utilices variables auxiliares para controlar el bucle.
  20. Desea continuar (s/n)

  21. Coordenades

    Introduix el número de files: 3 Introduix el número de columnes: 4 (0,0) (0,1) (0,2) (0,3) (1,0) (1,1) (1,2) (1,3) (2,0) (2,1) (2,2) (2,3)
  22. Rectangle

    Introduix alçada: 7 Introduix ample: 5 ##### ##### ##### ##### ##### ##### #####
  23. Tauler d'escacs (de tamany m x n)

    Introduix el número de files: 4 Introduix el número de columnes: 10 # # # # # # # # # # # # # # # # # # # #
  24. Marc

    Introduix alçada: 7 Introduix ample: 5 ##### # # # # # # # # # # #####
  25. Triangle

    Introduix alçada: 5 * ** *** **** *****
  26. Triangle invers

    Introduix alçada: 5 ***** **** *** ** *