estructuras de control

23
Cap´ ıtulo 6 Estructuras de Control asicamente las instrucciones de un programa se ejecutan secuencialmente, es decir una despu´ es de otra, desde la primera hasta la ultima instrucci´on, pero cuando se analizan los problemas a solucionar, estos resolver requieren que se tomen decisiones que bifurcan la soluci´on o que se repitan alg´ un proceso una cantidad determinada o indeterminada de veces. El lenguaje c cuenta con una serie de estructuras llamadas de control que le permiten manejar el orden en que se ejecuta un programa, ya sea tomando una serie de distintos caminos o repitiendo un cantidad especifica de instrucciones. las estructuras de control m´as comunes son: if (if Simple) y If-else (If compuesto) while do-while for switch 83

Upload: margareth-hernandez

Post on 22-Dec-2015

214 views

Category:

Documents


0 download

DESCRIPTION

Programacion

TRANSCRIPT

Page 1: Estructuras de Control

Capıtulo 6

Estructuras de Control

Basicamente las instrucciones de un programa se ejecutan secuencialmente, es decir una

despues de otra, desde la primera hasta la ultima instruccion, pero cuando se analizan

los problemas a solucionar, estos resolver requieren que se tomen decisiones que bifurcan

la solucion o que se repitan algun proceso una cantidad determinada o indeterminada de

veces.

El lenguaje c cuenta con una serie de estructuras llamadas de control que le permiten

manejar el orden en que se ejecuta un programa, ya sea tomando una serie de distintos

caminos o repitiendo un cantidad especifica de instrucciones. las estructuras de control mas

comunes son:

if (if Simple) y If-else (If compuesto)

while

do-while

for

switch

83

Page 2: Estructuras de Control

84 CAPITULO 6. ESTRUCTURAS DE CONTROL

6.1. Estructura if-else

La estructura if-else se utiliza para tomar una decision segun si una condicion tiene un

resultado verdadero (TRUE o 1) o falso (FALSE o 0). Si al evaluar la condicion el resultado

es verdadero se ejecuta un bloque de instrucciones escogido y se resulta falso se salta este

bloque de instrucciones y continua el programa, en este punto se utiliza un else que es

opcional el cual permite ejecutar un bloque de instrucciones solo en el caso de que la

condicion sea falsa.

Representacion en diagrama de flujo:

Page 3: Estructuras de Control

6.1. ESTRUCTURA IF-ELSE 85

Sintaxis if (simple):

if(condicion)

{instrucciones

}

Ejemplo 1: Realizar un programa que calcule el valor absoluto de un numero real.

Solucion:

/************************************************************************/

#include <iostream.h>

#include <conio.h>

main()

{float n;

cout<<"Este programa determina el valor absoluto de n"<<endl;

cout<<"Introduzca el valor de n: ";

cin>>n;

if(n<0)

n=(-1)*n;//se omiten las llaves por ser una sola instruccion

cout<<"El valor absoluto es "<<n;

getch();

}

/************************************************************************/

Ejecucion:

Este programa determina el valor absoluto de n

Introduzca el valor de n: -5.3

El valor absoluto es 5.3

Este programa determina el valor absoluto de n

Introduzca el valor de n: 8.26

El valor absoluto es 8.26

Page 4: Estructuras de Control

86 CAPITULO 6. ESTRUCTURAS DE CONTROL

Sintaxis if-else (compuesto):

if(condicion)

{instrucciones

}else

{instrucciones

}

Ejemplo 2: Realizar un programa que dado un numero entero determine si es par o impar.

Solucion:

/************************************************************************/

#include <iostream.h>

#include <conio.h>

main()

{float n;

cout<<"Este programa determina si n es par o impar"<<endl;

cout<<"Introduzca el valor de n: ";

cin>>n;

if(n%2==0)

cout<<"El numero "<<n<<" es par";

else

cout<<"El numero "<<n<<" es impar";

getch();

}

/************************************************************************/

Ejecucion:

Este programa determina si n es par o impar

Introduzca el valor de n: 98

El numero 98 es par

Page 5: Estructuras de Control

6.1. ESTRUCTURA IF-ELSE 87

Ejemplo 3: Realizar un programa que solicite al usuario una cantidad entera de dıas.

Esta cantidad debe ser mostrada en pantalla con su equivalencia en anos, meses, semanas

y dıas.(no mostrar cuando uno de estos valores sea cero)

Solucion:

/************************************************************************/

