Vous êtes sur la page 1sur 38

Unidad 4.

Estructuras de Decisin y
Control
4.1 Estructura secuencial
Concepto
Una estructura secuencial es aquella en la que las instrucciones estan una a continuacin de la
otra siguiendo una secuencia nica, sin cambios de ruta. La estructura secuencial tiene una
entrada y una salida.
En la Figura 4.1 se muestra el diagrama de flujo y el pseudocdigo de una estructura secuencial.

Diagrama de Flujo

Pseudocdigo
Inicio
.
accin
accin
accin
Fin

.
1
2
3
.

Figura 2.1 Estructura Secuencial: Diagrama de Flujo y Pseudocdigo

Ejercicios
Ejercicio 1:- Disee un pseudocdigo que halle el rea y el permetro de un rectngulo. Considere
que: area = base x altura y perimetro = 2 x (base+altura).
Algoritmo
INICIO
//
REAL

Declaracin
base,

//
LEER

Entrada

//

Proceso

de
altura,
de
base,
de

variables
area,

perimetro

datos
altura
clculo

area
perimetro
//

=
=

Salida
IMPRIMIR

de

base*altura
2*(base+altura)
resultados

area,

perimetro

FIN
Ejemplo 2:- Disee un pseudocdigo para convertir una longitud dada en metros a sus
equivalentes en centmetros, pies, pulgadas y yardas. Considere que: 1 metro = 100 centmetros, 1
pulgada = 2.54 centimetros, 1 pie = 12 pulgadas, 1 yarda = 3 pies.
Algoritmo
INICIO
//

Declaracin
REAL cmetr,ccent,

//
LEER

Entrada

//
ccent
cpulg
cpies
cyard

Proceso

//

de
cpies,

variables
cpulg,
cyard

de
cmetr
de

datos
clculo
cmetr*100

ccent/2.54
cpulg/12
cpies/3

=
=

Salida
IMPRIMIR

de

cpulg,

cpies,

resultados
cyard

FIN
Ejercicio 3:- Una institucin benfica europea ha recibido tres donaciones en soles, dolares y
marcos. La donacin ser repartida en tres rubros: 60% para la implementacin de un centro de
salud, 40% para un comedor de nios y el resto para gastos administrativos. Disee un algoritmo
que determine el monto en euros que le corresponde a cada rubro. Considere que: 1 dlar = 3.52
soles, 1 dlar = 2.08 marcos, 1 dlar = 1.07 euros.
Algoritmo
INICIO
//
Declaracin
de
variables
REAL c soles, cdolares, c marcos, ceuros, rubro1, rubro2, rubro3
//
LEER
ceuros

//

Entrada
csoles,
Proceso
(csoles/3.52
rubro1
rubro2
rubro3

//
IMPRIMIR
FIN

Salida

rubro1,

de
cdolares,
de
cdolares
=
=
=
de

datos
cmarcos

clculo
cmarcos/2.08)*1.07
ceuros*0.60
ceuros*0.40
ceuros*0.20

resultados
rubro2,

rubro3

Ejercicio 4:- En una competencia atltica de velocidad el tiempo se mide en minutos, segundos y
centsimas de segundo y, el espacio recorrido se mide en metros. Disee un algoritmo para
determinar la velocidad promedio de un atleta en km/hr. Considere que: 1 hora = 60 minutos, 1
minuto = 60 segundos, 1 segundo = 100 centsimas de segundo, 1 kilmetro = 1000 metros.
Algoritmo
INICIO
//

Declaracin
ENTERO tmin,
thor,

REAL
//
LEER

Clculo

//

de
tseg,

del
tiempo
tmin/60
+
del
espkm

Clculo
velkmhr
//

espmt,

tcen
espkm

datos
tcen,

espmt

total
empleado
tseg/3600
+

espacio
de

variables

tseg,

velkmhr,

Entrada
tmin,

//
Clculo
thor
=
//

de

recorrido
=

la

Salida
IMPRIMIR

en

velocidad
=
de

en
horas
tcen/360000
kilmetros
espmt/1000
en

resultados

km/hr
espkm/thor
velkmhr

FIN
Ejercicio 5:- Disee un algoritmo que determine la cifra de las unidades de un nmero natural.
Solucin 1
Anlisis
Puede comprobarse que la cifra de las unidades de un nmero es igual al resto de la divisin del
nmero entre 10. Observe para ello las siguientes divisiones:
3245
5

10
324

768
8

10
76

9
9

10
0

Podemos concluir entonces que:


unidades = numero % 10
Siendo % el operador residuo. Este operador permite obtener el residuo de una divisin, as como /
permite obtener el cociente.

Algoritmo
INICIO
//

Declaracin
ENTERO

//
//
unidades
//
FIN

de
numero,

variables

de

datos

Entrada
LEER

numero

Proceso
=

de
numero

Salida
IMPRIMIR

unidades

clculo
%

de

10

resultados
unidades

