Vous êtes sur la page 1sur 18

Estructuras de Control

2
Enrique Alejandro López López

2.1. Introducción
Las Estructuras de Control son los bloques de construcción básicos de
cualquier programa estructurado. En la introducción del capítulo anterior
se menciona que cualquier programa estructurado se puede programar utili-
zando únicamente tres estructuras de control: la secuencial, la de selección
y de la repetición. Esta afirmación es correcta. Sin embargo la mayoría de
los lenguajes que soportan la programación estructurada, proporcionan siete
estructuras de control: la secuencial, tres de selección y tres de repetición.
Esto es para facilitar la programación ya que alguna de las estructuras de
selección o repetición se amoldan mejor a uno o a otro programa. En la figura
4.1 se muestran los diagramas de flujo de cada una de estas estructuras de
control, con estos diagramas se puede visualizar gráficamente el flujo de las
acciones. A lo largo de este capítulo se explicará ampliamente cada una de
ellas y se mostrará su utilización mediante un programa en lenguaje C.
Como ya mencionó se mostrará un ejemplo de un programa en lenguaje
C de cada una de las estructuras de control. Sin embargo, es importante
desde del principio conocer cuál es la sintaxis general de estas estructuras.
En la figura 4.2 se muestra la sintaxis general y las palabras reservadas que

27
28 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

Secuencial Selección Simple Selección Múltiple

V
V
F
F
V

Selección Doble

V F F

Repetición Mientras Repetición Hacer/Mientras Repetición Para/Hasta

V V

F F

Figura 2.1: Estructuras de control en diagrama de flujo.


2.2. ESTRUCTURA DE CONTROL SECUENCIAL 29

Secuencial Selección Simple Selección Doble


Cualquier conjunto de if(expresión){
if(expresión){
expresiones en secuencia expresiones1;
expresiones;
} } else {
a = 5;
expresiones2;
b = a + 4;
}
. . .
printf("hola");

Selección Múltiple Repetición Mientras

switch(expresión){ while(expresión){
case constante1: expresiones1; break; expresiones;
case constante2: expresiones2; break; }
. . .
case constanteN: expresionesN; break;
default: otras_expresiones; break;
}

Repetición Para/Hasta Repetición Hacer/Mientras

for(expresión1; expresión2; expresión3;){ do{


expresiones; expresiones;
} } while(expresión);

Figura 2.2: Sintaxis de las estructuras de control en lenguaje C.

se utilizan para codificar las estructuras de control en lenguaje C. las figuras


2.1 y 2.2 resumen el propósito de este capítulo y en las secciones siguientes
se describe y ejemplifica ampliamente la lógica y uso de cada una de las
estructuras de control.

2.2. Estructura de control secuencial


La estructura de control secuencial representa la organización de senten-
cias o instrucciones consecutivas que se van ejecutando una después de la
otra, como se muestra visualmente en la figura 4.3. Este diagrama comienza
30 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

Figura 2.3: Diagrama de flujo de la estructura de control Secuencial

con el punto de entrada y la línea de flujo ( −→ ) apunta al primer rectángulo


de acción que indica la primera sentencia a ejecutar y continua con el flujo
que apunta a otro rectángulo de acción y así podríamos seguir colocando n
rectángulos de acción y termina con el punto de salida. Todas las estructuras
de control tienen la característica de tener un único punto de entrada y un
único punto de salida. El listado 2.1 muestra un ejemplo de un programa
que utiliza únicamente esta estructura.
El programa codificado en el listado 2.1 lee de teclado dos enteros e
imprime en pantalla la suma de dichos enteros. La línea 1 es un comentario
de renglón indica que todo lo que esté a la derecha de // es un comentario. En
este caso señala el nombre del archivo fuente de este código. Se recomienda
que siempre coloque un comentario que indique el nombre del archivo fuente
del código. También puede colocar comentarios con el nombre del autor,
descripción de lo que hace el programa y versión del programa.

Programa 2.1: Programa que suma dos enteros.


1 //suma . c
2 #include <s t d i o . h>
3
4 main ( )
5 {
6 i n t e n t e r o 1 , e n t e r o 2 , suma ;
7
8 p r i n t f ( " I n t r o d u c e un e n t e r o : " ) ;
9 s c a n f ( " %d" , &e n t e r o 1 ) ;
10 p r i nt f ( " Introduce otro entero : " ) ;
11 s c a n f ( " %d" , &e n t e r o 2 ) ;
2.3. ESTRUCTURA DE CONTROL DE SELECCIÓN SIMPLE 31

Figura 2.4: Ejemplo de la ejecución del Listado 2.1

12
13 suma = e n t e r o 1 + e n t e r o 2 ;
14
15 p r i n t f ( " \ t %d + %d = %d\n" , e n t e r o 1 , e n t e r o 2 , suma ) ;
16
17 return 0 ;
18 }

En la línea 2 el # indica que es una directiva de preprocesamiento antes


de compilar y en este caso ordena que se incluya ( include ) la biblioteca de
entrada y salida estándar (<stdio.h>). En la línea 4 inicia la función prin-
cipal main y deberá colocarse en todo programa que se quiera una versión
ejecutable. Es precisamente en esta línea donde inicia la ejecución el pro-
grama. La líneas 5 y 18 muestran las llave que abren y cierran, e indican el
inicio y fin de bloque respectivamente.En este caso, por ser inicio y fin del
main son el inicio y fin de un programa ejecutable. En la línea 6 está la zona
declaración de variables, y se describe ampliamente en el capítulo 1. En este
caso se están declarando tres variables de tipo entero. De la línea 8 a la línea
11 se está solicitando y leyendo de la entrada estándar dos valores enteros,
utilizando las funciones (printf y scanf ), que se explica cómo utizarlas en
el capítulo1. En la línea 13 se calcula la suma del entero1 y el entero2 y se
asigna a la variable suma. Estos operadores y los demás operadores aritmé-
ticos, también se explican en el capítulo 1. En la línea 15 se imprime en la
salida estándar el resultado de la suma y finalmente en la línea 17 la fun-
ción principal regresa cero indicando que terminó con éxito la ejecución. En
la figura 3.4 se muestra un ejemplo de la ejecución este programa. En las
siguientes secciones veremos como el flujo del programa se puede llevar por
diferentes caminos.

2.3. Estructura de control de selección simple


La estructura de control de selección simple representa una estructura
que si se cumple alguna condición se realizan algunas acciones, mientras que
si no se cumple, no se realizan dichas acciones. Esta lógica la puede observar
32 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

Figura 2.5: Diagrama de flujo de la estructura de control Selección Simple

en la figura 2.5. La línea de flujo inicial señala directamente sobre el símbolo


de decisión (!), el cual presenta como salida dos flujos. Una línea de flujo
etiquetado con V e indica que la condición es verdadera y realiza las acciones
representadas por el rectángulo de acción y otra línea de flujo etiquetado con
F que indica que la condición es falsa y se dirige directamente al punto de
salida. También debe observar, que en el caso verdadero después de realizar
las acciones el se dirige al punto de salida de la estructura.
En el listado 4.2 se tiene codificado un programa que utiliza la estructura
de selección simple y se puede observar cómo se utiliza en la práctica. Este
programa lee un entero de la entrada estándar e imprime en la salida están-
dar, si el valor es positivo. Este programa inicia con la solicitud y lectura de
un entero, en las líneas 8 y 9 respectivamente, y continúa con la estructura
de selección simple. La selección simple tiene siguiente sintáxis general:

if( expresión ){
expresiones;
}

En este caso si la condición (entero > 0) es verdadera se imprime en


la salida estándar una cadena que expresa que el valor es positivo. Si la
condición es falsa no hace nada el programa, regresa cero y termina. También
debe observar, cómo las expresiones pertenecientes al if están entre inicio
y fin de bloque ( ). En el caso de este programa es una sola expresión,
por lo cual se podría omitir las llaves, sin embargo es recomendable colocar
las llaves, sea una o más instrucciones. En la figura 2.6 puede observar un
ejemplo de la ejecución de este programa.

Programa 2.2: Programa que imprime si es un número positivo.


1 // p o s i t i v o . c
2.3. ESTRUCTURA DE CONTROL DE SELECCIÓN SIMPLE 33

Figura 2.6: Ejemplo de la ejecución del Listado 2.2

2 #include < s t d i o . h>


3
4 main ( )
5 {
6 int entero ;
7
8 p r i n t f ( " I n t r o d u c e un e n t e r o : " ) ;
9 s c a n f ( " %d" , &e n t e r o ) ;
10
11 i f ( e n t e r o > 0 ){
12 p r i n t f ( " \ t %d e s un e n t e r o p o s i t i v o \n" , e n t e r o ) ;
13 }
14
15 return 0 ;
16 }

En la línea 11 del listado 2.2 se introduce un nuevo tipo de operador que


es el mayor que (>) y pertenece a los operadores de relación e igualdad que
nos proporciona el leguaje C. En la tabla 2.1 se muestra una lista completa
de este tipo de operadores. Unos de los errores más comunes al aplicar estos
operadores es intercambiar su orden o colocar espacio entre los caracteres
que lo forman. También comúnmente se confunde el operador de asignación
con el de igualdad, por esta razón se remarca que el operador de igualdad son
dos caracteres de igual(==) y el operador de asignación es solo un carácter
de igual (=).

Operador Significado Ejemplo


> mayor que a>b
< menor que a<b
>= mayor o igual que a>=b
<= menor o igual que a<=b
== igual a a==b
!= diferente a a!=b

Tabla 2.1: Operadores de relación e igualdad.


34 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

V F

Figura 2.7: Diagrama de flujo de la estructura de control selección doble

2.4. Estructura de control de selección doble


La estructura de control de selección doble es una estructura que intro-
duce una condición, si es verdadera, realiza un bloque de acciones; y si es
falsa, hace otro bloque de acciones. Es decir que tiene dos bloques de acciones
mutuamente excluyentes. En la figura 2.7 se puede observar gráficamente la
lógica de esta estructura mediante su representación en diagrama de flujo,
donde la línea de flujo inicial se dirige a un símbolo de decisión. Desde este
símbolo de decisión se tiene dos posibles caminos: uno etiquetado con V,
que señala que si la condición es verdadera realizará las acciones represen-
tadas por el rectángulo de acción; y otro etiquetado con F que indica que
si la condición es falsa realizará las acciones representadas por el rectángu-
lo de acción. Después de realizar unas u otras acciones los dos lados de la
estructura se unen nuevamente en el punto de salida de la estructura.
Un ejemplo de cómo se utiliza la estructura de selección doble, se puede
observar en el listado 2.3. En este programa se solicita un entero de teclado
y se envía a la salida estándar si el entero está en el rango [100, 500]. En las
líneas 9 y 10 se solicita, lee y guarda un valor entero en la variable valor. De
la línea 12 a 16 se tiene la estructura de control de selección doble con la
sintaxis general

if(expresión){
expresiones1;
} else {
expresiones2;
}

En este caso expresiones1 representa las acciones a realizar si la condición


es verdadera (expresión) y expresiones2 representa las acciones a realizar si
la condición es falsa. En el caso de este programa la condición verifica si el
valor leído de de la entrda estándar es mayor o igual que 100 y menor o
2.4. ESTRUCTURA DE CONTROL DE SELECCIÓN DOBLE 35

Figura 2.8: Ejemplo de la ejecución del listado 2.3

igual que 500. Si es verdadera, imprime en la salida estándar que el valor


está en el rango; y si es falsa, imprime que el valor no está en el rango. Aquí
es importante resaltar que únicamente realiza un bloque de acciones y se va
al final de la estructura. Finalmente el programa regresa cero y termina. En
la figura 2.8 puede observar dos ejemplos de la ejecución de este programa:
uno que realiza las acciones del caso verdadero, y en el ejemplo realiza las
acciones de caso falso.

Programa 2.3: Programa que imprime si un valor está en el rango [100,


500 ]o no.
1 // rango . c
2 #include < s t d i o . h>
3
4 main ( )
5 {
6 int val or ;
7
8
9 p r i n t f ( " I n t r o d u c e un e n t e r o en [ 1 0 0 , 5 0 0 ] : " ) ;
10 s c a n f ( " %d" , &v a l o r ) ;
11
12 i f ( v a l o r >= 100 && v a l o r <=500){
13 p r i n t f ( " \ t %d e s t a en [ 1 0 0 , 5 0 0 ] \ n" , v a l o r ) ;
14 } else {
15 p r i n t f ( " \ t %d No e s t a en [ 1 0 0 , 5 0 0 ] \ n" , v a l o r ) ;
16 }
17
18 return 0 ;
19 }

En el programa del listado 2.3 se utilizó el operador de conjunción que


es parte de los operadores lógicos con los que cuenta el lenguaje C y en la
tabla 2.2 se puede observar la lista de este tipo de operadores.
36 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

Operador Significado Ejemplo


&& conjunción (y) a && b
|| disyunción (o) a || b
! negación (no) !a

Tabla 2.2: Operadores lógicos.

2.5. Estructura de control de selección múltiple


La estructura de control de selección múltiple, es una estructura que eva-
lúa una expresión que puede tomar varios y dependiendo del valor que tome
realiza un conjunto de acciones. En la figura 2.9 se puede observar la lógi-
ca de esta estructura. El lado izquierdo muestra un conjunto de símbolos
de decisión que señalan los distintos valores que puede tomar la expresión.
Si la expresión toma el valor correspondiente al primer símbolo de decisión
entonces toma la línea de flujo etiquetada con V y realiza las acciones corres-
pondientes, representadas por el rectángulo de acción; si no sigue la línea de
flujo etiquetada con F y ahora compara con otro valor que está representado
por otro símbolo de decisión, y así sucesivamente continua la lógica de esta
estructura. En el diagrama se puede observar que cada símbolo de decisión
corresponde a un caso diferente. Asimismo se puede observar que después de
realizar el rectángulo de acción correspondiente, se dirige al punto de salida
de la estructura. También se puede observar un rectangulo de acción después
de todos los símbolos de decisión, que se realiza únicamente, si ningún caso
fue verdadero, y finalmente termina la estructura.
Para analizar en la práctica el funcionamiento de la estructura de selec-
ción múltiple examine el listado 2.4. Este programa lee un entero, si el entero
está en el rango [1, 7] imprime el día de la semana correspondiente (Lunes
= 1, martes = 2, . . . ); si no está en el rango, imprime, que ese valor no
corresponde a ningún día de la semana. La estructura de selección múltiple
en este listado está codificada de la línea 11 a la línea 20, y tiene una sintaxis
general de la siguiente forma

switch(expresión){
case constante1: expresiones1; break;
case constante2: expresiones2; break;
. . .
case constanteN: expresionesN; break;
default: otras_expresiones; break;
}
2.5. ESTRUCTURA DE CONTROL DE SELECCIÓN MÚLTIPLE 37

Figura 2.9: Diagrama de flujo de la estructura de control Selección Múltiple

La palabra reservada para esta estructura es switch. La (expresión) puede


tomar valores correspondientes a las constantes (constante1, constante2, . . . ).
Si toma alguno de estos valores realiza las acciones correspondiente a ese case
hasta encontrar la palabra reservada break que envía la ejecución al final de
la estructura.

Programa 2.4: Programa que imprime el día de la semana que corres-


ponde al valor leído.
1 // d i a . c
2 #include < s t d i o . h>
3
4 main ( )
5 {
6 int dia ;
7
8 p r i n t f ( " I n t r o d u c e un v a l o r [ Lunes = 1 , Martes = 2 , . . . ] : ");
9 s c a n f ( " %d" , &d i a ) ;
10
11 switch ( d i a ){
12 case 1: p r i n t f ( " \ tC o rre s p o n d e al Lunes \n" ) ; break ;
13 case 2: p r i n t f ( " \ tC o rre s p o n d e al Martes \n" ) ; break ;
14 case 3: p r i n t f ( " \ tC o rre s p o n d e al M i e r c o l e s \n" ) ; break ;
15 case 4: p r i n t f ( " \ tC o rre s p o n d e al J u e v e s \n" ) ; break ;
16 case 5: p r i n t f ( " \ tC o rre s p o n d e al V i e r n e s \n" ) ; break ;
38 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

Figura 2.10: Ejemplo de la ejecución del listado 2.4

17 case 6 : p r i n t f ( " \ tC o rre s p o n d e a l Sabado \n" ) ; break ;


18 case 7 : p r i n t f ( " \ tC o rre s p o n d e a l Domingo \n" ) ; break ;
19 default : p r i n t f ( " \tNo c o r r e s p o n d e ningun d i a \n" ) ; break ;
20 }
21
22 return 0 ;
23 }

En el caso particular del programa del listado 2.4, el valor de la varia-


ble dia, puede ser igual a alguna de las constantes 1,2, . . . ,7 y en ese caso
imprimirá el día de la semana que corresponda. Si el valor de dia no corres-
ponde a ninguno de los casos realiza el default que imprime la cadena “No
corresponde a ningún día”. En la figura 2.10 se puede observar la ejecución
del programa para tres distintos valores.
Hasta el momento se han revisado las tres estructuras de selección. En
las siguientes secciones revisaremos las tres estructuras de repetición que
proporciona el lenguaje C.

2.6. Estructura de control de repetición mientras


La estructura de control de repetición mientras es un ciclo que repite un
bloque de instrucciones mientras la condición es verdadera. La característica
que la distingue de otros ciclos es que verifica la condición antes de ejecutar
las acciones. En la figura 2.11 se puede observar la lógica de este ciclo. Del
punto de entrada la línea de flujo se dirige al símbolo de decisión, si la
condición es verdadera continua por la línea etiquetada con V, que se dirige
a un rectángulo de acción. Después de terminar esas acciones reprentadas
por el rectángulo de acción, la línea de flujoi regresa al símbolo de decisión.
2.6. ESTRUCTURA DE CONTROL DE REPETICIÓN MIENTRAS 39

Figura 2.11: Diagrama de flujo de la estructura de control repetición mientras

El ciclo termina cuando la condición es falsa y está reprentada por la línea


etiquetada con F.

Programa 2.5: Programa que calcula el promedio de calificaciones dadas


hasta el ingreso de un centinela.
1 // promedio . c
2 #include < s t d i o . h>
3
4 main ( )
5 {
6 i n t c a l i f , c o n ta = 0 , suma = 0 ;
7 f l o a t promedio ;
8 p r i n t f ( " I n t r o d u c e l a C a l i f i c a c i o n ( te rm i n a con −1): " ) ;
9 s c a n f ( " %d" , & c a l i f ) ;
10
11 while ( c a l i f != −1){
12 suma += c a l i f ;
13 co n ta ++;
14 p r i n t f ( " I n t r o d u c e l a C a l i f i c a c i o n ( term i n a con −1): " ) ;
15 s c a n f ( " %d" , & c a l i f ) ;
16 }
17
18 promedio = ( f l o a t ) suma/ c o n ta ;
19
20 p r i n t f ( " \ t E l promedio e s : %6.1 f " , promedio ) ;
21
22 return 0 ;
23 }

Para observar en la prática cómo funciona el ciclo mientras se analizará el


código del listado 2.5. Este programa lee calificaciones de la entrada estándar,
las cuenta y las acumula; para después obtener el promedio. En el listado
2.5 la estructura de repetición mientras comienza en la línea 11 y termina la
línea 16, tiene la sintaxis general de la siguiente forma:
while(expresión){
40 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

Figura 2.12: Ejemplo de la ejecución del listado 2.5

expresiones;
}
En el caso de este programa la expresión es una condición (calif != -1 ).
La concición compara, si la calificación calif es diferente (!=) de -1. Si es
verdadera, entonces realiza el bloque de instrucciones de la estructura limi-
tado por las llave. Si la condición es falsa, la estructura termina y continúa
programa en la línea 17. Las instrucciones que pertenecen al bloque de es-
ta estructura son: línea 12, acumulación de las calificacionessuma += calif ;
línea 13; cuenta el número de calificaciones leídas conta++; líneas 14 y 15,
solicita y lee una nueva calificación respectivamente. En la Línea 18, se cacula
el promedio y en la línea 20, se imprime dicho promedio.

Operador Ejemplo Significado


*= a *= b a=a*b
/= a /= b a=a/b
%= a %= b a = a% b
+= a += b a=a+b
-= a -= b a=a-b

Tabla 2.3: Operadores abreviados aritméticos y asignación.

En el programa del listado 2.5 se introducen algunos operadores como:


El operador abreviado de suma y asignación +=. Este operador se comporta
cómo a += b es equivalente a = a + b. En la tabla 2.3 se puede observar
los operadores abrevidados de asignaciòn y aritmeticos. Otro operador in-
troducido en este programa es el operador de incremento ++, este operador
aumenta en uno el valor de la variable. En la línea 18, se utiliza el operador
de conversión explícita (Tipo). Este operador hace una conversión al tipo
indicado, que en este caso el Tipo es float. En este programa la operación de
suma entre conta daría como resultado un entero, ya que ambos operandos
son enteros. Esta es precisamente la razón de colocar (float), ya que con esto
el compilador hace una copia temporal de suma de tipo float y como no pue-
de operar con tipos diferentes automáticamente se hace una copia temporal
2.7. ESTRUCTURA DE CONTROL DE REPETICIÓN HACER/MIENTRAS41

Figura 2.13: Diagrama de flujo de la estructura de control repetición hacer/-


mientras

de conta de tipo float y ahora si el resultado es de tipo float.

2.7. Estructura de control de repetición hacer/mien-


tras
La estructura de control de repetición hacer/mientras es otro de los ci-
clos que proporciona el lenguaje C. De manera semejante al ciclo anterior,
esta estructura repite un bloque de instrucciones mientras una condición sea
verdadera. La característica que distingue a este ciclo, es que primero realiza
las acciones y después verifica la condición. Es decir, que en esta estructura
las acciones se realizan al menos una vez. Para analizar la lógica de esta
estructura observe la figura 2.13. La línea de flujo del punto de entrada se
dirige directamente al rectángulo de acción y después de realizar las acciones
la línea de flujo se dirige al símbolo de decisión. Si la decisión es verdadera,
la línea de flujo etiquetado con V regresa la ejecución antes del rectángulo
de acción. Si la condición es falsa, el camino que sigue es la línea de flujo
etiquetado con F y se al punto de salida de la estructura.
Para observar en la práctica el funcionamiento de esta estructura, observe
el código de listado 2.6. Este programa lee de teclado cinco calificaciones,
calcula el promedio y lo imprime. En este programa, el ciclo hacer/mientras
esta codificado de la línea 9 a la 15 y la sintaxis general de la estructura es:

do{
expresiones;
} while(expresión);

Como se puede observar las expresiones de esta estructura están antes de


verificar el valor de la expresión asociada a la palabra reservada while. Por
42 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

esta razón, las acciones se realizan al menos una vez y después se verifica su
valor de verdad. Si valor de verdad de la expresión es verdadero, entonces
se repiten nuevamente expresines, y así sucesivamente continua el ciclo. El
ciclo terminará cuándo el valor de verdad de expresión es falso. En el caso
de este programa las expresiones asociadas a la estructura son: Líneas 10
y 11, solicita y lee una calificación, respectivamente. La línea 12, acumula
la calificación y línea 13, cuenta el número de calificaciones. En la línea 15,
La condición conta <= 5, define qu el ciclo se ejecutará seis veces. El ciclo
temina cuándo conta tiene el valor de seis, debido a que la condición se hace
falsa. La línea 17, calcula el promedio y la línea 19 lo imprime. En la figura
2.14 se puede observar un ejemplo de la ejecución del programa.

Programa 2.6: Programa que imprime el promedio de cinco calificaciones


leídas de teclado.
1 // promedioConta . c
2 #include <s t d i o . h>
3
4 main ( )
5 {
6 i n t c a l i f , c o n ta = 0 , suma = 0 ;
7 f l o a t promedio ;
8
9 do{
10 pr i n t f (" Introduce la Ca l i f i c a c i o n : " ) ;
11 s c a n f ( " %d" , & c a l i f ) ;
12 suma += c a l i f ;
13 co n ta ++;
14
15 } while ( c o n ta <= 5 ) ;
16
17 promedio = ( f l o a t ) suma/ c o n ta ;
18
19 p r i n t f ( " \ t E l promedio e s : %6.1 f " , promedio ) ;
20
21 return 0 ;
22 }

2.8. Estructura de control de repetición para/hasta


La estructura de control de repetición para/hasta es otro de los ciclos
que nos proporciona el lenguaje C. De la misma manera que los dos ciclos
anteriores se utiliza para repetir un conjunto de acciones, hasta que se deje de
cumplir una condición. La característica que distingue este ciclo es que está
2.8. ESTRUCTURA DE CONTROL DE REPETICIÓN PARA/HASTA43

Figura 2.14: Ejemplo de la ejecución del listado 2.6

Figura 2.15: Diagrama de flujo de la estructura de control repetición pa-


ra/hasta

diseñado para repetir un bloque de instrucciones de un valor inicial hasta un


valor final. En la figura 2.15 se puede observar la lógica de esta estructura.
La línea de flujo del punto de entrada se dirige a un rectángulo de acción que
únicamente se ejecuta una vez. Debido a que la línea de flujo que define el
ciclo, se posiciona después de este rectángulo de acción. El diagrama continúa
con el símbolo de decisión, que regularmente verifica si se ha alcanzado el
valor final. Si no, ha alcazado el valor final, el ciclo continúa con la línea
etiquetada con V y realiza las acciones representadas por el rectángulo de
acción. Después de este rectángulo de acción el diagrama continúa con otro
rectángulo de acción, que representa la acción que conduzca al valor final y
regularmente es un incremento o un decremento. El ciclo termina, cuándo se
alcaza el valor final y se representa por la línea de flujo etiquetada con F.
Para observar el funcionamiento de esta estructura, se utilizará el ejemplo
del listado 2.7. Este programa lee un entero, calcula e imprime el factorial.
En las líneas 11 a 13, este ciclo está codificado y tiene una sintaxis general
de la siguiente forma:

for(expresión1; expresión2; expresión3;){


expresiones;
}
44 CAPÍTULO 2. ESTRUCTURAS DE CONTROL

Como se puede observar la palabra reservada para este ciclo es for y su


sintaxis contiene tres expresiones: la expresión1 regularmente representa un
contador en el valor inicial y se ejecuta únicamente una vez al iniciar la es-
tructura. La expresión2 regularmente representa la condición, que verifica si
el contador ha alcanzado el valor final. La expresión3 regularmente represen-
ta un incremento o decremento del contador para que vaya acercando al valor
final y se ejecuta, después realizar las expresiones del ciclo. En el ejemplo
del listado 2.7, el contador se le asigna un valor inicial de uno. La condición
conta <= num define que el ciclo se ejecutará hasta alcanzar el valor num
y la expresión3 es un incremento de conta. El factorial n se define como 1
si n es igual a cero y como 1*2*3*. . . *(n) si n es mayor que uno. Por esta
razón, las acciones asociadas al for consisten en multiplicar sucesivamente el
valor acumulado en la variable factorial por el valor del contador. Cuando el
ciclo termina, el programa continúa con la impresión del valor acumulado en
factorial y termina. En la figura 14, pude observar tres ejemplos de la ejecu-
ción de este programa. En el tercer ejemplo,se puede observar que el valor es
negativo lo cual no sería correcto matemáticamente. Sin embargo recuerde
que el tipo entero en el caso del lenguaje C tiene un rango. Es decir, que no
son infinitos, si no que hay un valor máximo para los enteros (MAXINT ),
y en este caso al tratar de calcular el factorial de 20 su valor es mayor que
el máximo entero. Si quiere un rango mayor puede utilizar el tipo long int,
float o double.

Programa 2.7: Programa que imprime el factorial de un entero leído de


teclado.
1 // f a c t o r i a l . c
2 #include <s t d i o . h>
3
4 main ( )
5 {
6 long conta , num , f a c to r ia l = 1;
7
8 p r i n t f ( " I n t r o d u c e un e n t e r o p o s i t i v o o c e r o : " ) ;
9 s c a n f ( " %d" , &num ) ;
10
11 f o r ( c o n ta =1; conta<=num ; c o n ta ++){
12 f a c t o r i a l ∗= c o n ta ;
13 }
14
15 p r i n t f ( " \ t %d ! = %l d " , num , f a c t o r i a l ) ;
16
17 return 0 ;
18 }

Vous aimerez peut-être aussi