#include<iostream.h>

#include<conio.h>

main()

{

int dias, anos=0,meses=0, semanas=0;

cout<<"Este programa expresa una cantidad de dıas en a~nos, meses,";

cout<<"semanas y dias\n";

cout<<"Digite la cantidad de dıas: ";

cin>>dias;

anos=dias/365;

dias=dias%365;

meses=dias/30;

dias=dias%30;

semanas=dias/7;

dias=dias%7;

cout<<"Esta cantidad corresponde a:"<<endl;

if(anos!=0)

cout<<anos<<" a~nos, ";

if(meses!=0)

cout<<meses<<" meses, ";

if(semanas!=0)

cout<<semanas<<" semanas, ";

if(dias!=0)

cout<<dias<<" dias";

getch();

}

/************************************************************************/

Page 6: Estructuras de Control

88 CAPITULO 6. ESTRUCTURAS DE CONTROL

Ejecucion:

Este programa expresa una cantidad de dıas en anos, meses, semanas y dıas

Digite la cantidad de dıas: 2000

Esta cantidad corresponde a:

5 anos, 5 meses, 3 semanas, 4 dıas

Este programa expresa una cantidad de dıas en anos, meses, semanas y dıas

Digite la cantidad de dıas: 1000

Esta cantidad corresponde a:

2 anos, 9 meses,

Este programa expresa una cantidad de dıas en anos, meses, semanas y dıas

Digite la cantidad de dıas: 120

Esta cantidad corresponde a:

4 meses,

Ejemplo 4: Realizar un programa que calcule el costo de las entradas a cine, si cada una

vale 5 dolares, pero si se compran de 5 a 10 tiene descuento del 15 % y mas de 10 descuento

del 25 %.

Solucion:

/************************************************************************/

#include<iostream.h>

#include<conio.h>

main()

{

int cantidad;

float costo, descuento;

cout<<"El programa calcula el costo de las entradas a cine"<<endl;

cout<<"Digite la cantidad de entradas: ";

cin>>cantidad;

Page 7: Estructuras de Control

6.1. ESTRUCTURA IF-ELSE 89

if(cantidad<5)

{

descuento=0;

}

else

{

if(cantidad<10)

{

descuento=5*cantidad*0.15;

}

else

{

descuento=5*cantidad*0.25;

}

}

costo=5*cantidad-descuento;

cout<<"El costo total de las boletas es "<<costo;

getch();

}

/************************************************************************/

Ejecucion:

El programa calcula el costo de las entradas a cine

Digite la cantidad de entradas: 4

El costo total de las boletas es 20

El programa calcula el costo de las entradas a cine

Digite la cantidad de entradas: 6

El costo total de las boletas es 25.5

El programa calcula el costo de las entradas a cine

Digite la cantidad de entradas: 12

El costo total de las boletas es 45

Page 8: Estructuras de Control

90 CAPITULO 6. ESTRUCTURAS DE CONTROL

6.1.1. Operador condicional ?:

Este operador permite representar en forma abreviada una estructura if-else

Sintaxis condicional ?:

condicion ? opcion si verdadero : opcion si falso;

Un ejemplo del operador condicional ?: puede ser el siguiente:

n %2 == 0? cout<< n <<“es par”: cout<< n <<“es impar”;

Ejemplo 5: Realice un programa que dada la nota de una habilitacion, determine si el

estudiante aprueba o reprueba el curso.

Solucion:

/************************************************************************/

#include <conio.h>

#include <iostream.h>

main()

{

int nota;

cout<<"Este programa determina si el estudiante aprueba o ";

cout<<"reprueba el curso\n\n";

cout<<"Introduzca la nota de la habilitacion: ";

cin>>nota;

nota>=3? cout<<"aprobo ": cout<<"reprobo ";

getch();

}

/************************************************************************/

Ejecucion:

Este programa determina si el estudiante aprueba o reprueba el curso

Introduzca la nota de la habilitacion: 2.5

reprobo

Page 9: Estructuras de Control

6.2. ESTRUCTURA WHILE 91

6.2. Estructura while

La estructura while es un ciclo que permite ejecutar un bloque de instrucciones mientras

se cumpla una condicion, en el momento que la condicion sea falsa se termina la repeticion

y se ejecuta la siguiente instruccion despues de la estructura de repeticion; el bloque de

instrucciones del ciclo while puede no ser ejecutado ni siquiera una vez, si de entrada la

