Está en la página 1de 30

Tema 3.

Estructuras de Control

Fundamentos de Programación Tema 3. Estructuras de Control 1 / 30


Objetivos
• Comprender el funcionamiento de las estructuras de
control básicas:
– secuenciales
– condicionales o de selección
– repetitivas
• Saber aplicar las estructuras de control para la
resolución de problemas

Fundamentos de Programación Tema 3. Estructuras de Control 2 / 30


Índice
1. Estructuras secuenciales:
1. Asignación
2. Entrada o Lectura
3. Salida o Escritura
2. Estructuras condicionales:
1. Simple (SI-ENTONCES-SINO)
2. Múltiple (EN CASO DE QUE )
3. Estructuras repetitivas:
1. Ciclo contado (PARA)
2. Ciclos condicionales (MIENTRAS / REPETIR-MIENTRAS)

Fundamentos de Programación Tema 3. Estructuras de Control 3 / 30


Tipos de estructuras de control
• Estructuras secuenciales: las instrucciones se
ejecutan una a continuación de otra en el orden en el
que están escritas
• Estructuras condicionales o de selección: permiten
decidir qué conjuntos de instrucciones ejecutar
• Estructuras repetitivas o cíclicas: permiten que un
conjunto de instrucciones se ejecute varias veces

Fundamentos de Programación Tema 3. Estructuras de Control 4 / 30


Estructuras secuenciales: Asignación
• Permite cambiar el valor de una variable
<identificador> = <expresión>;
• El tipo de la variable tiene que ser compatible con el
tipo del valor que se le asigne
• Se trata de una operación destructiva
• Ejemplos:
int a = 0; float b = 0; bool c = false;
a = 3;
b = a + 4.0 / 3;
c = (a > b) && (2 % 5 < 8);

Fundamentos de Programación Tema 3. Estructuras de Control 5 / 30


Estructuras secuenciales: Lectura/Entrada

• Permite asignar a una/s variable/s valor/es dado/s


desde un dispositivo de entrada (se utiliza para dar valor
a los datos de entrada del programa)
cin {>><identificador>}+;
• El tipo de la variable tiene que ser compatible con el
tipo del valor que se lea
• Se trata de una operación destructiva
• Ejemplos:
cin >> altura;
cin >> altura >> base; //equivale a cin >> altura; cin >> base;

Fundamentos de Programación Tema 3. Estructuras de Control 6 / 30


Estructuras secuenciales: Escritura/Salida

• Permite transferir resultados a un dispositivo de


salida (se utiliza para mostrar resultados al usuario de un
programa)
cout {<<expresión}+;
• Ejemplos:
float area = 10.0;
cout << area ; // muestra en pantalla 10.0
cout << "El área es " << area; //muestra en pantalla El área es 10.0

Fundamentos de Programación Tema 3. Estructuras de Control 7 / 30


Estructuras Secuenciales: Ejemplo
Problema: Calcular el área de un rectángulo dadas las dimensiones de sus lados
// Programa CalculoAreaRectangulo
// Entradas: el tamaño de los dos lados de un rectángulo, ambos lados >0
// Salidas: el área del rectángulo cuyos lados se dan como entrada

#include <iostream>
using namespace std;

int main()
{
// Declaración de variables
float lado1, lado2, area;

// Instrucciones
cout << "Introduce el tamaño de los lados: ";
cin >> lado1 >> lado2;
area = lado1 * lado2;
cout << "El área es "<< area;
}
Fundamentos de Programación Tema 3. Estructuras de Control 8 / 30
Estructuras Secuenciales: Ejemplo
Problema: Mostrar el resultado de dividir dos datos dados de entrada
// Programa División
// Entradas: el dividendo y el divisor, divisor<>0
// Salidas: el cociente de la división

int main()
{
// Declaración de variables
float dividendo, divisor, cociente;

// Instrucciones
cout << "Introduce dividendo: ";
cin >> dividendo;
cout << "Introduce divisor: ";
cin >> divisor;
cociente = dividendo / divisor;
cout << dividendo << " / " << divisor << " = " << cociente;
}
Fundamentos de Programación Tema 3. Estructuras de Control 9 / 30
Estructuras Condicionales o de Selección:
Simple
• Permite decidir entre dos caminos diferentes de
ejecución (SI lógico ENTONCES B1 SINO B2)
if (<expresión lógica>)
F <expresión {
lógica> <Bloque instrucciones 1>
}
Bloque
instrucciones 2 V else
{
Bloque <Bloque instrucciones 2>
instrucciones 1 }
// Las llaves no son necesarias si sólo
hay una instrucción

