Programación 1

Anuncio
Programación 1
Grado de Ingeniería Robótica
Tema 3: Sentencias de control
●
Índice (sesión 30/09/2016):
–
Algoritmos y programas
–
Estructura secuencial
–
Estructuras de selección
2
Tema 3: Sentencias de control
●
Algoritmos y programas
–
Algoritmo
–
Conjunto de instrucciones que permiten hallar la
solución a un determinado problema
Programa
●
●
Conjunto de sentencias escritas en un lenguaje
determinado para que un ordenador lleve a cabo
una tarea
3
Tema 3: Sentencias de control
●
Algoritmos y programas
–
●
Los programas codificar algoritmos
Ejemplo.- tarea: obtener el área de un triángulo
–
Algoritmo: multiplicar la base del triángulo por la altura del mismo y
dividirla entre dos
–
Programa
int base=3, altura=5;
double area = base*altura/2.0;
printf("El area de un triángulo de base %d y altura %d es %g\n",
base, altura, area);
4
Tema 3: Sentencias de control
●
Algoritmos y programas
–
En un determinado instante, el estado de un programa
queda definido por el valor que tienen sus variables
–
El estado de un programa es dinámico, y puede
cambiar con la ejecución de sentencias dentro del
mismo
→ Es imprescindible realizar las sentencias
adecuadas en el orden adecuado
5
Tema 3: Sentencias de control
●
Estructura secuencial de un programa
–
Las instrucciones de un programa se ejecutan una tras otra de
manera consecutiva en el orden establecido
–
Ejemplo:
int valorA=11, valorB=4, resultado;
...
resultado = valorA/valorB;
valorA = valorA + 1; // resultado = 2
valorA = valorA + 1;
resultado = valorA/valorB; // resultado = 3
No es lo
mismo
6
Tema 3: Sentencias de control
●
Estructura secuencial de un programa
–
Problemas comunes al seleccionar mal el orden de las
instrucciones
●
●
●
Uso de variables no inicializadas
Impresión de variables antes de contener el valor
final
Instrucciones que no llegan a ejecutarse
7
Tema 3: Sentencias de control
●
Estructuras de selección
–
Permiten que el programa determine las sentencias a
ejecutar en base a condiciones
●
Las condiciones se suelen obtener a partir de
operadores relacionales, integrando como
operandos valores, variables o constantes
8
Tema 3: Sentencias de control
●
Estructuras de selección
–
Ejemplos donde se utilizan estructuras de selección
●
●
●
Si el robot no tiene batería: ir a la zona de carga
Si el robot está cerca de un obstáculo: reducir su
velocidad
Si el semáforo esta en rojo: detenernos, en
cualquier otro caso: continuar
9
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if
if (condicion_a_cumplir)
instruccion_a_realizar;
cuando la instrucción
sea una única línea
if (condicion_a_cumplir)
{
instruccion_a_realizar;
}
cuando la instrucción tenga
más de dos líneas
10
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if
–
condicion_a_cumplir
●
Valor que represente una condición (SI/NO)
– Variable de tipo bool*
*recuerda usar: #include <stdbool.h>
–
–
El resultado de un operador relacional
Variable de otro tipo (int, char, double, ...)
→ se maneja como una variable bool, tomando el
valor false si vale 0 o true para cualquier otro valor
→ !! No aconsejado
11
Tema 3: Sentencias de control
●
Guía de operaciones para operaciones lógicas
varA
●
varB
! varA
varA && varB
varA || varB
true
true
false
true
true
false
true
true
false
true
true
false
-
false
true
false
false
-
false
false
Operadores relacionales
–
Mayor que, menor que, igual que → <, >, ==
–
Mayor o igual que, menor o igual que → <=, >=
–
Distinto de → !=
12
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if
bool fumador=true;
double dineroAhorrado=500;
...
if (fumador)
dineroAhorrado = 0;
...
if ( dineroAhorrado>1000 )
fumador = false;
13
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if
–
El uso de llaves es:
●
●
Opcional si la instrucción a ejecutar tiene una línea
Obligatorio si la instrucción tiene dos o más líneas
– Si no se añaden llaves, solamente la primera
instrucción después del if (condicion_a_cumplir)
será condicional: la segunda y sucesivas se
ejecutarán siempre
14
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if
bool condicionCumplida = false;
if(condicionCumplida)
printf("Primera instrucción \n");
printf("Segunda instrucción \n");
printf("Tercera instrucción \n");
if(condicionCumplida)
{
printf("Primera instrucción \n");
printf("Segunda instrucción \n");
printf("Tercera instrucción \n");
}
15
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if
–
La condicion_a_cumplir puede obtenerse mediante la combinación (usando
operadores lógicos) de diferentes (sub)condiciones
●
●
Uso (casi) obligatorio de paréntesis para determinar el orden de las
operaciones
– También es aconsejable a la hora de realizar operaciones aritméticas
1+2*3 no es lo mismo que (1+2)*3
Ejemplo (asumir variables de tipo bool, salvo tiempoEnEspera (int))
if(oscuridad || bateriaAgotada || (tiempoEnEspera>60 && !prioridad))
cameraEncendida = false;
16
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if
–
Un programa con sentencias if puede visualizarse
como un diagrama de la siguiente forma
instruccionA();
if(condicion)
instruccionSiSeCumpleCondicion();
instruccionB();
instruccionC();
17
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if
–
Un programa con sentencias if puede visualizarse
como un diagrama de la siguiente forma
Instrucción a
Condición
Instrucción ejecutada
si cumple la condición
Instrucción b
Instrucción c
18
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if … else
–
En ocasiones, tenemos instrucciones que sólo queremos que se
ejecuten cuando no se de la condición → opción else
if (condicion_a_cumplir)
{
instruccion_a_realizar_condicion_verdadera;
}
else
{
instruccion_a_realizar_condicion_falsa;
}
19
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if … else
int dineroAhorrado = 25500;
int precioCoche = 15000;
if (dineroAhorrado<precioCoche)
printf("Necesitas ahorrar, sólo tienes %d euros
\n",dineroAhorrado);
else
printf("Ya puedes comprarte el coche de %d euros
\n",precioCoche);
20
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if … else
–
Podemos anidar condiciones usando la combinación else if
double distancia;
...
if(distancia<500)
printf("Cerca \n");
else if(distancia<1500)
printf("Distancia media \n");
else
printf("Lejos\n");
21
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if...else
Instrucción a
Condición
NO
SI
Instrucción ejecutada
si se cumple la condición
Instrucción ejecutada
si NO se cumple la condición
Instrucción b
Instrucción c
22
Tema 3: Sentencias de control
●
Estructuras de selección: sentencia if...else
double distancia;
...
distancia<500
SI
“Cerca”
NO
distancia<1500
NO
SI
“Distancia Media”
“Lejos”
...
23
Tema 3: Sentencias de control
●
Estructuras de selección múltiple: switch … case
–
Cuando necesitamos seleccionar entre múltiples opciones usaremos switch, que usa
como condiciones los posibles valores de una variable manejada como entera
switch (variable_entera_a_evaluar)
{
case resultado_a:
instruccion_a_realizar_resultado_a;
break;
case resultado_b:
instruccion_a_realizar_resultado_b;
break;
default :
instruccion_a_realizar_resultado_diferente_a_b;
}
24
Tema 3: Sentencias de control
●
Estructuras de selección múltiple: switch … case
int numHermanos=6; // Prueba a usar 0,1,2,3,4 ...
switch (numHermanos)
{
case 0:
printf("Hijo/a único\n");
break;
case 1:
printf("Pareja \n");
break;
case 2:
printf("Familia numerosa \n");
break;
default :
printf("Familia muy numerosa \n"); }
* los valores que aparecen dentro de case deben ser constantes enteras
25
Tema 3: Sentencias de control
●
Estructuras de selección múltiple: switch … case
–
La sintaxis es algo compleja → practicar
–
Si el valor de la variable no está entre los valores de los case
→ default (es opcional, puede no aparecer)
–
La sentencia break evita que se ejecuten las instrucciones
siguientes
●
●
Por defecto, se ejecuta la instrucción del case
correspondiente y la ejecución continúa hasta encontrar
un break o terminar el switch
Por tanto, el orden de los case importa si no vamos a usar
sentencias break
26
Tema 3: Sentencias de control
●
Estructuras de selección múltiple: switch … case
int numHermanos=6; // Prueba a usar 0,1,2,3,4 ...
switch (numHermanos) {
case 0:
printf("Hijo/a único\n");
case 1:
printf("Pareja \n");
case 2:
printf("Familia numerosa \n");
default :
printf("Familia muy numerosa \n"); }
27
Tema 3: Sentencias de control
●
Estructuras de selección múltiple: switch … case
case(valor a):
switch(variable)
Instrucción a
break;
case(valor b):
Instrucción b
break;
Si no hay
opción por
defecto (default)
y el valor de
variable no
fuera a, b ni c
case(valor c):
Instrucción c
break;
default:
Instrucción default
...
28
Tema 3: Sentencias de control
●
Uso de enumeraciones junto a switch … case
enum paloPoker{pica, corazon, trebol, diamante };
enum paloPoker miCarta = pica;
switch (miCarta) {
case diamante:
printf("Diamante \n"); break;
case trevol:
printf("Trébol \n"); break;
case corazon:
printf("Corazón \n"); break;
case pica:
printf("Pica \n"); break;
default :
printf("La carta no es de poker \n"); }
29
Tema 3: Sentencias de control
●
Otra forma de definir constantes const
–
const tipo identificador = valor;
●
●
●
●
const.- palabra clave usado para crear constantes
tipo.- palabra clave que determina el tipo de la
variable: char, short, int, float, double
identificador.- nombre asignado a la variable:
elección del desarrollador
valor.-valor compatible con el tipo de la variable
30
Tema 3: Sentencias de control
●
Otra forma de definir constantes const
–
Ejemplo
–
const double cambioEuroPesetas = 166.386;
Diferencias con #define
●
●
#define afecta durante el proceso de pre-procesado,
antes de la compilación(donde p.e., se eliminan los
comentarios).
const permite indicar de forma explícita el tipo de la
constante
31
Tema 3: Sentencias de control
●
Otra forma de definir constantes const
–
Diferencias con #define
#include <stdio.h>
#define VALOR_DEFINE 7
int main(int argc, char **argv)
{ const double valorDefine = 7;
printf("La mitad de valor define: %g
\n",VALOR_DEFINE/2);
printf("La mitad de valor define: %g
\n",valorDefine/2)
return 0; }
32
Programación 1
Grado de Ingeniería Robótica
Descargar