Activitats

Repetir "N" vegades

L’objectiu d’aquesta activitat és entendre què farà un programa basat en estructures de repetició estudiant el seu font.

Observeu el codi font següent. Què fa el programa? Què sortirà escrit a la pantalla?

  1. public class ProgramaMisterios {
  2.  
  3. public static final int VALOR = 25;
  4.  
  5. public static void main (String[] args) {
  6. int n = 0;
  7. for (int i = 1; i < VALOR; i++) {
  8. if (i%10 == 0) {
  9. n++;
  10. }
  11. }
  12. System.out.println("El resultat és " + n + ".");
  13.  
  14. }
  15.  
  16. }

Aquest programa compta quants múltiples de 10 hi ha entre 1 i VALOR. En aquest cas, mostra per pantalla “El resultat és 2.”

Interval de valors

L’objectiu d’aquesta activitat és aprendre a usar estructures de repetició per recórrer intervals de valors.

Feu un programa anomenat MostraInterval que llegeixi des del teclat dos valors enters n1 i n2, comprovi que amb n1 < n2 (i mostri un error si no és així), i finalment escrigui tots els nombres enters dins l’interval [n1, n2] en ordre creixent.

  1. import java.util.Scanner;
  2.  
  3. public class MostraInterval {
  4.  
  5. public static void main (String[] args) {
  6. Scanner lector = new Scanner(System.in);
  7.  
  8. System.out.print("Quin és el valor de n1? ");
  9. int n1 = lector.nextInt();
  10. lector.nextLine();
  11.  
  12. System.out.print("Quin és el valor de n2 (més gran que n1)? ");
  13. int n2 = lector.nextInt();
  14. lector.nextLine();
  15.  
  16. if (n1 < n2) {
  17. for (int i = n1; i <= n2; i++) {
  18. System.out.println(i);'
  19. }
  20. } else {
  21. System.out.println("n2 no és més gran que n1!");
  22. }
  23. }
  24. }

Suma d'un interval

L’objectiu d’aquesta activitat és aprendre a usar estructures de repetició per recórrer intervals de valors de manera que es pugui fer un càlcul amb cadascun.

Feu un programa anomenat SumaInterval que llegeixi des del teclat dos nombre enters n1 i n2, amb n1 < n2, i escrigui la suma dels nombres enters que hi ha dins l’interval [n1 , n2].

  1. import java.util.Scanner;
  2.  
  3. public class SumaInterval {
  4. public static void main (String[] args) {
  5. Scanner lector = new Scanner(System.in);
  6.  
  7. System.out.print("Quin és el valor de n1? ");
  8. int n1 = lector.nextInt();
  9. lector.nextLine();
  10.  
  11. System.out.print("Quin és el valor de n2 (més gran que n1)? ");'
  12. int n2 = lector.nextInt();
  13. lector.nextLine();
  14.  
  15. int acumulador = 0;
  16.  
  17. if (n1 < n2) {
  18. for (int i = n1; i <= n2; i++) {
  19. acumulador = acumulador + i;
  20. }
  21. System.out.println("La suma total és " + acumulador + ".");
  22. } else {
  23. System.out.println("n2 no és més gran que n1!");
  24. }
  25. }
  26. }

Llista de múltiples

L’objectiu d’aquesta activitat és aprendre a usar estructures de repetició per generar valors a partir d’un recorregut.

Feu un programa anomenat LlistaMultiples que llegeixi des del teclat dos nombres enters positius n1 i n2, amb n1 < n2, i escrigui, començant des de n1, tots els nombres enters que són múltiples de n1 més petits o iguals que n2, en ordre creixent.

  1. import java.util.Scanner;
  2.  
  3. public class LlistaMultiples {
  4. public static void main (String[] args) {
  5. Scanner lector = new Scanner(System.in);
  6.  
  7. System.out.print("Quin és el valor de n1? ");
  8. int n1 = lector.nextInt();
  9. lector.nextLine();
  10.  
  11. System.out.print("Quin és el valor de n2 (més gran que n1)? ");
  12. int n2 = lector.nextInt();
  13. lector.nextLine();
  14. '
  15. if (n1 < n2) {
  16. int valor = n1;
  17. for (int i = n1; valor <= n2; i++) {
  18. System.out.println(valor);
  19. valor = n1 * i;
  20. }
  21. } else {
  22. System.out.println("n2 no és més gran que n1!");
  23. }
  24. }
  25. }

