You are on page 1of 32

Estructuras de Control

(y su forma en Python y en C)
Clase 5
Introduccin a la Computacin
Patricia Borensztejn
Estructuras de Control
En el modelo de ejecucin secuencial que
vimos, el procesador repite:
1)Fetch de instruccin
2)Decodifica y Ejecuta instruccin
3) Incrementa direccin de siguiente instruccin
Si nuestro programa quisiera calcular el 10
trmino de la serie de Fibonacci, debera
hacer lo siguiente:
#include <stdio.h> // sexto trmino
int fibo10() term=prev+cur;
{ prev=cur;

Uffffffff!!!!!!!!!!
int term, cur=1,prev=1; cur=term;
// tercer trmino
term=prev+cur; // septimo trmino
prev=cur; term=prev+cur;
cur=term; prev=cur;
cur=term;
// cuarto trmino
term=prev+cur; // octavo trmino
prev=cur; term=prev+cur;
cur=term; prev=cur;
cur=term;
// quinto trmino
term=prev+cur; // noveno trmino
prev=cur; term=prev+cur;
cur=term; prev=cur;
cur=term;

// decimo trmino printf ("%d\n", term);


term=prev+cur; return 0;
}
Estructuras de Control
Es necesario una sentencia que pueda romper el
secuenciamiento implcito de las instrucciones, pues ya
no queremos que la siguiente instruccin sea la que
sigue en secuencia
quizs queremos ir hacia arriba en el programa, o sea,
repetir instrucciones, (repetitivos)
o bien quizs queremos ir hacia abajo , o sea, saltarnos
instrucciones.(condicionales)
Para eso, los lenguajes mquina o ensambladores
tienen unas instrucciones especiales:
Saltar a una direccin determinada (Salto)
Saltar a una direccin determinada si se cumple una
condicin (Salto condicional)
Estructuras de Control
Con estas dos simples instrucciones que
ofrecen los lenguajes de bajo nivel se crearon
varios tipos de sentencias de control de
secuencia, o de control del flujo del programa:
Estas son:
Sentencias condicionales
Sentencias repetitivas
Estructuras de control
La introduccin de las estructuras de control en los
lenguajes de programacin dio origen al estilo de
programacin conocido como programacin
estructurada.
El teorema del programa estructurado dice lo siguiente
(Bhm-Jacopini) :
Todo programa puede escribirse utilizando nicamente las
tres instrucciones de control siguientes:
Secuencia
Instruccin condicional.
Iteracin (bucle de instrucciones) con condicin al principio.
Este teorema demuestra que la instruccin GOTO no es
estrictamente necesaria y para todo programa existe un
programa equivalente que no hace uso de dicha
instruccin.
Estructuras de control
Todas las estructuras de control tienen un nico
punto de entrada y un nico punto de salida. (si
no uso GOTO en el cuerpo de la estructura de
control)
Int funcin_fea()
{ int i, mi_var=0;
Este programa tiene un
for (i=1;i<1000;i++)
{ punto de entrada y tres
if (mi_var=27) break;
mivar=mivar+1; puntos de salida.
if (i==45) return (34);
}
}
Ventajas de la Programacin
Estructurada
1. Los programas son ms fciles de entender, ya que pueden ser ledos de forma
secuencial, sin necesidad de hacer seguimiento a saltos de lnea (GOTO) dentro
de los bloques de cdigo para entender la lgica.
2. La estructura del programa es clara, puesto que las instrucciones estn ms
ligadas o relacionadas entre s.
3. Reduccin del esfuerzo en las pruebas. El seguimiento de los fallos o errores del
programa ("debugging") se facilita debido a la estructura ms visible, por lo que
los errores se pueden detectar y corregir ms fcilmente.
4. Reduccin de los costos de mantenimiento de los programas.
5. Programas ms sencillos y ms rpidos (ya que es ms fcil su optimizacin).
6. Los bloques de cdigo son auto explicativos, lo que facilita la documentacin.
7. Los GOTO se reservan para construir las instrucciones bsicas. Aunque no se
usan de forma directa, por estar prohibida su utilizacin, estn incluidas
implcitamente en las instrucciones de seleccin e iteracin.
8. Un programa escrito de acuerdo a estos principios no solamente tendr una
mejor estructura sino tambin una excelente presentacin.
9. La programacin estructurada ofrece estos beneficios, pero no se la debe
considerar como una panacea ya que el desarrollo de programas es,
principalmente, una tarea de dedicacin, esfuerzo y creatividad.
Programa Spaguetti
Hay un famoso artculo de Edsger Dijkstra
(considerado como uno de los padres de la
programacin estructurada) cuyo ttulo es: "
La sentencia GOTO considerada daina"

