Anda di halaman 1dari 35

50

Captulo 3 Programacin estructurada


Si llueve, llevar el paraguas.
La expresin condicional
La
condicin
es una expresin booleana. Si el resultado de la expresin: es
cero
, se considera una condicin
falsa
.
no es cero
, se considera una condicin
cierta
.
x
5
9; if (x) //La condicin es verdadera.if (5
.
7) //La condicin es falsa, comparamos dos valores.
El ltimo ejemplo es el ms utilizado durante este curso.Existen tres tipos de
estructuras de control selectivas; stas se basan en una condicin o en una opcin:
a
) Simple
if
.
b
) Doble
if-else
.
c
) Mltiple
switch-break
.
Bloque de sentencias o instruccin compuesta
Se denomina bloque de sentencias a un conjunto de instrucciones delimitadas, por
ejemplo en lenguaje C,C
11
, Java se utilizan llaves que abren y cierran { }.En lenguajes como Pascal, Modula,
Delphi, Ada, se utiliza Begin y End.Estas instrucciones se toman como una
sola sentencia en las estructuras de control.
Pseudocdigo Lenguaje C
inicio
{

inst 1
inst 1
inst 2
inst 2
inst 3
inst 3
.
.
inst n
inst n
fin
}
3.5.1 Estructura de control selectiva simple si (if)
Estructura de control que dirige a la computadora para ejecutar una o ms
instrucciones solamente si lacondicin es verdadera. Si la condicin es falsa no
realiza ninguna accin.El trmino condicin lo utilizaremos a lo largo de este libro
para referirnos a una o ms condiciones.Existen dos formas de representarlo,
dependiendo del nmero de instrucciones que se desean realizarsi la condicin se
cumple:1. Si se requiere ejecutar una sola instruccin, cuando se cumpla la
condicin se representa de la siguienteforma:
Diagrama de flujo Pseudocdigo Lenguaje C
si
(condicin)
if (condicin)
FVInst 1condicin
inst 1
inst 1
EjemplosEjemplosEjemplos

3.5 Estructura de control selectiva o alternativa

51
Si la condicin se cumple se realiza la instruccin 1.Una posibilidad en el cdigo
sera:
if
(i)printf(%d, i/2); 2. Si se requiere ejecutar un bloque de instrucciones, cuando
se cumpla la condicin se representa de lasiguiente forma:
Diagrama de flujo Pseudocdigo Lenguaje C
si
(condicin)
if (condicin)
Inst 1Inst 2Inst 3condicinFV inicio
{
inst 1
inst 1
inst 2
inst 2
inst 3
inst 3
fin
}
Nota:
Si existe ms de una instruccin para realizar, es necesario utilizar inicio y fin para
agrupar las instrucciones,es su alcance sintctico, si no se usa el inicio y fin slo
se ejecuta la primera instruccin, mientras que las siguientesinstrucciones se
realizarn siempre. En la tabla 3.2 vemos unos ejemplos de las distintas formas
que puede adoptar laexpresin dentro de un
if
.
Tabla 3.2
Formas de utilizar la instruccin
if
E j e m p l o s O b s e r v a c i o n e s
if (x
.
y)if ((x
.
y) !
5
0 )Las dos expresiones son vlidas y equivalentes. Es ms frecuente la primera;
una condi-cin es verdadera si es diferente de cero.if (x)if (x !
5
0)Las dos expresiones son correctas e iguales. Es ms usual la segunda
expresin en estecurso.if (!x)if (x
55

0 )Las dos expresiones son permitidas y semejantes. Es ms comn la segunda