Cercar divisor

L’objectiu d’aquesta activitat és aprendre a usar estructures de repetició per cercar valors concrets dins d’un rang.

Feu un programa anomenat CercarDivisor que llegeixi des del teclat un nombre enter positiu major que 1 i n’escrigui el divisor positiu més gran diferent d’ell mateix i d’1. En cas de no trobar-ne cap, cal anunciar aquest fet amb un text. Per fer-ho, useu una variable de control de tipus semàfor.

  1. import java.util.Scanner;
  2.  
  3. public class CercarDivisor {
  4. public static void main (String[] args) {
  5. Scanner lector = new Scanner(System.in);
  6.  
  7. System.out.print("Quin nombre vols analitzar? ");
  8. int valor = lector.nextInt();
  9. lector.nextLine();
  10.  
  11. boolean trobat = false;
  12. int divisor = valor - 1;
  13.  
  14. while ((!trobat)&&(divisor > 1)) {
  15. if ((valor % divisor) == 0) {
  16. trobat = true;
  17. } else {
  18. divisor--;
  19. }
  20. }
  21. if (divisor == 1) {
  22. System.out.println("No s'ha trobat cap divisor.");
  23. } else {
  24. System.out.println("El divisor és " + divisor + ".");
  25. }
  26. }
  27.  
  28. }

Nombre de xifres

L’objectiu d’aquesta activitat és aprendre a usar estructures de repetició basades en un acumulador.

Feu un programa anomenat ComptaXifres que llegeixi un nombre enter des del teclat i escrigui el nombre de xifres que té. Tingueu en compte que es considera que el valor 0 té una xifra.

  1. import java.util.Scanner;
  2.  
  3. public class ComptaXifres {
  4. public static void main (String[] args) {
  5.  
  6. Scanner lector = new Scanner(System.in);
  7. System.out.print("Quin és el valor per analitzar? ");
  8. int valor = lector.nextInt();
  9. lector.nextLine();
  10. int numXifres = 0;
  11.  
  12. //"valor" actua com acumulador descendent.
  13. do {
  14. valor = valor / 10;
  15. numXifres++;
  16. } while(valor != 0);
  17. System.out.println("El nombre de xifres és " + numXifres + ".");
  18. }
  19. }

Suma fins a un límit

L’objectiu d’aquesta activitat és aprendre a usar estructures de repetició controlades mitjançant un acumulador.

Feu un programa anomenat SumarFinsLimit que llegeixi des del teclat un valor enter i tot seguit mostri fins a quin punt de la seqüència ordenada de nombre positius (1, 2, 3, etc.) cal sumar per arribar al nombre més proper per sota d’aquest valor. Finalment, han de mostrar quina és la suma d’aquests nombres. Per exemple, si l’entrada és el nombre 12, el resultat és mostrar els nombres 0, 1, 2, 3 i 4, i la seva suma, que és 10, ja que si s’inclou el 5 ens passem de 12.

  1. import java.util.Scanner;
  2.  
  3. public class SumarFinsLimit {
  4. public static void main (String[] args) {
  5. Scanner lector = new Scanner(System.in);
  6.  
  7. System.out.print("Quin és el valor límit? ");
  8. int valor = lector.nextInt();
  9. lector.nextLine();
  10.  
  11. int acumulat = 0;
  12. int comptador = 0;
  13.  
  14. while(acumulat <= valor) {
  15. acumulat = acumulat + comptador;
  16. if(acumulat <= valor){
  17. System.out.println(comptador);
  18. comptador++;
  19. }
  20. }
  21. System.out.println("La suma dels valors positius és " + (acumulat - comptador) + ".");
  22. }
  23. }

Parells dins d'un interval

L’objectiu d’aquesta activitat és aprendre a usar estructures de repetició per recórrer intervals de valors de manera que l’increment es faci directament sobre valors concrets.

