Programación 1

Anuncio
Programación 1
Grado de Ingeniería Robótica
Tema 3: Sentencias de control
●
Índice (sesión 7/10/2016):
–
Estructuras de iteración
–
while
● do...while
● for
Sentencias de entrada
–
Scanf
Traza de un programa
●
●
2
Tema 3: Sentencias de control
●
Estructuras de iteración
–
Permiten que un conjunto de sentencias se puedan
repetir un número determinado de veces
–
Aspectos clave
●
●
●
Cuerpo del bucle: ¿qué conjunto de instrucciones
son las que se van a repetir?
Condición: determina si el cuerpo se ejecuta una vez
más o si el bucle debe terminar
Contadores: uso de un contador que, a priori,
determina el número de repeticiones del bucle
3
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia while
while (condicion_a_cumplir)
{
cuerpo_del_bucle;
}
*se puede usar la versión sin llaves
cuando el cuerpo conste de una única
instrucción (no recomendado)
4
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia while
–
cuerpo_del_bucle;
●
–
Conjunto de instrucciones que se ejecutarán de
forma interrumpida mientras se cumpla la condición
condicion_a_cumplir
●
●
Valor booleano (SI/NO) que proviene de una
variable o una expresión lógica
También puede ser una constante o valor, pero...
5
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia while
while (true)
{
cargaBateria = cargaBateria + 1;
}
...
while (estaLloviendo==true)
{
velocidad = moderada;
parabrisasActivo = true;
}
6
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia while
–
Si condicion_a_cumplir no se modifica dentro del bucle
(ni su valor puede modificarse de forma externa), el
bucle se realizará ininterrumpidamente (si es cierta)
●
–
Eso ocurrirá usando constantes o valores
Siempre que se haga un bucle ...
●
Estudiar los posibles valores de la variable usada en
la condición ... y su evolución a lo largo del bucle
7
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia while
while ( estaLloviendo==true )
{
velocidad = moderada;
parabrisasActivo = true;
aguaRecogida = leerSensorLluvia();
if( aguaRecogida>0 )
estaLloviendo=true;
else
estaLloviendo = false;
}
8
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia while
...
¿Condición ?
SI
Cuerpo del bucle
NO
...
9
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia do … while
do
{
cuerpo_del_bucle;
} while (condicion_a_cumplir);
*se puede usar la versión sin llaves
cuando el cuerpo conste de una única
instrucción (no recomendado)
10
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia do … while
–
Debe entenderse como un caso específico de while
donde al menos, el cuerpo del bucle se ejecutará una
vez
–
La comprobación se realizará al final de la iteración,
una vez ejecutadas todas las instrucciones del cuerpo
del bucle
–
Debemos tener cuidado con el punto y coma, ya que
aparece en la estructura do{...} while(); pero no en
while(){...}
11
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia do … while
...
Contienen exactamente
el mismo código !!
Cuerpo del bucle
¿Condición ?
SI
Cuerpo del bucle
NO
...
12
Tema 3: Sentencias de control
int contador = 0;
do
{
contador = contador +1;
printf("Sumamos uno al contador \n");
} while(contador<3);
13
Tema 3: Sentencias de control
●
Sentencia de entrada: scanf
–
La sentencia scanf nos permite leer desde la terminal la
entrada realizada por teclado por el usuario.
–
Permite asociar el/los valor/es introducidos a diferentes
variables declaradas previamente.
–
Se utilizan una serie de marcas, de forma análoga a
printf, para dar formato a la entrada en base a los tipos
base
14
Tema 3: Sentencias de control
●
Sintaxis básica
scanf(cadena de control, &var1, &var2, …, &varN);
●
La cadena de control debe ir entre comillas dobles e incluir tantas
marcas como valores queramos solicitar al usuario. Cada marca
consta de un '%' y una letra indicando el tipo esperado.
–
●
●
Ejemplo: “%d %c” → Esperamos que el usuario introduzca un
entero y un carácter simple.
Cada variable debe venir precedida de '&', usado para el manejo
de punteros (se verá en futuros temas)
La ejecución se detendrá hasta que el usuario haya introducido
valores paras las N variables solicitadas
15
Tema 3: Sentencias de control
●
Sintaxis básica
scanf(cadena de control, &val1, &val2, …, &valN);
●
●
Como uso básico, utilizaremos los tipos usados hasta
ahora con printf, salvo por el manejo del tipo double
–
Usando printf, podemos usar %f , %g, %e sin problema
–
Con scanf, debemos usar la marca %lf para double
El resto de valores base usados hasta ahora se
mantienen:
c → char
d → int
f → float
16
Tema 3: Sentencias de control
●
Sentencia de entrada: scanf
–
Ejemplo: obtener un número par del usuario
do
{
printf("Introduce un número entero par \n");
scanf("%d", &valor);
printf("Valor introducido: %d\n",valor);
} while(valor%2 != 0);
17
Tema 3: Sentencias de control
●
Sentencia de entrada: scanf (ejemplo con diferentes tipos)
double peso, imc; int altura; char nom,ap1,ap2;
printf("Introduce tus iniciales \n");
scanf("%c %c %c", &nom,&ap1, &ap2);
printf("Introduce tu altura en centímetros\n");
scanf("%d", &altura);
printf("Introduce tu peso en kilos\n");
scanf("%lf", &peso);
printf("Peso: %g kilogramos y Altura: %d,%02d metros\n",peso,
(altura/100),altura%100);
imc = peso/((altura/100.0)*(altura/100.0));
printf("El IMC de %c%c%c es %g\n", nom,ap1,ap2, imc );
18
Tema 3: Sentencias de control
●
scanf es una fuente común de errores y problemas
–
Sintaxis compleja, tipos de datos, ejecución del
programa, etc.
scanf bloquea el programa hasta que se hayan
introducido tantos valores como variables solicitadas
Se recomienda usar printf para comprobar que las
variables introducidas tienen el formato adecuado
●
–
→ practicar !!
19
Tema 3: Sentencias de control
●
Estructuras de iteración
–
En algunas ocasiones, conocemos de antemano el
número de veces que debemos ejecutar el cuerpo de
un bucle.
–
Para ello, añadimos un variable contadora que forma
parte de condición →sentencia for
20
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia for
declaración_variable_contadora;
for (inicialización; condición; modificación)
{
cuerpo_del_bucle;
}
*se puede usar la versión sin llaves
cuando el cuerpo conste de una única
instrucción (no recomendado)
21
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia for (uso básico)
–
Inicialización
–
Asocia el valor inicial a la variable contadora
● Nombres comunes de variables: i, j, z
Condición
–
Realiza una comprobación sobre la variable
contadora → el resultado será V o F
Modificación
●
●
●
Cambia el valor de la variable contadora
22
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia for
...
Inicialización
Modificación
cuerpo_del_bucle;
SI
Condición
NO
...
23
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia for (uso básico)
–
La inicialización se realiza una única vez (0 y 1 son los
valores iniciales más comunes)
–
Si la condición no se cumple, no se realiza ni el cuerpo
del bucle ni la modificación
–
La condición suele comprobar que la variable
contadora no supere un cierto umbral que determina el
número de iteraciones
–
La modificación suele consistir en incrementos sobre la
variable contadora
24
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia for (uso básico)
int i;
for(i=0;i<=10;i++)
printf("7 por %d es: %d\n",i,7*i);
●
●
●
Inicialización: darle a i el valor 0
Condición: es i menor o igual que 10
Modificación: aumentar el valor de i en 1
i++ equivale a i=i+1
7 por 0 es: 0
7 por 1 es: 7
7 por 2 es: 14
7 por 3 es: 21
7 por 4 es: 28
7 por 5 es: 35
7 por 6 es: 42
7 por 7 es: 49
7 por 8 es: 56
7 por 9 es: 63
7 por 10 es: 70
25
Tema 3: Sentencias de control
●
Equivalencia entre for y while
for (inicialización; condición; modificación)
{
cuerpo_del_bucle;
}
inicialización
while (condición)
{
cuerpo_del_bucle;
modificación;
}
26
Tema 3: Sentencias de control
●
Estructuras de iteración: sentencia for → problemas comunes
–
Ejecución de iteraciones adicionales
–
Uso de menor/mayor que en lugar de menor/mayor o igual que
● Obviar el valor 0 y asumir que el contador empieza en 1
Bucles no controlados (número de iteraciones variable)
–
Ocurre cuando la variable contadora se modifica en el cuerpo del bucle
– Sólo cuando se tenga experiencia y sea estrictamente necesario
Bucles que nunca terminan
●
●
●
Cambio de menor por mayor (o viceversa), decrementos en lugar de
incrementos, etc.
27
Tema 3: Sentencias de control
●
Traza de un programa
–
Secuencia de estados por los que pasa un programa, a
través de los valores tomados por sus variables
–
Muy útiles para tareas de comprensión y depuración
Permiten detectar y corregir errores, así como
comprobar que el programa hace lo que realmente
queremos
Obtendremos la traza de un programa ejecutando de
forma manual sus sentencias
●
–
●
Al programar → libreta y bolígrafo
28
Tema 3: Sentencias de control
●
Traza de un programa
–
Ejemplo
●
●
Todos los días paso por una librería y me compro
una serie de libros siguiendo este patrón
– día 1 → 1 libro, día 2 → 2 libros, día N → N libros
Si tengo una estantería donde caben M libros
– ¿ qué día llegaré a casa y no podré poner todos
los libros que he comprado ?
29
Tema 3: Sentencias de control
●
Traza de un programa
int capacidadMaxima = 15, capacidadActual=0, dia=0;
do
{
dia = dia +1;
capacidadActual = capacidadActual +dia;
}while(capacidadActual<=capacidadMaxima);
printf("Rebasamos la capacidad el día %d", dia);
30
Tema 3: Sentencias de control
●
Traza de un programa
Ejecución del do...while
dia
capacidadActual
#1
1
0+1 =0
#2
2
1+2 =3
#3
3
3+3 =6
#4
4
6 + 4 = 10
#5
5
10 + 5 = 15
#6
6
15 + 6 = 21
#7
31
Ejercicios para practicar
●
●
Mostrar todos los múltiplos de un número dado en el rango [0,100] (ambos
inclusive)
–
Pedir el número por consola
–
Uso del operando módulo → %
Mostrar un menú donde, dados dos números enteros (elegidos por el
programador, p.e. 15 y 7), el usuario pueda elegir entre realizar lo siguiente:
–
Mostrar el resultado de su suma y volver a mostrar el menú
–
Mostrar el resultado de su resta y volver a mostrar el menú
–
Mostrar el resultado de su multiplicación y volver a mostrar el menú
–
Mostrar el resultado de su división y volver a mostrar el menú
–
Mostrar el resultado de su módulo y volver a mostrar el menú
–
Salir del menú
32
Programación 1
Grado de Ingeniería Robótica
Descargar