expresin;una condicin es falsa si es igual a cero.if ( x
5
y )La expresin es incorrecta; recuerde que el operador relacional en lenguaje
C es
55
,por lo que debe ser if ( x
55
y ). Un solo igual es asignacin.
3.5.2 Estructura de control selectiva doble si/si-no (if/else)
Estructura de control que dirige a la computadora para ejecutar una accin si la
condicin es verdadera, yotra accin en caso de que sea falsa. Cabe mencionar que
las instrucciones debern ser diferentes en cadacaso, ya que si fueran iguales no se
requerira una estructura selectiva, con la estructura secuencial se resol- vera el
problema.Existen dos formas de representarlo, dependiendo del nmero de
instrucciones que se desean realizar sila condicin se cumple o no:
52
Captulo 3 Programacin estructurada
Diagrama de flujo Pseudocdigo Lenguaje C
condicinInst 2Inst 1FV
si
(condicin)
if (condicin)
inst 1
inst 1
sino
else
inst 2
inst 2
Si la condicin se cumple se realiza la instruccin 1, pero si la condicin no se
cumple se realiza la instruc-cin 2.
Diagrama de flujo Pseudocdigo Lenguaje C
si
(condicin)
if (condicin)
FVInst 1Inst 2condicinInst 3Inst 4 inicio
{
inst 1
inst 1
inst2
inst 2
fin

}
sino
else
inicio
{
inst 3
inst 3
inst 4
inst 4
fin
}
Si la condicin se cumple se realizan las instrucciones 1 y 2, pero si no se cumple se
realizarn las instruc-ciones 3 y 4.
3.5.3 Anidamiento o escalonamiento si-si no-si (if-else-if)
El concepto de anidamiento es muy utilizado en la programacin y consiste
en insertar (anidar) una estruc-tura dentro de otra.La expresin si anidados se
refiere a que podemos utilizar una sentencia
si (if)
dentro de otra sentencia
si (if)
. Esto se emplea cuando se tienen que cumplir varias condiciones para poder
ejecutar una accin.Uno de los aspectos ms confusos de las sentencias
si (if)
en el lenguaje de programacin es el
si (if)
anidado. Un
si (if)
anidado es una sentencia
si (if)
que es el objeto de otro
si (if)
o
si no (else)
. La razn por laque los
si (if)
anidados son tan problemticos es que resulta confuso saber qu
else
se asocia con qu
si (if)
.

3.5 Estructura de control selectiva o alternativa


53
Sintaxis:
Pseudocdigo Lenguaje C
si
(condicin1)
if (condicin1)
inst1(s)
inst1(s);
sino
else
si
(condicin2)
if (condicin2)
inst2(s)
inst2(s);
sino si
(condicin3)
else if (condicin3)
inst3(s)
inst3(s);
...
...
sino
else
inst (s)
inst (s);
La computadora evala la expresin condicional de arriba abajo. Tan pronto como
la computadora encuen-tra una condicin verdadera, ejecuta la instruccin(es) y salta el
resto de la escalera. Si no es verdad ningunacondicin, la computadora ejecutar el
else
final. ste acta frecuentemente como condicin por defecto; esdecir si fallan todas las
pruebas anteriores, la computadora realiza la ltima instruccin(es)
else
. Si no hay
else
final y son falsas las condiciones, no se hace nada.

3.5.4 Ejercicios resueltos de la estructura de control selectivasimple si (if) y


doble si/si-no (if/else)
Ejercicio 1.
Segn una calificacin, imprimir si sta es aprobada.
Diagrama de flujo Pseudocdigo Lenguaje C
#include <stdio.h>
calcal
.5
60VFAprobada
#include <conio.h>
principal ()
main()
inicio
{
real cal
float cal;
imprimir Dame la calificacin:
printf(Dame la calificacin: );
leer cal
scanf(%f,&cal);
si (cal
.5
60)
if (cal
.5
60)
imprimir Aprobada
printf (Aprobada);
getch();return 0;
fin
}
En el ejercicio 1 se utiliza la estructura selectiva simple. La
condicin
de este ejemplo y la mayora que ve-remos en el presente curso consisten en comparar dos
valores (la variable cal y 60), y si dicha condicin es

