Proposiciones en C

Anuncio
Algoritmos y Lenguaje de Programación,
Sección 1
Proposiciones
Proposiciones
Mario Medina C.
[email protected]
• Expresiones
)Aritméticas (b + c)
)De control (if – else)
)De asignación (X = Y)
)Llamadas a funciones (printf(3…))
• Terminadas por un punto y coma (;)
Bloques de proposiciones
Proposición if
• Delimitados por llaves ( { y } )
• Se trata como una proposición compuesta
• Puede contener
• Ejecución condicional
)Declaraciones
)Otras proposiciones
` En ese orden!
• Bloque define el alcance de las declaraciones
que contiene
Diagrama de flujo if-else
Condición?
• Condición se evalúa a verdadero o falso
• Caso else no es necesario
)Puede ser omitido
Verdadero o Falso
• C no posee un tipo de dato para representar
VóF
No
Si
Proposición 1
if (condicion)
proposicion1;
else
proposicion2;
Proposición 2
)Usa enteros
)Falso: 0
)Verdadero: distinto de 0
• Condición a evaluar puede ser cualquier
expresión que se evalúe a un valor numérico
)if(10) equivale a if(verdadero)
©Mario Medina C.
1
Algoritmos y Lenguaje de Programación,
Sección 1
Comparación con 0
== vs =
• Operador == realiza comparaciones de
igualdad
)No confundir con operador de asignación =
` (a == b) ≠ (a = b)
• Operador != realiza comparaciones de
desigualdad
)if (condicion) equivalente a if
(condicion != 0)
if (a == b)
hacer_algo();
• Compara variables a y b • Copia valor de b en
• Si a es igual a b,
variable a
hacer_algo()
• Verifica valor de b
• Si es b != 0,
hacer_algo()
Operador condicional
else “colgante”
• Reemplaza comandos if-else por ?
• expr1 ? expr2 : expr3; equivale a
if (n > 0)
if (a > b)
z = a;
else
z = n;
• Indentación confunde
relación if-else
if (expr1)
expr2;
else
expr3;
)Qué hace z = (a > b) ? a : b;
` z es el valor mayor entre a y b
Ejemplo else “colgante”
if (a = b)
hacer_algo();
)else pertenece al
segundo if
if (n > 0)
{
if (a > b)
z = a;
}
else
z = n;
• Forma correcta
else if
•Operaciones if encadenadas
n > o?
Si
No
a > b?
No
Si
z=n
©Mario Medina C.
z=a
if (n > 0)
z = a;
else if (n == 0)
z = b;
else
z = c;
if (n > 0)
z = a;
else
if (n == 0)
z = b;
else
z = c;
2
Algoritmos y Lenguaje de Programación,
Sección 1
Diag. de flujo if-else if
switch
• Decisión múltiple
Condición 1?
)Prueba si una expresión coincide con uno de una
serie de valores enteros constantes
No
Si
Condición 2?
No
Proposición 1
Si
Proposición 2
Proposición 3
Diagrama de flujo switch
Expresión
== Const1?
Si
Proposición 1
break
Proposición 2
break
No
Expresión
== Const2?
Si
No
default
switch(expresion) {
case const1: proposiciones;
case const2: proposiciones;
default: proposiciones;
}
Ejemplo de switch
switch(verdad){
case 0:
printf (“falso\n”);
default:
printf(“verdadero\n”);
}
)Error! Si verdad == 0, imprime falso y
verdadero
` Comportamiento “fall through”
switch y break
switch(verdad){
case 0:
printf(“falso\n”);
break;
default:
printf(“verdadero\n”);
}
• Imprime falso ó verdadero
)break causa salida inmediata del switch
©Mario Medina C.
switch
switch(dato){
case 1:
case 3:
case 5:
printf (“impar\n”);
break;
case 2:
case 4:
case 6:
printf(“par\n”);
}
3
Algoritmos y Lenguaje de Programación,
Sección 1
Ciclo while
Diagrama de flujo while
• Repetición condicional
while (condicion)
proposicion1
1. Primero se evalúa la condición
2. Si la condición se cumple, se ejecuta la
proposición
No
Condición?
Si
continue
Proposición 1
break
• Repetir hasta que condición no se cumpla
Ejemplo de ciclo while
int i = 10, j = 0;
while (i > 0) {
i = i – 1;
j = j + 1;
}
• Valor final de j es 10
)Si la condición no se cumple inicialmente,
proposición no se ejecuta
do-while(condición)
Ejecución del ciclo while()
i
j
10
9
0
1
8
7
6
5
2
3
4
5
4
3
2
1
0
6
7
8
9
10
• Valor final de i: 0
• Valor final de j: 10
Diagrama de flujo do-while
• Repetición condicional
do
proposicion1
while (condicion);
1. Primero se ejecuta la proposición
2. Luego, se evalúa la condición. Si es verdadera,
repetir
• Repetir hasta que condición no se cumpla
©Mario Medina C.
continue
Proposición 1
Condición?
break
No
Si
4
Algoritmos y Lenguaje de Programación,
Sección 1
Ejemplo de ciclo do-while
int i = 10, j = 0;
do {
j = j + 1;
i = i - 1;
}
while (i > 0);
• Valor final de j es 10
• Qué pasa si inicialmente (i>0) no se
cumple?
while vs. do-while
Ejecución del ciclo do-while()
i
j
10
9
0
1
8
7
6
5
2
3
4
5
4
3
2
1
0
6
7
8
9
10
• Valor final de i: 0
• Valor final de j: 10
• Igual a ciclo
while()!
while y break
• Ciclo while es mucho más común
)Si la condición no se cumple inicialmente,
proposición no se ejecuta
• Ciclo do-while necesario en algunos casos
)Si la condición no se cumple inicialmente,
proposición se ejecuta una vez
)Ciclo se termina con ;
Ejecución usando break()
i
j
10
9
8
7
0
1
2
3
6
5
4
3
4
5
6
©Mario Medina C.
• Valor final de i: 3
• Valor final de j: 6
• Ejecución del ciclo
termina cuando i==3
• break termina ciclo antes de su fin
int i = 10, j = 0;
while (i > 0) {
i = i – 1;
if (i == 3)
break; /* Sale del lazo */
j = j + 1;
}
while y continue
• continue fuerza siguiente iteración del ciclo
int i = 10, j = 0;
while (i > 0) {
i = i – 1;
if (i == 3)
continue; /* prox. iteracion */
j = j + 1;
}
5
Algoritmos y Lenguaje de Programación,
Sección 1
continue
• continue permite terminar
prematuramente la iteración actual del ciclo
)Condición se evalúa nuevamente
)Si es verdadera, ciclo se ejecuta nuevamente
• continue puede usarse con ciclos while,
do-while y for
)Puede usarse en ciclos anidados
` Sólo afecta al ciclo más cercano
Ejecución usando continue()
i
j
10
9
0
1
8
7
6
5
2
3
4
5
4
3
2
1
0
6
• Valor final de i: 0
• Valor final de j: 9
• Interrupción del ciclo
cuando i==3 hace que
j no se incremente
7
8
9
Ciclo for
Ciclo for
for (expr1; expr2; expr3)
proposicion;
• Equivale a
expr1;
while (expr2){
proposicion;
expr3;
}
• Generalmente:
Ciclo for
Ciclo for
• Expresiones expr1, expr2, expr3 pueden
ser omitidas
• Expresión anterior equivalente a
)for (;;): Ciclo infinito
• Cada una de ellas puede ser una proposición
compuesta
for (i
i <
i =
sum
©Mario Medina C.
= 0, j = 10, k = 20;
(j*k*k);
i + 1, j = j – 2, k = k - 3)
= sum + 4;
)expr1: Inicialización
)expr2: Condición
)expr3: Modificación
` Cada una de ellas puede ser una proposición
compuesta
for (i = 0; i < 10; i = i + 1)
proposicion_a_ejecutar;
i = 0;
j = 10;
k = 20;
while (i
sum =
i = i
j = j
k = k
}
< j*k*k) {
sum + 4;
+ 1;
– 2;
- 3;
6
Algoritmos y Lenguaje de Programación,
Sección 1
break y continue en Ciclo for
Diagrama de flujo for
• Comando break fuerza una salida anticipada
del ciclo
• Comando continue en proposición fuerza
ejecución de expr3 y repetición del ciclo
Inicialización lazo
No
Condición?
Si
continue
break
Proposición
Modificación lazo
Comando goto
Curiosidades del C
• Comando goto rotulo fuerza la ejecución
del código asociado al rótulo
• Duff’s Device
)Rotulo termina con :
if (condicion) goto rotulo1;
proposicion1;
rotulo1: proposicion2;
• Uso de goto poco recomendado!
)Tom Duff, Lucasfilm,
1983
• Reemplaza el lazo
do {
*to = *from++;
while (--count> 0);
por el codigo de la derecha
• Ciclo do-while() y
switch() intercalados
• Código válido!
n = (count + 7) / 8;
switch
{
case
case
case
case
case
case
case
case
(count % 8)
0: do { *to = *from++;
7:
*to = *from++;
6:
*to = *from++;
5:
*to = *from++;
4:
*to = *from++;
3:
*to = *from++;
2:
*to = *from++;
1:
*to = *from++;
} while (--n > 0);
}
©Mario Medina C.
7
Descargar