Feu un programa anomenat ParellsDinsInterval que llegeixi des del teclat dos nombre enters n1 i n2, amb n1 < n2, i escrigui els nombres enters parells que hi ha dins l’interval [n1, n2] en ordre decreixent. Com a condició del codi, dins de l’estructura de repetició no hi pot haver cap estructura de selecció (if).

  1. import java.util.Scanner;
  2.  
  3. public class ParellsDinsInterval {
  4. public static void main (String[] args) {
  5. Scanner lector = new Scanner(System.in);
  6.  
  7. System.out.print("Quin és el valor de n1? ");
  8. int n1 = lector.nextInt();
  9. lector.nextLine();
  10.  
  11. System.out.print("Quin és el valor de n2 (més gran que n1)? ");
  12. int n2 = lector.nextInt();
  13. lector.nextLine();
  14.  
  15. if (n1 < n2) {
  16. int i = n2;
  17. //Es comença pel primer parell més proper a n2, dins de l'interval.
  18. if (n2%2 != 0) {
  19. i--;
  20. }
  21. while (i >= n1) {
  22. System.out.println(i);
  23. //S'avança de dos en dos, per recórrer només els parells.
  24. i = i - 2;
  25. }
  26. } else {
  27. System.out.println("n2 no és més gran que n1!");
  28. }
  29. }
  30. }

Dibuixar un triangle

L’objectiu d’aquesta activitat és aprendre a combinar estructures de repetició, unes dins d’altres, per fer un programa.

Feu un programa anomenat DibuixaTriangle que llegeixi des del teclat un valor enter i mostri per pantalla un triangle rectangle compost per lletres ‘a’, amb altura igual al valor llegit. Això s’assoleix escrivint tantes línies com aquest valor. Per exemple, si el valor és 5, cal mostrar per pantalla:

a
aa
aaa
aaaa
aaaaa

  1. import java.util.Scanner;
  2.  
  3. public class DibuixaTriangle {
  4. public static void main (String[] args) {
  5. Scanner lector = new Scanner(System.in);
  6.  
  7. System.out.print("Quina alçada vols? ");
  8. int alt = lector.nextInt();
  9. lector.nextLine();
  10.  
  11. int numAs = 1;
  12.  
  13. //Una iteració per línia.
  14. for(int i = 0; i < alt; i++) {
  15. //Escribim un cert nombre de lletres 'a'.
  16. for(int j = 0; j < numAs; j++) {
  17. System.out.print("a");
  18. }
  19. numAs++;
  20. System.out.println();
  21. }
  22. }
  23. }

La piràmide

L’objectiu d’aquesta activitat és aprendre a combinar estructures de repetició, unes dins d’altres, per fer un programa.

Feu un programa anomenat PiramideEstrelles que llegeixi des del teclat un valor de tipus enter. Tot seguit, ha de dibuixar una piràmide feta d’asteriscs (‘*’) d’una alçada igual al valor llegit. Per exemple, si el valor és 5, ha de sortir per pantalla:

   *   
  ***
 *****
*******

Fixeu-vos que:

  • A cada fila, el nombre d’espais que hi ha previs a una estrella comença per l’alçada i va decreixent fins a 0.
  • A cada fila, el nombre d’estrelles comença per 1 per la primera fila i després va creixent de dos en dos.

  1. import java.util.Scanner;
  2.  
  3. public class PiramideEstrelles {
  4. public static void main (String[] args) {
  5. Scanner lector = new Scanner(System.in);
  6.  
  7. System.out.print("Quina alçada vols? ");
  8. int alt = lector.nextInt();
  9. lector.nextLine();
  10.  
  11. //Bucle més extern: L'alçada. Cada iteració fa una línia.
  12. for (int fila = 0; fila < alt; fila++) {
  13.  
  14. //Bucle intern per fer els espais en blanc.
  15. for (int i = 1; i <= (alt - fila); i++) {
  16. System.out.print(" ");
  17. }
  18. //Bucle intern per fer les estrelles.
  19. for (int i = 1; i <= (fila * 2 - 1); i++) {
  20. System.out.print("*");
  21. }
  22. System.out.println();
  23. }
  24. }
  25. }

Anar a la pàgina anterior:
Estructures de repetició
Anar a la pàgina següent:
Exercicis d'autoavaluació