condicion es falsa.

Es importante que alguna instruccion o combinacion de instrucciones dentro del ciclo,

generen que la condicion en algun momento sea falsa, ya que de lo contrario la repeticion

nunca termina, generando lo que se llama un ciclo infinito.

Representacion en diagrama de flujo:

Sintaxis while

while(condicion)

{instrucciones

}

Page 10: Estructuras de Control

92 CAPITULO 6. ESTRUCTURAS DE CONTROL

Ejemplo 6: Realizar un programa que determine el promedio de n numeros ingresados

por el usuario.

Solucion:

/************************************************************************/

#include <conio.h>

#include <iostream.h>

main()

{

int n, contador=1;

float num,suma=0,promedio;

cout<<"Este programa determina el promedio de n numeros"<<endl;

cout<<"Introduzca el valor de n: ";

cin>>n;

while(contador<=n)

{cout<<"Ingrese el numero "<<contador<<": ";

cin>>num;

suma=suma+num;

contador++;

}

promedio=suma/n;

cout<<"El promedio es: "<<promedio;

getch();

}

/************************************************************************/

Ejecucion:

Este programa determina el promedio de n numeros

Introduzca el valor de n: 4

Ingrese el numero 1: 6.3

Ingrese el numero 2: 4.5

Ingrese el numero 3: 7.26

Ingrese el numero 4: 1.2

El promedio es: 4.815

Page 11: Estructuras de Control

6.3. ESTRUCTURA DO-WHILE 93

6.3. Estructura do-while

La estructura do-while trabaja de forma analoga a la estructura while, con la unica

diferencia de que la condicion se evalua al final, luego de haber ejecutado el bloque de

instrucciones; esto obliga que al menos el bloque de instrucciones se ejecuten una vez, al

darse que al final la condicion fuera falsa, obligarıa a salir del ciclo o en caso contrario

repetirlo hasta que la condicion fuera falsa.

Representacion en diagrama de flujo:

Sintaxis do-while

do {instrucciones

} while(condicion);

Ejemplo 7: Realizar un programa que determine el promedio de los numeros ingresados

por el usuario, preguntando cada vez que se ingresa un elemento, si desea ingresar uno

nuevo.

Page 12: Estructuras de Control

94 CAPITULO 6. ESTRUCTURAS DE CONTROL

Solucion:

/************************************************************************/

#include <conio.h>

#include <iostream.h>

main()

{

int contador=0;

float num,suma=0,promedio;

char respuesta;

cout<<"Este programa determina el promedio de los numeros ";

cout<<"ingresados por el usuario"<<endl;

do

{

contador++;

cout<<"Ingrese el numero "<<contador<<": ";

cin>>num;

suma=suma+num;

cout<<"desea ingresar otro numero(s/n)";

cin>>respuesta;

} while(respuesta!=’n’);

promedio=suma/contador;

cout<<endl<<"El promedio es :"<<promedio;

getch();

}

/************************************************************************/

Ejecucion:

Este programa determina el promedio de los numeros ingresados por el usuario

Ingrese el numero 1: 25.3

desea ingresar otro numero(s/n) s

Ingrese el numero 2: 14.6

desea ingresar otro numero(s/n) s

Ingrese el numero 3: 18.3

desea ingresar otro numero(s/n) n

El promedio es : 19.4

Page 13: Estructuras de Control

6.4. ESTRUCTURA FOR 95

6.4. Estructura for

Dado que muchos de los ciclos while o do-while requieren de 3 etapas fundamentales,

que son la primera una inicializacion de variables, la segunda una condicion que controla

el numero de veces que se repite el ciclo y una tercera que permite el incremento (o

decremento) de variables por cada vez que se repite el ciclo; se maneja la estructura for que

es equivalente y maneja las tres etapas en una misma instruccion separadas con coma(,).

Representacion en diagrama de flujo:

A continuacion se da una equivalencia entre la sintaxis de la estructura for con la de while:

Sintaxis for

for(inicializacion, condicion control, incremento )

{instrucciones

}

equivalente a:

Page 14: Estructuras de Control

96 CAPITULO 6. ESTRUCTURAS DE CONTROL

inicializacion;

while(condicion control)

{instrucciones

incremento

}

un ejemplo sencillo puede ser el siguiente que permite imprimir los numeros del 1 al 10:

for(int i = 1; i <= 10; i + +)

cout<< i;

Ejemplo 8: Realizar un programa que haga un conteo regresivo en pantalla de 10 a 1.

