Estructuras de Control(26-2,4-3)

Anuncio
Introducción a la
Programación
3. Control de Flujo:
if y else
Roberto Marabini — Introduccin a la programacin — ETS – p.1/29
control de flujo
Hasta ahora los programas que hemos visto eran lineales.
Comenzaban por la primera instrucción y acababan por la
última, ejecutándose todas una sola vez. Lógico ¿no?.
Pero resulta que muchas veces no es esto lo que queremos que ocurra. Lo que nos suele interesar es que dependiendo de los valores de los datos se ejecuten unas
instrucciones y no otras. O también puede que queramos
repetir unas instrucciones un número determinado de veces. Para esto están las sentencia de control de flujo.
Roberto Marabini — Introduccin a la programacin — ETS – p.2/29
if
#include <stdio.h>
int main()
{
int b;
printf("Teclea un numero:");
scanf("%d", &b);
if(b<0)
{printf("b es negativo\n");}
return 0;
}
Roberto Marabini — Introduccin a la programacin — ETS – p.3/29
if
#include <stdio.h>
int main()
{
int b;
printf("Teclea un numero:");
scanf("%d", &b);
#include <stdio.h>
int main()
{
int b;
printf("Teclea un numero:");
scanf("%d", &b);
if(b<0)
{printf("b es negativo\n");}
return 0;
}
TRUE
if(b<0)
printf("b es negativo\n");
FALSE
return 0;
}
Roberto Marabini — Introduccin a la programacin — ETS – p.3/29
if
La expresion (b<0) se denomina expresión Booleana. C
evalua esta expresion para decidir si se debe o no imprimir
el mensaje. Si el valor de la expresión booleana es TRUE
C ejecuta el siguiende bloque de código, en caso contrario
se lo salta.
Roberto Marabini — Introduccin a la programacin — ETS – p.4/29
if
La expresion (b<0) se denomina expresión Booleana. C
evalua esta expresion para decidir si se debe o no imprimir
el mensaje. Si el valor de la expresión booleana es TRUE
C ejecuta el siguiende bloque de código, en caso contrario
se lo salta.
#include <stdio.h>
int main()
{
int b;
b=5;
if(b)
{printf("b es negativo\n");}
return 0;
}
¿(b) es TRUE o FALSE?
Roberto Marabini — Introduccin a la programacin — ETS – p.4/29
if y else
int main()
{ int b;
printf("Teclea un numero:");
scanf("%d", &b);
if(b<0)
{printf("b es negativo\n");}
else if(b==0)
{printf("b es cero\n");}
else
{printf("b es positivo\n");}
return 0; }
Roberto Marabini — Introduccin a la programacin — ETS – p.5/29
if y else
#include <stdio.h>
int main()
{
int b;
printf("Teclea un numero:");
scanf("%d", &b);
TRUE
if(b<0)
int main()
{ int b;
printf("Teclea un numero:");
scanf("%d", &b);
if(b<0)
{printf("b es negativo\n");}
else if(b==0)
{printf("b es cero\n");}
else
{printf("b es positivo\n");}
return 0; }
printf("b es negativo\n");
FALSE
TRUE
else if(b==0)
printf("b es cero\n");
FALSE
else
printf("b es positivo\n");
return 0;
}
Roberto Marabini — Introduccin a la programacin — ETS – p.5/29
if y else
Los condicionales pueden complicarse...
#include <stdio.h>
int main()
{
int x,y,j,k,z,q;
...some code here...
if ((x==y) && (j>k))
{z=1;}
else
{q=10;}
return 0;
}
Si el valor de la variable x es igual al valor de la variable y y si el valor de la variable j es
mayor que el valor de la variable k entonces asigna el valor 1 a la variable z y sino
asigna el valor 10 a la variable q.
Nota 1: C usa == para representar la operación igual a y = para asignar un valor a una
variable.
Nota 2:&& representa la operación Booleana AND.
Roberto Marabini — Introduccin a la programacin — ETS – p.6/29
Operadores Booleanos
igual a
==
menor que
<
mayor que
>
menor o igual <=
mayor o igual
differente de
y
o
no
>=
!=
&&
||
!
Roberto Marabini — Introduccin a la programacin — ETS – p.7/29
Errores a evitar
Usar = en lugar de ==. ¿Cual es la diferencia
entre estos dos programas?
#include <stdio.h>
int main()
{
int a,b;
b=5;
printf("Introduzca un Nmero:");
scanf("%d", &a);
if (a==b)
{
printf("a es igual a b\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int a,b;
b=5;
printf("Introduzca un Nmero:");
scanf("%d", &a);
if (a=b)
{
printf("a es igual a b\n");
}
return 0;
}
Roberto Marabini — Introduccin a la programacin — ETS – p.8/29
switch
Hay casos en los que se deben evaluar múltiples
condiciones y únicamente se debe evaluar una de ellas.
Se puede programar con un grupo de sentencias if then
else anidadas, aunque ello puede ser farragoso y de
complicada lectura. Para evitarlo nos puede ayudar la
sentencia switch. Su utilización es:
char c;
switch(c){
case ’a’: printf("Op A\n"); break;
case ’b’: printf("Op B\n"); break;
case ’c’:
case ’d’: printf("Op C o D\n"); break;
default: printf("Op ?\n");
}
Roberto Marabini — Introduccin a la programacin — ETS – p.9/29
Ejercicio
Escribir un programa calc que se comporte como un
calculador básico:
1. debe ser capaz de procesar las cuatro funciones
básicas: +, -, y *.
2. El input debe ser de la forma operando operacion
operando. (Ejemplo: 5 + 3 )
3. La salida debe ser del tipo operando operacion
operando = resultado (Ejemplo: 5 + 3 = 8)
char c;
switch(c){
case ’a’: printf("Op A\n"); break;
case ’b’: printf("Op B\n"); break;
case ’c’:
case ’d’: printf("Op C o D\n"); break;
default: printf("Op ?\n");
}
Roberto Marabini — Introduccin a la programacin — ETS – p.10/29
while
while es otra sentencia de control que usa
operaciones booleanas.
while (a < b)
{
printf("%d\n", a);
a = a + 1;
}
Esto hace que las dos líneas entre llaves se ejecuten
hasta que a sea mayor que b
Roberto Marabini — Introduccin a la programacin — ETS – p.11/29
do-while
C tambien define la sentencia do-while
do
{
printf("%d\n", a);
a = a + 1;
}
while (a < b);
Esto hace que las dos líneas entre llaves se ejecuten
hasta que a sea mayor que b pero la comprobación se
hace despues de ejecutar el código entre llaves, así que
este se ejecuta almenos una vez
Roberto Marabini — Introduccin a la programacin — ETS – p.12/29
For
x=1; /* inicializacin */
while (x<10)
{
blah blah blah /*sentencias */
x++; /* x++ es identico a x=x+1 */
/* actualiacin */
}
Esta construccion es equivalente a:
for(x=1; x<10; x++)
{
blah blah blah
}
Las ventajas de esta construcción alternativa son que en
la cabecera del bucle se tiene toda la información sobre
como se inicializan y actualizan las variables del bucle
Roberto Marabini — Introduccin a la programacin — ETS – p.13/29
For
x=1; /* inicializacin */
while (x<10)
{
blah blah blah /*sentencias */
x++; /* x++ es idntico a x=x+1 */
/* actualizacin */
}
for(x=1; x<10; x++)
{
blah blah blah
}
En este ejemplo el bucle while contiene una parte dedicada a la inicialización (x=1), otra es un test (x<10), y
finalmente hay una actualización de la variable que controla el bucle x++; . En el bucle for se ponen estos tres
pasos en una sola línea pero.. ¿Qué ocurre cuando hay
más de una variable?
Roberto Marabini — Introduccin a la programacin — ETS – p.14/29
For
a=1;
b=6;
while (a < b)
{
a++;
printf("%d\n",a);
}
Puede expresarse en una línea:
for (a=1,b=6; a < b; a++,printf("%d\n",a));
Ciertamente la expresión resultante es un poco confusa y
seria preferible un código como:
for (a=1,b=6; a < b; a++)
printf("%d\n",a);
El punto es que el operador , permite colocar varias expresiones en las secciones de inicialización y actualización del
bucle for aunque no en la sección de de test.
Roberto Marabini — Introduccin a la programacin — ETS – p.15/29
Resumen
if /else.
switch
While and do/while
for
scanf("%d", &a);
if (a==b)
{
printf("a es igual a b\n");
}
else
{
printf("a NO es igual a b\n");
}
Roberto Marabini — Introduccin a la programacin — ETS – p.16/29
Resumen
if /else.
switch
While and do/while
for
char c;
switch(c){
case ’a’: printf("Op A\n"); break;
case ’b’: printf("Op B\n"); break;
case ’c’:
case ’d’: printf("Op C o D\n"); break;
default: printf("Op ?\n");
}
Roberto Marabini — Introduccin a la programacin — ETS – p.17/29
Resumen
if /else.
switch
While and do/while
for
while (a < b)
{
printf("%d\n", a);
a = a + 1;
}
do
{
printf("%d\n", a);
a = a + 1;
}
while (a < b);
Roberto Marabini — Introduccin a la programacin — ETS – p.18/29
Resumen
if /else.
switch
While and do/while
for
for(x=1; x<10; x++)
{
blah blah blah
}
Roberto Marabini — Introduccin a la programacin — ETS – p.19/29
Break y Continue
La sentencia break nos saca de un bucle
switch, for, while y do while
La sentencia continue se usa en bucles y
produce un salto a la siguiente iteracion. Se
usa con for, while y do while
Roberto Marabini — Introduccin a la programacin — ETS – p.20/29
Break y Continue
for(i=0;i<=10;i++){
.
if(i>7){
.
printf( "i mayor que 7\n");
.
break;
.
}
.
else {
.
printf("i = %d\n", i);
.
continue;
.
printf("Nunca llego aqui\n");
.
}
}
Output
i=0
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i es mayor que 7
Ya hemos visto el uso de la sentencia break para salirse de las sentencias switch.
break se usa en bucles para salirse del bucle sin completarlo. continue sirve para
saltarse parte de una iteración (Depurar)
Roberto Marabini — Introduccin a la programacin — ETS – p.21/29
Diagramas de Flujo
S1
falso
C
S2
S2
verdadero
S1
S3
Roberto Marabini — Introduccin a la programacin — ETS – p.22/29
Diagramas de Flujo
falso
S1
C
verdadero
verdadero
S1
C
falso
Roberto Marabini — Introduccin a la programacin — ETS – p.23/29
Diagramas de Flujo
S1
C1
C2
CN
S1
S2
SN
Roberto Marabini — Introduccin a la programacin — ETS – p.24/29
Diagramas de Flujo
C
falso
verdadero
continue
break
Roberto Marabini — Introduccin a la programacin — ETS – p.25/29
Errores a evitar
Utilizar = cuando se desea usar ==
Olvidarse de incrementar un contador en un bucle. (El
bucle nunca se termina).
Escribir accidentalmente un “;” despues de un for.
Por ejemplo:
for (x=1; x<10; x++);
printf("%d\n",x);
Solo imprime un valor, por que la línea “;” es la
sentencia que se repite.
Roberto Marabini — Introduccin a la programacin — ETS – p.26/29
Ejercicio
Escribe un programa, usando while, que
imprima una tabla de conversion de euros a
pesetas (la tabla irá de 1 euro a 10 en
incrementos de 1)
La conversion euro a pesetas es: 166.386
x=1; /* inicializacin */
while (x<10)
{
blah blah blah /*sentencias */
x++; /* x++ es idntico a x=x+1 */
/* actualizacin */
}
Depurar
Roberto Marabini — Introduccin a la programacin — ETS – p.27/29
Ejercicio
Escribe un programa, usando for, que
imprima una tabla de conversion de euros a
pesetas (la tabla irá de 1 euro a 10 en
incrementos de 1)
La conversion euro a pesetas es: 166.386
for(x=1; x<10; x++)
{
blah blah blah
}
Roberto Marabini — Introduccin a la programacin — ETS – p.28/29
Ejercicio
Escribe un programa, usando for, que
imprima una tabla de conversion de euros a
pesetas (la tabla irá de 1 euro a 10 en
incrementos de 1)
La conversion euro a pesetas es: 166.386
Añadir una linea a la tabla, en el lugar
apropiado, de forma que también se imprima
la cantidad de euros que son 1000 pts.
for(x=1; x<10; x++)
{
blah blah blah
}
Roberto Marabini — Introduccin a la programacin — ETS – p.29/29
Descargar