54
Captulo 3 Programacin estructurada
Diagrama de flujo Pseudocdigo Lenguaje C
#include <stdio.h> #include <conio.h>
calFVcal
.5
60ReprobadaAprobada principal ()
main()
inicio
{

real cal
float cal;
imprimir Dame la calificacin:
printf(Dame la calificacin: );
leer cal
scanf(%f,&cal);
si (cal
.5
60)
if ( cal
.5
60 )
imprimir Aprobada
printf (Aprobada);
si no
else
imprimir Reprobada
printf(Reprobada);
getch(); return 0;
fin
}
verdadera se realiza una determinada accin. Se revisa la calificacin
(cal)
, si es mayor o igual que 60, seimprime
aprobada
, de lo contrario no imprime nada el programa, es decir slo pasa por parte del
programadependiendo de una condicin. Ejemplo: si
cal
5
85
el programa imprime Aprobada, pero si
cal
5
59
, elprograma no imprime nada.
Ejercicio 2.
Segn una calificacin, imprimir si es aprobada o reprobada.
Ejemplos
A diferencia del ejercicio 1, el ejercicio 2 utiliza la selectiva doble, ya que revisa la
condicin; si sta se cum-ple (es verdadera) imprimir Aprobada, pero, si la condicin no
se cumple imprimir Reprobada, es decirel programa pasa por una u otra instruccin
pero no por ambas. Ejemplo: si

cal
5
85
el programa imprimeAprobada,perosi
cal
5
59
, el programa imprime Reprobada. La alternativa doble es ms rpida; en esteejemplo slo
evala una condicin, a diferencia de la simple, que evaluara dos.Para calcular un
promedio primero se debern sumar las
n
calificaciones y luego dividir el resultadoentre
n
; en este caso especfico son tres calificaciones, as que primero se le piden al
usuario
cal1
,
cal2
,
cal3
.Se suman las calificaciones y el resultado se divide entre tres, guardando el
resultado en la variable
promedio
,tomando en cuenta la necesidad de los
()
en la expresin para indicarle al compilador que primero se hacela suma y luego la
divisin. Luego se revisa la condicin; si promedi
.
95 se modificar el valor de
prome-dio
asignndole el valor de 100, pero si la calificacin fuera menor o igual al 95 el valor
de la variable
pro-medio
no se modifica, es decir queda almacenado el mismo resultado. La ltima
instruccin muestra elresultado del promedio.
cal1
5
80, cal2
5
90, cal3
5
100
. El programa imprimir

El promedio es: 90,0


pero si
cal1
5
98, cal2
5
90,cal3
5
100
el programa imprimir
El promedio es: 100
ya que el promedio de las tres calificacionesanteriores es de 96.0 y al ser mayor
que 95 modifica el valor del promedio a 100 y es el valor que semuestra.
Nota:
La ltima instruccin (
imprimir
)
se realiza se cumpla o no la condicin, ya que se encuentra fuera de la
estructurade control

Ejercicios complementarios de la estructura de control selectiva simple y doble en


psudocdigo y diagrama de flujo
65
principal ()inicioentero horas, horas_ext _
_________________
precio_hora, pagaimprimir Introduce el nmero de horas trabajadasleer
_________________
imprimir
_____________________________________
leer precio_horasi (horas
.
40)iniciohoras_ext

________________________________
paga

_____________________________________

finsi nosi
_________________
paga

horas * precio_horasi no
_________________

horas * precio_hora * 0.88imprimir pagafin


Ejercicio 5.
Complete el siguiente pseudocdigo que utiliza la estructura selectiva doble
anidada, paraimprimir si la persona es nio, adolescente, adulto o anciano, segn
el rango de edades siguiente:
a
) 0 a 12 es nio.
b
) 13 a 17 es adolescente.
c
) 18 a 80 es adulto.
d
) Mayor que 80 es anciano.
principal ()inicioentero edadimprimir Cul es la edad?leer _
_________________
si (edad
,5
_
___________
)imprimir Es niosi no_
________
( edad
,5
17 )imprimir es adolescente si nosi
________________________________
imprimir es adultosi no
__________________________________
fin