Solucion:

/**********************************************************************/

#include <conio.h>

#include <iostream.h>

main()

{

int contador;

for(contador=10;contador>=1;contador--)

{

cout<<contador<<"\t";

_sleep(1000);//detiene la ejecucion 1 segundo

}

cout<<"digite una tecla para salir";

getch();

}

/************************************************************************/

Ejecucion:

10 9 8 7 6 5 4 3 2 1

digite una tecla para salir

Page 15: Estructuras de Control

6.4. ESTRUCTURA FOR 97

6.4.1. Variantes del for

El for no requiere que se encuentren las 3 expresiones dentro del parentesis despues de la

palabra for, lo que si es obligatorio es que los espacios esten separados con punto y coma

(;). Para comprender mas estas variaciones se presentan a continuacion equivalencias de la

estructura for validas para la impresion de los numeros de 1 a 10:

for(int i = 1; i <= 10; i + +)

cout<< i;

equivalente a:

for(int i = 1; i <= 10; cout<< i + +)

equivalente a:

for(int i = 1; i <= 10;)

cout<< i + +;

equivalente a:

int i = 1;

for(; i <= 10; )

cout<< i + +;

Ademas la primera instruccion del parentesis del for puede ser cualquier instruccion valida

del lenguaje c:

int i = 1;

for(cout<<“los numeros del 1 al 10 son:”; i <= 10; i + + )

cout<< i;

Page 16: Estructuras de Control

98 CAPITULO 6. ESTRUCTURAS DE CONTROL

Ejemplo 9: Realizar un programa que realice una escalera con los numeros del 1 al 9.

Solucion:

/**********************************************************************/

#include <conio.h>

#include <iostream.h>

main()

{

int i=1,j;

for(;i<=9;)

{

j=1;

for(;j<=i;)

cout<<j++;

i++;

cout<<"\n";

}

getch();

}

/************************************************************************/

Ejecucion:

1

12

123

1234

12345

123456

1234567

12345678

123456789

Page 17: Estructuras de Control

6.5. SENTENCIA SWITCH 99

6.5. Sentencia Switch

La sentencia Switch permite que el programa elija la ejecucion de una serie de instrucciones

entre varias posibilidades o casos dependiendo de la opcion escogida.

Representacion en diagrama de flujo:

Sintaxis Switch:

switch(expresion)

{case contante 1:

Instrucciones caso 1;

break;

case contante 2:

Instrucciones caso 2;

break;

Page 18: Estructuras de Control

100 CAPITULO 6. ESTRUCTURAS DE CONTROL

case contante n:

Instrucciones caso n;

break;

default:

Instrucciones caso que no se cumpla ninguna de las anteriores;

}

Ejemplo 10: Realizar un programa que dadas las letras d, a, b, s, que representan una

nota de un estudiante, mostrar deficiente, aceptable, bueno y sobresaliente para cada caso.

Solucion:

/************************************************************************/

#include<iostream.h>

#include<conio.h>

main()

{

char nota;

cout<<"Ingrese la letra que represente la nota del estudiante"<<endl;

cout<<"(d)eficiente,(a)ceptable,(b)ueno,(s)obresaliente"<<endl;

cin>>nota;

switch(nota)

{case ’d’: cout<<"La nota es deficiente, nota menor de 3.0"<<endl;

break;

case ’a’: cout<<"La nota es aceptable, nota entre 3 y 3.5"<<endl;

break;

case ’b’: cout<<"La nota es buena, nota entre 3.6 y 4.5"<<endl;

break;

case ’s’: cout<<"La nota es sobresaliente, mayor de 4.5"<<endl;

break;

default : cout<<"no es un sımbolo para una nota valida";

break;

}

getch();

}

/************************************************************************/

Page 19: Estructuras de Control

6.5. SENTENCIA SWITCH 101

Ejecucion:

Ingrese la letra que represente la nota del estudiante

(d)eficiente,(a)ceptable,(b)ueno,(s)obresaliente

d

La nota es deficiente, nota menor de 3.0

Ingrese la letra que represente la nota del estudiante

(d)eficiente,(a)ceptable,(b)ueno,(s)obresaliente

x

no es un sımbolo para una nota valida

Ejemplo 11: Realizar un programa que permita al usuario determinar la hipotenusa de

un triangulo rectangulo si se conocen los 2 catetos, o determinar un cateto si se conoce la

hipotenusa y el otro cateto.

