• No se han encontrado resultados

Estructuras de Control

N/A
N/A
Protected

Academic year: 2021

Share "Estructuras de Control"

Copied!
18
0
0

Texto completo

(1)

2

Estructuras de Control

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

(2)

Secuencial V F Selección Simple F V Selección Doble V V V F F F Selección Múltiple V Repetición Mientras V F

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

F V

(3)

2.2. ESTRUCTURA DE CONTROL SECUENCIAL 29 Secuencial Cualquier conjunto de expresiones en secuencia a = 5; b = a + 4; . . . printf("hola"); Selección Simple if(expresión){ expresiones; } Selección Doble if(expresión){ expresiones1; } else { expresiones2; } Selección Múltiple switch(expresión){

case constante1: expresiones1; break;

case constante2: expresiones2; break;

. . .

case constanteN: expresionesN; break;

default: otras_expresiones; break;

} Repetición Mientras while(expresión){ expresiones; } Repetición Hacer/Mientras do{ expresiones; } while(expresión); Repetición Para/Hasta

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

expresiones; }

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

(4)

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 colocandon

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 n t f ( " I n t r o d u c e o t r o e n t e r o : " ) ; 11 s c a n f ( " %d" , &e n t e r o 2 ) ;

(5)

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 ejecufun-ció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 deselección simplerepresenta 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

(6)

V F

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 conV 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

(7)

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 i n t e n t e r o ; 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 elmayor 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.

(8)

F V

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 rectángu-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 variablevalor. 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 casoexpresiones1 representa las acciones a realizar si la condición es verdadera (expresión) yexpresiones2 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

(9)

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 i n t v a l o r ; 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 } e l s e{ 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.

(10)

&& 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 conV y realiza las acciones corres-pondientes, representadas por el rectángulo de acción; si no sigue la línea de flujo etiquetada conF 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;

(11)

2.5. ESTRUCTURA DE CONTROL DE SELECCIÓN MÚLTIPLE 37 V V V F F F

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

La palabra reservada para esta estructura esswitch. La (expresión) puede tomar valores correspondientes a las constantes (constante1,constante2, . . . ). Si toma alguno de estos valores realiza las acciones correspondiente a esecase

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 i n t d i a ; 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 orres pond e a l Lunes \n" ) ; break; 13 case 2 : p r i n t f ( "\ tC orres pond e a l Martes \n" ) ; break; 14 case 3 : p r i n t f ( "\ tC orres pond e a l M i e r c o l e s \n" ) ; break; 15 case 4 : p r i n t f ( "\ tC orres pond e a l Jueves \n" ) ; break; 16 case 5 : p r i n t f ( "\ tC orres pond e a l V i e r n e s \n" ) ; break;

(12)

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

17 case 6 : p r i n t f ( "\ tC orres ponde a l Sabado \n" ) ; break; 18 case 7 : p r i n t f ( "\ tC orres ponde a l Domingo \n" ) ; break; 19 def a ul t: 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 dedia 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 conV, 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.

(13)

2.6. ESTRUCTURA DE CONTROL DE REPETICIÓN MIENTRAS 39

V

Figura 2.11: Diagrama de flujo de la estructura de controlrepetició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 , conta = 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 ( term i na 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 con 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/ conta ; 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:

(14)

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 esfloat. 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 desuma de tipofloaty como no pue-de operar con tipos diferentes automáticamente se hace una copia temporal

(15)

2.7. ESTRUCTURA DE CONTROL DE REPETICIÓN HACER/MIENTRAS41

V F

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 tipofloat.

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 lasexpresiones de esta estructura están antes de verificar el valor de la expresión asociada a la palabra reservada while. Por

(16)

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ándoconta 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 , conta = 0 , suma = 0 ; 7 f l o a t promedio ; 8 9 do{ 10 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 : " ) ; 11 s c a n f ( " %d" , & c a l i f ) ; 12 suma += c a l i f ; 13 con ta ++; 14 15 }while( conta <= 5 ) ; 16

17 promedio = (f l o a t) suma/ conta ; 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á

(17)

2.8. ESTRUCTURA DE CONTROL DE REPETICIÓN PARA/HASTA43

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

F V

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;

(18)

sintaxis contiene tres expresiones: laexpresión1 regularmente representa un contador en el valor inicial y se ejecuta únicamente una vez al iniciar la es-tructura. Laexpresión2 regularmente representa la condición, que verifica si el contador ha alcanzado el valor final. Laexpresión3 regularmente represen-ta un incremento o decremento del conrepresen-tador 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 laexpresió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 alfor consisten en multiplicar sucesivamente el valor acumulado en la variablefactorial 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 tipolong 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 t o r i a 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( conta =1; conta<=num ; conta ++){ 12 f a c t o r i a l ∗= con 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 }

Referencias

Documento similar

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

o Si dispone en su establecimiento de alguna silla de ruedas Jazz S50 o 708D cuyo nº de serie figura en el anexo 1 de esta nota informativa, consulte la nota de aviso de la

Where possible, the EU IG and more specifically the data fields and associated business rules present in Chapter 2 –Data elements for the electronic submission of information

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)