0% encontró este documento útil (0 votos)
44 vistas

Tema 3. Elementos de Programación Estructurada

El documento describe los elementos básicos de la programación estructurada. Explica que se basa en tres estructuras de control (secuencial, selección e iteración) y que define problemas como una jerarquía de subproblemas más simples. También define las ventajas de este paradigma como mejorar la calidad y facilidad de desarrollo de programas.

Cargado por

nayko
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
44 vistas

Tema 3. Elementos de Programación Estructurada

El documento describe los elementos básicos de la programación estructurada. Explica que se basa en tres estructuras de control (secuencial, selección e iteración) y que define problemas como una jerarquía de subproblemas más simples. También define las ventajas de este paradigma como mejorar la calidad y facilidad de desarrollo de programas.

Cargado por

nayko
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 44

Tema 3.

Elementos de
programación estructurada
C H R I S TO P H E R E X P Ó S I TO I Z Q U I E R D O
A I R A M E X P Ó S I TO M Á R Q U E Z
I S R A E L LÓ P E Z P L ATA
M A R Í A B E L É N M E L I Á N B AT I S TA
JOSÉ MARCOS MORENO VEGA
La programación estructurada
• La programación estructurada es aquel paradigma de programación que dice que todo programa puede
escribirse únicamente utilizando 3 estructuras básicas de control:
• Secuencial
• Selección
• Iteración

• Se basa en un teorema desarrollado por Boehm y Jacopini en 1966

• Define un problema como aquel compuesto por un determinado número de subproblemas mas sencillos
que el original

•Forma una estructura top-down, es decir, jerárquica


La programación estructurada
• En programación estructurada, el diseño del programa es
descendente.
Sentencia 1

• Las estructuras de control manejadas son limitadas a 3. Evita el


uso de las sentencias GOTO Sentencia 2

• El ámbito de las estructuras también se encuentra limitado


Sentencia 3

• Cualquier algoritmo en programación estructurada puede ser


representado mediante un diagrama de flujo
Ventajas
• El paradigma de programación estructurada está pensado para mejorar la calidad, claridad y tiempo de desarrollo

• Los programas pueden leerse de forma secuencial, por lo que son más fáciles de entender

• La estructura de los programas es muy clara

• Reduce el esfuerzo en pruebas. Facilita el seguimiento de los errores del programa gracias a su estructura mas sencilla

• El software creado es mas fácil de ampliar, ya que es mas sencillo

• Se elimina el código espagueti


Ejecución de un programa
• El flujo de ejecución de un programa se realiza de manera
lineal Sentencia 1

• Puede ser representado mediante un diagrama de flujo

• Existen estructuras que permiten cambiar esta linealidad Sentencia 2 Sentencia 3


• Condicionales.
• Bucles.
Condicionales
• Permite ejecutar un conjunto de sentencias si se cumplen una serie de condiciones lógicas

• Una condición lógica se puede considerar como una comprobación mediante operadores
relacionales que puede dar valores de true o false

• Fundamental a la hora de desviar el flujo del programa


Condicionales
• Las condiciones lógicas evalúan si unas determinadas variables o constantes cumplen con una
determinada restricción

• Se pueden anidar las diferentes evaluaciones mediante operadores lógicos


Operador relacional Operador lógico
< Menor que && And
> Mayor que || Or
<= Menor o igual que ! Not
>= Mayor o igual que
== Igual que
!= Distinto a
Condicionales
• And (&&) Op1 Op2 Resultado
false false false
false true false
true false false
true true true

• Or (||) Op1 Op2 Resultado


false false false
false true true
true false true
true true true

Op1 Resultado
• Not (!)
false true
true false
Condicionales
• Gracias a los operadores lógicos, se puede hacer un anidamiento de condiciones lógicas

• En este caso, es importante tener en cuenta la precedencia de los operadores

• Ejemplo: int a = 3; int b = 5; int c = 3; boolean d = true;