Solucion:

/************************************************************************/

#include<iostream.h>

#include<conio.h>

#include<math.h>

main()

{

int op;

float c1,c2,hip;

do

{

system("CLS");//borrar pantalla

cout<<"MENU TRIANGULO RECTANGULO"<<endl;

cout<<"1. Determinar la hipotenusa"<<endl;

cout<<"2. Determinar un cateto"<<endl;

cout<<"3. Salir"<<endl;

cout<<"Digite una opcion: ";

cin>>op;

Page 20: Estructuras de Control

102 CAPITULO 6. ESTRUCTURAS DE CONTROL

switch(op)

{case 1: system("CLS");

cout<<"Esta opcion permite determinar la hipotenusa"<<endl;

cout<<"Ingrese el valor del cateto 1:";

cin>>c1;

cout<<"Ingrese el valor del cateto 2:";

cin>>c2;

hip=sqrt(pow(c1,2)+pow(c2,2));

cout<<"La hipotenusa de este triangulo es "<<hip;

getch();

break;

case 2: system("CLS");

cout<<"Esta opcion permite determinar un cateto"<<endl;

cout<<"Ingrese el valor de la hipotenusa:";

cin>>hip;

cout<<"Ingrese el valor del cateto :";

cin>>c1;

c2=sqrt(pow(hip,2)-pow(c1,2));

cout<<"El valor del cateto desconocido es "<<c2;

getch();

break;

}

}while(op!=3);

}

/************************************************************************/

Ejecucion:

MENU TRIANGULO RECTANGULO

1. Determinar la hipotenusa

2. Determinar un cateto

3. Salir

Digite una opcion: 1

borra pantalla y presenta la siguiente opcion:

Page 21: Estructuras de Control

6.5. SENTENCIA SWITCH 103

Esta opcion permite determinar la hipotenusa

Ingrese el valor del cateto 1: 3

Ingrese el valor del cateto 2: 5

La hipotenusa de este triangulo es: 5.83095

vuelve al menu principal y se puede volver a escoger cualquiera de las opciones:

MENU TRIANGULO RECTANGULO

1. Determinar la hipotenusa

2. Determinar un cateto

3. Salir

Digite una opcion: 2

Esta opcion permite determinar un cateto

Ingrese el valor de la hipotenusa: 10

Ingrese el valor del cateto: 5

El valor del cateto desconocido es : 8.66025

vuelve al menu principal y se puede ejecutar el programa tantas veces se desee hasta que

finalmente se escoja la opcion 3.

Page 22: Estructuras de Control

104 CAPITULO 6. ESTRUCTURAS DE CONTROL

6.6. TALLER

Realizar en lenguaje c cada uno de los siguientes programas

1. Realizar un programa que muestre los numeros enteros de 1 a n, con n ingresado por

el usuario.

2. Realizar un programa que encuentre el valor de la sumatoria: 5 + 10 + 15 + · · ·+ 100

3. Realizar un programa que determine el mayor de 3 numeros reales diferentes.

4. Realizar un programa que ordene de menor a mayor 3 numeros distintos ingresados

por el usuario.

5. Realizar un programa que determine el menor de un conjunto de numeros ingresados

por el usuario.

6. Realizar un programa que determine la cantidad de dıgitos de un numero entero.

7. Realizar un programa que determine los divisores de un numero entero.

8. Realizar un programa que determine la suma de los pares en el intervalo [2, n]

9. Realizar un programa que determine la suma de los multiplos de n en [a, b]

10. Realizar un programa que determine la suma de n numeros ingresados por el usuario.

11. Realizar un programa que determine si un numero es primo o no.

12. Realizar un programa que determine la cantidad de numeros primos en [a, b]

13. Realizar un programa que muestre todos los numeros romanos del 1 al 100.

14. Realizar un programa que muestre un menu que le permita al usuario escoger la

opcion de pasar un angulo de grados a radianes y otra opcion para pasar de radianes

a grados.

15. Realizar un programa que muestre la tabla de multiplicar que el usuario desee.

Page 23: Estructuras de Control

6.6. TALLER 105

16. Realizar un programa que muestre las tablas de multiplicar del 1 al 9.

17. Realizar un programa que dados x, y determinar xy, sin utilizar la librerıa math.h

18. Realizar un programa que aproxime el valor de π a partir de n terminos de la serie:

π ≈ 4− 43

+45− 4

7+

49− 4

11+ . . .