PDF de programación - Tema II - Programación estructurada

<<>>
Imágen de pdf Tema II - Programación estructurada

Tema II - Programación estructuradagráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 9 de Enero del 2018)
171 visualizaciones desde el 9 de Enero del 2018
1,6 MB
149 paginas
Tema II

Programaci¶on estructurada

Cap¶‡tulo 6

Instrucciones estructuradas

6.1 Composici¶on de instrucciones : : : : : : : : : : : : : : :

6.2

6.3

Instrucciones de selecci¶on : : : : : : : : : : : : : : : : :

Instrucciones de iteraci¶on : : : : : : : : : : : : : : : : :

86

88

94

6.4 Dise~no y desarrollo de bucles : : : : : : : : : : : : : : : 103

6.5 Dos m¶etodos num¶ericos iterativos : : : : : : : : : : : : 113

6.6 Ejercicios : : : : : : : : : : : : : : : : : : : : : : : : : : : : 117

En el cap¶‡tulo anterior se ha visto una breve introducci¶on a Pascal donde se
han presentado algunos tipos de datos e instrucciones b¶asicas. Hasta ahora todos
los ejemplos estudiados han sido de estructura muy simple: cada instrucci¶on se
ejecuta una s¶ola vez y adem¶as en el mismo orden en el que aparecen en el listado
del programa.

Para escribir programas que traten problemas m¶as arduos es necesario com-
binar las acciones primitivas para producir otras acciones m¶as complejas. Este
tipo de acciones combinadas se componen a partir de otras, m¶as sencillas, me-
diante tres m¶etodos fundamentales:
la secuencia o composici¶on, la selecci¶on y
la repetici¶on. Estos tres m¶etodos se describen informalmente como sigue:

- La forma m¶as simple de concatenar acciones es la composici¶on, en ella se
describe una tarea compleja como una sucesi¶on de tareas m¶as elementales.

- La selecci¶on de una alternativa tras valorar una determinada circunstancia

se re(cid:176)eja mediante las instrucciones if (en sus dos formas) y case.


86

Cap¶‡tulo 6.

Instrucciones estructuradas

- Finalmente, las instrucciones repetitivas (while, for y repeat) permiten
expresar en Pascal la repetici¶on de acciones, ya sea un n¶umero de veces
prefljado o no.

En los siguientes apartados estudiamos cada una de las construcciones ante-

riores junto con m¶etodos que permiten estudiar su correcci¶on.

6.1 Composici¶on de instrucciones

En bastantes ocasiones una tarea concreta se especiflca como una serie de
tareas que se ejecutan secuencialmente. Por ejemplo, si alg¶un d¶‡a alguien nos
pregunta c¶omo llegar a alg¶un sitio, la respuesta podr¶‡a ser parecida a ¶esta:

1. Tuerza por la segunda a la derecha.

2. Siga caminando hasta un quiosco.

3. Tome all¶‡ el autob¶us.

En el cap¶‡tulo anterior se us¶o, a¶un impl¶‡citamente, la composici¶on de instruc-
ciones simples para obtener una acci¶on m¶as compleja; en este apartado se pre-
senta su estudio completo.

En Pascal la composici¶on de instrucciones se realiza concatenando las instruc-
ciones y separ¶andolas con el car¶acter punto y coma (;). La construcci¶on de una
instrucci¶on compleja como una sucesi¶on de instrucciones simples se muestra en
el siguiente segmento de programa, que intercambia los valores de dos variables
num¶ericas a y b sin hacer uso de ninguna variable auxiliar:

begin

a:= a + b ;
b:= a - b ;
a:= a - b

end