Solucin 2
Anlisis
El residuo de una divisin entera puede obtenerse tambin sin recurrir al operador %, de la
siguiente forma:
unidades = numero - (numero / 10) * 10
observe para esto que en la divisin (numero/10) los operandos son enteros por lo que el cociente
ser un entero. As por ejemplo, si numero es igual a 3245, la divisin (numero/10) produce 324,
aunque matemticamente sea 324.5; es decir, se descarta la parte decimal.
Algoritmo
INICIO

//

ENTERO
//

LEER

//
unidades
IMPRIMIR

//

Declaracin
numero,

de

unidades

Entrada
Proceso
=
Salida

variables

de

datos

de
numero
de

numero

clculo
(numero/10)*10
resultados

unidades

FIN
Ejercicio 6:- Disee un algoritmo que determine la suma de las cifras de un nmero entero positivo
de 4 cifras.
Solucin 1
Anlisis

Las cifras pueden ser obtenidas mediante divisiones sucesivas entre 10. Para el efecto, considere
el caso de un nmero N igual a 3245:
3245
5

10
324

unidades
cociente = N/10
324
4

N%10

10
32

decenas
cociente = cociente/10
32
2

cociente%10

cociente%10

10
3

centenas
millares = cociente/10
Algoritmo
INICIO

//
Declaracin
de
variables
ENTERO N, suma, millares, centenas, decenas, unidades, resto
LEER

//

Entrada

//
unidades
cociente
decenas
cociente
centenas
millares
suma
=
IMPRIMIR

de

Proceso

de

datos
clculo

=
=

unidades
//

+
Salida

=
=
=
=
decenas

+
de

centenas

N%10
N/10
cociente%10
cociente/10
cociente%10
cociente/10
+
millares

resultados

suma

FIN
Solucin 2
Anlisis 2
Considerando que el nmero tiene 4 cifras, las cifras tambin pueden ser obtenidas mediante
divisiones sucesivas entre 1000, 100 y 10. Para el efecto, considere el caso de un nmero N igual
a 3245:
3245

1000

245

millares
resto
= N%1000
245
45

N/1000

100
2

centenas
resto
= resto%100
45
3

resto/100

10
4

decenas
unidades = resto%10

resto/10

Algoritmo
INICIO

//
Declaracin
de
variables
ENTERO N, suma, millares, centenas, decenas, unidades, resto
//
//

suma

=
//

Entrada
LEER
Proceso
millares
resto
centenas
resto
decenas
unidades

de
de
=
=

decenas

Salida

=
=

de

datos
N
clculo

N/1000
N%1000
resto/100
resto%100
resto/10
unidades = resto%10
centenas
+
millares
resultados

IMPRIMIR

FIN

suma

Ejercicio 7:- Disee un algoritmo que lea la hora actual del da HH:MM:SS y determine cuantas
horas, minutos y segundos restan para culminar el da.
Algoritmo
INICIO
ENTERO

//
hor1,

Declaracin
min1, seg1, hor2,

//
LEER

Entrada
hor1,

de
min2,
de
min1,

seg2,

variables
segres,

resto

datos
seg1

// Clculo de la cantidad de segundos que restan para culminar el da

segres
//

86400

Descomposicin de
hor2
resto
min2
seg2
//

(hor1*3600

segres

Salida

horas,
=
=
=
=

min1*60
minutos

de

IMPRIMIR

FIN

en

seg1)

segundos
segres/3600
segres%3600
resto/60
resto%60

resultados
min2,

hor2,

seg2

Ejercicio 8:- Disee un algoritmo para sumar dos tiempos dados en horas, minutos y segundos.
Algoritmo
INICIO

//
Declaracin
de
variables
ENTERO hor1, min1, seg1, hor2, min2, seg2, hor3, min3, seg3, totseg,
resto
//
hor1,

LEER

Entrada
min1,
seg1,

de
hor2,

datos
min2,

seg2

// Determina la cantidad total de segundos entre los dos tiempos


totseg
=
(hor1+hor2)*3600
+
(min1+min2)*60
+
(seg1+seg2)
//

Descompone
totseg
hor3
resto
min3
seg3
//

en

Salida

minutos

de

IMPRIMIR

FIN

horas,
=
=
=
=

segundos
totseg/3600
totseg%3600
resto/60
resto%60

resultados
min3,

hor3,

seg3

Ejercicio 9:- El sueldo neto de un vendedor se calcula como la suma de un sueldo bsico de
S/.250 ms el 12% del monto total vendido. Disee un algoritmo que determine el sueldo neto de
un vendedor sabiendo que hizo tres ventas en el mes.
Algoritmo
INICIO
REAL

//
venta1,
//
LEER

//
ventatot

Declaracin
venta2,
venta3,

de
ventatot,

Entrada
venta1,

=
comision
sueldoneto

Proceso
venta1
=

de

=
250

variables
comision,
sueldoneto

venta2,
de
venta2
+

datos

venta3

clculo
+
venta3
0.12*ventatot
comision

//

Salida
IMPRIMIR

de

resultados

sueldoneto