• (a == c) && (a < b) && d
• (a == c) && (a < b) && !d
• (a == c) && (a < b) || !d
• (a == c) && (a > b) || !d
• ((a == c) && (a > b)) || !d
Condicional if
• If: Ejecuta un conjunto de sentencias sólo si se da una Sentencia 1
condición
Cond

True False
Sentencia 2

Sentencia 3

Sentencia 4
Condicional if-else
• If: Ejecuta un conjunto de sentencias sólo si se da una
condición Sentencia 1

•If-Else: Igual que el if, pero con unas sentencias alternativas. True
Cond
False
Se pueden concatenar varios if y else

Sentencia 2 Sentencia 3
Condicional if-else
• Un if se define por la sentencia if(condición lógica) {}

• El bloque delimitado por llaves será el conjunto de sentencias Sentencia 1


que se ejecuten si la condición lógica tiene valor true

True False
Cond
• Opcionalmente, se puede añadir después del bloque del if la
sentencia else {}, cuyo bloque es el conjunto de sentencias
ejecutadas si el valor no se cumple
Sentencia 2 Sentencia 3

• Existe la opción de incluir la sentencia else if(condición lógica) {},


cuyo bloque se ejecuta si la sentencia if anterior no se cumple y la
condición lógica representada si
Condicional switch
• If: Ejecuta un conjunto de sentencias sólo si se da una
condición Sentencia 1

•If-Else: Igual que el if, pero con unas sentencias alternativas . Varia
ble
Se pueden concatenar varios if y else Val1 Val2 ValN

S2 S3 … SN
•Switch: Ejecuta un conjunto de sentencias dependiendo del
valor de una variable
Condicional switch
• Las condiciones se ejecutan dependiendo del valor de una
variable

• Se representa mediante la sentencia switch(variable) {}, siendo Sentencia 1


la variable entre paréntesis aquella cuyo valor se analiza

Varia
• Dentro del bloque del switch, se tienen las sentencias case valor: Val1
ble

{}, cuyo bloque se ejecuta si la variable analizada tiene ese valor. Val2 ValN
Cada bloque del case debe terminar con la sentencia break;
S2 S3 … SN

• Siempre se debe incluir la sentencia default: {}, cuyo bloque se


ejecuta cuando la variable no tiene ningun valor de los “cases”
anteriores
Condicionales en Java
If If-Else Switch
if (a < b) { if (a < b) { switch(a) {
System.out.println(“A es menor”); System.out.println(“A es menor”); case 1: {
System.out.println(“B es mayor”); } else { System.out.println(“Opción 1”);
} System.out.println(“A es mayor o igual”); break;
} }
case 2: {
Muestra “A es menor” si el valor de la variable a es menor al System.out.println(“Opción 2”);
Muestra los textos solo si el valor de la variable de la variable b. En caso contrario, muestra “A es mayor o break;
a es menor al de la variable b igual” }
default: {
System.out.println(“Resto”);
if (a < b) {
}
System.out.println(“A es menor”);
}
} else if (a > b) {
System.out.println(“A es mayor”);
Si la variable a vale 1, muestra “Opción 1”, si
} else {
vale 2, muestra “Opción 2”. Para el resto de
System.out.println(“SON IGUALES!”);
casos, muestra “Resto”.
}

Ejemplo de concatenación de if y else


Ejercicios de condicionales
1. Dado 2 números, mostrar el texto “Son iguales” sólo si los números son los mismos

2. Dados 2 números a y b, mostrar:


1. “los 2 son negativos” si a y b son menores a 0
2. “a es positivo, b es negativo” si a es mayor que 0 y b menor
3. “a es negativo, b es positivo” si a es menor que 0 y b mayor
4. “los 2 son positivos” si a y b son mayores a 0

3. Escribir el valor en letras de un número del 1 al 5 guardado en la variable a. En caso de no


estar en este rango, escribir “Número incorrecto”
Sentencias repetitivas (bucles)
• Permiten repetir un bloque de sentencias un número determinado de veces

