Está en la página 1de 161

CAPITU LO

ALGORITMOS Y PROGRAMAS

CONTENIDO

1.1. Los sistemas de procesamiento de la informacin.


1.2. Concepto de algoritmo.
1.3. Los lenguajes de programacin.
1.4. Datos, tipos de datos y operaciones primitivas.
1.5. Constantes y variables.
1.6. Expresiones.
1.7. Funciones internas.
1.8. La operacin de asignacin.

1.9. Entrada y salida de informacin.


ACTIVIDADES DE PROGRAMACIN RESUELTAS,
EJERCICIOS.

La principal razn para.que.ras personas aprendan


renguajes

y tcnicas de
programacin es utirizar la computadora
como una herramienta para
resolver problemas. La resorucin de un probrema
exige ar ,n"na ro,

sguientes pasos:

1. Definicin o anlisis del problema.


2. Diseo del algoritmo.
3. Transformacin del algoritmo en un programa.
4. Ejecucin y validacin del programa.
Uno de los objetivos fundamentales de este libro
es el aprendizaje y
diseo de algoritmos. Este capturo introduce ar
rector
ion.uplo o.
atgoritm.o v de programa, as como ras herramie;t* "n "r
q;;
lri-,i,i,,c,u
logar al usuario
,v uvr
con ro
ra u(rqurrra:
mquina: tos
/os tenguaJes
tenguijes de programacin.
proqramacin.
un algoritmo es un mtodo para re-sorer un problema.
orobrema. Aunq::
Art

popularizacin dertrmino ha ilegado


con er adven.i"t

J" r';r; ^:..

mtica. algoritmo proviene de Mohammed ar-Khowrizmi,


ma:e- z: _ persa que vivi durante er sigro rx y arcanz gran
reputacin por- e :-_--

nd ame

ntos de p rog

ra m

acin

ciado de las reglas paso a paso para su-e' '=s:=' ':-ultiplicar y dividir
nmeros decimales; la traduccin al lair. .. =.= :c en la palabra algo'
rismusderiv posteriormente en algori:-:. f -: ::s el gran matemtico
griego (del siglo lv antes de Cristo , .-e ^'e-:: -- -eiodo para encontrar
t nrrnro comn divisor de dos n j':::s s: ::^s lera con Al-Khowrizmi
el otro gran padre de la algoritrnia o e-: a :-::'a:a de los algoritmos)'

El rsto del captulo trata de los :a::: . as :peraciones elementales


necesarias para el diseo del algoritr.c I D-3'esor Niklaus Wirth -inventor de Pascal, Modula-2 y Oberon-:;:- : --3 ce sus ms famosos libros,
Algoritmos + Estructuras de daios =,':J'^as. significndonos que slo
se-puede llegar a realizar un buen p..Q'.-.;cr el diseo de un algoritmo
y una correcta estructura de datos. Es:a e:-:o cr ser una de las hiptesis
fundamentales consideradas en es:3 l.'a

1.1. LOS SISTEMAS DE PROCESAMIENTO DE LA INFORMACIN


Una definicin antigua de computodora es'. una mquin o j:.lrrio eiectrnico capaz de ejecutar
no describe
operaciones repetitivas muy complejas a altas velocidades.'. -\htrr'l bien. esta definicin

pttri sn ms que una mquiit: e eje.-uta operaciones aritmticas. De


procesaclorcletlatost,itt",rrr,t(lePi'.)t.(sti'"ietroltratttttento)delainformahecho, lostrminos
cin seutilizan con frecuencia en lugar de computafls , r7i1gr:.;,r'. en 1a jerga informtica usual

ls modemas cbmputadorar.

en Espaa).

En el uso diario, datos e informacin son esencialmer,e s-lnrnos. Sin embargo, los informticos suelen hacer una diferer-rcia: tlatos se refiere a la repie.:n:.i.in de algn hecho, concepto o
eniidad real (los datos pueden tomar cliferentes formas: por eiemplo. palabras escritas o habladas,
nmeros l' dibuios); inJbrmacin implica datos procesado' 1 Lrrgu.lrzildos'
yn s;gmg 9n general se define como qgnjunto de compcn.ntes .(rnectados e interactivos, que
rienen un propsito y una unidad total. Sisi'ma de procesmiento de informacin es U! sistema
-ii3r;1.,;ii o I lrl1.
que
- transibrma datos brutos en infbrmacin orgotti-ctdrz.
ce prtrceso de la informacin'. entra'
sistem:
un
La Fi-slira 1 .1 muestra los tres componentes de
ccn-rplicado. se representa por una
bastanlpuede
ser
que
.j.;. r,17a r-

trocesatlor.Lltqgery4pL

.,nple caja

esta errrtr;J3 se translbrrna entonces para pro: puede aceptar datos liamados entrctcla,l'

J.ri.'ri una intormacin denominada salida o resultcttlos.


este esquema, muchos dispositilos u organi5ill\-rs pueden ser considerados sistelnas
B:t'los
'n
i- ::-u.."t-liento de lalnformacin. Un temostato qr.le cr-,ntrol 1a temperatura cle un edificio es un
:,>=::i J3 :r\-r.e \amiento de la informacin. La entrada es 1a temperatura media y la salida es una
es un
:e i -' ;-*e ;iti..la 1a caldera del aire acondicionado. E1 corz.in de un anrmal o un ser humano

sr!:iil: ;,:::l1eic de procesamiento

de Ia informacin.

in-.trucciones que especifican 1a secuencia de operaciones a realizar. en orden'


para res\r!.,:.: ,:: )-riima especfico o clase de problentas. se denomina aigoritmo. En otras palabras,
lln algoritmo 3: ,/,,-i :titnttla para la resolucitt cle wt problertto.

E- --r--r:t:

Entrada=datoS
:

Procesador

---)

-----,

Sa

a=inf ormacin

Figura 1.1, Sistema de proceso de informacin.