FIN
Ejercicio 10:- Disee un algoritmo que determine el porcentaje de varones y de mujeres que hay
en un saln de clases.
Algoritmo
INICIO
//

Declaracin
REAL
ENTERO
varones,

de
porcvar,

//

de
varones,

Entrada

LEER

//
total
porcvar
porcmuj
//

variables
mujeres,
datos

Proceso
=

de
varones
=
=

Salida
IMPRIMIR

de
porcvar,

porcmuj
total
mujeres

clculo
+
mujeres
varones*100.0/total
mujeres*100.0/total
resultados

porcmuj

FIN
Ejercicio 11:- En pases de habla inglesa es comn dar la estatura de una persona como la suma
de una cantidad entera de pies ms una cantidad entera de pulgadas. As, la estatura de una
persona podra ser 3' 2" ( 3 pies 2 pulgadas ). Disee un algoritmo que determine la estatura de
una persona en metros, conociendo su estatura en el formato ingls. Considere que: 1 pie = 12 plg,
1 plg = 2.54 cm, 1 m = 100 cm.
Algoritmo
INICIO
//

//
//
estmt
//
FIN

Declaracin
REAL
ENTERO
LEER
=

de
cpies,

Entrada

de
cpies,

Proceso
(cpies*12
Salida

IMPRIMIR

variables

de

de
+

datos

estmt
cplgs
cplgs

clculo
cplgs)*2.54/100
resultados

estmt

Ejercicio 12:- Disee un algoritmo que exprese la capacidad de un disco duro en megabytes,
kilobytes y bytes, conociendo la capacidad del disco en gigabytes. Considere que: 1 kilobyte =
1024 bytes, 1 megabyte = 1024 kilobyte, 1 gigabyte = 1024 megabytes.
Algoritmo
INICIO
//
REAL

Declaracin
de
cgigabyte,
cmegabyte,

//
//

Entrada
LEER
Proceso
cmegabyte
ckilobyte
cbyte

//
IMPRIMIR

FIN

variables
ckilobyte,

de

cbyte

datos
cgigabyte

de
=
=

Salida
de
cmegabyte,

clculo
cgigabyte*1024
cmegabyte*1024
ckilobyte*1024
resultados
ckilobyte,

cbyte

Ejercicio 13:- Disee un algoritmo que intercambie las cifras de las unidades de dos nmeros
naturales.
Algoritmo
INICIO

//
ENTERO

Declaracin
de
numero1,
numero2,

//
//

LEER

Entrada

//
FIN

de
numero1,

Determina
las
unidades1
unidades2

//
Intercambia
las
numero1
=
numero1
numero2
=
numero2
Salida
IMPRIMIR

variables
unidades1,
unidades2

cifras

datos

de
=
=

cifras
de
unidades1
unidades2
de

las

las
+
+

numero2
unidades
n1%10
n2%10

unidades
unidades2
unidades1

resultados
n1,

http://www.geocities.com/david_ees/Algoritmia/cap02.htm

Estructura Secuencial

n2

Es aqulla en la que una accin (instruccin) sigue a otra en secuencia. Las


tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y
as suscesivamente hasta el fin del proceso. La estructura secuencial tiene una
entrada y una salida. Su representacin grfica es la siguiente:

ESTRUCTURA SECUENCIAL

....

DIAGRAMA N-S DE UNA ESTRUCTURA SECUENCIAL

PSEUDOCODIGO DE UNA ESTRUCTURA SECUENCIAL


Inicio
:
:
acciones
:
:
fin

Ejemplo:
Calcular el salario neto de un trabajador en funcin del nmero de horas
trabajadas, precio de la hora de trabajo y considerando unos descuentos fijos al
sueldo bruto en concepto de impuestos (20 por 100).

Pseudocdigo
Inicio
{clculo salario neto}
leer nombre, horas, precio_hora
salario_bruto
impuestos
salario_neto

horas * precio
0.20 * salario_bruto
salario_bruto_impuestos

escribir nombre, salario_bruto, salario_neto_bruto, salario_neto

Fin

Diagrama de flujo

Diagrama N-S

4.2Estructuras de Transferencia Incondicionales


4.3Estructuras de Transferencia Condicionales
Estructuras Condicionales
En este captulo se revisan los distintos mtodos con los que C controla el flujo lgico de
un programa.
Como se revis en el captulo anterior, los operadores relaciones binarios que se usan son:
==, !=, <, <=, >

y >=

adems los operadores lgicos binarios:


||, &&
y el operador lgico unario de negacin !, que slo toma un argumento.

Los operadores anterior son usados con las siguientes estructuras que se muestran.

La sentencia if
Las tres formas como se puede emplear la sentencia if son:
if (condicion)
sentencia;

...o

if (condicion)
sentencia1;
else
sentencia2;

...o
if (condicion1)
sentencia1;
else if (condicion2)
sentencia2;

...
else
sentencian;