10 GOTO 40
20 PRINT "line number 20" Ejemplo de lo que se llam
30 GOTO 60
40 PRINT "line number 40"
programa spaguetti, en
50 GOTO 20 Basic.
60 END
Interface Hardware-Software
Cualquier sentencia estructurada se
implementa con un GOTO!
for (Bloque A; expresin booleana; Bloque B)
{ Cdigo interno }

1. Primero se evala el Bloque A por nica vez;


2. Luego se evala la expresin booleana
3. Si es verdadero, se ejecuta el Cdigo interno UNA vez, sino ir a 6.
4. Luego se evala el Bloque B
5. Ir a 2.
6. Siguiente instruccin
Interface Hardware-Software
for (Bloque A; expresin booleana; Bloque B)
{ Cdigo interno }

... # Traduccin del bloque A


...
eval: ... # Evaluar la expresin booleana
... # Resultado en %eax
cmp $0, %eax
je finfor
... # Traduccin del cdigo interno
...
... # Traduccin del bloque B
...
jmp eval
finfor:
... # Resto del programa
Tipo Booleano en C
C define al valor entero 0 como false y
cualquier valor distinto de 0 como true.
int main()
{
int i,j;

i=0;
rama else: i=0
if (i) printf("rama then: i=%d\n",i);
rama then: i=8
else printf("rama else: i=%d\n",i);
rama then: i=1
i=8;
rama else: i=0
if (i) printf("rama then: i=%d\n",i);
j=8;
if (i==j) printf("rama then: i=%d\n",i==j);
if (i!=j)printf ("rama then: i=%d\n",i==j);
else printf("rama else: i=%d\n",i!=j);
}
Tipo Booleano en C
Es decir, podemos utilizar cualquier valor
entero como condicin.
Cuando C evala una expresin de tipo
condicin, el resultado es 0(false) o 1(true)
Podemos incluir el archivo : <stdbool.h>
donde esta definido el tipo bool y las dos
constantes true y false.
El tipo bool
#include <stdio.h> El tipo bool es un
#include <stdbool.h>
subconjunto de los
int main()
{
enteros y sus
bool i,j; valores se
i=true; almacenan .
if (i) printf("rama then: i=%d\n",i);
j=false; como los enteros
if (j)printf ("rama then: j=%d\n",j);
else printf("rama else: j=%d\n",j); (32 bits)
}
El tipo bool en Python
Existe el tipo bool, sus valores son True y False
Igual que en C, el tipo bool es un subconjunto de los
enteros
>>> a=True
>>> b=False
>>> a+b
>>>c=True 1
>>> print a
>>>type(c) True
<type bool'> >>> print b
False
>>> print a+b+a+b
2
>>> print a+a
2
>>> print (a+a+a+a+a+a+a)*2
14
Estructuras de control en los lenguajes
Sentencias Condicionales:
if-then-else
Select-case
Sentencias Repetitivas:
While
Repeat
For
Condicionales en C

Si dentro del if rama true o false hay una


sola sentencia, las llaves se pueden obviar

Y se pueden anidar:
Condicionales en C

Si hubiera ambigedad C aplica la


siguiente regla: el else pertence al if
mas cercano
Sentencia Switch-Case en C
Sentencia Switch-Case en C
Comportamiento
de la sentencia
break: si no lo
ponemos, no sale
del case y sigue
ejecutando las
instrucciones de los
otros casos.
Estructuras repetitivas o iterativas en C

Bucle while
Bucle do-while
Bucle for
Bucle while (C)

r=r*x
Bucle do-while (C)
No existe
equivalente en
Python
La diferencia con
el while es que en
este caso se
ejecuta al menos
una vez el cuerpo
del bucle porque
la condicin se
evala al final.
Bucle for (C)

Es equivalente a:
Sentencias para alterar el flujo
iterativo (C)
Break:
Aborta la ejecucin del bucle
Continue
Sale de la iteracin actual, pero no aborta la
ejecucin del bucle
Condicionales en Python
Algunas formas de los condicionales. Python
no tiene switch-case
Repetitivas: while
Repetitivas: For in
Las listas son secuencias o series de valores y se
representan mediante corchetes.
Los elementos de la lista pueden ser enteros,
cadenas, reales, etc
For ..in (Python)
Podemos utilizar la funcin range() que
devuelve una lista.
Funcin range()
La funcin range() tiene 1,2, o 3 argumentos
range (4): [0,1,2,3]
range(3,7): [3,4,5,6]
range(4,8,2):[4,6]
Mas ejemplos:
range(4,1,-1):[4,3,2]
Algunas cosas generales
A los dos lenguajes
Cualquier estructura de control puede
anidarse dentro de cualquier otra
Ojo con la variable de iteracin del for (en C y
en Python): no se le debe asignar valores
dentro del cuerpo del bucle.
Euler 4
A palindromic number reads the same both
ways. The largest palindrome made from the
product of two 2-digit numbers is 9009 = 91
99.
Find the largest palindrome made from the
product of two 3-digit numbers.

You might also like