You are on page 1of 41

1

CONTROL DE FLUJO

Introducción a la Informática
Ingeniería Automática
Universidad del Cauca
2
ASPECTOS GENERALES DEL LENGUAJE C++

ESTRUCTURAS SECUENCIALES
Asignación
Lectura
Escritura
ESTRUCTURAS CONDICIONALES
Simples
Compuestas
Múltiples
ESTRUCTURAS REPETITIVAS
ESTRUCTURAS DE CONTROL DE FLUJO ANIDADAS
CONTROL DE FLUJO:
TEMAS CLASE 17/09/2014
Creación y Compilación de un Programa
Editor
Disco
Se crea el programa en el editor y se
almacena en disco
El programa preprocesador procesa el código
El compilador crea el código objeto y lo guarda
en disco
El editor de enlaces vincula el código objeto con
las bibliotecas, crea a.out y lo almacena en disco
Preprocesador
Disco
Compilador
Disco
Editor de Enlaces
Disco
Cargador
Disco
Memoria Primaria
.
.
.
CPU
Memoria Primaria
.
.
.
El cargador pone en memoria el programa
La CPU toma cada instrucción y la ejecuta,
posiblemente almacenando nuevos valores
de datos a medida que se ejecuta el
programa
4
Estructura General de un Programa
Son instrucciones dirigidas al compilador para que realice
ciertas acciones con el propósito de regular el proceso de
compilado del programa al notificar errores y advertencias.
Estas siempre ocupan una línea independiente del código,
empezando por el carácter #y un nombre de directiva de
preprocesamiento. Al no ser instrucciones, no terminan en
punto y coma.
# include <stdio.h>
Nombre de directiva Archivo de cabecera
Directivas de preprocesador
Ordena al compilador la
lectura de directivas
El compilador
int a, b, sum;
cin >> a;
cin >> b;
sum = a + b;
cout << sum << endl;
Lenguaje de
maquina
Lenguaje C
Alto nivel
El enlazador (linker)
8
Estructura General de un Programa
Librerías
Constantes:
Const1  Valor1
Const2  Valor2 ...

Nombre_del_Programa
Inicio
Variables:
Tipo1 Var11, Var12...
Tipo2 Var21, Var22...

Instrucción 1
Instrucción 2
....
Instrucción N
Fin
Cuerpo del
algoritmo
• Variables
• Programación
Lineal
• Programación
No Lineal
• Librerías
• Constantes
Cabecera
Estructura General de un Programa
Todos los programas en C comparten ciertos componentes
y rasgos esenciales:
 Encabezados
 Funciones - main() –
 Sentencias

// my first program in C++
#include <iostream>
int main()
{
std::cout << "Hello World!";
}
Hello World!


10
Buenas Prácticas de Programación
La claridad en un programa es de vital importancia, pues
la mayor parte del tiempo de mantenimiento de un
programa se emplea en estudiar y comprender el código
fuente existente.
Recomendaciones Básicas sobre estilo de codificación al
escribir nuestros programas en C:
 Identificadores Significativos
 Constantes Simbólicas
 Comentarios, comentarios...
 Estructura del programa
 Identación
 Presentación
11
Estructuras de Control
Existen instrucciones que permiten que
el programador especifique que la
siguiente instrucción a ejecutar podría
ser distinta a la que le sigue en la
secuencia.

Son instrucciones o estructuras que dirigen el flujo del programa.

Teorema de Dijkstra (1930-2002), demuestra que todo programa
puede escribirse utilizando únicamente las tres instrucciones de
control:
Estructura secuencial: Instrucciones se ejecutan en el orden en que
se escribieron.
Estructuras condicionales: Condiciones para cambiar el flujo del
programa.
Estructuras repetitivas: Realizar ciclos o repetir instrucciones.
12
Ejemplo:
Ir de viaje
Normalmente las instrucciones de un programa se ejecutan en el
orden en que se escribieron.
Programas -> conjunto de bloques que
encajan entre sí.
Cada bloque tiene un solo punto de
entrada y un solo punto de salida y la
salida de uno se conecta a la entrada del
siguiente.

