Diferència entre revisions de la pàgina «M3 - Programació estructurada / Continguts UF1: Esquema de recorregut»

De wikiserver
Dreceres ràpides: navegació, cerca
(Es crea la pàgina amb «L'esquema de recorregut s'aplica a un problema si: • Tracta dades amb estructura seqüencial • Per resoldre el problema cal «visitar» totes les dades L'esquema t...».)
 
 
(Hi ha 4 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
 +
'''Esquema de recorregut'''
 +
 
L'esquema de recorregut s'aplica a un problema si:
 
L'esquema de recorregut s'aplica a un problema si:
• Tracta dades amb estructura seqüencial
+
 
• Per resoldre el problema cal «visitar» totes les dades
+
:• Tracta dades amb estructura seqüencial
 +
:• Per resoldre el problema cal «visitar» totes les dades
 +
 
 
L'esquema té aquest aspecte:
 
L'esquema té aquest aspecte:
 
+
<pre>
 
  accedir al primer element
 
  accedir al primer element
 
  inicialitzar tractament
 
  inicialitzar tractament
Mentre no últim element fer
+
Mentre no últim element fer
tractar element
+
  tractar element
obtenir següent element
+
  obtenir següent element
fmentre
+
fmentre
 +
</pre>
  
Noteu que això no és un algorisme sinó un esquema amb instruccions comprensibles.
+
Noteu que això no és un algorisme sinó un '''esquema''' amb instruccions comprensibles.
Veurem a continuació alguns exemples en els quals s’ha aplicat l’esquema de recorregut
+
 
per a escriure el programa. És un bon exercici intentar identificar quina és la seqüència
+
Veurem a continuació alguns exemples en els quals s’ha aplicat l’esquema de recorregut per a escriure el programa. És un bon exercici intentar identificar quina és la seqüència que s’està tractant en cada programa i com s’han refinat les accions genèriques de
que s’està tractant en cada programa i com s’han refinat les accions genèriques de
 
 
l’esquema de recorregut en cada cas concret.  
 
l’esquema de recorregut en cada cas concret.  
  
Exemple 1: Divisors d’un número
+
'''Exemple 1: Divisors d’un número'''
L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat,
+
 
escrigui per pantalla, els seus divisors (sense comptar el 1 i el propi número). Si el
+
L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla, els seus divisors (sense comptar el 1 i el propi número). Si el número fos primer, el programa no escriuria res per pantalla.
número fos primer, el programa no escriuria res per pantalla.
+
 
 +
<source lang="java">
 
public class Divisors {
 
public class Divisors {
 
  public static void main(String[] args) {
 
  public static void main(String[] args) {
{ //Declaració de variables
+
  //Declaració de variables
int n, i;
+
  int n, i;
Scanner lector = new Scanner(System.in);
+
  Scanner lector = new Scanner(System.in);
/* Accedir al primer element */
+
  /* Accedir al primer element */
i = 2;
+
  i = 2;
/* Inicialitzar tractament */
+
  /* Inicialitzar tractament */
System.out.println("Introdueix un número: ");
+
  System.out.println("Introdueix un número: ");
n = lector.nextInt();
+
  n = lector.nextInt();
System.out.println("Divisors : ");
+
  System.out.println("Divisors : ");
/* Mentre no ultim element */
+
  /* Mentre no ultim element */
while (i < n) {
+
  while (i < n) {
// Tractar_element
+
    // Tractar_element
if (n % i == 0) {
+
    if (n % i == 0) {
System.out.println(i);
+
      System.out.println(i);
}
+
    }
/* Obtenir següent element */
+
    /* Obtenir següent element */
i = i + 1;
+
    i = i + 1;
}
+
  }
}
 
 
  }
 
  }
 
}  
 
}  
 +
</source>
  
Exemple 2: Sumar les xifres d’un número
+
'''Exemple 2: Sumar les xifres d’un número'''
L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat,
+
 
escrigui per pantalla un altre número enter corresponent a la suma de les xifres del
+
L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla un altre número enter corresponent a la suma de les xifres del número llegit.
número llegit.
+
<source lang="java">
 
public class SumaXifres {
 
public class SumaXifres {
 
  public static void main(String[] args) {
 
  public static void main(String[] args) {
{ //Declaració de variables
+
  //Declaració de variables
int n, suma, d;
+
  int n, suma, d;
Scanner lector = new Scanner(System.in);
+
  Scanner lector = new Scanner(System.in);
// Accedir al primer element
+
  // Accedir al primer element
System.out.println("Introdueix un número : ");
+
  System.out.println("Introdueix un número : ");
n = lector.nextInt();
+
  n = lector.nextInt();
d = n % 10;
+
  d = n % 10;
/* Inicialitzar tractament */
+
  /* Inicialitzar tractament */
suma = 0;
+
  suma = 0;
/* Mentre no ultim element */
+
  /* Mentre no ultim element */
while (n != 0) {
+
  while (n != 0) {
/* Tractar_element */
+
    /* Tractar_element */
suma = suma + d;
+
    suma = suma + d;
/* Obtenir següent element */
+
    /* Obtenir següent element */
n = n / 10;
+
    n = n / 10;
d = n % 10;
+
    d = n % 10;
 +
  }
 +
  /* Tractament_final */
 +
  System.out.println("La suma de les xifres es : " + suma);
 
  }
 
  }
/* Tractament_final */
+
}
System.out.println("La suma de les xifres es : " + suma);
+
</source>
}
+
'''Exemple 3: Comptar les aparicions de la lletra ‘a’'''
}
 
}
 
  
Exemple 3: Comptar les aparicions de la lletra ‘a’
+
L’objectiu és dissenyar un programa que compti el nombre de vegades que apareix la lletra ‘a’ en una frase acabada en punt i introduïda per teclat.
L’objectiu és dissenyar un programa que compti el nombre de vegades que apareix la
+
<source lang="java">
lletra ‘a’ en una frase acabada en punt i introduïda per teclat.
 
 
public class ComptarA {
 
public class ComptarA {
 
  public static void main(String[] args) {
 
  public static void main(String[] args) {
{ //Declaració de variables
+
  //Declaració de variables
char c = ' ';
+
  char c = ' ';
int n;
+
  int n;
Scanner lector = new Scanner(System.in);
+
  Scanner lector = new Scanner(System.in);
// Accedir al primer element
+
  // Accedir al primer element
System.out.println("Introdueix un caràcter: ");
+
  System.out.println("Introdueix un caràcter: ");
c = lector.next().charAt(0);
+
  c = lector.next().charAt(0);
/* Inicialitzar tractament */
+
  /* Inicialitzar tractament */
n = 0;
+
  n = 0;
/* Mentre no ultim element */
+
  /* Mentre no ultim element */
while (c != '.') {
+
  while (c != '.') {
/*Tractar_element */
+
    /*Tractar_element */
if (c == 'a') {
+
    if (c == 'a') {
n = n + 1;
+
      n = n + 1;
}
+
    }
/* Obtenir següent element */
+
    /* Obtenir següent element */
System.out.println("Introdueix un caràcter: ");
+
    System.out.println("Introdueix un caràcter: ");
c = lector.next().charAt(0);
+
    c = lector.next().charAt(0);
}
+
  }
/*Tractament_final */
+
  /*Tractament_final */
System.out.println("La lletra ‘a’ ha aparegut " + n + " vegades");
+
  System.out.println("La lletra ‘a’ ha aparegut " + n + " vegades");
}
 
 
  }
 
  }
 
}
 
}
 +
</source>

Revisió de 12:28, 19 oct 2020

Esquema de recorregut

L'esquema de recorregut s'aplica a un problema si:

• Tracta dades amb estructura seqüencial
• Per resoldre el problema cal «visitar» totes les dades

L'esquema té aquest aspecte:

 accedir al primer element
 inicialitzar tractament
 Mentre no últim element fer
   tractar element
   obtenir següent element
 fmentre

Noteu que això no és un algorisme sinó un esquema amb instruccions comprensibles.

Veurem a continuació alguns exemples en els quals s’ha aplicat l’esquema de recorregut per a escriure el programa. És un bon exercici intentar identificar quina és la seqüència que s’està tractant en cada programa i com s’han refinat les accions genèriques de l’esquema de recorregut en cada cas concret.

Exemple 1: Divisors d’un número

L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla, els seus divisors (sense comptar el 1 i el propi número). Si el número fos primer, el programa no escriuria res per pantalla.

public class Divisors {
 public static void main(String[] args) {
   //Declaració de variables
   int n, i;
   Scanner lector = new Scanner(System.in);
   /* Accedir al primer element */
   i = 2;
   /* Inicialitzar tractament */
   System.out.println("Introdueix un número: ");
   n = lector.nextInt();
   System.out.println("Divisors : ");
   /* Mentre no ultim element */
   while (i < n) {
     // Tractar_element
    if (n % i == 0) {
      System.out.println(i);
    }
    /* Obtenir següent element */
    i = i + 1;
   }
 }
}

Exemple 2: Sumar les xifres d’un número

L’objectiu és dissenyar un programa que, donat un número enter positiu llegit de teclat, escrigui per pantalla un altre número enter corresponent a la suma de les xifres del número llegit.

public class SumaXifres {
 public static void main(String[] args) {
   //Declaració de variables
   int n, suma, d;
   Scanner lector = new Scanner(System.in);
   // Accedir al primer element
   System.out.println("Introdueix un número : ");
   n = lector.nextInt();
   d = n % 10;
   /* Inicialitzar tractament */
   suma = 0;
   /* Mentre no ultim element */
   while (n != 0) {
     /* Tractar_element */
     suma = suma + d;
     /* Obtenir següent element */
     n = n / 10;
     d = n % 10;
   }
   /* Tractament_final */
   System.out.println("La suma de les xifres es : " + suma);
 }
}

Exemple 3: Comptar les aparicions de la lletra ‘a’

L’objectiu és dissenyar un programa que compti el nombre de vegades que apareix la lletra ‘a’ en una frase acabada en punt i introduïda per teclat.

public class ComptarA {
 public static void main(String[] args) {
   //Declaració de variables
   char c = ' ';
   int n;
   Scanner lector = new Scanner(System.in);
   // Accedir al primer element
   System.out.println("Introdueix un caràcter: ");
   c = lector.next().charAt(0);
   /* Inicialitzar tractament */
   n = 0;
   /* Mentre no ultim element */
   while (c != '.') {
     /*Tractar_element */
     if (c == 'a') {
       n = n + 1;
     }
     /* Obtenir següent element */
     System.out.println("Introdueix un caràcter: ");
     c = lector.next().charAt(0);
   }
   /*Tractament_final */
   System.out.println("La lletra ‘a’ ha aparegut " + n + " vegades");
 }
}