El flujo lgico de esta estructura es de arriba hacia abajo. La primera sentencia se ejecutar
y se saldr de la estructura if si la primera condicin es verdadera. Si la primera condicin
fue falsa, y existe otra condicin, se evala, y si la condicin es verdadera, entonces se
ejecuta la sentencia asociada. Si existen ms condiciones dentro de la estructura if, se van
evaluando stas, siempre y cuando las condiciones que le precedan sean falsas.
La sentencia que esta asociada a la palabra reservada else, se ejecuta si todas las
condiciones de la estructura if fueron falsas.
Por ejemplo:
main()
{
int x, y, w;
........

if (x>0)
{
z=w;
.......
}
else
{
z=y;
.......
}

El operador ?
El operador ternario condicional ? es ms eficiente que la sentencia if. El operador ? tiene
el siguiente formato:
expresion1 ? expresion

2 : expresion3;
Que es equivalente a la siguiente expresin:

if (expresion1) then expresion2 else expresion3;


Por ejemplo, para asignar el mximo de a y b a la variable z,

usando ?, tendramos:

z = (a>b) ? a : b;

que es lo mismo que:


if (a > b)
z = a;
else
z = b;

El uso del operador ? para reemplazar las sentencias if ... else no se restringe slo a
asignaciones, como en el ejemplo anterior. Se pueden ejecutar una o ms llamadas de
funcin usando el operador ? ponindolas en las expresiones que forman los operandos,
como en el ejemplo siguiente:
f1(int n)
{
printf("%d ",n);
}
f2()
{
}

printf("introducido\n");

main()
{
int t;
printf(": ");
scanf("%d",&t);
/* imprime mensaje apropiado */
t ? f1(t) + f2() : printf("Se di un cero\n");
}

La sentencia switch
Aunque con la estructura if ... else if se pueden realizar comprobaciones mltiples,
en ocasiones no es muy elegante, ya que el cdigo puede ser difcil de seguir y puede
confundir incluso al autor transcurrido un tiempo. Por lo anterior, C tiene incorporada una
sentencia de bifurcacin mltiple llamada switch. Con esta sentencia, la computadora
comprueba una variable sucesivamente frente a una lista de constantes enteras o de caracter.
Despus de encontrar una coincidencia, la computadora ejecuta la sentencia o bloque de
sentencias que se asocian con la constante. La forma general de la sentencia switch es:
switch (variable) {
case constante1:
secuencia

break;
case constante2:

de

sentencias

secuencia

de

sentencias

de

sentencias

break;
case constante3:
secuencia

break;
...
default:
secuencia de sentencias
}

donde la computadora ejecuta la sentencia default si no coincide ninguna constante con la


variable, esta ltima es opcional. Cuando se encuentra una coincidencia, la computadora
ejecuta las sentencias asociadas con el case hasta encontrar la sentencia break con lo que
sale de la estructura switch.
Las limitaciones que tiene la sentencia switch ... case respecto a la estructura if son:

Slo se tiene posibilidad de revisar una sola variable.

Con switch slo se puede comprobar por igualdad, mientras que con if
puede ser con cualquier operador relacional.

No se puede probar ms de una constante por case.

La forma como se puede simular el ltimo punto, es no teniendo sentencias asociados a un


case, es decir, teniendo una sentencia nula donde slo se pone el caso, con lo que se
permite que el flujo del programa caiga al omitir las sentencias, como se muestra a
continuacin:
switch (letra)
{
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
numvocales++;
break;
case ' ':
numesp++;
break;
default:
numotras++;
break;
}

Ejercicios
1. Escribir un programa que lea dos caracteres, e imprima su valor cuando se pueda
interpretar como un nmero hexadecimal. Aceptar letras maysculas y minsculas
para los valores del 10 al 15.
2. Leer un valor entero. Suponer que el nmero es un da de la semana. Suponer que 0
corresponde a Domingo y as sucesivamente. Imprimir el nombre del da.
3. Dados como entrada 3 enteros representando la fecha como da, mes, ao, imprimir
la fecha del da anterior. Por ejemplo para una entrada como: 1 3 1992 La salida
ser: Fecha anterior a 1-3-1992 es 29-02-1992
4. Escribir un programa el cual lea dos valores enteros. Si el primero es menor que el
segundo, que imprima el mensaje ``Arriba''. Si el segundo es menor que el primero,
que imprima el mensaje ``Abajo''. Si los nmeros son iguales, que imprima el
mensaje ``igual''. Si hay un error en la lectura de los datos, que imprima un mensaje
conteniendo la palabra ``Error'' y haga exit( 0 );
http://garota.fismat.umich.mx/mn1/manual/node4.html

Condicionales
La especificacin formal de algoritmos tiene realmente utilidad cuando el
algoritmo requiere una descripcin ms complicada que una lista sencilla de
instrucciones. Este es el caso cuando existen un nmero de posibles alternativas
resultantes de la evaluacin de una determinada condicin.
Las estructuras selectivas se utilizan para tomar decisiones lgicas; de ah
que se suelan denominar tambin estructuras de decisin o alternativas.
En las estructuras selectivas se evala una condicin y en funcin del
resultado la misma se realiza una opcin u otra. Las condiciones se especifcan
usando expresiones lgicas. La representacin de una estructura selectiva se hace
con palabras en pseudocdigo (if, then, else o bien en espaol si, entonces, sino),
con una figura geomtrica en forma de romba o bien con un tringulo en el
interior de una caja rectangular.

Las estructuras selectivas o alternativas pueden ser:

Simples

Mltiples

Alternativa Simple (si-entonces/if-then)


La estructura alternativa simple si-entonces (en ingls if-then o bien IFTHEN ) ejecuta una determinada accin cuando se cumple una determinada
condicin. La seleccin si-entonces evala la condicin y . . .
Si la condicin es verdadera, entonces ejecuta la accin S1 (o acciones
caso de ser S1 una

accin compuesta y constar de varias acciones).

Si la condicin es falsa, entonces no hacer nada.

A continuacin se muestra la grfica de la estructura condicional simple.

Pseudocdigo en espaol

Si

<condicin> Entonces
<accin S1>

Fin_si

Pseudocdigo en ingls
If

<condicin> then
<accin S1>

end_if

Diagrama N-S

Alternativas Mltiples (segn_sea, caso de / case)


Cuando existen ms de dos elecciones (alternativas) posibles, es cuando se
presenta el caso de alternativas mltiples. Si el nmero de alternativas es grande
puede plantear serios problemas de escritura del algoritmo y naturalmente de
legibilidad.

La estrucura de decisin mltiple evaluar una expresin que podr tomar n


valores distintos 1,2,3,4,..n . Segn que elija uno de estos valores en la condicin,
se realizara una de las n acciones, o lo que es igual, el flujo del algoritmo
seguir un determinado camino entre los n posibles.

La representacin grfica se muestra a continuacin:

Diagrama de Flujo

Diagrama N-S
Modelo 1

Modelo 2

Pseudocdigo
En ingls la estructura de decisin mltiple se representa

Case expresin of
[e1]: accin S1
[e2]: accin S2
:
[en]: accin Sn

else

accin Sx

end_case

Ejemplo:
Se desea disear un algoritmo que escriba los nombres de los das de la
semana en funcin del valor de una variable DIA introducida por teclado.
Los das de la semana son 7; por consiguiente, el rango de valores de DIA
ser 1..7, y caso de que DIA tome un valor fuera de este rango se deber producir
un mensaje de error advirtiendo la situacin anmala.

Inicio
Leer DIA
Segn_sea DIA hacer
1: escribir('Lunes')
2: escribir('Martes')
3: escribir('Mircoles')
4: escribir('Jueves')
5: escribir('Viernes')
6: escribir('Sabado')
7: escribir('Domingo')
else
escribir('Error')

fin_segn
fin
Ifs anidados
En algunas aplicaciones, una de las alternativas de una estructura if-then-else
puede incluir un decisin adicional. Por ejemplo, despus de que se elija una
determinada accin sobre una determinada calificacin de una prueba, podra
quererse evitar la posibilidad de error en los datos de entrada. Esto requiere una
comprobacin adicional para verificar que los datos de entrada son validos, lo que
sugiere el uso de una estructura if-then-else adicional incluida en cada una de las
dos alternativas originales. Este proceso es un ejemplo de anidamiento.
Ejemplo:
Algoritmo MAX_3
Este algoritmo lee tres nmeros A, B, C, imprimiendo el valor del ms grande. Se
supone que los tres valores son diferentes.
1.- Entrada de valores
Read (A, B, C)
2.- Se determina el valor ms grande mediante comprobacin por pares
if A > B
then if A > C
then MAX A (A > B, A > C)
else MAX C (C > A > B)
else if B > C
then MAX B (B > A, b > C)
else MAX C (C > B > A)
3.- Se imprime el valor ms grande
Write `El valor ms grande es`, MAX
4.- Termino

Exit
Condiciones compuestas
Estas condiciones se obtienen a partir de las expresiones simples, utilizando los
operadores lgicos and, or y not.
Los significados de estos operadores se describen adecuadamente por medio de
las tablas de verdad.
Las condiciones compuestas pueden utilizarse ya sea en enunciados if o en
repeticiones condicionales. Ejemplo:
Algoritmo MAX_3 (2a. versin)
Este algoritmo lee tres nmeros A, B, C, imprime el valor del ms grande de ellos.
Se supone que los tres valores son distintos.
1. - Entrada de los datos
Read (A, B, C)
2. - Se determina el mayor valor
if A > B and A > C then MAX A
if B > A and B > C then MAX B
if C > A and C > B then MAX C
3. - Se imprime el valor ms grande
Write `El valor ms grande es`, MAX
4. - Termino
http://nayar.uan.mx/~iavalos/Estructuras%20de%20desicion.html

4.4Estructuras Repetitivas (Bucles)


Estructuras Repetitivas (Ciclos)
En C existen 3 estructuras repetitivas: while, for y do .. while

Estructura While
Sintaxis:

while(condicin)
Accin;
En este caso, la sentencia Accin es ejecutada mientras el condicional condicin
se evala verdadera (distinta de 0)
En el caso de que el cuerpo del while (acciones a ejecutar en caso de que el
condicional se verifique) posea ms de una sentencia, todas ellas son encerradas
entre llaves:

while(condicin)
{
Accin1;
Accin2;
...
}
El condicional es una expresion relacional que puede involucrar operadores
relacionales (>, <, >=, <=, ==, !=) y/o operadores logicos (&&, ||, !)
Ejemplo:
/*
Programa que imprime la tabla de conversin de
Fahrenheit a Celsius para F = 0, 20, 40,..., 300
*/
#include <stdio.h>
int main()
{
int Lower, Upper, Step;
float Fahr, Celsius;
Lower = 0;
Upper = 300;
Step = 20;
Fahr = Lower;
while(Fahr <= Upper)
{
Celsius = (5.0/9.0) * (Fahr - 32.0);
printf("%4.0f F -> %6.1f C\n", Fahr, Celsius);
Fahr = Fahr + Step;
} /* fin del while */

return 0;
} /* fin del main */

NOTAS:
Lazo while(...) { ... }
Lo que se encuentra entre parntesis es una expresin a evaluar.
Mientras el resultado de la misma sea distinto de cero, se ejecutan las
sentencias asociadas que se encuentran encerradas entre llaves. A
este tipo de sentencias se las llama sentencias compuestas. Si el
cuerpo de esta sentencia consiste en una sola sentencia simple,
pueden omitirse las llaves. Las sentencias compuestas no llevan el
carcter ; como terminador. Para mejorar la legibilidad del programa,
conviene indentar las sentencias compuestas.
Clculo y asignacin:
Celsius = (5.0/9.0) * (Fahr - 32.0)
El punto decimal en los operandos de la divisin es requerido para que
la operacin sea llevada en punto flotante; de lo contrario la misma se
efecta como cociente de nmeros enteros, truncando por lo tanto el
resultado a cifras enteras. En nuestro caso sera truncado a 0.
Estructura for
Esta estructura es una generalizacin de la estructura while usada en el ejercicio
anterior. Su funcin es ejecutar iterativamente el cuerpo del bloque, que como en
el caso del while puede ser simple o compuesto. La definicin de esta estructura
de control posee 3 partes separadas por el carcter ";".

for(a; b; c)
{
...
...
}
La parte a es la de inicializacin, y puede poseer una sentencia, ninguna, o varias
separadas por el carcter ",". Esta parte se ejecuta inmediatamente antes de
entrar en el ciclo.
La parte b es el criterio o condicin de control de la iteracin. Se evala antes de
entrar a cada ciclo, inclusive en la primer iteracin. Si su resultado es distinto de
cero se ejecuta el ciclo; sino se abandona el ciclo y se sigue con la sentencia
posterior al cuerpo del for.
La parte c es la reinicializacin, que es ejecutada al final de cada ciclo.
Podemos simular el bloque for con la siguiente lgica:

a;
while(b)
{
...
...
c;
}
Ejemplo:
/* Tabla de conversin de grados F a Celsius
utilizando constantes simblicas y bloque for */
#include <stdio.h>
#define LOWER 0
#define UPPER 300
#define STEP 20
main()
{
int Fahr;
for(Fahr = LOWER; Fahr <= UPPER; Fahr += STEP)
printf("%4.0f F -> %6.1f C\n", Fahr, (5.0/9.0)*
(Fahr - 32));
}
NOTA:
Uso de constantes simblicas. Cuando se requieran valores numricos
constantes en un programa, deben definirse como constantes y no usar sus
valores numricos dentro del programa. C permite definir constantes simblicas
(directiva #define al preprocesador) que asocian un smbolo (LOWER, UPPER,
STEP) con una expresin (0,300 y 20 respectivamente) de tal manera que el
preprocesador reemplaza cualquier ocurrencia de esos smbolos por sus
expresiones asociadas
Estructura Do-While
la estructura de control do-while es una variacin sobre el bloque while

do
{
Accin1;
Accin2;
...
}while(condicin);

La diferencia esta en que la condicin se chequea al final y las acciones son


ejecutadas al menos una vez. Por ejemplo
/*

Programa que pide al usuario un nmero entero entre 1 y 10.


Se contina pidiendo el valor hasta que cumpla la condicin
*/
#include <stdio.h>
int main()
{
int n, error;
do {
printf("Ingrese un nmero entero entre 1 y 10: ");
scanf("%d", &n);
if (error = (n < 1 || n > 10))
printf("\nERROR: Intentelo nuevamente!!\n\n");
} while(error);
/* ahora puedo procesar el valor ingresado sabiendo que es
correcto. */
return 0;
} /* fin del main */
http://www.ldc.usb.ve/~gabro/teaching/CI2125/Clase5_ciclos.htm

Estructuras Repetitivas
Las estructuras que repiten una secuencia de instrucciones un nmero
determinado de veces se denominan Bucles y se denomina Iteracin al hecho de
repetir la ejecucin de una secuencia de acciones. Entre las estructuras repetitivas
se encuentran:
Mientras (while)
Repetir (repeat)
Desde (for)

1.- Estructura Mientras (while)

La estructura repetitiva while, es aqulla en que el cuerpo del bucle se repite


mientras se cumple una determinada condicin, su representacin grfica es:

Pseudocdigo en espaol

Pseudocdigo en ingls

Mientras condicin hacer

while condicin do

Accin S1

<Acciones>

Accin S2

:
accin Sn
Fin_mientras

Diagrama N-S

End_while

Ejemplo:
Contar los nmeros enteros positivos introducidos por teclado. Se
consideran dos variables enteras NUMERO y CONTADOR (contar el nmero
de enteros positivos). Se supone que se leen nmeros positivos y se detiene el
bucle cuando se lee un nmero negativo o cero.

Pseudocdigo
Inicio
contador

Leer (numero)
Mientras numero > 0 hacer
contador

contador+1

Leer (numero)
Fin_Mientras
Escribir('El nmero de enteros positivos es : ', contador)
Fin

Diagrama de Flujo

Representacin en N-S

Unidad 3 Estructuras de Control


Unidad 3
Estructuras de Control
Las sentencias de control de programa gobiernan el flujo de la ejecucin del
programa en cualquier lenguaje de programacin.
Estas sentencias constan de una sentencia nica, un bloque de sentencias o
ninguna sentencia.
Las sentencias de control se dividen en 3 categoras
-Secuenciales
-Selectivas
-Repetitivas
Las Secuenciales se van a ejecutar en el mismo orden en las que van apareciendo
en el programa, es decir, una accin sigue a otra.
Las Selectivas se usa para tomar decisiones lgicas. En esta se evala una
condicin y en funcin del resultado de la misma se realiza una opcin u otra.
Las condiciones se especifican utilizando expresiones lgicas y relacionales.
En c++ existen tres tipos de estructura de seleccin.
En la Simple se ejecuta una accin si la condicin es verdadera, o pasa por alto la
accin si la condicin es falsa.
Selecciona o ignora una accin. En C/C++, se utiliza la estructura if (condicin).
En la Bicondicional se ejecuta una accin si la condicin es verdadera, o ejecuta
una accin diferente si la condicin es falsa.
Selecciona entre dos acciones distintas. En C/C++, se utiliza la estructura if
(condicin) else.
En la condicin mltiple se Ejecuta una de entre muchas acciones diferentes,
dependiendo del valor de una expresin.
Selecciona entre muchas acciones diferentes. En C/C++, se utiliza la estructura
switch (expresin).
-Repetitivas
Estas repiten una secuencia de instrucciones un nmero determinado de veces,
en tanto cierta condicin se mantenga verdadera.
Se conocen como bucles / iteracin por el hecho de repetir la ejecucin de una
secuencia de acciones.
C++ proporciona tres tipos de estructuras
-While
-For
-Do-while
Sentencia if
La instruccin if es, por excelencia, la ms utilizada para construir estructuras de
control de flujo.
SINTAXIS

Primera Forma
Ahora bin, la sintaxis utilizada en la programacin de C++ es la siguiente:
if (condicion)
{
Set de instrucciones
}
siendo "condicion" el lugar donde se pondr la condicion que se tiene que cumplir
para que sea verdadera la sentencia y asi proceder a realizar el "set de
instrucciones" o cdigo contenido dentro de la sentencia.
Segunda Forma
Ahora veremos la misma sintaxis pero ahora le aadiremos la parte "Falsa" de la
sentencia:
if (condicion)
{
Set de instrucciones //PARTE VERDADERA
}
else
{
Set de instrucciones 2 //Parte FALSA
}
La forma mostrada anteriormente muestra la union de la parte "VERDADERA" con
la nueva secuencia la cual es la parte "FALSA" de la sentencia de decision "IF" en
la cual esta compuesta por el:
else
{
Set de instrucciones 2 //Parte FALSA
}
la palabra "else" o "De lo contrario" indica al lenguaje que de lo contrario al no ser
verdadera o no se cumpla la parte verdadera entonces realizara el "set de
instrucciones 2".
Sentencia switch
switch es otra de las instrucciones que permiten la construccin de estructuras de
control. A diferencia de if, para controlar el flujo por medio de una sentencia switch
se debe de combinar con el uso de las sentencias case y break.
Notas: cualquier nmero de casos a evaluar por switch as como la sentencia
default son opcionales. La sentencia switch es muy til en los casos de
presentacin de menus.
Sintaxis:
switch (condicin)
{
case primer_caso:
bloque de instrucciones 1

break;
case segundo_caso:
bloque de instrucciones 2
break;
case caso_n:
bloque de instrucciones n
break;
default: bloque de instrucciones por defecto
}
Ejemplo 1
switch (numero)
{

case 0: cout << "numero es cero";


}

Sentencias de iteracin
Las Sentencias de Iteracin o Ciclos son estructuras de control que repiten la
ejecucin de un grupo de instrucciones. Bsicamente, una sentencia de iteracin
es una estructura de control condicional, ya que dentro de la misma se repite la
ejecucin de una o ms instrucciones mientras o hasta que una a condicin
especifica se cumpla. Muchas veces tenemos que repetir un nmero definido o
indefinido de veces un grupo de instrucciones por lo que en estos casos utilizamos
este tipo de sentencias. en C++ los ciclos o bucles se construyen por medio de las
sentencias for, while y do - while. La sentencia for es til para los casos en donde
se conoce de antemano el nmero de veces que una o ms sentencias han de
repetirse. Por otro lado, la sentencia while es til en aquellos casos en donde no
se conoce de antemano el nmero de veces que una o ms sentencias se tienen
que repetir.
Sentencias For
for(contador; final; incremento)
{

Codigo a Repetir;
}

donde:
1.

contador es una variable numrica

2.

final es la condicin que se evalua, o sea, el valor final para contador

3.

incremento es el valor que se suma o resta al contador

Ejemplo 1:
for(i=1; i<=10; i++)
{

cout<<"Hola Mundo";
}

Esto indica que el contador "i" inicia desde 1 y finaliza cuando el contador "i" sea
menor o igual a 10 ( en este caso llegar hasta 10) e "i++" realiza la sumatoria por
unidad lo que hace que el for y el contador se sumen. repitiendo 10 veces "HOLA
MUNDO" en pantalla.
Ejemplo 2:
for(i=10; i>=0; i--)
{

cout<<"Hola Mundo";
}

Este ejemplo hace lo mismo que el primero, salvo que el contador se inicializa a
10 en lugar de 1; y por ello cambia la condicin que se evalua as como como que
el contador se decrementa en lugar de ser incrementado.
[editar] Sentencia while
while(condicion)
{

codigo a Repetir
}

donde:
1.
condicion es la expresin a evaluar
Ejemplo 1:
int contador = 0;
while(contador<=10)
{

contador=contador+1;
cout<<"Hola Mundo";
}

El contador Indica que hasta que este llegue a el total de 10 entonces se detendr
y ya no se realizar el cdigo contenido dentro de la sentencia while, de lo
contrario mientras el "contador" sea menor a 10 entonces el cdigo contenido se
ejecutar desplegando hasta 10 veces "Hola Mundo" en pantalla.
[editar] Sentencia do - while
La sentencia do es usada generalmente en cooperacin con while para garantizar
que una o ms instrucciones se ejucuten al menos una vez. Por ejemplo, en la
siguiente construccin no se ejecuta nada dentro del ciclo while, el hecho es que
el contador inicialmente vale cero y la condicin para que se ejecute lo que est

dentro del while es "mientras el contador sea mayor que diez". Es evidente que a
la primera evaluacin hecha por while la condicin deja de cumplirse.
int contador = 0;
while(contador > 10)
{

contador ++;
cout<<"Hola Mundo";
}

Al modificar el segmento de cdigo anterior usando do tenemos:


int contador = 0;
do
{

contador ++;
cout<<"Hola Mundo";
}

while(contador > 10);


Observe cmo en el caso de do la condicin es evaluada al final en lugar de al
principio del bloque de instrucciones y, por lo tanto, el cdigo que le sigue al do se
ejecuta al menos la primera vez.
[editar] Sentencias break y continue
En la seccin (Sentencia switch) vimos que la sentencia break es utilizada con el
propsito de forzar un salto dentro del bloque switch hacia el final del mismo. En
esta seccin volveremos a ver el uso de break, salvo que esta ocasin la
usaremos junto con las sentecias for y la sentencia while. Adems, veremos el uso
de la sentencia continue.
[editar] break
La sentencia break se usa para forzar un salto hacia el final de un ciclo controlado
por for o por while.
Ejemplo:
En el siguiente fragmento de cdigo la sentencia break cierra el ciclo for cuando la
variable ( i ) es igual a 5. La salida para el mismo ser:

01234
for (i=0; i<10; i++) {
if (i == 5) break;
cout << i << " ";
}

[editar] continue
La sentencia continue se usa para ignorar una iiteracin dentro de un ciclo
controlado por for o por while.
Ejemplo:
En el siguiente fragmento de cdigo la sentencia continue ignora la iteracin
cuando la variable ( i ) es igual a 5. La salida para el mismo ser:

012346789
for (i=0; i<10; i++) {
if (i == 5) continue;
cout << i << " ";
}

Uso de break y continue junto con while


Los dos ejemplos anteriores se presentan en seguida, salvo que en lugar de for se
hace uso de while.
Nota: no deje de observar que la construccin del ciclo while para el caso de la
sentencia continue es diferente, esto para garantizar que el ciclo no vaya a caer en
una iteracin infinita.
break
int i = 0;
while (i<10) {
if (i == 5) break;
cout << i << " ";
i++;
}

continue
int i = -1;
while (i<10) {
i++;
if (i == 5) continue;
cout << i << " ";
}

Vous aimerez peut-être aussi