Formada por varios bloques uno a
continuación de otro.
 Asignación
 Lectura/Escritura.

Decido lugar
Compro Tiquetes
Hago maletas
Abordo avión
Disfruto paseo
Estructuras secuenciales
13
Creación de Bloques de Código
En C se pueden enlazar dos o más sentencias, usando { }

Las sentencias forman una unidad lógica que puede usarse
en cualquier lugar donde pueda hacerlo una sentencia
simple.

Un bloque de código representa una unidad lógica
indivisible.
14
Asignación
La operación de asignación es el modo de darle valores a una
variable.

Es destructiva, ya que el valor que tuviera la variable antes de
la asignación se pierde y se reemplaza por el nuevo valor.

El formato general: Nombre_Variable  Expresión

Se pueden asignar valores de expresiones, donde la variable y
el valor de la expresión deben tener el mismo tipo de dato.
(Primero calcula el valor de la expresión y este resultado lo
almacena en la variable sustituyendo al valor que tenía
anteriormente).

15
Asignación aritmética: Las expresiones en las operaciones de
asignación son aritméticas.
N  2
N  N + 1

Asignación lógica: La expresión que se evalúa en la operación de
asignación es lógica.
M  8 < 5 = Falso
N  M OR (7 <= 12) = Verdad

Asignación de caracteres: Car ’M’

Asignación de cadenas de caracteres: X  “Caro nacio en el 79”

Conversión de tipo: A las variables no se les puede asignar valores
diferentes a su tipo. Algunos lenguajes permiten convertir el valor al
tipo de la variable.
16
Operadores de Asignación
Operador Operación
= Asignación
++ Incremento
-- Decremento
+= Suma y Asignación
-= Resta y Asignación
*= Multiplicación y Asignación
/= División y Asignación
%= Módulo y Asignación
Pseudocódigo

X  25
Diagrama de
Flujo


Diagrama N-S
X  25
X  25
Asignación
17
1. ¿Cuáles son los valores de A, B y C después de la ejecución de las
siguientes operaciones?
A  3
B  4
C  A + 2 * B //C= 3 + 2 * 4 = 3+8=11
C  C + B // C=11 + 4 = 15
B  C - A // B=15 – 3 = 12
A  B * C // A=12 * 15 = 180

Entonces A=180, B=12 y C=15

2. ¿Cuál es el valor de x después de las siguientes operaciones?

X  2
X  Cuadrado(x + x) // X=Cuadrado(4) = 16
X  Raiz2 (x + Raiz2(x) + 5) // X=Raiz2 (16 + Raiz2(16) + 5) = 5

Entonces X=5
Ejemplo
18
Entrada / Salida
Las operaciones de entrada permiten leer determinados valores
y almacenarlos en determinadas variables.
Esta entrada se conoce como operación de Lectura (Read).

Los resultados de los cálculos realizados necesitan ser
conocidos (mostrados), para esto se utilizan las operaciones de
salida.
La operación de salida se denomina Escritura (write).
Formatos de las acciones de lectura
y escritura:
 Leer (Lista de variables de
entrada)
 Escribir (Lista de expresiones
o variables de salida)
19
Pseudocódigo

Leer Nombre, Edad
Diagrama de Flujo


Diagrama N-S
Nombre, Edad Nombre, Edad
Lectura de Datos (Entrada)
Pseudocódigo
Escribir “Nombre Completo: “, Nombre, “Tengo: ”, Edad, “años”
Diagrama de Flujo



Diagrama N-S




“Nombre Completo: “, Nombre, “Tengo: ”, Edad, “años”
“Nombre Completo: “, Nombre, “Tengo: ”, Edad, “años”