Fundamentos de Programación Tema 3. Estructuras de Control 10 / 30


Estructuras Condicionales o de Selección:
Simple
• La parte que se ejecuta si el lógico es falso es
opcional (SI lógico ENTONCES B1 )
if (<expresión lógica>)
F <expresión {
lógica> <Bloque instrucciones 1>
}
V

// Las llaves no son necesarias si sólo


Bloque
instrucciones 1
hay una instrucción

Fundamentos de Programación Tema 3. Estructuras de Control 11 / 30


Estructuras Condicionales o de Selección:
Simple
Problema: Mostrar el resultado de dividir dos datos dados de entrada
// Programa División
// Entradas: el dividendo y el divisor
// Salidas: el cociente de la división
int main()
{
// Declaración de variables
float dividendo, divisor;
// Instrucciones
cout << "Introduce dividendo";
cin >> dividendo;
cout << "Introduce divisor";
cin >> divisor;
if (divisor != 0)
cout << dividendo << "/“ << divisor << "=“ << dividendo/divisor;
else
cout << "No se puede dividir entre 0";
}
Fundamentos de Programación Tema 3. Estructuras de Control 12 / 30
Estructuras Condicionales o de Selección:
Simple
• Condiciones anidadas • Condiciones compuestas
// Mayor de tres números diferentes // Mayor de tres números diferentes

if (a>b) if ((a>b) && (a>c))


if (a>c) cout << "El mayor es “ << a ;
cout << "El mayor es “ << a ; if ((b>a) && (b>c))
else cout << "El mayor es “ << b ;
cout << "El mayor es “ << c ; if ((c>a) && (c>b))
else cout << "El mayor es “ << c ;
if (b>c)
cout << "El mayor es “ << b ;
else
cout << "El mayor es “ << c ;

Fundamentos de Programación Tema 3. Estructuras de Control 13 / 30


Estructuras Condicionales o de Selección:
Múltiple
• Permite decidir entre varios caminos diferentes de
ejecución (EN CASO DE QUE)
switch (<expresión>)
{
<expresión>
case <literal 1>: <Bloque 1>
break;
case <literal 2>: <Bloque 2>
break;
B. I. 1 B. I. 2 … 2 B. I. n B. I. 2 ….
case <literal n>: <Bloque n>
break;
default :
<Bloque por defecto>
<expresión> ha de ser:
}
entero, carácter o lógico
// La parte default es opcional
Fundamentos de Programación Tema 3. Estructuras de Control 14 / 30
Estructuras Condicionales o de Selección:
Múltiple
Problema: Dado un número del 1 al 7 mostrar con qué día de la semana se corresponde
// Programa DiasSemana
// Entradas: la posición de un día de la semana
// Salidas: el nombre del día de la semana asociado con la posición de entrada
int main()
{
// Declaración de variables
int digito;
// Instrucciones
cout << "Introduce la posición del día de la semana";
cin >> digito;
switch (digito) {
case 1: cout << "Lunes"; break;
case 2: cout << "Martes"; break;
….
case 7: cout << "Domingo"; break;
default: cout << "Dígito no válido";
}
}
Fundamentos de Programación Tema 3. Estructuras de Control 15 / 30
Estructuras Repetitivas
• Permiten ejecutar repetidamente un conjunto de
instrucciones
• El número de ejecuciones lo determina el valor de
una variable conocida como variable de control
• Tipos:
– Ciclos contados (PARA): el número de ejecuciones se
establece al construir el ciclo
– Ciclos condicionales (MIENTRAS y REPETIR-MIENTRAS): el
número de ejecuciones depende de un valor de tipo lógico

Fundamentos de Programación Tema 3. Estructuras de Control 16 / 30


Estructuras Repetitivas:
Ciclo Fijo o Contado (for)
Modificación
variable control