• El número de veces que se repiten las sentencias de un bucle dependen de una condición lógica

• Muy utilizados cuando se desea un comportamiento repetitivo del programa

• Ahorra la escritura de código repetido

• Ejemplo:
• Escribe los números del 1 al 10
• Escribe los números del 1 al 1000000
Bucle for
• Repite un conjunto de instrucciones un número Sentencia 1
predeterminado de veces
i=0
i = i+1
i < 10
•El control de las iteraciones se realiza con una variable interna True False
del bucle Sentencia 2

Sentencia 3
• En este bucle se define:
• Valor inicial de la variable Sentencia 4
• Incremento de la variable en cada iteración
• Condición en la que termina el bucle
Ejemplo bucle for. Contar hasta 10
Cuenta:
1 Print(“Cuenta:”)
2
3 i=1
i = i+1
4 i <= 10

5 True False
6 Print(i)
7
8
9
10 Print(“Fin”)

Fin
Bucle while
• Repite un conjunto de instrucciones siempre que se cumpla Sentencia 1
una condición lógica definida
• Si la condición a evaluar tiene valor true, se ejecuta una iteración
de las sentencias del bucle Condición
• Si la condición tiene valor false, se termina el bucle True False
Sentencia 2

• Si la condición no se cumple desde un inicio, las sentencias Sentencia 3


dentro del bucle nunca se ejecutan
Sentencia 4

• Si la condición se cumple siempre, se pueden ocasionar


bucles infinitos
Ejemplo bucle while. Contar hasta 10
1
2 Cont = 1
3
4
Cont <= 10
5
6 True False
7 Print(Cont)
8
9 Cont = Cont + 1
10
Fin
Print(“Fin”)
Ejemplo bucle while infinito
1
3 Cont = 1
5
7
Cont != 10
9
11 True False
13 Print(Cont)
15
… Cont = Cont + 2

Print (“Fin”)
Bucle do-while
• Repite un conjunto de instrucciones siempre que se cumpla Sentencia 1
una condición definida
• Si la condición a evaluar tiene valor false, se termina el bucle
False
• Si la condición tiene valor true, se ejecuta una iteración de las Sentencia 2
sentencias del bucle
Sentencia 3

• Similar al bucle while. 1 diferencia: Condición


• La condición se comprueba al final de la estructura. En el bucle
while es al inicio True
Sentencia 4

• Al igual que el while, puede ocasionar bucles infinitos


Ejemplo bucle do-while. Contar hasta 10.
1
2 Cont = 1
3
4
Print(Cont)
5
False
6
Cont = Cont + 1
7
8
9 Cont > 10
10 True
Fin
Print(“Fin”)
Bucles en Java. Ejemplo contar hasta 10
For While Do-While

for (int i = 1; i <= 10; i++) { int i = 1; int i = 1;


System.out.println(i); while (i <= 10) { do {
} System.out.println(i); System.out.println(i);
System.out.println(“Fin”); i++; i++;
} } while (i <= 10);
System.out.println(“Fin”); System.out.println(“Fin”);
Bucles. Comparativa
Bucle for Bucle while Bucle do-while
• Utilizado cuando se quiere un número de • Utilizado cuando la condición de parada es • Utilizado cuando la condición de parada es
iteraciones concreto compleja compleja y se quiere al menos una ejecución

• Mejor opción para el recorrido de estructuras • Sólo ejecuta las sentencias mientras se • Sólo ejecuta las sentencias mientras se
de datos cumpla la condición cumpla la condición

• La condición se evalúa antes de las • La condición se evalúa después de las


sentencias sentencias