66
Captulo 3 Programacin estructurada
Ejercicios complementarios de la estructura de controlselectiva simple y doble en
lenguaje C
Elaborar la codificacin en Lenguaje C de los siguientes programas (realizando el
clculo e impresinrespectiva):
1. Leer una fecha (da, mes, ao) y diga si es correcta o no.2. Leer un ao e imprimir
si es bisiesto o no.3. Un millonario tena tres hijos: Juan, Luis y Rosa. Al morir dej
el siguiente legado: A Luis le dej 4/3 delo que le dej a Juan. A Juan le dej 1/3 de
su fortuna. A Rosa le dej la mitad de lo que le dej a Luis.Adems el licenciado les
cobrar por sus servicios un porcentaje de lo que reciban cada uno de herencia:si el
monto es menor a la tercera parte de la herencia cobrar 3%, en caso contrario 5%.
Imprimir cuntorecibirn cada heredero y el abogado.4. El domingo de Pascua es el
primer domingo despus de la primera luna llena posterior al equinoccio
deprimavera y se determina mediante el siguiente clculo:
a
5
ao % 19
b
5
ao % 4
c
5
ao % 7
d
5
(19 * a
1
24) % 30
e
5
(2 *b
1
4*c
1
6*d
1
5) % 7
n

5
(22
1
d
1
e)Donde
n
indica el nmero del da del mes de marzo (si
n
es igual o menor que 31), en caso contrario elmes de abril se obtiene como (
d
1
e
2
9). Imprimir la fecha del domingo de Pascua a partir de un ao dado. 5. Leer un nmero
entero (entre 0 y 32 700) e imprimir el nmero de cifras de dicho nmero. 6. Leer
la hora de un da (0 a 23 horas y minutos, por ejemplo para las 18:30 deber leer 18
y 30), e imprimirla misma hora pero en formato de 12 horas mostrando las horas,
los minutos y el indicador de meridiano.No es posible especificar PM cuando la
hora es 0. Cuando se especifica AM tambin representa las horasantes del
medioda. Si se especifica PM representa las horas despus del medioda. Si se
especifica AM,representa la medianoche. Si se especifica PM, representa el
medioda. 12:01 es 1 minuto despus delmedioda, como 12:01 PM, mientras que
12:01 AM es 1 minuto despus de medianoche. Especificar12:01 AM es lo mismo
que 00:01 o 00:01 AM. Para las 18:30 deber imprimir 6:30 PM. 7. Leer
un nmero entero e imprimir si es:
a
) Cero, positivo o negativo;
b
) Par o impar (cuando sea positi- vo);
c
) Mltiplo de 7 o no mltiplo de 7 (cuando sea impar). Para el nmero 35,
imprimir: Es un nmeropositivo, es impar y es mltiplo de 7. 8. Leer 5 nmeros
e imprimir el menor y el mayor de ellos. 9. Conversin de temperatura expresada
en grados Celsius a Fahrenheit : f
5
(9
/
5)c
1
32 y viceversa(Fahrenheit a Celsius). Permita elegir entre estas
dos opciones.10. Dados dos de los ngulos de un tringulo, calcular el tercer ngulo
y determinar si el tringulo es rectngulo(un ngulo igual a 90 grados), acutngulo
(sus tres ngulos menores a 90 grados) u obtusngulo (unngulo mayor a 90
grados).11. Leer las horas trabajadas y la paga por hora para calcular el sueldo semanal de un
empleado. Cuandolas horas de trabajo exceden de 40 se consideran horas extra; las primeras 8
se pagan al doble; si las horasextra exceden de 8 se pagan las primeras 8 al doble de lo que se

pagan las horas normales y el resto al triple.12. En un estacionamiento se cobra de la


siguiente manera: los primeros 10 minutos son gratis, los siguientes15 minutos
subsecuentes cuestan $3, la primera hora $10 y cada hora subsecuente $5. A partir
de laprimera hora se cobran horas completas. Si es domingo se hace un descuento
de 10% sobre el montototal. Leer los minutos y horas e imprimir cunto se
pagar.13. Ordenar dos nmeros con un solo if.14. Leer 4 nmeros. Imprimir el
mayor, el menor y la suma de ambos.15. Leer 3 nmeros y ordenarlos de manera
ascendente.

Ejercicios complementarios de la estructura de control selectiva y doble en