Una composici¶on de instrucciones indica que las instrucciones citadas son
ejecutadas secuencialmente siguiendo el mismo orden en el que son escritas. El
diagrama sint¶actico de una instrucci¶on compuesta aparece en la flgura 6.1, y su
descripci¶on usando notaci¶on EBNF (v¶ease [PAO94], pg. 132{134) es la siguiente:

begin instrucci«on f; instrucci«ong end

6.1. Composici¶on de instrucciones

87

begin

Instrucci(cid:151)n

end

;

Figura 6.1. Diagrama sint¶actico de una instrucci¶on compuesta.

eerr T¶engase en cuenta que la interpretaci¶on del punto y coma es la de nexo o

separador de sentencias; por lo tanto no debe aparecer despu¶es de la ¶ultima
sentencia de la sucesi¶on.
Obs¶ervese adem¶as que el signiflcado de las palabras reservadas begin y end
es el de principio y fln de la composici¶on, esto es, act¶uan como delimitadores
de la misma. Despu¶es de esta interpretaci¶on es sencillo deducir que la
agrupaci¶on de una sola instrucci¶on, por ejemplo begin x:= x + 1 end, es
redundante, y equivalente a la instrucci¶on simple x:= x + 1. Asimismo,
resulta super(cid:176)uo anidar pares begin. . . end como en el programa de la
izquierda (que resulta ser equivalente al de la derecha).

begin

Read(x);
Read(y);
begin

x:= x + 1;
y:= y + 2

end;
WriteLn(x * y)

end

begin

Read(x);
Read(y);
x:= x + 1;
y:= y + 2;
WriteLn(x * y)

end

Para facilitar la legibilidad del programa es aconsejable mantener el san-
grado dentro de cada par begin-end, as¶‡ como la inclusi¶on de comentarios que
informen sobre el cometido de cada segmento de c¶odigo, como se indic¶o en el
apartado 5.2. Por ejemplo, en el programa anterior podr¶‡an haberse incluido
comentarios indicando los segmentos de lectura de datos, c¶alculo y resultado del
programa:

begin

fLectura de datos:g

Read(x);
Read(y);

fC¶alculos:g

x:= x + 1;
y:= y + 2;

88

Cap¶‡tulo 6.

Instrucciones estructuradas

(cid:13)
if

Expr. bool.

then
(cid:13)

Instrucci(cid:151)n

else(cid:13)

Instrucci(cid:151)n

Figura 6.2. Diagrama sint¶actico de if-then-else.

fResultados:g
WriteLn(x * y)

end

6.2

Instrucciones de selecci¶on

6.2.1 La instrucci¶on if-then-else

Esta instrucci¶on es el equivalente en Pascal a una expresi¶on condicional del
tipo si apruebo entonces ir¶e de vacaciones y si no tendr¶e que estudiar en verano,
con la cual se indica que dependiendo del cumplimiento o no de una condici¶on
se har¶a una cosa u otra.

En Pascal, la instrucci¶on if-then-else (en adelante, if) es la m¶as importante

instrucci¶on de selecci¶on. Su diagrama sint¶actico aparece en la flgura 6.2.

La interpretaci¶on de la sentencia de selecci¶on gen¶erica

if expresi«on booleana then instrucci«on-1 else instrucci«on-2

se puede deducir directamente de la traducci¶on del ingl¶es de sus t¶erminos:1 si la
expresi¶on booleana es evaluada a True entonces se ejecuta la instrucci«on-1 y en
caso contrario (se eval¶ua a False) se ejecuta la instrucci«on-2.

Un ejemplo t¶‡pico en el que aparece una instrucci¶on de selecci¶on podr¶‡a ser
el siguiente segmento de programa que calcula el m¶aximo de dos n¶umeros, x e
y, y lo almacena en la variable max:

if x > y then

max:= x

else

max:= y

Es importante sangrar adecuadamente el texto del programa para mantener
la legibilidad del c¶odigo obtenido. Por otra parte, nada nos impide que las accio-
nes que se emprendan tras evaluar el predicado sean acciones compuestas; en tal

1Hay que advertir que, si bien en ingl¶es se preflere el uso de otherwise al de else, aqu¶el resulta

ciertamente m¶as propenso a ser escrito incorrectamente.

6.2.

Instrucciones de selecci¶on

89

caso la instrucci¶on compuesta se pondr¶a entre las palabras begin y end como
se se~nal¶o en el apartado anterior.

Como muestra consid¶erese el reflnamiento del c¶odigo anterior:

if x > y then begin

max:= x;
WriteLn(’El m¶aximo es ’, x)

end
else begin
max:= y;
WriteLn(’El m¶aximo es ’, y)

end

Es aconsejable evitar la introducci¶on de c¶odigo redundante dentro de las
posibles alternativas, ya que se facilita en gran manera el mantenimiento del
programa. El segmento anterior es un (cid:176)agrante ejemplo de redundancia que
puede ser evitada f¶acilmente colocando el WriteLn una vez realizada la selecci¶on:

if x > y then

max:= x

else

max:= y; fFin del ifg

WriteLn(’El m¶aximo es ’, max)

eerr A efectos de la colocaci¶on de los puntos y comas debe tenerse en cuenta

que toda la construcci¶on if-then-else corresponde a una sola instrucci¶on,
y no es una composici¶on de las instrucciones if, then y else; en particular,
la aparici¶on de un punto y coma justo antes de un then o de un else dar¶a
como resultado un error sint¶actico (bastante frecuente, por cierto).

Una particularidad de esta instrucci¶on es que la rama else es opcional; en
caso de no ser incluida se ha de interpretar que cuando la expresi¶on booleana
resulta ser falsa entonces no se realiza ninguna acci¶on. Por esta raz¶on, la forma
if-then es ¶util como sentencia para controlar excepciones que pudieran afectar
el procesamiento posterior. Por ejemplo, en el siguiente fragmento de programa
se muestra el uso de la forma if-then como sentencia de control.

ReadLn(year);
feb:= 28;

if year mod 4 = 0 then

fNo siempre, ya que puede ser a~no bisiestog
feb:= 29;

WriteLn(’Este a~no Febrero tiene ’,feb,’ d¶‡as’)

90

Cap¶‡tulo 6.

Instrucciones estructuradas

El programa asigna a la variable feb el n¶umero de d¶‡as del mes febrero, en
general este n¶umero es 28 salvo para a~nos bisiestos.2

eerr Obs¶ervese el uso de los puntos y comas en el ejemplo anterior: la instrucci¶on

de selecci¶on acaba tras la asignaci¶on feb:= 29 y, al estar en una secuencia
de acciones, se termina con punto y coma.

Aunque, en principio, la instrucci¶on if s¶olo permite seleccionar entre dos
alternativas, es posible usarla para realizar una selecci¶on entre m¶as de dos op-
ciones: la idea consiste en el anidamiento, esto es, el uso de una instrucci¶on if
dentro de una de las ramas then o else de otra instrucci¶on if. Como ejemplo
sup¶ongase que se quiere desarrollar un programa que asigne a cada persona una
etiqueta en funci¶on de su altura (en cm), el siguiente fragmento de c¶odigo realiza
la selecci¶on entre tres posibilidades: que la persona sea de estatura baja, media
o alta.

if altura < 155 then

WriteLn(’Estatura Baja’)

else if altura < 185 then

WriteLn(’Estatura Media’)

else

WriteLn(’Estatura Alta’)

En el segmento anterior se asigna la etiqueta de estatura baja a quien mida menos
de 155 cm, de estatura media a quien est¶e entre 156 y 185 cm y de estatura alta
a quien mida 186 cm o m¶as.

El anidamiento de instrucciones if puede dar lugar a expresiones del tipo

if C1 then if C2 then I2 else I3

(6.1)

que son de interpretaci¶on ambigua en el siguiente sentido: >a cu¶al de las dos
instrucciones if pertenece la rama else? En realidad, la ambig˜uedad s¶olo existe
en la interpretaci¶on humana, ya que la sem¶antica de Pascal es clara:

El convenio que se sigue para eliminar la ambig˜uedad consiste en
emparejar cada rama else con el then \soltero" m¶as pr¶oximo.

Siguiendo el convenio expuesto, la e
  • Links de descarga
http://lwp-l.com/pdf8244

Comentarios de: Tema II - Programación estructurada (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad