You are on page 1of 34

DIAGRAMA DE LA UNIDAD

ESTRUCTURAS
DE CONTROL
Bloques y
Llaves
Funcin Exit()
Incondicionales
Etiquetas
Enunciado
goto
Condicionales
Simple
If
if-else
elseif
Multiple switch break
Repetitivas
for
while
do while
ESTRUCTURAS DE CONTROL

APERTURA

Iniciemos este apartado con una historia interesante acerca del origen del Ajedrez.
"Hace muchos siglos, en un pas de oriente viva un rey que haba perdido a su hijo en una batalla. A
causa de esta tragedia haba decidido encerrarse en su castillo y no hablaba con nadie. Uno de sus
ministros llam a todos los cientficos y filsofos del reino para que buscaran una posible solucin a la
tristeza del rey. Uno de ellos invent un juego de estrategias, el ajedrez.

El rey no slo volvi a sonrer sino que se volvi un gran maestro de este juego. Qued tan feliz con el
invento que decidi recompensar al inventor con lo que l pidiera. El joven que haba creado el ajedrez
pidi lo siguiente: un grano de trigo en la primera casilla del tablero, dos granos en la segunda, cuatro
en la tercera, ocho en la cuarta, diecisis en la quinta y as sucesivamente hasta completar las sesenta y
cuatro casillas del tablero de ajedrez. El rey muy tranquilo, pidi a los matemticos del reino que
calcularan el nmero de granos de trigo que deban pagarse al inventor; al cabo de un rato, los
cientficos regresaron con una gran sorpresa:
No alcanzaba todo el trigo del mundo para pagar el juego de ajedrez!"Te imaginas porque?

Esta situacin se puede solucionar con las estructuras de control que vamos a tratar en este tema.


DESARROLLO


ESTRUCTURAS DE CONTROL
Las estructuras de control son enunciados de cdigo que determinan el flujo de la
informacin; pueden ser condicionales o repetitivas.


BLOQUES y LLAVES
Las estructuras de control contienen a otros enunciados, los cuales estn delimitados dentro de llaves y
en conjunto se les llama bloque de cdigo.

Para entenderlo mejor, Imagina que un terreno muy extenso se ha dividido y a ti te corresponde una parte
de ese terreno, es necesario que delimites la parte que te pertenece, con una barda por ejemplo.


IMPORTANTE: En lenguaje C, nunca pongas el terminador punto y coma(;) en una
estructura o enunciado que lleva llaves.


Algunos de los enunciados que llevan llaves en lugar de punto y coma(;), en Lenguaje C son:
La funcin main()
Las instrucciones condicionales if, else y switch.
Los ciclos for, while y do while.
Las estructuras de datos
Las funciones creadas por el usuario.


FUNCIN exit( )
La funcin exit termina la ejecucin de un programa y regresa el control al sistema
operativo. La sintaxis es: exit( );

Un programa de C normalmente termina cuando la ejecucin llega a la llave que cierra de la funcin
main(). Sin embargo el programa se puede terminar en cualquier momento llamando a la funcin de
Biblioteca exit( ).

En algunas versiones del Lenguaje C, es necesario poner dentro de los parentesis, el nmero 1; que
indica la salida al sistema operativo. exit(1);

IMPORTANTE: Para usar la funcin exit( ) se requiere el archivo de cabecera stdlib.h.


ENUNCIADOS INCONDICIONALES.
Seguro sabes que; cuando un soldado recibe una orden de sus superiores, debe de cumplirla como se le
indic. No puede elegir: si le indica que vaya al cuartel, el soldado ir al cuartel.

Algo similar sucede con un enunciado incondicional; Cuando se encuentra un enunciado incondicional
en el cdigo, la ejecucin se dirige hacia otra parte del programa, llamada etiqueta, automticamente, y
no depende de ninguna condicin, como ocurre con la estructura if.

ETIQUETA.
Una etiqueta es un enunciado que sirve como marca, para que el programa llegue ah en
un momento determinado de la ejecucin.

Una etiqueta consiste de un identificador seguido de dos puntos, como ejemplo vea estas dos etiquetas;
lugar: y repetir:

Para el uso de las etiquetas en C es necesario el enunciado goto.

EL ENUNCIADO goto
Considerado enunciado de salto incondicional o ramificacin. El enunciado goto, dirige
automticamente la ejecucin del programa a la etiqueta especificada.

La sintaxis es:
goto destino;
destino es una etiqueta que identifica la posicin del programa a la que debe de dirigir la ejecucin. Un
enunciado goto y su etiqueta destino deben de estar en la misma funcin, la etiqueta antes o despus.

IMPORTANTE: Muchos programadores recomiendan no utilizar goto, por dos razones:
No son necesarios. No hay tarea de programacin que requiera el enunciado goto.
Siempre se puede escribir el cdigo necesario usando los otros enunciados.
Es peligroso. Los enunciados goto pueden parecer una solucin ideal para
determinados problemas de programacin, pero es fcil abusar de su uso, por lo tanto se pueden
estar dando saltos de ejecucin por todos lados en el programa y luego perder la secuencia
deseada. Este tipo de programacin es conocida como cdigo espagueti.

Instrucciones a realizar cuando se
cumple la condicin.
si no
Instrucciones a realizar cuando se
cumple la condicin.
condicin

ESTRUCTURAS CONDICIONALES
Una estructura de control condicional indica la ejecucin o no de ciertos enunciados. Es
decir, la ejecucin de enunciados depende del resultado de la condicin planteada.

Los enunciados de un programa en C, normalmente se ejecutan de arriba hacia abajo, en el mismo
orden en que aparecen en el cdigo fuente, pero con las estructuras de control se puede elegir cuales
enunciados sern ejecutados en base a condiciones.


En Lenguaje C, las estructuras condicionales pueden ser: simples y mltiples

ESTRUCTURA CONDICIONAL SIMPLE
Permite elegir entre dos opciones dependiendo de que la condicin sea falsa o verdadera.
Solo se puede elegir una opcin a la vez.

Seguramente te has topado con alguna de estas condiciones de la vida real:
A una mascota: Si te mantienes quieto te dejo libre. Si esta mascota se mantiene quieta, estar
libre.
A un hijo: Si apruebas matemticas, te llevo de vacaciones. Si aprueba matemticas se ir de
vacaciones.
A un empleado: Para ascender de puesto debe lograr un total de venta de ms de 1,000
unidades. Si vende ms de lo solicitado ser ascendido, por el contrario si vende menos se
quedar en el mismo puesto.
A un ciudadano: solo puede votar si tiene credencial de elector. Si tiene credencial votar, sino
tiene entonces tendr que abstenerse.

Como puede observar en cada ejemplo el resultado por realizar, depende de que se cumpla o no la
condicin.

Smbolo del Condicional Simple en DFD
Dentro del rombo se pone la condicin
que se desea evaluar y de un lado del
rombo la opcin SI indica que se cumple
la condicin y despus debe de poner las
instrucciones necesarias, del otro lado con
la opcin NO se considera lo mismo.
Se termina con un crculo como conector
y de ah se contina con el programa.

IMPORTANTE:
Recuerde que aunque se programan las dos opciones de la condicin, solamente se realiza una
opcin a la vez.


CONDICIN if
El enunciado If evala una condicin y dirige el flujo del programa hacia dos opciones diferentes,
dependiendo del resultado de la evaluacin.

condicin
Instrucciones a realizar cuando se
cumple la condicin.
si
Revisemos la opcin SI, es decir cuando se cumple la Condicin:
En el Diagrama es la opcin SI:

En Lenguaje C, se representa:
if (condicion)
{
/* los enunciados a
realizar cuando se
cumple la condicin*/
enunciado 1;
. . .
enunciado n;
}

Ejemplo:
if (x==2)
{
printf( Par);
}

IMPORTANTE:
En Lenguaje C:
El enunciado if no requiere el terminador punto y coma, si se pone en el enunciado if,
estar indicando que ha terminado ese enunciado y los de abajo no es parte del primero y eso
es incorrecto.
Cuando se trata de un solo enunciado, no es necesario las llaves. Cuando se trata de varios
enunciados (un bloque), es necesario poner las llaves de inicio y fin, de lo contrario solo se ejecutar
el primer enunciado despus del if.

El siguiente cdigo ilustra el uso incorrecto del if:
if (x==2); /* Incorrecto aqu no debe poner punto y coma */
printf( Par); /*par se imprimir se cumpla o no la condicin */

Al terminar el bloque del enunciado if, la ejecucin del programa contina en la lnea de cdigo
posterior al enunciado o bloque perteneciente al enunciado if.

CDIGO de Ejemplos
Diagrama de Flujo y Programa que solicita una clave y lo
compara con un valor asignado en el cdigo.
#include <stdio.h>
#include <conio.h>
int usuario;
/*Este programa Simula una clave de acceso */
Void main()
{
clave=13406;
printf("Introduce tu clave: ");
scanf("%d",&usuario);
if(usuario==clave)
printf("Acceso permitido"); /*solo si la clave es igual*/
getch( );
}

Resultado:
Si la clave tecleada es igual a la asignada en la variable usuario se imprime el mensaje Acceso
Permitido. El enunciado getch(), esta fuera del enunciado if.
Inicio
usuario
usuario==clave
Acceso
Permitido

Fin
Clave=134
06
SI NO

CDIGO de Ejemplos
Diagrama de Flujo y Programa que solicita 2 valores
enteros y determina si son iguales o cual es mayor.
#include <stdio.h>
#include <conio.h>
int num1, num2;
void main()
{
clrscr();
printf("Teclea un valor entero: ");
scanf("%i",&n1);
printf("Teclea otro nmero entero: ");
scanf("%i",&n2);
if (n1==n2)
printf("%i es igual a %i",n1,n2);
if (n1>n2)
printf("%i es mayor que %i",n1,n2);
if (num1<num2)
printf("%i es mayor que %i",n2,n1);
getch();
}


Resultado:
En este programa se tienen 3 enunciados if, el primero pregunta si
los 2 nmeros tecleados son iguales, si se cumple la condicin se
imprime el mensaje. Luego pasa el control al siguiente if se
cumpla o no la condicin y evala si el primer nmero es mayor,
y finalmente evala la ltima condicin, independiente de las
anteriores.


MUY IMPORTANTE:
Cuando el If tiene un solo enunciado que ejecutar, puede omitir las llaves, ten cuidado y si
esto te confunde sigue utilizando las llaves de forma normal.


LA CLUSULA else
Observa que si se cumple la primera condicin no es necesario evaluar la segunda y si se cumple la
segunda, pues no tiene caso evaluar la tercera. Por ahora el programa es ineficiente. Para mejorar el
cdigo es necesario, la clausula else:







Fin
n1<n2
n2Es
mayor
SI
Inicio
n1, n2
n1==n2
n1, n2Son
iguales
n10, n2
0
n1>n2
n1 es
mayor
SI
SI
NO
NO
NO
NO
SI
n1==n2
Son
iguales
n1>n2
n1 es
mayor
SI NO
n2Es
mayor

Fin
Inicio
n1, n2
n10, n2
0
condicin
no
Instrucciones a realizar cuando
NO se cumple la condicin.



CDIGO de Ejemplo
1.- Diagrama de Flujo y Programa que solicita 2 nmeros y determina si son iguales o cual
es el mayor, con la clausula else.
#include <stdio.h>
#include <conio.h>
int num1, num2;
void main()
{
clrscr();
printf("Teclea un # entero: ");
scanf("%i",&n1);
printf("Teclea otro # entero: ");
scanf("%i",&n2);
if (n1==n2)
printf("son iguales");
else
{
if (n1>n2)
printf otro("%i es mayor",n1);
else
printf("%i es mayor",n2);
}
getch();
}


Resultado:
En este programa se tienen solo 2 enunciados if, el primero pregunta SI los 2 nmeros tecleados son
iguales, SI se cumple la condicin se imprime el mensaje son iguales. La otra condicin if pregunta SI
el primer nmero es mayor que el segundo; SI se cumple la condicin se imprime el primer nmero es
mayor, y SINO se imprime el segundo es mayor.





En el Diagrama es la opcin No: En Lenguaje C, se representa:
if (condicion)
{
/*se cumple la
condicin*/
}
else
{
/*Cuando no se cumple
la condicin*/
}
Ejemplo:
if (x==2)
{
printf( Par);
}
else
{
printf( Impar);
}

2.- Con la clusula else, el ejemplo de clave quedara as:
#include <stdio.h>
#include <conio.h>
int usuario;
void main()
{
clrscr( );
clave=134;
printf("Introduce tu clave: ");
scanf("%d",&usuario);
if(usuario==clave)
printf("Acceso permitido");
else
printf("clave incorrecta");
getch( );
}


Resultado:
En este caso se mostrar uno de los 2 mensajes, no los dos a la vez. Si se cumple la condicin se
mostrar el mensaje Acceso Permitido y luego el control del programa se pasar al enunciado
getch(), sino se cumple la condicin se mostrar el mensaje Acceso Denegado.

Le dar un ejemplo completo utilizando la funcin if, etiquetas, el enunciado goto, la condicin if y la
clausula else:

CDIGO de Ejemplo
Hacer un programa en C, que solicite un nmero al usuario, tratando de adivinar el nmero
asignado en el programa. Si el usuario adivina se mostrar el mensaje ADIVINASTE, en
caso contrario pedir otro numero. El programa termina hasta que el usuario adivine.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> /*para usar exit*/
int num, asignado;
void main()
{
clrscr();
asignado=9;
solicitud:
printf("Adivina el numero esta entre 1 y 10: ");
scanf("%i",&num);
if(num==asignado)
{
printf("ADIVINASTE");
getch(); exit(1);
}
else
goto solicitud;
}


Inicio
usuario
usuario==clave
Acceso
Permitido

Fin
Clave=134
06
SI NO
Clave
incorrecta

SI NO
Inicio
num
num==asignado
Adivinaste

Fin
Asignado13, num0
Solicitud:
salir()
Ir a solicitud:
Resultado:
Se pedir un nmero al usuario mientras no sea el 9, le pedir otro nmero. Cuando sea 9 se mostrar el
mensaje adivinaste y se termina el programa.
Adivina el numero esta entre 1 y 10: 5
Adivina el numero esta entre 1 y 10: 3
Adivina el numero esta entre 1 y 10: 7
Adivina el numero esta entre 1 y 10: 9
ADIVINASTE


ACTIVIDAD INDIVIDUAL 13.
Realiza lo que se solicita en cada inciso.

I.- Escribe en las lneas, lo que se hace en cada una de las lneas de cdigo. Es el programa que
solicita un nmero entero y determine si es positivo o negativo.
#include <stdio.h> _________________________________________
_________________________________________
#include <conio.h> _________________________________________
_________________________________________
int num,residuo; _________________________________________
_________________________________________
void main() _________________________________________
_________________________________________
{ _________________________________________
_________________________________________
clrscr(); _________________________________________
_________________________________________
printf("Teclea un nmero entero: "); ______________________
_________________________________________
scanf("%i",&num); _________________________________________
_________________________________________
if (num>0) _________________________________________________
_________________________________________
printf("%i es Positivo",num); ____________________________
_________________________________________
Else _________________________________________
_________________________________________
printf("%i es Negativo",num); _____________________________
_________________________________________
getch(); _________________________________________
_________________________________________
} _________________________________________

II.- Encuentra en el siguiente cdigo algo incorrecto y escribe en el espacio de la izquierda, de
que se trata. Es el programa que solicita un nmero entero y determine si es par o impar.
#include <stdio.h>
#include <conio.h>
int num,residuo;
void main()
{
clrscr();
printf("Teclea un nmero entero: ");
scanf("%i",num);
residuo=num/2;
if (residuo=0)
printf("%i es par",);
else
printf("%c es Impar"num);
getch();
}


III.- Realiza la prueba de Escritorio, con los valores indicados y determina que valor toma cada
variable involucrada y que resultado se imprime. Este es el cdigo para un programa que calcula
el sueldo semanal de un empleado considerando que sus horas extras se pagan al doble, las horas
normales a la semana son 40.

#include <stdio.h>
#include <conio.h>
int horast;
float he, normal, sueldo, pagoxh;
void main()
{
clrscr();
printf("cuanto ganas por hora: ");
scanf("%f",&pagoxh);
printf("cuantas horas trabajaste: ");
scanf("%i",&horast);
if(horast>40)
{
he=(horast-40) * pagoxh*2;
normal=40 *pagoxh;
sueldo=he+normal;
}
else
sueldo=horast*pagoxh;
printf("%.2f",sueldo);
getch();
}





Pagoxh=70


Horast=38


He=

Normal=

Sueldo=

Se
imprime:





Pagoxh=50


Horast=43


He=

Normal=

Sueldo=

Se
imprime:





Pagoxh=90


Horast=41


He=

Normal=

Sueldo=

Se imprime:



V.- Realice los ejercicios indicados al principio del tema como ejemplos de la vida real.
a) Hacer un programa que solicite la calificacin de una materia y si la calificacin es aprobatoria,
imprimir el mensaje Felicidades, te mereces unas vacaciones. En caso contrario mostrar el
mensaje Lo siento, te quedas a estudiar
b) Hacer un programa que solicite el total de ventas de un empleado y si es mayor de 1,000 unidades
imprimir el mensaje Sers ascendido por tus ventas, sino es mayor el total de ventas, mostrar el
mensaje Sigue adelante con tus ventas.
c) Hacer un programa que solicite si un ciudadano tiene credencial de elector, que acepte la respuesta
con una letra s n y muestre un mensaje indicando si puede o no votar.

IV.- Basado en l siguiente diagrama, realiza el cdigo en lenguaje C, en la columna de la izquierda.
Programa que solicita la edad de una persona e imprime si es mayor de edad o todava no lo es.






































Anota todas tus observaciones y dudas del tema y comntalas con tus compaeros y el docente.









Inicio
edad
Edad>17
Es
Mayor
Todava
es Menor
Fin
si no
Inicio
e
e>17 && e<36
Cumples
requisito

Fin
e0
SI NO
No estas
en edad
Inicio
n
n>0 && n<101
Muy
Bien
Fin
n0
SI NO
Error no
vlido
Estructura if con condicin compuesta
En algunas ocasiones es necesario cumplir con dos condiciones o con una de dos. Algunas situaciones
cotidianas de este tipo pueden ser:
Aprobar historia y matemticas.
Limpiar tu cuarto o pasear al perro.

IMPORTANTE
Para lograr una condicin compuesta requiere de los operadores lgicos &&(y) y ||(o) .


CODIGO DE EJEMPLO:
1.- Hacer un programa que solicite la edad de un
aspirante a un empleo y determinar si cumple con el
requisito de edad requerido entre 18 a 35 aos.
#include <stdio.h>
#include <conio.h>
int edad;
void main()
{
clrscr();
printf("Escribe tu edad: ");
scanf("%i",&edad);
if(edad>17 && edad<36)
printf("cumples el requisito para
trabajar");
else
printf("no estas en edad para este trabajo");
getch();
}
Resultado:
Este programa imprime el mensaje: "cumples el requisito para trabajar", solamente cuando la edad tecleada
este entre 18 y 40. Es necesario que se cumplan las dos condiciones que se mayor de 17 y menor o igual a 40. En
caso contrario se imprime el mensaje: no estas en disponibilidad para este trabajo

2.- Hacer un programa que solicite un nmero entre 1 y 100,
Validando esta condicin para que cuando se escriba otro
nmero se muestre el mensaje de que es un nmero no vlido.
#include <stdio.h>
#include <conio.h>
int num;
void main()
{
clrscr();
printf("Escribe un numero del 1 al 100: ");
scanf("%i",&num);
if(num>0 && num<101)
printf("Muy bien");
else
printf("Error: Este nmero No es
vlido");
getch();
}
Resultado:
Este programa solo acepta nmeros entre 1y 100, si se pone otro numero se indicar un mensaje de error.


EJERCICIO INDIVIDUAL 3
Realiza el cdigo de los siguientes problemas, en Lenguaje C.
1. Programa que solicite un nmero y determine si es mltiplo de 3. Indicar con un mensaje en
pantalla.
2. Considerando que un triangulo rectngulo tiene un ngulo de 90, hacer un programa que solicite
las medidas de los 3 ngulos y mostrar si es equiltero o no.
3. Programa que solicite un nmero entero cuya condicin es que no exceda de 4 dgitos. Si el
nmero se excede mostrar en pantalla un mensaje.
4. Hacer un programa que solicite la edad de 3 personas y muestre la posicin del menor.
5. Escribe un programa para una papelera, que solicite el total a pagar de tiles comprados, y
considerando un descuento del 5% para los que compren entre 100 y 300 pesos y 10% para las
compras mayores a 300, calcule el importe a pagar.
6. Solicita la cantidad de compra de una persona y determina cuanto pagar considerando un
descuento que le van a hacer sobre el total de compra; si fue entre $1000 y $2000 se realiza un
descuento de 100 pesos y si fue entre $2001y $3000 un descuento de 200 pesos.
7. Programa en C que solicite las caractersticas de un celular y determine cual es su clasificacin
segn los servicios con los que cuenta: si tiene mensajes y llamadas es bsico, si adems tiene
cmara, bluetooh, reproductor de mp3 es moderno y si tambin tiene internet y TV es 3G.


Estructuras anidadas

Anidar una estructura de control significa poner una o ms estructuras dentro de otra para
mejorar la funcionalidad de los programas.



EJEMPLO
1.- Vamos a utilizar este concepto para mejorar el programa de mayor o menor; con un if
anidado:
El siguiente programa evala la primera condicin, si se cumple ya no pasa por los otros dos,
ejecutando el enunciado getch( );. Si no se cumple, mediante el uso de la clusula else se ejecutan otros
enunciados. Entre esos enunciados se encuentra otra condicin, la cual pregunta si el primer nmero es
mayor: si se cumple se muestra el mensaje indicando que es mayor y se pasa el control el enunciado
getch();. Si no se cumple entonces, necesariamente ser mayor el otro nmero y ese mensaje se deber
mostrar.


Fin
Inicio
n1, n2
n1==n2
Son
iguales
n10, n2
0
n1>n2
n1 es
mayor
SI
SI
NO
NO
n2Es
mayor

Inicio
n
Asignado9, n0
Solicitud:
Error no
vlido
SI
NO
n>0 && n<=10
Fin
SI NO
n==asignado
Adivinaste

salir()
Ir a solicitud:
CDIGO del Ejemplo
#include <stdio.h>
#include <conio.h>
int n1, n2;
void main()
{
clrscr();
printf("Teclea un #: ");
scanf("%i",&n1);
printf("Teclea otro #: ");
scanf("%i",&n2);
if (n1==n2)
printf("son iguales");
else
{
if (n1>n2)
printf otro("%i es mayor",n1);
else
printf("%i es mayor",n2);
}
getch();
}

2.- Con los if anidados es posible optimizar los programas. Haremos lo propio con el programa de
adivinar un nmero y el que solo acepta nmeros entre 1 y 100.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> /*para usar exit*/
int num, asignado;
void main()
{
clrscr();
asignado=9;
solicitud:
printf("Adivina el numero esta entre 1 y 10: ");
scanf("%i",&n);
if(n>0 && n<=10)
{
if(n==asignado)
{
printf("ADIVINASTE");
getch();
exit(1);
}
else
goto solicitud;
}
else
printf(numero no vlido);
getch();
}
Resultado:
Este programa vlida la condicin de aceptar nicamente nmeros entre 1 y 10, si se cumple la
condicin se comprobar si ha adivinado el nmero en caso contrario el programa muestra un mensaje
y termina.


3.- Programa que muestra un men y luego solicite al usuario 2 nmeros y que operacin quiere
realizar. Incluir una opcin para salir. Validar que se puedan elegir solo las opciones del 1 al 5. Se
requiere imprimir el resultado de la opcin elegida.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int opcion,n1,n2;
float result;
void main()
{
Solicitar:
clrscr();
printf("Men:\n1.- Suma\n2.- Resta\n3.- Multi\n4.- Divi\n5.- Salir\n");
printf("elige una opcin: ");
scanf("%i",&opcion);
if (opcion<1 || opcion>5)
{
printf("Solo se aceptan nmeros entre 1 y 4.\n elija otra opcin");
getch();
goto solicitar;
}
else
{
if (opcion==5)
{
printf("Eligio salir");
getch();
exit(1);
}
else
{
printf("Escribe el primer nmero: "); scanf("%i",&n1);
printf("Escribe el segundo nmero: "); scanf("%i",&n2);
if (opcion==1)
resultado=n1+n2;
if (opcion==2)
resultado=n1-n2;
if (opcion==3)
resultado=n1*n2;
if(opcion==4)
resultado=n1/n2;
printf("%.2f",resultado); /*Este Enunciado No es parte del If*/
}
}
getch();
}

Resultado:
Men:
1.- Suma
2.- Resta
3.- Multi
4.- Divi
5.- Salir
Elige una opcin:
Si la opcin elegida, esta fuera del rango de nmeros aceptados (1 a 5), el programa muestra el mensaje
de aviso y se pide otra opcin. Si la opcin elegida es 5, se muestra el mensaje de salida y se termina el
programa. Solamente si elige una opcin entre 1 y 4 solicitar 2 nmeros para realizar la operacin
indicada.

EJERCICIO INDIVIDUAL 4
Realiza el diagrama de Flujo y Programa en C, de los siguientes problemas.
1. Solicitar las edades de 3 hermanos y determinar en que posicin fue tecleado el intermedio.
Ejemplo: 7, 21 y 15: el intermedio se tecle en tercer lugar.
2. Solicitar el da y mes de nacimiento de una persona e imprimir su signo Zodiacal. Verificar da
vlido del 1 al 31 y mes del 1 al 12.
3. Solicitar una cantidad en pesos y comprobar que no exceda de 3 dgitos, si no excede mostrar la cantidad
con letras, si excede mostrar un mensaje de error.


CONDICIONAL MLTIPLE
El condicional mltiple permite evaluar una condicin y elegir una opcin entre varias disponibles.

Por ejemplo, para beber en el desayuno se puede preguntar: quieres caf, chocolate o jugo?. En este
ejemplo, se presentan tres opciones de las cuales puede elegir una.

En lenguaje C, se utiliza el enunciado switch para el condicional mltiple. Y son idneos para el uso de
mens como el del ejemplo anterior hecho con if.

El smbolo a utilizar en diagrama de flujo para el condicional mltiple es:
















Plantilla 1 Plantilla 2 Plantilla 3 Plantilla n Ninguno
Enunciados
cuando se
cumple la
plantilla 1
Enunciados
cuando se
cumple la
plantilla 2
Enunciados
cuando se
cumple la
plantilla 3
Enunciados
cuando se
cumple la
plantilla n
Enunciados
cuando no
se cumple
ninguna
plantilla
expresion

EJEMPLO


















Antes de tratar el condicional mltiple en C, es importante que conozca el enunciado Break

Enunciado break
Se utiliza en el interior de un ciclo o de un enunciado switch para detener la ejecucin de
estos, es decir, terminar el ciclo o el enunciado switch, haciendo que la ejecucin pase a
la siguiente instruccin despus de la llave que cierra el ciclo o el switch.


Enunciado switch
Es el enunciado de control ms flexible del lenguaje C, ya que permite que el programa
pueda ejecutar diferentes enunciados o bloques basado en una expresin que puede tener
ms de dos valores.

La forma general del enunciado switch es la siguiente:
switch (variable)
{
case valor1_de_variable:
{
Enunciado o bloque; break;
}
case valor2_de_variable:
{
Enunciado o bloque; break;
}
. . ./*esto indica que puede poner todos los case necesarios*/
default:
{
Enunciado o bloque; /*cuando no es ninguna de las opciones planteadas*/
}
} /*fin del switch*/
n1, n2
1.- Suma
2.- Resta
3.- Multi
4.- Divi
5.- Salir
opcion
1 2 3 4
Ninguno
r=n1+n2 r=n1-n2 r=n1+n2 r=n1+n2 r=n1+n2 salir()
5
r
La variable de control debe de evaluar a un valor entero, es decir, los tipos int, long y char. El
enunciado switch evala la variable y compara el valor con las plantillas de cada etiqueta, y luego:
Si la variable es igual a alguna de las plantillas la ejecucin pasa al enunciado que esta a
continuacin de la etiqueta case.
Si la variable no es igual a ninguna de las plantillas, la ejecucin pasa a la etiqueta opcional default.
Si la variable no es igual a ninguna de las plantillas y no se utiliza la etiqueta default, la ejecucin
pasa al primer enunciado que despus de la llave que cierra el enunciado switch.

CDIGO de Ejemplo
El ejemplo del men realizado con if se puede realizar, optimo, con el enunciado switch:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int opcion;
main()
{
solicitar:
clrscr();
printf("Menu:\n1.-Suma\n2.-Resta\n3.-Multi\n4.-Divi\n5.-Salir\n");
printf("elige una opcin: ");
scanf("%i",&opcion);
switch (opcion)
{
case 1:
{
resultado=n1+n2; break;
}
case 2:
{
resultado=n1+n2; break;
}
case 3:
{
resultado=n1+n2; break;
}
case 4:
{
resultado=n1+n2; break;
}
case 5:
{
printf(Elegiste salir);
getch(); exit();
}
default:
{
printf("Solo se aceptan nmeros entre 1 y 5.");
getch();
goto solicitar;
}
}
getch();
} /* fin del main */

Como puede ver el enunciado switch permite mltiples ramificaciones con una sola expresin o
variable, por lo tanto es ms eficiente y fcil que el uso de if anidados. En el ejemplo anterior se
utilizan algunos conceptos ya vistos, como son el uso del break, exit y las etiquetas.

Hay dos cosas que vale la pena mencionar para dejar ms claro el ejemplo:
Si se omite el enunciado break en cada case, se ejecutarn todos los case que se encuentren
despus de la plantilla que coincida con la opcin elegida por el usuario, es decir, si el usuario
pulsa la opcin tres y el programa no tiene enunciados break, se ejecutarn los enunciados de
los case 3, 4 y 5. El default (en este programa), no se ejecutar debido a que al pasar por el case
5 se encuentra con la funcin exit() y se termina el programa.
El enunciado goto se encuentra en la parte del default, y lo que sucede es lo siguiente: si el
usuario elige una opcin fuera del rango de opciones vlidas (1 a 5), se le mostrar un mensaje
indicando las opciones aceptables, luego con getch() se espera que pulse una tecla y luego el
enunciado goto enva a la etiqueta llamada solicitar que se encuentra al principio del programa
para que repita el programa. Esto se puede hacer mejor con un ciclo while o do while.

EJERCICIO INDIVIDUAL 5
Realiza el diagrama de Flujo y Programa en C, de los siguientes problemas.
1. Mostrar un men con las siguientes fechas, pedir al usuario que elija la opcin que corresponda a su fecha
de nacimiento e imprima en pantalla el signo Zodiacal que corresponda a esa fecha.
1. 21 de marzo-20 de abril
2. 21 de abril-20 de mayo
3. 21 de mayo-21 de junio
4. 22 de junio-22 de julio
5. 23 de julio-23 de agosto
6. 24 de agosto-23 de septiemb
7. 24 de septiembre-23 de octu
8. 24 de octubre-22 de noviem
9. 23 de noviembre-21 de dicie
10. 22 de diciembre-20 de enero
11. 21 de enero-19 de febrero
12. 20 de febrero-20 de marzo

2. Elegir un nmero del 1 al 7 e imprimir el nombre del da correspondiente a ese nmero.
3. Hacer un men que muestre un men con los nombres de diferentes figuras geomtricas y que al elegir
una de ellas, solicite los datos necesarios y halle el rea correspondiente a esa figura.
4. Mostrar el men al usuario y realizar lo correspondiente para simular un cajero automtico. Se puede
inicial con un saldo de $1000.
1. Deposito
2. Retiro
3. Consultar saldo
4. Salir




ESTRUCTURAS REPETITIVAS O ITERATIVAS
Una estructura de control Repetitiva indica que la ejecucin de los enunciados que estn
dentro de la estructura, se van a realizar un determinado nmero de veces. Es decir, se van
a repetir varias veces.

Puedes ayudar al Gusanito de esta historia a calcular los minutos que tardar en subir una pared de 10
metros de alto, considerando lo siguiente:
Por cada metro se tarda una hora.
Por cada metro que logra subir descansa 5 minutos ms que en el descanso anterior.
Una pista: no son 875 minutos.

Anota tus ideas para Resolver el problema del Gusanito.











Es momento de aprender los enunciados iterativos o mejor conocidos como ciclos, y estos son: for,
while y do...while.


El ciclo for
El ciclo for ejecuta un bloque de uno o ms enunciados, una determinada cantidad de
veces. Este ciclo es utilizado cuando se conoce con anterioridad el nmero de iteraciones
(vueltas) que se requieren.


La manera de representarlo en los Diagramas de Flujo de Datos es:












COMO HACER EL CICLO FOR

1. Dentro del hexgono se pone el inicio y el fin de las vueltas que se van a realizar, e
igualmente se establece cuanto se debe de avanzar en cada vuelta. Cuando no se especifica
incremento el programa interpreta que debe avanzar de 1 en 1.
2. Dentro de la estructura es posible poner cualquier elemento de los Diagramas de Flujo de
Datos, incluso otro for, tal como lo hiciste con los If anidados.
3. Al terminar el ciclo, el control del programa, pasa a la instruccin despus de la estructura
repetitiva.

En Lenguaje C, un enunciado for tiene la siguiente estructura:
for(inicio; fin; incremento)
{
enunciado o bloque que se van a repetir;
}

X=0 to 50, 2
Todas las
instrucciones que se
van a repetir

IMPORTANTE
inicio, fin e incremento son expresiones de C, que actan sobre una variable llamada
Variable de Control.
Observe que al terminar el parntesis del for no lleva punto y coma. Y al igual que el if, si
dentro del ciclo solo tiene un enunciado; no son necesarias las llaves.


EJEMPLO:

for(n=1; n<=5; n++)
{
printf(He dado %i Vueltas\n,n);
}



Resultado:
He dado 1 vueltas
He dado 2 vueltas
He dado 3 vueltas
He dado 4 vueltas
He dado 5 vueltas
Como puedes observar con una sola lnea de cdigo, dentro de un ciclo for, se puede imprimir varias
veces algo similar, adems en este ejemplo se aprecia como el valor de la variable de control se
incrementa en cada vuelta del 1 al 5.



Programa de EJEMPLO:
Este programa imprime los primeros veinte nmeros enteros.

#include<stdio.h>
#include<conio.h>
int entero;
void main()
{
clrscr();
/* inicio; condicin; incremento */
for(entero=1; entero<=20; entero++)
/* la variable de control es entero */
printf("%i\n",entero);
/*no requiere llaves, es un solo enunciado*/
getch(); /* este enunciado esta fuera del for */
}



n=1 to 5
He dado n
vueltas
entero=1 to 20
entero
inicio
inicio


COMO FUNCIONA EL CICLO FOR

4. La expresin inicio es evaluada. Inicio por lo general es una expresin de asignacin que
pone la variable de control a un valor determinado. En el ejemplo entero es la variable de
control, se inicia con el valor de 1.
5. La expresin fin es evaluada. La condicin es una expresin relacional que indica el
nmero de vueltas que dar el ciclo. En el ejemplo el ciclo se repetir mientras que la
variable de control sea menor o igual a 20.
La condicin fin es evaluada en cada vuelta y puede suceder una de los 2 casos
siguientes:
a) Si la condicin si cumple se ejecutan los enunciados que se encuentran dentro del
ciclo. En el ejemplo se imprime el valor que tenga la variable entero.
b) Cuando la condicin es falsa el ciclo termina. En el ejemplo ser falsa cuando entero
sea 21.
6. La expresin de incremento es aumentada en cada vuelta, luego pasa el control al paso 2
y repite los procesos. En el ejemplo se utiliza un operador unario de incremento que
aumenta en uno la variable de control, es equivalente a escribir: entero = entero +1.



Hay muchas situaciones en las que se puede usar el ciclo for. Veamos algunos ejemplos.


Programa y DFD de EJEMPLO:
Generar los siguientes 10 elementos de la sucesin:
3 7 11 ___ ___ ___ ___ ___ ___ ___ ___ ___ ___

#include<stdio.h>
#include<conio.h>
int x,n1,n2,d,ns;
void main()
{
clrscr();
printf("%i \n %i",n1,n2);
d=n2-n1
for(x=1;x<=11;x++)
{
ns=n2+d
printf("\n%i",ns);
}
getch();
}




Resultado:
3 7 11 15 19 23 27 31 35 39 43 47 51

Inicio
n1 3
n27



n1,n2
x=1 to 11
d= n2-n1


ns
Fin
ns=n2+d

CDIGO de Ejemplo
1. Imprimir los nmeros impares comprendidos entre el 1 y 50.
#include<stdio.h>
#include<conio.h>
int impar;
void main()
{
clrscr();
for(impar=1; impar<=50; impar+=2) /*aumenta de 2 en 2*/
printf("%i\n",impar);
getch();
}
Resultado:
1
3
5

47
49

2. Para calcular el promedio de un alumno con 8 calificaciones.
#include<stdio.h>
#include<conio.h>
int x; float cal, prom,suma;
void main()
{
clrscr();
for(x=1;x<=8;x++)
{
printf("Teclea la calificicacin %i: ",x);
scanf("%f",&cal);
suma=suma+cal;
}
prom=suma/8;
printf("Promedio: \n%.2f",prom);
getch();
}
Resultado:
Teclea la calificacin 1: 8
Teclea la calificacin 2: 9
Teclea la calificacin 3: 8
Teclea la calificacin 4: 9
Teclea la calificacin 5: 9
Teclea la calificacin 6: 10
Teclea la calificacin 7: 10
Teclea la calificacin 8: 7
Promedio: 8.75

3. Para Imprimir el cdigo ASCII. Recuerde que el cdigo ASCII son todos los smbolos del teclado,
que pueden escribirse con la tecla Alt y un nmero del 0 al 255.
#include<stdio.h>
#include<conio.h>
short int ascii; /*entero Corto*/
void main()
{
clrscr();
for(ascii=0;ascii<=255;ascii++)
{
printf("%i__%c ",ascii,ascii);
}
getch();
}
Resultado: solo se han puesto unas muestras del cdigo, en realidad se muestran los 256.
1__ 2__ 3__ 4__ 5__ 6__ 7__
64__@ 65__A 66__B 67__C 68__D 69___E 70__F
97__a 98__b 99__c 100__d 101__e 102__f


4. Este ejemplo solicita las ventas mensuales de una tiendita y proporciona la suma total.
#include<stdio.h>
#include<conio.h>
int numes; float ventas, total;
void main()
{
clrscr();
for(numes=1;numes<=12;numes++)
{
printf("Teclea la venta del mes %i: ",numes);
scanf("%f",&ventas);
total=total+ventas;
}
printf("Venta Anual: %.2f",total);
getch();
}
Resultado:
Teclea la venta del mes 1: 100
Teclea la venta del mes 2: 100
Teclea la venta del mes 3: 100

Teclea la venta del mes 8: 100
Teclea la venta del mes 9: 100
Teclea la venta del mes 10: 100
Teclea la venta del mes 11: 100
Teclea la venta del mes 12: 150
Venta Anual= 1250

Inicio
n


x-
x=n, x>=1, x--
Rn mod x-1


r=0
Fin
Hacer un programa que imprima todos los divisores de un
nmero solicitado al usuario, sin considerar a l mismo.
#include<stdio.h>
#include<conio.h>
int n, x, r;
void main()
{
clrscr();
printf("Teclea el numero: ");
scanf("%i",&n);
for(x=n;x>=1;n--)
{
r=n%(x-1);
if(r==0)
printf(%i \t,x-1);
}
getch();
}



Se puede seguir dando ms ejemplos, tantos como lo requieran las distintas problemticas que se
deseen resolver... te corresponde aplicar correctamente esta estructura de control.


ACTIVIDAD INDIVIDUAL 14
Realiza el Diagrama de flujo de datos y cdigo en Lenguaje C, de los siguientes problemas.
1. Leer 20 nmeros e imprimir cuantos son positivos, cuantos negativos y cuantos neutros.
2. Leer 15 nmeros negativos y convertirlos a positivos e imprimir dichos nmeros.
3. Leer las 40 calificaciones de un grupo de alumnos e imprimir la calificacin ms alta y la
calificacin ms baja de todo el grupo.
4. Calcular e imprimir la tabla de multiplicar de un nmero cualquiera proporcionado por el usuario.
Imprimir el multiplicando, el multiplicador y el producto de la siguiente forma:
7 x 1 = 7
7 x 2 = 14 /* hasta el 10.*/
5. Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de inters. Cual ser la
cantidad de dinero que esta persona tendr al cabo de un ao si la ganancia de cada mes es
reinvertida?
6. Imprimir un triangulo de asteriscos de las siguientes formas. * *****
** ****
*** ***
**** **
***** *
CICLOS ANIDADOS

IMPORTANTE
Los ciclos for al igual que cualquier estructura, se pueden anidar. Recuerde que anidar se
refiere a poner un ciclo dentro de otro.