Inicialización V Ejecución
Evaluación
variable control cuerpo ciclo
int i, suma;
F suma = 0;
for (i = 1 ; i <= 10 ; i++)
for (inicialización; evaluación ; modificación) {
{ suma = suma + 1;
<Bloque instrucciones> }
} cout << suma;
// Las llaves no son necesarias si sólo hay una instrucción
// La variable de control suele ser de tipo entero
// No se debe modificar su valor en las instrucciones del ciclo

Fundamentos de Programación Tema 3. Estructuras de Control 17 / 30


Estructuras Repetitivas:
Ciclo Condicional (while)
Errores:
i no está inicializada
ciclo infinito
<expresión V Ejecución
lógica> cuerpo ciclo

int i, suma;
F
suma = 0;
while (i <= 10 )
{
while (expresión lógica) suma = suma + 1;
{ }
<Bloque instrucciones> cout << suma;
}
// Las llaves no son necesarias si sólo hay una
instrucción

Fundamentos de Programación Tema 3. Estructuras de Control 18 / 30


Estructuras Repetitivas:
Ciclo Condicional (while)

<expresión V Ejecución
lógica> cuerpo ciclo

int i, suma;
F
suma = 0;
i = 1; // inicialización
while ( i<=10 )
while (expresión lógica) {
{ suma = suma + 1;
<Bloque instrucciones> i = i + 1; // modificación
} }
// Las llaves no son necesarias si sólo hay una cout << suma;
instrucción

Fundamentos de Programación Tema 3. Estructuras de Control 19 / 30


Estructuras Repetitivas:
Ciclo Condicional (do-while)
Ejecución
cuerpo ciclo

V
<expresión
lógica> int i, suma;
suma = 0;
F i = 1; // inicialización
do
do
{
{
suma = suma + 1;
<Bloque instrucciones>
i = i+1; // modificación
} while (expresión lógica)
} while (i<=10 )
// se suele utilizar para controlar los valores de los
cout << suma;
// datos de entrada
// también para volver a ejecutar programas
Fundamentos de Programación Tema 3. Estructuras de Control 20 / 30
Estructuras Repetitivas
Problema: Dado un número n de notas calcular la nota media
// Programa NotaMedia
// Entradas: el número de notas y cada una de dichas notas
// Salidas: la nota media
int main ()
{
int n, i; float nota, suma;
suma = 0.0 ;
cout << "Introduce el número de notas";
cin >> n;
for (i = 1; i <= n ; i++) {
cout << "Introduce la nota número “ << i << ": ";
cin >> nota;
suma = suma + nota;
}
if (i > 0)
cout << "La nota media es “ << suma/n;
else cout << "No hay notas";
}

Fundamentos de Programación Tema 3. Estructuras de Control 21 / 30


Estructuras Repetitivas
Problema: Mostrar el resultado de dividir dos datos
// Programa División
// Entradas: el dividiendo y el divisor
// Salidas: el cociente de la división
int main ()
{
// Declaración de variables
float dividendo, divisor;
// Instrucciones

cout << "Introduce dividendo";


cin >> dividendo;
do {
cout << "Introduce divisor distinto de 0";
cin >> divisor;
} while (divisor == 0)
cout << dividendo << "/" << divisor << "=" << dividendo/divisor;

}
Fundamentos de Programación Tema 3. Estructuras de Control 22 / 30
Estructuras Repetitivas
Problema: Calcular la nota media de una serie de notas, se termina al pulsar -1
// Programa NotaMedia
// Entradas: una secuencia de notas mayores que 0, terminadas en una nota -1
// Salidas: la nota media
int main ()
{ int i;
float nota, suma;
i = 0; suma = 0.0;
cout << "Introduce la nota " << i +1 << " (-1 para terminar ):" ;
cin >> nota;
while (nota != -1) {
suma = suma + nota;
i = i + 1;
cout << "Introduce la nota " << i+1 <<" (-1 para terminar ):" ;
cin >> nota;
}
if (i > 0)
cout << "La nota media es " << suma / i;
else cout << "No hay notas";
}
Fundamentos de Programación Tema 3. Estructuras de Control 23 / 30
Estructuras Repetitivas
Problema: Calcular la nota media de una serie de notas, se termina al pulsar -1
// Programa NotaMedia
// Entradas: una secuencia de notas mayores que 0, terminadas en una nota -1
// Salidas: la nota media
int main ()
{
int n, i;
float nota, suma;
i = 0; suma = 0.0;
do {
cout << "Introduce la nota " << i << " (-1 para terminar ): " ;
cin >> nota;
if (nota != -1) {
suma = suma + nota; i = i + 1;
}
} while (nota != -1) ;
if (i > 0)
cout << "La nota media es " << suma / i;
else cout << "No hay notas";
}