lenguaje C
67
16. Existen cuatro cuadrantes dependiendo del signo de x y y. Lee las coordenadas
x y y de un punto eimprime si est en los ejes de coordenadas, en el origen o bien
en qu cuadrante se encuentra localizado.
Segundocuadrante (0, 0)PrimercuadranteOrigenTercercuadranteCuartocuadrante Y
17. Leer el nmero de das transcurridos del ao e imprimir a qu mes pertenece.
Por ejemplo si se captura32 se imprimir el mes es febrero.18. Leer la fecha de
nacimiento (da, mes y ao) de una persona y la fecha actual (da, mes y ao),
paraposteriormente imprimir la edad al da de hoy. Por ejemplo usted tiene 19 aos
7 meses y 14 das.19. Resolver el ejercicio 8 resuelto con una versin diferente, por
ejemplo los valores de la condicin puedenir entre apstrofos.20. Leer el nombre
de un determinado mes e imprimir cuntos das tiene dicho mes. Utilizar la
funcinstrcmp (vea el captulo de programacin modular).21. Calcular alguna de
las cuatro operaciones bsicas, con el nombre respectivo. Por ejemplo suma.
Utilizarla funcin strcmp (vea el captulo de programacin modular).
3.5.5 Estructura de control selectiva mltiple segun_sea (switch)
Esta estructura selecciona entre varias posibilidades, dependiendo del valor de la
expresin. Cuando en laestructura
si (if)
todas las condiciones utilizan la
igualdad
de una variable determinada con constantes pre-definidas, se puede utilizar la
instruccin
segun_sea (switch)
, en dicha instruccin existen ms de dos op-ciones. La estructura
segun_sea (switch)
evala una expresin que puede tomar
n
valores distintos; segncon cul de estos valores coincida, se ejecutarn ciertas
acciones, es decir, el programa o algoritmo seguirun determinado camino entre
los
n
posibles. Dicha expresin slo acepta valores
enteros
o
caracteres
pa-ra entrar a la opcin y el operador de relacin es el igual.
Diagrama de flujo Pseudocdigo Lenguaje C
segun_sea
(expresin)
switch (expresin)

inicio
{
caso
exp_const_1: inst1
case exp_const_1 : inst1;
salir
break;
expresininst 4inst 2inst 3inst 1inst n
caso
exp_const_2 : inst2
case exp_const_2 : inst2
inst3
inst3
salir
break;
caso
exp_const_n : inst n
case exp_const_n : inst n
salir
break;
caso
contrario: inst 10
default: inst 10
fin
}
Se compara la expresin (puede ser una sola variable) con cada una de las
opciones const y en el mo-mento de encontrar una constante idntica se
ejecutan la(s) instruccin(es) correspondiente(s) a ese caso. Al

A veces puede resultar difcil ver claro donde usar un else o qu instrucciones de
las que siguen a un if deben ir entre llaves y cuales no. Generalmente la
dificultad est en el hecho de intentar teclear directamente un programa en C, en
vez de pensar en el problema que se pretende resolver.
Para ayudarnos a centrarnos en el problema, existen notaciones grficas, como
los diagramas de flujo, que nos permiten ver mejor qu se debe hacer y cuando.
En primer lugar, vamos a ver los 4 elementos bsicos de un diagrama de flujo, y
luego los aplicaremos a un caso concreto.

El inicio o el final del programa se indica dentro de un crculo. Los procesos


internos, como realizar operaciones, se encuadran en un rectngulo. Las entradas
y salidas (escrituras en pantalla y lecturas de teclado) se indican con un
paralelogramo que tenga su lados superior e inferior horizontales, pero no tenga
verticales los otros dos. Las decisiones se indican dentro de un rombo.
Vamos a aplicarlo al ejemplo de un programa que pida un nmero al usuario y diga
si es positivo, negativo o cero:

El paso de aqu al correspondiente programa en lenguaje C (el que vimos en el


ejemplo 19) debe ser casi inmediato: sabemos como leer de teclado, como escribir
en pantalla, y las decisiones sern un if, que si se cumple ejecutar la sentencia
que aparece en su salida si y si no se cumple (else) ejecutar lo que aparezca
en su salida no.
Ejercicios propuestos:

Crear el diagrama de flujo y la versin en C de un programa que d al


usuario tres oportunidades para adivinar un nmero del 1 al 10.

Crear el diagrama de flujo para el programa que pide al usuario dos


nmeros y dice si uno de ellos es positivo, si lo son los dos o si no lo es
ninguno.
Crear el diagrama de flujo para el programa que pide tres nmeros al
usuario y dice cul es el mayor de los tres.