EJEMPLO
El ejemplo de las calificaciones, servirn para los ciclos anidados. En este programa se
solicitan las calificaciones de 20 alumnos, con 8 calificaciones cada uno.
#include<stdio.h>
#include<conio.h>
int x;
float cal, prom, suma;
void main()
{
clrscr();
for(x=1;x<=20;x++)
{
for(y=1;y<=8;y++)
printf("Teclea la calificacin %i del alumno %i: ",y,X);
scanf("%f",&cal);
suma=suma+cal;
}
prom=suma/8;
printf("\n%.2f",prom);
}
getch();
}


EJERCICIO INDIVIDUAL 6
Realiza el diagrama de Flujo y Programa en C, de los siguientes problemas.
1. Simular el comportamiento de un reloj digital, imprimiendo la hora, minutos y segundos de un
da desde las 0:00:00 horas hasta las 23:59:59 horas. No tiene que tardar el tiempo real.
2. Una persona debe realizar un muestreo con 50 personas para determinar el promedio de peso de
los nios, jvenes, adultos y viejos que existen en su zona habitacional. Se determinan las
categoras con base en la sig, tabla:
CATEGORIA EDAD
Nios 0 - 12
Jvenes 13 - 29
Adultos 30 - 59
Viejos 60 en adelante
3. Al cerrar un expendio de naranjas, 15 clientes que aun no han pagado recibirn un 15% de
descuento si compran ms de 10 kilos. Determinar cuanto pagara cada cliente y cuanto percibir
la tienda por esas compras.
4. En un centro de verificacin de automviles se desea saber el promedio de puntos contaminantes
de los primeros 25 automviles que lleguen. Asimismo se desea saber los puntos contaminantes
del carro que menos contamino y del que ms contamino.
5. Un Zologo pretende determinar el porcentaje de animales que hay en las siguientes tres
categoras de edades: de 0 a 1 ao, de ms de 1 ao y menos de 3 y de 3 o ms aos. El
zoolgico todava no esta seguro del animal que va a estudiar. Si se decide por elefantes solo
tomara una muestra de 20 de ellos; si se decide por las jirafas, tomara 15 muestras, y si son
chimpancs tomara 40.



EL CICLO WHILE
El ciclo while repite un bloque de enunciados mientras una condicin especfica sea cierta,
es decir, mientras se cumpla la condicin. Es til cuando se desconoce el nmero de
vueltas requeridas.

La salida del ciclo se puede inducir cuestionando al usuario para saber si desea repetir el proceso que se
encuentra dentro del cuerpo del ciclo o generando alguna operacin que haga cumplir la condicin.

El ciclo while tiene la siguiente forma:
while (condicin) /* La condicin es cualquier expresin de C.*/
{
bloque /* dentro de las llaves va el cuerpo del ciclo (todo lo que se va a repetir) */
}

La manera de representarlo en los Diagramas de Flujo de Datos es:













COMO FUNCIONA EL CICLO WHILE

1. Se evala la condicin
2. Si la condicin es falsa (no se cumple), el enunciado while termina y la ejecucin
pasa al siguiente enunciado despus de la llave que indica el fin del ciclo.
3. Si la condicin es verdadera (se cumple) se ejecutan los enunciados del ciclo, los
que estn dentro de las llaves.
4. La ejecucin regresa al paso 1. Y se repite hasta que en algn momento ya no se
cumple la condicin.




EJEMPLOS:
1. Imprimir los nmeros del 1 al 10.
El siguiente ejemplo sera optimo con el ciclo for, pues se conoce el numero de vueltas. Pero servir
para mostrar el funcionamiento del ciclo While.

En el ejemplo la condicin es que la variable cont debe de ser menor o igual a 10. Observe algo muy
importante la variable cont es inicializada en 1.
Todas las
instrucciones que se
van a repetir
Condicin

IMPORTANTE
En el ciclo while es necesario inicializar la variable de la condicin con un valor que cumpla
la condicin para que se puede ejecutar el ciclo por la menos una vez.

Imagina que el valor de inicio de la variable cont fuera 20 la condicin no se cumplira y el ciclo no se
va a ejecutar ni una vez. Algo ms que debe de saber es que dentro del ciclo el valor de cont se
incrementa en uno con el operador de incremento. Esto hace que la condicin puede dejar de cumplirse
en algn momento. Sin esta lnea de cdigo el ciclo sera infinito, es decir, se repetir sin terminar.
#include <stdio.h>
#include <conio.h>
int cont;
main()
{
clrscr();
cont=1;
while(cont<=10)
{
printf("%i \n",cont);
cont++;
}
getch();
}
Resultado
Impresin en pantalla de los primeros 10 nmeros
enteros. Ya que comienza en 1 termina en 10 y aumenta
de 1 en 1...
1
2

9
10


En el siguiente programa, se realiza una suma sencilla de 2 nmeros, la cual se puede repetir si el
usuario presiona el nmero 1. Al presionar cualquier otra tecla el programa termina.

Ahora observe que la variable se inicializa con el valor de 1 para que al menos la suma se realice una
vez. El ciclo se repetir en base a la respuesta del usuario, las veces que se pulse el nmero 1. Ahora s,
puede verse la utilidad del ciclo while.


2. Solicitar 2 nmeros e imprimir la suma de ambos, repetir cada vez que el usuario presione 1.
#include <stdio.h>
#include <conio.h>
int resp,num1,num2,suma;
main()
{
clrscr();
Inicio
cont= 1


cont
Cont<=10
Cont ++


Inicio

resp=1;
while(resp==1)
{
clrscr();
printf(" Escribe un nmero: ");
scanf("%i",&num1);
printf("\n Escribe otro nmero: ");
scanf("%i",&num2);
suma=num1+num2;
printf("\n %i + %i = %i",num1,num2,suma);
printf("\n Si desea repetir presione 1: ");
scanf("%i",&resp);
}
}

3. Es un programa para calcular el ingreso diario, de un cyber, por la renta de las
computadoras (aclaro que es una situacin ficticia).
#include <stdio.h>
#include <conio.h>
char continuar;
float horas, importe, total;
main()
{
clrscr();
continuar='s';
while(continuar=='s')
{
clrscr();
printf("Cuantas Horas requiere: ");
scanf("%f",&horas);
importe=horas*10;
total=total + importe;
printf(El importe es: %f,importe);
printf(Desea Continuar(s/n): );
continuar=getch();
}
printf(El total por el uso de Internet es: %f,total);
getch();
}

El programa se repite mientras el usuario presiona la letra s (minscula), y calcula el total que va a
pagar el que renta una computadora y se va sumando al total, cuando se termina el ciclo imprime el
total del da.

4. Se pagaron 166 entradas a un partido. El precio de las boletas era $2.10 para adultos y $0.75
para nios. Se recibi la suma de $293.25. Cuntos adultos y cuntos nios asistieron?
Este problema parece complicado para resolver con un programa, pero con el ciclo while resulta
sencillo.

Para entenderlo podemos usar Hojas de Clculo, aplicando una estrategia de predecir y verificar, sin
perder tiempo adivinando. Se trata de iniciar con uno de los valores (nios) con la mxima cantidad de
personas y el otro valor (adultos) con el valor mnimo. Disminuyendo el valor mximo a la par que
aumenta el valor mnimo hasta encontrar que la suma de los costos de ambos valores es igual a la
cantidad total.