Pararealtzar un proceso se le debe suministrar al procesador un algoritmo adecuait. F:: --r:.plo, al cocinero debe drsele una receta, al pianista la partitura y as sucesivamente. consi,ie.n;- :.
cocinero y al pianista como procesadores.
Cuando el procesador es una computadora, el algoritmo ha de expresarse de una forma que recibe el nombre de programa. Un programa se escribe en un lenguaje de programacin y a ]14c1i1_id3d
de expresar un algoritmo en forma de programa se le denomina programacin. Cada paso en el algoritmo est expresado por medio de una instruccin en el programa. Por consiguiente, un programa
consta de una secuencia de instrucciones, cada una de las cuales especifica las operaciones que debe
r e alizar la c omputadora.
Existen dos conceptos importantes a considerar en los sistemas de procesamiento de la informacin: hardware y software. Hardware es el conjunto de componentes fsicos de una computadora
(Figura 7.2,
Jsico- y software es el conjunto de programas que controlan el funciona-equipo
lgico-.
computadora
miento de una
-equipo
E1 hardware de una computadora se compone de:

l.

La Unidatl Central

de Proceso, UCP (Central Processing Unit, CPU). La UCP es el conjunto

de circuitos electrnicos capaces de ejecutar algunos clculos sencillos como suma o multiplicacin de nmeros. La potencia de una computadora depende completamente de la velocidad y fiabilidad de la UCP.

2. Memoria central. La informacin procesada por la UCP se almacena normalmente en la


memoria central hasta que se terminan 1os clculos. Los programas de computadora se
almacenan tambin en la memoria central.
3. Dispositivos de almacenomieno secundario (memoria auxiliar). Diferentes dispositivos,
tale-s como discos y cintas magnticas, se usan para almacenar granl'CantiddAeifimcin. Para ser procesados por la UCP, los datos se almacenan en dispositivos de almacenamiento auxiliaiy luego tienen que llevarse a la memoria central.
4. Periferico o dispositivos de entrada/salida (E/S)._Estos dispositivos permiten al usuario
lu computadora. Algunos dispolitivos tpicos de E/S son el teclado, la
comunicarse
"on
etc. Un sistema de computadora puede tener diferentes dispositivos
impresora, monitor,
perifricos conectados a ella.
En la prctica, una instalacin grande de computadora puede tener diferentes UCP, cada una con
su propia memoria central compaftida, una variedad de dispositivos de almacenamiento secundario

Dispositivos
de
entrada/sa lida
E/S

Almacenamiento
secu ndario

(memoria auxiliar:

(perifricosl

Figura 1.2. Diagrama esquemtico de una computadora (hardware),

7
Fu

ndamentos de prog

ra

--

macin

y perifricos localizados en diferentes partes de un mismo edificio o diferentes edificios e incluso


dilerentes ciudades o pases.

1.2.
Las

1.2. CONCEPTO DE ALGORTMO

es ensear'a resolver problemas mediante una computadora.


Un programador de computadora es antes que nada una persona que resuelve problemas, por lo que
para llegar a ser un programador eficaz se necesita aprender a resolr er problemas de un modo riguroso y sistemtico. A 1o largo de todo este libro nos ret-eriremos a la metodologa necesaria para
resolver problemas mediante programas, concepto que se denomina metodologa.de.Ia programacin. El eje central de esta'metodologa es el eoncepto- r'a traado- de algoritmo.
La resolucin de un problema exige el diseo de un algoritmo que resuelva el problema pro-

El objetivo fundamental de este texto

alg

puesto.

Programa

Diseo
Problema

---------->

del

---------->

algoritmo

de

computadora

Figura 1.3. Resolucin de un problema.

Eie
IJn

clit

ell

Lo
Los pasos para la resolucin de un problema son:
ambigedades- que
'' 1. Diseo del algoritmo que describe la secuencia ordenada de pasos
-sin
conducen a la solucin de un problema dado. (Anlisis del probletrta t' desarrollo del algorinno.)
.

'2.

Expresar el algoritmo como un pro grama en un lenguaje de pro-uramacin adecuado. (Fase de

codificacin.')

3. EjecucinT,validacin del programa por la computadora.


Para lle-ear a la realizacin de un programa es necesario e1 diseo previo de un algoritmo, de
modo que sin algoritmo no puede existir un programa.
Los algoritmos son independientes tanto del lenguaje de programacin en que se expresan
como de ia computadora que 1os ejecuta. En cada problema el algoritmo se puede expresar en un lendirerente de pro-eramacin y ejecutarse en una computadora distin'ta: sin embargo. el algorit-suaie
mo ser siempre el mismo. As, por ejemplo, en una analoga con la r-ida diaria, una receta de un
plato de cocina se puede expresar en espaol, ingls o francs. pero cualquiera que sea el lenguaje.
los paso: para 1a eiaboracin del plato se realizarn sin imponar el idioma del cocinero.
En la ;iencia de 1a computacin y en la programacin, los al-eoritmos son ms imporlantes que
lo: lensuje. de programacin o las computadoras. Un lenguaje de programacin es tan slo un
medio pan e\prrsar un algoritmo y una computadora es slo un procesador para ejecutarlo. Tanto el
len-uuaje de prtrtramacin como la computadora son los medios para obtener un fin: conseguir que
el al-soritmo se e-ie'-ute r se efecte el proceso correspondiente.
Dada la importancia del algoritmo en la ciencia de la computacin. un aspecto muy importante
ser el diseo de atsotittto-s. \ 1a enseanza y prctica de esta tarea se dedica gran pafte de este libro.
El diseo de la mar oa de los alsoritmos requiere creatividad r conocimientos profundos de la
tcnica de la pro-uramacin. En esencia. la solucitt cle Lm problema se puede expresar mediante wt

algoritnto.

b-

Ei
S

SC

si

Algoritmos

programas

1.2.1. Caractersticas de los algoritmos


Las caractersticas fundamentales que debe cumplir todo algoritmo
son:

a Un algoritmo debe ser preciso e indicar el orden de, realizacin de cada paso.
o Un algoritmo debe
arjiniao. Si se sigue un algoritmo dos veces,
o

se debe obtener el
"sia,
mismo resultado cada
vez.
Un algoritmo debe ser finito. Si se sigue un algoritmo. se debe terminar en
algn momento; o
sea. debe tener un nmero

finito de pasos.

La definicin de un algoritmo debe describir tres partes: Entrqcla, proceso


algoritmo de recet de cocia citado anteriormente se tendr:

Entrada:
Proceso:

Salida:
Ejemplo

y Salida. En el

ingredientes y utensilios empleados.


elaborcin de la receta en la cocina.
terminacin del plato (por ejemplo, cordero).

1.1

(Jn cliente ejecufa un pediclo a unaftibrica.


Laflbrica examina en su banco de atos laficlta ctel
cliente, si el cliente es solvente entonces la empresa acepfa el pedido; en
caso confrario, rechazar
, el pedido. Redactar el algoritmo correspondiente.
,

Los pasos del algoritmo son:


.
.
3.
4.
5.
1
2

Inicio.
Leer el pedido.
Examinar la ficha del cliente.
Si el cliente es solvent_e, aceptar pedido;
Fin.

.l

caso contrarro,

rechazar pedido.

Ejemplo 1.2
se desea disear un algoritmo para saber si un nmero es primo
o no.

Un nmero

es primo si slo puede dividirse por s mismo y por la


unidad (es deci no tiene ms divisores que 1 mismo y la unidad). por ejemplo, 9, g, 6, 4, rz,'
16,20, etc., no son primos, ya que son divisibles por nmeros distintos. a ellos mismos y a la unidad. Ar,
9
divisible por 3, g o ei por 2, etc.
El algoritmo de resolucin del problema pasa por dividir sucesivamenteil
",

nmero pir 2,3, 4...,

etctera.

1. Inrc io .
2. Poner X

igual a 2

que se busca N)

6.

(,X

= 2, X, .artable que representa a los divisores

Divrdir N por X (N/X)


Si el resultado de N./X es enLero, enLonces N no es
al pur]r-o 7; en caso contrario, continuar eL proceso.un numero primo y
Suma I a X (X <- X + 1).
r.= igrual a Nr, entonces N es un numeto primo; en caso contrarrt,
!i p.r1-_o J.
al
.

Frn.

- .' E:!u condicin puede ser sustituida por


pgina 19.

x = n diw

2 (donde

div

es el operador dir.i-iin

eni:

del rrurer:

-Y

Fundamentos de Programacrn

1.3.

Por ejemplo, si N es 131,los pasos anteriores sean:

Los

1. Inicio.

SdiIk

)-i,)

eI resullado no es :---=1" := l-:--l


5. \ + ) - ., 'r-96 X = 3.
:
b. ^o10 ^ no es Jl, se bifu 'a aI o:-. - '
entero'
no
es
3 y 4. 131/X resultado
5. X e 3 + 1, X = 4.
6- Como x no es 131 bifurca al Punto :'
3 y 4. L3L/x..., etc.
7 . Fin.

3 y 4. L3L/x.

!rcceso

Como

mq
conS

fica

,sua-i

tipo:

tluc
cual

Ejemplo 1.3
Realiz,ctr la suma de todos los nmeros pares entre 2

1000'

--'

El problemaconsisteensumar2 + 4 + 6 + E
(t'ariables'
sern i.no-inudas ms tarde) para
y
NUMERO
SUMA
palabras
Utilizaremos las
representar las sumas sucesivas (2 + 4), (2 + 4 + 6), (2 - =- - : l' etc'
La solucin se puede escribir con el siguiente algoritmo:
l.

Inicao.
Establecer
LsLob-e-or

'l

a 0. 1
1
N. v-RO a z.
4. Sumar NUMERO a SU14-A. El resultado sel:a =
5. Incrementar NUMERO en 2 unidades '
6. Si NUMERO =< 1000 lfurcar al paso 4i e:
valor de SUMA y terminar el proceso'

2.

SUM-A

- su;na

(SUILA)

1.:

esc::ibir e1 ultimo

Lor
"t
m3

1. Frn.

irn'

1,3. LOS LENGUAJES DE PROGRAMACION

m3

debe sumiComo se ha visto en el apartado anterior, para que un procesador realice un proceso se le
de
interpretatgl-lgosg'capaz
nistrar en primer tugar un algoritmo adeuado. El pgcesador debe
ritmo. 1o que significa

dii

di:

comprender las instrucciones de cada paso'


realizar las operaciones coffespondientes.

que se
CuanrJo el procesador es una computadora, el algoritmo se ha de expresar en un formato
y
operaciones
las
programacin
de
lenguaje
en
un
qrnurn.
L n programa se scribe
denomiaa prr-,
-que
pues, los lenconducen a e\presarun uigoitrno en folrna de programa se llaman programacire. As
y proguajes utilizados pam escribir progtamas de computadoras son los lenguajes de programacin
programas'
de
diseadores
escritores
gramndores son los
1'
Los principales tipo: de len-euajes utilizados en la actualidad son tres:

lenguaje nuquinLt.
c. Ienguaje de bajo ni'el tettsotttblador),
o lenguajes de alto ntel.

f'

L- *_

Algori!,tcs , :

1.3.1. lnstrucciones a la computadora


Los diferentes pasos (acciones) de un algoritmo se expresan en los programas conlo ilsr: . . ,:.
sentencies o proposiciones (normalmente el trmino instruccin se suele referir a los leng;r-;.
mquina y bajo nivel, reservando la sentencia o proposicin para los lenguajes de alto nir.el . P :
consiguiente, un programa consta de una secuencia de instrucciones, cada una de las cuales espe..fica ciertas operaciones que debe ejecutar la computadora.
La elaboracin de un programa requerir conocer eljuego o repeftorio de instrucciones del 1enguaje. Aunque en el Captulo 3 se analizarn con ms detalle las instrucciones, adelantaremos los
tipos fundamentales de instrucciones que una computadora es capaz de manipular y ejecutar. Las instruccionq !-A_t:lsJ-c,qmu-nes-.a.casi todoslos le-nguaje5.(-- programacin se pueden condensar en
cuatro gfupos:

Ins.tt:uc.cioues de elra.da/,tslidaJnstrucciones de trans.ferencia de informacin y datos entre

dispositivos perifricos (tec1ado, impresora, unidad de disco, etc.) y la memoria central.


Instrucciones aritmticq-lsicqs.Instmcciones-que ejecutan operaciones aritmticas (suma,
iesta;rnltlpticaci. divisin. potenciacin), lgicas (operaciones and, or, not, etc.).
o Instrucciones selecf ivas. Instrucciones que permiien la seleccin de lareas alternativas en funcin de los resultados de diferent"r
condicionales.
"^pi.rines
c Instrucciones repetitivas. Instrucciones
que permiten la repeticin de secuencias de instrucciones un nmero determinado o indeterminado de veces.

1.3.2. Lenguajes mquina


lep"ggSig.m"-$d4?*sgg-49uellos,qu-e-.sstn qs-qn-los en lenguajes directamente inteligibles por la
mquina (computadora), ya que sus instrucciones son cadenas binctrias (cadenas o series de caracteres
que especifican una operacin, y.las.posiciones (direccin) de memoria
-dgito-s--O.y.1)
implicadas
en.la operacin se denomi-nan instrucciones de mquina o cdigo mtquina. El cdio
mquina es el conocido cdigo binario.
-f--as-iqstr!99r_9!es-en leggaje m_qi_na{,gpCtd.fr"dd*bpt{lyax de la c_ompur_ad-ora y, por tanro,
diferirn de una computadora a otr. El lenguaje mquina de un PC (computadora personal) ser
diferente de un sistema HP 9000 (HP, Hewlett Packard) o un sistema 6000 de IBM.
I-a;venrltiqs dg programay en ]epgu4je mquina son la posibilidad de cargar (rransferir un

-!.o--s

Posiciones
de memoria

01 00
01 01

001 0

0102

001

01

00
1

0000
0000
0000

lnstrucciones binarias (cdigo mquina)


Figura 1,4. lnstrucciones en lenguaje mquina.

01 00
01 01

01 10

T
Fundamentos de programacion

programa a la memoria. s.U qgg_e_sidaqde traduccin ppsterior. 1o que supone una velocidad de ejec uc i n superi oia cal quier ot ro len guaje- de prrogra m ac i n.
la actualidad- superan a 1as I'enta3as. 1o que hace prcticamente no
Los incenvenientes
-en
recomendables los lenguajes mquina. Estos inconr e nientes son:

dificultad y lentitud en

o
o

poca fiabilidad,
dificultad grande de verificar y poner a punto los programas.
los programas s1o son ejecutables en el mismo procesador (VCP, Unidad Central de Pro-

1a

codificacin.

ceso).
Para evitar los lenguajes mquina, desde e1 punto de r.ista de1 usuario, se han creado otros lenguajes que permiten escribir programas con instrucciones similaes al lenguaje humano (por desg.uiu, asi siempre ingls, aunque existen excepciones. como es el caso de las versiones espaolas
del lenguaje LOGO).
Estos lenguajes son los de alto nivel y bajo nivel.

1.3.3. Lenguaies de baio nivel


los-Ienguajes de bajo ni+et son ms fciles de utilizar que 1os lenguajes mquina, pero, al igual que
elios, dpenden de 1a mquina en parricular. El len-uuaje de bajo nivel por ec9!919Q_e;91*e11am
g!1,1or (issembly language). Las instrucciones en lenguaje ensamblador son instruccio-nes qglocidgs
comonematcnko (mneruonics'). Po+ejemplo, nemotcnicos tpicos de operaciones aritmticas son:
en ingles, ADD, SUB,

DIV:

e_tc:;

en espaol, SUM, F-'S.

l---.

etc.

Una instruccin tpica de suma sera:


N,P
Esta instruccin podra significar <<sumar el nmero contettido en la posicin de memorio M al
,"ir,'p alntacenado en la posicin de memoria N t' situar el resultctclc en la posicin de memoria
P Er identemente. es mucho ms sencillo recordar ia instruccin anterior con un nemotcnico qtte
. * ::ir alente en cdigo mquina:
'

--

--,-

1010

1011

j-: ;;grama escrito en lenguaje ensamblador no puede ser ejecutado directamente por la comesro se diferencia esencialmente cle1 lenguaje mquina-, sino que requiere una
:;*ta
-!:n
r::= -ri i-i-j- t: ; in al lenguaje mquina.
E- :: ::":t: ori_einal escrito en lenguaje ensamblador se denomina programa fuente y e7 pto-;ir;-.

en lenguaje mquina se conoce como programa objeto, ya directamente inteligible


F\.r: -r JEi\i;*i*{-dE- -:.,,jr-,--,-,- ;+rarsusfuentc a objeto e.s-un programa llamado ensamblaelar (assembler),
eistei;; en csr. t':,,jas las computadoras (Figura 1.5).
en espaol adoptan el mismo nombre- el programa ensam\o s ,lebe cc,ni]ndir
-aunque
cle efectuar la traduccin del programa fuente escrito a lenguaje
bladt,r ,r-r-rcnr . encarsdo
mquina. con el i,r, 1;,, t!stnblaclor (assembly language), lenguaje de programacin con una
estructura r gramtica derlnirlas.
Los lenguajes ensambldore! presentanlat,entaja frente a los lenguajes mquina de su mayor
facilidad de codificacin r.. en seneral. su velocidad de clculo.

=::,

I'

7
Algoritmos y programas
Programa

Programa
ENSAMBLADOR
(assembler)

fuente en
ensamblador
(assemblyl

Programa

objeto en
cdigo
mquina

Figura 1.5. Programa ensamblador,

Los inconvenientgs ms notables de los lenguajes ensambiadLrres son:

o . D-ependencia total de la mquina, 1o que impide la transp..nabilidad de los programas (posibilidad de ejecutar un programa en diferentes mquina-r r. Ei lenruaje ensamblador del PC es
distinto del lenguaje ensamblador del Apple Macrnto:h.
o La formacin de los programadores es ms compleja que i: c,rr;.pondiente a 1os proglemadores de alto nivel, ya que exige no slo las tcnica-s ri.e ,=.r-r,,:in. sjlo tambi-l_sonocimiento del interior de la mquina.

Hoy da los lenguajes ensambladores tienen sus aplicacitns n;., ieiucidr< en 1a pro_eramacin
de aplicaciones y se centran en aplicaciones de tiempo real. .r,nir,:,i e procasL1s r de dispositiYos
electrnicos, etc.

1.3.4. Lenguajes de alto nivel


Los lenguajes de alto nivel son los ms utilizados por 1os pro_:r::nadores. Estn diseados para que
las personas-escriban y entiendan los programas de un moi r.rucho mris t=a-ci1-qu-IliT3ies
mquina y ensambladores. Otra razn es que un prosram3 e.--:--Io en un lenguaje de alto nivel es
independiente de la mquina; esto es, las instrucciones del prrr_irama de la computadora no depggden
del diseo del hardware o de una computadora en particul:r. En --onsecuencia. los programas escritos en lenguajes de alto nivel son portables o transporrLibir--r. lo que signilica la posibilidad de poder
ser ejecutados con poca o ninguna modificacin en dilerentes tipos de computadoras; al contrario
que los programas en lenguaje mquina o ensamblador. que sio se pueden ejecutar en un determinado tipo de computadora.
Los lenguajes de alto nivel presentan las siguienres;+,.r:.r;-las:

El tiempo de formacin de los programadores es relativamente_

c_qrto e-omparado

con otros len-

guajes.

La escritura de programas se basa en reglas sintcucas similares a los leuguajas


Nombres de las instrucciones, tales como :.:-r--. r -:1 ?RINT, O.pEN,.etc.

hum,a.nos.

Las modificaciones y puestas a punto de los programas son ms fciles.


Reduccin del coste de los programas.
Transportabilidad.

Los inconvenientes se concretan en:

o' Incremento del tiempo de puesta a punto. al necesita.se {ifelenteg taducciones..del,programa


iirnte para coneguir fpiograrna ffi"iili,o.
o No se aprovechan 1os recursos intemos de 1a m{quina* qu-e -s-e axplotan mtlcho mejor en len-

guajes mquina y ensambladores.


Aumento de la ocupacin de memoria.
El tiempo de ejecucin de los programas es mucho,mayor.

10

Fu

ndame ntos de progra macion

A1 igual que sucede con los ienguajes ensambladores. lo-s prosramas fuente tienen que ser traducidos por programas traductores. llamados en eseca5o caii\ltiljrd{e intrpretes.
Los lenguajes de programacin de alto nivel existentes hov son muy numerosos aunque la
prctica demuestra que su uso mayoritario se reduce a

C C++ COBOL FORTRAN BASIC Pascal

\lsual B,\SIC

estn muy extendidos:

Clipper Ada Modula-2 Prolog LISP

Smalltal}r

y comienzan a difundirse:

v11yt O!_ject Delphi Miranda Eiffel


aunque los dos primeros no dejan de ser entomos de programacin orientados a objetos con soporte en los lenguajes Clipper y Turbo Pascal.

1.3.5. Traductores de lenguaje


Los traduq!-9,res.de leruguctje son programas que traducen a su \ ez los programas fuente escritos en
lengujes de altonivel a cdigo rnquina.
Los traductores se dividen en:

o
o

compiladores,
intrpretes.

1.3.5.1. lntrpretes
Vn irrpretg

es lJn traductor que toma un programa fuente 1o traduce y a continuacin 1o ejecuta.


Los programas intrpretes clsicos como EASIQ, prcticamente ya no se utilizan, aunque las

r.ersiones

a&ISNUckBAS[C-se

comerciali-zan-todar,r-a--con-efSistema-Qp-erativo -DO"S que


computadoras personales. Sin embargo, est muv e\tendida 1a versin interpretada del
lenuuaje Smalltalk, un lenguaje orientado o objetos puro.

.t)rre en

1as

Programa fuente

lntrprete

Traduccin y ejecucin
lnea a lnea
Figura 1.6. lntrprete.

h'

Algoritmos y

c.rc-.-.:

11

Programa fuente

Programa objeto
Figura 1.7. La compilacin de programas.

1.3.5.2. Compiladores
U-n,soflpiladaL*tJ;E-l],rograma-quclmduce -l,os4rogramas-fuente-eseeitss-e+,lenguqjes-de-alto
nivel
;-alenguaje-mquina.

*Los-PascaLEOIIIRANT-,

programas escritos en lenguajes d alto nivel se llarnan prograruas"fwettte y el program-a-Ira-ducido programg objeto o cdiga abjefo. El compilador traduce
a sentencii el pro-sentencia
grama fuente.
Lo_s__Lee.uqies Lampdad*o{es_

Iprs-qs,son:

C-Cir,IAs-gAL.LqBIlAN, CoBoL.

1.3.6. La compilacn y sus fases


La c-qmpilaiin es elpr.gcgso de traduccin dq programas fuente

a programa*qbieJo. El programa
objeto obtenido de la compilacin ha sido tradu-c-1dq_uptaalmsn"q%*qgdigomrqui$a.
eele coltSAgS|p1gqyma mgggrng_glS9-qe}e-utilizar un-prog-ram-11amads-monlade.p--9nla-

.
,q!glty!rt).

El prg!-qs-o_!rrEE1,@_.. e_UpIggrma-""J"**guei*mrAqu.iui.dircearrre;Aee-

cutable (Figura 1.8).

Programa fuente

Compilador
(traductor)

Programa objeto

Programa ejecutable
en lenguaje mquina
Figura 1.8. Fases de Ia compilacin.

12

Fundamentos de Programacin

los siguientes pasos:


El proceso de ejecucin de un programa Pascal. por ejemplo, tiene
\i

programafuente con un eclitor (programa que permite a una computadora


y guardarlo en un dispositiVo
actuar de modo simila, u unu mquina de escribir electrnica)

1. Escritura

s!

it\

del

de almacenamiento (por ejemplo, un disco)'


Introducir el programa fuente en memona'

2.
3. Compilar el programa con el compilador Pascal'
4. Veriiicar y crrigtr errores de compilaci tlistado de errores)'
5. Obtencin del Programa objeto'
6. E1 montador obtiene e7 programa ejecutable '
del programa.
el programu y, ,i no existen e.'ores. se rendr 1a salida
i. "
"""",a
r l l0'
El proceso de ejecucin sera et mostrado en la' Figura: l'9
Programa
V

Datos
p

rog ra m

- -------------'
----------------

Computadora

ejecutable
V

Resultados
Figura 1.9. Ejecucin de un programa'

Modificacin
programa
fuente

fuente

Compilador
I

-'...

.,/ Exrsten \
,/ errores en la \
\ compilacin-,/

\.,.-

lno

Programa

Montador

Programa
e.iecutable

Ejecucin
Figura 1.10. Fases de la e.iecucin de un programa'

Algoritmos y programas

13

1.4. DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS


El primer ob.jetivo de toda computadora es el manejo
de la informagi , jst_r.. Estos datos pueden
ser las cifras de ventas de un supermercado
o las caiificaciones de una cia-ie L-
lijr{i + la erpresin
ggneral que,{ecribq lqs objelos con los cuales
op.ru unu.frruao.u.
La mayora de las compuiadota, pueden trabajar .on
u*ir ,lporl.n*io. ,' uL
e jr,:
uf,Lr-': tLos alsoritm_os y los programas correspondienies
operan sobre datos.
La accin de las instrucciones ejecutaLles de las computadores
se rel-1ejan -n ,-:lnbi,rs in lo\
valores de las parridas de daros. Los atos de enrrada
se rrarisformar;;;;i;;;;;.
:.,;;':.

etapas intermedias, en datos de salida.

.: ;,

En el proceso de solucin de problemas el diseo


de la estructura de datos e. r.r. iirlprrflBrlre
como el diseo del argoritmo y del programa que
se basa en el mismo.
Existen dos clases de tipos de-datos:. siiples
lrlr.rt..rarrij y ,o*pur.r/os (esu-rjruradrrs).
Los datos estructurados. se estudian a partir oel'captulo
o y ron
de partidas ,Je futo. simples con relaciones definidas entre ell,os.
"oruntos
Los distintos tipos de datos se representan en diferentes
formas en la computadora. -\ nii el Je
mquina, un dato es un conjunto o seiuencia de bits (dgitos
o o ij.-I-o, lenguajes de alto rur.el permiten basarse en abstracciones e ignorar los detalles
aJu ,"p."rnhcin interna. Aparece el concepto de tipo de datos, as como su representacin.
I os tipos de datos simples son los siguientes:

numricos

(inte ge4 real),

lgicos {boolean).
carctgr (char, string).
Existen algunos lenguajes de programacin
esencialmente- que admiten otros
tipos dedatos; complejos, que permitJn harar los-FoRTRAN
nmeros
y otros lenguajes
que tambin permiten declarar y definir sus
-pasc-y
propios tipos""dl"j;r,
de atr, enumerados (enumerateS
subrango (subrange).

1.4.1. Datos numrcos


E!1ipo numdco-es el conjunto de los v4lqe-g--num.ricos.
stos pueden representarse en dos fbrmas
distintas:

o tipo numrico entero (integer),


o tipo numrico reql (reql).
Enteros: El tipo entero es un su-bconiu.ttto-finitq
de-.Iq,s=rlrugIgs..enferos. Los enteros son nt"^oletos, no tienen componentes fraccionariosil;'y
preaen ser negarivos o posi-

frtJ:''

Ejemplos de nmeros enteros son:

56
15
20
I34A

4
1,a

26

I
14

Fundamentos de Programacin

LosenterossedenominanenocasionesnmerosdepuntoocomafijaLqqnDqlqqenlgros
enteros
Lo:
suele-{r:e:,--t"!::

lum-eros
:^:!6J-^ll;rtiqq'*Ou-,,"'""p*'+aa"a'
reales' aunque eruSten
se suelen repfesentar como enteros' sino como
fuer de este rango no
C' C++' etc')'
ciones (enteros lrgos:FORTRA' Quick/QBasic'

excep-

los nmeros reales' Los nmeros reales


Reales:El tipg-1eal consisteerrun subconjuno de
consta de un
y pueden ser frsiti'os o negativos' un nmero real

,i"-trffieil;il-[-;;""ra.l
entero y una Parte decimal.

Loi siguiintes ejemplos son nmeros


0.

reales:

3139 .4L

08

3.1 452

-52 -32L

-8.L2

3'0

especiai para manejarlmeros muy


En aplicaciones cientficas se requiere una representacin

grandes,como]amasadelaTierra,omuyp.qu.no'.comolamasadeunelectrn.Unacomputaa
Este nmero.puede variar de una mquina
dora slo p.r"d" r"preserit rn nmero frp O.iigltos.
y
almali"itt ptot'otar problemas pafa representar
otra, siendo octro dgit; rn ,-"ro tpico. Este
cenarnmerosmuygrandesomuypequeoscomosonlosr-acitadosolossiguientes:
0.00000000387

4861 213432

twtacin erponencial o cienlfica y que se utiliza


E1lste un tipo de representacin denomi nado
para meros muy grandes o muy pequeos' As'
16752010000000c000000
se repres-enta en 1o119!-Qq q-ienlfi-c-a.descomponind'o1o

.,,

a2O 100 000 000 000

qn grupos de tres dgitos:

000

posteriormente en forrn-a de potencias'de 10:


x

102!

= :tir-S::l:

-: /Y

COrnO

de notacin cientfica. Obsrvese que


La r::esella'-in en coma flotante es una generalizacin

las

si

sulente s . \pre siLrne s son equivalentes

En computadoras de 16 bi.L' .-mo

IB\l

PC o compatibles'

Algoritmos y programas

1S

En estas expresiones se considera la mantisa_(p9$g-deSllrylf ql


n_rLmeroreal y et qrypg1e_ryt1.lBfffe

potencial) el de la potencia de diez.

35.752AL

18

mantis(1

exponente

1.4.2. Datos lgicos (booleanos)


Eltipo

lg-ico

.'
vOo| - -tambin

denominado booleqno_ es aquel dato qqe_1c-g1ggdq

1oq3 1.ro {e dos

cierto o verdadero (frue) y talso.(false).

Este tipo de datos se utiliza para representar las altemativas (slrLr,


a de;n.unadas condiciones.
Por ejemplo, cuando se pide si un valoi entero es par, la respuesta
ser r eraclere r falsa. se,un sea
par o impar.

1.4.3. Datos tipo carcter y tipo cadena


El tipo carcter es el conjunto finito y ordenadode caraeLefes que r&i,Fiii,id..,de!Lu.i---e.
L-n tJato
tipo carcter contiene un solo carcter.
Los caracteres qtle reconocen las diferentes computadoras no :on
e.:lJa: sin emb,aso. 1a
mayora reconoce los siguientes caracteres alfabticos y numricos:

.
.
/

caracteres alfabticos
caracteresnumricos

(a, B, C,
(1, 2,

Z) (a, .,
9, 0),

.:,

fJna cadena (string) de caracteres es


Uq?.sugesin de caraqrq.lqs qg-_9_qry.lgqt4r1_de-Iimidados

p?.
tn? comilla (apsrrofo; o dobles comi[as, sesr et tipo de 1;;u;je-;p*-sr;-"i,
Situd de una cadena de caracteres es el nmero de ellos compre"*d,oo. entre 1os
limitadores. Algunos lenguajes tienen datos tipo

caclena.

Hola Mortimer

8 de octrrbre de
Sr. McKenna

1946

RESUMEN: Los tipos de datos primitivos se clasifican


en:

Numrico

La

ton_

separadores o
rvvoror

16

Fundamentos de programacin

1.5. CONSTANTES Y VARIABLES


Los programas de computadora contienen ciefios valores que no deben cambiar durante la ejecucin
del programa. Tales valores se llaman constantes. De igual forma, existen otros valores que cambiarn durante la ejecucin del programa; a estos valores se les llama variable.g.
L':'' rJ,ryot*tanie*esuna'paltida dad.atos-(ohieros) qug-pg-Eaneqglsilcambios-dumnte todo el
desarrollo del algoritmo o- glg_JA-nte-la.ejecucin del.programa.

vlidas:

Constantes reales

Constantes reales no vlidas:

i;752.63

: I:234
,i - a .1436
\_. + 54431324

(comasnopennitidas)

d2

nonnalmente contienen Lol pLmto decimal, aunqLle existen


lenguajes que lo admiten sitt punto)

Constantes reales en notacin cientfica:

. 3.31456282

equivale

3.3-=:e2 x i)'

Una constante tipO.Cprdcter.o.constante de caracterrs consiste en unearcter rlido encerrado


dentro de apstrofos; por ejemplo,
+

'B
Si
e

Se

4'

deseaine+ufu-etapstrofUen la cadena, entonces dehe aparecer conto r,n par deapstrofos,

nc errado s denlr_o_

dg

TpEl._o_!lla.

Una secuenciq dp qaactery-s

ge

denomina ,n*ormalme{etta-cctdenay

:urlu'

constante tipo coiena

es una cadena encerrada entre apstrofos. Por consiguiente,


_ ":*
r3--

Mi
arrr
!rrrr9uL

.=.:=

-tS Garcia'

lrrn JLrtrI-itrilltes de cadena vlidas. Nuevamente, si un apstrofo es uno de los caracteres en una conscadena. debe aparecer como un par de apstrofos:

u:te ie

C'n-srcni

isiccs boolean)

Slo eristen dos constantes lgicas o booleon:

La ma1-ora de los lenguajes de programacin permiten diferentes tipos de constantes: enteras,


reales, caracteres y boolean o lgicas. y representan datos de esos tipos.

Algoritmos y programas

17

Variables
tJyg_ygighle
qbje,tg o pl4ida de datos quyo yalor puede camliar durante el desrrollo del algo-ql iU
ritmo o ejecuc!n det program_q,
Dependiendo del lenguaje, hay diferentes tipos de variables, tales como t1.iti'ti!. ,reiiles. carr'-

ter, l(tgicas y de cadena.

Unl yari,qLl-q qqe_ e-s dg un ci-e-rIo tipo puede tomar ticamente valores de ese ripo- I-n I enahle
de earcter, por ejemplo, puede tomar como valor slo caracteres, mientras que una I ari.ar'le entera
puede tomar s 1o-. vqlgJ-e5 .-e-.n[g1os.
Si q,-e !g11t1aslglgl-qn ySLo-{ d-e.. un lipo a una variable d.e o-!ro tipo s,e producir L.ltl et ror de-lrJ)Lt
lg,"variab]e se identifica.por los siguientes atributos: nombre que lo asigna y tipg q)e describe
-el uso-de-la variable.
c,onocidos c.ot\p jd-e.ilfirtcadgres, suelen constar de vanos
L-o-l-lio_!.rblg_.dS,,1e-s_.yAf-iable5,.a.-v-eces
cara[rt alfanumricos, de los cuales el primero normalmente es una letra. No se deben utilizar
lo permita el lenguaje, caso de FORTRAN- como nombres de identificadores palabras
-aunque
reservadas del lenguaje de programacin.
Nombres vlidos de variables son:
451

tl

NOMBRSS
NOTAS

moenr

aplt ios3

Los nombres de las variables elegidas para el algoritmo o el programa deben ser significativos y
tener relacin con el objeto que representan. como pueden ser los casos siguientes:

NOIIBRE para representar nombres de personas


PRECIOS para representar los precros de diferentes arlculos
NOTAS pat:a representar fas natas de ua clase
en los que es posible darles nombre a determinadas constantes tpiExisten lenguajes
-Pascdcas utilizadas en clculos matemticos, financieros, etc. Por ejemplo, las constantes lt = 3.1.41592...
y e =2.7182818 (base de los logaritmos naturales) se les pueden dar los nombres Pf y E.

Pr = 3 .t4L592
F, = 2.7L8282

1.6. EXPRESIONES
Las expresiones !,L-aoutb-in-c!ql}9d_e--cgn-i[qqles,.-yariable"s, srfrbqlog de,operacin,-parntesi' '
nmbfsA funciones especiales. Las mismas ideas son utilizadas en notacin matemtica tit.l

cional porjem-pTo,

a+(b+3)+r,ic
r

++(-5)+r,c

Algunos lenguajes de programacin admiten como v1ido el carcter subrayado en los

identrll:.: -.

f8

Fu

ndamentos de progra

acin

Aqu 1os-_parntesis indican el grdgn de clculo \ \ represenJa la funciQn raiT,quadrada.


Cadifiiin toma un valor que se determina tomando los valores de las variables y constantes
y la ejecucin de las operaciones indicadas.
implicadas
-

U!.?..pfgslg

qp-ns-ta

de operandos y.pperadotcs-. Se-sn sea el tipo de objetos que manipulan,

las expresiones se clasifican en:

o aritmficas.
o l?icas,
o carcter.
elgsql1adq dc_la_elplgstsnritmtrsa es-de tips nul[lcq-cl,resu]lado-deia-exprm-i+rel-acionglylgyq1p_fgsign !g_l_qq_e,-Oe tipo.1gcg 91 rq:ultado de-qra-expresign ca1.c-!91 e-de-lipo
carcter.

1.6.1. Expresiones artmticas


a]aq fmu$ n-r4terniiticas Las variables y constantes son
ilumricas (real o entera) y las operaciones son las aritmticas.
1-as

! Ui.ll

ri !ii.

muL:iiicaiitn
dir

erpe.nenci;citn

I
, o,

os smbolos

i:in

div

dir isin nter:

mod.

mdulo i esto

!__,j._1_1lC_g_1")_y
lu ipr* i"

las palabras c1ave

div

_l-mo -glgggl]-_cplnp.epsLa-

"'lrii.u@pffi

la expresin
I-lr

f la e\DfeS1On,

------------*1---

fo:

be

5 + 3 sq

-c--o.

lgce- como resul-

A \/x

D^- ^^-^i-,.i^-r^
----,^-^^:.:^^^
--- matemticas.
Por
consiguiente, ^
c,p'eradores se utilizan de igual forma que- en

enunaleoritmocomoA

D
B
se escr'l-

* B, y I/4 x CcomoCi 4.Aligualqueenmatemticaselsigno


A - B y como cambio de signo en -A'

menos jue-sa un doble papel, como resta en

\o
p1o. en

ro,Jos los operadores aritmticos existen en todos los lenguajes de programacin; por ejem-

FORTR\\

no eriste

div

ni mod.

El opera,Jor exponenciacin es diferente segn


( n,
- en BASIC. - * en FORTRAN).

sea el tipo de lenguaje de programacin elegido

Los clculos que implican tipos de datos reales y enteros suelen dar notmalmente resultados del
mismo tipo si los operandos lo son tambin. Por ejemplo, el producto de operandos reales produce
un real (vase Tabla 1.1 ).

!'.'

rt

Algoritmosy prugrat

Exponenciacin

Entero o real

Entero o real

Suma

Entero o real

Entero o real

Resta

Entero o real

Entero o real

Multipliiacin

Entero o real

Entero o real

Divisin

Real

Real

div,

Divisin entera

Entero

Entero

rrpd

Mdulo (resto)

Entero

Entero

Ejemplos:

5x7
q

se representa
se represento

por
por

5*

se representa

por

3n

3'

t-

Operadores DIV y MOD


EI
EA

SI

C. s e s u e I e

A Cl1V

I 9lg:glql I-*
o

--:.en al
re

presen ra la _d.i_vi.riq

qiemplo

."llqlt.

ll

S-lS+uede.{+tilizar+i-A{-Bsnn expresione*enjeras Lobtiene la parte entera de A,/B. por con-

srgulente.

19 div
*---.-"

ill-i$

.1gma el valor 3.
:

1s

2 cociente

esLo

equivaTe a6

equivale

-, :q
#

,,t,

.1J.

20

Fundamentos de programacin

:.'6

fr",

Ejemplo 1.4
Los siguientes ejemplos muestra)n resultados de expresiones aritmticas:

10.

s/3.0

3.5

10diw3

1-/ 4

n 2q

18div2

2.0/4.0

0.5

33 div 30

6/1

6.0

5 div 8

30/30

1.0

6/8

0.75

-0 mod 3
10 nod 2

--,---'h
l,

1.6.1.1. Reglas de prioridad


LS expresio_nes gtte tienen dss o
'nq operandos reqrieren rnas reglaq materstieas que-peIften
gterm-ua-el orden de lrs
:

"

Dnmero.
,'.,+

2. I4s-epsraciones aritmtkns dentro de una expresinsuelo:_seguir_o-i


prioridad:

.
(L.
\o

operador exponencial (^.


operadores *.
uo
operadores d.iv
operadores +,

l.(ff
l*"er
-. )/

t o bien **),

ftxrplo 1.5
Cul

es el rcsultado de las siguientes expresiones?

q)3=5*--1

b)a*7*3+4*6

a) 3 - 6 * ;1

b)a*7*3+4*6

-3-3
H87

\-/
-.J
8+21

29+24

-.-

24

rgg-i9I{-e*-o.Ideq de

Algoritmayolagzrrc

ZI

Ejemplo 1.6
Obtener los resultados de las expresiones:

-4 * 7 + 2 ^ 3 / 4 - 5
1. -4 * 7 + 8
4 5
2. -28 + I / 4 - 5
3. -28 + 2 4. 26 - 5

L^31
/'J'or P*

31

Ejemplo 1.7
Convertir en expresiones aritmticas algortmicas las siguientes expresiones algebraicas:

t 5.(x+y)

la'+b'
J

I x+y
wu+x

-'(z+
ty

w)

Los resultados sern:

\_5*(x+y)
R_a 2 + b' 2
\ (x + y)* / \u.+ w./a)
\*" x /
lz I w)
Ejemplo 1.8
Los parntesis tienen prioridad sobre el resto de las operaciones:

A * (B + 3)
(A*B)
+3
A+(B+C)+D
(A + B/C) +-D
A*B/C*D

la constante 3 se suma prirnero al valor de e, despus este resultado se multiplica


de A.
A ) B s multiplican primero y a continuacin se suma 3.

estaexpresinequivaleaA

equivaleaA+B/C+D.
equivale

+B+C+

((A * B)/C) * Dynoa (A * B)/ (C *

Ejemplo 1.9

Evaluarlaexpresinl2

D.

+ 3 * J + 5 * 4.

D).

por el valor

r
22

Fundamentos de programacin

En este ejemplo existen dos operadores de igual prioridad, x (multiplicacin); por ello los
pasos sucesivos son:

*4

12+ 3*7+5
2L

1?,

2l+5*4
\-/J
2A

L2+2L+20-53

1.6.2. Expresiones Igicas (booleanas)


Un segundo tipo de expresiones esla expresin lgica o booleana, cuyo valor es-si{pre.verdade+o
ble*s,1.(gi-c-qqgg9*!_tgnars"!q -estgg do ,valges. En esencia. una expresin lgiia es una expresin
que slo puede tomar estos dos valores, verdad v falso. Se denominan tambin expresiones boo-

leanas en honor del matemtico britnico George Boole. que desarrollo el lgebra lgica de
Boole.

Llljl.r-.stqq"g1gi.ps s9 forman e ombin-ando-constantes 1gicas,. variab]p;].gr,qa- y_"-oqas


9lP-ry.:igles tgicas, glilizand-o- lss opevqdore; lgicos not. and y or: y 19; 9g9ry!9yes_-r9Jqq!q491!es

t::]19lj.:oqe*:g!*-, :, l

,':-r:=*.*i;

\--

---(- =j-r

1.6.2.1. Operadores de relacin


Los operadores relacionales o de relacin permiten realizar comparaciones de valores de tipo

o o c a r Qtgr*Lo s operadore s ae r"t a i@di_-r6__rlnr._al


ritmos
Los operadores de relacin se recogen en la Tabla 1.2.
El formato general para las comparaciones es
nu m ric

=tc::e

t on7

OPERADOR DE REIJACION

Tabla 1.2. Operadores de relacin

Oitefador

Significado
menor que
mayor que
igual que
menor o igual que
mayor o igual que

distinto de

Algoritmos y programas 23

y el resultado de la operacrn ser verdadero'o falso. As. por ejemplo, si

a =

4y

B=

3, en-

tonces

4 r.B

es veill.ad.

mientras que

(A

2)<(B-4)

es.fnlso

Los operadores de relacin

se

puedqn aplicar g_crUtlquiera-delosqat+o tipos dedalos estndar:

eI!-9r9*-t*!,"!xsp-ssek*
La aplicacin a valores numricos es evidente. Los ejemplos siguientes son si-snificativos:

N1

N2

36
01
42
B5
99
55

Exprepidn lgica

Resultado

3<6
0 >"1

verdadero
Jalso

A'

ialso

B<-5
o -_

-falso
o

rerdadert

5<>5

Jatso

ordenacin de

los caracteres,,r-4r al orden creciente-gde,c{gcigqte. Esta ordenacin suele ser alfabtica, tanto
maysculas como minsculas, y numrica, considerndolas de modo independiente. Pero si se consideran caracteres mixtos, se debe recurrir a un cdigo normalizado como es el ASCII (.vase
Apndice A). Aunque no todas las computadoras siguen el cdigo normalizado en su juego completo de caracteres, s son prcticamente estndar los cdigos de los caracteres alfanumricos ms
usuales.

Estos cdigos normalizados son:


..
...9

exisen la consulta del cdiso de orde-

En general, los cuatro grupo,s anteriores estn situados en el cdigglSCll en glshUqIgggSre.


pa?'Gn-e-rory;1ta seguridad sei preciso consultar el
cdigo de caracteres de su computadora (normalmente, el ASCII (American Standar Code .for
Information Interchange) o bien el EB.CD_ IC (Extended Binarl--Coded Decimal Interchange Code,.
utilizado en computadoras IBM diferentes a los modelos PC y PS/2).

---':*-:-_-

As, 1 < 'A y e ?tealTiGd6argo,

------:]-

24

Fu

nda

mentos de progra macin

Cyqrlo-sertili.za+1os-operadores-de-relaein. eo+vaLores lgico

11 constanfe

false (f-also)

es

m ll qy:lu:-o-l,t?n'te frue (ye-ry|.qil.


f also < verdad
false <true
true>false verdad > fafso
Cuando se utilizan los operadores relacionales = \' <> para comparar cantidades numricas, es
importante recordar que la mayora de los vcilores reales no pueden ser almacenados exaclamente.
\.. En consecuencia. las expresiones lgicas fomales con comparacin de cantidades reales con (=), a
se evalan como falsas, incluso aunque estas cantidades sean algebraicamente iguales. As,

,
/
,,
f., )t'.
..''

-'

)u...r
i

.0

'.0

* '.0

.0

/ tericamente es verdadera y, sin embargo. al realizar el clculo en una computadora se puede obtef ne. . 999999 . . . y, en consecuencia, el resultado es thlso: esto es debido a la,;,precisin limitada de
la aritmtica real en las computadoras. Por consiguiente. a veces deber excluir las comparaciones
{''',,con
datos de tipo real.
-/

lgicos

1.6.2.2. Operadores

Los operadores lgicos


l

Taina mi e-rrt

verdad
Ial so

booleanosbsicos son

dldi ch operad

no,t

t.).

and (V) y o-1(o..),*!4 Tabta

ore s.

falso
verdad
b

e:dad
=rdad

I verdad
falso
verdad

verdad
ta I so

aybes
si a y i:

a ob
aobsol
cuando a,
son v-ordad

verdad
verdad
verdad

Tabla 1.3. Operadores lgicos


Operador lgico

Expresin lgica

ro

ro

:aa

1-

oaa

Significado

p (not p)

PYq(Pffid
pog(por

negacin dep

s)
q)

conjuncin depy q

disyuncindepyq

1.3 recoge

A,'gor:-:s :--:-:-::
En las expresiones lgicas se pueden mezclar operadores de relacin
'I

//

'/

(1 < 5) y (5 <
(5>10)

''

10)

o(A.

B)

es yerdad
esrero-ad,yaque

25

i lgicor. \s:. :, r : ;- :,.

A < B,

,&/

Ejemplo 1.10
La Tabla 1.1 resume una serie de aplicaciones de expresiones lgicas.

1.6.2.3. Prioridad de los operadores en las expresones lgicas


Los operadores aritmticos seguan un orden especfico de prioridad cuando existan ms de un operador en las expresiones. De rnodo similar, 1os operadores lgicos y relaciones tienen un orden cle

prioridad.
Tabla 1.4. Expresiones lgicas
Expresin lgica

Resultado

(1 > 0) y (3 - 3)
no PRUEBA
(0 < 5) o (0 > 5)
(5<=7)y(2>4)
no (5 <> 5)
(nr-mero - 1) o (1 >-

0bservaciones

verdad
verdad

PRUtrBA es un valor lgico falso

nlilnero

verdad
falso
verdad

4)

verdad

es una variable entera de

valor

Tabla 1.5. Prioridad de operadores (lenguaje Pascal)


Operador

Prioridad

no (not )
/, *, div, mod, y (ad)
+, , o (or)
(, ), =, <=, >=, <>

alta

mas

(prlmera operacin

V
mas baj a (ltima operacin

Prioridad
ms ba.ja

div (\)
l

mcd
{,

},

=, (}r

no (rot)
Y (a,ad)
o (or)

{=r

}=

ecutada)

Tabla 1.6. Prioridad de operadores flenguaje BASIC)

0perador

ej

+
ntds alta

ej

ecutada)

26

Fundamentos de programacin

Al igual que en las expresiones aritmticas, los parntesis se pueden utilizar y tendrn prioridad
sobre cualquier operacin.
Ejemplo 1.11
no4>6
no (4 > 14)
(1.0 < x) y (x < z + 7.a)

produce

Ltn

error ta que el operador no

se

aplica a

produce tm yalor yertiariero


si x t,ale 7 y

: ral

-i.

:e obriete un t,alor t'erdadero

1.7. FUNCIONES INTERNAS


!4q lpemciones-qes,e-{g*ie{n-en-los progl4!1as erig:l_en numerosas ocasioftes. ademi.*de_1as

ope{apianes d la
-oPglggiqt-q-s.--aritmiticas--!!-c,}a traadas* un nmero determiudo-de-operadgjg#pggrilq Wgj-". e{,-qminanfunciones itttenlqt.-ilcop,9qri35-o .esr.indar. por ejemplo, la funclon rn se puede uttlizar para determinar el lo,earitmo neperiano de un nmero y la funcin raiz2
( sqrt ) calcula Tataiz cuadrada de un nmero positi\-o.
Erisren otras funcion"i qo" se utilizan para
determinar las funciones trigonomtricas.
La Tabla 1.7 recoge las funciones internas ms usuales. siendo.r e1 argumento de la funcin.

[i"*t*

Jo'

Tabla 1.7. Funciones internas

Funein :

Descripcir6n

Tipo de argumeuto Resultado

abs (x)

valor absoluto de

entero o real

igual que argumento

arctan(x)

arco tangente de

entero o real

real

cos (x)

coseno de

entero o real

real

ep(x)

exponencial de

entero o real

real

1n(x)

logaritmo neperiano de

entero o real

real

1os10 (x)

logaritmo decimal de

entero o real

real

real

entero

entero o real

real

entero o real

igual que argumento

redoadeo(x)
:-

-,:

-:.':

_=_

redondeo de

- -t

cuadrado (x)
-=;j-

se{x)

seno de

cuadrado de

-1

raiz2 (x)

raz cuadrada de

entero o real

real

trurc (x)

truncarniento de -r

real

entero

Terminolo-ea en ingls

ZI

Algoritmos y ptqyarnas

Ejemplo 1.12
ltts funciones aceptan argumentos reales o enteros

sus

resultados dependen de la tarea quc rcalice

lafuncin:

raiz2

(25)

redondeo (6.6)
redondeo (3.1)
redondeo (-3 -2)
tnrnc (5.6)

r,"' ,l:':

7
3
?

5.

tr:unc (3 . 1)
trurc (-3.8)

_3

cuadrado

16

(4)

abs (9 )
abs (-L2\

L2

Ejemplo 1.13
Utilizar

las funciones internas para obtener la solucin de la ecuacin cuadrtica ax2 + bx


Las races de la ecuacin son:

I-

-b+

4ac

II

2a
o lo que es igual:

xl=

-brxT

4*

-a_

2a

-b+^tF

y'CI

o'"'

c=

0.

d,"

4*

2a

Las expresiones se escriben como

x1 = (-b + ra22 (cuadrado(b) - 4 * a * c)). / 12 *


x2 = (-b - ra22 (cudrado(b) - 4 * a * c)) / (2 *

a)
a)

Si el valor de la expresin

raiz2(cuadrado(b) - 4 * a * c)
es negativo se producir un

eror, ya que laraz cuadrada de un nmero negativo no est definida.

1.8. LA OPERAGIru OE ASIGNACIN


La operacin de asignaciirq $ e!Todqigdatle .r_e]gg!j_U!1_y@ble. La operacin de asisna-lou
.se lepresenta con el smbolo u operador <--. La operacin de asignacin s-e cAooqe como rrrrr -,1E
+
se refiere a un lenguaje de programacin.
@o
%.*%--:*--:*-..*

28

Fundamentos de Programacrn
!

El formato general de una operacin de asignacin

es: lJo ri' toi

nomlre de 1a ve,::--;:-e 3 expreslon


(BASIC, FORTRAN) o : =
La flecha (operador de asignacin) se sustituye en otros ienguajes por =
del algoritmo para evila
redaccin
en
flecha
de
ia
(pascal) Cii++. Sin embarlo, es preferible eiuso
de igualdad'
para
el
operador
erclusivamente
iar ambigedades, dejando".t ur del smbolo =

La operacin de asignacin:

Ae5
significa que a la variable A se le ha asignado el I'aior : '
" La acn_{e-ry-1g.lq e_s
que tuviera la variab]e antes
Qestructiva,ya que el vaLor
de operaciones
elrp,inifaZ_"poi el nuevo valor. As. en 1a secuencia

-ds

la asignagin

Ae134
--+5

y 134 han desaparecuando stas se ejecutan, el valor ltimo que toma A ser 5 (los valores25
cido).
de el1qq-,s-e- -qjtliquip*rfltqll_ejeguta la sentencia de asignacin en-do p-asos. En el pdmero
un trp-q*gqpgci
de
valor
un
al tado derecho dl peraar-obtemndose
q"lu
"#;.iJn
a la'iz-quierda
apalece
nombre
"|la-lo;-tif
cuyo
r
ariable
fico. En i segundo paso, este valor se almacena en la
anteriormente'
que
tena
del'ofierador e asignacin, sustituyendo al valor
X<-Y+2
e1a1srd-e-lap-igsi9,q:---t-2-s-esignaalavariable:t'

e, poriuL rtiiir*;l

ello.Tccions-com

""o-

4og,i9

Qe

v4riab. 9l gm!-s-lados de,l qpergdslde-asignacin- Por

l.<-li+1
rienen sentido; se detgrmiU-a.

el- \alor

acJual de la variable N, se increqe4ta -e-n 1 y a confinuaci+el


sin embargo, desde el punto ds vista matemtico no-Ii9ne

Lq+lr4dse_g.s_lgna a tq mj_ !r14--Variable-N,

sen!lq_o_.]:-(-N + 1..
Li. u.Cior.s de asignacin

Lle

clirocte

se

elasifican segn sea el tipo de expresiorqs-en: qrim(-ticas,lg"icas

re s .

1.8.1. Asignacin aritmtica


Las erpresiones en

1as

operaciones de asignacin son aritmticas:


se

etala la expresin 3 + 14 +

talor que toma AMN

1-

se asigna a

lavariable AMN,

es

decir 25 serd el

Algoritmos y

prryrara5 Zl

Seevalanlasexpresiones14.5+8y0.75x3.4yenlaterceraaccinsediridenlos
resultados de cada expresin y se asigna a Ia variable COCfENTE, es decir, las tres operaciones equivalen a COCIENTE <- (14 .5 + 8) / (0 .75 * 3 .4 ) .

Otro ejemplo donde se pueden comprender las modificaciones de 1os valores almacenados en
una variable es el siguiente:

.--

* * 1

El ejemplo anterior

se puede

\.,--..---'

lavariableAtomailvalbr0+l,esclecir,

modificar para considerar la misma variable en ambos lados del

operador de asignacin:

lle2

N <- N +

Ne-3
'4:-.

,t, (*l:,
-,-l
4*
fl,-**;,

En la primera accin N toma el valor 2 y enla segunda se evala la expresin


2 + L - 3 y seasignarnuevamente aN, quetomarelvalor 3.

N+

1, que toma-

relvalor

1.8.2. Asignacin lgica


La expresin que

se evala en la operacin de asignacin es lgica. Supngase que M, N


variables de tipo lgico.

M<-B<5
N<--[4o (7 <=12)
P<-7>'

y P son

f-"F
fu._ f4y
{r*v

Tras evaluar las operaciones anteriores, las variables M, N

P tomarn los

valores/also,verdad,ver-

dad.

1.8.3. Asignacin de cadenas de caracteres


La expresin que se evala es de tipo cadena:

x <- 12 de octubre de

1-942'

Laaccinde asignacin anteriorasignalacadenadecaracteres'

12 de octubre d.e L942

la variable tipo cadena x.

1.8.4. Conversin de tipo


/'
i.En

/ l^ r:1
- r'i-$
'
lvv

las asignaciones no se pueden asignar valores a una variable de un tipo diferente del suvo. Se :::/sentar un effor si se trata de asignar valores de tipo carcter a una variable numrica o u:,'.. -':
numrico a una variable tipo carcter.

Al go ritrn os y prag ra

3't

1.9. ENTRADA Y SALIDA DE IIVFORMACIN


Lo clculos que realizan Ias cotrl+utado&--re.guiru-ea{a-srtiJs.la

zl"odd-delos daros nrJe*qlP:9ryf]Sry.la;-9re:as1-o-c-qu-p..tsg9gtl.-.*s-o:.y-e{tirn-euresullade,desrgrl.'


= Las operaciones de entrada permitn
?'er".n;id*;br; asignarlos a determinadr.
variables. Esta entrada se conoce como operacin de lectura (
read). Los datos de entrada se
introducen al procesador mediante dispositivos de entrada (teclacio,
tarjetas perforadas, unidades de
disco, erc'). La salida puede aparecer en un dispositivo de salida (pantalla,
impresora, etc.). La operacin de salida se denomina eseritrrra (rnri ro\
de lectura y escritura se representan por los formatos
J

l-eer (ljsi:a de,ariabfes


de etrada)
escribir
llista
de expz-esiones de salrda)

As, por ejemplo:


Taar

tL

a\

representa la lectura de tres valores de entracla que se asignan a las variables


A, B y c.

escribir

( hola Vargas

visualiza en la pantalla

NorA

l:

-o

escribe en el dispositivo de

salida-

el mensaje

hola varqas

Si se utilizaran las palabras reservadas en ingls, como suele ocurrir en los


lenguajes de
programacin, se deber sustituir

leer

escribir

read.

writ.e o bien print

por

NorA 2: ln:

se espectnca

it t

tivo del cual

se leen

q.gsgendatos-losjisBpsitivos

9'--sry1d9!p-ctg.,s--o-11-."ltes-lado-v-.1q-rr"a:l@...-"*

ACTIVIDADES DE PROGRAMACIN RESUELTAS


1.1. Disear un algoritmo para cambiar una rueda de un coche.
Algoritmo pinchazo

l.

Inicio.

2'

Si gato del coche est averiado llamar a la estacin de servicio y


bifurcar al punto

trario, continuar el proceso.


3. Levantar el coche con el sato.

4. Aflojar y sacar los tornills de las ruedas.


5' si No todos los tomillos estan flojos y quitados, bifurcar

6.

proceso.
Quitar la rueda.

I ; en caso con-

al paso 4; en caso contrado. co.:-.

-:

32

Fu n da m

entos de P rog

ra m aci

7. Poner rueda de repuesto.


8. Poner los tornillos y apretarlos.
9. Si NO estn puestos tdos los tornillos volver al paso
f

O !.ajar el gato. y !ut,t )o,t "

l.

Fin.

1.2. Encontrar el valor de la variable VALOR despus de

,F

8, en caso contrario, continuar el proceso'

(a) VALAR <- 4'0 * 5 -: ?.2


(b) x <- 3.4
Y <- 2.0
VALOR<_X^Y_Y = s.0 /20
(C) VALOR <_ 5
x<- 3
|LOR?VLLOR+:/ -. 5f
3
(a) VALOR = 24.0
(b) x = 3.4
Y = 2.0
2=9-2=7
vALOR-3^2
(c) VALaR = b
x.- l

LALOR = VALOR * X = 5 * 3 = 15

L.3. Deducir el resultado que

Z'D

1a

ejecucin de las siguientes operaciones:

4'

-"'':

"
\/AT,OR

VALOR

: 15

se produce con las siguientes

instrucciones:

entero: x, Y
x<-I
Y<-5
escribir(x, Y)

araa

e Y toman los

7"il

'

valores 1 Y 5.

La instruccin de salida (escribir) presentar en el dispositivo de salida 1 y 5, con


cf,cos del lenguaje de programacin; por ejemplo,

1..1. Deducir el valor de las expresiones siguientes:

-Y(-ArB-C
]:fArB*C
1(--L-B/C
.e--\L
r(-l-3moilC
_1.

!^{--r--

:J

C\

B=25

C=10

F-ryresin

]- - B + C = 5 + 25 + 1a
_: - .j * C = 6 * )5 * tA
A,,.n(,cta
:- j
19-'>''';'2'f I
C 5t2c
. .
c 5 zr\'=5,2J
-:. - -- @d C = 5 + 25 mod 10 = 5 + 5 I
: - j.r C: (5 +.25) ./ 1A - 3A / 1A
C) = 5 + (25 / 70) - 5 + 2.5
-r_ -._=

\.

x
40

255

7.5
7

10
3

7.5

1os

formatos espe-

Algortmosy alrryramas
1.5. Escribir las siguientes expresiones en forma de expresiones algortmicas:

a)

pyr/2

N
bl M+
P- Q

N
-+

* u /(p-a)
c,

n
mt')/12'a)
m+
p{rfn/P)/,J)
,
-(get-i,

,,m+n
a)

p-q

Ll*

a) M/N + P
b) M+N/(P-Q)

c) (SEN(X) + COS(X)) /TAN (X)


d) (M +.N)/ (P - Q)
e) (M+N/P)/(Q-R/s)
f) (-B + raiz2 (Bn2-4* A* C))/(2*

A)

1.6. Calcular el valor de las siguientes expresiones:

a) B + f .* 3 + 4 *.5
b)-2^3
c) (33 + 3 * 4) /5
d)2^2x3
e)3+2*(184n2)
f) 16 * 6 - 3 * 2
*
*
a) 8 + 7
u\- 3 + 4
8+2L
24
--29+24 -

--

53

b) !---2^3
-8
c)

(33 + 3 * 4) /

--L2'

33+
45

--

d)

/5
/5

-\-\--

)^)*a

12

e) 3 + 2 *

(1-B

- 4 ^

3 + 2 * (18

16)

?,r*a
_H-

--

3+
\-

4
7

2)

seno(x)+cose,?o(.r)

(9enoU,-/>-'/)

' /nn,,,'

tanlx)

-b+"f' -+o,

r/s.! (u,

rt),\a

ibz -r>oc)/,*

o,

31

Fundamentos de Programacron

f) 16 * 6 - 3 *
--96 - 6

r-

1.7. Cmo

se

ti,{"i

i.ri ilj

I'v

intercambian los valores de dos variables' A y B'

..

Sr

s debe recurir
El procedimiento para conseguir intercambia los.valores de dos variables entre

variable

AIx y a las instrucciones

a una

asignacin siguientes:

<- A
A<-B
B <- AUX

AUX

Vemoslo con el ejemplo del ejercicio, donde

A<-10

ALD(
A <-

l0

10

Be5
AUX

<-

ObserYcrles

A(-B
B <- AUX

,r
10
5
5

5
l0

-:
-:
-:

La variable aUX toma el vaior de A

AtomaelvalordeB'

B toma e1 valot inicial de A

'

10

Ahoraa = 5 y B = 10.
para intercambiar entre s sus valo1.8. Se tienen tres variables A B y C' Escribir las instrucciones necesarias
res del modo siguiente:

. B toma el valor de A
C toma el valor de B
. A toma el valor de C
NOTA'. S1o se debe utilizar una variable auxiliar'

Utilizaremos una variable auxiliar AllX.


I-as instrucciones que resuelven el problema de intercambio son:

:-.{ <- A
-:_ <- :
l<-3
<- .--:.,
- =
Comprobmoslo con los valores de

ISrenn
_

A e y C: 5, 10 y 15'

i':.i':. ir.tr,g..:rr ,.:: .i '.f:tr:rt.,::t

:.rrrAItX

!-<-a

: (- -le-:

l--:': - -1-L<-:
l<_-

10
5
-510155
10
a

15

10

t0be.rv.aCioneS

Algoritmos

35

Drogramas

3nir dtr! i eit'les' la r riable AUX


igual que en el ejercicio de intercambio de Yalores
no modilica su valor'

Obsr.ese que al

l.g.Deducirelvalorquetomalavariabletraslaejecucindelasinstrui..i..nes:

Ae4
B(_A
BeA

3.

-'-

-..-*-?

Medianteunatab]asedaunmtodoeficazparaobtenerlossucesivosvalores:
AB

(1) A<-A
(2) B<-A
(3) B (- A + 3

AI

el valor n'
Despus de la instruccin (1) la variable Acontiene

-^^ ^'

LavariableBnohatomadotodavaningnvalorySerepresentaesasituacinconunguin'

(4 a la variable B'
La instruccin (2) asigna el valor actual de A )
A + 3 , lo que produce un resultado de T t-l
expresin
la
de
clculo
e1
(3)
efeita
La instruccin
(4) se destruye'
valor
este valor se asigna a la variable B, cuyo ltimo
A y B son:
variables
las
tienen
que
Por consiguientJ, los valores finales

^-1,
1.10.

il)

variables
,Qu se obtiene en las

Ay

instrucciones?
B, despus de la ejecucin de las siguientes

Ae5
u <- o"*

'-- . t. ',. t i
U
A<-A+1 :r -"i rr- d.

B+A-"

'

/
J \ fr"- b

1.

-,:

4
-;-

Siguiendo las directrices del ejercicio anterior:

Instruccin

(1) A<-5
(2) B+_A+6
(3) A(-A+1
(4)

L 1 - (

'

B no toma ningn valor

+ 6(5 + 6) YseasignaaB
A + 1 (5 + 1) Y se asigna a A'

SeevalaA

11
LI

SeevalaA

Losvaloresltimosdeayeson:A =
1.11. Qu se obtiene en las variables A,

Ae3
B<-24
C<-A+B
B (- A +,8
A<-B_C

Observaciones

6'B =

yc

Se evala
borrndose el valor que tena
nuevo valor (6)

- 516 - lt

(5) y tomando el

yseasignaaB

1'

despus de ejecutar las instrucciones siguientes?

,"/-.

j/' ..

)
i.

t-'

.../

36

Fundamentos de programacin

lnstruccinABaObservaciones
(l) A<-3
(2) B <- 20
(3) C<-A+B
(.4) B<-A+B

3
3
3
3

3ycnotomanningnvalor

2a
20
23

valor
SeevalaA+B(20+3) yseasignaaC
SeevalaA+B(20+3) yseasignaae;
C si-sue sin

-:
j

destruye el valor antiguo (20)

(5) A<-B-C

SeevalaB Cl23-23) yseasignaaa

2-1

Los valores finales de las variables son:

)'

1.12. Qu se obtiene en A y B tras la ejecucin

A <-

de

10

B<-5
A<-B
E-

InstruccinABOtservaciones'
(l) A <- 10
r?) R-5
(3) A<-B
(.4) 'B <- A

10
10
5
5

:
:

a
5
5

.:-

no ioma valor
recibe el r,alor inicial 5
toma e1 I'alor de B (5)

= Ioma el r.alor actual de A (5

Los valores finales de Ay B son 5.


En este caso se podra decir que la instruccin (4) : <-- -l es retlunlante respecto a las anteriores, ya que
su ejecucin no afecta al valor de las variables.
-.

1.13. Deterrninar el mayor de tres nmeros enteros.


Los pasos a seguir

son:

1. Comparar el primero y el segundo entero, deduciendo cul es e1 maYor.

i.

Comparar el mayor anteriorion el tercero y deducir cu1 es e1 ma1'or. ste ser el resultado.

L,-,. p;..-rs antenores se pueden descomponer en otros pasos mi simples en 1o que se denomina
,,: ; ,.:,:' d I al g orirtno.
1

refina-

O'tenr el primer nmero (entrada), denominarlo NtI'41.

l. Ol'ienr ei .egundo nmero (entrada), denominarlo NIJM2.


con - :;'e y seleccionar el mayor; si los dos enteros son iguales, seleccionar
-: . Crril',pr.li l
L,mul c.ii nmcfo . --., O:
.

\IJM1..

J.

Ot'tener el ter,-er nmero (entrada) y denominarlo Nlll't3.


l l r -: .rrn l
-l:3 ), seleccionar el mayor; si los dos enteros son iguales, seleccionar el

5. Comparar
6.

l.--: -:.. Denomin

a este nmero I4AYOR.

Presenta el valor de

7. Fin.

l--.,:

salida).

-(Lf""/
ir',1or'

.-( ';r;, ,-r 4 .tt*'ttrnh -n/,t-. t' /tt'4


i; .,
'- -.*, .' -., I
/o,/n.,"k'4't,'e/'2
-, ?/',-1)o,,fo i,- f
Algoritncs; f,':"-:'.-.s
ul - '/o/rr"n , ._.kt z (l:, 4*- '7.{r.l-uQ et2-t c,2,

--.,

-.'.:

37

EJERCICIOS
1.1. Disear los algoritmos que resuelvan
los siguientes problemas:
a) Ir al cine.
r'
b) Comprar una entrada para los toros.
c) Colocar la mesa para comer.
d) Cocer un huevo.
e) Hacer una taza de t.
f) Fregar los platos del almuerzo.
p) Buscar el nmero
de telfono de un alumno.
h) Reparar un pinchazo de una bicicleta.
i) Pagar una multa de trfico.

o /g t,.c/'
rt a'r',)7v,; f tt" l: ,
]^at,

l:4,: ;

f{ i! J',,",$' r': ;

\J

pinchado rse dispone de henamienra\ y garo). _


J)
[::?,::palomrtas
lllermtico
k) Eacer
de maz en una ora puesta al fuego
con aceite, sar v ma2.
t) Cambiar el cristal roto de una ventana.
relefnica. Considerar los casos: a) manuat,con
operadora

!)
l

3,)
l'2'

I#..J;i:i,lT:da

,b) auomtrco; c)

de un techo. b

Quitar una bombilla quemada


Encontrar la media de una lista indeterminada
de numeros posltrvos terminada con un
nmero
negatlvo.

cules de los siguientes identificadores no son vridos?


a) XRayo
) x_Rayo

c)
e)
g)

d)x

R2D2
45
ZZZZ

)
h)

N14

3p

1.3. Cules de Ias siguientes constantes no


son vlidas?

a) 234
c) I2tr-5
e) 32,767
'gf
T:68 + j
l -3-. 5- x_ l=Q
k) o. oooool

b) -8.915

d)

f) 7t2
h) -1872

L-Lt:o
l) 224E1

1.4. EvaluarlasiguienteexpresinparaA
t+A-4.8

I.5.

= 2yB = \;

Evaluar la expresin

4/2*3/6+6/2/I/5

2 / 4*

siguientes expresiones algebraicas como


expresiones argortmicas:

''u';uIg'as
4 E -+ac
e)

4x2

-2x +7

b)

x'+y'

,3x+2y'
)-

L',)

*-; -D(

., ),-}l,
t)4

xz*xt

4-

k)'3-ttr'

,,
a)
h)

a+b

c-d
x,vz

l) (x, -

x, )2 + 1..

:'

---

38

Fundamentos de programacin

1.7. Escribir las siguientes expresiones algortmicas como expresiones algebraicas:

a)b^2-4*a*c
b) 3 * X ^ 4- 5 * X ^ 3 + X *
c) (b+d) , tc-4)
n (L/2)
d) (xn2+yn2)

1-2

- !7

1.8. Si el valor de A es 4, el valor de B es 5 y el valor de C es 1, evaluar las siguientes expresiones:

a)B*A-B^2/4*C
b) (A*B)
3/2
c) (((B+C) /2*A+Ia)
1.9. Si el valor de A es 2, B es 3 y

*3*B)
C es 2, evaluar

-5
la expresin:

a^b^c
1.10. Obtener el valor de cada una de las siguientes expresiones aritmticas:

a) 7 dv?
b) 72

c) 12dLv3
d) 12 pd 3
e) 0rpd5

f l5 Incd 5
d 7* 10-50mcd3*4+9

h) (7* (10-5)mcd3)*4+9

NOTA: Considrese la prioridad de Pacal: ms alta: *,

/, dv,;

ms baja'. +,

1.11. Encontrar el valor de cada una de las siguientes expresiones o decir si no

a 9-5-3
b) 2dv3+315
c) 9dv215
d) '1 d.5 rrpd 3
e) 1. (5 lncd 3)

.ft (7 rrlcd 5) pd 3
gt fi trd.5 rrod 3)
ht tt12 + 3) div 2) / (8 - (5 + 1))
ir 1l I I * 3
jt raiz2 (suadrado(4))
kt erad'ado (raiz2(.4'|1
ii trci81.5 l+ rdorrdeo(81.5)
Considrese la priondad de1 E jercicio 1.10.

-.

es una expresin

vlida:

CAPITULO

LA RESOLUCION DE PROBLEMAS
CON COMPUTADORAS Y LAS
HERRAMIENTAS DE PROGRAMACIN

CONTENIDO
2.1

'

La resolucin de problemas.

2.2. Anlisis del problema.

2.3. Diseo del algoritmo.


2.4. Resolucin del problema mediante computadora.
2.5. Representacin grfica de los algoritmos.
2.6. Diagramas Nassi-schneiderman (N_S).
2.7. Pseudocdgo.
ACTIVIDADES DE PROGRAMACIN RESUELTAS.
EJERCICIOS"

La resolucin de probremas con computadoras se puede dividir


en tres

fases:

o anlisis del problema,


o diseo del algoritmo,
o resolucin del algoritmo en la computadora
En este capturo 6e ana,rizan ras tres fases anteriores. EI anrisis y
er
diseo del algoritmo requiere ra descripcin der probrema en suopronremas a base de refinamientos sucesivos y una herra.mienta d" pro-

gramacin
-diagrama de flujo, diagrama N_S o pseudocdigo:; /os
conceptos fundamentates
det antisis, diseo y herramientr d" prrg.ramacin (dagramas de flujo, diagramas N_S y pseudocdigos)
se

describen como conocimientos indis[ensabres para er aprendizale


de
progra macin de computadoras.

ra

39

40

Fu n

dame ntos de

rogra maci n

2.1. LA RESOLUCION DE PROBLEMAS


La principal raznpara que las personas aprendan a programar en general y los lenguajes de programacin en particular es utilizar la computadora como una herramienta para la resolucin de problemas. Ayudado por u_n? computadora, la resolucin de un problema se puede dividir en tres fases

'7. andlisis del problema,


o desarrollo del algoritmo,
i3. resolucin del algoritmo en la computodora.

2. diseo

El primer paso
del problema- requiere que el problema sea definido y co11-rpgdido
-anlisis
pueda ser analizado con todo detalle. L-na rez aqa-lizado el problema, sed-ebe
claramn1 pia que
desarrollar el algoritmo
paso a paso para solucionar el problema- dado . Por
-procg{imlento
ltimo, para resolver el algori-mo
mediante una computadora se necesita codificar el algoritmo en un
lenguaj de programacin Pascal, C/C++, COBOL. fOnfnff. etcrr-9.q--decir, con",erii el algq;fr;;o
en programa, ejecutarlo y comprobar que el programa solucional erdaderamente el problema. Las
fases del proceso de resolucin de un problema mediante computadora se indican en la Figura 2.1.

2.2. ANLISIS DEL PROBLEMA


el plol.g!!tg_{el anlisis de un problema

es ayudar_a1pr-ggryryqdor pglq !.19-ga{ I ung gle-rta comprnii-On Oela natrateza-tretpfot'lea.Efprol;Im-debisiar Uien ennio
s eiea iigar na
-"soluCi6n tiffetfiil -Para poder definir con precisin el problema se requiere que 1as especificaciones de enqqgJ
salida sa dscritas-corrdetalle. Una'buna definicin deI probiema, junto con una descripcin detllada de las especificaciones d.entrada y salida, son los requisitos ms imporlantes para llegar a una

ii

solucin eficaz.

El3!,lisisdelproblsuacxige-un-a lsetura-p{-9-v-tadelprsble*ra findeobteueLu!4-sgqggneral


de 1o qq_q9_qo,1rylla._La.f9gunda lectura deber servir pararespo$deral4-_prcgunlas:

o
e

Qu informacin debe proporcionar la resolucin del problema?


Qu datos se necesitan para resolver el problema?

La regue-9ta a l?lri1gqlapregunta-indicar los resultados deseados olas salidas del p-robleruaLa respuesta a la segunda pl"93,r_l4i_c-?r4-q}9 g-!9-s_ se.p,r_opocionq19 la enradas del*prob.lema.

An lisis

Resolucin del

del

problema con
la computadora

problema

Figura 2.1 . La resolucin de un problema.

La resolucin de problemas con computadoras

Definicin

las

herramientas de proc.^

41

Especif icacio nes

del

de

problema

entrada
Figura 2.2. Anlisis del problema.

Ejemplo 2.1
Leer el radio de un crctilo y calcular e imprimir su swperficie y la longitwtl de la circunferencic.t.

Anlisis

'>

Las entradas de datos en este problema se concretan en el radio del crculo. Dado que el radio
puede tomar cualquier valor dentro del rango de los nmeros reales, el tipo de datos radio debe ser
real.
Las salidas sern dos variables: superficie y circunferencia, que tambin sern de tipo real.

Enfradas:

Radio del crculo (variable RADIO).


Superficie del crculo (variable AREA).
Circunferencia del crculo (variable C IRCUNFERENC IA).
Variables: RADIO, AREA, CIRCUNFERENCIA (tipo real).

Salidas:

2,3. DISEO DEL ALGORITMO


Una computadora no tiene capacidad para solucionar problemas ms que cuando se le proporcionan
los sucesivos pasos a realizar. Estos pasos sucesivos que indican las instrucciones u.ecutur por la
mquina constituyen, como ya conocemos, el algoritmo.
La infotmacin proporcionada al algoritmo constituye st enfratla y la informacin producida por

el algoritmo constituye stt salida.


I=g?-Iab-l9al4q cqmplejos se pueden resolver ms eficazmente con la computadora cuand_o se
rompen en subproblems que sean ms fciles de solucionar que el original. Este mtodo se suele
denominar divide y uettcerts \divide and conquer) r19nspte n dividii u, plo-b]gpt-gompleq
T
,9!rqqJras-s-1.4p]. As. el problema de encontrar lluplfltiey 1aIositud d n ail se A-.
dividir en tres problemas ms simples o subproblemas (Figura 2.3).
La descomposicin del problema original en subproblemas ms simples y a continuacin dividir
estos subproblemas en otros ms simples que pueden ser implementados para su solucin en la computadora se denomina diseo descendente (top-down design). Normalmente los pasos diseados en
el primer esbozo del algoritmo son incompletos e indicarn sto unos pocos paios
1n mximo i
doce aplgximadamente). Tras esta primera descripcin, s1o-s sg a11l_plal eq^uqa {esgripcin :::..
detallada con ms pasos especficos. Este proceso se denomina refinimiento del algorittict (-!r .r,, . se re.finemenl). Para problemas complejos se necesitan con frecuencia diferentes ttitet".,,;. ,.. ...miento antes de que se pueda obtener un algoritmo claro, preciso y completo.

42

F u n d a rn e

ntos d e prog

ra m aci

Superficie y

longtud de
circu nferencia

Clculo
de

ntrada

radio

(R)

S=Pl *R^2

longitud

(C)

L=2*Pl

+R

Figura 2.3. Refinamiento de un algoritmo.

E1 problema de clculo de la circunferencia y superficie de un crculo se puede descomponer en


subproblemas ms simples: (1) leer datos de enrrada. )calcuiar superficie y longitud de ircunfe_
rencia, y (3) escribir resultados (datos de salida).

Subproblema

Refinamiento

leer radio

leer radio

caicular superficie

superficie = 3.1+1592 * radio ^ 2

calcular circunferencia

circunferencia = 2 x

scibir

resultados

e s

rib

3.

14i592 * radto

ir radio, circunferencia, superficie

Las rentojas ms imporlantes del diseo descendente son:

o
o

El problema

se comprende ms fcilmente al dividirse en partes ms simples denominadas


tndulos.
Las mod-rcaciones en los mdulos son ms fciles.
La comprobacin del problema se puede verificar fcilmente.

Tras los pasos anteriores (diseo descendenfe y reJinamiento

por

pasos) es preciso representar

e1

algoritmo mediante una determinada herramienta de programacin: diagramn ie


llujo, psLuclocdigo
o diagramo N-5.
As pues, el diseo del aisoritmo se descompone en las fases recogidas en la Figura 2.4.

La resolucin de problemas con computadoras

las herramientas de

p,so-^--- ^-

Diseo
de un

algoritmo

Refinamiento
por pasos
(2t

*l

,/

43

,/ : /''t1
-^

Herramientas de
programacin (3)
de flujo
- diagrama
pseudocdigo
- diagrama N-S

Figura 2.4. Fases del diseo de un algoritmo.

2.3.1. Escritura inicial del algoritmo


Como ya se ha comentado anteriotmente, el sistema para describir (escribir) un algoritmo consiste
en realizar una descripcin paso a paso con un lenguaje natural del citado algoritmo.

que-un algorilmo qg g-q(t-qd-q.-o---cp-njunto dereglas.para-sshreienar-uaproble.rna.


mentale e sia s re glas tienen I as sigulenJqs p.rpptp-dade-s :

o
o

$.gcoldemo_s_

gn ciculos ele-

deben estar seguidas -de alguna secuencl.p de_firlida de pasos hasta-que se obtenga .unJesqll4do
coherente.;.
slo puede ejecutarse una opgracin alaveT.

El flujo de control usual de un algoritmo es secuencial; consideremos el algoritrno que responde a la pregunta
Qu hacer para ver la pelcula TiburnZ

lar

La respuesta es muy sencilla y puede ser descrita en forma de algoritmo general de modo simia:

ir al cine
comprar una entrada (billete

ver la pelicula
regresar a casa

o ticket)

El algoritmo consta de cuatro acciones bsicas, cada una de las cuales debe ser ejecutada antes
de realizar la siguiente. En trminos de computadora, cada accin se codificar .n
,n o varias sentencias que ejecutan una tarea particular.
El algoritmo descrito es muy sencillo; sin embargo, como ya se ha indicado en prafos antedores, el algoritmo general se descompondr en pasos ms simpls en un procedimient denominado
refinamiento sucesivo, ya que cada accin puede desco*pon".i" a su vez en otras acciones
simples.

As, por ejemplo, un primer refinamiento del algoritm


forma siguiente:

f. inicio
2. ver la carttelera de cines en e1 periodico

ir a1 cine

se puede describir de

l.

Fundamentos de Programacin

44
3.

si no proyectan <<Tiburon>> entonces


3.1. decidir otra acti-rdad
3.2. bifurcar al Paso 7
si_no

3.3. ir al cine
fn_si
4. si hay cola entonces
4.1. ponerse en ella
4.2. mientras haya personas de-a:-:= hacer
4.2.f. avanzar en la cola
fin-mientras
fin-si
5. si hay localidades entonces
OTPLoI r, a en'rada
.2- Pa-oL o.o 3o'o
5.3. localizal: la(s) butacat:
5.4. mientras proyectan la p=--:- = hacer
5.4.L. ver la Pelicula
fin-mientras
:.'. abandondr er cia'
si_no

5.6. refunfuar
fin-si
, volver a casa
fin

EnelalgoritmoanteriorexiStendiferentesaSpectoSaConSiderar.E.!r@ras

n-qr gt:):-Estas palabras-deseriben


reser-vadas se han escrito delibgadqmg-rl-te en ll-egdta-LmieirlfaS, Si
control fundamentales y proce;os de tona de decisin en el algoritmo,.Eslp-q1nc1u-

las estructuras de
yen los conceptos i4pofi4ntes

le

repeseteg9!1.(expresadas por si'gntontes-si-xo ,/-{hqry-.c!e}&

e iterar:fin-iterar*en-ingls'
ii_r, (expreiadas ion mieniras-hce o a.veces rpetir-hasta
especialmente los de proalgoritmos,
los
todos
casi
en
se"en:uentlan
whl-do f tpat-anit)que

de acciones a seguir o bien


ceso de datos. La capacd;d de decisin permite seleccionar alternativas
ia repeticin una y otra vez de operaciones bsicas'

si p:cyectan La pelicula seleccionada rr


si no ver la televisiorL, rr al futbol o
mieotras iaya Personas en la cola
.-,==--= -eqar a la taquilla
empleo de inden'
Otro aspecto a considerar es el mtodo elegido para descnbir-Ios algoritmos:
tan importante la
racin rsan-wado o justificacin) en escritura e algoritmos. En la actualidad es
de las acciones
escrirura de programa como su posterior lectura. Eo se faciiita coLla indenfacin
lo largo de todo el libro
interiores a la-\ esrructuras fundar-nentales citadas: selectivas y repetitivas. A
la indentacin o sangrado de los algoritmos ser norma constante'
para termrnar estas consideracines iniciales sobre algoritmos, describiremos las acciones necela accin
sarias para rel-lnal el al-soritmo objeto de nuestro estudio; para ello analicemos
-=:afs)
se resuelve con
Si los nmeros de los asientos estn impresos en la enffada, la accin compuesta
el siguiente algoritmo:

La resolucin de problemas con computadoras

las

herramientas de programacin

45

f. inicio //algroritmo para encontrar


butaca Ce_ :s:=:_=::_
=-.
2. caminar hasra llegar a la primera la
fit;-;;';"._._;'==3. repetir
compara numero de fita con numero impreso
en llt__:::
si no son iguales. entonces pasar a la siguienr=
i: a
hasta_que se localice 1a fila co.rect_
4. mientras numero de butaca no coincida
con
hacer avanzar a traves de la fila a la numero oe cr__=_=
siguiente bj_!a:a
fin-mientras
5. sentarse en la butaca
6. fn
En este algoritmo la repeticin se ha mostlado
de dos modos, utilizando ambas notaciones. nepese ha considerao't*tir, como ocurre norrnalmente' que el nmero del asiento y fila coincide
con el nmero y fila rotulado en el billete.

tir"' hasta-que y mientras... fin-mientras.

2.4. RESOLUCIN DEL PROBLEMA MEDIANTE COMPUTADORA


ng-e!a.lg9-ritmo-est diseado- y representado grficamente mediante
una herramienr+de
programacin"(diagrama de flujo, pseudcdigo
o diagrima x-y r" a.u" pasar a la fase de resolucin prictica del problema corrla computadora.
Esta fase se descompone a
:u vez n 1as siguientes subfases:

-lli-*

cldrfic1cin det

algoritmo en un programa,
,1^.
.. z. qecucton det programa,
i 3. comprobacin del programa.

*:li:"*le1,1godtmo.ste

se describe en una herramienta de programacin


rat como un

#s;:*:J:l?"::lri'J,*t:"9o'aiso;;;;;;,;;;'f#'l'J:ilffi"ffi

*::""j:"j:*^'"1:',:T.,",1111,s1,9".a{rJ"si;;;il;"",'"",1J;ii,:H;IffiTJ:'il1
jil:?'fi jJ[X'.fffi

#:

?:::?:::lr"il-*3'16'eposye;i""rrd'td';'.;"#"

na codificacin

:1

-"1qq,o-lJ.ryo-g.qc-lit-osq,uoJenguajeesp""ifi.d;p;;;'J;;;

Tras la codificacin del programa, deber


ejecutarse en una computadora y a continuacin
de
comprobar los resultados pasar a Ia fase
final de documentacin.
( , rl
Resolucin

del problema
con computadora

Codificacin
del

programa

Ejecucin
del

programa

Comprobacin
del

programa

Figura 2.5. Resolucin del problema mediante


computadora.

46

Fu nda

mentos de prog

ra

macin

2.5. REPRESENTACION GRAFICA DE LOS ALGORITMOS


Para representar un algoritmo se debe utilizar a1gn mtodo que permita independizar dicho algode1 lenguaje de programacin elegido. Ello permrtir que un al-soritmo pueda ser codificado
indistintamente en cualquier lenguaje. Para conse-suir este objetii'o se precisa que el algoritmo sea
representado grfica o numricamente, de modo que 1as sucesivas acciones no dependan de la sintaxis de ningn lenguaje de programacin. sino que la descripcin pueda servir fcilmente para su
transformacin en un programa, es decir, su codi.ticacitt.
Los mtodos usuales para representar un algontmo son:

ritmo

i..

l. diagrama de flujo,
",4 2.
diograma N-S (Nassi-Schneidermanl.
3.
4.

lenguaje de especificacin de algorinnos; pseudocdigo,


lenguaje espaol,

5. frmulas.

Los mtodos 4 y 5 no suelen ser lci1es de tran-.iormar en programas. Una descripcin en


espaol narrativo no es satisfactoria, ya que es demasiaCo proli-ja y' generalmente ambigua. lJnafrmula, sin embargo, es buen sistema de representacin. Por ejemplo, Ia frmuJa para la solucin de
una ecuacin cuadrtica es un medio sucinto de erpresar e1 procedimiento algortmico que se debe
ejecutar para obtener las races
= (-b

xl

trlr'

4ac)

/2a

x2=Fb- b -lac\/2a

significa

l.

Eleve al cuadrado b.

2. Toma a; multiplicar por c; multiplicar por 1.


3. Restar el resultado de 2 del resultado de l, etc.
Sin embargo, no es frecuente que un algoritmo pueda ser erpresado por medio de una simple fr-

mula.

2.5.1. Diagramas de flujo


L

idialrama-defuio-(fTawchart)

es una de las tcnicas de representacin de algoritmos ms


a 1a vez ms utilizada, aunque su empleo ha disrunuido considerablemente, sobre todo
i.e sde 1a aparicin de lenguajes de programacin estructurados. Un diagrama de flujo gs un
_d-iagra=

lnii,gua

que utiliza 1os smbolos (cajas) estndar mostrados en la Figura 2. y que tiene los pasa_s del
alSC:n iscJi-os- en esas cajas unidal pi-flgch_a. dgnomina{as ttneai ai ftuo, que indican la
T1.

\-ejri:i_r in

quc :e deben ejecutar.


La Fi_sura 1.7 95 ,, diagrama de flujo bsico.
El diasrama citado (Figura 2.7) representa la resolucin de un programa que deduce el salario
neto de un traba,jador a partir de la lectura del nombre, horas trabajadas, precio de la hora, y sabiendo que los in'rpuestos apiicados son el 25 por 100 sobre el'salario bruto.
Lqq-rnrhotos.5tndr-ry1alizfl-ss.ps ANI (abrgylatura de American Nqtional Standards
Insllllttg;-orr n!) .1dos En ia Figura 2.8 se representa una plantilla de dibujo tpica donde se
-t

La resolucin de probremas

Smbolos

principales

con computadoras

ras herramientas de

programacin

47

Funcin
Terminal (representa el comienzo, inicio,
1 el nal. ,.tin . c:
representar tambin una parada o interrupcidn
prorramrC;
en un programa).

::

r :,_-::-L:i. Puede

;:: ::: i3; : !]n,:, re:liZar

Entrada/Salida (cualquier tipo de i,


enrrada, o .egisr.o de la informacin
p.o..rud, en ur :,;:.:::: ry:ilir.:.,
salida).
Pro99s9 (cualquier tipo de

op".u.i@u,o
**Ju,
"n

informacin almacenada

<->*
Yno
+s,

ll:,".,r^"-l-O:,
transferencia,]" etc.).

*i.,

o.

:,-=.-.u

operaciones aiirm:r

".

togi.ffi

Decisin-(indica operacioner
do1- y en funcin del resuttao e ta misma dererminr
cut de to:
;":,"-1T^.1^T:lte
carninos alrernativos del programa se debe
seguir; nomalmenre iene ,i.
:]:111:r
salidas
SI o NO--, p"ro"pueO. t.r", t.." 3;;;,
..:::';

ffi,

-respuestas

(en funcia d.r .",,lir,,r"


diferentes caminos de acuerdo con dicho
resuttao;

3::::::l"llllge

Conector'(sirve para enlazar Oo.


salida y orro conecror en la enrrada. Se
refiere uio
:l:1..^.i:l.rla,
misma
pgina del diagrama).

...._

Indicador de direccin o lnea de


operaciones..

"or.*,

"n

l,

n,

Lnea conectora (sirve de unin entre dos


.l*Uofor)
Conector (conexin entre dos

Oun,o.G

Llamada a subrutina o a un proceso p..d.t.,


independiente- clel programa principal, qu"
.".iu" ,no entrada procedente de dicho
programa, realiza una tarea dererminad
y regresa, a

mbolos
secundarios

,"irJ,uiir"s.'";;;t trr.

F'uucin
Pantalla (se utiliza en ocasiones en lugar
Impresora (se utiliza

",

deJ

smbolo de E/S).

n"u.ion"r@

Teclado (se utiliza en ocasiones en lugar


del smboto de E/S).

:'::T:l:':"'t,

uagrama oe lluJo. Se pueden dibujar


a cualquier lado del smbolo).

Figura 2.6. Smbolos de diagrama de


flujo.

nr . r.

48

Fu nd a m

ntos de p rog

ra m aci

bruto<-

horas + precio

neto<-

bruto - tasas

Figura 2.7. Diagrama de flujo.


contemplan la mayora de los smbolos utilizados en el diagrama; sia embargo, los smbolos ms utilizados representan:

*:)

o proceso. I#l
o decisin. (,\
A o conectores.Q
o lln.
S._r'
o entrada./sat u, fl
o direccin del flujo, --)
v

se resumen en la Figura 2.9.

En un diagrama de flujo:

o
o

eriste una caja etiquetada ,, inicio " , Que es de tipo elptico,


existe otra caja etiquetada f in de igual forma que la anterior,
si existen oras cajas, normalmente son rectangulares, tipo rombo o paralelogramo (el resto de
las hguras se utilizan slo en diagramas de flujo generales o de detalle y no siempre son
imprescindibles).

Se puede escribir ms de un paso del algoritmo en una sola caja rectangular. EI uso de flechas
significa que la caja no necesita ser escrita debajo de su predecesora. Sin embargo, abusar demasiado
de esta flexibilidad conduce a diagramas de flujo complicados e ininteligibles.

La resolucin de problemas con computadoras

ras herramentas de

programacin

49

Smbolos de diagramas de ftujo


Cada smbolo visto anteriormente indica el tipo cle operacin a ejecutar y
el diagrama de flujo ilustra grficamente la secuencia en la que se ejecutanlas operaciines.

Las lneas de flujo (-+) representan el flujo secuenciar de la lgica del programa.
rectngulo ( T--l I significa algn tipo e proceso en la coffiadora, es
decir, acciones a rea.
lizar (sumar dos nmeros, calcular Taraz-cuadiada de un nmero, etc.).
- El paralelogramo ( l ) es un smbolo de entrada./salida que representa cualquier tipo de entrada-o salida desde el programa o sistema; por ejemplo, entrada de
tehdo, salida en impresora o pan-

talla, etc.

El smbolo rombo
tes alternativas

) es una caja de decisin que representa respuestas s/no o bien diferen-

1,2,3, 4, ..., etc.


cada diagrama de flujo comienza y termina con un smbolo terminal (
c).
Un pequeo crculo ( o ) es vL conector y se utiliza para conectar caminos,
tras roturas previas
del flujo del algoritmo.
otros smbolos de diagramas de flujo menos utilizados de mayor detalle que
los anteriores son:
Un trapezoide (v ) indica q\e tn proceso manual se va a ejecutar en
contraste con el rectngulo, que indica proceso automtico.

El smbolo general de entrada./salida se puede subdividir en otros smbol


os: teclado (w+), pantalla ( '), impresora (;;, disco magniiro (
disquete o discoflexible (E),,i#i

),

r.

Eiemplo 2.2
calcular la media de una serie cle nmeros posifivos, suponiendo que
los clatos se leen desde ut te t,minal. Un valor de cero
entrqda- inclicard qu" ,, hallcanzado elJinal de la serie c
-como

nmeros positivos.

50

Fu n da

me ntos

de

prog

ra m ac i

El primer paso a dar en el desarrollo del algoritmo es descomponer el problema en una serie cle
pasos secuenciales. Para calcular una media se necesita sumar y contar loi valores.
Por consiguiente, nuestro algoritmo en forma descriptiva sea:

1. Iniclalizar contador de numeros C y variable


. Lee'r un numero.
3. S el numero leido es cero:
. ca-l rula-r la redia;
. impr i mi r La media;
. t-n de_ p'o.eso.
Si el numero leido no es cero:
. calcular la suma,.
. increment_ar en uno e1 contador de nr=-e:cs;
. ir al paso 2.
4 . Fln.

sum.a S.

El refinamiento del algoritmo conduce a los pasos sucesivos necesarios paranealizar las operaciones de lectura de datos, verificacin del ltimo dato. suma y media de los datos.

Diagrama

de

flujo

2.2

c<-0
s<-0

contador de nmeros
sumador de nmeros

,"1 fu
{-

dato <>

*
.L

a-

*
4

2L/

q'
)
/"

)t2

/
t2

'-)

t:*
.{ *)
tg;

lory'lr

----_.)

Si el primer dato ledo es 0, la divisin szc


producira un error si se ejecutara el algoritmo en una computadora, ya que no eit
permitida en ella la divisin por cero.


La resolucin de problemas con computadoras y las herramientas de programacin

51

Si el primer dato ledo es O, la divisin S /C producira un error si se ejecutara el algoritmo en


una computadora, ya que no est permitida en ella la divisin por cero.

Ejemplo 2.3
Suma de los nmeros pares comprendidos entre 2

Diagrama

de

1 0 0.

,,)

flujo 2.3

SUMA e-

ik"

SUMA + ruurnO

uk

NMERo <NUMERO + 2

j .-l
I

Ejemplo 2.4
algoritmo que resuelva el siguiente problema:
Clculo de los salarios rnensuales de los empleados de una empresa, sabiendo que stos se calculan en base a las horas semanales trabajadas y de acuerdo a un precio especificado por hora. Si
se pasan de cuarenta horcts semanales, las horos extraordinaias se pagarn a razn de 1,5 yeces la
hora ordinaria.
Se desea realizor el

Los clculos son sencillos son:

1. Leer datos del archivo de la empresa, hast.a que se encuentre.1a ficha fr::
_ archjvo (HORAS, PRECIO_HORA, NOMBRE) .
2. Si HORAS <= 40, entonces. SALARIO es el producto o HODAS por
1
PRECIO_HOFA.

3. Si HORAS > 40, ent.onces SALARIO es la suma de 40 veces PRECIO HOF-I.


veces PRECIO_HORA por (HORAS-40).

r-=

52

Fundamentos de programacin

El diagrama de flujo completo del algoritmo


Diagrama

de

se indica a continuacin:

flujo 2.4.a

HORAS <= 40

SALARIOeHORA*
PRECIO_HORA

SALARIO<40*PRECIO_HORA+
1,5*PRECIO_HORAX
(HORAS-40)

La resolucin de problemas con computadoras

las

herramientas de programacin

o bien:

Diagrama

d,e

flujo 2.4. b

d.

-.j
\r1.

SALARIO<HORASX

,t

PRECIO_HORA

r1.

SALARIO<40*PRECIO-HORA+

,"\

o*)-{{;r

1,,5*PRECIO-HORA*
(HORAS-40)

y'

5= 4;* h*
fi

{
)'-

1..
,!

hf

r:]t?

54

Fundamentos de programacin

Ejemplo 2.5
La escritura de algoritmos pqra realizar operaciones sencillas

le conteo es una de las primeras


cosas que un ordenador puede aprender
supongamos que se proporciona una secuencia de nmeros,
tales como

302

y desea contar e imprimir el nmero de ceros rre ra secuencia.

El algoritmo es muy sencillo, ya que slo basta leer los nmeros


de izquierda a derecha, mientras
se cuentan los ceros.
Dicho algoritmo, por consiguiente , ufllizacomo variable la palabra
NUMERO para los nmeros
que se examinan y TorAL para el nmero de ceros encontrados.
Los pasos a seguir en el algoritmo
escrito en un lenguaje natural son:

1.
2.
3.
4.
5.
5.
7.
.

Establecer

TOTAL a cero.
Quedan ms numeros a examinar?

Si no quedan numeros, imprimir ei \_a_:t r=


y fin.
Si exsten mas numeros, ejecutar 1os:_::s :-_:;,_
a g.
Leer e1 siguiente numero y dar su ra,c:
Si NUMERO = 0, incrementar TOTAL en ::c. = --.-a:rabre NUMERO.
S NUMERO ., 0, no modi ticdr TC-q_.

RfOt.1AI

paSO 2.

El diagrama de flujo

se muestra en el DF 2.5.

Ejemplo 2.6
Dados tres nmeros, determinar si la suma de cualquier pareja
de ellos es igual al tercer nmero. Si
se cumple esta condicin, escribir lguales y,
en caso contrario, escribir Distintas.
Por ejemplo, si los nmeros son:
:.1

larespuestaes' rgruales',yaque

el resultado ser

l- s tintas

3 + 6 = g.sinembargo.

sirosnmerosson:

La resolucin de problemas con computadoras y las herramientas de

Diagrama

de

pro!ramacin

55

flujo 2.5 (DF 2.5)

NUMERO =

TOTAL <TOTAL + 1

escri bi r

TOTAL

Para solucionar este problema, se puede comparar la suma de cada pareja con el tercer nmero.
Con
tres nmeros solamente existen tres parejas distintas y el algoritmode iesolucin del problema
ser

fcil.

1.
2.
3.
4.
5.

Leer los tres ralores, A, B y C.


Si A + B = C escribir'
Iguales'
Si A + C = B escribir,,Tguales',
Si B + C = A escribir "Iguaies,'
Escribir " Distintas ,, y parar.

El diagrama

cle

y parar.
y parar.
y parar.

flujo corespondiente al algoritmo

es el 2.6.

56

Fundamentos de programacin

A+B=C

escribir
iguales

Figura 2.10. Diagrama de flujo 2.6 (Ejemplo 2.6).

2.6. DIAGRAMAS DE NASSI.SCHNEIDERMAN (N.S)


El dia-erama N-s de Nassi-Schneiderman
conocido como diagrama de
como un dia-erama de flujo en el que se omiten
-tambin
las flechas de unin y las cas
acciones sucesias se escriben en cajas sucesivas y,
como en los diagramas de

bir diferentes acciones en una caja.

chapin-

es

,on
Lu,
flujo, se"orffir.
pueden escri-

La resolucin de problemas con computadoras

Un algoritmo

se

representa de la forma siguiente:


nombr:e de1 algoritno

calcular
salario <- horas * Precio

calcular
neto (- salario
escribir

nombre, salario,
La estructura condicional (el rombo)

se representa

por

impuestos

impuestos, neto

las

herramientas de

programacin

57

58

Fundamentos de programacin

Ejemplo 2.7
se desea calcular el salario neto semanal cle un trabajador
enfuncin del nntero

jadas y la tasa de impuestos:

d.e

horas trabe-

o las primeras 35 horas se pagan ataifanormal,


o las horas que pasen de 35 se pagan a 1,5 r,eces la tarifa normal,

.
'

las tasas de impuestos son:


a) las primeras 60.000 pesetas son libres de impuestos,
b) las siguientes 40.000 pesetas tienen un 25 pr 100 de impuesto,
c) las restantes, un 45 por 100 de impuestos.
la tarifa horaria es 800 pesetas.

Se desea tambin escribir el nombre. salario bruto. tasas

como eiercicio al alumno).

y salario neto (este ejemplo se deja

2.7. PSEUDOCDIGO
E'l pseudocdigo es un lenguaje de especificacin (_descipcin)
de algoritmos.El uso de tal lenguaje
hace el paso de codificacin final (esto es, la traduccion a un
tengLi.e de programacin)

mente fcil'

os lenguajes

algoritmos.

APL Pascal y Ada

se

utilizan a

relativa-

.oo i.rgu1"" especicacin


'eces

de

El pseudocdigo naci como un lenguaje similar at ingls y era


un medio de representar bsicamente las estructuras de control de programacin,estructu.uu
qu" se vern en captulos posteriores' se considera tn primer borradir, ado que e1 pseudocdig
tiene que traduci'rs" port".io.mente a un lenguaje de programacin. El pseudocdigo no puedJ
ser ejecutado por una computadora. La u_entaja del pseucrocdigo es

qr" .n

su uso. en ra pranificin

d.'r,

;;;;*ma, el
programador se puede concentrff en la lgica y en las
esrructurai de control y no pr"orpalse de las
reglas de un lenguaje especfico. Es tambin fcil modificar
ei pseudocdigo si se descubren errores
o anomalas en la lgica del programa, mientras que en muchai
ocasiones suele ser difcil el cambio
en la lgica, una vez que est codificado en un lenguaje
de p.ogramacin. otra ventaaei pseudol1aiqo es que puede ser trarjucido fcilmente a ienguaei esiructurados como pascal, c, FoRTR\\ 11/90, Ada 83/95, C++. etc.
pseudocdigo original utiliza para representar las
acciones sucesivas palabras reservadas en
.E1
ingls
a sus homnimas en los lenguajes de programacin-, tales
como start, end.
-similares while-end,
stop' if'then'else.
repeat-until, etc- La s.ritu dJ pseudocdigo exige normalmente
la
indentacin ( san-era en el marge.n izquierdo) de diferentes
lneas.
La representacin en pseudocdigo del iagrama de
flujo de la Frgura 2.i eslasiguiente:
r::-a ..esio y salarios
- - -.,
ore-io-nora
4:tras
* precio_hora
- -;-::'tC-brUl:O
-_ -;_t:::-ru:o
tasas
.=-=:_:_;::-:a,
taSaS, salario

neto

El algontmo cornienza con 1a palabra start y finaiiza

espaol,

ini_cio. fin).

con la palabra end, en ingls (en


Entre ests palabras, slo se escribe una instruccin
o accjn por lnea.

La resolucin de problemas con computadoras y las herramientas de programacin

59

Lalnea precedida por // se denomina comentario. Es una informacin al lector del programa y
no realiza ninguna instruccin ejecutable. slo tiene efecto de documentacin interna del programa.
Algunos autores suelen :uttlizar corchetes o llaves.
No es recomendable el uso de apstrofbs o simples comiilas como representan en BASIC de
Microsoft los comentarios, ya que este carcter es representativo de apertura o cierre de cadenas de
caracteres en lenguajes como Pascal o FOMRAN, y dara lugar a confusin.
Otro ejemplo aclaratorio en el uso del pseudocdigo podra ser un sencillo algoritmo del arranque matinal de un coche.

inicio
/ /arranque matnal de un coche
introducir 1a 11ave de contacto
tirar de1 estrangulador del aire
grirar 1a llave de contacto
pisar el acelerador
orr eL ru,ldo de, roLo'
.pisar de nuevo el acelerador
esperar unos instantes a que se calrente e- ro:::
Ilevar el estranqulador de aire a su oosicio--fin
Por fortuna, aunque el pseudocdigo naci como un sustituto del lenguaje de programacin y,
por consiguiente, sus palabras reservadas se conservaron o fueron muy similares a las de dichos lenguajes, prcticamente el ingls, el uso del pseudocdigo se ha extendido en la comunidad hispana
con trminos en espaol comortlutc;Lg, f in-pae1, 1e_e,r, escribir, si-entonces-sino, mientras, f in-mientras, repetir, hasta-que, etc. Sin duda. el uso de la terminologa del pseudocdigo en espaol ha facilitado y facrlitar considerablemente el aprendizaje y uso
diario de la programacin. En esta obra, al igual que en otras nuestras 1 utilizaremos el pseudocdigo en espaol y daremos en su momento las estructuras equivalentes en ingls. al objeto de facilitar
la traduccin del pseudocdigo al lenguaje de programacin seleccionado.
As pues, en los pseudocdigos citados anteriormente deberan ser sustituidas las palabras
.^t--?.nt,".ena1.Iead, wriEe, por inicio, f in, 1eer, escribir. respectivamente.
LnJ-CJ-O

statt

Leer

read

fin

end

escribir

write

ACTIVIDADES DE PROGRAMACION RESUELTAS


2.1.

Se desea obtener el salario neto de un trabajador conociendo el nmero de horas trabajadas, el salario
hora y la tasa de impuestos que se le debe deducir.
El algoritmo general es:

1. Obtener valores de horas trabajacias, salario_hora y tasas.


2. Calcular salario_bruto, total ce :r,puesros y salario_neto.
3. Visualizar salario_bruto, total de impuestos y salario,neto
1 Metodologa de la Programacin.McGra:w-Hil1,

1986.

60

Fu n da m e

ntos de prog

ra m aci

Las enfradas del algoritmo son:

horas trabajadas, salario_hora, tasas


Las salidas del algoritmo son:

paqa

bruta, total de impuestos y

paj|e :-e_a

El refinamiento del algoritmo en pasos de nivel


interior es:

1. Obtener vafores de horas trabajacas, sa_ario bruto y


tasas.
2. Calcular salario bruto, total e tl..ct=s,os
y paga net.a.
2.l. Calc jLar sr a,io bru-o nu-l ..:. _ _:.-:: _s
horas rrabajadas

por e1 salario
hora.
2.2. Calcular e1 total de impues:cs ::_,rpllcando
salario bruto por tasas
(tanto por ciento de impues_cs
2.3. Calcular el salario neto ::es:a:-i: _ :olal
de impuestos de la pagfa bruta.
3. Visualizar salario bruto, total ie tt.._es_.s,
salario neto.
El diagrama de flujo 2.7 rcpresentaeste algorirmo.
Diagrama deflujo 2.7

introducir
HORAS
SALARIO_HORA

TASAS
calcular
SALARIO-BRUTO<HORAS*SALARIO-HORA

calcula r

TOTAL_IMPUESTOSeSALARIO-BRUTOXTASAS

calcular
SALARTO NETOe_
SA LAR O_B
I

UTO.TTAL_I

visualizar
SALARIO_BRUTO

TOTAL-IMPUESTOS
SALARIO_NETO

PU

ESTOS

La resolucin de problemas con computadoras

2.2. Calcular el valor

de la suma 1 + 2 + 2 + 4 + ...

las

herramientas de prqrana.ioo

61

+ 100.

Variables CONIADOR (nmeros sucesivos a sumar:


SL44A (totalizador de sumas).

L, 2 ,

3,

. ).

Pseudocdigo

1.
2.
3.
4.

rnicio.

CONTADOR a 1.
Establecer SUMA a 0.
mientras CONTADOR <= 100 hacer Io siguiente:
4.1. SUMAT CONTADOR A SUMA.
4.2. Incrementar CONTADOR en 1.
fin-mientras
5. Visualizar SUMA.
6. tln.

Establecer

-t

l'(
I

?.j.r

,,.!-

Este algoritmo se representa por el diagrama de flujo 2.8.

Diagrama

de

flujo 2.8

*':

'ili

CONTADOR <-

I -'r
1

\J

j7 I
I

r::'

mientras

L.

*,

. .&
,
;'"

aadir
CONTADOR a SUMA

visualizar
SUMA

incrementar
CONTADOR en

2.3. Un corredor de maratn (distancia = 42,195 km) ha recorrido la carrera en 2 horas 25 minutos. Se desea
un algoritmo que calcule el tiempo medio en minutos por kilmetro.

El anlisis del problema

Entracla:

Salid.a:
Proceso:

es

el siguiente:

Cantidad total de tiempo empleado en la calrera; se establece el nmero total de kilmetros


en 42.195, ya que es igual Para todos.

Nmero medio de minutos por kilmetro, transformando previamente el tiempo ttrt.r


minutos.
Dividir el tiempo total en minutos por el nmero de kilmetros.

62

F u n da

me

ntos de p rog

El pseudocdigo

ra m ac

es:

inicio
introducir tiempo total
verificar entrada correcta
establecer distancia = 42.195 km
pasar Liempo total a minutos
calcular media tiempo/kilometro
escribir resultado
fn
NOTA: El tiempo T se ha de convertir en minutos, bien tras introducir su valor o en la instruccin 4
(pasar tiempo total a minutos). La frmula de conversin es:

T=2*6C.+25
.d

si el tiempo es ft horas rfl minutos


o con carai::-general,
LAZ: E

T=h+60+m
El diagrama de flujo de este algoritmo es el representado a continuacin.

Diagrama

de

flujo 2.9

T se ha convertido

mnutos previamente

distancia
D e- 42.195

La resolucin de problemas con computadoras

2'4' Definit el algoritmo

las

herramentas de programacin

63

necesario pa.a intercambiar los varores


de dos variables numricas.

Anlisis

lTffilfffite
Variables:

AB

anlisis se utiliza una variable denominada


auxiriar que de modo remporal toma
uno de
AUX

El mtodo consiste en asignar una de las var.iables

a la

variable auxiliar:

AUXEA
A continuacin

se asigna el

valor de la otra variable B a ia primera:

A<-B
Por ltimo, se asigna er valor de ra variabre
aux,iar a ra segunda'ariabre -r:

B <-

AUX

Variables: A

primer valor.
segundo valor,
variabie auxiliar.

ALI(
Pseudocdigo

inicio
leer (A,

AUX <_ A

A<_B
B +_

AUX

escribir(A,
fin
Diagrama

de

B)

ttujo 2.10

AUX <- A

A<-B
B <- AUX

\
2'5. Escribir un algoritmo
-=:Gi=3

para carcurar el irea de un tringuro dada ra base y ra

'

altura. ' t,,

Andlisis

La frmula geomtrica del rea o supercie de un tringulo es:

S=(l/2)BxH

B=base

H=abura

Se necesita

asignar los valores de la base y la altura a variables


ejemplo, BASE y ALTIIRA, respectivamente-: a continuacin, calcular sl 's ilizando la frmu1
-por
y urigrr* los resultados del clculo
aunavariablellamadaAREA. Supongamos B - 4.5y H=7.2.

ALTURA <_ 7.2

AREA <_
1/2XBASE*ALTU

EJERCICIOS
2.1. Deducir los resultados que
v-ar

=t-

iaicio
xe-:

_::: :

a*^-rescribir
escribir
fin

:-

x,

,.'

z.

7:

se obtienen

del siguiente algoritmo:

La resolucin de problemas con computadoras y Ias herramientas de programacin

2.2.

Qu resultados

65

producir este algoritmo?

var e fo: fx, crool^


inicio
NX <- 25
DOBLEENX*2
escribir (NX)
escribir ( DOBLE
fin
)

,L

ll3'
cuadrado

J
2.3. Escribir un algoritmo que calcule y escriba el cuadrado de
,- ,
* ,-1. '1,
2.4. Escribir un algoritmo que lea un nmero y escriba su
2.5. Determinar el rea y vlumen de un cilinro cuyas dimensiones radio r altura :e leen desde el teclado.
2.6. Calcular el permetro y la superficie de un cuadrado dada 1a longitud de su lado.
n 2.7. Realzar el algoritmo que sume dos nmeros.
2.8. Calcular la superficie de un crculo.
2.9. Calcular el permetro y la superficie de un rectngulo dadas 1a base 1a altura de1 mismo.
2.1.0. Escribir un lgoritmo que le un nombre de una marca de automr'iles se-euida de1 nombre de su modelo e informe del modelo seguido del nombre.
Determinar la hipotenusa de un tringulo rectngulo conocidas 1as longitudes de 1os catetos.
graDisear un algoritmo que realice la siguiente conversin: una temperatura dada en grados Celsius a
dos Fahrenheit.
NOTA: La frmula de conversin es' F = (9/5) C + 32.
2.13. Disear un aigoritmo que calcule el rea de un tringulo en funcin de las longitudes de sus lados

*
*

'

*
*

..

rea =

^,,

p(p

a)(p

- b)(p - c)

dondep = (a + b + c)/2 (semtpermetro)'


2,14. Se desia un algoritmo para convertir metros

a pies y pulgadas (1 metro

=39.37 pulgadas,

gadas).

2,15. Elcambio de divisas en la Bolsa de Madrid el da25 de agosto de 1987 fue el siguiente:
100 chelines austriacos
1

dlar

EE.UU.

100 dracmas
100 francos

griegas

=956,871 pesetas
= 122,499 pesetas
= 88,607 pesetas

beigas =323,728 pesetas


1 franco francs
= 20,1 10 pesetas
1 libra esterlina
- 178,938 Pesetas
100 liras italianas = 9,289 pesetas

2.16. Desarrollar algoritmos que realicen las siguientes conversiones:

a)
b)
c)

Leer una cantidad en cheiines austriacos e implimir e1 equivalente en pesetas.


Leer una cantidad en dracmas griegos e imprimir el equivalente en francos franceses
Leer una cantidad en pesetas e imprimir el equivalente en dlares y en liras italianas.

pie = 12 pul-

CAPITULO

ESTRUCTURA GENERAL
DE UN PROGRAMA

CONTENIDO

3.1.
3.2.
3.3.
3.4.
3.5.

Concepto de programa.
Partes constitutivas de un programa.
lnstrucciones y tipos de instrucciones.
Tpos de instrucciones.
Elementos bsicos de un programa.
3.6. Escritura de algoritmos/programas.
ACTIVIDADES DE PROGRAMACIN RESUELTAS.
EJERCICIOS.

En los captulos anteriores se ha visto la forma de disear algoritmos

para resolver problemas con computadora. En este captulo se introduce al


lector en el proceso de la programacin, que se manifiesta esencialmente
en los programas.
El concepto de programa como un conjunto de instrucciones y sus
tipos constituye la parte fundamental del captulo . La descripcin de los
elementos bsicos de programacin, que se encontrarn en casi todos los

programas: interruptores, contadores, totalizadores, etc., junto con las


normas elementales para la escritura de algoritmos y programas, conforman el resto del captulo.

3.1. CONCEPTO DE PROGRAMA


Un programa de computadora es un conjunto de instrucciones
dadas a la mquina- qLproducirn la ejecucin de una determinada tarea. En esencia, -rdenes
un programa es un tnedio pG,r!; . ,'.seguir un fin.

b/

&

,,t
,;f

68

Fundamentos de programacin

Definicin
del problema
Diseo del

algoritmo

o
c
U

M
E

A
C
I

Depuracin y

verificacin

Figura 3.1. El proceso de la programacin.


El proceso de programacin es, por consiguiente. un proceso de solucin de problemas
ya se vio en el Captulo 2- y el desarrollo de un programa requiere las siguientes fases:

-como

1. definicin y anlisis del problema;

2. diseo de algoritmos:
o diagrama de flujo,
o diagrama N-S,
o pseudocdigo;
3. codificacin del programa;
4. depuracin y verificacin del programa;
5. documentacin;
6. mantenimiento.

. Las fases 1 y 2 yaban sido analizadas en los captulos anreriores y son el objetivo fundamental
de este libro; sin embargo, dedicaremos atencin, a 1o largo del libro (vase Captulo 13) y en los
apndices, a las fases 3,4,5 y 6, aunque stas son propias de libros especficos iobre lenguajes de

programacin.

3.2. PARTES CONSTITUTVAS DE UN PROGRAMA


la decisin de desarrollar un programa, el programador debe establecer e_l conjunto de especi.
flcaciones que debe contener e1 programa: entrada, salida y algorinnos de resolucin, que
incluirn
las tcnica-< para obtener las salidas a partir de las entradai.
Conceptualmente. un programa puede ser considerado como una caja negra, como se muestra
en
la Fieura -1.1. I-a L-a-ja negra o el algoritmo de resolucin, en realidad, ei el conunto de cdigos
que
transtbrman la-s entradas dei programa (datos) en salidas (resultados).
Tra-<

Programa

(algoritmo de
resolucin)
Figura 3.2. Bloques de un programa.

Estructura general de un programa

69

El programador debe establecer de dnde provienen las entradas al programa. Las entradas, en
cualquier caso, procedern de un dispositivo de entrada
disco,...--E1 proceso de introducir la informacin de entrada --datos- en la memoria -teclado,
de la computadora se denomila entada de
'daiLtos,operacin
de lectura o accin de leer.
Las salidas de datos se deben presentar en dispositivos perifricos de salida: parttalla. impresoras, discos, etc. T a operacin de salida de datos se conoce tambin como escrifu o accin de

-gsqribir.
3.3. INSTRUCCIONES Y TIPOS DE INSTRUCCIONES
El proceso de diseo del algoritmo o posteriormente de codificacin del programa consiste

en

definir las acciones o instrucciones que resolvern el problema.


Las acciones o insrucciones se deben escribir y posteriormente almacenar en memoria en

e1

mismo orden en que han de ejecutarse, es decir, en secuencia.


Un programa puede ser lineal o no lineal.
Un programa es lineal si las instrucciones se ejecutan secuencialmente, sin bifurcaciones, decisin ni comparaciones.

En el caso del algoritmo

1as

instruccion
instruccion

instruccion

instrucciones se suelen conocer como accions, y se tendra:


accion
accion

1
2

accron n

Un programa es no lineal cuando se interrumpe la secuencia mediante instrucciones de bifur,cacin:

accion

""t:"

'

accton x ----l
I

accion n 1
:

70

Fu

ndame ntos de prog ramaci n

3.4. TIPOS DE NSTRUCCIONES


Las instrucciones disponibles en un lenguaje de programacin dependen del tipo de lenguaje. por
ello, en este apartado estudiaremos las instrucciones
bsicas que se pueden imple-accionesmentar de modo general en un algoritmo y que esencialmente
soportan todos los lenguajes. Dicho de
otro modo, las instrucciones bsicas son independientes del leqgqqje.
I a clasificacin ms usual, desde el punto de vista anterior, es:

f.
2.
3.
4.
5.

instrucciones
instrucciones
instrucciones
instrucciones
instrucciones

de
de
de
de
de

Las instrucciones

inicio/fin,
asignacin,
lectura,
escritura.

bifurcacin.

l, 2,3 y 4 ya han sido descritas en captulos

anteriores y se recogen en la Ta-

bla 3.1.

3.4.1. lnstrucciones de asgnacn


Como ya son conocidas del lector, repasaremos su funcionamiento con ejemplos:

a) A e- 8 0
la variable A toma el vctlor de : b) Cul ser el valor que tomar la variable C tras la ejecucin de las siguientes instrucciones?
.

A<*L2
B<-A
te

A contiene 12, B contiene 12 y C contiene 12.

NOTA: Antes de la ejecucin de las tres instrucciones. el valor de A, B y C es indeterminado.


Si se desea darles un valor inicial, habr que hacerlo erpLcitamente. incluso cuando este valor
sea 0. Es decir, habr que definir e inicializar las insrrucciones.

Tabla 3.1. lnstrucciones/acciones bsicas

fipo

de insFrccin

Pseudocdigo ingls

Pseudocdigo espaol

comienzo de prceso

begin

fin

end

inicio
fin
leer
escribir
B<-7

de proceso

entrada (lecturar

read

salida (escrirura;

write
A<- 5

asignacin

Estructura general de un

c) Cul es el valor
1.
2.
3.
4.
5.

p,ro,g--z

71

de Ia variable AUx al ejecutarse la instruccin 5?

A
B

<- 10
<- 2A
AUX <- A
A <- B
B <- AUX
en la instruccin 1, A toma el valor 1

o en la instruccin 2, B t"omael valor 2 0


o en la instruccin 3, AUx toma el valor anterior de A, o sea 10
o en la instruccin 4, A toma el valor anterior de B, o sea 2 0
o en la instruccin 5, B toma el valor anterior de aux, o sea 10
o tras la instruccin 5, AUx sigue valiendo 10
d) Cul es el significado de N

<- N +

5 si N tiene el valor actual de 2?

N(-N+5

SerealizaelclculodelaexpresinN+5ysuresultado2+5=Tseasignaalavariablesituada a la izquierda, es decir, N tomar un nuevo valor 7.


Se debe pensar en la variable como en una posicin de memoria, cuyo contenido puede variar
mediante instrucciones de asignacin (un smil suele ser un buzn de coreos, donde el nmero de
cartas depositadas en 1 variar segn el movimiento diario del carlero de introduccin de cafias o
del dueo del buzn de extraccin de dichas cartas).

3.4.2. lnstrucciones de lectura de datos (entrada)


Esta instruccin lee datos de un dispositivo de entrada

Cul serd el significado de las instruccioneis siguientes?

Teer(NUMERO, HORAS, TASA)

Leer del terminal los valores NUMERO, HORAS y TASAS, archivndolos en la memoria; si los
tres nmeros se teclean en respuesta a Ia instruccin son 12325,32, L200, significara que se han
asignado.a las variables esos valores y equivalda a la ejecucin de las instruciiones.
NUMERO

<_ L2325

HORAS

32

TASA "_
E

12OO

b) Jeer (A, B,

C)

Si se leen del terminal LO A, 2 O 0,

A=
B=
c =

100
200
300

30

0, se asignaran a las variables los siguientes valores:

72

Fu nda

mentos de prog

ra

macin

3.4.3. lnstrucciones de escritura de resultados


(salida)
Estas instrucciones se escriben
en un dispositivo de salida.
Explicar el resultado de la ejecucinie-las
siguientes instrucciones:

4e100
B <- 200
c <_ 300
escribir (A, B,

C)

""rffJi'Hltffi;: I

,"T':i"

o imprimiran en la impresora tos valores

to o, 20 o y

30

o que

3.4.4. lnstrucciones de bifurcacin


El desarrollo lineal de un programa se
interrumpecuando se ejecuta una bifurcacin.
Las bifurcaciones pueden ser, segn ei pinto d"l
pr;g;;;a a donde se bifurca. hacia adelante o hacia
atrs.
Bifurcacin adelante
(positivo)

instrucclon
instruccion
instruccion

1
2
3

Bifitrcacin atrs
lnegat^'o)

::s -::c:ion 1
:::s::::::on z <-l

::---:-:c::r

rnstruccron

_l
B

:::s::::cicn

12

ultima instruccion

i.illjrlifut"aciones

en el flujo de un programa pueden


realizarse de un modo incondicional
o con-

BiJfurcacin inconclicional" la bifurcacin


se realiza siempre que er flujo
del programa pase por
la insruccin sin necesidad a.r
. ninguna condicin.

.urfiir"ri"

Estructura general de un programa

73

Bfurcacin condicional:la bifurcacin depende del cumplimiento de una determinada


condise cumple la condicin, el flujo sigue ejecutando la accin r:. Si no
se cumple, se ejecuta la

cin' Si
accin

rt.

3.5. ELEMENTOS BSICOS DE UN PROGRAMA


En programacin se debe separar la diferencia entre el diseo del algoritmo y su implementacin
en
un lenguaje especfico. Por ello, se debe distinguir claramente
.-lo, coneptos e programacin
"rtSin embargo, unuuJrqi" ," .o-y el medio en que ellos se implementan en un lenguaje especfico.
prendan los conceptos de programacin, cmo utilizarlos, la enseanza
de urinuevo lenguaje es relativamente fcil.

Los lenguajes de programacin


los restantes lenguajeselementos bsicos
-comoas como reglas pu t, que tienen
que se utilizan como bloques constructivos,
esos elementos se combinan. Estas reglas se denominan sintaxis del lenguaje. Slaminte las instrucciones
sintcticamenre
correctas pueden ser interpretadas por la computadora y los programa que contengan
e11ores de sintaxis son rechazados por la mquina.
Los elementos bsicos constitutivos de un programa o algoritmo son:

o palabras

.
.

o
o
. o

reservadas

(inicio,

in, si-entonces . . ., etc.),

identificadores (nombres de variables esencialmente),


caracteres especiales (coma, apstrofo, etc.),
constctntes,

variables,
expresiones,

instrucciones.

Adems de estos elementos bsicos, existen otros elementos que forman parte
de los programas,

cuya comprensin y funcionamiento ser vital para el correcto diseRo de un


algoritmo y naturalmente la codificacin del programa.
Estos elementos son:

o bucles,
o contadores,
o acumuladores,
o intenaptores,

estructuras:

secuenciales,

selectivas,
repetitivas.

74

Fundamentos de programacin

El amplio conocimiento de todos los


elementos de programacin y
el modo de su integracin
constituven las ,a*i., a" p.o_nru.i;
q* todo buen programador debe
::";X-*ramas

3.5.1. Bucles
un bucle o lazo (loop)-l es un
-s-ggmen[o de un algoritmo o programa, cuyas
instrucciones se-repiten
un nmero determinado a"
'""i mientras .umpi" unui.,!.*rnu d,a cc,ncricin(existe o es yerdadera la condicin)' se debe
puru a.t..iinar ras tareas repetitivas.
mecanismo es una condicin que
"ttuui",*i".unir.no
Esre
puede ser veroaoer"
se comprueb a naveza cada
p^so o iteracin der bucle
ltoti o instrucciones que se repiten en el bucle).
Un bucle consta de tres partes:

"'fr],J;.;;

decisin,
cuerpo del bucle,
salida del bucle.

EI bucle de la Fisura 3'3.esinfinito,


ya que las instrucciones (l), (z) y (3)se
ejecutan indefinidamente, pues no exste sarida
er uucr,
una dererminada condicin.
"rmptirr.
.i*una
condicin. er bucre dejar deser infiniro
,,,
y tendr

jJ#::?,ff1[1,1"J:":HH"ilo

aiil

tntcto

SUMA

/
Bucle

reer N

(1)

SUMA e-

SUMA +

//

(2)

escribir

surva

Figura 3.3. Bucle infinito.


1 Este
trmino se traduce tambin. a \_eces.
por lazo o

ciclo

(3)

Estructura general de un prq9rama

El diagrama

de

flujo

escrito en pseudocdigo es:

inicio
<: leer (N)
siN=0entonces
SUMA

'l

escribirrSJMA)

ir_a ! ir

si_no
SUMA(-SUMA+N

fin_si
ir_a 1
fin

SUMA

SUMA +

Figura S.4.
rtgura
3.4. Bucle con fin.

Bucles snidados
En un algoritmo puedenexistir
varios bucles.,[.os bucres pueden
ser anidados o independ.ientes.
I os bucres son'anidados cuan;;
.rta'i"iipu"rr", rrl;ooo qr"
otros;,os bucres son indepenrnt"rir-unoson
unos son inreriores a
externos unos a otros (Figura
3.5).

75

76

Fundamentos de programacin

tntcto

tntcto

Bucles independientes

Bucles andados

Intcto

Bucles cruzados
(no es correcto su diseo)

Figura 3.5. Tipos de bucles.

3.5.2. Contadores
Los procesos repetitivos son la base del uso de las computadoras.
En estos procesos se necesitan normalmente contar los sucesos o acciones internas del Lucle,
como pueden ser los elementos de un
l-rchero, el nmero de iteraciones arealizar por el bucle,
etc. Una'forma de controlar un bucle es
mediante un contador.
L.' confador es una variable cuyo valor se incrementa o decrementa en una
cantidad constante en
,
caqt lteracton.
La Fi-sura 3'6 presenta un diagrama de flujo para un algoritmo
que se desea repetir 50 veces; el
contador se representa en este ejemplo con la variable coNi.
La instruccin qr" ,"pr"r"nta a un contadoreslaasignacinCONT

<-

CONT

1.

La Figura 3'7 es otro ejemplo de un diagrama de flujo con contador;


en este caso, negativo. Se
dice tambin
descontar.

El contador puede ser positivo (incrementos, uno en uno)


o negativo (decrementos, uno en uno).
En la Figura 3'6 el contador cuenta desde 1 a 50 y deja
de contar'cuando la variable CoNT toma el
valor 5l y se termina el bucle. En la Figura 3.7 el cntador
cuenta negativamente, o lo que es lo
mismo, descuenta o decrementa; comienza a_contar en n y
se va decrementando hasta llegar a
cero' en cuyo caso se termina el bucre y se realiza la accin
escribir.

Estructura general de un

CONT <- CONT +

pryirrlln

TI

Figura 3.6. Ejemplo de contador positivo.

Ejemplo 3.1

l:::;:r !::;;cincuenta

copias de un informe de ventas,


cut sera et diagrama

de

Jtuio que resot-

La tarca implica realizar cincuenta veces


la impresin de una copia del informe.
Dado que el
r se inicializa a 7, el valor de este contaor

contador

bayan tealizado. Cuando

tome

coincidir.,

nmero de copias que se


r;lr; ! il ,lgriri"* r" ," u.n "rrealizado
cincuenra copias.
"i

le-l+1

78

Fundamentos de programacin

producto <- 0
CONT <- n

producto <- producto + m


CONT <_ CONT-

Figura 3.7. Bucle contador negativo.

Ejemplo 3.2
Leer todas las fichas de

uru

archivo e imprimir el nmcro total de ellas.

Pararealizu estas operaciones es usual poner en todos los archivos una ficha denominada fin de
fichero o de archivo (Fr), que se sita al final del archivo, con lo cual cuando se lee el archivo y se
encrrcnka esta ficha (FF) se sabe que se ha alcanzado el final del archivo.
El aTgoritmo en lenguaje natural sera:

f- iais{e
2-Ce-0
3- Ieer(ficha)
4. ei {FF} ir_a (8)
5. C (- C + 1
6- eseibi(ficha)
7- ir_a (3)
8- escri-bi(C)
9- fiE

In
).

3-ni(,'o

{ry-

l) Lee!

1"1h"!

2 ifr)ir_o,i
CuoW

"

.,

e: Lktrtit '.''b
i? r^ r?\

*lt"'si''{:

Estructura genera! de un ptagannt

Ce-C+1

3.5.3. Acumulador
Un acumulador o totalizador es una variable cuya misin,es almacenar qatidades
vari._ables resultantes de sumas sucesivas. Realiza Ia misma rrr.iJ" qr.
a" r.
incremento o decremento de cada suma es variable
lrg* ae consiante, como en el caso del con-"r

;;

";;;;;;;l;;;r'"1,

"n

tador.

s.9.I-"-!I"*a

por la instruccin

I I s + N, donde N es una variable y no una constante.

Ejemplo 3.3
sumar los primeros K nmeros enteros. Er algoritmo correspondiente
es:

f.
2.
3.
4.
5.
6.
7.
8.
9.
10.

inicio
Teer (R)
Ne 0
strMA <- 0
N e- N + 1
SUMA (_ SLIMA + N
si N = x, ir_a (9)
ir_a (5)
escribir(K, SUMA)
fin

t'

l)t.jy
il*ll
ra
rr i
sS".'

'./ .: . ' ir

#'

,:*

,c*. v**

};-. rliin *.:"' lr+

:6,

fi1

e.\

ft.l

Fr*: il-, ri _. ;",,",",


,
i1 ; :ii

,-:":*,.

fi.!;r;

i"ff . ... ,'

"''

v.r
80

Fu

ndamentos de prog

ra

maci n

N<-0
SUMA <-

N<-N+1
SUMA <SUMA + N

escribir
K, SUMA

3.5.4. Decisin o seleccin


Cuando el programador desea especificar dos o ms caminos alternativos en un algoritmo (o un pro_rrama). se deben utllizar estructuras de decisin o seleccin.
Una instruccin de decisin o seleccin evala una condicin y, en funcin del resultado de esa
coradiql1.-se fifurcar a un determinado punto.

condicin?

accin F2
En

e1

caso anterior, se tiene una insffuccin alternativa con dos posibles caminos: si la condicin
y si la condicin es falsa, se ejecuta la accin 52. Es posible

es verdadera, se ejecuta la accin 51,

81

Estructura general de un Prag'e-a

que
tambin realizar diferentes acciones para el caso de altemativas mltiples. En el caso de
dry1-Qg

ofreciese clngo P9ib19s soluciones, se representara como

'-t'n-

..; !

!,tt v{)i

accin

,!t./'

S1

3.5.5. tnterruptores' /.:r:,'


veces se les denomin a indicador" b-qndera (flag)-*9! trp
l)n interruptor o conmutador (switch)
-a
permile
vg1lc-+ue pugd-e tomar diversos valores a 1o largo de la ejecucin del prorama y que
pug4Illqoar-dor.alotcs
intemrptores
Los
mismo'
del
otra
parte
a
comunicar informacin de una
'' ' air-r-,9r*?-peS-do
difqrsnle-s--1J-0_.'_(D__" ah su nombre de inten-r"rptor, encendrdo ll I

/ "cerrado ,)

to'

Si

SW es

igual a 1, se ejecuta la accin S1, y si

SUMA <-

SW es

igual a 0, se ejecuta la accin 52'

escribir
SUMA
SUMA <-SUMA + N

82

Fu

nda m entos d e prog ra m aci n

Ejemplo 3.4
Se tiene un archivo con uru conjunto de fichas con dos campos,
de las fichas pares y el campo N de las fichas impares.

Se desea

listar el campo yL

Los intemrptores -SW- se suelen inicializar a un valor determinado (0 o 1) y luego se ha de


modificar su valor alternativamente a medida que se leen las fichas impares y pares. De este modo,
cuando SW = 0, se leern las fichas impares y cuando SW = 1, se leern las fichas pares,

escribir
campo M

Ejemplo 3.5
Disear un diagrama

de

flujo que escriba los nmeros de I a 1000.

Estructura general de un programa

l- l+

83

Ejemplo 3.6
Calcular la suma de los nmeros de

S=7+2

+3+4+

a 10 0 0.

+999 +1000

La suma se realiza con totalizador o acumulador S, que ir realizando las sucesivas sumas
parciales,
+
+2
+ 2 + 3 + 4, etc.Paraelloseinicializalavariabledelsumador S a cero y el contador I representar los nmeros sucesivos 1 a 1000.

1, I 2, I

+3, I

S<-S+.1

l+- l+

,l

84

Fundamentos de prog ramacin

3.6. ESCRITURA DE ALGORITMOS/PROGRAMAS


La escritura de un alsoritmo mediante
una hemamienra de programacin
debe ser lo ms clara posible y estructurada, de"modo que su t""tr.u'r.te
considerbi.;;;;; el entendimienro del algoritmo
y su posterior codificacin en un
lenguaje de programacin.
Los algoritmos deben ser escritol-en
r.ng"u.. similares a los programas. En nuestro
lizaremos esencialmente el lenguaje
,rgo.di.", basado * rr"JJ.odigo, y ra estructura libro utidel algolgica de los-prograniu'
.n r.rd;i""J prog.u-ucin estructurado;
por
:]:f"i:$:H1a
"'.ro' "r

un algoritmo constar de dos componente s:


u,a cctbecera de programa y un bloque algoritmo.
La cabecera t)e programaes una accin
simple qr. .o-i"nrui"n ru palabra algoritmo.
palabra, estar seguida por el nomb."
Esta
urignuo ui p.g.u*u .i";;
El bloque algorilmo es el resto del"programa
) consta de os componentes

o secciones; /as
acciones de declaraciny las acciones
,"rroUnr.
Las declaraciones defineno declaran
1as vanables y constantes que
tengan.nombres. Las acciodeter reatizarra computacion cuunao er
i:'X:'::::'";;:H?:"::HX','.-:X;,:""*-ente
?lgoAlgoritmo
cabecera del c::!::ra
seccon de cJec a::::cr
seccion de ac::::=-s

3.6.1. Cabecera det programa o algoritmo


Todos los algoritmos v programas
deben comen

zat cotuna cabecera en la que se exprese


rlcador o nombre to'',poni.nte
el identicon ru pu.u
,"i"i.'", renguaje. En ros engua.jes cre
pro-tramacin' la palabra reservada
suele ser prosram. En argoritmi;;;A;;#"?inrra*".

;;;;;;;

aiErorjtmo

DEMOl

3.6.2. Declaracin de varables


En esa seccin se declaran o describen
todas las variables utilizadas en
el algoritmo, listndose sus
Esta
comienza
r" p"iu.a reservada va (abreviar,ra

;:T:,'.il;li:,.]'n,!Ti:#:tipos'

"'"i0,

"",

var
;= .-artables_1

-l-- '=::ables

': es-n
donde cada lista cle t arictbles es una
simple o una rista de variables separadas
por comas y
cada tipo es uno de los tipos de
datos'ariable
iarir.,

frrirro, real, ,rrirri, . tgico).

Estructura general de un Programa

85

Por ejemplo, la seccin de declaracin de variables

var

entera; Numero-EmPleado
Horas
real:
Impuestc
real:
reaf : Salario

!l "'

a'

o de modo equivalente

entera: Numero-EmPleado
real; Horas, Impuesto, Salarto

/,'

son de tipo
y
declara que slo las tres variables Hora, rmpuesto Salario
significatn os que sugiede
va-r!abl91
nrytlres
Es una bugna prdctica le prqgramacin utilizar
programg
e-l
y
legibLe
eso harti mds fcil
rq"*t _qi ti,, iiprit"intoi,
q:ue ndlquery-cmo se utili:a la rariable'
Tanin es b*qna prdc-tiia incluir breves comnturios

real'

i" l*

vaf

entera : Numero-emPleado
rea-Z

; Horas

ImPuesto

Salario

o de empl eaoo
/ /horas trabajadas
//impuesto a Pagar
//cantidad ganada
1Ter

ly'' o'r,
?

'

3.6.3. Declaracin de constantes numricas


es:
nombre. Su formato
l
En esta seccin se declaran todas las constantes que tengan

f t '-'

const

. ,

't {

! ttt

pi = 3 .14t592
r*.6 = 43
horas = 6.50

del algoritmo.
Los valores de estas constantes ya no pueden variar en el transcurso

3.6.4. Declaracin de constantes y variables carcter


declaradas en la seccin del
Las const-antes de carcter simple y cadenas de caracteres pueden ser
programa const, al igual que las consta,nt-e numricas'
const

estrella = '*
frase = 12 de octubre
mensaje = Hola mi nene

Las variables de caracteres se declaran de dos modos:

1. Almacenar un solo carcfet.


var cat:acter:
Se declaran

nombre, inicial,

nombre,

nota'

letra

inicial, nota y 1etra,

que almacenarn slo un CarCI.i

86

ndamentos de prog ram aci n

Fu

2, Almacenar mltiples

caracteres (cadenas). El aLmacenamiento de caracteres mltiples depender del lenguaje de programacin. As, en

BASIC

nombre variable cadena = caclena de caracteres


OMBRE$

Pascal

I
'I

<<Pepe

Luis Garcia Rci:rr-ez-

formato tipo array (vase Captuio 6).

Existen algunas versiones de Pascal, como es el caso de Turbo Pascal, que tienen implementados un tipo de datos denominados string (cadena) que permite declarar vaiables de
caracteres o de cadena que almacenan palabras compuestai de diferentes caracteres.

vat nombre: stringl2O] ;


var cadena[20]: nonbre

enTurbopascal
enpseudocdigo

3.6.5. Comentarios
La documentacin de un programa es el conjunto de informacin interna y externa al programa, que
facilitar su posterior mantenimiento y puesta a punto.
I 'a documentacin puede ser i4tema-y ext9rug.La clocuntentacin interna qs la que se acompaa
en el cdigo o programa fuente y se reliz Use e comentarios significativos. pstos comentaris.e_
representan con diferentes notaciones, segn e1 tipo de lenguaje de programacin. La documentacin
externa se acompaar en informacin ajena al programa y' proporcionada por el programador.

BASIC

sl

i'"'

1' Los comentarios se incluyen dentro de lneas que comienzan con la palabra reservada REM.
100 REM *** autor J.R. Mackoy ***
200 REM subrutina ordenacion
2. En las versiones BASIC

de Microsoft (BASICA, GWBASIC y MBASIC) los comenrarios


incluyen en Ineas que comienzan por el carcter apstrofo ().

se

*** autor J.R. Mackoy ***


s:brutina ordenacion

-----

3. Eristen algunas versiones de BASIC como HP BASIC, VAX BASIC, etc., que utilizan
el
carcter admiracin (l) en lugar del carcter apstrofo.
--- 1--a:
: -:-.-'t:a

J.R. Mackoy ***


crdenacion

FORTR{.\

l9t-rytut

que contiene comentarios comienzan en su columna 1 con el carcter


asterisco- (11,_o-la

letra C v se pueden escribr a parlir de la columna 2:


!u-.-,

ta

---

M^.li-\z

***

ordenac ion

Estructura general de un

programa

87

PASCAL
Lqs

qomeMe

lotmbolq

o bien:

(* autor J.R. Mackoy *')


subrut-ina ordenacion}

MODULA-2
t--SSqq{nejl

tAuoff rlsieuau__e-Utre-1ossU*o"!g
*)

l*

C
tS-sa!0rlta(i,p-Le-,9l19,1_99?I!entrecaracteresliayeq({})

{Esto es un comentario en

C}

C++

,\drnlle, a&mts

-dp^!o.-p

-caractere!.{?u"' la doble barra inclinada

//EsLa es un comentari en

C++

NOTA: A 1o largo clel libro utilizaremos preferentemenfa pararepresentar nuestros comentarios los
smbolos / / . Sin embargo, algunos autores de algoritrnos, a ftn de independizarla simbologa del
lenguaje, suelen representar los comentarios entre corchetes ( [ ] ).

3.6.6. Estilo de escritura de algoritmos/programas


El mtodo que seguiremos normalmente

lo largo del libro para escribir algoritmos

l comienzo del Apartado 3.6.

aTgoritmo rdnti f icador


/ / seccion de declaraciones

/ / cabecera

var tipo de datos: lista de identificadores


congt 1is1-a de identificadores = valor
inicio
/ /cterfo del algorii-mo
<sentencia S1>
<sentencia 52>

.sentencia Snt
in

ser el desrito

88

Fundamentos de programacin

NOTAS:

I. En ocasiones' la declaracin de constantes


y variables las omitiremos o se describirn
en una
tabla de variables que hace
sus mismas funciones.

2. Las cadenas de caracteres se


enceffarn entre comillas simples.
J.

utilizar siempre sangras en los bucles o en aquellas


lnst uiclnes que proporcionen legibiinicio y f in.

lidad al programa, como

Ejemplo 3.7
algoritmo raices
,,',/'esuelve una ecuacion de 2 grado
"

var real: a,b,c,d

inicio
-Ieer(a, b, c)
Deb^2-4*a*c
siD<0entonces
escribir ('raices complej as
si-no
siD=0entor.ces
escribir l-b/2*a)
si-no
escribir(. (.-b raiz2 (D) ) / (.2*a) )
escribir,,-b-Laj /2tD)) ,2*a, )
fin-si
fin-si

', .t

1, {

Ein

3'1' Determinar
o
o

la cantidad total a pagar por una llamada


telefnica.

,"nl.loo

en cuenta lo siguiente:

toda llamada que dure menos de tres


minutos (cinco pasos) tiene un coste de 10 pesetas,
cada minuto adicional a partir de los
tres primeros
p;r;;;Jn,uoo, y cuesta 5 pesetas.

";r,

Andlisis
El algoritmo de resolucin del probrema
entraa los siguientes pasos:
..l:._-.
2. Lee: e_:.1:.
de pasos (npasos) hallacos por telefono.
3. Conp:aaa::..e=-c el numero de-pasos
es mayo: que cero, ya que realment.e
_-*..c"
r. z=-se ha
a. nra",o o pasos -s ois.nto oe.Fr_
=.
,naci_i.^. ' si
(posativo)
eL
::trr-e:t
-=
pascs es menor a cero, se prcducir"
.
,, .:.;;.cero
4' calcu-a: e-::e::c
de ra confe..r..cre acuerdo.;;
io" srguientes conceptos:

es menor que 5, e1 precio es de 10 peseras,


li:".="=
es
llascs
mayor que 5, es p::eciso calcular
tos p.=o= qr.
excecen U. i.u

: :i:.;;:.:

;::::"=:::l;..:"ol;'.!:;:=":H:::.1.',!.],]il; ;;T.:::""1 ::"3;::;"::-:;"

Estructura general de un programa


Variables

NPASOS

N
FACT

Nmero de pasos de 1a llamada


Nmero de pasos que exceden a 5
Importe o precio de la llamada

hacer
FACT <- 10
N <- NPASOS-S

3'2' Escribir

un algoritmo que calcule el producto de los primeros


n
nmeros naturales.

Andlisis

ElproblemapuedecalcularelproductoN

(N

_ 1) * (N _ 2) *

trminos matemticos se re conoce con er nombre


de FACT.RTAT,
EI algoritmo que resuelve el problema ser
el siguiente:

. *3

N.

' 1. -Leer N.
que
= o, visuarizar ,,Facrorial de 0 isual 1,,.
IJ. l:::
1: queN N
comprollar
> 0 (los numeros negativos no ss consideran)
4. Hacer 1a variable p que va a contener
el product.or igruat a 1.

2 * l,queen

89

90

Fundamentos de programacin
5^

Realizar e1 producto p = p * N.
Disminulr en una unidad sucesivamenEe hasta 11egar a N = 1, y de
simuftaneo 1os productos p * N.

Vrsua-Lazar

Fin.

modo

P-

escribir
'Factorial de 0

igualaJ

escribir
'Nmero negativo'

P-P*N
N<-N-1

escribr
'Prueba con
positivos_

'Factorial ='

Pseudocffigo

aLgori@ Factorial

var

entero:
real: P

escribir

Estructura general de un programa

inicio
leer (N)
eiN=0entonces
eecribir( 'Factorlal de 0 igual a
si_no

EiN>0ertori.cea
P<-1
1: P - P * N
NEN_1
siN=lentonceE
eecribir('Factorial
si_no

ir_a
fin_si

91

p)

-,,

si_no

escribir(' Numero negativo' )


escribir 'pruebe con positivos,)
fin-ei
fin_ei
fin
3.3. Disear el diagrama

de

flujo para resolver una ecuacin

de segundo grado

Ax2 + Bx + C

O.

Anlisis
La ecuacin de segundo grado es Ax2

X1

Bx + C =

82 _ 4AC

-B+

X2=

2A

0 y las soluciones o races de la ecuacin son:

-B+^{E'4AC
2A

Para que la ecuacin de segundo grado tenga solucin es preciso que el discriminante sea mayor o igual

que 0.

El discriminante

de una ecuacin de segundo grado es:

D=8,_4AC
Por consiguiente. si

D=0
D<0

Y1 - -R/2a
X1 t Y)

Y) - -A/)^

no tienen solucin real..


En consecuencia, el algoritmo que resolver el problema es el siguiente:

1.
2.
3.
4.

Inicio.
fntroducir los coeficientes A, B y C.
Calculo del discriminante D = 82 - 4AC.
Comprobar e1 valor de D:
. si o es menor que 0, visualizar un mensaje de error,
. sa D es iqual.a 0, se obtienen dos raices iguales XI X2 _B
/
=
. si D es mayor que 0, se calculan las dos ralces XI y =
X2.
5 . I in de_ a lgori un o.

2A

92

Fu

nd a me ntos de prog ra

m aci

Diagrama deflujo

hacer

D=82_4AC

X1

=1-3+DyzA

x2 = (-B -D)/24

3.4. Escribir un algoritmo que

acepte tres nmeros enteros e

imprima el mayor de ellos.

Aruliss

El diseo del algoritmo requiere de una serie de comparaciones sucesivas. Las operaciones sucesivas son
las siguientes:

i. I-icio.
2. Iotr:oducir 1os tres numeros A, B, C.
3.CompararAyB:
. si A es r.enor que B:
-compararByC:
. si B es mayor que C, el mayor es B,
. si B es menor que C, el mayor es C.
. si A es mayor que B:
-compararAyC:
. si A es menor que C, el mayor es C,
. si A es mayor que C, el mayor es A.

Estructura general de

Diagrama

de

ur

s':i'-a

93

flujo

EJERCICIOS

"'

3.1.

Se desea calcular independiente la suma de los nmeros pares e impares comprendidos entre 1 y 200.
de cero (el ltimo nmero de la serie es -99) y obtener el nmero
mayor. Como resultado se debe visualizar el nmero mayor y un mensaje de indicacin de nmero nega-

'- 3.2. Leer una serie de nmeros distintos


tivo, caso de que

se haya

ledo un nmero negativo.


de los nmeros pares comprendidos entre 20 y 400, ambos

3.3. Calcular y visualizar la suma y el producto


inclusive.

- 3.4. Leer 500 nmeros enteros y obtener cuntos son positivos.


{R S" trata de escribir el algoriimo que pennita emitirla factura correspondiente
\'-l

a una compra de un artculo


determinado, del que se adquieren una o varias unidades. El IVA a aplicar es del 15 por 100 y si el precio bruto (precio venta ms IVA) es mayor de 50.000 pp*'setas, se debe realizar un descuento del 5

por 100.

- 3.6. Calcular la suma de los cuadrados de 1os cien primeros nmeros naturales.
-- 3.7. Sumar los nmeros pares del 2 al 100 e imprimir su valor.
- 3.8. Sumar diez nmeros introducidos por teclado.
- 3.9. Calcular la media de cincuenta nmeros e imprimir su resultado.

* 3.10.

Calcular los N primeros mltiplos de 4 (4 inclusive), donde N es un valor e introducido por teclado.
3.1.1. Disear un diagrama que permita realizar un contador e imprimir los cien primeros nmeros enteroi.
3.12. Dados diez nmeros enteros, visualizar la suma de los nmeros pares de la lista, cuntos nmert.
pares existen y cul es la media aritmtica de los nmeros impares.

..--.

94

"*

Fu

nd a m e ntos de prog

ra m aci

3'13' Calcular la nota media de los alumnos

de una clase considerando n-nmero de alumnos


y c-nmero de
notas de cada alumno.
3.14. Escribir la suma de los diez primeros nmeros pares.
un algoritmo que le lo. ouio. . .nt uhu de un
archivo que slo contiene nmeros y sume los
l3f-gscbir
' nmeros positivos.

\_,-- 3'16' Desarrollar un algoritmo

que determine en un conjunto de cien nmeros


naturales:
Cuntos son menores de 15?
Cuntos son mayores de 50?
Cuntos estn comprendidos entre 25 y 45i,
Sumar una secuencia d.
detectando si estn ordenados.

o
o

=_=\:
(3.1y
: )r.fs. Nes primo?

"nt.ro,

i-

.L

'41

CAPITU LO

INTRODUCCION A LA PROGRAMACION
ESTRUCTURADA

CONTENIDO

4.1. Tcnicas de programacin.


4.2. Programacin modular.
4.3. Programacin estructurada.
4.4. Estructura secuencial.
4.5. Estructuras selectivas.
4.6. Estructuras repetitivas.
4.7. Estructuras de decisin anidadas.
4.8. Estructuras repetitivas anidadas.
4.9. La instruccin ir_a (goto).

.1"

ACTIVIDADES DE PROGRAMACIN RESU ELTAS.


EJERCICIOS.

En la actualidad, dado el tamao considerable de las memorias centrales

por ejemplo, los


-citemos,
microprocesadores como el 80486, Pentium y Pentium Pro de lntel, 68030
de Motorola. PowerPC de Apple e lBM, de 16 y 32 bits-, el estilo de
escrtura de los programas se vuelve una de las caractersticas ms sobresalientes en las tcnicas de programacin. La legibilidad de los algoritmos
y posteriormente de los programas exige que su diseo sea fcil de comprender y su flujo lgico fcil de seguir.
La programacin modularen6ear la descomposiein de un programa en mdulos ms simples de programar, y la programacin estructurada permitir la escritura de programas fciles de leer y modificar. En un
prograrpa estructurado el flujo lgico se gobierna por las estructuras de

y las altas velocidades de los procesadores

control bsicas:

1. secuenciales,
2. repetitivas,
3. seleccin.

95

Fu

ndamentos de prog ram aci n


En este captulo se introducen los tres conceptos anterores: secuencial

instruccin a instruccin-, repetitivo


de repetir
-ejecucin
-capacidad
una serie de operaciones- y selectivo
de seleccionar una
accin entre un conjunto de alternativas-posibilidad
especficas.
El estudio de las estructuras de control se realiza basado en las herramientas de programacin ya estudiadas: diagramas de flujo, diagramas
N-S y pseudocdigos.

4.1. TCNICAS DE PROGRAMACIN


Las herramientas de programacin vistas en el Captulo l. fundamentalmente los diagramas de flujo,
fueron la primera representacin grfica utilizada para e1 diseo de algoritmos y programas. Este tipo
de herramienta constituye el fundamento de programacrn convencional clsica y es de utilidad para
la solucin de problemas de pequea y mediana complejrdad. Sin embargo, para problemas complejos el diseo de algoritmos implica un aumento considerable de la representacin grfica, una
reduccin de la legibilidad del algoritmo y un aumento de la memoria fsica de la computadora ocupada por el programa. Para evitar estos inconvenientes. las nuevas teoras de programacin se centran en las tcnicas de programacin modular y progrontacin estructurada, de modo que se pueda
conseguir un programa eficaz. El diseo de un programa entraa la descomposicin del problema en
mdulos (partes independientes)
nndular-.Ia programacin de cada mdulo
-programacin
mediante mtodos estructurados
estntcturodo- y su unin posterior mediante pro-programacin
cedimientos ascendentes o descendentes-

4.2. PROGRAMACIN MODULAR


L9 programacin modular es uno de los mtodos de diseo ms flexibles y potentes para mejorar la
ploductividad de un programa. Eqprqgramacin modular. e1 proerama se divide en mdulo,s (pafies
independientes). cada una de las cuales ejecuta una nica actiridad o rarea y se codilican independientemente de otros mdulos. Cada uno de estos mdulos se analizan. .odifi.un y ponen a punto
por separado.
C.dq programa contiene un mdulo denominado progranru tringipal
-que controla todo lo que
su!-ede; se transfiere el control a submdulos (posteriormente se denominarn subprogramas), de

mld-tr Que ellos puedan ejecutar sus funciones; sin embargo, cada submdulo devuelve 1 controi al
nlriJuk,pnneipal cuando se haya complelado su tarea. Si la tarea asignaclq a cada submclulo es
demasiado compleja, ste deber romperse en otros mduls ms pqueos. EI pioceso sucesivo de
subdi" r:i,in ,-le rndulos contina hasta que cada mdulo tenga solamente una tarea especfica
Que
eJecuur. Esr urea puede ser enfradq, salida, manipulacin cle datos, ccnfrol de otro-s mduloi o
algtttta combitucitt de stos. Un mdulo puede transferir temporalmenfe (bfurcacin) elcontrol a
otro mdulo: sin embar-so, cada mdulo debe devolver el control al mdulo del cual se recibe originalmente el conroi.
Los mdulos son independientes en el sentido en el que ningn mdulo puede tener acceso directo a cualquier otro mdulo. con excepcin del mdulo al que llama y sus propios submdulos. Sin
embargo. los resuitados producidos por un mdulo pueden ser utilizados por cualquier otro mdulo
cuando se transfiera a e11o: ei control.

lntroduccin a la programacin estructurada

Mdulo

Mdulo

Mdulo

21

Modulo

31

97

Mooulo

42

Mdulo 22

Figura 4.1. programacin modular.


Dado que los mdulos son independientes, diferentes programadores
pueden trabajar simuit-

neamente en diferentes Parles del mismo programa.


Esto reduci=r el tiempo del diseo del algontmo
y posterior codificacin del programa. Adms, un mdulo
se puede modificar radicalmente sin afec-

tar a otros mdulos, incluso sin alterar su funcin principal.


-La descqmposicin de un programa en mduloi independientes ms simples se conoce
tambin
como el mtodo de divide y vencers>> (divide and
conquer). Se disea cad mdulo con independencia-de^los dems y siguiendo un mtodo ascendente
o descendente se llegar hasta la descomposicin final del problema en mdulos en forma jerrquica.

4.2.1. Tamao de los mdulos


una dificultad en la programacin modular reside en la
determinacin del tamao de un mdulo.
Aunque no exista una regla fija que permita definir
el tamao estndar del mdulo, una buena aproxi!+,acir es qensiderar mduros-def tamao fsico de
,"u pg;; it
Evidentemente no siempre_se c_onseguir descomponer
un problema "en mdulos de este tamao,
pero el programador deber realizar sfuerzos para
su dise.
Puede no ser claro lo que debe incluirse dentro
de un mdulo. Desgraciadamente, no hay
reglas' pero tal como se ha dicho antes, un mdulo
de una o dos lneas probablemente ser demasiado corto y ser mejor incotporarlo en otro mdulo;
ror ,roJuror-g.ur,a., de 30 o ms lneas probablemente eiecutarn tareas mrtiples y se debern
romper.n

r;;;;i*ii..i"r"rl.

uriua", ms pequeas.

Ejemplo 4.1
Se deseq disear un

algoritmo que realice las sigwientes tqreas;

t.,' impresin de cabeceras de un informe.

{.

lectura de datos.
ejecutar clculos,
imprimir Ineas detalladas de informacin.
tro
imprimir totales.

lo

l.

.'r

98

Fu nda

mentos de prog ramaci n

Este programa se puede descomponer en mdulos, de modo que exista un mdulo principal o de

control y diferentes submdulos.


Mdttlo principal:

o
o
o
o

Llamada a submdulo impresin de cabeceras


Llamada a submdulo <<proceso de datos.
Llamada a submdulo impresin de totales.
Fin de proceso.

Su.bmdulo

o
o

Instruccin para impresin de cabeceras.


Retorno al mdulo principal.

Submdulo

o
o
o

proceso de datos.'

Lectura de datos.
Ejecucin de clculos
Impresin detallada de lneas.
Retorno al mdulo principal.

Submdulo

o
o

impresin de caieceras..

impresin de totaf

es..

Instrucciones de impresin de totales.


Retorno al rndulo principal.

La representacin grfica
y tles submdulos.

se

muestra en la Figura 4.2, de modo que existir un mdulo principal

4.2.2. lmplementacin de los mdulos


La pro-uramacin modular se implementa utilizando mdulos que toman diferentes nombres, segn
e1 len-uuaje de programacin:funciones en C/C++, subtutinas en BASIC, procedimienlzs en pasc;al,
subrurittas en FORTRAN, secciones en COBOL y funciones como mdulos comunes en todos los
leneuajes (C. C++, Ada, etc.).
En el Captulo 5 se analizarn con detenimiento 1a programacin modular, el diseo de los
mdulos r la comunicacin entre ellos y el mdulo principal.
Mdulo
principal
Mdulo de
impresin
de

cabecera

Mdulo de
i

proceso de
datos

Mdulo de
impresin
de totales

Figura 4.2. Estructura modular simple.

99

4.3. PROGRAMACIN ESTRUCTURADA


f.f,.tqninoprogramacinestructuradaseref\ereaunconjuntodetcnicasquehanidoer';..;...
nandodesdelosprimerostrabajosdeEdsgarpi:ttttu'gttas"tcnicasaumentanconsiderablemen:;''
ti"mpo req,erido para escribir' verificar' depurpiociutividaa a"t programa reuciendo "t "t"'
utiliza un nmero limitado de estructur'
y mantener lo, progrurrir. f-u progtu*acinestructuraia
reducen los errores'
de los problemar {l lg, consiguiente,
de control que minimiz* i"
leer y manverificar'
""?pi"idad prolru*us mt iil"s de escribir'
La programacin estructuraa n"e to,
dotados de una estructura'

ios irogru*u* deben estar


-*l;;;;**iid*
iirirtrradaes el conjunto de rcnicas que incorporan:

tener.

{.''
,\.

:'o

cendente ( toP - down )'


recursos absfractos,
estructuras bsicas.
clis eo de

4.3.1. Recursos abstractos


La programacin esucturada

se

auxilia delos recursos abstractos en lugar

de los recursos Concretos

de programacin)'
" *""t" dispone (un determinado lenguaje
irrrro, abstractos -segn Dijkstrp- consiste en
Descomponer un programa en .trmino, .d,
r"il*.fimero de acciones ms simples'
descompone, oru d"t"i'uu ut'io' ""*p1"lu "'
y que constituirn sus instrucciones'
capaces de ser

ejecut;;;;;-;computadoia

4.3.2. Diseo descende nte ltop'downl


descompone en una
proceso mediante el cual un problema se
E\ diseo descendente (top-down)es el
(stepwise)'La metodologa descendente consisiie de niveles o puroi"r""riro, " refinamiento a'*
de modo que se relacionen
te en efectuar una relacin entre las ,u"".lrur-"tupu,
"tqo"t1'racin'
el problema en
descompone
se
decir'
Fs
" inii*utin'
unas con otras mediante entradas y salidas
dos puntos
qo" ," pr"o" considerar cada estructura desde
etapas o estructuras i".rqol.ur, d modo
de vista: qu hace Y cmo lo hace '
forma:
estnlcturas se consideran de la siguiente
si se considera un nivel n de refinamiento, las
4'4'
El diseo descendente se puede ver en la Figura

Nivel n: vista desde el exterior


"

qu hace?"

Nivel n + 1:vista desde el interior


" cmo lo hace?"

mdulo'
Figura 4.3. Vistas interior y exterior de un

Fundamentos de programacin

100

Figura 4.4. Diseo descendente.

4.3.3. Teorema de la programacin estructurada: estructuras bsicas


En mayo de 1966 Bhm y Jacopini demostraron que un programapropio puede ser escrito utilizando solamente tres tipos de estructuras de control:

\'
\o

secuenciales.

selectivas,
{".o repetitivas.

un programa

se define como

propio si cumple las siguientes caractersticas:

posee un solo punto de entrada y uno de salida o fin para control del programa,
existen caminos desde la entrada hasta la salida que se pueden seguii y qr. purun por todas

partes del programa,


todas las instrucciones son ejecutables y no existen lazos o bucles infinitos (sin fin).

4.4. ESTRUCTURA SECUENCIAL


La estructura secuencial es aqulla en 1a que una accin (instruccin) sigue a otra en secuencia. Las
Iareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente
hasta e1 final del proceso. La Figura 4.5 representa una estructura secuencial.Laestructura secuencial tiene una entrada y una salida. Su representacin grflca se muestra en las Figura s 4.5, 4.6 y 4.7 .

Figura 4.5. Estructura secuencial.

lntroduccin a la programacin

accin

accin

es'tttuila l0l

accron n
Figura 4.6. Diagrama N-S de una estructura secuencial.

'":zii:z:::

ttn
Figura 4.7. Pseudocdigo de una estructura secuencial.

Ejemplo 4.2
Clculo de la suma y producto de dos nmeros.

La suma S de dos nmeros es S = A + B. El pseudocdigo y el diagrama de flujo correspondientes se muestran a continuacin:


Pseudocdigo

inicio
.Ieer (A)
J,eer (B )

S<-A+B
P(-A*B
escribir(S,
fin

P)

1O2

Fundamentos de programacin

Diagrama

de

tlujo

S<-A+B
S<_A*B

Ejemplo 4.3
Se trata de calcular el salario neto de un trabajador enfuncin del nmero de horas trabajadas,
precio de la hora de trabajo y, considerando unos descuentos fijos, el sueldo bruto en concipto cle

impuestos (20

por

100).

Pseudocdigo

inicio
.r ca1culo salario neto
Ieer(nombre, horas, precio_hora)
saiar;o_bruto <- horas * precio_hora
i:o:restos <-- 0.20 * salario_bruto
saiario_:ieto - salario_bruto - impuesLos
escri.bjrilombre, salario_bruto, salarlo_neto)
fiu

lntroduccin a la

Diagrama

d.e

programacinfu

Jlujo

leer
NOMBRE, HORAS
PRECIO-HORA

SALARIO_BRUTO eHORAS * PRECIO_HORA

O.20

IMPUESTOS <-.
* SALARIO_BRUTO

SALRARIO*NETO <SALARIO-BRUTO <_


IMPUESTOS

NOMBRE, SALARIO BRUTO

SALARIO-NETO

Diagrama N-S

leer
nonre, horas, precio

salario*bruto (- horas * orecio


impuestos <- 0.20 * salario..i"

salario_neto e- salario_brut.o - impuestos


escribr
nombre, salario_bruto, salario neto

ltrl

104

Fundamentos de programacin

4.5. ESTRUCTURAS SELECTIVAS


La especificacin formal de algoritmos
tiene.realmente utiridad cuando
descripcin ms complicaaa
er algoritmo requiere una
quJ r;;
de insrrul.i"r*. tr,. es er
numero de posibles alternativas
caso cuando exisren un
resurra;r;; d" iu .rutru.iJ;;;;;
determinada condicin.

ji;;';;.ira

.,,i?ilf?:'";:;;::n::tr';,_.^,:ri:;:;:,:,y,;,"d,;*,.u,,

a"

ur,iq,",J,i,'J, au,o.

En las estructuras selectivas


tt
ra condicin y en funcin der resultado
realiza una opcin u otra' Las
""u
de ra misma se
condicio*il..rp..ifican
usano
tacin de una estructura selectiva
lgicas. La represenr" rru.. .on prrabras en
"^p..rion"r

pil;"o (if, then,


ffi
;H".T?".- '
;
; ;; ; ;; ;;
:: * ;; i,;:ffi ffi
,..nJriJir.a.n ,".,
er-se o bien"

,"j?i131 ; ?l
ill.:,ffi
"i
Las qstructuras
selecrivu, o

mltiples.

4.5.1. Alternativa simple (si_enronces


La estructura alternativa simple

/ if

_then)

si-entonces

#,ffi"ffiXX1l,li'lu"'*o " "-pr"


o

en

.o

simples,
dobles.

-o

.o

unu

(en insls. if -then


o bien rF-THEN) ejecuta
.,.. truir.;ra.,ur. La seleccin
si-enronces

si la condicin

es verdadera, entonces
accin
accin.o-pr.riu y consrar de varias
,Jt""?Jll]"
o si la condicin es f,alsa, entonces

S1 (o acciones caso de ser


s1 una

no t u'."r ruu.
I-a: representaciones grficas
de la estructura condicional
simple se muestran en la Figura
4.g.
a)
c)
condicin?

Pseudocdigo en castellano
entonces

Pseudocdigo en tgls
<.1::::
endi f

Pseudocdigo en castelluno
Si (accion compuesta)
si -o.. ol . .on entonces
<accion SJ1>
<accian 572>

then
-._>

Figura4,8.Estructurasalternativas,,.o,",,

<accion SZn>
fin-si

=
lntroduccin a la programacin

esfructurada

f 0S

. Obsrvese que las palabras del pseudocdigo si y f in-=-s-i.se-ali:reu ve{lealluente indqnrando (sangrando) la <accion> o bloque de acciones.

4.5.2. Alternativa doble

(si-entonces-si_no / if

-then-e1.E_e)

La estructura anterior es muy limitada y normalmente se necesitar una estructura que permita elegir entre dos opciones o alternativas posibles, en funcin deI cumplimiento o no de-un determinada condicin.
Si la condicin C es verdadera, se ejecuta la accin S 1 y, si es falsa, se ejecuta la accin S 2 .

condicin?

b)

a)
Ps eudoc

digo e n castellano

Pseudocdigo en castellano

e <condicion> entonces
<accion 51>
si-ng
< accion 52>
fin_si

(51 accion compuesta)


si <cord.lclol-l> entonces
<acclonS77>

Pseudocdigo en ingls

<accian S2n>
si-no
<accion 521>

if

<condicion> then
<accion Sl
else
<accion 52>
endif

<accian s1n>
fin_si
c)
Figura 4.9. Estructura alternativa doble: a) diagrama de flujo;
b) diagrama N-S; c) pseudocdigo.
Obsrvese que en el pseudocdigo las acciones que dependen de entonces y si_no estn
indentadas (sangradas) en relacin con las palabras
y f irr_"i; este procediminto aumenre 1:
Iegibilidad de 1a estructura y es el medio ms idneo "i
para representar algoritmos.

105

Fundamentos de programacin

Eiemplo 4.4
Resolucin de una ecuacin de prirner grado.

si la ecuacin

es ax + b = 0, a y b son 1os datos, y las posibles soluciones son:

. a<>0
. a=0 b<>0
. a=0 b=0

x=-b/a

entonces
entonces

El algoritmo correspondiente
aTgoritmo

solucinimposible,
solucinindeterminada

ser:

RESOLl

var

real: a, b, x
inicio
Jeerra, br
gi a <> o entonces
x e- -bla
escribir (x)

al y *, v :
,X

,} '

i.

si_no

si_no

1."

":

' si b <> 0 entonces


escribir ( 'solucion imposible,
escribir
r1n sa
ftn_si
fin

,"

\..

'solucion indeterminada,

Ejemplo 4.5
Calcular la media aritmtica de una serie de nmeros positivos.
La media aritmtica de n nmeros es:

xl+ x2+ x3+...+ xn

-n'
En el problema se supondr la entrada de datos por el teclado hasta que se introduzca el primer
nmero negativo, en nuestro caso -99. Para calcular la media aritmtic se necesita saber cuntos
nimeros se han introducido hasta llegar a -99; para ello se utilizar un contador C que llevar la
cuenta del nrimero de datos introducidos.
VAITIABI FS:

-=_ rE :-.J]I.eI oS ) i ente(a


m {medial: ::eaaTgorit@
inicio
s <- 0
n<-0

y,ed-e
//rtlcaitzacion

de s y n

lntroduccin a la programacin

estructurada

1O7

datos:

]eer(x) //calcuto
gix<0entonces
ir_a media

eJ primer numero ha de ser mayor que cero

si_no

n<-n+1
s<-s+x
ir_a datos
fin_ei
media:

+- s/n //media de los numeros positvos


escribir(m)
fin
m

F'n este ejemplo se observa una bifurcacin hacia


un punto referenciado por una etiqueta alfanumrica denominada (media) y otro punto referenciado por (datos).
Trate el alumno de simplificar este algoritmo de modo que slo contenga
un punto de bifurca-

cin.

Ejemplo 4.6
obtener la nmina semanal
-salario
pqga por horas y del modo siguiente:

Se desea
se

neto- de los empleados

de una empresa cuyo trabajo

las horas inferiores o iguales a 35 horas (normales) se pagan a


una tarifa determinada que se
debe introducir por teclado al igual que el nmero de hos y el
nombre del trabajador,
a las horas superiores a 35 se pagarncomo
extras al precio e 1.5 horas normales,
a los implestos a deducir a los trabajadores varan
en iuncin de su sueldo mensual:
sueldo <= 20.000, libre de impuestos,
las siguientes 15.000 pesetas al 20 por 100,
el resto, al 30 por 100.

Andlisis
Las operaciones a realizar sern:

I . Tn_cio.
2. Leer nombre, horas trabajadas, tarifa.
3. Verificar si horas trabajadas <= 35, en cuyo caso:
salario_bruto = horas * tarifa; en caso contrario,
safario_bruto = 35 * tarifa + (horas-35) * tarifa * 1.5.
4. Calculo de impuestos
si salario_bruto <= 20.000, entonces impuestos = 0
si salario_bruto <= 35.000 entonces
impuestos = (salario_bruto _ 20.000) * 0.20
si salario*bruto > 35.000 entonces
= (safario_bruro - 35.000) * 0.30 + (15.000 * 0.20)
_
5 . (^a.ll.nyu"tos
cu.l o del sa Ia rio_neco:
salario_neto = salario_bruto _ impuestos.
b. -1,'rn-

108

Fundamentos de Programacin

Representacin del algoritmo en pseudocdigo


aTgoritmo Nomina

var
cadena: nombre

real: horas, impuestos, sJlruto, sneto


inicio
-Leer(nombre, horas, tarifa)
si horas <= 35 entonces
sbruto <- horas * tarifa
si_no

sbruto <- 35 * tarifa + (horas - 351 * r''

-----,

_2+=--=

* tarifa

--

si sbruto <= 20.000 entonces


impuestos <- 0
- si-no
si (sbruto > 20'000) v (sbruto <= 35'000) entonces
impuestos <- (sbruto - 20.000) * 0'20
si,no
impuestos e (15.000 * 0.20) + (sbruto - 35.000)* 0.30
fin-si
fin-si
sneto (- sbruto - imPuestos
escribit(nombre, sbruto, impuestos, neto)

fn

Representacin del algoritmo en diagrama N-S


tntcto
leer nombre, horas, tarifas

horas < = 35
no

SI

sbruto

r- horas x tarifa

*
sbruto <- 35 tarifa + (horas-35)*
15 * tarifa

sbruto < = 20.000


no
sbruto > 20.000 y
sbruto < = 35.000
s,

impuestos e- 0

sneto

sbruto

impuestos ((sbruto-20.000) x 0.20

impuestos

escribir nombre, sbruto, impuestos, sneto

fin

no
impuestos e15.000 + 0.20 +

(sbruto-35.000) * 0.30

lntroduccin a la

Representacin del algorifmo en diagrama de

programacin@

flujo

leer NOMBRE
HORAS. TARIFA

SBRUTO <_
HORAS * TARIFA

SBRUTO <-

35*TARIFA+(HORAS

-35)*1.5*TAR|FA

IMPUESTOS <_
(SBRUTO - 20.000)

*0.20

SNETO <(SBRUTO.
IMPUESTOS

NOMBRE, SBRUTO
IMPUESTOS, SNETO

IMPUESTOS e15.000

0.20 +

35.000) * 0.30

110

Fundamentos de Programacin

Ejemplo 4.7
Empleo de estructura selectiva para detectar si un nmero tiene o no parte fraccionariq.

aTgoitfro Parte-f racc ionar ia


var

real : n
inicio
escribir ( 'Deme numero ' )
Ieer(n)
si n = trunc (n) entorceg
escribir( 'E1 numero no tiene parte fraccionaria')
ei-no
escribir('Numero con parLe fraccionaria' )
fin-si
fin

Eiemplo 4.8
Estructura selectiv(t pqrq averi7uqr si un ao ledo de teclado es o no bisiesto.

algoritno Bislesto
var

entero:
inicio

ai-]o

l,eer ( ao )

ei (ao MoD 4 = 0) y (ao MOD 100 <> 0) 0 (ao


escribir( '81 ao ', ao, ' es bisiesto')
ei_no

.escribir('EL
fin si
fin

ao '

, ao,

MoD 400

= 0) entonces

no es bisiesLo')

Eiemplo 4.9
Algoitmo que nos calcule el drea de un tringulo conociendo
utiliza para el control de la entrada de datos en el programa.
algoritno Area-Lriangulo
Yar
. = 1^ e n area

inicio
eecribir( 'Deme los lados ')
Teer (a,b, c\

p<-(a+b+c)
/2
gi (P , a) Y (P , b) Y (P , c) entorceE
area <- :aiz2(r * (p - a) * (p - b) * 1p - c))
escribir( area)
si-ao
eecribir('No es un triangiulo')
fin ei
fin

sus

lados. La esttuctura selectiva se

lntroduccin a la programacton

4.5.3. Alternativa mltiple (segun-sea, caso

est''-::":'

111

de / case)

posibie' :''::
la prctica-, es necesario que existan ms de dos elecciones
Con frecuencia
altematir
-en
posibles
tres
grado
existen
" >e:
ejemplo, en la resolucin de la ecuacin de segundo
como
problema'
Este
po.sitivo)'
o
nulo
seguir, segn que el discriminante sea negativo,
dobles' anidadas o e r
"-iror'o
se podra resolver por estructurs alternativas simples o
adelante,
ms
ver

serios pro'

grande puede plantear


cascada;sin embargo, este mtodo si el nmero de alternativas es
legibilidad'
de
blemas de escrituridel algoritmo y naturalmente
podr tomar n valor.es distinlgs, I '
La estructura e oe.irfrn -,iltiple evaluar una explein gye
ualorei en 1 condicin,ie realizar qna de las.n accione-s'
:,;;_u-{;;6" qrg;i;';;; ;i"s,"grrir.rn
determinl{g cmino entre los n pobles'
o*r""ilgUi,
ar hi';trgoiit*o
" '"j;;"pr;:nt.i0,
4'10'
ta esrructura de decisin mltiple se representa en la Figura

grficade

3 (sinPlliicado)

I[adef o^ 1:

ModeJo

segun-Eea exPresion (E) hacer

opcion E

de

eL: accon SLL


accon Sl2
tin-opcion
accion SIa

e2: accion S2I


accion 522

l,Iodelo 4 ( sinPTif icado)

casod.e E hacer
acciort s2b

enr accion

tirr-t...,

S31

a.ccion 532
Modefo 5 (simPTificado)

acclon sip
si..no accion Sx

"lu.=nhacer

fin_segun
Modeio 2 (sinPlificado)

fir,

"i

segun E,n"."t

fin segun
Figura 4.10. Estructuras de decisin mltiple'

112

Fundamentos de programacin

Diagrama

de

flujo

Diagrama N-S
Modelo

Modelo

-----____..-.-= o n oi o n-_-/
"i
-i-]-otros
n=1 2 3
S1

S2

S3

Sn

Sx

Pseudocdigo
En ingls la estructura de decisin mltiple se representa:
case expresion of.
Iel] : accjon .9f
..e2) : accion 52

-=:_ : accion Sn
otherwise
::cion Sx
end_case

cage expresion o.
Ie7] : accion S7
le2l: accion 52

accion

[enj:
else

Sn

accion Sx
end_case

La estructua de decisin mltiple en pseudocdigo


se puede representar de diversas formas,
pudiendo ser las acciones s1, s2, etc-, siiples
como en el cso anterior o compuestas como en los
siguientes modelos de formatos.
NOTAS:

.. 1' obsrvese que para cada valor de la expresin (e) se pueden ejecutar una o varias acciones.
Algunos lenguaies, como Pascal. denominan a estas
inrtc.ire, ,o*pu"rrory las delimitan con las
palabras reservadas begin-end (inicio-fin);
es decir,
en ps.uio.oorgo.

lntroduccin a la

programacin

lI3

segun_ea E hacer

eL-. accion

3L

e2:. accion

52

en, accion Sn
gi_no: accion

Sx

fin_segun
o bien en el caso de instrucciones compuestas:
seEun_Eea E hacer

e1: inicio
accion
accian

S11
SL2

)ccion sta
fin
e1: inicio

fin
en: inicio

t afr

si_no: accion

Sx

fin_eegun

2. Los valores que toman las expresiones (E) no tienen por qu ser consecutivos ni nicos; se
pueden considerar rangos de constantes numricas o de caracteres como valores de la expresin E.
caso_de E hacer

2, 4, 6, B, 10: escribir
L, 3 , 5, 7 , 9: escribir
fin_caso

,numeros pares,
numeros impares

Cul de los anteriores modelos se puede considerar representativo? En realidad, como el pseudocdigo es un lenguaje algotmico universal, cualquiera de los modelos se podra ajustar a s presentacin; sin embargo, nosotros consideramos como ms estndar los models l, Z; 4. En esta otra
seguiremos normalmente el modelo 1 , aunque en ocasiones , y pafa famlliarizar al lector en su uso,
podremos utilizar los modelos citados 2 y 4.

Ejemplo 4.10
Se desea disear un algoritmo que escriba los nombres de los das de la semana en
funcin del valor
de una variable DrA introducida por teclado, que representa su posicin dentro de la semnna.

Los das de la semana son 7; por consiguiente, el rango de valores de ora ser 1 . . . 7, y caso
de que DrA tome un valor fuera de este rango se deber producir un mensaje de error advirtiendo le
situacin anmala.

114

Fundamentos de Programacin

algoritmo Nombre-dias

var

entero: DIA
inicio
feer (DfA)

aegun-Eea DfA hacer

I: escribir ( 'LL-ITES )
2z escribir('MARTES )
3 : esctbir('MIERCOLES'
4t escribir( JUEVES')
5: escribit( VIERNES')
6: escribit ( 'SABADO' )
7 : escribit ( 'DOMINGO'
si-no
escrbit ( 'ERROR )
fin-segun
fin

Eiemplo 4.11
que el da
Leda una fecha, decir el da de la semana, suponiendo

de dicho mes fue lunes'

aLgorixfio Dia-semana
var
entero : dia

inicio
'scribir( Diqa el da
leer( dia)
segur-sea dia MOD 7 hacer

.i)
l

1:
2:
3:

esctibit( 'Lunes

l.

1
-U

esctbir( Martes

escribit (' Miercoles'

4:

eectibir(''llleves'
5:
6:

escribit(

viernes')

escribit ('

sabado '

0:

escribir( Domingo')
fi segiu
fiE
Eienplo +.12
Pregwar qu da de

algoritw
var

Dia

l"a

semana fue el da

sernara-modi f icado

entero : dia,d1
caracter : dial

del mes actual y calcular que da de la semana es hoy'

In

inicio
escribit( E1 dia 1 fue
,a*1 i:1 \
Oial hacer
"""""-"""
d1<,M':
d1-

d1<-

t ro d

u cc n a

a ptograttwiiio

rt5

,)

d1<- 3
\/, .
d1<- 4
d1<'D' :
d1<-

5
6

6i-no

dle -40

fin_segun
ecribir( Diga el dia
.leer( dia)
dia <- dia + d1

Eegun-sea dia MOD 7 hacer


1:

escribir( 'Lunes' )

escribir( 'Martes')
3:

/-

escribir (' Mercoles'


escribitl 'Jueves'

5:
6:

elcribir( 'Viernes')
ecribir (' sabado

'

0:

esctibir{

Domingo'

fin-segun

fin
Ejemplo 4.13
Se desea

5, 6,

convertir las calificaciones alfabticasA,

B, C, D Y

E a calificaciones numricas 4 ,

7 Y B, resPecfivamente'

pof la vadable LETRA, el algoritmo de resoLos valores de A, B, c, M, D y E se repfesentarn


lucin del problema es:

algoritmo Cal i f I cacj

ones

var

caracter: LETFA
entero : CALIFICACIONES

/.

r'-

116

Fundamentos de programacin

inicio
(LETRA )
-7 eer
segun_ea LETRA hacer
I

'A': calificacion <'B : calrficacion <'C : calificacion <D : cafificacion tE : calificacion <si-no
escribirt E^^C-
fin-segun
fin

4
5
6
7
B

ejemplo,
Como se ve, en el pseudocdigo no se contemplan otras posibles calificaciones
-por
0, resto notas numricas-; si as fuese, habra que modificarlo en el siguiente sentido:
segun_sea LETFA hacer

'A : calificacion <- 4


'B : calificacion +- 5
'C': calificacion <* 6
D': calificacion <- 7
E': calificacon <- 8
si_no: calificacion <-

fin_segun

Ejercicio 4.14
Algoritmo que nos indique si unnmero entero, ledo de teclado, tiene 1,2, 3 o mds de 3 dgitos.
Considerar los

ne gativos.

segun_sea <expresion> hacer, son varios s <expr.


anidados en la rama si-no. Si se cumple el primero ya no

Se puede obserr/ar que, la estructura

logica>

entonces

pasa por los dems.

aTgoritmo Dig'tos
var

eatero:

inicio
.l

eer (n

aegun,sea n hacer

-9 ..9:
escz'ibir ( ' Ti ene 1. digito'
)) ..99:
egcribir( Tiene 2')
-i)9 . . 999:
eecribir( Tiene tres')

si_no

fi.
fin

egcribirr liene mas de tres

eegnrn

Ejemplo 4.15
por teclado un nmero comprendido entre
nmero es pqr o impar.

Se desea leer

I y 10 (inclusive) y se deseavisualizar si el

lntroduccin a la programacion

er'---':::

111

Enprimer1ugar,sedeberdetectarsielnmeroestcomprendidoenelrangor.lrdc,-:.
1, 3, 5, 1, 9,escribirunmensajede' impa: :,.ie. *
8 , 10, escribir un mensaje de ' par ' .

acontinuacinsielnmeroes
6

al-goritmo PAR_IMPAR
var entero: numero
inicio
feer numero
si (numero >= 1) y (numero <= 10) entonces
(

gegun_gea numero hacer

1,, 3, 5, 7, 9 : escribir( impar


2, 4, 6, B, 10: escribjr( par )

fin_segun

fin_si
fin

!1

I
!

{
I

,{

4.6. ESTRUCTURAS REPETITIVAS


Las computadoras estn especialmente diseadas para todas aquellas aplicaciones en las cuales una
operacin o conjunto de ellas deben repetirse muchas veces. Un tipo muy importante de estructura
es el algoritmo necesario para repetir una o varias acciones un nmero determinado de veces. Un
programa que lee una lista de nmeros puede repetir la misma secuencia de mensajes al usuario e
instrucciones de lectura hasta que se lean todos los nmeros de un fichero.
I as estructuras que repiten una secuencia de instrucciones un nmero determinado de veces se
denominan bucles. y'se llarna iteracin al hecho de repetir la ejecucin de una secuencia de acciones.
Un ejemplo aclarar la cuestin.
ejemplo, caliSupongamos que se desea sumar una lista de nmeros escritos desde teclado
-por
ficaciones de los alumnos de una clase-. El medio conocido hasta ahora es leer los nmeros y aadir sus valores a una variable SUMA que contenga las sucesivas sumas parciales. La variable SUMA
se hace igual a cero y a continuacin se incrementa en el valor del nmero cadavez que uno de ellos
se lea. El algoritmo que resuelve este problema es:
a-Zgoritmo

Suma

var
enLero: suma,

inicio

SUMA

Ieer

<-

SUMA

r ume ro

l.

<-

SUMA

.Leer (numero
SUMA

numero

SUMA

eer numero
(

numero

numero

fin
y as sucesivamente para cada nmero de la lista. En otras palabras, el algoritmo repite muchas
las acciones.
J.

eer ( numero )

SIIMA

<-

SI]MA

numero

vece

f
1

18

Fundamentos de programacin

Tales opciones repetidas se denominan bucles o lazos. La accin (o acciones) que se repite en un
bucle se denomina iteracin. Las dos principales pregunt realizarse en el dise de un bucle son:
qu contiene el bucle? y cuntas veces se debe repetir?
Cuando se utiliza un bucle para sumar una lista de nmeros, se necesita saber cuntos nmeros se han
de sumar. Para ello necesitaremos conocer algn medio para cletener e1 bucle. En el ejemplo siguiente
usaremos la tcnica de solicitar al usuario el nmero que desea, por ejemplo, N. ExiJten dos procedimientos para contar el nmero de iteraciones, usar una vanable TOTAL que se inicializa ala"*tidrd d.
nmeros que se desea y a continuacin se decrementa en uno cada u., qu" el bucle se repite (este procedimiento aade una accin ms al cuerpo del bucle: ICTAL <- TOTAL - 1), o bien iniciilizar la variable TOTAL en 0 o en 1, e ir incrementando en uno a cada iteracin hasta llegar al nmero deseado.

I:1"rrt^"

suma-numero

entero: N, TOTAL
real : NTUMERO, SUIIA
inicio
leer (N)
TOTAL * N
SUMA <- O
mientrasTOTAL>0hacer
leer (NUMERO )
SUMA <- SUI{A + NUMERC
TOTAL <- TOTAL 1
fin_mientras
escribir\
La suma de 1cs , N,
fin

numeros es , SJIIA)

El bucle podr tambin haberse terminado poniendo cualquiera de estas condiciones:

hqsta_que TOTAL sea cero


desde I hastaN

Para detener la ejecucin de los bucles se utiliza una condicin de parada. El pseudocdigo de
una estructura repetitiva tendr siempre este formato:

inic io
::::ctalizacion
rats

de variables

I -

.::t.ues 51, 52, ...


::_r. sequn condicjon
r.,tt,,=-:: Sn, Sn + 1,
f il_repet ir
-\unque Ia condicin de salida se indica en el formato anterior en el interior del bucle
existen
lenguajes que as la contienen expresamente 1-, lo normal es que /a condicin se indique -y
al final o al
prirrcipit-t del bucle. r'as se consideran tres tipos de instrucciones o estructuras repetitivas olterativas
generales \ una particular que denominaremos iterar, que contiene la salida
irt"rio. del bucle.

iterar
mientras

'

"nil

loop )
tx.hile )

repetir

desde I para

forl

repeat

Modula-2 y QuickBASICiQBasic. enrre orros

lntrodueion a b

pqratwiin *tmtrada

119

El algoritmo de suma anterior podra expresarse en pseudocdigo esndm


a1

gor i tmo SuMA_numero s

var

entero: \, TOTAL
real: NUMERO, SUMA
inicio
Leer (N)

<- N
<- 0
repeLir

TOTAL

V*V'/

SIIMA

-Zeer(NUMERO)

<- SUMA + NUMERO


<- TOTAL _ 1
hasta-que TOTAL = 0
escribir(. 'La suma es',
tf,n
SIIMA

TOTAL

SUMA)

.la

Los tres casos generales de estructuras repetitivas dependen de la situacin y modo de condicin. La condicin se evala tan pronto se encuentra en el algoritmo y su resultado producir los
tres tipos de estructuras citadas.

. l.

Lacondicin de salida del bucle se realiza al principio del bucle (estructura

algoritrno SUMAL
inicio
//Ir1ctaltzar K, S a cero
K<-0
s<-0
leer (n)
mientrasK<nhacer
K<-K+1
S<-S+K
fin mientras
escribir (S)
fin
Se ejecuta el bucle mientras se

2. La condicin

mientras).

)"4f

4 ,Pl

l-/"
'J,o

, tl

)t'

"-

verifica una condicin

(K <

n)'

de salida se origina al final del bucle; el bucle se ejecuta hasta que se verifica

una cierta condicin.

repetir
K<-K+1
S<-S+K

hasta,_que K > n

3. La condicin

de salida se realizacon un contador que cuenta el nmero de iteraciones.

desde t - vt hasta vf hacer


S<-S+i
fin desde

i es un contador que cuenta desde el valor


incrementos que se consideren.

inicial

(vi)

hasta el valor

final (vf) con lm

12O

Fundamentos de programacin

4.6.1. Estructura mientras (',whi1e,,

Pseudocdigo en castellano

mientras condicion hacer


accion S7
acc.ion

52

or

-cr

aa:

fin_mientras
Pseudocdigo en ingls
while :::i:c-ton
<:::: i-:es >

do

endwhile

mientras

condicin

c l:: e::
dowhile condicion
<acatoes>

acc'l0nes

endd.o

c)

b)

Figura 4.11. Estructura mienrras: a) diagrama de frujo; b) pseudocdigo;


c) diagrama N-S.

La estructura repetitiva mientras (en ingls while o dowhile ..


hacer mientras) gsa,qulla en
que el cuerpo del bucle se repite mientras se cumple
una determinada

condici..

ffiesentaciones grficas son las anteriores.


- . Cuando se ejecuta la instruccin mientras, la primera cosa que sucede es que se evala la condtclqn (qna expresin booleana). si se evala/a/sa-, ninguna
u..n se,toma y el programu p.;-ri;;
en Ia si-euiente instruccin.del bucle. Si la expresin
bo-oleana es vercladera,
," Lj".utu
cuerpo del bucle, despus de lo cual se evala de nuevo la
"t
expresin booleana."rton"".,
Erte pro.es se repite una \. otra
mientras la expresin booreana (condicinj sea verdadera.
'ez

Ejemplo 4.16
contar los ntitneros enteros positivos introducidos por teclado.
se consideran
NWEFo -r' CCI'--r-ll?' (cotttar el nmero de enteros positivos).

clos variables enteras


Se supone que se leen nmeros

posifit'os y se detiene er bucre cuando se lee un nmero'negativo


o cero.
aTgoritmo

var

t-

Introduccin a la programacn

inicio
contador <-Zeer (numero

estructurada 121

0
)

mientras numero 2 0 hacer


contador <- contador + 1
feer (numero)
fin_mientras
escribir(, 'EI numero de enteros positivos es , contadorl
fin
LnLcLo

contador eJeer

numero

mientras numero >

contador <- contador +

leer

numero

escribir

( numeros en-leros , contador)

fin
La secuencia de las acciones de este algoritmo

Faso
1
2
3
4
5
6
7

:Pseudocdigo

se

puede reflejar en el siguiente pseudocdigo:

ignificado

contador <- O

inicializar contador a 0

(mrmero)
mientras numero > 0 hacer

leer primer nmero

l-eer

comprobar si nmero > 0


si es as, continuar con el paso 4, si no, continuar con
el paso 7

contador <- contador + 1

incrementar contador

Jeer(il-mero)
fin_mientras
escribir(contador)

leer siguiente nmero

seguir con el paso 3


yisualizar resultados

Obsrvese que los pasos 3 a 6 se ejecutarn mientras los nmeros de entrada sean positivos.
Cuando se lea -15 (despus de 4 pasos), la expresin numero > 0 produce un resultado falso y se
transfiere el control a la accin escribir y el valor del contador ser 4.

Ejecucin de un bucle cero veces


Obsrvese que en una estructura mientras la primera cosa que sucede es 1a evaluacin de la
expresin booleana; si se evala/a/sa en ese punto, entonces el cueryo del bucle nunca se ejecuti.

122

Fu nda

mentos de prog

ra

maci n

Puede parecer intil ejecutar el cuelpo del bucle cero veces, ya que no tendr efecto en ningn valor
o salida. Sin embargo, a veces es Ia accin deseada.

inicio
nr-5
s<-0
mientrasn<=4hacer

:':'J'. ,

fin_mientras

fin
n

En el ejemplo anterior se puede apreciar que nunca se cumplir la condicin (expresin booleana
4), por lo cual se ejecuta.r laaccin fin y no se ejecutar ninguna accin del bucle.

<=

Ejemplo 4.17
El siguiente bucle no se ejecutar si el primer nmero ledo es negativo o cero.

c<*0
J

eer ( numero

mient.ras numero > 0 hacer

C(-C+1
-7.

eer ( numero

fin_mientras
Bucles infinitos
Algunos bucles no exigen fin y otros no encuentran el fin por error en su diseo. Por ejemplo, un sistema de reservas de lneas areas puede repetir un bucie que permita ai usuario aadir o borrar reservas. EI programa y el bucle coffen siempre, o al menos hasta que la computadora se apaga. En otras
ocasiones un bucle no se termina nunca porque nunca se cumple la condicin.
U-u Luslg q_ue nunca se termina se denomina bucle inJinito o sin Jin. Los bucles sin fin no
intenqionados son pijudiialespara lgrogramcin y se deben er;iiar siempr.e.
Consideremos el siguiente bucle que visualiza el inters producido por un capital a las tasas de
inters comprendidas en el rango desde I0 aZO por 100.
7arl---ir-l

-,asa <-

10

mie!.tras Lasa <> 20 hacer


r:,-..'=..s (- tasa * 0.01 * capital
//tasa
escribiri interes producido , int.eres)

,r;-;r.i.,"="u

escribir

-'

:::.lnuacion'

Los sucesivos r.alores de la tasa sern 10, 12, 14, 16, 18, 20, de rnodo que al tomar taso elvalor
20 se cietendr e1 bucle y se escribir el mensaie .continuacin,.
Supongamos que se cambia la lnea ltima del bucle por

El problema es que el r'alor de la tasa salta ahora de 19 a 22 y nunca ser igual a 20 (10, 13, 16,
19' 22,...). El bucle sea innito, 1a expresin booleana que permite terminaial bucle ser:

tasa <

20

o bien

tasa >=

20

lntroduccin a la programacin estructurada

-..1-23

Regla prdctica: Las pruebas o tests en las expresiones booleanas es conveniente que sean
mayor o menor que enlugar de pruebas de igualdad o desigualdad.En el caso dela codificacin en
un lenguaje de programacin, esta regla debe seguirse rgidamente en el caso de comparacin de
nmeros reales, ya que como esos valores se almacenan en cantidades aproximadas 1as comparaciones de igualdad de valores reales normalmente plantean problemas. Siempre que realice comparaciones de nmeros reales, use las relaciones (, (=, > o >=.

Terminacin de bucles con datos de entrada


qlgo.ll!_o_o-Brograma est leyendo una lista de valores con un bucle mientras, se debe
iclilgun tipo de mecanismo para terminar e1 bucle. Existen cuatro mtodos tpicos para terminar un bucle de entrada:

SUI

1. preguntar antes de la iteracin,

2.

'''-

encabezar la lista de datos con su tamao,

, 3. ftnaltzar la lista con su valor de entrada,


.4. agotar 1os datos de entrada.

Examinmoslos por orden.


El primer mtodo simplemente solicita con un mensaje al usuario si existen ms entradas.

Sud+0
escribirt, Existen mas numeros en la lista s/n
Leer(Resp) //variabte Resp, tipo caracter
mienras(Resp = S ) o (Resp -'s' ) hacer
escribir( numero

f eer (l'l)
Suma <- Suma

+N
escribir( Existen mas nume::os (s/n)
Leer ( Resp

fin_mientras
Este mtodo a veces es aceptable y es muy ti1 en ciertas ocasiones, p_e1g sgqle ser teoso para
llqtas grades; en este caso, es preferible incluir una seal de parada'
El mtodo de conocer en la cabecera del bucle el tamao o el nmero de iteraciones ya ha sido
visto en ejemplos anteriores.
Talvez el mtodo ms coffecto para terminar un bucle que lee una lista de valores es con vn centinela.rJnyalor centinela es un valor especial usado para indicar el final de una lista de datos. Por
ejemplo, supongamos que se tienen unas calificaciones de unos tests (cada calificacin comprendida entre 0 y 100); un valor centinela en esta lista puede ser -999, ya que nunca ser una calificacin
vlida y cuando aparezca este valor se terminar el bucle. Si la lista de datos son nmeros positivos,
un valor centinela puede ser un nmero negativo que indique el final de la lista. El siguiente ejemplo
real:zal4suma de todos los nmeros positivos introducidos desde el terminal.
suma

<-

-7.eer (numero l

mientras nurerc >= C hacer


suma (- su:ra + nuaero
Ier ( rrrmero

fin mientras

124

Fundamentos de programacin

Obsrvese que el ltimo nmero ledo de la lista no se aade a la suma si es negativo, ya que se
sale fuera del bucle. Si se desea sumar los nmeros L,2,3,4 y 5 con el bucle antedor, el usuario
debe introducir, por ejemplo:

,1

el valor final -1 se lee, pero no se aade a la suma. Ntese tambin que cuando se usa un valor centinela se invierte el orden de las instrucciones de lectura y suma con un valor centinela, ste debe
leerse al final del bucle, por 1o que se debe poner la instruccin leer al final del mismo.
El ltimo mtodo de agotamiento de datos de entrada es comprobar simplemente que no existen
ms datos de entrada. Este sistema suele depender del tipo de lenguaje; por ejemplo, Pascal puede
detectar el final de una lnea; en los archivos secuenciales se puede detectar el fin fsico de archivo

(eod end of file).


Ejemplo 4.18

Considerqr los siguientes algorimos. Qu visualizar y cuntas veces se ejecuta el bucle?


1. :- <- o

mientrasi<6hacer
escribir (t)
i<-i+1
fin mientras

La salida es el valor de 1a variable de control I al pnncipio de cada ejecucin del cuerpo del
bucle: 0, 1,2,3,4y 5.Elbucle se ejecuta seis veces.

2.i<-a

mientrasi<6hacer
i<-i+1
escribir li)
fin_mientras
La salida ser entonce s 1,2,3, 4, 5 y 6. El cuerpo del bucle

se ejecuta tambin seis veces.


Obsrvese que cuando i = 5,la expresin booleana es verdadera y el cuerpo del bucle se
ejecuta; con i = 6 la sentencia escribir se ejecuta, pero a continuacin se evala la expresin booleana y se termina el bucle.

Eiemplo 4.19
Calcular la media de un conjunto de notas de alumnos. Pondremos un valor centinela de -99 que

derecte el -fin del bucle.

iaicio
e

'aumero de alumnos
:- + ,
-7.eer :: -=
_a primera nota debe ser distinta
mientras ---:-_t <> 99 hacer
-

- -d

tl<-t:1 aa

fin_mientras
r.ei a e ,--'
:egcribir\
-a ::.ecra :s , :--ejra)
fin

de

99

I
i

lntroduccin a la programacin

es!..c:--:= l?s

Obsrvese que total, ny media se inicializan a cero antes de la instruccinmia-t.ras


Cuando el bucle termina, la variable totaf contiene la suma de todas las notas y. por
consigulr-te totaf,/n, siendo n el nmero de alumnos, ser la media de la clase.

4.6.2. Estructura

repetir

"

repeat',

Existen muchas situaciones en las que se desea que un bucle se ejecute al menos una vez
antes de
comprobar la condicin de repeticin. En la estructura mientras si el valor de la expresin
booleana es inicialmente falso, el cuelpo del bucle no se ejecutar; por ello, se necesitan
otros tipos de

estructuras repetitivas.

Pseudocdigo
repetir
<acciones

repeat
>

<

acci ones>

do until <condicion>
< a cci ones>

.- <condtcfon>

--

hasta_que <condi ciort>

unE,LJ-

end do

a) castellano

) ingls

c) ingls

Diagrama

de

flujo

Diagrama N-S
accrones

repetr condiciones

Figura 4.12' Estructura

reperir: pseudocdigo, diagrama de flujo, diagrama

N-s.

La estructura repetir (repeat ) se ejecuta hasta que se cumpla una condicin determinada
que se comprueba al final del bucle.
El bucle repetir-hasta-que se repite mientras el valor de la expresin booleana
de la condicin seafalsa,justo la opuesta de la sentencia mientras.

aTgoritmo peperir
var

real: numero
entero: contador
inicio
contador <- 1
repetir
J.

eer

nume

ro

contador <- contador +


hasta_que contador > 30

escribirl 'Numeros leidos 30


fin

ol

126

Fundamentos de programacin

En el ejemplo anterior, el bucle se repite hasta que el valor de la variabl e contadorexceda


a 30,
-lo que
suceder despus
de 30 ejecuciones del cuerpo del bucle.

Ejemplo 4.20
Desarrollar el algoritmo necesario para calcular
mula:

N/

=N (N- 1)' (N-2),..., 3. 2. I

El

aTgori tmo correspondiente

el

factorial de un nmero N que responda a lafr-

es:

algoritmo Factorial

var

entero: I, N
real: Factorial
inicio
//N >= 0
-leer

(N)

Factorial <- 1
r<-1
repetir
Factorial (- Factorial * I
I<-T+1
hasta_queI=N+1
ecribirl El factorial del numero ,
fin

N,

repetir e1 cuerpo del bucle se ejeua siempre al menos una yez. Cuando
repetr se ejecuta, lo primero que sucede es ia ejecucin del Uuct" y,'a-.o-n

Con una estructura


-:t1!-Q--13stryc-9in

tinuacin, se evala la expresin booleanresultanie de la condicia.-Sise qv_ala


como"falsa,,el
cuelpo del bucle se repite y 1a expresin booleana se evaia unu r.r.b.rpus de
cada iteracinel
cuelpo del bucle, la expresin booleana se evala; s es verdctdera, el bucle termina y
-- programa
J el
r'
sigue en la siguiente instruccin a hasta_que.

Diferencias de las estructuras

'
o

mientras y repetir

La estructura mientras termina cuando la condicin es falsa, mientras que repetir


termina cuando la condicin es verdadera.
En 1a estructura repetir el cuerpo del bucle se ejecuta siempre al menos
una vez; por el
contrario, mientras es ms general y permite la posibilidad e que el
bucle pueda no ser
ejecutado. Para usar la estructura repetir debe istar seguro de que
el cuerpo del bucle
cualquier circunstancia- se repetir al menos unu u".r.

-bajo

Ejemplo 4.21
Enco,ntrar el entero positit'o mayor (num) para el cual la suma
igual que lmite.
2. Ilicta
:zaa -:-.^-: :- _.--:a a 0.
J. Repeat: ,as a:c:::::s
::guientes
...: L.- _,
. inc..:s_..cr
. aadir ui.t a .<tra
-

+2

hasta glle sulxa > limite:

+3

+ ... + num

es menor o

lntroduccin a la programacin

estructurada

127

4. Restar nun a suma y decremenLar jlum


en 1.
5. Visualizar
num y suma.
El pseudocdigo de este algoritmo
es:

aTgoritmo

/d

var

sJ-queno

entero: num, limite,


inicio
Leer ( I imi te
num _ 0
suma - 0

suma

repetir
num (_ num + 1
suma l- suma + nutn
hast.a_que suma > limite
suma (- suma _ num
num c- num L
escribir (.num, suma)
fin
Eiemplo 4.22
Escribir los nmeros

a 100.

aTgoritmo Uno_cien

var

num: entero

inicio

num (_ 1
repetir
escrjbir num)
num (_ num + 1
hast.a*que num = 101
fin
(

Ejemplo 4.23
Es muy frecuente tener que realizar y,aliclacin
de entrqda de datos en la mayora
de las aplicacio_
nes. Este ejemplo detecta cualquier
entrada c:omprenclicla entre I y 12, rechazqndo
las resantes, ytt
que se ftafq de leer los nmeros
correspondien.tes a los meses d.el
ao,

aLgoritmo Va1idar_mes

var

enterc:
inicio
escribir
repet.ir
Jeer

mes
(.'

(mes

fntroducir numero de mes

si (mes < 1) o (mes > 12) entonce


escribir( Valor entre l Y12)
fin_si
hast.a_que (mes >= 1) y (mes <=
12)
fin

Este sistema es conocido como interactivo


porentablar un <<crirogo imaginario,,

128

Fundamentos de programacin

4.6.3. Estructura desde/para (" for " )


En muchas ocasiones se conoce de antemano el nmero de veces que se deseanejecutar las acciones
de un brlcle. En estos casos en los que el nmero de iteraciones es fijo, se debe usar la estlxctura

desde o para (f or. en inglsl.


La estructura desde ejecuta las acciones del cuerpo del bucle un nmero especificado

de

vece y de modo automtico controla el nmero de iteraciones o pasos a trvs del cuerpo del bqqlq
- Las heramientas de programacin de la estructura desde o para se muestran a continuacin:

desde v (- vi hasta vf [incremento


decremento < vafor> I hacer

para v <- vi hasta vf lincrementol

fin desde
v, variable indice
vi, vf: vafores inlcial y final de la variab'e
a) modelo I

finl>ara

decremento<va7or>] hacer

a) modelo 2

Diagrama N-5, estructura desde


desde v (- vi haata vf

Iincrenentc

Cecremento <valor> hacer

<acclones>

fin desde
b) modelo 3

Diagrama

de

flujo estructura desde


calcular

valor inicial
y valor final

fijar

la

variable ndice
al valor inicial
verdadero
ndice > valor
cuerpo del bucle

incrementa r

variable ndice
Figura 4.13. Estructura cesde

(:or):

c) modelo 4

a) pseudocdigo; b) diagrama N-S; c) diagrama de flujo.

lntroduccin a la programacin

Otras representaciones de estructuras repettvas desde/para

tt

1A

for)

{fo-r) se.r,epqgs_qnta con los smbolos {"_p1qgq"rq: de {ecisin_mgdianteun con


tdpr. As, por ejemplo, en el caso de un bucle de lectura de cincuenta nilneros parafratar de calcular
su suma:
Ualupledese-

inicializacin
del contador

proceso o accrones
del bucle

l<- l+

Es posible representar el bucle con smbolos propios:

o bien mediante este otro smbolo:

repetir
variable =
m1, m2, m3
mL
m2

= contador inicial
= contador final

m3=incrementoopaso

unda

mentos de Prog

ra

macin

Como aplicacin, calcular la suma de

1os

N primeros erlteros.

i<-l+1
escribir
'Suma ='.S

Se-S+l

equivale a

algoritmo

S.tma

var

entero: T, N, S
inicio
s<-0
desdel(-lhastaNhacer
S<-S+I
fin_desde

escribir(
fin

Suma

-',

S)

La estructura desde comienza con un valor inicial de la variable ndice y las acciones especificads- se ejecutan a menos que el valor inicial sea mayor que el valor final. La variable ndice se
incrementaln uno y si este nuevo valor no excede al final, se eiecutan de nuevo las acciones. Por
consiguiente, las acciones especficas en el bucle se ejecutan para cada valor de la variable ndice
desde el valor inicial hasta el valor final con el incremento de uno en uno.
El incremento de la variable ndice siempre es 1 si no se indica expresamente 1o contrario.
Dependiendo del tipo de lenguaje, es posible que el incremento sea distinto de uno, positivo o negarir o. -ts. por ejemplo, BASIC y FORTRAN admiten diferentes valores positivos o negativos del
increment. r- ur.ul slo admite incrementos cuyo tamao es la unidad: bien positivos, bien negativo>.
La r anable ndice o de control nomalmente ser de tipo entero y es notmal emplear como nombre s las

letrai -.

.'-. K.

El lomtato ,le la estructura desde vara si

se desea un incremento distinto a

bien nesativo decremento).


(

hasta

d.esde

f in_de

ile

: inc I dec paso hacer

/ /inc, rncremento
/ /dec, clecremento

I, bien positivo,

lntroduccin a la programacin est.ructurada 131

el valor inicial de la variable ndice es menor que el valor l-rnal. ltrs


incremenros deben ser
.Si
positivos, ya que en caso conrario la secuencia de aciones no
se ejecutana. De igual rnodo. si e1
valor inicial es mayor que el valor final, el incremento debe ser
en est; caso negarir o" es ileci. /czmento. Alincremento se le suele denominar tambin paso (, ' step
. en inlles,.
Es decir.

desde i e 20 hasta 10 hacer


<

accl ones>

fin_desde
no se. ejecutara, ya que el valor iniciat es 2 0 y el valor final 10, y como
se supone un incremenrtr
positivo, de valor 1, se producira un error.
El p s eudoc digo correcto debera ser:

desde i + 20 hasta 10 decremento t hacer


<

accr ones>

fin-desde
Realizacin de una estructura desde con estructura

mientras

Es posible, como ya se ha. mencionado en apartados anteriores, sustituir


una estructura
mientras; en las lneas siguientes se indican dos formas para ello:

una

l.

desde por

Estrwcfura desde con incrementos de lavariable nclice positivos.

v<-vi
mientras v <= vf hacer
<a

cci otes>

v*v+incremento
fin_mientras

. 2. Estructura desde

con incrementos de lq variable ndice negativos.

V EVI
mientras v >= vf hacer
<acci ones>
v(-v-decremento
fin_mientras

La estructura desde puede realizarse con algoritmos basados en estructura

repetir,
a

desde
u)

mientras

por lo que pueden ser intercambiables cuando as lo desee


Las estructuras equivalentes
son las siguientes:

L)acao

r <-n
mientrasi>0hacer
<acci ones>

i<-i
7
fin_mientras
fin

b) ir.icio
i<-1
mientrasi<=nhacer
<acci oes>

ie-i+1

f in_mient.ras

fin

132

Fundamentos de programacin

c) inicio
ieO
repetir
<acciones>
i<-i+1
hasta_quei=n
fn

d) inic:-o
i<-1
rpetir

e) inicio
i n
repetir
<acciones>
i+-i
1
hasta_quei=1
fin

y' inicio
- <-n
repetir

<acciones>

i<-i+l
hasta_quei>n
fin

<acciones>

:ri
1
hasta_quei<1
fin

4.6.4, Salidas internas de los bucles


Aunque no se incluye dentro de las estructuras bsicas de la programacin estructurada, en ocasiones es
necesario disponer de una estructura repetitiva que permita la salida en un punto intermedio del bucle
cuando se cumpla una condicin. Esta nueva estructura slo est disponible en algunos lenguajes de programacin especficos; la denominaremos salir o iterar para diferenciarla de repetir_hasta
ya conocida. Las salidas de bucles suelen ser vlidas en estructuras mientras. repetsir y desde.
El formato de la estructura es:

repetir
<

acci oes>

s <condiclon> entoncea
salir_buc1e
fin si
<acciones>

fin_repetir

En general, la instruccin

salir

no produce un programa legible y comprensible como 1o hacen


para esta ausencia de claridad es que la salida de un bucle ocurre en el medio del bucle, mientras que normalmente la salida del bucle es al principio o al final del
mismo. Le recomendamos que no recuffa a esta opcin
la tenga su lenguaje- ms que
-aunque
cuando no exista otra alternativa o disponga de la estructura
iterar (loop).

mientras

repetir.Larazn

Ejemplo 4.24
L'na aplicacin de un posible uso de la instruccin salir se puede dar cuando se incluyen mensajes
peticin en el algoritmo para la introduccin sucesiya de informaciones.

de

ATgorito 1l-eer::-:::.=-^:-:
repetir
:: '.:..'^:..-:,-:
Teer iniorr,ac:c:
hasta_que fi:: ce ::-:=
(,

ALgioritmo

Teer(,informacion)

mientras_no fin de lectura

ptacesoj infotnacio
l_eer ( inf ormacion)
fin_mientras

En los algoritmos anteriores cada entrada (lectura) de informacin va acompaada de su corespondiente proceso, pero la primera lectura est fuera del bucle. Se pueden incluir en el interior del

lntroduccin a la programacin

bucle todas las lecturas de informacin si se posee una estructura


ello es la estn-rctura siguiente:

estrc:-'=:

133

salir (exit ). Un:i::-:-: ::

repetir
Teert intar-1dc.a'

si fin de lectura entoncs


salir bucle
fin_si
pt acesal intotma'ion
fin_repetir
Ejemplo 4.25 (Bucle controlado por centnela)
Algoritmo para calcular el salario de una serie de trabajadores, cuyos datos sern introducidos por
teclado. Subiendo que las horas normales se pagan a 2.000 pts. y las extraordinarias a 2.500 mientras no excedan de 10. Si las horas extreordinarias sobrepasaran los 10, el exceso se pagara ct 2.350.
La introduccin de datos terminard cuando se escriba'*' como nombre para un trabajador.
aTgori tmo Calcular-salario

var
cadena : nombre

real

: hnormales, hextraordinarias, salario

inicio
escribir(.'Deme nombre (" para f in) i)
Leer ( nombre

mientras nombre <> * hacer


esctibir( Deme no de horas normales
-Ieer ( hnormales
escribir( Deme no de hor:as extraordinarias
-7.eer ( hextraordinarias
salario <- hnormales * 2000
si hextraordinarias <= 10 entonces
salario <- salario + hextraordinarias +
)

2500

si_no

salario <- salario + 10 * 2500+'(hextraordinarias - 10) * 2350


fin si
escribit( nombre, salario)
escribir\ 'Deme nombre (* para fin)
leer (nombre
fin_mientras
fin

Ejemplo 4.26 (Bucle controlado por bandera)


Algoritmo que nos determine si un nmero entero ledo de teclado es o no primo. Un nmero

es

compuesto en cuanto que tiene algn divisor distinto de s mismo o la unidad.


Vamos probando con todos los divisores posibles del nmero (2 a n div 2) y en cuanto que detectemos un divisor ya podremos decir que no es primo.

aTgoritmo

s_o_nojr

var

entero : n,divisor
logrico : primo

jmo

134

Fundamentos de programacin

inicio
escribit(
-l

eer

(n

Deme numero

primo <- verdad

dvisor <-

/ / le vartable primo controla el bucle


mientras (divisor <= n div 2) y primo hacer
si n MOD divisor = 0 entonces
primo +- falso

si_no

divisor <- divisor + 'l


fin si
fin_mientras
si primo entonces / / La variable primo pasa informacrc:
/ / oLra parte del programa
escribirl n, ' es primo
)

si_no

escribir( n, '
fin_si
fn

es

divisibLe por , divisor)

Ejemnlo 4.27 lBucle controlado por contador)


t

'

Algoritmo que nos pide la introduccin por teclado de las notas de una clase
colcula el tanto por cienfo dc suspensos.
a7

gor

i tmo

de 40 alumnos t, nos

Tanto__por_c i ento

entero : contalumnos, contsuspensos


real
: tantoporciento, n
inicio
contalumnos (- 1
contsuspensos +* 0
mientras contalumnos <= 40 fracer
escribir( 'Alumno , contalumnos,'-

Deme

nota

7-l1

sin<5entonces
contsuspensos <- contsuspensos +

fin si

::::a_!umnos <- contalumnos +

i!._mientras

_::,-_:l:::::tento <- contsuspensos * 100 / 40


:i tanto por ciento de suspensos
=:::.a..
fin

es

tantoporciento

Ejemplo 4.28 (Bucle mienrras: se puede eecutar de 0 a N veces)


Algoritmo para desconlponer
r

1:7"r
e'teIO

r*" r. s : :r-_: ' :-=l


: -,

:l -.
c:-.--s::

Ltn

nmero entero, ledo de teclqdo, en

sus factores

primos.

tntrodueinabalqrurwiitcd
nicio
escribit('Deme un numero ')
eer(n)
escribirt Su descomposicion en factores primos es : 1
divisor <- 2
mientraan>lhacer
si n mod divisor = 0 enLonces
escribir (divisor)
n +- n div divisor
si-no
divisor <- di'isor + 1
fin-si
fif-mientras
esctibir |
fin

135

Ejemplo 4.29
pseud.ociligo que lea

Lrn

nmero entero positivo y lo escriba invertido.

aTqotitmo -n-.er:j r
var

entero :

re

to

ecribirl'Deme numero' )
leer (n)

..r.

'. -'

mientrasn>0hacer
resto <- n mod 10
escribir ( resto
n<-ndiv10
fin-mientras
)

fin
Ejemplo 4.30
Dado un capital C, que se coloca a un inters
blar.
aTqot

var

anualt averi|uar

al cabo de cuntos aos se do-

i no Cal cul ar-capi tal

: cinicial,c,i
real
entero : aos
inicio
escribir('Deme capital ' )
-leer (cinicial )
c e- cinicial
aos <- 0
escribit( Deme interes anual en %')
Teer (i)
rePetir
-+..1e*iu100
aos (- aos + L
hasta-que c >= 2 * cinicial
escribir('Para duplicar el capital se necesitan '' aos'' aos')
fin

136

Fundamentos de programacin

Ejemplo 4.31
Dado que elvalor de e ^ x (e')

se

puede aproximar por la suma

I + x + x^ 2 /2! + x^ 3 / 3! + ............ + x^n/n!


xy calcule e ^ x (e'), mediante el mtodo expuesto y
empleando los trminos necesarios hasta que x n / n! sea menor que 0.01.
^
escribir un algoritmo que tome unvalor de
aTgoritmo E_elevado a x

var

entero : x, i
real
: e,num,den

inicio
escribir( 'Dame el valor de x ')
leer( x)
e(-1
num (- 1
den <- I
i<-1
repetir
num<-x*num
den <- den * i
i<-i+1
e<-e+num/den
hast.a_que (num / den) < 0.01
escribir( e elevado d', X, 'es',
fin
Ejemplo

e)
'

4.32

Algoritmo que lea da, mes y ao, as como el da de la semana que fue el I de enero de dicho ao
y nos sqque por pantalla el da de la semana que corresponde a lafechq que le hemos dado.
Deben considerarse los aos bisiestos y depurar mes y da.

.,

aTgoritmo Dia_semana

var
enlero : dd, mm, aa, conrr, otoral,
caraccer : dia
logico
: correcta, bisiesto
.

..

d1

inisiq
repetir
/ /comienzo de repetir
bj-siesto <- f also
correcta <- verdad
]eer(dd, nrm, aa)
si (aa rOD 4 = 0) y (aa
bisiesto <- verdad
fin_si

MOD

.\
+

\
,r

_1'
\.

n'

. ...

''

100 <> 0) O (aa MOD 400 = 0) entonces

geguu_sea rmn hacer

1, 3, 5, 6, 8, 10, 12:
si dd > 31 extoD.ces
correcta <- falso
fin_ei

_lt

:,
:,

),

lntroduc:cin a la

4, 7, 9, LL:
si dd > 30 entonce
correcta <- tarsj
fin_si

f,

')

*t

'..,

prqnm**in efir

si bisiesto entonces
Ei dd > 29 entonceE
co-rect.

fin_si

1 L
-

F-t-a5u
rdf

\\

si_no

,'.
I L

si dd > 28 entonces
co'recta <- f a-Lso
fin_si
fin_ei
si_no

correcta e- falso
fin_segun
haeta_que correcla

dtotal <-

/z

fin de repecir

desde contm (- t hast.a

mm

- t hacer

//comienzo desde

egun_e contm hacer

L,

, 5, 6, 8, LA, L2:
r 31

dtocaL <- dlolal


/

11.

dtotal <- dtotal +

30

2:

ei bisiesto entonces
dcotal (- dtoLal t

29

si_rio

dtotal <- dtotal +


fin_si

28

fin_segun
fin_desde

dtotal <- dtotal + dd


escribir( Deme dia de la semana que fue e1 1 de
.leerrdia)
segun_sea dia hacer
t:
d-e0
,m,:

dl e1
'x' :
d7<-2
,j,:
d1 e3
dL<-4
d1 e5
d:
dl <-6
f

in-eeg.un

ENERO

(l/m/x/j/v/s/d)

138

Fundamentos de programacin

dtotal <- dtotal


segun_sea dtotal

+ d1
mod.

7 hacer

1:

escribirl

'Lunes')

2:

escribir( Martes')
3:

escribir( Miercoles'

4:

escribir('Jueves
5:

escribirl 'Viernes')

6:

escribir(

Sabacto

0;

escribir( Dominqo

fin_segun

fin

4.7. ESTRUCTURAS DE DECISIN ANIDADAS


as estructuras de seleccin si-entonces y si-enEonces-si-no implican la seleccin de
una de dos alternativas. Es posible tambin utilizar la instruccin si para disear estructuras de

seleccin que contengan ms de dos alternativas. Por ejemplo, una estructura

si-entonces

puede contener otra estructura si-entonces, y esta estructura si-entonces puede contener
otra, y as sucesivamente cualquier nmero de veces; a su vez, dentro de cada estructura pueden existir diferentes acciones.
s condlciolll

entonces

s condicion2 entonces

Las estructuras

si

interiores a otras estructuras

si

se denominan anidadas o encajadcts:

si :::C:cionl entonces
si ;::c-icion2 entonces

fi-._s i

fio si

Una estructura de seleccin de z alternativas o de decisin mltiple puede ser construida utilizando una estructura s con este formato:

s condicon-i entonces
<acciones>

lntroduccin a la programacin

estructurada

139

si_no

a condicion2 entonces
<acciones>

si_no

si condicion3 entonces
<acc

si-no

iones>

fin_si
fin_si
fin_si
Una estructura selectiva mltiple constar de una serie de estructuras
si, unas interiores a
otras' Como las estructuras si pueden volverse bastante complejas para
que el algoritmo sea claro.
ser prcciso utilizat indentacin (sangra o sangrado), de mod qe
exlsta uru
entre
las palabras reservadas si y f
por unlado, y eotoncls y si_no, "oorpondencia
por otro.
La escritura de las estructuas puede variar de uns lenguaj", u ot
or, por ejemplo, una estructura
si admite tambin los siguientes formatos;

in-si,

si expresjon boofeanal entorrces


<acc iones>

si_no

si expreson boofeana2 er.tonces


<

ac

ione s>

si_no

si expreson booLeana3 ntonces


<

acci ones>

s_no
<acciones>

fin_si
fin_si
fin_si
o bien:

si expresjon boofeanal entonces


<acciones>

si*no si expresion boofeana2 entonces


<a

cci ones>

fin_si

fin_si
Ejemplo 4.33
Disear un algoritmo que lea fres nmeros A,
Se supone que los tres valores son dferentes.

B, C

y visualice en pantallq el valor clel mts grande.

Los tres nmeros son A, B y C; para calcular el ms grande


se realizarn comparaciones sucesi_
vas por parejas.

140

Fundamentos de Programacn

algoritmo

MaYoY

var

real: A, B, C, Mayor
inicio
leer(A, B, C)
eiA>Bentonces
eiA>Centonces
Mayor-A
si-no
Mayor<-C
fin_si

//A>B,A>C
//C>=A>B

si_no

siB>Cento[ces
Mayor <- B
si-no
Mayor(-C
fin-si
fin-si
escribit('MaYor:,
fin

//B >= A, B '

//C>=B>=A
Mayor)

Ejemplo 4.34
y
El siguiente algoritmo lee fres nmeros diftrentes, A B -.t' C, e imprime los valores miximo mnimo'
nmeros.
parejas
de
de
sucesi'as
en
comparaciones
consistir
l proc"dlmiento

aTgoritmo Ordenar

var

real : a,b,c
inico
escribir( 'Deme 3 numeros'
leer(a, b, c)
// consderamos 1os Ccs c:l::ei:os (a' b)
si a > b entonces
y los ordenamos
// LotLo e} 30 (c) y -o :o::-lar:o con ef menor (a o
si b > c entonces
escribit\a, b, c)
si-no
si c > a entonces / / sl eL 3o es mayor qte enenor averiguo si va
// delante o detras de1 :--aYor
escribirlc, a, b)
si-no
escribir(a, c, b)
fin-si
fin_ei
)

si_oo

sia>centonceg
escribir\b, a, c)
ei-no
si3>bentonces
escribirlc, b, a)
si-oo
c, a)
escribi\t,
fin-si
fin-si
fin_si
fin

b)

lntroduccin a la programacin

estructurada

141

Ejemplo 4.35
grado' incluPseudocdigo que nos permita cctlcular las soluciones de una ecuacin de segundo
yendo los valores imaginarios.
al-gotiLmo

var

So-

iones-ecuac -on

real : a,b,c,d,xI,x2,r,t
inicio
esctibir( Deme los coeficientes
l.eer(a, b, c)
sia=0entonces
escribit( No es ecuacion de seg:ndo grado
si-no
4*a*c
d<-b*b
sid=0entonces
x1 <--b/12"a)
x2 <- xL
esctibir(xL,x2)
si-no
sid>0entonces
x"l <- ( b + raiz2(d) ) / (2 * a)
x2 <- (-b - ra22 (d) ) / 12 * a)
esctibirlxL, x2)
si-no
r<-(b)/(2*a)
i <- a22 (abs (d) ) / (2 * a)
escribirlr,*,t,i)
- , i,'i')
esctibir(,t,
fin-si
fin_si
fin_si
fin
)

Elemplo 4.36
Algoritmo al

qwe le demos

la hora HH, MM, SS y nos calcule la hora dentro de wt segundo' I'ee-

remos las horas minutos y segundos como nmeros enteros'


aL

gor

var

i tmo Hora-s

eglundo-s i gui ente

entero : hh,mm,ss
inicio
escribir( Deme hh,mm,ss
Leer(hh, mm, ss)
si (hh < 24) Y (mm < 60) Y (ss < 60) entonces
ss <- ss + 1
si ss = 60 entonces
ss <- 0
mm <- n'l,'n + 1
si mm = 60 entonces
mm<-0
hh<-hh+1
si hh = 24 entonces
hhe0
fin-si
fin_si
fin_si
escribir(hh, ': , mn, ':', ss)
fin-si
fin
)

142

Fundamentos de programacin

4.8. ESTRUCTURAS REPETITIVAS ANIDADAS


De igual forma que se pueden anidar o encajar estructuras de seleccin,
es posible insertar un

bucle dentro de otro. Las reglas para construir estructuras repetitivas


anidadas son iguales en ambos
casos: la estructura interna debe estar incluida totalmente dentro
de la extema y no puede existir solapamiento. La representacin grfica se indica en la Figura
4.14.

a)

b)

c)

d)

Figura 4.14. Bucles anidados: a) y b), correctos; c) y d), incorrectos.


Las variables ndices o de control de los bucles toman valores
de modo tal que por cada valor de
la variable ndice del ciclo extemo se debe ejecutar totalmente
el bucle interno.
Es posible anidar cualquier tipo de estruciura repetitiva
con tal que cumpla las condiciones de la
Figura 4.14.

Ejemplo 4.37
Se conoce la poblacin de cada una de las veinticinco
ciudades mds grandes de las ocho provincias
de Andaluca y se desea identificar y visualizar la poblacin
de la ciudqd mds grande de cacla proyincia.

El problema consistir, en primer lugar, en la obtencin de la poblacin


mayor de cada provincia v realizar esta operacin ocho ,"".r, unu para cada provincia.

,.'isualizar la ciudad mayor de una provincia.


p:so 1 para cada una de 1as ocho provincias andaluzas.
El procedimiento para deducir la ciudad ms grande de entre
las veinticinco de una provincia se
consigue creando una variable auxiliar MAyoR inicialmente
de valor 0- que ," ,u *pururdo
sucesivamente con los veinticinco valores de cada ciudad,
de modo tal que, segn el resultado de
comparacin, se intercambian valores de la ciudad por el
e la variable MAyoR.

lntrdtwin

b rynmacin

uclurada

143

El algoritmo correspondiente sera:


aTqoriTmo

CIUDADMAYOR

var

/ /conlador de provincias
/ /conLador de ciudades
/ /mayor poblacion

entero: r
_'i

urruu!vr
^-l^-^.

entero: MAYOR
. entero: CIUDAD
//poblacion de una ciudad
inicio
ie1
mientrasi<=Shacer
MAYOR <j <-1
mientras j <= 25 hacer
O

-7.eer(CIUDAD)

Si

> MAYOR ENTONCES


E CIUDAD
j <- j + 1
fin_ei
fin_mientras
escribir( 'La mayor poblacion tiene',
i<-i+1
fin_mientras
fin
CIUDAD

MAYOR

MAYOR)

Ejemplo 4.38
Calcular

el

factorial de n nmeros ledos del terminal.

El problema consistir enrealiza una estructura repetitiva de n iteraciones del algoritmo del problema ya conocido del clculo del factorial de un entero.
aTgoritmo Factorial2

var

entero: i, NUMERO, n
real: FACTORIAL
inicio
/ / LecL.ja de 1a cantidad de numeros
leer (n)
desde i <- I hasta n tracer
leer(NWERO)
FACTORTAL

<_

desde j e- I hasta

NUMERO

FACTORIAL <_ FACTORIAL

hacer

fin_desde

esribir( 'Ef factorial

del numero', NUMERO, es

fin_desde

fin

Ejemplo 4.39
F

I
t

Imprimir todos los nmeros primos entre 2 ), 100 inclusive.

aTgoritno Primos
var entero : i, divisor
logico : primo

,FACTORIAL)

144

Fundamentos de programacin

inicio

desde i (- 2 hasta 100 hacer


p''

O 4

Ve'

dC

divsor <- 2
mientras (divisor <= ratz2 (i) ) y cririo hacer
si i mod drvrsor = 0 entonces
primc <- falso
si no
divisor <- divisor + 1
fin_si
fin_mientras
si primo entonces
escribir( r, '
fin_si
)

fin_desde

fin

4.9. LA INSTRUCCIN ir-a

(<<sroro>>)

El flujo de control de un algoritmo es siempre secuencial. excepto cuando

1as estructuras de control


estudiadas anteriormente realizan transferencias de control no secueflciales.
La programacin estructurada permite realizar programas fciles y legibles utilizando 1as tres
estlxcturas ya conocidas: secuenciales, selectivas y repefitivas. Sin embargo, en ocasiones es necesario realizar bifurcaciones incondicionales; para ello se recure a la instruccin ir_a (goto).
Esta instruccin siempre ha sido problemtica y prestigiosos informticos, como Dijkstra, han
tachado la instruccin goto como nefasta y perjudicial para los programadores y recomiendan no
utilizarla en sus algoritmos y programas. Por ello, lenguajes como Pascal huyen de esta instruccin
y prcticamente no 1a utilizan nunca.
Aunque la instruccin ir_a (goto) la tienen todos 1os lenguajes de programacin en su
juego de instrucciones, existen algunos que dependen ms de ella que otros, como BASIC y FORTRAN. En general, no existe ninguna necesidad de utilizar instrucciones ir_a. Cualquier algoritmo o programa que se escriba con instrucciones ir_a se puede reescribir para hacer Io mismo y no
incluir ninguna instruccin ir*a. Un programa que utiliza muchas instrucciones ir_a es ms dif
cil de leer que un programa bien escrito que utiliza pocas o ninguna instruccin ir_a. En muy pocas
situaciones las instrucciones ir_a son tiles; talyez, las nicas razonables son diferentes tipos
de situaciones de salida de bucles. Cuando se encuentra un effor u otra condicin de terminacin,
una instruccin ir-a puede ser utilizada para saltar directamente al final de un bucle, subprograma
o un procedimiento completo.
Las bifurcaciones o saltos prodlcidos por una instruccin ir_a deben realizarse a instrucciones
que estn numeradas o posean una etiqueta que sirva de punto de referencia para el salto.
Por ejemplo. un programa puede ser diseado para terminar con una deteccin de un eror.

aTgoritfuo

si <cc:rc: a:- a'a'aai> entonces


ir_a(_::ll
fin_si
100 : fin

lntroduccn a la prqramacin

esfructurada 145

ACTIVIDADES DE PROGRAMACIN RESUELTAS


4.1. calcular

e1

factorial de un nmero N utilizando la estructura ces:=.

Recordemos que factorial de N responde a la frmula

N/ = . (N -r). (N

-2).

(N

-3)..... 3. Z.

El algoritmo desde supone conocer el nmero de iteraciones:


inicio
var
entero:I,N,1j:
real; FACTORIAL
inicio
// N >= 0
Jee.r (N)

.<- 1
desde I <- t hast.a N hacer
FACTORTAL <- FACTORIAL * I
fin_desde
escribir('EI
factoria]
de,, N,
FACTORIAL

fin

es,

FACTORIAL)

4.2. Imprimir las treinta primeras potencias de 4, es decir,4 elevado a l, 4 elevado a2,
etc.

aTgoritmo potencias4

var

entero: n
inicio
desde n <- t hasta 30 hacer
escribir(A ^ n)
fin_deede
fin
4'3. Calcular la suma de los

n primeros nmeros enteros utilizando la estructura desde.

,S=1+2+3+...+n
El p s eudo

aTgoritmo
var

digo correspondiente

SumaNenteros

entero: i,
real: suma
inicio
-Zeer(n)
suma t-

es

desdei(-lhastanhacer
SUIId suro - i
fin_desde

//escribir eI resultado de
escrjbjr( suma)
fin

suma

146

Fundamentos de Programacin

4.4.Disearelalgoritmoparaimprimirlasumadelosnmerosimparesmenoresoigualesquen.
Los nmeros impares son 1' 3'

5'1' "'' n' un pseudocdigo

i tmo SumaimParesmenore

aLgor

var

entero: i,
real: s
inicio
s<-0

ser:

(n

)
-1eer
2 hacer
desde i <- t hasta n incremento

SeS+i

fin-dese

escribir lS)

t r-n

y su resto'
algoritmo que calcule su cociente
4.5. Dados dos nmeros enteros, rcalizarel
divisor' que
SeanlosnmerosMyN.ElmtodoparaobtenerelcocienteyelrestoesoorrestassuCeSiVaS.elmtodo
obtener un resul'tado menof que el
restaruu""rtruir"r;i;;.T"i iri"no hasta
sera
ser el resto

d. l^

50 113
1i 3

d;i;;;;

e1

el cociente:
nmero de restas efectuadas ser

C=1
C=2
C=3

50-13=37
31 ' 13=24
24-13=ll

Comollesmenorqueeldivisor,13,seterminarnlasrestasSucesivasyentoncesllserelresto,y3
(nmero de restas) el cociente'
el siguiente:
Por consiguiente, el algoritmo ser
a l"

got i tmo Coc i ente-Y-res to

var

entero : a, b, cociente ' resto


inicio
escribir('Deme dividendo
)

Leer(M)

esctibit('Deme divisor )
Leer \ i. l

r:s--o <- M
:::la:-te <- 0
eientsras resto >-: N hacer
'i:s--a <- resto - N
:::l::::e <- cociente + 1
f ia-mientras
escribit :saleate: ',cociente''
fia

i.

..,
1

.- ^^, ^,
Resto: ' re-LU/

4.6.Rea]izarelalgoritmoparaobtenerlasumadelosnmerospareshasta1000inclusive.
Mtodo

l:

S-2+4+6+8+

+1000

*+t|t
lntroduccin a la programacin

estructurada

147

aTgoritmo Sumapares

var

real:
inicio

NUMERO,

SUMA

t\

+- 2
<- 4
mientras NUMERO <= 1000 hacer
SJMA <- SUMA - NUMERO
NUMERO <- NUMERO + 2
fin_mientras
fin
SUMA

NWERO

ry,.
{^"

5'

^\
U, b,
,,
n "t,
i

\f

Mtodo 2:

cabecera y declaraciones

//identica
inicio

SUMA <- 2
NUMERO <- 4

repetir

SUMA <- SUMA + N.UMERO


NUMERO <- NUMERO + 2
hasta_que NUMERO > 1000

fin

4.7. Buscar y escribir la primera vocal teda del teclado. (Se supone que

se leen,

uno a uno, caracteres desde

el teclado.)

aTgoritmo Buscar*vocal

var

caracter:
inicio
repetir
l.eer

(p

frasta_que (p = 'a'

escribir(
fin

Primero',

(p
p)

'e')o(p = 'i')o(p

4.8. Leer dos nmeros y deducir si estn en orden creciente.


Dos nmeros, a y b, estn en orden creciente si a <= b.
al gor

var

i tmo Comparac ionl

real: a,b
inicio
escribir( dar dos numeros
leer(a, b)
sia<=bentonceE
escribir( orden creciente,
)

si_no

escribir\ 'orden decreciente,


fin_si
fin

= 'o')o(p = u

118
4'9'

Fundamentos de programacin

Se desea leer de una consola a una serie de nmeros hasta obtener


un nmero

aLgoritmo
var

inferior a

1o0

Menor_100

real: numero
inicio
repetir
escribir( Teclear un numero,)
Ieer (numero
hasta_que numero < 100
escribir(,E1 numero es,, numero)
fin
)

4.10. Escribir un algoritmo que permita escribir en una pantalra la frase ,


Desea continuar? S/N' hasta que la
respuestasea s'o,N,.
af grori tmo SN

var

caracter: respuesta
inicio
repetir
escribir (, Desea continuar S/N
-Zeer ( respues

ta

hasta_que (respuesta -

fin

4'll' Leer sucesivamente

S,

(respuesta

= N')

nmeros del teclado, hasta que aparezcaun nmero comprendido entre 1 y


5.

aTgoritfio Numerol

var

entero: numero
inicio
repetir
escribir(,Numero comprendido entre I y 5
eer ( numero )
hasta_que(numero >= 1) y (numero <= 5)

escribir( Numero encontrado ,


fin

numero)

4.12. calcular el factorial de un nmero n con mtodos diferentes


al Ejercicio 4.1.
n.t=

nX(n-l)x(n-2) x...x3x.2x1

,'-)

es decir:

j.'=5x4x3x2xl =120
=1x3x2xl
=24
1' = I v ) w I
-6
2.'=2xl
1;

1t _

_1
-f

Para

codificar estas operaciones, basta pensar que

(n + l1.t = (n + 1) x

nx

(n+l)! =(n+1)xn.r

(n

- l) x (n -2) x...x

3x2

lntroduccin a Ia programacin

esfructurada l49

Por consiguiente, para calcular el factorial FACToRTAL de un nrmeo, necesitaremos


un contador i que
cuente de uno en uno y aplicar la frmula
FACTORTAL

= FACTORIAL * f

inicializandolosvaloresdeFACT0RrALeralyrealizandoulbucteenelquelseincrementeenla
cada iteracin, es

decir,

.: !:

ATgoritmo ldeFactorialden:
EACTORIAL

'e1
repet.ir

,\'r,

<- 1

FACTORIAL <_ FACTORIAL

i+-i+1
hasta_quei=n+1

ATgoritmo
FACTORIAL

ie0
repetir

2 de Factorial de n:

<-

FACTORIAL

<-

FACTORTAL

* (i +

1)

aef+1

hasta_que i = n
ATgoritmo

3 de Factorial de n:

FACTORIAL

1<-0
repetir

FACTORIAL

ie-i+lr:

a
FACTORIAL

hasta_que i > n

* (i + 1)

'

'

ATgoritmo 4defactoialden:

FACTOPIAL<_L
i <- 1
desde i (- t hasta n - t hacer
FACTORIAL <- FACTORIAL * (i +
fin_degde

un algoritmo completo

,..\
/

rb\
Y'+
"''

1)

con lectura del nmero n por teclado podra ser el siguiente:

aTgoritmo -acror j a -.
var
entero: i, n
real: f

-l
L f\i.
lr-'.

, -*9f

inicio
f<-t

i<-1

leer(n)
repetir
f<-f*i

ti

)'

//n >

4
A

re1+1

hasta_quei=n+1
escribir( 'Factorial de' , n,
fin

es' , f)

150

Fundamentos de programacin

4.13. Calcular el valor mximo de una serie de 100 nmeros.


Para resolver este problema, necesitaremos un contador que cuente de

a 100, para contabilizar 1os suce-

sivos nmeros
El algoritmo que calcula el valor mximo ser repetido y partiremos considerando que el primer nmero ledo es el vSlor mximg-, por lo cual se realizar una primera asignacin del nmero 1 la vafible
mdximo.
-7.eer (numero

n=1

maximo = numero
La siguiente accin del algoritmo ser realizar comparaciones sucesivas:

.
.

leer un nuevo nmero;


compararlo con el valor mximo:
si es inferior o igual, implica que el valor mximo es el antiguo;
si es superior, implica que el valor mximo es el recientemente 1edo, por lo que ste se conveftir
en mximo mediante una asignacin;
100.
repetir las acciones anteriores hasta que n

aTgoritmo Maximo

var

erLero: e, nune'o, mdx


inicio
-7.eer (numero

mo

r<-1

maximo <- numero

repetir
n(-n+1
feer numero
si numero 7 maximo entonces
maximo <- numero
fin_si
hasta_que n = 100
escribir\ Numero mayor o maximo',
fin
(

maximo)

Otras soluciones

algoritmo Otronoximo
var

::-.-::o: n, nLmro, ximo


iaicio
-1.eer ::nero
:-,=:.:::-: <- nUmero
:-<-.
repetsir
)

7ee --:::.=aa)
si :-:---=:: > ::aximo entonces
::axr:--a <- nJmero
fin-si
hasta-que :escribiri ),,ji-..ero t-.al-ot: c maximo',
fin

.-!

maximo)

lntroduei<in a b pqramacin

2. algorito Otromaxlmo
var
entero: n, nllmero,
inicio

estruc.turada l5l

maximo

Jeer ( numero )

e nJmero
repetir3ara n = 2 a 100
maximo

eer ( numero )
si numero > maximo entsones

raxjmo nlero
fin_si
fin_repetir
escribir( Maximo, , maximo)
fin

//pseudocodigro sus:i:;:c

ae eede

sJ,

NorA: Los programas

anteriores suponen que los nmeros pueden ser positivos


o negativ*: se desea
comparar slo nmeros positivos, los programas
cofrespondientes seran:

L. algoritmo Otromaximo
var
ent.ero: n, numero,
inicio
n<-0
maximo <_

maximo

repetir
feer (numero
n-n+l
si" numero > maximo entonces
)

maximo <_ numero

fin_si

hasta_que n =

100

escribir(,Maxmo numero ,
fin
2

maximo)

, al-gotitmo Ot:romaximo
var
entero: n, numero, maxmo
inicio
n<-0
. maximo <_ 0
desde N t_ t hast.a 100 hacer
-L

eer (numero

gi numero > maximo entonces


maximo <_ numero

fin-si

fin_desde

escribir( Maximo numero =, ,


fin

maximo)

4.14. Bucles anidados.


Las estructuras de control tipo bucles pueden
anidarse internamente, es decir, se puede
situar un bucle en
el interior de otro bucle.
La anidacin puede ser:

o
o

bucles
bucles

repetir dentro de bucles repetir,


para (desde) dentro de buc]les repetir.

etc.

152

Fundamentos de programacin

Eiemplo 1. Bucle

para en el interior de un bucle

repetir-hasta-que:

repetir
l.eer(n)
desde i <-- t hasta 5 hacer

escrjbir(n *

n)

fin_desde
haet.a_que n =

escribir ( Fin,

0
)

Si ejecutamos estas instrucciones, se obtendr para:

n - 5

resultados

25
25
resultados

4
4
4
4

n=0

resultados

0
0

0
0

fin

Ejemplo 2. Bucles

anidados para (desde):

desdei(-lhasta3hacer
desdle j (- t hast.a 10 hacer
escribirli,
por, j, ,=,, i*j)
fin_desde
fin_desde

i * j, sern:
j=txl=
j
j=tx2=2
j-1x3=3
j=Lx4=4

Los valores sucesivos de i, j,

i=l

j
I
j=z
j=3
l=4
j = lo

i*
i*
i*
i*
1*j

i*
i*
i*

=2xI=2
=2x2=4
=2x3=6
=2x4=8

r=2
i--l

-'1
ia

IT .,
^

)
I

-1

-)
i *i
L)

j=10

au^

lu

=3x1=3
-3x2=6
=3x3=9
=3x4=12

i " j = 3 x 10 =

30

lntroduccin a la programacin
Es decir, se obtendr

Iatablade multiplicar de

l,2y

3.

Eiemplo 3. La codificacin completa para obtener la popular tabla & mulplicar

la siguiente:

i tno

gor

a7

var

Tabla_de_mu1

estructurada l53

de los escolares sera

tipl icar

entero: i, j, producto
inicio.
parar <- t hasta t hacer
escribirl,Tabla del' , i)
para j <- t hasta 10 hacer
productoei"l
j, =,, producto)
escribir(,'por:,
finjara
f injara
fin
4.15. Se dispone de una lista de

N nmeros. Se desea

calcular el valor del nmero mayor.

algoritmo
var
enLero: I

real: NUM, MAX


entero: N
inicio
Jeer(N)
//N>0
l.eer(NUM)

MAX

NU4

desde I (- 2 hasta 100 hacer


-Zeer(NLIM)

si

NUM > MAX


MAX <- NUM

entonces

fin_si

fin*deede

fin

4.16. Determinar simultneamente los valores mximo y mnimo de una lista de 100 nmeros.
aTgoritmo vax min
var
I: entero
MAX, MIN, NUMERO: real
inicio
-Zeer (NUMERO )
MAX <- NUMERO

MIN <- NUMERO


desde_e2hasta
Leer

si

(NUMERO

NUMERO

MAX

00hacer
)

> MAX enlonces

NUMERO

si_no
si NUMERO < MIN entonces
MIN NUMERO
fin_si
fin_si
fin_desde
escribir(
Maximo , MAx, Minimo,,
-

fin

MIN)

154

Fundamentos de programacin

4'17' se

dispone de un cierto nmero de valores


de los cuales el ltimo es el 999 (no
se procesa: es flnal de
lista) y se desea determinar et valor
m,lmo e ta, m"ras
a parejas de valores sucesivos.

;;;rp#;;bs

aTgori tmo Media_pare j as

var

entero: N1, N2
real: M,MAX
inicio
eer(Nl , N2
MAX <- (N1 + N2 ) /2
mientras (N2 <> 999) y (N1 <> 999) hacer
M <- (U1 + N2) /2
siM>MAXentonces
-U

r 7 d-

l'

MAX <_

fin_si
eer (N1,

fin_mi,entras

escribirt
fin

N2)

Medja raxina

MAX

4.18. Deteccin de entradas numricas _enteros_


effneas.
Andlisis

?:t; ItJI1X1":::1:"1Jffi:ff":'"T3'de.interruptor>>.

Se sita er varor iniciar der interupror

La deteccin de nmeros no enteros se


rcalizt. ,
s i sw
= o . La in s rruccin que .t""tu
-Z

eer

.-ll;:L',1lTH:tJii:t'J,iH ilH?:#: :..l:1,,l,"

(N

realizar la comparacin de N y parte


entera de N:

o si son iguales, N es entero.


o s.i son diferenres. N no es entero.

H,Ti.3,d:j|i:;:lffj}J:.r*e

entera es utilizar la runcin estndar

Pseudocdigo

aTgoritmo Error
var
=:-_a:a:sw

:::

_ :...

iicio
:.., -:
mieatrasS,.;=Q!sq
Teer :::: de entrada, , N)
si :: r =: - l. entonces
escribir
--a_o no vatdo, )
escribir :l_aai:e nuevamente
si-no
escribir :.:: --. ) , ::,
^1,- o
SW<-fin_si
fin-mientras
fin
)

enr (inr)

exisrenre en muchos

lntroduccin a la programacin

etncf.t-a

155

4.19. Calcular el factorial de un nmero dado (otro nuevo mtodo).


Anlisis
El factorial de un nmero N (N!)

es

el conjunto de productos sucesivos siguientes:

N/ = N'k (N - l) * (N -2)' (N-3) *... * 3 * 2 * I


Los factoriales de los primeros nmeros son:

1!=

2t=2* l =2* ll

3l=3*2*l=3'(21
:.r=0.3*2*t=4*31.
N/ = N* (N _l) * (N _2) * ... *

2* I =N* (N_

1)!

Los clculos anteriores significan que el factorial de un nmero se obtiene con el producto del nmero N
por el factorial de (N - 1) !
Como comienzan los productos en 1, un sistema de clculo puede ser asignar ala variable factorial el
valor 1. Se necesita otra variable I que tome los valores sucesivos de 1 a Npara poder ir efectuando los
productos sucesivos.
Dado que en los nmeros negativos no se puede definir el factorial, se deber incluir en el algoritmo una
condicin para verificacin de error, caso de que se introduzcan nmeros negativos desde el terminal de
entrada (N < 0).
La solucin del problema se realiza por dos mtodos:

1. Con la estructura

2.

Con la esuctura

repetir (repeat).
desde (for).

Pseudocdigo

repeEir):

Mtodo 7 (estructura

aTgoritmo

FACTORIAL

var

entero: I, N
real: factorial
inicio
repetir
Leer(N)

hasta_que N >

factorial <- 1
r<-1
repetir
factorial (- factorial
I<-I+1
hasta_queI=N+1
escribirl factorral
fin
)

* I

156

Fundamentos de programacin

Mtodo 2 (estructura desde):

aTgoritmo
var

FACTORIAL

entero: K, N
real: factorial
inicio
l.eer

(N)

sin<0entonces
escribir('El numero sera positivo,

si_no

factorial e- 1
siN>lentonces
desdeK<-2hastaNhacer
factorial (- factorial *
fin_desde

fin si
escribir( 'Factorial de , N, = , factorial)
fin_si
fin

4.20. Determinar el precio det billete de ida y vuelta en ferrocarril, conociendo la distancia
a recorrer y
sabiendo que si el nmero de das de estancia es superior a7 y ladistancia superior
a 800 km el billete
tiene una reduccin del 30 por 100. El precio por km es de 2.5 pesetas.

Anlisis
Las operaciones secuenciales a realizar son:

1. Leer dlstancia, duracion de 1a estancia y precio del kilometro.


2. Comprobar si distancia > g00 km y duracion > 7 das.
3. Calcufo del precio total del billete:
. si drstancia
precio tot.al
. si distancia
precio total

<
=
>
=

800 km o duracion < 7 dias


distancia * 2.5
800 km y duracion > 7 dias
(distancia " 2.5) 3A/1AO (precio total)

Pseudocdigo

aTgorixmo 3tllete

var

=ez,: ),
iaicio

?-

Teerta
PTe

l:

* -

i(D > 8i:ly a > ,;entonces


PT <- Pt
:_ * 3: _10
fin_si
escribir( precic Cer c_,1ete,,
fin

pT)

lntroduccin a la yqramacin

4.2t.

estrucfurada

157

Se tienen 1as calificaciones de los alumnos de un curso de informtica corresponliente a la-r asisnaturas
C++/C, Pascal, FORTRAN. Disear un algoritmo que calcule Ia media de c*1: lrmtu"

Andlisis
Asignaturas: C++lC
Pascal

FORTRAN
Media:

(C++/C + Pascal + FORTRAN)


J

Se desconoce el nmero de alumnos N de la clase; por consiguiente, se utilizar una marca final del
archivo ALUMNOS. La marca final es ' 1**' y se asignar a la variable nombre.
Pseudocdigo

aTgoritmo Medra

var
cadena: nombre

real: media
real: CCMAS, Pascal, FORTRAN
inicio
//enlrada datos de alumnos
-7.eer (nombre

mient.ras nombre <> *** hacer


Leer\CCnas, Ddsco-, -OPTPA\t
media <- (C + Pascal + ITORTRAN) /
escribir (nombre, media)
l.eer (nombre

fin mintras
n

empleados de una lbrica trabajan en dos tumos: diurno y noctumo. Se desea calcular el jornal diade acuerdo con los siguientes puntos:

1. la tarifa de las horas diumas es de 500 p"r"tur, {O


2. la tarifa de las horas nocturnas es de 800 pesetas, '
3. caso de ser domingo, la tarifa se incrementar ert 200

pesetas ei turno diumo

nocturno.

Antilisis
El procedimiento

a seguir es:

1. Leer nombre del tumo, horas trabajadas (HI) y da de la

2.
3.
4.

Si el turno es nocturno, aplicar la frmula JORNAL


Si el turno es diurno, aplicar la frmula ITORNAL Si el da es domingo:

o
c

TURNO

TUFNO

DILIRNO
NOCTURNO

JORNAL
JORNAL

semana.

= 800 * HT.
500 * HT.

= (500 + 204) )* ht,


- (800 + 300)* HT.

y 300 pesetas el turno

7/

r58

Fu nda

mentos de prog

ra m aci

Pseudocdigo

algoritmo Jornal

var

cadena: Dia, Turno


real: HT, .fornal
inicio
J.eer(HT, Dia, Turno)
si Dia <> ,Domingo, entonces
si Turno = ,diurno entonces
Jornal <- 500 * HT
si_no

Jornal <- 800 *


fin_si

HT

si_no

si Turno = ,diurno, entonces


Jornal e- 700 * HT

si_no

.Tornale1100*HT
fin_si
fin_si
escri.bir (.Torna1
fin
)

4.23. Coilstruir un algoritmo que escriba los nombres de los das de la semana, en
funcin de la entrada correspofdiente a la variable nt.
Andlisis
El mtodo a seguir consisti-r en clasicar cada da de la semana con
un nmero de orden:
1. LUNES
2. MARTES
3. MIERCOLES
4. .JUEVES
5- VIERNES

6.

-7.

SABADO
DOMINGO

Si oia >J o <


Error de entrada: Rango (1 a 7).
Si el lenguaje de programacin soporta slo liestructura
se mdifica con el mtodo 1; caso de soportar la estructura

r2.

Pseudocffigo
Mtoda

l:

a 7 gori tmo Dias_semara1


var

Dia: entero

si-entonces-si_no ( if-then-else)
segun-sea (case)

, la

codificacin ser el

lntroduccin a ta

prqnmrcitiosqr*

inicio
Leer(D ia)

siDia=1ntonces
escribir('LUNES
si-no
siDia=2entorces
escribir( MARTES'
)

si_no

siDia=3entonces
ECTibiT(

MIERCOLES,

si-no
siDia=4entonces
escribir('JUEVES
si-no
siDia=5entonces
esctibir( VIEFNES'
si-no
siDia-6entonces
escribit('SABADO
si-no
siDia=Tentonces
)

escribir('DOMINGO

si-no
eectibit('error
escribit( rango I 7')
fin-si
fin-si
fin-gi
fin-si
fin si
fin si
fin_si
fin
)

Mtodo
al-gor

2:

,ll

E'\

itmo Dias-semana2

var

Dia: entero
inicio
Leer(Dia)
segun-sea Dia hacer.

l: escribir( 'LllNES')
2: esctbir( MARTES
3: escribit('MIERCOLES
4: escribir('JUEVES
5: escribir ( VItrRNES'
5: escribir ( ' SABADO'
7 : escribir ( DOMINGO'
si-no egcribir('etror de entrada, rango 1 7')
fin segun
fin
)

159

Fundamentos de programacin

160

4.24. Realizar un algoritmo que escriba los N primeros nmeros de la serie de Fibonacci.

NorA:

La serie de Fibonacci es 1, 1, 2,3, 4,8,13, ..., y se genera de acuerdo a la 1ey siguiente:

Fibonacci(l )
Fibonacci(2)
Fibonacci(3)
Fibonacci(4)

=
=

I
I

= 2 = Fibonacci(2) + Fibonacci( I )
= 3 = Fibonacci(2) + Fibonacci(3)

Fibonacci(N para N >

l)

= Fibonacci(N

NOTA: La realizacin del pseudocdigo

- l)

+ Fibonacci(N 2)

se deja

como tarea al alumno.

EJERCICIOS
4.1. Determinar la media de una lista indefinida de nmeros positivos, teminados con un nmero negativo.
4.2. Dado el nombre o nmero de un mes y si el ao es o no bisiesto, deducir el nmero de das del mes.
4.3. Sumar los nmeros enteros de 1 a 100 mediante: a) estructura repetir; b) estructura mientras;
c) estructura desde.

4.4. Determinar la media

de una lista de nmeros positivos terminada con un nmero no positivo despus del

ltimo nmero vlido.


4.5. Imprimir todos 1os nmeros primos efie 2 y 1.000 inclusive.
4.6. Se desea leer las calificaciones de una clase de informtica y contar el nmero total de aprobados

(5 o mayor que 5).


Leer las notas de una clase de Informtica y deducir todas aquellas que sean NOTABLES (>= 7 y < 9) .
4.& Leer 100 nmeros. Determinar la media de los nmeros positivos y la media de los nmeros negativos.
'.y;Vncomercio dispone de dos tipos de artculos en tichas correspondientes a diversas sucursales
con los

$I.

'

siguientes campos:

o cdigo del artculo A o e,


o precio unitario del artculo,
o nmero de artculos.
La ltima ficha del archivo de aftculos tiene un cdigo de artculo, una letra x. Se pide:

el nmero de artculos existentes de cada categora,


el importe total de los artculos de cada categora.

{.10. Lna estacin climtica proporciona un par

de temperaturas diarias (mxima, mnima) (no es posible que


alguna o ambas temperaturas sea 9 grados). La pareja fin de temperaturas es 0,0. Se pide deierminai el
nmero de das- cuvas temperaturas se han proporcionado, las mdias mxima y mnima, el nmero de

+4.11. Calcular:
-l"n
E(x)=
l-.r- "

l:

n'.

a) ParaNque es un entero ledo por teclado.


b) Hasta que N sea tal que.r-.,/n < E (por ejemplo, E =

10a')

lntroduccin a la programacin

4,l2...,Calcular el ensimo trmino de

1a

estructurada

161

serie de Fibonacci definida por:

A1=l A2=l A3=l+2=AI+A2 A,=A,_,+A,_r(n>=3)


en un archivo EMPRESA- y a la terl:,4.13. Se pretende leer todos los empleados de una empresa
-situados
minacin de la lectura del archivo se debe visualizar un
mensaje ..existen trabajadores mayores de 65
aos en un nmero de ... y el nmero de t- trabajadores mayores de 65 aos.
4.14. Un capital C est situado aun tipo de inters n, al trmino de cuntos aos se doblar?
4.15. Los empleados de una fbrica trabajan en dos turnos, diurno y nocturno. Se desea calcular el jornal diario de acuerdo con los siguientes puntos:

o
o

tarifa de las horas diurnas es de 500 pesetas.


la tarifa de las horas nocturnas es de 800 pesetas,
caso de ser domingo, la tarifa se incrementar en 200 pesetas el turno diurno y 300 pesetas el tumo
nocturno1a

4.16. Averiguar si dados dos nmeros ledos de1 teclado. uno es divisor de otro.
4.17. Se introduce la hora del da en horas, minutos 1' se-eundos. Se desea escribir la hora correspondiente al
siguiente segundo.
r4.1& Se desea conocer una serie de datos de una empresa con 50 empleados: a) Cuntos empleados ganan
ms de 300.000 pesetas al mes (salarios altos); b) entre 100.000 y 300.000 pesetas (salarios medios), y
c) menos de 100.000 pesetas (salarios bajos y empleados a tiempo parcial)?
4.19. Imprimir una tabla de multiplicar como

,rj

11'

2*2
-l*

234

4*4

234
468
69t2
81216

is* 15 30 4s
l!1Q,ruoo

15

++

l5
30
45

60

60

225

un entero positivo n (> L), comprobar si es primo o compuesto

REFERENCIAS BBLIOGRAFICAS
(1)
(.2)

DIJKSTRA, E.W.: Goto Statement Considered Harmful, Communications of the ACM, vol. 11.
nm. 3, marzo 1968, pgs.147-148,538,541.
KNUTH, D.E.: Structured Programming with goto Statemenfs>>, Computing Sw-veys, vol. 6, nm. -1.
diciembre

197

4, pgs. 261-298.

30

Fundamentos de programacin

Ejemplo 1.14
Cules son los valores de A, B y C despus de la ejecucin de las siguientes operaciones?

Ae3

cr?
i;*:*"
Ce-(/7''l
e<-c-h
cec+Bf\-r-t"1.

Q!)
Crs)

g* f,a{-*?tL)

A,-B*c

En las dos primeras

\
)
urfr,n"{:*rk#r"r,k"l'f

Ce A+2 * B

laexpresinA+2+Btomarelvalor3+2*4=3

ce11

+8=Il

La siguiente accin
-

C<-C+B

producirunvalordell +

4 = Is

ce15
EnlaaccinB <- c - AseobtieneparaBelvalor15 - 3 = l2yporltimo:
A(-B*C

AtomarelvalorB

C,eqdecir,

A ser 180.

12 * 15 =

180;porconsiguiente,elltimovalorquetoma

Ejemplo 1.15
Cuil

es el

valor

de x despus de las siguientes operaciones?

x e- 2
x (- cuad.rado(x + x)
x <- aizz(x ' raz2ix;

../--"*.\X 1- ynL , l

- :r l-.,,1 {trarzfil)" j
I-m resultados de cada expresin son: y A- 5
x <- 2
x <-- drado (2 + 2)

x bma el valor 2
x toma el valor 4 al cuadrado;

x <- rai=2la5 + ra22(16) +


enestaexfesinse evalaprimero

ra22 (25),

es

decir 16

5)

ra22(16), queproduce 4y,porltimo, raj-z2(15+4+5)

es decir, 5.

I-os resultados de las expresiones sucesivas anteriores son:

x<-2
x<-16
x-l