Fundamentos de Programación Tema 3. Estructuras de Control 24 / 30


Estructuras Repetitivas
• Las estructuras repetitivas se pueden anidar de forma que en
el cuerpo de un ciclo puede aparecer otro
• La estructura interna debe estar completamente dentro de la
estructura externa, no pudiendo existir solapamientos
Correcto Incorrecto

• En ciclos anidados no se puede utilizar la misma variable de


control

Fundamentos de Programación Tema 3. Estructuras de Control 25 / 30


Estructuras Repetitivas
suma = 0;
for (i=1 ; i<=2; i++)
for (j=4; j>1; j--) Se ejecuta 2 veces
suma++; Se ejecuta 2*3 veces

i j Suma
1 4 1
1 3 2
1 2 3
2 4 4
2 3 5
2 2 6

Fundamentos de Programación Tema 3. Estructuras de Control 26 / 30


Problema: Queremos leer una serie de números y calcular la suma de
los positivos y la de los negativos. Para cuando el usuario lo desee

// Programa SumaPositivosNegativos
// Entradas: una secuencia de números
// Salidas: la suma de los valores positivos y la suma de los negativos
int main ()
{ float numero, sum_pos = 0.0, sum_neg = 0.0; char res;
do {
cout << " Introduce un número : ";
cin >> numero;
if (numero > 0)
sum_pos = sum_pos + numero;
else sum_neg = sum_neg + numero;
cout << "Para seguir introduciendo números pulsa S ó s: ";
cin >> res;
} while ((res == 'S') || (res == 's'));
cout << " Suma de positivos = " << sum_pos << endl;
cout << " Suma de negativos = " << sum_neg << endl;

}
Fundamentos de Programación Tema 3. Estructuras de Control 27 / 30
Problema: Queremos leer una serie de números y calcular la suma de
los positivos y la de los negativos. Para cuando el usuario lo desee

// Programa SumaPositivosNegativos
// Entradas: una secuencia de números
// Salidas: la suma de los valores positivos y la suma de los negativos
int main ()
{
float numero, sum_pos = 0.0, sum_neg = 0.0; char res = ’s’;
while ((res == 'S') || (res == 's')) {
cout << " Introduce un número : ";
cin >> numero;
if (numero > 0)
sum_pos = sum_pos + numero;
else sum_neg = sum_neg + numero;
cout << "Para seguir introduciendo números pulsa S ó s: ";
cin >> res;
}
cout << " Suma de positivos = " << sum_pos << endl;
cout << " Suma de negativos = " << sum_neg << endl;

}
Fundamentos de Programación Tema 3. Estructuras de Control 28 / 30
Problema: Queremos leer una serie de números y calcular la suma de
los positivos y la de los negativos. Se para al pulsar 0

// Programa SumaPositivosNegativos
// Entradas: una secuencia de números
// Salidas: la suma de los valores positivos y la suma de los negativos
int main ()
{
float numero, sum_pos = 0.0, sum_neg = 0.0;
cout << " Introduce un número (0 para acabar): ";
cin >> numero;
while (numero != 0){
if (numero > 0)
sum_pos = sum_pos + numero;
else sum_neg = sum_neg + numero;
cout << " Introduce un número (0 para acabar): ";
cin >> numero;
}
cout << " Suma de positivos = " << sum_pos << endl;
cout << " Suma de negativos = " << sum_neg << endl;

}
Fundamentos de Programación Tema 3. Estructuras de Control 29 / 30
Resumen
• Estructuras secuenciales: las instrucciones se ejecutan en
el orden en que están escritas:
– Lectura/Entrada: cin>>
– Escritura/Salida: cout<<
– Asignación: =
• Estructuras condicionales o de selección: permiten
ejecutar diferentes caminos de instrucciones
– Simple: if-else
– Múltiple: switch
• Estructuras repetitivas o cíclicas: permiten repetir
conjuntos de instrucciones:
– Ciclos Fijos o contados: for
– Ciclos Condicionales: while y do-while

Fundamentos de Programación Tema 3. Estructuras de Control 30 / 30

También podría gustarte