3.1.9. Operador condicional: ?


En C hay otra forma de asignar un valor segn se d una condicin o no. Es el
operador condicional ? : que se usa
condicion ? valor1 : valor2;
y equivale a decir si se cumple la condicin, toma el valor v1; si no, toma el valor
v2. Un ejemplo de cmo podramos usarlo sera
numeroMayor = (a>b) ? a : b;
que, aplicado a un programa sencillo, podra ser

/*---------------------------*/
/* Ejemplo en C n 23:
*/
/* C023.C
*/
/*
*/
/* El operador condicional */
/*
*/
/* Curso de C,
*/
/*
Nacho Cabanes
*/
/*---------------------------*/
#include <stdio.h>
int main()
{
int a, b, mayor;

printf("Escriba un nmero: ");


scanf("%d", &a);
printf("Escriba otro: ");
scanf("%d", &b);
mayor = (a>b) ? a : b;
printf("El mayor de los nmeros es %d.\n", mayor);
return 0;
}

Un segundo ejemplo, que sume o reste dos nmeros segn la opcin que se
escoja, sera:

/*---------------------------*/
/* Ejemplo en C n 24:
*/
/* C024.C
*/
/*
*/
/* Operador condicional - 2 */
/*
*/
/* Curso de C,
*/
/*
Nacho Cabanes
*/
/*---------------------------*/
#include <stdio.h>
int main()
{
int a, b, resultado;
int operacion;
printf("Escriba un nmero: ");
scanf("%d", &a);

scanf("%d", &b);
printf("Escriba una operacin (1 = resta; otro = suma): ");
scanf("%d", &operacion);
resultado = (operacion == 1) ? a-b : a+b;
printf("El resultado es %d.\n", resultado);
return 0;
}

Ejercicios propuestos:

Crear un programa que use el operador condicional para mostrar un el valor


absoluto de un nmero de la siguiente forma: si el nmero es positivo, se
mostrar tal cual; si es negativo, se mostrar cambiado de signo.
Crear un programa que use el operador condicional para dar a una variable
llamada iguales (entera) el valor 1 si los dos nmeros que ha tecleado el
usuario son iguales, o el valor 0 si son distintos.
Usar el operador condicional para calcular el mayor de dos nmeros.

3.1.10. switch
Si queremos ver varios posibles valores, sera muy pesado tener que hacerlo con
muchos if seguidos o encadenados. La alternativa es la orden switch, cuya
sintaxis es
switch (expresin)
{
case valor1: sentencia1;
break;
case valor2: sentencia2;
sentencia2b;
break;
...
case valorN: sentenciaN;
break;

default:
otraSentencia;
};
Es decir, se escribe tras switch la expresin a analizar, entre parntesis.
Despus, tras varias rdenes case se indica cada uno de los valores posibles.
Los pasos (porque pueden ser varios) que se deben dar si se trata de ese valor se
indican a continuacin, terminando con break. Si hay que hacer algo en caso de
que no se cumpla ninguna de las condiciones, se detalla tras default.
Vamos con un ejemplo:

/*---------------------------*/
/* Ejemplo en C n 25:
*/
/* C025.C
*/
/*
*/
/* La orden switch
*/
/*
*/
/* Curso de C,
*/
/*
Nacho Cabanes
*/
/*---------------------------*/
#include <stdio.h>
int main()
{
char tecla;
printf("Pulse una tecla y luego Intro: ");
scanf("%c", &tecla);
switch (tecla)
{
case ' ': printf("Espacio.\n");
break;

case
case
case
case
case
case
case
case
case

'2':
'3':
'4':
'5':
'6':
'7':
'8':
'9':
'0': printf("Dgito.\n");
break;
default: printf("Ni espacio ni dgito.\n");
}
return 0;
}

Ejercicios propuestos:

Crear un programa que lea una letra tecleada por el usuario y diga si se
trata de una vocal, una cifra numrica o una consonante.
Crear un programa que lea una letra tecleada por el usuario y diga si se
trata de un signo de puntuacin, una cifra numrica o algn otro carcter.
Repetir los dos programas anteriores, empleando if en lugar de switch.

Anda mungkin juga menyukai