Escritura de Datos (Salida)
20
Funciones de Entrada/Salida
La entrada y salida de información
(E/S), se puede gestionar mediante
la funcionalidad de la biblioteca
iostream
 Entrada: cin >>
 Salida: cout <<

Ejemplo: Leer un número por
teclado y mostrarlo
// i/o example
#include <iostream>
using namespace std;
int main ()
{ int i;
cout << “Favor ingrese un valor entero: ";
cin >> i; cout << “Su valor digitado es " << i;
cout << " Duplicado es " << i*2 << ".\n";
return 0; }
using namespace std;

Sirve para dar acceso al
espacio de nombres
(namespace) std, donde se
encuentra encerrada toda la
librería estándar. El motivo de
encerrar la librería estándar en
un espacio de nombres no es
otro que el de hacer más
sencilla la creación de
proyectos muy grandes, de
manera que el proyecto no
deje de compilar debido a que
se han escogido los mismos
nombres para dos funciones,
clases, constantes o variables.


21
A veces se necesitan otros operadores especiales diferentes de los
ya nombrados que son funciones predefinidas o internas del
lenguaje.
Aceptan argumentos.
Producen un solo resultado de diferentes tipos.
Las mas usuales son: (siendo x el argumento de la función)


Función Descripción Tipo de argumento Resultado
Abs (x) Valor absoluto de x Entero o real Igual que argumento
Seno (x) Seno de x Entero o real Real
Coseno (x) Coseno de x Entero o real Real
Ln (x) Logaritmo neperiano de x Entero o real Real
Log10 (x) Logaritmo decimal de x Entero o real Real
Redondeo (x) Redondeo de x Real Entero
Cuadrado (x) Cuadrado de x Entero o real Igual que argumento
Raíz (x) Raíz cuadrada de x Entero o real Real
Funciones Primitivas
22
Sirven para tomar decisiones
lógicas, es decir, cuando se utilizan
“Expresiones Lógicas”:
 Verdadero, falso
 AND, OR, NOT
 == , !=, <, >, <=, >=

TIPOS:
 Simples, dobles, múltiples y
anidadas.

nota > 3.5
Aprobada
Si
Ejemplo:
Aprobar una materia
Se utilizan cuando existen una o varias alternativas
resultantes de la evaluación de determinada condición.
Estructuras Condicionales
23


Pseudocódigo

Si <condición> entonces
//Acción(es)
Fin_Si

Diagrama de flujo

Diagrama N-S

<condición>
SI
Acciones

NO
NO o F
<condición>
Acciones
Si o V
Alternativa Simple
Ejecuta una determinada acción cuando se cumple una
determinada condición.
Si la condición es verdadera, ejecuta cierta acción.
Si la condición es falsa, no hace nada.
24
Sentencia if
En su forma más simple, la sentencia if permite que un
programa ejecute condicionalmente una sentencia:

if (expresión)
sentencia;
Ejemplo:
No
condición
sentencia
Si
#include <iostream>
using namespace std;
int main(void)
{
int num;
cout <<"Introduzca numero:";
cin >> num;
if ((num%2)==0)
cout << "PAR" << endl;
system("pause");
}
25
Pseudocódigo

Si <condición> entonces
//Acción(es)
Si no
//Acción(es)
Fin_Si
Diagrama de Flujo
Diagrama N-S

Acciones
<condición>
SI
Acciones Acciones
NO
NO o F
<condición>
Acciones
Si o V
Alternativa Doble
Alternativa simple es muy limitada, para varias condiciones
se requieren varios if.
La alternativa doble
permite realizar
diferentes acciones
dependiendo de si
se cumple o no una
condición.
Si la condición es
verdadera, ejecuta
cierta acción; si la
condición es falsa,
se realizan otras
acciones.

26
Sentencia if/else
Permite realizar acciones diferentes cuando la condición sea
verdadera y cuando sea falsa.

Ejemplo:

if (expresión)
sentencia1;
else
sentencia2;
expresión
Sentencia1
Si
No
Sentencia2
#include <iostream>
using namespace std;
int main(void)
{
int num;
cout <<"Introduzca numero:";
cin >> num;
if ((num%2)==0)
cout << "PAR" << endl;
else
cout << "IMPAR" << endl;
system("pause");
}
27
Anidamiento de Sentencias if
Cuando una sentencia if es el objetivo de otro if o else,
se dice que está anidada dentro del if más externo.

if
(expresion1)

sentencia1;
else
if
(expresion2)

sentencia2;
else

sentencia3;
expresión1
Sentencia1
Si No
expresión2
Sentencia2
Si No
Sentencia3
28
Anidamiento de Sentencias if
#include <iostream>
using namespace std;
int main(void)
{
unsigned int nota;
cout << "Introduzca una calificacion numerica entre 0 y 10:";
cin >> nota;
cout << "La calificacion del alumno es" << endl;
if (nota == 10)
{
cout << "Matricula de Honor" << endl;
}
else if (nota >= 9)
{
cout << "Sobresaliente" << endl;
}
else if (nota >= 7)
{
cout << "Notable" << endl;
}
else if (nota >= 5)
{
cout << "Aprobado" << endl;
}
else
{
cout << "Suspenso" << endl;
}
system("pause");
29
Pseudocódigo
Forma Común
Si <condición> entonces
//Acción(es)
Si no
Si <condición> entonces
//Acción(es)
Si no
//Varias
condiciones
Fin_Si
Fin_Si
Forma General

EnCasoDe
<condición>hacer
Op1: Acción(es)
Op2: Acción(es)
...
OpN: acción(es)
EnOtroCaso:acción(es)
Fin_Caso
Diagrama de flujo



Opc1
<condición>
Acciones Acciones Acciones Acciones
Opc2 ...
Opcn
NO o F
<condición>
Si o V
Acciones
NO o F
<condición>
Acciones
Si o V
Acciones
Alternativa Múltiple
Pueden existir mas de dos elecciones múltiples -> alternativas
anidadas (si son muchas condiciones es un problema).
Se opta por la estructura: Según sea.. o En caso de...
Evalúa una expresión y se toman diferentes acciones
dependiendo de los resultados de dicha expresión.
30
Sentencia SWITCH
La sentencia if es buena para elegir dos alternativas, pero se
vuelve incómoda cuando se necesitan varias alternativas.
La solución de C a este problema es la sentencia switch.


switch(expresion)
{
case constante1:
bloque1 de sentencias;
break;
case constante2:
bloque2 de sentencias;
break;
.
.
.
default
bloque de sentencias
por defecto
break;
}
Se diferencia de if en
que switch sólo puede
verificar igualdad, if
puede evaluar
cualquier tipo de
condición.
switch sólo funciona
con los tipos char e
int.
No puede haber dos
constantes case
iguales para un
mismo switch.


31
Interruptor (marca, bandera o flag): Es una variable que
sirve como indicador de una determinada información y que
solo puede tomar uno de los varios valores permitidos.

El valor de la variable tiene asociado un signo y puede variar
a lo largo de la ejecución.
Diagrama N-S

32
#include <iostream>
using namespace std;
int main(void)
{
int A,B, Resultado;
char operador;
cout << "Introduzca un numero:";
cin >> A;
cout << "Introduzca otro numero:";
cin >> B;
cout <<"Introduzca un operador (+,-,*,/):";
cin >> operador;
Resultado = 0;
switch (operador)
{
case '-' : Resultado = A - B;
break;
case '+' : Resultado = A + B;
break;
case '*' : Resultado = A * B;
break;
case '/' : Resultado = A / B; //suponemos B!=0
break;
default : cout << "Operador no valido"<< endl;
}
cout << "El resultado es: ";
cout << Resultado << endl;
system("pause");
}
33
Se utilizan cuando es necesario ejecutar un mismo bloque de
acciones una cantidad especifica de veces.
Bucle o Ciclo: es un segmento del algoritmo cuyas
instrucciones se repiten un número determinado de
veces.
 ¿Qué contiene el bucle?
 ¿Cuántas veces se debe repetir?
 ¿Cuál es la condición para detener el bucle?
Pueden ser:
 Ciclos con un Numero Fijo de Iteraciones (Hacer-
Para): Esta cantidad puede ser fija (previamente
determinada por el programador
 Ciclos con un Numero Indeterminado de Iteraciones
(Mientras-Hacer, Repetir-Mientras): están en función
de algún dato dentro del programa
Utilizan Contadores (sirven para verificar el número de
veces que se realiza un proceso) y/o Acumuladores
(guarda el resultado de diferentes procesos).

Separado
Orilla?
Brazada
no
si
Estructuras repetitivas
34
Diagrama de Flujo
Pseudocódigo

Para ViValor hasta Vf, ViVi+1 hacer
//Acción(es) a repetir
Fin_Para
Diagrama N-S
Para ViValor hasta Vf, ViVi+1
hacer
Acción (es) a repetir
NO o F
ViValor, Vf, 1
Si o V
Acciones
Ciclos con un numero fijo de iteraciones
El numero de iteraciones se conoce antes de ejecutarse el
ciclo.
Hacer-Para:

•Automáticamente controla el
numero de iteraciones.

•Se ejecuta mientras se
cumpla la condición.

35
Sentencia for
/* muestra los números de 10 a
1 */
#include <iostream>
using namespace std;
int main(void)
{
int n;
for (n = 10; n >=1; n--)
{
cout << n << endl;
system("pause");
}
system("pause");
}
36
Diagrama de Flujo
Pseudocódigo

Mientras <Condición> hacer
//Acción(es) a repetir
Fin_Mientras
Diagrama N-S
Mientras <Condición> hacer

Acción (es) a repetir
NO o F
<Condición>
Si o V
Acciones
Mientras- Hacer:
•Se ejecuta mientras se cumple una
condición determinada.
•Cuando la condición ya no se cumple
(es Falsa), no se sigue ejecutando el
proceso y se continua con el algoritmo.
Ciclos con un número indeterminado de
iteraciones
El numero de iteraciones no se conoce previamente, por lo
general depende de un dato dentro del programa.
37
Sentencia while
/* muestra los números de 10 a 1 */
#include <iostream>
using namespace std;
int main(void)
{
int contador=0;
int suma=0;

while(contador <= 10)
{
cout << "El valor del numero es"
<< contador <<endl;
suma+=contador;
cout << "La suma va en: " <<
suma <<endl;
contador++;

}
cout << "La suma de los primeros
numeros es: " << suma <<endl;

system("pause");
}
38
Diagrama de Flujo
Pseudocódigo

Repetir
//Acción(es) a repetir
Mientras que (Condición)
Diagrama N-S
Acción (es) a repetir
Mientras que (Condición)
NO o F
<Condición>
Si o V
Acciones
Repetir-Mientras:
• Repite un proceso una
cantidad de veces, hasta que
la condición deje de
cumplirse.
• Permite realizar el proceso al
menos una vez antes de
comprobar la condición, ya
que la condición se evalúa al
final del proceso
Ciclos con un número indeterminado de
iteraciones
39
Sentencia do - while
/* lee un número entre 1 y 10 */
#include <iostream>
using namespace std;
int main(void)
{
int numero;
do
{
cout << "Introduzca un numero
entre 1 y 100: ";
cin >> numero;
}
while (numero < 1 || numero > 100);
}
40
Bibliografía:
Deitel y Deitel. C++ Cómo programar. Prentice Hall 1999.

Hernandez G, Jaime y otros. Curso práctico de programación
de computadoras. Cekit 1999.

Schildt, Herbert. C Guía de Autoenseñanza. McGraw Hill
1994.

41
Gr@ci@s