Documente Academic
Documente Profesional
Documente Cultură
ALGORITMOS Y PROGRAMAS
CONTENIDO
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:
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)'
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'
de Ia informacin.
E- --r--r:t:
Entrada=datoS
:
Procesador
---)
-----,
Sa
a=inf ormacin
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 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.
Dispositivos
de
entrada/sa lida
E/S
Almacenamiento
secu ndario
(memoria auxiliar:
(perifricosl
7
Fu
ndamentos de prog
ra
--
macin
1.2.
Las
alg
puesto.
Programa
Diseo
Problema
---------->
del
---------->
algoritmo
de
computadora
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.
codificacin.')
algoritnto.
b-
Ei
S
SC
si
Algoritmos
programas
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.
Entrada:
Proceso:
Salida:
Ejemplo
y Salida. En el
1.1
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
etctera.
1. Inrc io .
2. Poner X
igual a 2
que se busca N)
6.
(,X
Frn.
x = n diw
2 (donde
div
es el operador dir.i-iin
eni:
del rrurer:
-Y
Fundamentos de Programacrn
1.3.
Los
1. Inicio.
SdiIk
)-i,)
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'
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:
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 , :
-!.o--s
Posiciones
de memoria
01 00
01 01
001 0
0102
001
01
00
1
0000
0000
0000
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.
DIV:
e_tc:;
l---.
etc.
--
--,-
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;-.
=::,
I'
7
Algoritmos y programas
Programa
Programa
ENSAMBLADOR
(assembler)
fuente en
ensamblador
(assemblyl
Programa
objeto en
cdigo
mquina
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.
c_qrto e-omparado
guajes.
hum,a.nos.
10
Fu
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
\lsual B,\SIC
Smalltal}r
y comienzan a difundirse:
o
o
compiladores,
intrpretes.
1.3.5.1. lntrpretes
Vn irrpretg
r.ersiones
a&ISNUckBAS[C-se
.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.
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-
Programa fuente
Compilador
(traductor)
Programa objeto
Programa ejecutable
en lenguaje mquina
Figura 1.8. Fases de Ia compilacin.
12
Fundamentos de Programacin
1. Escritura
s!
it\
del
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
.: ;,
numricos
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).
frtJ:''
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-
,i"-trffieil;il-[-;;""ra.l
entero y una Parte decimal.
reales:
3139 .4L
08
3.1 452
-52 -32L
-8.L2
3'0
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
.,,
000
102!
= :tir-S::l:
-: /Y
COrnO
las
si
IB\l
PC o compatibles'
Algoritmos y programas
1S
35.752AL
18
mantis(1
exponente
lg-ico
.'
vOo| - -tambin
.
.
/
caracteres alfabticos
caracteresnumricos
(a, B, C,
(1, 2,
Z) (a, .,
9, 0),
.:,
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
Numrico
La
ton_
separadores o
rvvoror
16
Fundamentos de programacin
vlidas:
Constantes reales
i;752.63
: I:234
,i - a .1436
\_. + 54431324
(comasnopennitidas)
d2
. 3.31456282
equivale
3.3-=:e2 x i)'
'B
Si
e
Se
4'
nc errado s denlr_o_
dg
TpEl._o_!lla.
ge
denomina ,n*ormalme{etta-cctdenay
:urlu'
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)
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'-
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:
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
identrll:.: -.
f8
Fu
ndamentos de progra
acin
U!.?..pfgslg
qp-ns-ta
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.
! Ui.ll
ri !ii.
muL:iiicaiitn
dir
erpe.nenci;citn
I
, o,
os smbolos
i:in
div
mod.
mdulo i esto
!__,j._1_1lC_g_1")_y
lu ipr* i"
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.
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-
\o
p1o. en
ro,Jos los operadores aritmticos existen en todos los lenguajes de programacin; por ejem-
FORTR\\
no eriste
div
ni mod.
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-
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
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,
"
Dnmero.
,'.,+
.
(L.
\o
l.(ff
l*"er
-. )/
t o bien **),
ftxrplo 1.5
Cul
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)
\_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
estaexpresinequivaleaA
equivaleaA+B/C+D.
equivale
+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
leanas en honor del matemtico britnico George Boole. que desarrollo el lgebra lgica de
Boole.
t::]19lj.:oqe*:g!*-, :, l
,':-r:=*.*i;
\--
---(- =j-r
=tc::e
t on7
OPERADOR DE REIJACION
Oitefador
Significado
menor que
mayor que
igual que
menor o igual que
mayor o igual que
distinto de
Algoritmos y programas 23
a =
4y
B=
3, en-
tonces
4 r.B
es veill.ad.
mientras que
(A
2)<(B-4)
es.fnlso
se
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.
---':*-:-_-
------:]-
24
Fu
nda
11 constanfe
false (f-also)
es
,
/
,,
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
Taina mi e-rrt
verdad
Ial so
booleanosbsicos son
dldi ch operad
no,t
t.).
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
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
A < B,
,&/
Ejemplo 1.10
La Tabla 1.1 resume una serie de aplicaciones de expresiones lgicas.
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
nlilnero
verdad
falso
verdad
4)
verdad
valor
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)
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
se
aplica a
: ral
-i.
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'
Funein :
Descripcir6n
abs (x)
valor absoluto de
entero o real
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
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
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
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
a)
a)
Si el valor de la expresin
raiz2(cuadrado(b) - 4 * a * c)
es negativo se producir un
28
Fundamentos de Programacrn
!
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
l.<-li+1
rienen sentido; se detgrmiU-a.
el- \alor
sen!lq_o_.]:-(-N + 1..
Li. u.Cior.s de asignacin
Lle
clirocte
se
re s .
1as
etala la expresin 3 + 14 +
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,
operador de asignacin:
lle2
N <- N +
Ne-3
'4:-.
,t, (*l:,
-,-l
4*
fl,-**;,
N+
1, que toma-
relvalor
M<-B<5
N<--[4o (7 <=12)
P<-7>'
y P son
f-"F
fu._ f4y
{r*v
P tomarn los
valores/also,verdad,ver-
dad.
x <- 12 de octubre de
1-942'
/ 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
tL
a\
escribir
( hola Vargas
visualiza en la pantalla
NorA
l:
-o
escribe en el dispositivo de
salida-
el mensaje
hola varqas
leer
escribir
read.
por
NorA 2: ln:
se espectnca
it t
se leen
q.gsgendatos-losjisBpsitivos
9'--sry1d9!p-ctg.,s--o-11-."ltes-lado-v-.1q-rr"a:l@...-"*
l.
Inicio.
2'
6.
proceso.
Quitar la rueda.
I ; en caso con-
-:
32
Fu n da m
entos de P rog
ra m aci
l.
Fin.
,F
LALOR = VALOR * X = 5 * 3 = 15
Z'D
1a
4'
-"'':
"
\/AT,OR
VALOR
: 15
instrucciones:
entero: x, Y
x<-I
Y<-5
escribir(x, Y)
araa
e Y toman los
7"il
'
valores 1 Y 5.
-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)
A)
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
..
Sr
s debe recurir
El procedimiento para conseguir intercambia los.valores de dos variables entre
variable
a una
asignacin siguientes:
<- A
A<-B
B <- AUX
AUX
A<-10
ALD(
A <-
l0
10
Be5
AUX
<-
ObserYcrles
A(-B
B <- AUX
,r
10
5
5
5
l0
-:
-:
-:
AtomaelvalordeB'
'
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'
:-.{ <- A
-:_ <- :
l<-3
<- .--:.,
- =
Comprobmoslo con los valores de
ISrenn
_
A e y C: 5, 10 y 15'
:.rrrAItX
!-<-a
: (- -le-:
l--:': - -1-L<-:
l<_-
10
5
-510155
10
a
15
10
t0be.rv.aCioneS
Algoritmos
35
Drogramas
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
-;-
Instruccin
(1) A<-5
(2) B+_A+6
(3) A(-A+1
(4)
L 1 - (
'
+ 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'
,"/-.
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
(5) A<-B-C
2-1
)'
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)
son:
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-
\IJM1..
J.
5. Comparar
6.
Presenta el valor de
7. Fin.
l--.,:
salida).
-(Lf""/
ir',1or'
--.,
-.'.:
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
!)
l
3,)
l'2'
I#..J;i:i,lT:da
,b) auomtrco; c)
de un techo. b
c)
e)
g)
d)x
R2D2
45
ZZZZ
)
h)
N14
3p
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*
''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
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
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
/, dv,;
ms baja'. +,
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.
fases:
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
ra
39
40
Fu n
dame ntos de
rogra maci n
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.
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.
o
e
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
Definicin
las
herramientas de proc.^
41
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:
Salidas:
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
Subproblema
Refinamiento
leer radio
leer radio
caicular superficie
calcular circunferencia
circunferencia = 2 x
scibir
resultados
e s
rib
3.
14i592 * radto
o
o
El problema
por
e1
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
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.
f. inicio
2. ver la carttelera de cines en e1 periodico
ir a1 cine
se puede describir de
l.
Fundamentos de Programacin
44
3.
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
las estructuras de
yen los conceptos i4pofi4ntes
le
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
las
herramientas de programacin
45
-lli-*
cldrfic1cin det
algoritmo en un programa,
,1^.
.. z. qecucton det programa,
i 3. comprobacin del programa.
*:li:"*le1,1godtmo.ste
#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;;;
del problema
con computadora
Codificacin
del
programa
Ejecucin
del
programa
Comprobacin
del
programa
46
Fu nda
mentos de prog
ra
macin
ritmo
i..
l. diagrama de flujo,
",4 2.
diograma N-S (Nassi-Schneidermanl.
3.
4.
5. frmulas.
xl
trlr'
4ac)
/2a
x2=Fb- b -lac\/2a
significa
l.
Eleve al cuadrado b.
mula.
idialrama-defuio-(fTawchart)
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
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
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
3::::::l"llllge
...._
"or.*,
"n
l,
n,
Oun,o.G
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@
:'::T:l:':"'t,
nr . r.
48
Fu nd a m
ntos de p rog
ra m aci
bruto<-
horas + precio
neto<-
bruto - tasas
*:)
o proceso. I#l
o decisin. (,\
A o conectores.Q
o lln.
S._r'
o entrada./sat u, fl
o direccin del flujo, --)
v
En un diagrama de flujo:
o
o
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.
ras herramentas de
programacin
49
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
),
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:
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
----_.)
La resolucin de problemas con computadoras y las herramientas de programacin
51
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
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.
r-=
52
Fundamentos de programacin
de
se indica a continuacin:
flujo 2.4.a
HORAS <= 40
SALARIOeHORA*
PRECIO_HORA
SALARIO<40*PRECIO_HORA+
1,5*PRECIO_HORAX
(HORAS-40)
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
302
1.
2.
3.
4.
5.
5.
7.
.
Establecer
TOTAL a cero.
Quedan ms numeros a examinar?
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:
Diagrama
de
pro!ramacin
55
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.
El diagrama
cle
y parar.
y parar.
y parar.
es el 2.6.
56
Fundamentos de programacin
A+B=C
escribir
iguales
chapin-
es
,on
Lu,
flujo, se"orffir.
pueden escri-
Un algoritmo
se
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
d.e
horas trabe-
.
'
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.
se
utilizan a
relativa-
de
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
espaol,
ini_cio. fin).
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
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:
1986.
60
Fu n da m e
ntos de prog
ra m aci
paqa
paj|e :-e_a
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
de la suma 1 + 2 + 2 + 4 + ...
las
herramientas de prqrana.ioo
61
+ 100.
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
,,.!-
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.
Entracla:
Salid.a:
Proceso:
es
el siguiente:
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
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
las
herramentas de programacin
63
Anlisis
lTffilfffite
Variables:
AB
a la
variable auxiliar:
AUXEA
A continuacin
se asigna el
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
'
Andlisis
S=(l/2)BxH
B=base
H=abura
Se necesita
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
2.2.
Qu resultados
65
,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)
=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
a)
b)
c)
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.
b/
&
,,t
,;f
68
Fundamentos de programacin
Definicin
del problema
Diseo del
algoritmo
o
c
U
M
E
A
C
I
Depuracin y
verificacin
-como
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.
Programa
(algoritmo de
resolucin)
Figura 3.2. Bloques 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
e1
1as
instruccion
instruccion
instruccion
1
2
accron n
accion
""t:"
'
accton x ----l
I
accion n 1
:
70
Fu
f.
2.
3.
4.
5.
instrucciones
instrucciones
instrucciones
instrucciones
instrucciones
de
de
de
de
de
Las instrucciones
inicio/fin,
asignacin,
lectura,
escritura.
bifurcacin.
bla 3.1.
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
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
A
B
<- 10
<- 2A
AUX <- A
A <- B
B <- AUX
en la instruccin 1, A toma el valor 1
<- N +
N(-N+5
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)
A=
B=
c =
100
200
300
30
72
Fu nda
mentos de prog
ra
macin
4e100
B <- 200
c <_ 300
escribir (A, B,
C)
""rffJi'Hltffi;: I
,"T':i"
to o, 20 o y
30
o que
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
.urfiir"ri"
73
cin' Si
accin
rt.
o palabras
.
.
o
o
. o
reservadas
(inicio,
variables,
expresiones,
instrucciones.
Adems de estos elementos bsicos, existen otros elementos que forman parte
de los programas,
o bucles,
o contadores,
o acumuladores,
o intenaptores,
estructuras:
secuenciales,
selectivas,
repetitivas.
74
Fundamentos de programacin
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.
jJ#::?,ff1[1,1"J:":HH"ilo
aiil
tntcto
SUMA
/
Bucle
reer N
(1)
SUMA e-
SUMA +
//
(2)
escribir
surva
ciclo
(3)
El diagrama
de
flujo
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)
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.
Estructura general de un
pryirrlln
TI
Ejemplo 3.1
l:::;:r !::;;cincuenta
de
contador
tome
coincidir.,
le-l+1
78
Fundamentos de programacin
producto <- 0
CONT <- n
Ejemplo 3.2
Leer todas las fichas de
uru
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''{:
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
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**
:6,
fi1
e.\
ft.l
,-:":*,.
fi.!;r;
"''
v.r
80
Fu
ndamentos de prog
ra
maci n
N<-0
SUMA <-
N<-N+1
SUMA <SUMA + N
escribir
K, SUMA
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
81
que
tambin realizar diferentes acciones para el caso de altemativas mltiples. En el caso de
dry1-Qg
'-t'n-
..; !
!,tt v{)i
accin
,!t./'
S1
/ "cerrado ,)
to'
Si
SW es
SUMA <-
SW es
escribir
SUMA
SUMA <-SUMA + N
82
Fu
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
escribir
campo M
Ejemplo 3.5
Disear un diagrama
de
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
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
;;;;;;;
aiErorjtmo
DEMOl
;: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.,
85
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,
?
'
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
estrella = '*
frase = 12 de octubre
mensaje = Hola mi nene
nombre, inicial,
nombre,
nota'
letra
86
Fu
2, Almacenar mltiples
caracteres (cadenas). El aLmacenamiento de caracteres mltiples depender del lenguaje de programacin. As, en
BASIC
Pascal
I
'I
<<Pepe
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.
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
se
-----
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
FORTR{.\
l9t-rytut
ta
---
M^.li-\z
***
ordenac ion
Estructura general de un
programa
87
PASCAL
Lqs
qomeMe
lotmbolq
o bien:
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
//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 ( [ ] ).
/ / cabecera
.sentencia Snt
in
ser el desrito
88
Fundamentos de programacin
NOTAS:
Ejemplo 3.7
algoritmo raices
,,',/'esuelve una ecuacion de 2 grado
"
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
,"nl.loo
en cuenta lo siguiente:
";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:
: :i:.;;:.:
NPASOS
N
FACT
hacer
FACT <- 10
N <- NPASOS-S
3'2' Escribir
Andlisis
ElproblemapuedecalcularelproductoN
(N
_ 1) * (N _ 2) *
. *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
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
de
de segundo grado
Ax2 + Bx + C
O.
Anlisis
La ecuacin de segundo grado es Ax2
X1
Bx + C =
82 _ 4AC
-B+
X2=
2A
-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
D=8,_4AC
Por consiguiente. si
D=0
D<0
Y1 - -R/2a
X1 t Y)
Y) - -A/)^
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
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-
se haya
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
o
o
=_=\:
(3.1y
: )r.fs. Nes primo?
"nt.ro,
i-
.L
'41
CAPITU LO
INTRODUCCION A LA PROGRAMACION
ESTRUCTURADA
CONTENIDO
.1"
control bsicas:
1. secuenciales,
2. repetitivas,
3. seleccin.
95
Fu
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.
Mdulo
Mdulo
Mdulo
21
Modulo
31
97
Mooulo
42
Mdulo 22
r;;;;i*ii..i"r"rl.
uriua", ms pequeas.
Ejemplo 4.1
Se deseq disear un
{.
lectura de datos.
ejecutar clculos,
imprimir Ineas detalladas de informacin.
tro
imprimir totales.
lo
l.
.'r
98
Fu nda
Este programa se puede descomponer en mdulos, de modo que exista un mdulo principal o de
o
o
o
o
Su.bmdulo
o
o
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..
La representacin grfica
y tles submdulos.
se
cabecera
Mdulo de
i
proceso de
datos
Mdulo de
impresin
de totales
99
tener.
{.''
,\.
:'o
se
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
qu hace?"
mdulo'
Figura 4.3. Vistas interior y exterior de un
Fundamentos de programacin
100
\'
\o
secuenciales.
selectivas,
{".o repetitivas.
un programa
se define como
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
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.
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
O.20
IMPUESTOS <-.
* SALARIO_BRUTO
SALARIO-NETO
Diagrama N-S
leer
nonre, horas, precio
ltrl
104
Fundamentos de programacin
ji;;';;.ira
.,,i?ilf?:'";:;;::n::tr';,_.^,:ri:;:;:,:,y,;,"d,;*,.u,,
a"
ur,iq,",J,i,'J, au,o.
,"j?i131 ; ?l
ill.:,ffi
"i
Las qstructuras
selecrivu, o
mltiples.
/ if
_then)
si-entonces
en
.o
simples,
dobles.
-o
.o
unu
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
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.
(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
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
. 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."
":
,"
\..
'solucion indeterminada,
Ejemplo 4.5
Calcular la media aritmtica de una serie de nmeros positivos.
La media aritmtica de n nmeros es:
-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:
y,ed-e
//rtlcaitzacion
de s y n
lntroduccin a la programacin
estructurada
1O7
datos:
]eer(x) //calcuto
gix<0entonces
ir_a media
si_no
n<-n+1
s<-s+x
ir_a datos
fin_ei
media:
cin.
Ejemplo 4.6
obtener la nmina semanal
-salario
pqga por horas y del modo siguiente:
Se desea
se
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
var
cadena: nombre
-----,
_2+=--=
* tarifa
--
fn
horas < = 35
no
SI
sbruto
r- horas x tarifa
*
sbruto <- 35 tarifa + (horas-35)*
15 * tarifa
impuestos e- 0
sneto
sbruto
impuestos
fin
no
impuestos e15.000 + 0.20 +
(sbruto-35.000) * 0.30
lntroduccin a la
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.
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 )
.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
lntroduccin a la programacton
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'
grficade
3 (sinPlliicado)
I[adef o^ 1:
ModeJo
opcion E
de
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
.. 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)
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
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
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
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
escribir( 'Lunes' )
escribir( 'Martes')
3:
/-
5:
6:
elcribir( 'Viernes')
ecribir (' sabado
'
0:
esctibir{
Domingo'
fin-segun
fin
Ejemplo 4.13
Se desea
5, 6,
B, C, D Y
E a calificaciones numricas 4 ,
7 Y B, resPecfivamente'
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
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.
logica>
entonces
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
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
(
fin_segun
fin_si
fin
!1
I
!
{
I
,{
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)
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 -
iterar
mientras
'
"nil
loop )
tx.hile )
repetir
desde I para
forl
repeat
lntrodueion a b
pqratwiin *tmtrada
119
var
entero: \, TOTAL
real: NUMERO, SUMA
inicio
Leer (N)
<- N
<- 0
repeLir
TOTAL
V*V'/
SIIMA
-Zeer(NUMERO)
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.
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'
"-
(K <
n)'
de salida se origina al final del bucle; el bucle se ejecuta hasta que se verifica
repetir
K<-K+1
S<-S+K
hasta,_que K > n
3. La condicin
inicial
(vi)
hasta el valor
12O
Fundamentos de programacin
Pseudocdigo en castellano
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)
condici..
Ejemplo 4.16
contar los ntitneros enteros positivos introducidos por teclado.
se consideran
NWEFo -r' CCI'--r-ll?' (cotttar el nmero de enteros positivos).
var
t-
Introduccin a la programacn
inicio
contador <-Zeer (numero
estructurada 121
0
)
contador eJeer
numero
leer
numero
escribir
fin
La secuencia de las acciones de este algoritmo
Faso
1
2
3
4
5
6
7
:Pseudocdigo
se
ignificado
contador <- O
inicializar contador a 0
(mrmero)
mientras numero > 0 hacer
l-eer
incrementar contador
Jeer(il-mero)
fin_mientras
escribir(contador)
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.
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
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
,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
-..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 >=.
SUI
2.
'''-
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
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
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
Eiemplo 4.19
Calcular la media de un conjunto de notas de alumnos. Pondremos un valor centinela de -99 que
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
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>
--
unE,LJ-
end do
a) castellano
) ingls
c) ingls
Diagrama
de
flujo
Diagrama N-S
accrones
repetr condiciones
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
ol
126
Fundamentos de programacin
Ejemplo 4.20
Desarrollar el algoritmo necesario para calcular
mula:
N/
El
el
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
'
o
mientras y repetir
-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
+3
+ ... + num
es menor o
lntroduccin a la programacin
estructurada
127
aTgoritmo
/d
var
sJ-queno
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
128
Fundamentos de programacin
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:
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
Iincrenentc
<acclones>
fin desde
b) modelo 3
Diagrama
de
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
lntroduccin a la programacin
tt
1A
for)
inicializacin
del contador
proceso o accrones
del bucle
l<- l+
repetir
variable =
m1, m2, m3
mL
m2
= contador inicial
= contador final
m3=incrementoopaso
unda
mentos de Prog
ra
macin
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.
hasta
d.esde
f in_de
ile
/ /inc, rncremento
/ /dec, clecremento
I, bien positivo,
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:
accr ones>
fin-desde
Realizacin de una estructura desde con estructura
mientras
una
l.
desde por
v<-vi
mientras v <= vf hacer
<a
cci otes>
v*v+incremento
fin_mientras
. 2. Estructura desde
V EVI
mientras v >= vf hacer
<acci ones>
v(-v-decremento
fin_mientras
repetir,
a
desde
u)
mientras
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
repetir
<
acci oes>
s <condiclon> entoncea
salir_buc1e
fin si
<acciones>
fin_repetir
En general, la instruccin
salir
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)
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
estrc:-'=:
133
repetir
Teert intar-1dc.a'
var
cadena : nombre
real
inicio
escribir(.'Deme nombre (" para f in) i)
Leer ( nombre
2500
si_no
es
aTgoritmo
s_o_nojr
var
entero : n,divisor
logrico : primo
jmo
134
Fundamentos de programacin
inicio
escribit(
-l
eer
(n
Deme numero
dvisor <-
si_no
si_no
escribir( n, '
fin_si
fn
es
'
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
Deme
nota
7-l1
sin<5entonces
contsuspensos <- contsuspensos +
fin si
i!._mientras
es
tantoporciento
1:7"r
e'teIO
:l -.
c:-.--s::
Ltn
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
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
: 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
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'
. ...
''
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
mm
- t hacer
//comienzo desde
L,
, 5, 6, 8, LA, L2:
r 31
11.
30
2:
ei bisiesto entonces
dcotal (- dtoLal t
29
si_rio
28
fin_segun
fin_desde
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
+ 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
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
si
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_no
ac
ione s>
si_no
acci ones>
s_no
<acciones>
fin_si
fin_si
fin_si
o bien:
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
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
//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
gor
var
i tmo Hora-s
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
a)
b)
c)
d)
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.
lntrdtwin
b rynmacin
uclurada
143
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
MAYOR)
Ejemplo 4.38
Calcular
el
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
hacer
fin_desde
fin_desde
fin
Ejemplo 4.39
F
I
t
aTgoritno Primos
var entero : i, divisor
logico : primo
,FACTORIAL)
144
Fundamentos de programacin
inicio
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
(<<sroro>>)
aTgoritfuo
lntroduccn a la prqramacin
esfructurada 145
e1
N/ = . (N -r). (N
-2).
(N
-3)..... 3. Z.
.<- 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
,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'
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"
var
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
fin
4.7. Buscar y escribir la primera vocal teda del teclado. (Se supone que
se leen,
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
var
real: a,b
inicio
escribir( dar dos numeros
leer(a, b)
sia<=bentonceE
escribir( orden creciente,
)
si_no
= 'o')o(p = u
118
4'9'
Fundamentos de programacin
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
)
var
caracter: respuesta
inicio
repetir
escribir (, Desea continuar S/N
-Zeer ( respues
ta
hasta_que (respuesta -
fin
S,
(respuesta
= N')
aTgoritfio Numerol
var
entero: numero
inicio
repetir
escribir(,Numero comprendido entre I y 5
eer ( numero )
hasta_que(numero >= 1) y (numero <= 5)
numero)
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
(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
= FACTORIAL * f
inicializandolosvaloresdeFACT0RrALeralyrealizandoulbucteenelquelseincrementeenla
cada iteracin, es
decir,
.: !:
ATgoritmo ldeFactorialden:
EACTORIAL
'e1
repet.ir
,\'r,
<- 1
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)
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
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:
.
.
aTgoritmo Maximo
var
mo
r<-1
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
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,
L. algoritmo Otromaximo
var
ent.ero: n, numero,
inicio
n<-0
maximo <_
maximo
repetir
feer (numero
n-n+l
si" numero > maximo entonces
)
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
fin-si
fin_desde
maximo)
o
o
bucles
bucles
etc.
152
Fundamentos de programacin
Eiemplo 1. 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
)
n - 5
resultados
25
25
resultados
4
4
4
4
n=0
resultados
0
0
0
0
fin
Ejemplo 2. Bucles
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
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.
la siguiente:
i tno
gor
a7
var
Tabla_de_mu1
estructurada l53
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
algoritmo
var
enLero: I
MAX
NU4
si
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
si
(NUMERO
NUMERO
MAX
00hacer
)
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
;;;rp#;;bs
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
?:t; ItJI1X1":::1:"1Jffi:ff":'"T3'de.interruptor>>.
eer
(N
H,Ti.3,d:j|i:;:lffj}J:.r*e
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
es
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
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:
<
=
>
=
Pseudocdigo
aTgorixmo 3tllete
var
=ez,: ),
iaicio
?-
Teerta
PTe
l:
* -
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:
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
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:
nocturno.
Antilisis
El procedimiento
a seguir es:
2.
3.
4.
o
c
TURNO
TUFNO
DILIRNO
NOCTURNO
JORNAL
JORNAL
semana.
= 800 * HT.
500 * HT.
7/
r58
Fu nda
mentos de prog
ra m aci
Pseudocdigo
algoritmo Jornal
var
HT
si_no
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
r2.
Pseudocffigo
Mtoda
l:
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:
Fibonacci(l )
Fibonacci(2)
Fibonacci(3)
Fibonacci(4)
=
=
I
I
= 2 = Fibonacci(2) + Fibonacci( I )
= 3 = Fibonacci(2) + Fibonacci(3)
l)
= Fibonacci(N
- l)
+ Fibonacci(N 2)
se deja
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.
de una lista de nmeros positivos terminada con un nmero no positivo despus del
$I.
'
siguientes campos:
+4.11. Calcular:
-l"n
E(x)=
l-.r- "
l:
n'.
10a')
lntroduccin a la programacin
1a
estructurada
161
o
o
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
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
\
)
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
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;
ra22 (25),
es
decir 16
5)
es decir, 5.
x<-2
x<-16
x-l