nios adultos costo nios costo adult Total

=nios*0.75 =adultos*2.1 Costo nios + costo adultos
166 0 124.5 0 124.5
165 1 123.75 2.1 125.85
164 2 123 4.2 127.2
163 3 122.25 6.3 128.55
162 4 121.5 8.4 129.9
161 5 120.75 10.5 131.25

Seguir as hasta llegar al valor obtenido por todas las entradas: 293.25

45 121 33.75 254.1 287.85
44 122 33 256.2 289.2
43 123 32.25 258.3 290.55
42 124 31.5 260.4 291.9
41 125 30.75 262.5 293.25

De esta manera se puede entender que con un ciclo while, se puede resolver este problema. De la
siguiente forma:
#include <stdio.h>
#include <conio.h>
int adultos, ninos;
float total;
void main()
{
clrscr();
ninos=166;
adultos=0;
while(total<293.25)
{
total=(ninos*.75)+(adultos*2.10);
ninos=ninos-1;
adultos=adultos+1;
}
printf("adultos %i y nios %i",adultos-1, ninos+1);
getch();
}


El ciclo while puede ser muy til para el uso de mens. Puede ser usado para repetir las opciones del
men las veces que sea necesario y controlar la salida, hasta se cumpla una condicin determinada. Le
mostrar un ejemplo del manejo de los mens.

En el siguiente programa se maneja un men de 5 opciones; las opciones de 1 al 4 indican una
operacin, no se realiza la operacin como se podra esperar, pero con algunos cambios, el programa
puede hacer lo que se desee (lo ms importante ahora es ejemplificar el uso del ciclo while), la opcin 5
es para salir.
#include <stdio.h>
#include <conio.h>
int opcion;
main()
{
opcion=1;
while (opcion!=5) /*mientras opcin no sea 5, repite el ciclo*/
{
clrscr();
printf("Menu:\n1-Suma\n2-Resta\n3-Multiplica\n4-Divisin\n5-Salir\n");
printf("Elige una opcin: ");
scanf("%i",&opcion);
switch (opcion)
{
case 1:
{
printf("elegiste sumar");
getch(); break;
}
case 2:
{
printf("Elegiste Restar");
getch(); break;
}
case 3:
{
printf("Elegiste Multiplicar");
getch(); break;
}
case 4:
{
printf("Elegiste Dividir");
getch(); break;
}
default:
{
if(opcion==5) /* necesario para saber si se desea salir */
break;
printf("Solo se aceptan nmeros entre 1 y 5.");
getch(); break;
}
}
}
puts("Pulse una tecla para Finalizar");
getch(); }




Algo adicional en este programa es la condicin que se encuentra dentro del default, la razn es
sencilla: cuando no se haya elegido ninguna opcin entre el 1 y 4 la ejecucin pasa al default y
mostrar el mensaje "Solo se aceptan nmeros entre 1 y 5", esto es correcto con cualquier nmero
excepto el 5. Si fuese el nmero 5 (se cumple la condicin) y se sale de la opcin sin mostrar el
mensaje. La ejecucin regresa a evaluar la condicin del ciclo e igualmente se cumple la condicin por
lo tanto sale del ciclo. Si lo desea tambin puede utilizar la instruccin exit(); para salir del programa
de una vez.

EJERCICIO INDIVIDUAL 7
Realiza el diagrama de Flujo y Programa en C, de los siguientes problemas.
1. En una mesa hay 20 monedas de veinticinco y de diez centavos, cuyo valor combinado es de
$3.05. Cuntas monedas de cada valor hay?






Ciclo do while
El ciclo do while ejecuta un bloque de cdigo mientras una condicin especfica sea cierta. Es similar
al ciclo while, pero a diferencia, el ciclo do while verifica la condicin al final del ciclo en vez de
hacerlo al principio, como sucede con los ciclos for y while. Con esto se asegura que el ciclo se
realizar al menos una vez, sin necesidad de iniciar la variable de control del ciclo.

La estructura del ciclo do while es la siguiente:
do
{
bloque
}while (condicin);


COMO FUNCIONA EL CICLO DO WHILE

1. Se ejecuta el bloque de cdigo, del cuerpo del ciclo
2. La condicin es evaluada, si se cumple la ejecucin regresa al paso 1. Si no se cumple, el
ciclo termina.



EJEMPLO:
Utilizar un ejemplo ya realizado en el ciclo while, dejando entre comentarios las lneas de
cdigo del ejemplo anterior que ya no sean tiles.
#include <stdio.h>
int resp,num1,num2,suma;
main()
{
clrscr();
/* resp=1; ya no es necesario iniciar la variable
while(resp==1) la condicin se verifica despus*/
do
{
clrscr();
printf(" Escribe un nmero: "); scanf("%i",&num1);
printf("\n Escribe otro nmero: "); scanf("%i",&num2);
suma=num1+num2;
printf("\n %i + %i = %i",num1,num2,suma);
printf("\n Si desea repetir presione 1: "); scanf("%i",&resp);
} while(resp==1); /* la condicin se evala al final */
}

En general puede observarse que es muy similar al while, aunque es de uso menos frecuente.

IMPORTANTE
Ciclos infinitos.- Un ciclo infinito es aquel que, actuando solo, se ejecutar para siempre.
Puede ser un ciclo for, while y do while.


EJEMPLOS:
Para crear un ciclo infinito se puede escribir:

while(1)
{
/*Aqu va el bloque de cdigo*/
}

La condicin que revisa el ciclo es la constante 1 que siempre ser cierta y no puede ser cambiada por
la ejecucin del programa. Por lo tanto, actuando solo, el ciclo nunca termina.

Se requiere de algn enunciado como el break o exit, dentro del ciclo para que se detenga.

Tambin se puede crear un ciclo for infinito o un ciclo do while, de la siguiente manera:
for( ; ; )
{
Aqu va el bloque de cdigo
}
Do
{
aqu va el bloque de cdigo
}while(1);

Bien, es preciso ver un ejemplo para entender mejor, usare el del men (realizado anteriormente): En
este programa el ciclo no controla la salida, solo se repite infinitamente. La salida es controlada por el
enunciado exit de la opcin 5 del enunciado switch.

#include<stdio.h>
#include <conio.h>
int opcion,tecla;
main()
{
while(1) /*ciclo while infinito*/
{
clrscr();
printf("Menu:\n1-Suma\n2-Resta\n3-Multiplicacin\n4-Divisin\n5-Salir\n");
printf("elige una opcin: "); scanf("%i",&opcion);
switch (opcion)
{
case 1:
{
printf("elegiste sumar");
break;
}
case 2:
{
printf("Elegiste Restar");
break;
}
case 3:
{
printf("Elegiste Multiplicar");
break;
}
case 4:
{
printf("Elegiste Dividir");
break;
}
case 5:
exit();
default:
printf("Solo se aceptan nmeros entre 1 y 5.");
}
getch();
}
}

You might also like