for (int i = 1; i <= 10; i++) { int i = 1; int i = 1;


System.out.println(i); while (i <= 10) { do {
} System.out.println(i); System.out.println(i);
System.out.println(“Fin”); i++; i++;
} } while (i <= 10);
System.out.println(“Fin”); System.out.println(“Fin”);
break y continue
• Permiten romper un bucle de distintas formas
• break: Si se ejecuta la sentencia break, la ejecución del bucle termina
for (int i = 1; i <= 10; i++) {
if (i == 5) break;
Muestra los números del 1 al 4
System.out.println(i);
}

• continue: Si se ejecuta la sentencia continue, la iteración actual termina, pero el bucle continua

for (int i = 1; i <= 10; i++) {


if (i == 5) continue; Muestra los números del 1 al 10,
System.out.println(i); excepto el 5
}
Ejercicios de sentencias repetitivas
1. Escribir los números del 1 al 100 que sean impares

2. Escribir los números incrementando desde 1 hasta que la suma de todos esos números sea
mayor a una variable entera x. Ejemplo:
1. X = 10; 1, 2, 3, 4, 5  1+2+3+4+5 = 15
2. X = 25; 1, 2, 3, 4, 5, 6, 7, 8  1+2+3+4+5+6+7+8 = 36
Buenas prácticas
• La indentación debe ser clara para los bucles. Se debe distinguir que sentencias están dentro de que
bucle
• Las llave abierta en un bucle se pone a la derecha de la condición o debajo. La llave cerrada, en su propia línea

• OJO a los bucles infinitos

• En un bucle for el número de la iteración lo tenemos en la variable interna. No usar otra para el
mismo cometido

• En un condicional switch:
• Incluir la opción default aunque no se utilice
• Todas las opciones de un switch deben finalizar en un break
Estructuras de datos
• Una estructura de datos es un conjunto de valores (normalmente del mismo tipo) agrupadas
bajo un mismo identificador

• Sirven para representar agrupaciones de forma lógica, así como para facilitar su acceso

• En Java existen un gran número de estructuras de datos para las distintas necesidades de
almacenamiento de datos

• Dominar el manejo de las estructuras de datos es una tarea fundamental para resolver
cualquier problema
Vectores unidimensionales
• Conjunto de datos agrupados e identificados por un mismo nombre
• Pueden ser de los mismos tipos de datos que cualquier variable (int, char, double, etc.)
• Se declaran siguiendo la forma tipo[] nombre = new tipo[tamaño];
int[] numeros = new int[10];

• El tamaño debe ser una constante entera


• A cada elemento se accede a través de un índice, empezando por el 0
• Pueden ser inicializados directamente. Ejemplo: int[] numeros = {1, 2, 3};

• Los vectores simples se caracterizan por ser:


• Unidimensionales
• Tamaño fijo
Vectores unidimensionales. Ejemplo
int numeros[7] = {30, 50, 70, -49, 1, 1357, 8};

0 1 2 3 4 5 6
30 50 70 -49 1 1357 8

numeros[0] numeros[2] numeros[4] numeros[6]

numeros[1] numeros[3] numeros[5]


Vectores multidimensionales
• Extienden los vectores unidimensionales a 2 o mas dimensiones

• Se declaran siguiendo la forma tipo[][] nombre = new tipo[tamaño1][tamaño2];, donde cada


grupo de corchetes representa una dimensión del vector
int[][] numeros = new int[10][15];

•Pueden ser inicializados directamente al igual que los vectores unidimensionales. Ejemplo:
int[][] numeros = {{1, 2, 3},
{4, 5, 6}};
Vectores multidimensionales. Ejemplo
int numeros[3][4] = {{30, 50, 70, 20} , {-49, 1, 1357, 8}, {33, -5, 37, 22}};

numeros[0][1] numeros[0][2] numeros[0][3]

numeros[0][0] 0 1 2 3
numeros[1][0] 0 30 50 70 20
1 -49 1 1357 8
numeros[2][0]
2 33 -5 37 22

numeros[2][3]
Ejemplo de bucles con vectores
/*Partimos de la existencia de un vector vec de enteros. Queremos mostrar sus valores de la forma
[indice] = valor */

//Tamaño del vector


int tam = vec.length;
//Con un bucle for
for (int i = 0; i < tam; i++) {
System.out.println(“[“ + i + “] = ” + vec[i]);
}
//Con un bucle while
int i = 0;
while (i < tam) {
System.out.println(“[“ + i + “] = ” + vec[i]);
i++;
}
Ejercicios de estructuras de datos
1. Leer todos los elementos de un vector simple de enteros y de tamaño 10

2. Leer todos los elementos de un vector simple de enteros y de tamaño 10. Cuando uno de los
elementos sea mayor a 20, dejar de leer.

3. Sumar todos los elementos de una matriz de tamaño 5x10


La clase String
• Como se ha visto, la clase String representa una cadena de caracteres

• Es una forma simplificada de representar un vector unidimensional de char.

• String cadena = “¡Hola!”;  char[] cadena = {‘¡’, ‘H’, ‘o’, ‘l’, ‘a’, ‘!‘};

0 1 2 3 4 5
¡ H o l a !

• cadena[2] = ‘o’
La clase String
• La clase String nos permite realizar muchas operaciones con cadenas de caracteres como
(partiendo del ejemplo String cadena = “Hola clase”;):
• Concatenación: cadena + “ “ + “¿Qué tal?”  “Hola clase ¿Qué tal?”
• Conocer el tamaño: cadena.size()  10
• Obtener subcadenas: cadena.substring(5, 9)  “clase”
• Dividir cadena: String[] palabras = cadena.split(‘ ’)  palabras[0] = “Hola”, palabras[1] = “clase”
• Y muchas mas cosas

• Java tiene una documentación muy completa de lo que se puede hacer con sus cadenas de
caracteres en https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
La clase Object
• En Java existe una clase especial llamada Object, que representa a cualquier clase del sistema

• Implícitamente, todas las clases en Java derivan de Object

• Puede utilizarse para representar cualquier elemento genérico

Object obj;
obj = 1;
System.out.println(obj);
obj = “Prueba”;
System.out.println(obj);
Las clases contenedoras
• En Java, los tipos básicos (int, double, char, etc.) tienen asociados un conjunto de clases que extienden sus
funcionalidades llamadas clases contenedoras

• Estas clases son muy parecidas en nombre a los tipos básicos asociados:
Primitivos Clase Contenedora Argumentos del Constructor
boolean Boolean boolean o String
byte Byte byte o String
char Character char
double Double double o String
float Float float, double o String
int Integer int o String
long Long long o String
short Short short o String
Las clases contenedoras
Funcionalidades
• ParseXXX(Object param): Convierte el elemento pasado por parámetro en el tipo del contenedor

Integer num = Integer.ParseInt(“32”); num = 32

• XXXValue(): Convierte el elemento de la clase contenedora al tipo indicado en el nombre de la función

Integer num = new Integer(32); num = “32”


String num = Integer.StringInt();

• ValueOf(): Convierte al tipo de la clase contenedora realizando las modificaciones necesarias

Integer num = Integer.valueOf(“101011”, 2); num = 43


Otras estructuras de datos
• Java tiene un gran número de librerías con las que manejar distintas estructuras de datos
• Facilitan en gran medida la labor al programador
• Vector dinámico: Vector que no tiene un tamaño fijo, ya que varía según el número de
elementos que se le han insertado

ArrayList<tipo> nombre = new ArrayList<>();

nombre

•Enlace: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
Otras estructuras de datos
• Mapa: Permite almacenar los datos en parejas de clave-valor
• Los valores se buscan en el mapa a partir de la clave

HashMap<tipoClave, tipoValor> nombre = new HashMap<>();

nombre

•Enlace: https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
Otras estructuras de datos
• Conjuntos: Almacena elementos, sin un orden determinado. No permite elementos repetidos
HashSet<tipo> nombre = new HashSet<>();

nombre

•Enlace: https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html

También podría gustarte