Está en la página 1de 214

FUNDAMENTOS .

#
\

>

DE PROGRAMACION
A RITMOS ESTRUCTURA DE DATOS
t /' #

'

^
4

'i
r
te& T7Y
'

(i*
3c? *
i
' 1

r Luis Joyones Aguilar



'• /
/ ': I
f
ftPft..V
.
í
\
*
*
SEGUNDA EDICIÓN
y í
vi .W

w
c
,v
'is

l
y/
4
4 TO /
: % i

^
11

« Ü i
\

»
i
m V
a
/\ ’ rfX : • vSj S
JA J f * V
/

^4

í¿¡!« V
V

i
i «

Scanned with CamScanner


\

FUNDAMENTOS DE
PROGRAMACIÓN
1
Algoritmos y estructura de datos
VJ / AJOOlVf M oi r u t é t\ s
* j

Segunda edición -}f k


i. ^ ^ ' V I L! U J J
í / v r» •<
ri I n i ,|

{ ?
• yj li rv , i < !
? ’
i c/ > - i . ,,

•M) JoáMqj J ni
J . A 2 , A AV. ! UW tfi
* '

Luis Joyanes Aguilar


» »
Departamento de Lenguajes y Sistemas Informáticos t

Facultad de Informática
Universidad Pontificia de Salamanca en Madrid
c «* Munv

roü&tfatatio if
3
oo-rc-M r. t fc:.- - . . x

n© r FACULTAD DE
A »r
^
i\ { t \á CONTADURIA
Y ADMINISTRACION
prr <
BIBLIOTECA
.v; fjie 0025 roim ! .8

»•

McGraw-Hill
LISBOA • MÉXICO
MADRID • BUENOS AIRES • CARACAS • GUATEMALA •
SANTIAGO • SAO PAULO
NUEVA YORK •PANAMÁ • SAN JUAN • SANTAFÉ DE BOGOT • NUEVA DELHI PARÍS
Á
AUCKLAND • HAMBURGO • LONDRES • MILÁN • MONTREAL • • •

SAN FRANCISCO • SIDNEY • SINGAPUR • ST. LOUIS • TOKIO • TORONTO ¿


2
»

f
je

Scanned with CamScanner


r
> *
I
Editora: Concepció i
Diseño cubierta: n Fernández Madri
Juan García
t
V\\ k.

\f\
* t

d
r > g '

. 1
1
iv

FUNDAMENTOS DE PROGRAMACIóN -
Algoritmos y
estructura de datos. Segunda edició
n
No est á permitida la reproducci
ó n total o parcial de este libro, ni su tratamiento
informá tico, ni la transmisi ó n de ningun
electrónico, mecánico, por fotocopia, por a forma o por cualquier medio, ya sea
registro u otros m étodos, sin el permiso
previo y por escrito de los titulare
s del Copyright.
DERECHOS RESERVADOS O 1996, respecto a la segunda edición en espa ñol, por
McGRAW-HILL/INTERAMERICANA DE ESPAÑA S. A. U.
Edificio Valrealty, 1.* planta
.
Basauri, 17
I
28023 Aravaca (Madrid ) inIh « aA f hiA
ISBN : 84 481-0603-2 oorlj miol - ,:
gftfn
^t
? i? v ¿OfC í lgnoJ 'jb Oln lTtftftCq
Depósito legal: M. 8.023 1998 - ,, , ^
rv hhutiM no nonsumtfui'. ob : nricQ bi /J* vs / in i
'o
*

t
34567

*
89012
• *
09876543201
i ,v ^ *
Impreso en M é xico Printed in Mexico
*.« JT

‘ ^ Vi
Esta obra se terminó de
imprimir en Mayo del 2001 en
A? o ^
-Vj A
UTOARTE-
San Andr és Ateto No. 21 A
4CÍCol. Ind. San Andr
' V
«
és Atoto
Nuac>aipan Edo. De Méx. 53519
- •
^
^ .

Se tiraron 5500 ejemplares

V v
-
< «» »

4
«• r\
A\ r .

Scanned with CamScanner


) f
-
r 0
;
wr^.mrr /lni r>\ ) : .KtU.r v i;!*nin 3
: rff ; i ( .') / “ i> :; M •i J j A
(l

\ . : ;i

O f
- ^
U í r n i j 5Í » r * j< ! 1 . .- . i / r? ioUi:¡ r,i{ ; :* <y> :o > > K n i o ? d < M |
< ¿b iu »ijifio/ r t ¿ 4 - «

\ *

«
n^o r r f i
( VI -
Oi-
-
ii
1
CONT
7 ENIDO
a
r < nli : » : U >
hi - f » f j / ilJ . * r

r j.
*
.. ' j b Jr.i j. f l i t !!|: i , /;7
f
.! '
Ml but : M l ty I Mil1 J .« r
. M' l b / ! » .l b * > L£
O í*
dl
. / W .O ! M i< .
IJ » / i J
> !> . ; • i II ó J y ' v *r : > .n
'
/ . ? <*
. o\;J \ ! > /. i;f í!;; iqi iCl
or i >-/
'
) m1 " : M/ b i .iU
H? c
- 113*4*1
f

P; *

tloM - íiT n í » i
(
’ •) V , <4

* t
' jí , í ¿ j/ . ; . M i
' b. ‘ MIVA
" ) u r j r j; H
Prólogo de la segunda edició n
xill
“ * • • •• i •
-*
* « ^ •’1 > * * 11 » * J f« » / »
•i l i i i
;
< *4

Capítulo . 1. Algoritmos y programas „ : AA A: . .. ¿j . Le.... 1


1.1. Los sistemas de procesamiento de la u i , ', ; n ' ( r : u J « s’ ' i li í * > i , » Z .f
. . ... . 1 • * . . / •
^
< ó informaci naci ón
ó
. . <" j! , 1 j j ,¡ i •' , 1!
„ 2
1.2. Concepto de algoritmo ;... .r i i / i l l
.
i j

o i

4
í , -.1 - ' M11i .
n; 1.2.1. Características de los algoritmos ' I < .f
.1 '
.’
5
n 1.3. Los lenguajes de programación

1.3 .1. Instrucciones
i o i

.
*
T ^ • *
- .* > L » » í ; i y - loo .' i> í iiJ i J J MiO i y 1 1
a la computadora i
(
K i i /
6
7
— 1.3.2. Lenguajes maquina
« • A
* • Y 1 J i J I •

t ' i . vil 1
Í
* • . '' 1 « t1 i i » . « {* / 1 1
i i

- , , . . . . 7
1.3.3. Lenguajes de bajo nivel
r Í IOI > íiM Í > ll J Ú ¿J t f f l l J juTíí'. JlI P.t*
.

- fi í l l t j JxO « ‘ i TUI 'J U 1*0 Jk'.l&J ¿4 >TírjiiíVjlLl 8


^

1.3.4. Lenguajes de alto nivel


+ • » •
A • • T 1 1

t-v 1.3.5. Traductores de lenguaje........ ...,!


^
9
10
r) V - .5.1
„ - - . Interpretes
,
x < J Ül l O J ¡ „
l» r
1.3 10^
1.3.5.2. Compiladores ;
08 -
.1.3.6. La . ./ w r
compilaci ón y sus fases
. 11
11
i8
1.4. Datos, tipos de datos y operaciones primitivas
í8 - JL . , : J.
4.4.1. Datos num éricos '' LOD. < i: niiu » í¿ ib aT> I .o. f. 13
f8 - . MUII ’IM H I . .
ll í l í H l l I V U l UC. .. 13
15-
. ,
1.4.2. Datos lógicos (booleanos)
1.4.3. Datos tipo carácter y tipoM cadena
\
1.5. Constantes y variables
.. ... l . . I M i l I i . ' v M '
IU Í7U ' •
* .
- . ..0.1
(
15
r.8 1.6. Expresiones
On
* 1/
1.6.1. Expresiones antmeticas lo
.u.o.<
1.6.1.1^ . Reglas de prioridad
4

1.6.2. Expresiones lógicas (booleanas)


iSO í OíiifnoSu * bu ClUin ^íí 51) oiri/ rl
^ 20
22
fO
1.6.2.1. Operadores de relación ......” .....V. 22 .
.M ( /
1.6.2.2. Operadores lógicos..... v...............
o uoj ,
. ...:.......«.....
1.6.2.3. Prioridad de los operadores en iilastllKexpresiones
................... .......... ..... .. - -
3 l i - i í. .:;íLM * l üi » u í r • « ' i . , 24
lógicas
«
'
. . . . .. . .

25
)V 1.7. Funciones internas
1.8. . La operaci ón de asignación
.. d:v ^ . /.:Ui...L.ír .í L...J 1.1.- .. 26
; ;¿ „

i '.v‘ .. /..V...
,
J.V.VA' í, 21 . ....
- .
. .
..
f \ •

Y1 1.8.1. Asignaci ón aritmética


^vÁv L ..7 . . U íifii « ÚK
; ¿; » ¡ 28. . .. .. . •
i '

1.8.2. Asignaci ón l ógica i /i J - v v . mi ah tii i u


* ¿ »
* .1 ;. . . .. . . . .
29 .. ..
p ..
1.8 3 Asignación de cadenas de caracteres 29
p •
1.8.4. Conversi ón de tipo L .UU....J .......... ; i ...i 29

Scanned with CamScanner


VI Contenido

-
1 9. Entrada y salida de información 31
31
Actividades de programación resueltas 37
Ejercicios

de progra -
rnac¡ón° *UC*^n ^ Pro^*efnas con computadoras y las herramientas 39

o
3 res
,
? uc ¡ón de problemas
40
40
An
A
á lisis del problema 41
2.3. Diseño del algoritmo 43
2.3. 1. Escritura inicia] del algoritmo 45
•4. Resolución del problema mediante computadora 46
2.5. Representación grá fica de los algoritmos 46
2.5. 1. Diagramas de flujo 56
2.6. Diagramas de Nassi-Schneíderman 58
.
2.7 Pseudocódigo 59
Actividades de programación resueltas 64
Ejercicios
•»> 67
Capítulo 3. Estructura general de un programa
67
3.1. Concepto de programa 68
r 3.2. Partes constitutivas de un programa .., 69
t
3.3. Instrucciones y tipos de instrucciones 70
3.4. Tipos de instrucciones 70
3.4. 1. Instrucciones de asignaci ón ...

/
3.4.2. Instrucciones de lectura de datos (entrada)
3.4.3. Instrucciones de escritura de resultados (salida )
3.4.4. Instrucciones de bifurcación
3.5. Elementos básicos de un programa
— 71
'
72
72
73
1

74
3.5.1. Bucles •
’ j
76
3.5.2. Contadores
i

i
3.5. 3. Acumulador 79
on
80
3.5.4. Decisi ón o selecci ón . . . .
• •

Si 3.5.5. Interruptores 81
í* it
3.6. Escritura de algoritmos/programas 84
3.6. 1 . Cabecera del programa o algoritmo 84
3.6.2. Declaración de variables 84
j
3.6.3. Declaraci ón de constantes numéricas 85
3.6.4. Declaración de constantes y variables carácter i 85
3.6.5. Comentarios 86
3.6.6. Estilo de escritura de algoritmos/programas 87
r Actividades de programación resueltas 88
Ejercicios ‘
93
>? - :
•. •
}
Capítulo 4. Introducción a la programación estructurada 95
I

4.1 . Técnicas de programación 96


4.2. Programación modular
4.2. 1 . Tamaño de los módulos 96
4.2. 2. Implementación de los módulos 97
4.3. Programación estructurada 98
4.3. 1 . Recursos abstractos 99
99

Scanned with CamScanner


Contenido VI!

. - * , - f f 'í *'i l r . f i i t
4.3. 2. Dise ño descendente ( top-down )
4 '
t 1

¡íí "" •;•••


4.3.3. Teorema de la programación estructurada: estructuras básicas J 00

rs
re r
4.4.
4.5 .
Estructura secuencia!
Estructuras selectivas
* ••••, *
J jjj
iru
f
I' f
4.5 . 1 . Alternativa simple ( si - entonces / if - then )
4.5 . 2. Alternativa doble ( si - entonces -si _no / if - then-else )
^
105
r r
^ 4.5 .3. Alternativa múltiple ( segun_sea , 'caso_de / case ) '•••' Hl
\ 4.6. Estructuras repetitivas * •<
yf 4.6. 1 . Estructura mientras ( «while » ) 120

f ' ,.r
4.6.2. Estructura repetir ( «repeat » )
4.6 . 3. Estructura desde / para ( «for» )
*
. 125
128
r: c
4.7 .
4.6 .4. Salidas internas de los bucles
Estructuras de decisió n anidadas ri . 132
*
ri
C l <*
t- L
f
4.8.
4.9 .
Estructuras repetitivas anidadas
_
La instrucci ón ir a ( «goto» )
, ....... 138
142
144
Actividades de programaci ó n resueltas
145
i-l- r Ejercicios ‘
iU
160
Capí tulo 5. Subprogramas (subalgoritmos): procedi
mientos y funciones 163
5.1. Introducción a los subalgoritmos o subprogramas .'.
5.2. Funciones 164
5.2. 1. Declaraci ón de funciones 166
5.2.2. Invocación a las funciones L67
5.3. Procedimientos (subrutinas) 168
0? r 5.3.1. Sustituci ó n de argumentos/pará metros
.' 173
5.4. Ambito: variables locales y globales
5.5. Comunicación con subprogramas: paso de parámetros....
..u . . .1
174
178
r - 5.5.1. Paso de pará metros
1
) 181
'
182
5.5.2. Paso por valor 183
~r 5.5.3. Paso por referencia 184
5.5.4. Comparaciones de los métodos de paso de pará metros d . ....:.. 185
Qd í 5.5.5. Síntesis de la transmisión de parámetros
5.6. Funciones y procedimientos como pará metros
,
f .. 187
190
5.7. Los efectos laterales 192
lo 5.7.1. En procedimientos 192
5.7.2. En funciones . 193
5.8. Recursi ón (recursividad ) 194
.
Activid ades
.
de rprograma -
ción resueltas
.M i 1J I ' í . ¡ l i UJ i
‘ . i i • .l 1 <
A v, . . . .i n 197
. . Ejercicios
k 4 . •
f% ;
'

-' 1
> • - J U * • 111 f i i J
- ‘: J
i\ ó
. \ t » i • . . i. i t ! J í , r
202
r <
Cap ítulo 6. Estructuras de datos (arrays)
'
« • • - . • .. . . . . . • •

'
. *
.» M i *. . • .
203
I

6.1 . Introducci ón a las estructuras de datos 1


6.2. Arrays unidimensionales: los vectores 204
6.3. Operaciones con vectores

205
6.3. 1 . Asignación 208
}¡ñí
6.3. 2. Lectura/escritura de datos 209
..¡i . . . ; . . .. .. * 210
0? Z 6.3. 3. Acceso secuencial al vector (recorrido)
( tr. f
210
6.3.4. Actualizaci ón de un vector . > ; 2\ 2
.. .
6.4. Arrays de varias dimensiones
25
6.4. 1 . Arrays bidimensionales ( tablas/matrices)
6.5. Arrays multidimensional íMí
215 ^
C
¡
218

Scanned with CamScanner


contenido 221
VHI 221
_ nto
t i

, ,
Almacenamien to de arrays en memona 222
6.6. Almacen a
i ‘K cenain ^ ^ ^
de arrays multidimensiona
e
••••* ••i
» ’
•••••
224
Almacenamiento

»»
[ }i
6 6 2. ón resueltas
230
Pin Actividades de programaci £ .1.1
w, ,,

MI ,. .
,: i /
237
t f )


Capí t \ Las cadenas

as de caracter ess
caractere
. Z ^ ,
-
. w* * ¿L. 238
238
>i c f

rt. fntn
7 2. El juego de
ró rrr
s
caracterees
le caracter ^ " 1
.» ií 238
! j

rimo ASCII 7 V" o oan


240
7.2. 1 . Có¿digo
,

r i
7.2. 2. Código EBCDIC ,••••• ;
'“ "
V ;> 240
: 1 / 7.3. Cadena de caracteres
•••••
; ! 242
7.4 . Datos tipo carácter
, •••• - •• ; 242
’ “
i ""' •
: ... i
£1 ! . , , tes
7.4. 1 . Constan . i
", ’ •

\ ut-
••••« ••
7.4. 2. Variables 243
1.4.3. Instrucciones b á sicas con cadenas
7.5. Operaciones con cadenas A 4 i

_
U V1V I I W L»

!',? “ ’"üiuu úV
« VW
'
de una cadena ••••••"V,
7.5. 1 . Cá lculo de la longitud ••• . Z 4:)
r- u . hi nvilmoici ú /.Q í n i n i p / UAUst )
Kdt Comparaaci
7.5. 2. Compar ci ón
é
^ •

4 /'\ 1
7.5. 3 . Concatenaci ón

..W í 4 . Uí 46
247 ^
ó *! 7.5.4. Subcadenas •
248
TV51 7.5. 5 . B úsqueda 249
'. < . . . ¿ .> 4 , . 4 . . ... .. . h
7.6. Otras funciones de cadenas
8ó l
£ Tf 7.6. 1 . Insertar w imtl vtf . ó 249
!•••••- 250
l 7.6. 2. Borrar
: .¡
* tn¿ 250
4. . . , .
7.6. 3 . . Cambiar ,„ .
. .? ; .. . . . s . .4 . ; < U ú
¡ y. f 7.6.4. Conversi ón cadenas/números 251
Actividades de programaci ón resueltas ,,, .wm! ... . ..'. 252
£« l
A r Ejercicios .... , ,. , , . ,. , . , , . , v. 257
t > f .. . . .. t . ; ¡ ufjlsi toq (> ;¿*1 J.. T..c ••

Archivos (ficheros) :,, . 4 .. . . . .'.. . . ....>r .,. . , . M ¡, . , , . ... . j,. , . . ... .. , .. . ; .. . ,, : 259
apítulo
\r ¡
»
iroréstniciurajéií rqijick
^ i.“ .' ..- i ¿:. .:!2 ' :
j v n c ? f / j otno ¿ tt >unttnihyjo i <( v .ó*.C 260
2 - L
1 »
DPI . > oí ..

IP i
8.1 . 1 . Campos . .
8.1 .2. Registro s
>¿Ytl i o í, í V>7oV* *
*
f> ]
*
V ’ 261 r * ***

:ei 8.1 . 3. Archivos (ficheros ) ; :. ..:;::;.:;... . . 261


ivt 8.1 .4. Bases de datos 262
< !
‘ 8.1 .5. Estructura jerárquica. . . . ; .;. 262
Tf

,} r
8.2. Conceptos y delliiictoanesí *tw,naiñ!o4agtfa Xh «tlt? ?.«« /«firríít7Jlííí!?. ? ?J;?} ?¿ í .
8.2 . 1 . Clave ( indicativo) . :. ::. .: ;;.:. . : ; .
8.2. 2. Registro físico o bloque

íí ;
1 !
^í ^^^ 262
262
262
cffltifg
affiifoOTffi
. 8.3 .
8.2.3. Factor de bloqueo :::: WW
Soportes secuenciales y direccionables ...4;. i 4 .i;.4wn.u;í0» a /<nU.t .;iift..-4««tr. í id
8.4. Organizaci ón de archivos ^
9b ,

,
265
265
^ ... |

o 8.4. 1 . Organizaci ón secuencial . . . r « 266


' t'2 8.4.2 . Organizaci ón directa . .: ... .. iv... .." \ Lh .
267
8.4. 3 . Org ánizaci ón secuencial indexada
8.5. Operaciones sobre archivos ¿:. .. .-.v .:. .
UJ :. ü I . *
268
• ... 270
8.5 . 1 . Creaci ón de un archivo v.. j : j , * . .r, 270
ii. 8.5 .2. Consulta de un archivo 271
.fI ¿
> f'

8.5. 3. Actualizaci ón de un archivo ...


8.5.4. Clasificaci ón de un archivo ..
j. . J 272
273

Scanned with CamScanner


o W t o o *) 4 ^
CHITOLO ^ 6
v Contenido IX

!<>
i Ar
8.5 .5 . Reorganizaci ón de un archivo
8.5 .6. Destrucci ón de un archivo
. .. . .. . rU . .. .u.:ú.l..... .A L
¡
'
( ) 273
273
¿ . i .. . ,’ tl n. /.í
?o 8.5 . 7 . Reuni ón, fusi ón de un archivo i .'/. 274
^) .( *
8.5 . 8 . Rotura/estallido de un archivo i ; ...'........ . l í .'.
r ‘
« 274
Ó )! 8.6. Gesti ón de archivos 274
8.6 . 1 . Crear un archivo 275
<W 8.6. 2. Abrir un archivo > 276
'.r r > 8.6 . 3 . Cerrar archivos 278
r' ;
8.6.4. Borrar archivos ¡ 278
8.7 . Mantenimiento de archivos .
t
¡ > 278
8.7. 1 . Operaciones sobre registros 280
8.8. Procesamiento de archivos secuenciales (algoritmos ) [ 280
"

8.8. 1 . Creaci ón 281


r* .«»i* /
8.8 . 2. Consulta *i \ * r
' . . • • t • .i - ooi

t./ 1 •
8.8 . 3. Actualizaci ón ' 284
8.9. Archivos de texto r’
. . . . ..
Mr 8.10. Procesamiento de archivos directos (algoritmos) . . .... ;] '

287
0< > f 8.10. 1 . Operaciones con archivos de acceso directo .
’ '
.
’ 11
287
11
8.10. 1.1 . Creaci ón .. . ' ' * 287
t ' -F :
8.10. 1.2. Altas m
810.1 . 3 . Consulta 290
8.10 . 1.4. Bajas .... . ... .. . . ... . .t .'. . . . .. . .... . . ..
‘ ' '
: : » 292

.
8.10. 1.5 . Modificaciones . 1 293
i .:. ...'. /. .. .'... .’...'.... ...
.
8.10 . 2. Clave -direcci ón ..
'
294
aw .
8.10. 3 . Tratamiento de las colisiones 294
gor ,
8.10.4. Acceso a los archivos directos mediante indexación .; . 294
Oí Ji- _
o « A A *i p . . » : . .- , : ;
/ ' ' ’ A .' ' )
' . ! .
'- i » i i t
one
ro; 8.11 .
v •1 V /• f • X •
/ 1

Procesamiento de archivos secuenciales indexados . ....... ...V..


•« «««••

L
•••••••••«
•••«•««• a*

296
Actividades de programaci ón resueltas ..! ;. . . . . ...!. . . . . .. ..... . .
’ 1
297
?.( U-
-
i^rcrCTÜS 304
M Ui
í HRp^ ííl--:H- :-.-.1.:f;.¿r;.IJ.
,(
. Ordenación, búsqueda e intercalarf¡Sa*;::vbí-i.Clti nu .tb
5'A» .?cbi?.:üü
^ ^ 305
rítulo
Cap
Vof
V 01-
Y ^ Introducci ón
/ «Hiobmri
..
* . vyf , * y v"
v w
. 11
T r ** ** *
'

* *
.
* *** **
. 306
.. 307
9.2 . Ordenaci ón . . v 11tiíi.N Y Viv J i i v ¡ r > ' r. * v
- * * * * * * * *
* * ** ** ** * ***
* * * * * *** *• i
. .
801 9.2. 1 . Mé todo de intercambio o de burbuja ÍVy," rrt í ,“
PlH- ón por n
( Hi-
9.2. 2. Ordenaci inserci ó

9.2. 3. Ordenación por selección


ll í- 9.2.4. Mé todo de Shell -
V í l- 9.2.5 . Mé todo de ordenaci ón rápida (quicksort ) ...........
........ v.rír
uii L

9.3 . B úsqueda
\

27
01 l '

- 9.3. 1 . B úsqueda secuencial ^332


*
9.3 . 2. B úsqueda binaria
claves (hashing ) •••:y/rvi - jrr: - ^
9.3. 3 . B úsqueda mediante transformaci ón de claves . . . . . . . . . . . . . . .. . . . . . .. . .; V; - ‘
33R
9.3. 3.1 . Mé todos de transformaci ón de
9.33 . 2 . Colisiones ^
m 9.4. Intercalación •
*
Actividades de programaci ón resueltas
—— .• ::, víúfw* vr;vvh""v * v v .
^
,, * ; * *

•••• - •
'

^
3 5

at 1 JWIWIV -
Ejercicios
L/ »V
*
M • ,í ... j
,
» ^
.. V..;..,.VVV .. J,.. 35
y fusión externa (archivos)
Capítulo 10. Ordenación, búsqueda
>

360
r. ( •
10.1. Introducci ó n .t í -.
i
360
i i- t- 10.2. Archivos ordenados • • »

Scanned with CamScanner


\ V

'r \/
O
Ci s
4
:
O J O D '- J A'
X Contenido
..
361
10 3. Fusi ón de archivos
364
10A
10 4 Partición de archivos 365
10.4.11 * Clasificación interna
,, 355
rr
•f
í’Z
-•
10.4.2. Partici ón por contenidoón .... 366
t 10.4.3. Selecci ón por sustituci 268
10.4.4 Partici ón por secuencias
* *
*
jgg
"
archivos
10.5. Clasificación de ón por mezcla directa

369
' 10 5.1. Clasificaci
10 5 2. Clasificaci ón por mezcla
natural ¿n
por mezcla de secuencias equilibradas *
r 10.5.3. Clasificaci ón
t Actividades de programaci ón resueltas !
Ejercicios
, y listas enlazadas) 385
Capítulo 11 .Estructuras dinámicas lineales de datos ( pilas colas
datos 386
11.1. Introducció n a las estructuras lineales de
1
*

de datos 387
11.1.1 . Estructuras din á micas

-> r .l J 388
11.2. Listas ; * IJ*
390
11.3. Listas enlazadas *

11.4. Procesamiento de listas enlazadas / i 1 *


393
11.4. 1. Implementación de listas enlazadas con punteros 393
11.4.1.1. Creación de la lista 395

.
11.4.1.2 Inserció n de un elemento.... * 396
11.4.1.3. Eliminaci ó n de un elemento de una lista enlazada 397
11.4.1.4. Recorrido de una lista enlazada .' 398
11.4.1.5. Acceso a un elemento de una lista enlazada 398
, f|
^y t Ij
^
, ' { • /
i 1 ' * * ' I ; * l *
^ i

11.4.2. Implementació n de listas enlazadas con arrays 400


11.4.2.1. Creación de la lista 402
11.4.2.2. Inserción de un elemento 403
11.4.2.3. Eliminación de un elemento ...... 405
11.4.2.4. Recorrido de una lista ... 406
11.4.2.5. B úsqueda de un determinado elemento en una lista 406
,M : 11.4.2.6. Funciones 1 407
^ .
r
11.5. Listas circulares . rr..... ..... 407
11.6. Listas doblemente enlazadas .. ;l • * '
4Qg
1 1 . 6.1. inserción
11.6.2. Eliminación
h Ü l! ZIZZZZZZZI 409
410
11.7. Pilas „ .. . * '
í JZ
« r1
- . 11.7.1. Aplicaciones de las pilas ;... .. . ' ” ” 417
11.8. Colas ‘ j
;1 ( : 1 !' 1 ;V t

\' r f
4 jq
7C* i 1 1 . 8. 1. Representaci ón de las colas ..... 420
11.8.2. Aprovechamiento de la memoria
Z Ü . Z.' *
r c <*
426
11.9. Doble cola 1•t • . . J ;
1

4^ 8
;
.

•••;•*:•
Actividades de programación resueltas .. . ‘.l'
Ejercicios '
!
.'
!
... !..’
...

/
ZZ
• •


*

428
436
Capitulo 12. Estructura de datos no lineales (á rboles y grafos) .. 439

¡2 2 ¿T*' ' 6
"
" ' r:'
440
440
Sií!
^

“ rai :£ii::2Z Z!iZII


' "
(V ) 12.3. de un árbo18« 441
. 442
12.3. 1 . Terminologgia
rboles . .
* ****
ía de los
inc á
á rK^i
443
binarios.

Scanned with CamScanner


Contenido XI

Xi *
(
12.3.2. Á rboles binarios completos !. i ; f ! i FU
•• i * » t i 444
. 12.3.3. Conversión de un árbol general en árbol binario
I A i/

ro ? .....’ 445
12.3.4. Representaci ón de los á rboles binarios .........i .: !: .. ! 449
* i

12.3.4.1 . Representaci ó n por punteros ....//..' í.... . 1 . 449


12.3.4.2. Representaci ó n por listas enlazadas
V
¡Li; ;i 450
W)
12.3.4.3. Representaci ó n por arrays 451
12.3.5. Recorrido de un á rbol binario
r

.' 453
i 1 12.4. Á rbol binario de b ú squeda 455
12.4. 1 . B ú squeda de un elemento
f . i f\
457
F \? 12.4.2. Insertar un elemento : 458
M? 12.4.3. Eliminaci ón de un elemento 459
o j¿ 12.4.4. Á rbol binario mediante arrays 461
í
'í • *

12.5. Grafos i; ;. . 466


f )|
12.5. 1 . Terminolog ía de grafos 467
rr
12.5.2. Representaci ón de grafos 470
i' f ? 12.5.2.1 . Matriz de adyacencia ; 470
12.5. 2.2. Lista de adyacencia 472
Actividades de programació n resueltas i; 473
t c Ejercicios ;;; 477
• • . i ' .’ : v
'
.- 1 i . .’ . : ' r' > 1
'
! • 1

Capítulo 13. Diseño efectivo de programas y aplicaciones algor


í tmicas 481
13.1. Estilo .de programación .. i 482
13.1.1. Nombres de variables .; 483
13.1 . 2. Comentarios 484
13.2. Estructura del programa 484
13.3. Estructura modular y diseñ o descendente 484
13.3. 1 . Programaci ó n modular 485
13.4. Dise ñ o de programas 486
13.4. 1 . Codificaci ó n 486
13.4.2. Ejecuci ón de programas 486
13.4.3. Puesta a punto de programas 486
13.4.4. Manipulaci ó n de entrada/salida 488
13.4.5. Escritura de programas: la documentación 489
13.4.6. Documentaci ó n interna 489
13.4.7. Documentaci ón externa 493
13.5. Aplicaciones de gesti ón (an álisis ) 494
13.5. 1 . An álisis de oportunidad 494
13.5.2. Análisis funcional 495
13.5.3. An álisis orgá nico 495
13.5.4. Explotaci ón 486
Ejercicios 496

Capítulo 14. Tablas de decisión 497


14.1 . Introducci ón a las tablas de decisi ón 498
14.2. Definición de una Tabla de Decisión (TD) 498
14.2 . 1 . Reglas de decisión 499
14.2. 2. Modos de representación de las tablas de decisi ón 499
14.3. Tipos de tablas de decisión 504
14.3. 1 . Tablas de decisión limitadas 504
14.3. 2. Tablas de decisi ón de entradas ampliadas o extendidas 505

.4

Scanned with CamScanner


XII Contenido

j 14.3.3. Tablas
labias de decisi ó n mixtas i¡; ¿i
*
14.3.4. Comparación y transformación de los tipos de tablas í 1
i

f
506
14.4. Tipos de reglas de decisió n . ,, t r r i
506
»
14.4.1. Conversión de reglas «O» y «SI NO» _ 507
vu ... 508
14.5. Construcción de tablas de decisión . ... . 11 i r i '
509
in 14.5.1. Estudio de condiciones, acciones y relaciones
: t
? . 14.5 .2. An álisis y requisitos de una TD 509
14.5.3. Simplificación de una tabla de decisión 511
r¿ u.- i I i
511
14.6. Encadenamiento de tablas de decisión t : . i.. .. 513
8^4 14.6.1. Tablas abiertas 1 ....' 513
('O 14.6.2. Tablas cerradas ;¡. i ; < j .v.-...
' . l . . 514
f ót 14.7. Conversión de tablas de decisión en programas
.Vi 14.7.1. Programaci ón directa en lenguajes de alto nivel
14.7.2. Transformación de la tabla en diagrama de flujo
’. '. . 516
516
on- Actividades de programación resueltas
.. ..i . 516
v, 522
0*4 Ejercicios .
530
r
v .U
*
" >

.
. . . ::n>v , A, - .. M l ' . . 1.
Apéndice A Especificaciones del lenguaje algorítmico UPSAM ...;
. . ‘

Apé ndice B. Gu ía del usuario ISO/ANSI Pascal está ndar


533
545
.
Apéndice C Guía de sintaxis TXirbo/Borland Pascal 7.0
583
Apéndice D. Gu ía de referencia lenguaje C ANSI
607
.
Apéndice E Guia de sintaxis del lenguaje C++ (está ndar C++ANSI)
631
Apé ndice F. Codificación de algoritmos en lenguajes de programación ab 667
.
Apéndice G Glosario de programación ......; !;... Y.. . 687
.
Apéndice H Códigos ASCII .*......^........1 ......' 695
-‘i . . .
Bibliograf ía
. . úTimgmq tab ¿-iuK> uit>3 '
41
;:u 701
í>4
índice....
mlubtm fHibcnu i::' is'l \ 4. ! . /

¡V
..
J 707
librO 1-4.1 floi'JE'J Í 1
rdU - ob rió binoin £ ¡- 4 i
¿ cnifcH 'oiq .

Miii ' /motq -. í J ulnuq u í 44. i


88 b í .l í tb > \ Gb» iliiv ob n ' Jio . í uqin . . ) /. Í- . J o !
;
. . . . . . . rodo .;noo!u»b ;! v / itnfuoi ¡ oí) ?.. t l
v 8í- *
nnoKn m i jr. inoffiir.' i f 1 ó 1- 4. I
'
.
W4
-
( VI
wmt /. ü r . > ioi . t í iomu jf /fJ 4- 41 '
/

'

( / idlfeni;! í V ’ i í ‘"j ot ) / otroionoilq / . .

biiiduiij ii . qo db ¿ idllriA 14.4. 1 ' -

c'<4 í / . rK .'rjfiuj f¡ i¿ ili.nA £4 ó I


ó¿í
. . ooifi&gio ddlimA ' c . ó I
ó'" ; - nóbt> lófq / 3 4441
<íÓÍ i
rp >
-
'
- -
\ y
1
.. . noii» i ) ) b ob * i:IduJ 4!‘ “ '

f V
- , ,vl) yb •í.dc * n;l a tijbbtwboiJnl . 1.1 '
. •
*

o ;.- ( ¡ r, ; - <dd /d ! oí; ;


| .
c W » T '.( ' i *jf > rif « r jrnil <1i . .
.. . / •drofi !.' ; ¡
.
. . HOl - ..
W b Ob i ldfc' t > i 3Í > 'V / I S.
’ ' . KJ ! i .- ol)ot / ‘
' i- i )

5 JV • . . ! !.: J A i «oqil '

;l > . t , : . I t
,lA, T ¡ r .í t
t ; vr :I . i . t . .1,4 í f
* .M
v

Scanned with CamScanner


I

(K , Ml .3
* r*

. v*
. r
i l l s '»
* ¿ :*, M t * í
* vise T r* ; •
* * » () ohc *
. CV 1 ! * i lírit
' *
i i t

1
V » > | :
i
«

.
i
* i

r i .7 > » * (

f .. , .
j »‘
l fi >' . . t CAPITULO
i 1
Kwt m w woi
» .> , . otuhiu . o !. iVr n
rv ‘
i i
» »\ ALGORI. TMOS Y PROGRAMAS ,U.V ,
nlor ' í J {. í
i r » i
i: ,\ V i J
rr ; t *iu ''

• e- \ V '

i
.* loin / « iv . o nm y
• .? niir v - finut

^a-IOOFI :V G /' iV isTPl?


rt r> i * ; fs i i» A :• :V : OW-í r .
¿CU . •

CONTENIDO ' A O: : •* A » ; O •¿ «nr . juttt Mil Ai ' Vif


'
i j
' \
' ?! :. A

yl¿ !
1.1. Los sistemas de procesamiento de la información . : i • i
f l» fi "

1.2. Concepto de algoritmo.


> v> < 1.3. Los lenguajes de programació n. ' • '

1.4 Datos, tipos de datos y operaciones primitivas.


.
1.5. Constantes y variables.
1.6. Expresiones. ¡. ic . , ¡ t . » ••*> ‘
.

/ *i

1.7. Funciones internas . t .

1.8. La ón de asignaci ó n . - < .>A A i


_ operaci . . ... . I

..
»

.. . ,. . *
’ - Ai V A ’
' 1

\
i, - ,
1.9. Entrada y salida de
• /
informaci ,
ó n . ' A A .il s *
j , _

. ,x ; H * j¿ i T : » i .
*•
i '
i
» i

-;,n ACTIVIDADES DE PROGRAMACIÓN RESUELTAS .


EJERCICIOS. . ;

:u <M V \ r% <;!• »! >


;. A ' ' . V /W A "" "
; 1
A /
’ *. • ;

W \\ ) J ' A A •

. I * •; ) , - A . - 1
• »; • A: - - ," i I » '
*
- Y’ \ U\> - A A ! !f l i ‘ J
de
La principal raz ón para que las personas aprendan lenguajes y técnicas
/;• programación es utilizar la computadora como una herramienta para
resolver problemas. La resoluci ón de un problema exige al menos los
siguientes pasos: ' ' '
' ,f
! :' - ' i • . '
'
, . i Oí l JO’I
- ' I: ,*
.
J

. Definición
.

^ 1
1 nnfmipí nn n análicic del nrnhlpma
o análisis HPI problema .A linTjPl
. Diseñ o del algoritmo.
i) .
5 .> . * l * >
0. •
'
;u .. >m;mu ‘ ! * ••

2
' < ‘ l ü ' fjif! 3. Transformaci ón del algoritmo en un programa.
m .«
» ; iMH
i
»
» , -.
J

.
-
\ •.
. * r J. ' i• * ri \» »
-
4. Ejecuci

L. j V ón y vu u v ó n del programa
y validaci VJ y / i \J i i 11\A / i \y i i \A I I KJ i ui i

. .. ¡• ,u.\ 11 . 1- : . . *

Uno de los objetivos fundamentales de este libro es el aprendizaje y


dise ño de algoritmos. Este capítulo introduce al lector en el concepto de
algoritmo y de programa, así como las herramientas que permiten «dia-
logar » al usuario con la máquina: los lenguajes de programaci ó n .
Un algoritmo es un m étodo para resolver un problema Aunque la .
< ’• 1 popularización del término ha llegado con el advenimiento de la era infor-
m ática, algoritmo proviene de Mohammed al -Khowá rizml, matemático
persa que VIVI ó durante el siglo ix y alcanzó gran reputación por el
enun-

>
Scanned with CamScanner
H

2 Fundamentos de programación

ciado de las reglas paso a paso para sumar


,
rettaij „ .
,
íivid r

í
ó un método para encontrar
griego ( del siglo iv antes de Cristo), que invent
*

AI-Khowarizmí
UJL : > el má ximo común divisor de dos números, seque trata de con
considera
los algoritmos ).
el otro gran padre de la algoritmia ( ciencia
El resto del cap ítulo trata de los datos y las operaciones elementales
Wirth inven-
T i
¿\ V :r ’ f necesarias para el diseñ o del algoritmo . El profesor Niklaus
v k

V
'

’ ^ ~ tor de Pascal, Modula - 2 y Oberon — titul


v ó uno de sus m á s famosos libros,
* * ¡

, signific á ndonos que sólo


Algoritmos + Estructuras de datos = Programas
el dise ñ o de un algoritmo
se puede llegar a realizar un buen programa con
y una correcta estructura de datos. Esta ecuació n ser á una
de las hipótesis
fundamentales consideradas en esta obra.

1.1. LOS SISTEMAS DE PROCESAMIENTO DE LA INFORMACIÓN


Una definición antigua de computadora es: « una m áquina o aparato electrónico capaz de ejecutar
operaciones repetitivas muy complejas a altas velocidades». Ahora bien, esta definición no describe
las modernas computadoras. Éstas son más que una máquina de ejecutar operaciones aritméticas. De
hecho, los términos procesador de datos y sistemas de procesamiento ( tratamiento ) de la informa-
ción se utilizan con frecuencia en lugar de computadora (ordenador , en la jerga informática usual
en Espa ñ a). .aoUiMifcv y g - UPSJaoo ü fi t
En el uso diario, datos e información son esencialmente sin ónimos. Sin embargo, los informá-
ticos suelen hacer una diferencia: datos se refiere a la representació n de alg ú n hecho, concepto o
entidad real (los datos pueden tomar diferentes formas; por ejemplo, palabras escritas o habladas,
n ú meros y dibujos); información implica datos procesados y organizados.
Un sistema en general se define como conjunto de componentes conectados e interactivos, que
tienen un propósito y una unidad total . Sistema de procesamiento de información es un sistema
que transforma datos brutos en información organizada , significativa y útil .
La Figura 1.1 muestra los tres componentes de un sistema de proceso de la información: entra-
da , salida y procesador. El procesador , que puede ser bastante complicado, se representa por una
simple caja y puede aceptar datos llamados entrada , y esta entrada se transforma entonces para pro-
ducir una informaci ó n denominada salida o resultados.
Basados en este esquema, muchos dispositivos u organismos pueden ser considerados sistemas
de procesamiento de la informació n . Un termostato que controla la temperatura de un edificio es un
sistema de procesamiento de la informaci ó n . La entrada es la temperatura media y la salida es una
se ñ al que controla la caldera del aire acondicionado. El corazón de un animal o un ser humano es un
sistema complejo de procesamiento de la información.
El conjunto de instrucciones que especifican la secuencia de operaciones a realizar, en orden,
para resolver un sistema específico o clase de problemas, se denomina algoritmo. En otras palabras,
un algoritmo es una fórmula para la resolución de un problema.
: rt n r,\ *» r
:j tj

\\> « v ^
Entrada^ datos Procesador Salida=información
.^ iORi « x iir,m
n »r
Figura 1.1. Sistema de proceso de informació n .

Scanned with CamScanner


5
<

Algoritmos y programas 3

Para realizar un proceso se le debe suministrar al procesador un algoritmo adecuado. Por ejem-
plo, al cocinero debe dársele una receta, al pianista la partitura y as sucesivamente, considerando al
í
cocinero y al pianista como procesadores.
Cuando el procesador es una computadora, el algoritmo ha de expresarse de una forma que reci-
be el nombre de programa. Un programa se escribe en un lenguaje de programación y a la actividad
de expresar un algoritmo en forma de programa se le denomina programación . Cada paso en el algo-
ritmo está expresado por medio de una instrucción en el programa. Por consiguiente, un programa
consta de una secuencia de instrucciones, cada una de las cuales especifica las operaciones que debe
realizar la computadora. . , 19; , . ¡¡;q
Existen dos conceptos importantes a considerar en los sistemas de procesamiento de la infor-
mación: hardware y software. Hardware es el conjunto de componentes f ísicos de una computadora
— —
(Figura 1.2) equipo físico y software es el conjunto de programas que controlan el funciona-
miento de una computadora equipo lógico .
El hardware de una computadora se compone de:
— . lyik o : —.< //]
-
1. La Unidad Central de Proceso, UCP ( Central Processing Unit, CPU ). La UCP es el conjunto
de circuitos electrónicos capaces de ejecutar algunos cálculos sencillos como suma o multi-
plicación de n ú meros. La potencia de una computadora depende completamente de la velo-
cidad y fiabilidad de la UCP. ¡ .. . . .
'

L .J
_
2. Memoria central . La informaci ón I procesada '
> 4J
t
por la . UCPv se almacena normalmente en la
1* * r i » i I K» y
\ < i v i '
memoria central hasta que se terminan los c álculos. Los programas de computadora se
k

almacenan también en la memoria central.


3. Dispositivos de almacenamiento secundario ( memoria auxiliar ). Diferentes dispositivos,
tales como discos y cintas magn é ticas, se usan para almacenar grandes cantidades de infor-
mació n. Para ser procesados por la UCP, lós datos se almacenan en dispositivos de almace-
(
namiento auxiliar y luego tienen que llevarse a la memona central. r ?

4. Periférico o dispositivos de entrada/ salida ( E/S ). Estos dispositivos permiten al usuario


'
comunicarse con la computadora. Algunos dispositivos típicos de E/S son el teclado, la
impresora, monitor, etc. Un sistema de computadora puede tener diferentes dispositivos
periféricos conectados a ella... ,. n . ,
. r, . , r r , . : , n < ij v> 1 L * L» i
:r r u i
; ; u i "
En la práctica, una instalación grande de computadora puede tener diferentes UCP, cada una con
1
t
i• ( t ¡ : i. * i r obotri
¡ .
su propia memoria central compartida, una variedad de dispositivos de almacenamiento secundario
- í hcialu h
* ¿ -
Aiujvjl 1'
, . ;
wr« . tint ¡ i * ¿i :
'

ni » ) h ’' Xt : ni .i ó vAh : bi ' * i ifL


ji ;- ;
I;J i ,T iijpleuo oi>
, ,
.
nr —
k¿
"
<
M q
tj ú
,
T. Vl' S' í
\ r
n \
ufa :
t v ' nvolib ay
V ' ai
.

U í U J >' i
í A’ Ji* O í fl

Oírlq
>

Memoria ; .
bsrnoibi I central *
. ‘J usíq bb nóbfnodfib ü ! ivuiq
yjti ±m n : . íV !
'
IVa :
> ¿ V Ü Cf ! / v í rod e! n;í
-
w

( tu o!í > ¿ '.SI v t v f j h f q ííí t i > ñ or: UT ? n §mq rjb rol


]• n ; r ’ ¡
O’ O ¡ ! « J t { I I í ./ / ! ‘. i O. VJO í » ' #
; '• ’ '
* i

Dispositivos
i
‘'i • -
i
Almacenamiento i'WcÁ
• ; ' <
í }
• I f M ' .
f I : ( \

de ’ •

Unidad í. ; { >
entrada/salida * • *• *
secundario •

E/S . \t i central de •il Í O « í i ( memoria auxiliar ) í t

( periféricos ) proceso í / . M. . i
•v.’ vj ' i\ \ w. lis iil3- í '

ni Dh
n • » i X / : sl t V Vi '
íí nin u
ÍA n ' >
t
- Í1 l . 'ib <
i
{
.V M >1 \ 'b r- uitlbbt
lhi
i

t *
*

,1

>

Figura 1.2. Diagrama esquemático de una computadora (hardware) .

Scanned with CamScanner


-
i

4 Fundamentos de programación

edificio o diferentes edificios e incluso


y periféricos localizados en diferentes partes de un mismo i
i

diferentes ciudades o países.

.
/ %
I

1.2. CONCEPTO DE ALGORITMO


E objetivo fundamental de este texto es
Un programador de computadora es antes que " solver problemas de un modo rigu-

resolver problemas mediante programas , concepto que


se denomina metodología de p ogra-
, ya tratado, de algoritmo.
mación. El eje central de esta metodología es el concepto
que resuelva el problema pro-
La resolución de un problema exige el diseño de un algontmo
puesto.
» '1 M f I
1
i ; J i J
\s

Diseño , Programa , >


•» . . » f|
Problema del de
a r J» i
%

i algoritmo
;i
computadora

J • : f ; : , : 7;i <
» /

Figura 1.3. Resolución de un problema


~
.
r ; i
-
/) 'f. *
?
* " ' 4
»; ,i i U "O ’
‘ * i' * J J
'

i
;r . rr . i ;
i i

Los pasos para la resoluci ón de un problema son : i ¿ V í V. "


. V \ :
\

_
. - -r - r\
*£ • ; y - !: i , .
i • •

1. Diseño del algoritmo que describe la secuencia ordenada de pasos sin ambigüedades que
conducen a la solución de un problema dado. (Análisis del problema y desarrollo del algoritmo.)
( f '

— >
; "
. t


2. Expresar el algoritmo como un programa en un lenguaje de programación adecuado. ( Fase de
codificación. )
3. Ejecución y validación del programa por la computadora.
Para llegar a la realización de un programa es necesario el diseño previo de un algoritmo, de
modo que sin algoritmo no puede existir un programa.
Los algoritmos son independientes tanto del lenguaje de programación en que se expresan
como de la computadora que los ejecuta. En cada problema el algoritmo se puede expresar en un len-
guaje diferente de programación y ejecutarse en una computadora distinta; sin embargo, el algorit -
mo será siempre el mismo. Así, por ejemplo, en una analogía con la vida diaria, una receta de un
plato de cocina se puede expresar en español , inglés o francés, pero cualquiera que sea el lenguaje,
los pasos para la elaboración del plato se realizarán sin importar el idioma del cocinero.
En la ciencia de la computación y en la programación, los algoritmos son más importantes que
los lenguajes de programación o las computadoras. Un lenguaje de programación es tan sólo un
medio para expresar un algoritmo y una computadora es sólo un procesador para ejecutarlo. Tanto el
lenguaje de programación como la computadora son los medios para obtener un fin: conseguir que
el algoritmo se ejecute y se efect úe el proceso correspondiente.
Dada la importancia del algoritmo en la ciencia de la computación, un aspecto muy importante
será el diseño de algoritmos. A la enseñanza y práctica de esta tarea se dedica gran parte de este libro.
El diseño de la mayor ía de los algoritmos requiere creatividad y conocimientos profundos de la
& > ro ramac r1,
algoritmo ^ ^ ^
esencia, la solución de un problema se puede expresar mediante un
IpRlCJ Á . Í * - 'DI1}

Scanned with CamScanner


Algoritmos y programas 5

1.2.1. Características de los algoritmos . 7 „


Las características fundamentales que debe cumplir todo algoritmo son:

• Un algoritmo debe ser preciso e indicar el orden de realización de veces


cada paso.
• Un algori debe estar definido. Si se sigue un algoritmo dos , se debe obtener el
tmo
mismo resultado cada vez.
• Un ,algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; o
sea debe tener
un ú de pasos.
n mero finito
La definición de un algoritmo debe describir tres partes: Entrada , Proceso y Salida . En
el
algoritmo de receta de cocina citado anteriormente se tendrá:
Entrada: ingredientes y utensilios empleados,
Proceso: elaboración de la receta en la cocina. ‘peifit. Vzflva.
^ . r ú eoeSLT& ft -
ñ TOJ i ri tcv we, F
»

Salida: terminación del plato (por ejemplo, cordero), o


, . . M . V - ,4
‘ '

]
'

'

Ejemplo 1.1 : 7. ; : » r •y ,v ) \ vV, . ; .• f


*
f
i

examma-eiLsu-bancojde datos la ficha delá


2 yn cliente ejecuta un pedido a una fábricd
'
client pi el cliente es solvente entonces la empresaacéptael
- - ^
el pedido /Redactar el algoritmo correspondiente.Y
ft L
^ g fábrica
pedido; en caso contrario, rechazar

Los pasos del algoritmo son:


:
V * Lfn i 5* 51 Ohi- • ,• '
¿

n*
N l. Inicio.. . ? :; L
^2.
- Leer el pedid o.- -
3. Examinar _ Xa f_icha _ delujcl.iente
.
x 4TTrT e 1 clien

/Ns. Fin: '


~
te es solvente

^ , acepta r pedido; en caso contrario, rechazar


.
.^
pedido.

Eiempl 1'2
° v ¡ Á « nAR '. - Í ACP .;
es primo o no.
r% - f*
*

\
v
9

‘ ». í
(
'

*J
iv‘« *' < ’’
'
• CfV s V
un número
Se desea diseñar un algoritmo para saber si \ j r,
ás divi-
-
v Y

por sí mism o y por la unida d (es decir, no tiene m


Un nú mero es primo si sólo puede dividirse
, , 8, 6, 4, 12, 16, 20, etc., no son primos, ya que son divi-
sores que él mismo y la unidad). Por ejemplo 9 unidad. Asi, 9 es divisible por 3, 8 lo es por 2, etc.
y a la
sibles por números distintos a ellos mismos
por dividir sucesivamente el nú mero por 2, 3, 4...,
El algoritmo de resolución del problema pasa
f -
*# i

1. Inicio. del numero


, variable que representa a los divisores
2. Poner X igual a 2 ( X = 2, X
que se busca- N ) . , . . ’ fjun «r fjiJ • -b
3. Dividir N por X ( N / X ) . car
, entonces N no es un numero primo y bifur
4. Si el resultado de N / X es entero
al punto 7; en caso contrario, conti
nuar el proceso.
- v,
5. Suma 1 a X ( X <- X1 + 1 . -t
) - ,*. •• i» • - • ••

N es un numer o primo ; en caso contr ario , bifur car


_
6. Si X es igual a N , enton\ces
, v ••
' # 1 * - < .
' í 'I .
-- i
f
' '
' • * • * • i .'

al punto 3.

7. Fin. .'AUnv 'iVN í b ' A.Vvii ’ i .Vil


ü .
Esta condición puede ser sustituida por x
1 = n div 2 (donde dives el operador división entera). Véase Tabla l.l ,
página 19.
• A*

Scanned with CamScanner


s

6 Fundamentos de programación * «» r
~ u. -n « i
í
’ ti %9 **
anteriores serían:
#
r

Por ejemplo, si N es 131, los pasos . ,J i * '


*lr i
. . \ i¡ ri íTIf .’ C) V I JfD *J11n\r
X
• II * A ( ) i
i

1. inicio. el proceso.'
continua
3
'
A: 131 / X. como el resultado
3 ,. .

-
es entero ,
:
se
b o rr J
.
i

-
1
'
« '

5 X <— 2 + .1 luego X - .i J "

o *
l
al punto \‘jV Úi
/

' S Í como X no es 131 , se b i f u r c a


' ,

no es enter .
i >

3 y 4. 131 / X resultado r

'5. X <-

3 i 1 .X = 4 . al punto 3.
r í
.
: W *

'

6. Como x no es 131 bifurca


3 y 4. 131 / X..., etc.
i » n'V.';: » ..«
* i
. Urid5í#
/
I i *
i f

•'*. jV!'
¿ v.
7. Fin.
*
vi
; i t .t J

í "

l j •'
: Oí , T »» ' i

¿í VI ' - *
Ejemplo 1.3 - ’
i, f i
1 i
; .' . i , í i 1
r r
Mr
2 y 1000 .

rsu.
números pares entre i* * ' J

Realizar la suma de todos los w\\Á\wZ

^
«: i; i
4
- ib *
'
J ioq > o:
E1
PU,SersSiasepalab”
representar las sumas sucesivas 2 +
k y NUMERO ( variables serán denominadas
( 4 ), ( 2 4 6 ), (2 4 6 8), etc.
+ + + + +
más tarde) para
^
,
5 * 11 ) v)
.

. »con el siguiente
n se puede escribir
La.- vsoluci’ ówt ,
algoritmo: M V: . • .. • .
: KTm J • ** • i ' 1 4

' ’ i’ •
• ' '' ' '
I

1. Inicio.
2. Establecer SUMA a 0. »'/ £* • í
a 2.
r \y o íTÜ f’/ - - * '

3. Establecer NUMERO
4. Sumar NUMERO a SUMA. El resultado sera el
nuevo valor de la suma ( SUMA ).
5. Incrementar NUMERO en 2 unidades. ..

bifurcar al paso 4 ; en caso contrario , escribir el ultimo


6. Si NUMERO = < 1000
valor de SUMA y terminar el proceso.
7; Fin.

S. l nlqttm ) 3
1.3. LOS LENGUAJES DE.PROGRAMAC
W*
IÓN AS
'
' V > V \ \ .

V '
:
' '

Como se ha visto en el apartado anterior, para que un procesador realice un proceso se le debe sumi -
nistrar en primer lugar un algoritmo adecuado. El procesador debe se capaz de interpretar el algo-
ritmo, lo que significa .i . , <•

i r ¡ , /¡ ., t í
1
vio í > ‘ . !
- . i < •

•comprender las instrucciones de cada paso,


•realizar las operaciones correspondientes.

Cuando el procesador es una computadora, el algoritmo se ha de expresar en un formato que se


denomina programa . Un programa se escribe en un lenguaje de programación y las operaciones que
conducen a expresar un algoritmo en forma de programa se llaman programación . Así pues, los len
guajes utilizados para escribir programas de computadoras son los lenguajes de programació n y pro -
-
gramadores son los escritores y diseñadores de programas.
Los principales tipos de lenguajes utilizados en la actualidad son tres:

• lenguaje máquina ,
• lenguajes
lenguaje de bajo nivel ( ensamblador ),
• de alto nivel .

Scanned with CamScanner


Algoritmos y programas 7

n i b i.!>! A' lW |
5
: Ki < f ) í \ r ; ‘1! '
1.3.1. Instrucciones a la computadora
t

.'J » ,V 'i \ ,• \ .
i ,
L o s diferentes pasos (acciones) de un algoritmo se expresan en los programas como instrucciones
sentencias o proposiciones ( normalmente el té rmino instrucción se suele referir a los lenguajes
m áquina y bajo nivel , reservando la sentencia o proposici ó n para los lenguajes de alto nivel ). Por
consiguiente, un programa consta de una secuencia de instrucciones, cada una de las cuales especi-
fica ciertas operaciones que debe ejecutar la computadora.
La elaboració n de un programa requerirá conocer el juego o repertorio de instrucciones del len -
guaje. Aunque en el Capítulo 3 se analizará n con m ás detalle las instrucciones, adelantaremos los
tipos fundamentales de instrucciones que una computadora es capaz de manipular y ejecutar. Las ins -
trucciones básicas iy \ comunes a casi todos los lenguajes de programación se pueden condensar en
. ' AJ
I
-
1
'
'

cuatro grupos:
Vi { :fj > fl v ; JIJIJ • )
- *
*

Instrucciones de entrada/salida. Instrucciones de transferencia de información y datos entre


• dispositivos periféricos ( teclado, impresora, unidad de disco, etc. ) y la memoria central.
Instrucciones aritmético-lógicas. Instrucciones que ejecutan operaciones aritméticas (suma,
• resta , multiplicación, división , potenciación), lógicas (operaciones and, or , not , etc.).
• ciInstrucciones selectivas . Instrucciones que permiten la selección de tareas alternativas en fun -
ón de los resultados de diferentes expresiones condicionales.
• Instrucciones repetitivas . Instrucciones que permiten la repetici ón de secuencias de instruc-
cionesun ú o determinado o indeterminado de veces.
n v :. u ; '

_ _
'
*
-M '* >
L
ipe
^ ,
; ¡ MU : ::
' jr ; í: j / ' j r> > i *j :
ví *
r
.
.' S\
¡ r:
H ’ tfVinV
1.3.2. Lenguajes maquina
.
B

:K > i

• ' .j i
' ¿ • •
]j v; » f
*
; %( \- ¿ y. / *; . * ' -

Los lenguajes máquina son aquellos que está n escritos en lenguajes directamente inteligibles por la
máquina (computadora), ya que sus instrucciones son cadenas binarias (cadenas o series de carac-
— —
teres d ígitos 0 y 1 ) que especifican una operación, y las posiciones (direcció n ) de memoria
implicadas en la operació n se denominan instrucciones de máquina o código máquina. El código
maquina es el conocido código binano. ,
Las instrucciones en lenguaje m áquina dependen del hardware de la computadora y por tanto , ,
diferirán de una computadora a otra. El lenguaje m áquina de un PC (computadora personal) será
diferente de un sistema HP 9000 ( HP, Hewlett Packard ) o un sistema 6000 de IBM.
Las ventajas de programar en lenguaje m áquina son la posibilidad de cargar (transferir un
' Xi i ü o í t ' obviJfj OH lobiild *.v : !. f ' i jiU
..
, ; i
1
i / í iHl' - ' j

.
;

¡ ; . ’ !\ Mí jjj n ; .\ Ivb % 1 V J í V
I t t . í" ? oLi ; Uiq '
>

.
I
i j

Memoria e o »,
• jó ¿ /» 1
* I

- r '¡ ir ó
*
\ l éü i n j n n í fb ¿ ¡
u * b ^ nrsi ^ JIKUW í n • c » IHWSJ teman erni
t r j V M M i : *t
'

Direcci ón Contenido
• <* i 1(V j VTH r ' - fI *
v » ’ , i .
< •

S í . fn :1 L*
» • ' f !¡ ) ' > 1 *
i
*

Posiciones
0100
0101
0010
0100 u ^ ^ OOOO 1 ,
0000
'
0000 ;
0000 : : 0100 Lj
'
0101 1
... : «

de memoria 0102 0011 ’ ' • ' 0000 oooo *


'
0110 : - /

• V n/
i • y- wÍMíí nniii ói^ iob ’
? ¿ i obcyui'iuo / '

/ *
\
i <\
'
i

.
him nn ¿ ihii'j * M í i rrt

Instrucciones binarias (código máquina )


-
« •;

-
u •

Ti > r ftí l !
’ if - */ L• ¡ MU } . fTf i : /ti U u ,V.\ i l : f u , f , / < f ¡
’ ; i " 'i ; . , '
>nj y. ) \
Figura 1.4. Instrucciones en lenguaje má quina . ' -J Í MiU Ü r > ;, l

Scanned with CamScanner


r
8 Fundamentos de programación

de iraduccidn posterior, lo que supone una velocidad de eje-


programa a la memoria ) sin necesidad
cl n
cuci ón superior a cualquier otro lenguaje de Pro&

Los inconvenientes en la actualidad superan
a la „
recomendables los lenguajes m áquina. Estos inconvenientes
tajas
son:
)

t

lo que hace pr ácticamente no
lllJpM i

IO i ' ¡V .
dificultad y lentitud en la codificación ,
poca fiabilidad ,
dificultad grande de verificar y poner a punto los
en el
programas
procesador
.. L
(UCP, Unidad Centml de Pro
Prn . . . -
los programas só lo son ejecutables mismo
¡ i uu
ceso ). i ?: r v

Para evitar los lenguajes máquina, desde el punto de vista


del usuario, se han creado otros len-
guajes que permiten escribir programas con instrucciones similares
al lenguaje humano ( por des-
gracia, casi siempre inglés, aunque existen excepciones, como es el
caso de las versiones espa ñolas
del lenguaje LOGO). , . \ \ . \ VJ ? I I V ) ' n u <' : i u
.*w •
. *

Estos lenguajes son los de alto nivel y bajo nivel. * v, •/. i


> vf ‘vA •5 *
f ,

r f |ó ; .
' ,r O j \

. I 11
:
. ‘
' l '
-
1
‘ •

1.3.3. Lenguajes de bajo nivel ii

. b\ -y.U ' Vj /OÍ 0» •!' O


.. , . •
*
' , i

111,

Los lenguajes de bajo nivel son más fáciles de utilizar que los lenguajes máquina, pero, al igual que
ellos, dependen de la m áquina en particular. El lenguaje de bajo nivel por excelencia es el ensam-
blador ( assembly language ). Las instrucciones en lenguaje ensamblador son instrucciones conocidas
como nemotécnicos (mnemonics). Por ejemplo, nemotécnicos típicos de operaciones aritméticas son:
en ingles, ADD, SUB, DIV, etc.; en espa ñol, SUM, RES, DIV, etc.
* *“ '

Una instrucción t ípica de suma ser. ía: • c ' f ntnp i • •

ADD M, N , P * ;\ V jjo niHoi i ; / , mol >: jjiq no o . . .

. i . ;
Esta instrucción podría significar «sumar el número contenido en la posición de memoria M al
:
. niiwq
UU JQ - *-
*
\ *;
número almacenado en la posición de memoria N y situar el resultado en la posición de memoria
P». Evidentemente, es mucho más sencillo recordar la instrucción anterior con un nemotécnico que
su equivalente en código máquina: ,
: n 5 J T>i .: •i l :

• i
0110
. , : •
1001
-.
• 1010
.v ‘» - " 1011
w- . o r ru . : cuJ
’ v
'
"r
*

' n rui;* % ; \; :7ó. ;;


»

ó
* »
n
;
2 w ;i

; . . ; \V / ¿

Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la com-
putadora — en esto se diferencia esencialmente del lenguaje máquina — , sino que requiere una
fase de traducción al lenguaje m áquina.
El programa original escrito en lenguaje ensamblador se denomina programa fuente y el pro-
grama traducido en lenguaje máquina se conoce como programa objeto, ya directamente inteligible
por la computadora.
El traductor de programas fuente a objeto es un programa llamado ensamblador ( assembler ) ,
existente en casi todas las computadoras (Figura 1.5 ). , M- .

No se debe confundir aunque en espa ñ ol adoptan el mismo nombre el programa ensam
blador ( assembler ) , encargado de efectuar la traducció n del programa fuente escrito a lenguaje
— -
m áquina, con el lenguaje ensamblador ( assembly language ) , lenguaje de programación con una
estructura y gram á tica definidas. , ,
Los lenguajes ensambladores presentan la ventaja frente a los lenguajes m áquina de su mayor
facilidad de codificaci ón y, en general, su velocidad de cálculo. / . : ¡5 . i

v^

Scanned with CamScanner


Algoritmos y programas 9

Programa Programa
Programa objeto en
fuente en
ensamblador
ENSAMBLADOR
( assembler )
c ó digo ¡ \ .i
( assembly ) . mi á quina; ,
i : ' v* ‘ * ' i > * * í

Figura 1.5. Programa ensamblador.


_ n Ar.\a - r c , » y i .
; /1
^ /. . /O

Los inconvenientes m ás notables de los lenguajes ensambladores son:


Dependencia total de la máquina, lo que impide la transportabilidad de los programas ( posi-
• bilidad de ejecutar un programa en diferentes máquinas). El lenguaje ensamblador del PC es
distinto del lenguaje ensamblador del Apple Macintosh.
• La formación de los programadores es más compleja que la correspondiente a los programa -
í-
dores de alto nivel, ya que exige no sólo las técnicas de programación, sino también el cont
cimiento del interior de la m áquina . ; üWñ MU " , ,

Hoy día los lenguajes ensambladores tienen sus aplicaciones muy reducidas en la programación
de aplicaciones y se centran en aplicaciones de tiempo real, control de procesos y de dispositivos
electrónicos, etc.

e l & ugne! -> b eeio íoubmT . c .E . 5


1.3.4. Lenguajes de alto nivel


t »\ >
c n |V »
^ ' . Est á n diseñ ados para que
*
'' *'
V ' V! *
1 '
Los lenguajes de alto nivel son los más utilizados por los programadores

las personas escriban y entiendan los programas de un modo mucho más f ácil que los lenguajes
m áquina y ensambladores. Otra razón es que un programa escrito en un lenguaje de alto nivel es
independiente de la máquina; esto es, las instrucciones del programa de la computadora no dependen
del diseño del hardware o de una computadora en particular. En consecuencia, los programas escri-
tos en lenguajes de alto nivel son portables o transportables , lo que significa la posibilidad de poder
ser ejecutados con poca o ninguna modificaci ó n en diferentes tipos de computadoras; al contrario
que los programas en lenguaje m áquina o ensamblador, que sólo se pueden ejecutar en un determi-
nado tipo de computadora. nbc - : . . : r' : : i j p lOi jub.' /: ¡: i ; v : >
i 1 ' 5

Los lenguajes de alto nivel presentan las siguientes ventajas: , <


< :: ' > | ; ( !

> , .. < . ¡ • J í d / iU jiii í.) v 'JULHO ¿onomav


• . ; ivv v b i
;
Sim ?Qí \ ,
'
/ con otros len -
'M • ..
El tiempo de formación de los programadores es relativamente corto comparado
t THk MJtl
J / KÍ
>

* ' !> • ' m t1< i.


- • < t!l
)- til
¡ H IC *J { f » iV ; • J j . • .• Í ‘J ló'J
guajes.
.

- i sint
» « ql
1 J > ’ in . imms
'
í njJ nu. ,ií lbiHc íri
ácticas similares a los lenguajes humanos.
2 us iel jnn
• La esentura ^
de programas se basa en reglas
Nombres de las instrucciones, tales como READ, WRITE, PRINT, OPEN, etc.
• Las modificaciones y puestas a punto de los programas son m ás f áciles.
• Reducci ó n del coste de los programas.
Transportabilidad. -* »

Los inconvenientes se concretan en:

• fuente
Incremento del tiempo de puesta a punto, al necesitarse diferentes traducciones del programa
para conseguir el programa definitivo.
• guajes
No aprovechan los recursos internos de la máquina, que se explotan mucho mejor en len-
se
m áquina y ensambladores.
• Aumento de la ocupación de memoria.
• El tiempo de ejecución de los programas es mucho mayor.

Scanned with CamScanner


1o Fundamentos de programación

1 s programas fuente tienen que ser tra-


aunque a ,
se reduce a
práctica demuestra que su uso mayoritario
BASIC
FORTRAN BASIC Pascal Visual
C C++ COBOL . •
. jtiHvii'j . ' n . uvnvi « 1 . jUlpxm
I f . ,
’i t
.m •'

" í : ,\' * }

está n muy extendidos: ,


. .. ' y '• • '

y .
Clipper Ada Modula-2 Prolog LISP Smalltalk

y comienzan a difundirse:
J, t < )
. fl / oíí ' i - uW. viq - f * !•>!' ’ ’
. .. » ,\ f • .¡ f ? j y. - y , t ; i
’ ‘ f+ I 1 1 ) 1 )r i U
. '

' { •
1


1
*' •

' *! *
J ,‘
w

*
1
,
:
'
f r
‘ «
_
f l í )Y J í i f í • U / i
*
.
t
* *

Visual Object Delphi Miranda Eiffel v ‘ ‘ 1

ón orientados a objetos con sopor-


aunque los dos primeros no dejan de ser entornos de programaci n lUiWKJ
te en los lenguajes Clipper y Turbo Pascal. qrn -
. . ; ' -
i ’

-oiním:¿lo
1.3.5. Traductores de lenguaje
fnvm f ’ tfc íí * : ? r .L . C T .
Los traductores de lenguaje son programas que traducen a su vez los programas fuente escritos en
lenguajes de alto nivel a código máquina.
Los traductores se dividen enY:u i
-
,, V

-
,

,
j
i

Bí J L B B •í í»n o i o o i.n J < n i « i ,<<' OIíí J :t» nnjpi f í i í .


oii
in ¡i : :
o

_
' I ü M '.í í I
sutoihnoqabni

.
+ i
.

.
'

' <
-. .
) . . 'j ' '

j•-
. : "

compiladores, ¡ , j' i/.noj


'. . onM ' -
nd it'luoirmq
) '

> loonJoomoo unu ub o vi


; ¡;

unv
'

,bb < na fb; .nU.


- • ’
.
. .
/

ic i • .
interpretes. , ,
ü! o n p o l .cVikniVMwy .K i y u o W W W H íT üO¿ t a v i f l o l .. rOJ
,
1.3.5.1. Interpretes
* o c * ,
. i , ; , ).r¡Qidl ¡ fi ' ji
i > j tt ’ ití ' Alibfif í t fiuu ¿? nin o « oan « n> ot
.
'

Un intérprete es un traductor que toma un programa fuente, lo traduce y a continuación do ejecuta.'


Los programas intérpretes cl ásicos como BASIC, prácticamente ya no se utilizan, aunque las
versiones QBasic y QuickBASIC se comercializan todav ía con el Sistema Operativo
DOS que
corre en las computadoras personales. Sin embargo, está muy extendida la versión interpretada del
lenguaje Smalltalk , un lenguaje orientado o objetos puro.
' ' r
; , •. u ?.. > , /! > . '
rj |) ¡ f ; © .-
-
;i , *

.
' i • •

O f l > > '"yl i j - V i o MI : n i ,> • ’ ,',VÍ l '>'/ •


- ;

vpiq ru1 ! > jr un u 1 onorj. : \ i ; h',- i¡ ,- ; J e


"
" ’'
"i
' '
$ ¡
Programa fuente
< 'JL . ; ;( > r¡ ’ / >uboíI a i

.
, "

l > f l í IK * f ’.urpDtiT o

Intérprete ¡ i . ' • •
: • \\K\j i WyjíMl ?.i ) J

y -
r

’ • ílqju?
‘ Traducción y ejecución c I
i
\
i ( *1 í v • •
l í nea a línea i » ,|f \ i
I i
/
( .A , . ,

is * IV

Figura 1.6. Int érprete.I '5 »í i ^: ; .f


1
• \

Scanned with CamScanner


Algoritmos y programas 11

. * r' íí lfturi - * . •
i> r ! -r . v pro; ; ~ r> n i -
Programa fuente
-
i eti 'ay'. n "
íU • b ' AJ Oí'. ís'XJifj !3

v
: ••
-
¡ r ¡o > ; ; r f j .
vi¡> n : ¿ í . ^ T i ) . i *’
, i¡:
« •-
.. ,
rr «
1 ' i ' ¡1
i i -
! * '• *
» ') * >

( i'
WnHyuV '
i * >*if ? * í,orn jb
;

vsurtW
*
i !

Compilador * •* i
; ) jf . ji rmvim:; * - - -' U
sb
wl
. : .1 ¿
* h ?! T. IM Í ;' ) \
1

1 ' / > wh 1* ¿ jor) ti r ? b us » t \u \'0 f.


.
*

V: > n ) Programa objeto / i V CI v \ ' i *MV vS 1 \ V ) 7 *A Vi > i \ Ufv / .i -


iwti , •
• , 1
i
-
t

Figura 1.7. La compilación de programas. , {í : J , j


V- t *

1

Xit! •
! . ... i : ' / cmugmq b 8)1139( 9.92 •
'
1.3.5.2. Compiladores
obcivcm -b nófotmp sb o¿930iq Í3
Un compilador es un programa que traduce los programas fuente escritos en lenguajes de alto
nivel — Pascal , FORTRAN, .. . a lenguaje máquina. —
Los programas escritos en lenguajes de alto nivel se llaman programas fuente y el programa tra-
ducido programa objeto o código objeto . El compilador traduce — sentencia a sentencia— el pro-
grama fuente . - , ,7
Los lenguajes compiladores típicos son: C, C++ , PASCAL, FORTRAN, COBOL.

1.3.6. La compilación y sus fases


crr £ u. - o no ncbin . G . f r.uigr? *

La compilación es el proceso de traducción de programas fuente a programas objeto. El programa


objeto obtenido de la compilación ha sido traducido normalmente a código máquina.
Para conseguir el programa máquina real se debe utilizar un programa llamado montador o tnla -
zador ( linker ) . El proceso de montaje conduce a un programa en lenguaje máquina directamente eje -
cutable (Figura 1.8 ). ii : . ' C 1 / * v

t
' t. A:
- . i ; •: ;•
*

~
Programa fuente

J
-
?
í 1
i

<' e! r Compilador
itr (traductor ) : • n des i ;
en
< A . . »
_ :r
Programa objeto
O i4 ! *
r
crr t : 11 . -v

c1 Montador
L
^-
i i •%
1
»Í S oictM *
r

i * > í ¡ l

r Programa ejecutable
; en lenguaje rnáquina
j ÍU

Figura 1.8. Fases de la compilación.


i

Scanned with CamScanner


12 Fundamentos de programación

El proceso de ejecución de un programa Pascal, por ejemplo, tiene los siguientes pasos:

1. Escritura del programa fuente con un editor (programa que permite a una computadora
actuar de modo similar a una máquina de escribir electrónica) y guardarlo en un dispositivo
de almacenamiento (por ejemplo, un disco).
2. Introducir el programa fuente en memoria.
3. Compilar el programa con el compilador Pascal.
4. Verificar y corregir errores de compilación (listado de errores).
5. Obtención del programa objeto.
6. El montador obtiene el programa ejecutable.
7. Se ejecuta el programa y, si no existen errores, se tendrá la salida del programa.
zsiofosliqmoO S.S.E. r
El proceso de ejecución ser ía el mostrado en las Figuras 1.9 1.10.
y
Jh , ff ¡ . ,- • ' :{ ; ] j ;( .
/ i fl / V‘í ' , (W
*
j« .'A s O » V \V - »
? •
‘ *
* * * , .
‘ ’ •

,V f /! . I — bviif •
Programa 1i
- i, : , ri •' r » Vu n \
“' / in > ’ » fi .- o:? :
V \
I
« j
I ‘ i

J i . \ rj¿ - 3 tf /l ñ H 70 ÍJ
1 , « OVJWM ,- VIT í ^ WVH* obioub A '
i
'

Datos y srmui íunstg ,


programa Computadora
i ' ' >!( > 1 ejecutable 1' > jnKO
— i

i
'

*
r
Resultados r. ; r,J c, , <

Figura 1.9. Ejecuci ó n de un programa.


;j::; rq

>
.o’ : •' t i 1 > r .. /.Kf IC*f §< •' fK)Í CVl 'br> Ji 1 ó 83 ' cJ
M í UO: 'í i *> jJ
' íi. : . ifnof! 1' i
y Vyc ” . » obinsid í Jstdo ;

» , i , Programa . tgO K} > ¡ I W U V J I O j U : ‘


" VJ o :v Modificación r / U ' '

< •
T - r programa , u: u. n • <
, . fuente • 02 K Oiq \ V. v . n -
fuente ¡
. Ir’ . nu . rI )

r~ Compilador
i

»* nt ,
* .« * : ómñ i ü * j

1
i
SI , ^ Existen ^
i
errores en la
compilaci ón
^
y ,

f ~ ‘ •*
no

O * 0|/1 O S f í U »> r I

! Programa
y
¡

Montador Programa
ejecutable
. ) , * r. , ^•
-
. » 1 » nv: * TI
*
>C t

Ejecuci ó n

Figura 1.10. Fases de la ejecuci ó n de un programa .

Scanned with CamScanner


Algoritmos y programas 13

1.4. DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS


4 *
"
- • 1; * Hl ^ ff!9’ j t > H \ J : *J V HI íí H ííT
El primer objetivo de toda computadora es el manejo de la información o datos. Estos datos pueden
ser las cifras de ventas de un supermercado o las calificaciones de una clase. Un dato es la expresión
general que describe los objetos con los cuales opera una computadora.
La mayoría de las computadoras pueden trabajar con varios tipos ( modos) de datos. Los algo-
ritmos y los programas correspondientes operan sobre datos.
La acción de las instrucciones ejecutables de las computadores se reflejan en cambios en los
valores de las partidas de datos. Los datos de entrada se transforman por el programa, después de las
etapas intermedias, en datos de salida.
En el proceso de solución de problemas el diseñ o de la estructura de datos es tan importante
como el diseñ o del algoritmo y del programa que se basa en el mismo.
Existen dos clases de tipos de datos: simples (sin estructura) y compuestos (estructurados).
Los datos estructurados se estudian a partir del Capítulo 6 y son conjuntos de partidas de datos sim -
ples con relaciones definidas entre ellos. -J v .. * '

Los distintos tipos de datos se representan en diferentes formas en la computadora. A nivel de


máquina, un dato es un conjunto o secuencia de bits (dígitos 0 o 1). Los lenguajes de alto nivel per-
miten basarse en abstracciones e ignorar los detalles de la representación interna; Aparece el con-
cepto de tipo de datos, así como su representación.
Los tipos de datos simples son los siguientes:
i ¡rom me . .- L- n6iwM . • v . > *qiJ
.
numéricos (integer, real ) ,
lógicos ( boolean ) , .>«/ .gmttwpfcq ^wm • .
?

carácter ( char, string ).


Existen algunos lenguajes de programación FORTRAN esencialmente que admiten otros
tipos de datos; complejos, que permiten tratar los n ú meros complejos, y otros lenguajes Pascal
— — —
que también permiten declarar y definir sus propios tipos de datos: enumerados ( enumerated ) y
subrango ( subrange ).
) i é ti j ta’ rt ó’ i’ > i'> ; . rihmt :
'
; ' ’
.
• •

. . .
. i r. •
v •

1.4.1. Datos numéricos


El tipo numérico es el conjunto de los valores numéricos. Estos pueden representarse en dos formas
distintas:

tipo numérico entero ( integer ),


• tipo
• numérico real ( real).
Enteros: El tipo entero es un subconjunto finito de los n ú meros enteros. Los enteros son n ú -
meros completos, no tienen componentes fraccionarios o decimales y pueden ser negativos o posi-
tivos.
Ejemplos de n úmeros enteros son:
• »
- ,i f . **
,
' .
''
* V >r
i ! •'
• ,r * j

5 6
- • -15
20
4
17
1340 26

Scanned with CamScanner


14 Fundamentos de programación

*
Los enteros se denominan en ocasiones números de punto o coma fija. Los números enteros

máximos y mínimos de una computadora2 suelen ser — 32768 a +32767 . Los nú meros enteros —
fuera de este rango no se suelen representar como enteros , sino como reales , aunque existen excep-
ciones (enteros largos: FORTRAN, Quick/QBasic, C, C++ , etc . ) .
,. . » V
I ! . ’ - V .' . •
•'
• •

Reales: El tipo real consiste en un subconjun to de los n úmeros reales . Los n ú meros reales
siempre tienen un punto decimal y pueden ser positivos o negativos. Un nú mero real consta de un
entero y una parte decimal . r ! tb
Los siguientes ejemplos son números reales: s ¡ ¡ b i n ‘ j y. r:

0.08 3739.41
*
'i !f * . A.-
j
f'
' 'i
. -T
l. ' íJ 3

3.7452 i • i )
-5 2 . 3 2 1 • •/. f í OOVOJCf l 'j r! 1 '

-8 . 1 2
l
3.0
J J
• n »

; .
trr í .¡ • • i ñ .*? h ! J omoo
-'ol > r'i J
-
En aplicaciones científicas se requiere una representación especial para manejar números muy
grandes , como la masa de la Tierra, o muy pequeños , como la masa de un electrón. Una computa-
dora sólo puede representar un número fijo de dígitos. Este número puede variar de una máquina a
otra, siendo ocho dígitos un número típico. Este l ímite provocará problemas para representar y alma-
cenar números muy grandes o muy pequeños como son los ya citados o los siguientes: « .d »
<

. rwv. i : '. v oq ¡l oiqto


#
»; uiwrj
4867213432 0.00000000387 o í niv / . ti. b ,!. *
t ¿ oj

Existe un tipo de representación denominado notación exponencial o cient ífica y que se utiliza
para números muy grandes o muy pequeños. Así,
' •í vtniij
367520100000000000000

se representa en notación científica descomponiéndolo en grupos de tres dígitos:


/ rjcniin ! n ira iwiqtnoo *
*

000 000 » 000 n! V t >-


100 000
367 520
-
%

o mndir »
y posteriormente en forma de potencias de 10:

^ .

or. rt r ? un ^Oí BG . l’ Af
. 3 . 6 7 5 2 0 1 x 1020
•Cr*
^
y de modo similar: ti •
- t- • *> "*! -, t > o < m: !• , o '. i
vurntrii )
. 0000000000302579
I vi',1 t \ í u i •• ( »'«» nvf í iij : nqi ) *
se representa como á \WS \ \ \ V í ) oji ; . ! í i ? in - j . ii ;

3.02579 x 10 u ‘

* ' ou ' dual


11 t i ir/ j sotomun • < lili ti IV ji1 J * ' j 1.1 -’

que
La representaci ón en coma flotante es una generalizaci ón de notación cient ífica. Obsérvese
las siguientes expresiones son equivalentes: fTi > / j ¿ í . VjfTi ñ u ¿-i

3 . 6 7 5 2 0 1 x 1019 = . 3 67 52 07 x 1020 = . 0 3 67 52 0 1 x 1021 = . . .


s 3 6 . 7 5 2 0 1 x 1018 * 3 6 7 . 5 2 0 1 x 1 0 1 7 = ...

- En computadoras de 16 bits como IBM PC o compatibles.

K. ..

Scanned with CamScanner


Algoritmos y programas 15

En estas expresiones se considera la mantisa ( parte decimal) al número real y el


exponente (parte
potencial ) el de la potencia de diez .
i r j L i o j t V. *

36.75201 mantisa 18 exponente t *
* ) • » \ ‘
J Ui ! *'
*
i l !' 1 ’ *
*
• > ~ ’
Ji • * 11* 1
'
7
II
: lUli 1
f
1.4.2. Datos lógicos (booleanos ) 2 1 •

i rife ¿ i > :
#
:
, íí¡ i •
- •

El tino tó6xico — también denominado booleano— es aquel dato que solo puede tomar uno
de dos
valores:
i

c
i t

cierto o verdadero { true ) y falso ( false ) .


’ i

Este tipo de datos se utiliza para representar las alternativas ( sí/no ) a determinadas condiciones.
Por ejemplo, cuando se pide si un valor entero es par, la respuesta será verdadera o falsa, según sea
par o impar.
. V *
_ -I ... £ £ * C . -

1.4.3. Datos tipo carácter y tipo cadenav. ,v. , v * ñw v J v, >

. oí qmspj wq . - - -J .
. í o oi í
El tipo carácter es el conjunto finito y ordenado de caracteres que la computadora reconoce. Un dato
óq ó oitn
^
'
r
tipo carácter contiene un solo carácter.
Los caracteres que reconocen las diferentes computadoras no son estándar; sin embargo, la
mayoría reconoce los siguientes caracteres alfabéticos y numéricos;
boilnSD eobimraft
• caracteres alfabéticos ( A , B , C , Z ) ( a , b, c , z), ^
• caracteres numéricos ( 1 , 2 , 9, 0),
• caracteres especiales *,
sfitiG Tnuij i 1 1 non
i '
£ ~> í JWJOBIVQ . o
i * t ii
, :ui
en«

-
iqS .«oioUíóqBsiína EÍiirmona &nabfi3 finiJ 29
Una cadena (string ) de caracteres es una sucesi ón de caracteres que se encuentran delimitados
por una comilla (apóstrofo) o dobles comillas , según el tipo de lenguaje de programación . La lon-
gitud de una cadena de caracteres es el número de ellos comprendidos entre los separadores o
limitadores. Algunos lenguajes tienen datos tipo cadena . ,

Hola Mortimer '


' c. }> i í? r i 2* 75*
* *

' 8 de octubre de 1946 I

- .> n ? aJ - , . . ¿o!sboau
^
qK ni) • .
w ótait .
óóqfinu far stiunne /duVI .¡uíbilfav i;oob
"
- ;• rsk fiteaoo no?
61 ’ ^ '

RESUMEN : Los tipos de datos primitivos se clasifican en:

Datos
r
\U * : • '
> \ * \% 0

Numé rico Car á cter


i *

Lógico
i ¡i
*
w - i * >> 1 }r

r,
,? v *vyi - D ¿" H ¡ ti ? uir .
'
‘‘
' '
*
Entero
i

Real '
! - i
' '¡ t > A

Scanned with CamScanner


16 Fundamentos de programación

1.5. CONSTANTES Y VARIABLES


durante la ejecución
Los programas de computadora contienen ciertos valores que no deben cambiar
del programa. Tales valores se llaman constantes. De igual forma, existen otros
valores que cam -
biarán durante la ejecució n del programa; a estos valores se les llama variables .
Una constante es una partida de datos (objetos) que permanecen sin cambios durante todo el
desarrollo del algoritmo o durante la ejecución del programa. w y
9 i t r 14 **

Constantes reales válidas: Constantes reales no válidas:


1.234 1 , 7 5 2 . 6 3 ( comas no permitidas )
- 0.1436
*
82 ( normalmente contienen un punto decimal , aunque existen
+ 54437324 lenguajes que lo admiten sin punto )
iflOl . • í !
A7 ) PJ¡ / t
í til •
. > V - ü ¿S

Constantes reales en notación científica:


> . » * " .
A

3 . 3 7 4 5 6 2 E2 equivale a 3 . 3 7 4 5 6 2 x 102
. * •

* sv
Una constante tipo carácter o constante de caracteres consiste en un carácter válido encerrado
dentro de apóstrofos; por ejemplo,
t " |ff « f ! ip i 9M : : > ;
T
. *
'

.B• + • • 4 • 1

¿;¡ ‘ - • • tjU , * •< •. .. . .


. . .
.
*

Si se desea incluir el apóstrofo en la cadena, entonces debe aparecer como un par de apóstrofos,
encerrados dentro de simples comillas.
11 ti
/
\ - i %
¿S ) i \

i
/

Una secuencia de caracteres se denomina normalmente una cadena y una constante tipo cadena
es una cadena encerrada entre apóstrofos. Por consiguiente,
.r
^C Í j í fTIOO
.•i i
•Juan Minguez ' /
n U 3í¿¿ ü O (( «
« el !ir :
-
'

b > . í Cíü rcq - . y. - lbnóiqmo’ j st ñ te >i > oisnum lu ¿ o J. ICJ t L -


y
* j'iUhi
^ . w'v \ • -
{ i! / oiub ni nv. i > « nusiTá! .
«

’ Pepe Luis Garcia '

son constantes de cadena válidas. Nuevamente, si un apóstrofo es uno de los caracteres en una cons -
tante de cadena, debe aparecer como un par de apóstrofos;
Juan ” s '
! •. - r.r
/ 1 i

Constantes lógicas ( boolean )


Sólo existen dos constantes lógicas o boolean;
n: ~
1
, ocmftmuM
verdad falso

Scanned with CamScanner


Algoritmos y programas 17

Variables i»' i

Una variable es un objeto o partida de datos cuyo valor puede cambiar durante el desarrollo del algo-
ritmo o ejecuci ón del programa.
Dependiendo del lenguaje , hay diferentes tipos de variables, tales como enteras , reales , carác-
ter, ló gicas y de cadena .
Una variable que es de un cierto tipo puede tomar únicamente valores de ese tipo. Una variable
de carácter, por ejemplo, puede tomar como valor sólo caracteres , mientras que una variable entera
puede tomar sólo valores enteros.
Si se intenta asignar un valor de un tipo a una variable de otro tipo se producirá un error de tipo .
Una variable se identifica por los siguientes atributos: nombre que lo asigna y tipo que describe
el uso de la variable.
Los nombres de las variables , a veces conocidos como identificadores , suelen constar de varios
caracteres alfanuméricos, de los cuales el primero normalmente es una letra. No se deben utilizar
— aunque lo permita el lenguaje, caso de FORTRAN como nombres de identificadores palabras —
reservadas del lenguaje de programación . . r . •r
. - • • •
v » • *•
- mdI I
•"
'•# I

Nombres válidos de variables son:


V / i^ TvT > • . [ »; r* ¡A : .
^I
A 510
NOMBRES
NOTAS
/ ). .
- .1 t i. ¿ j ihJii'X JO '

^( í nj' íT 0 O í 1 J\ ) • % > hli ü fl

NOBRE APELLIDOS3
1 . .

>1 > ^

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

NOMBRE para representar nombres de personas \

PRECIOS para representar los precios de d i f e r e n t e s art í culos


NOTAS •
para representar las notas de una clase
:r SK " "


Existen lenguajes — Pascal en los que es posible darles nombre a determinadas constantes típi -
cas utilizadas en cálculos matemáticos, financieros, etc. Por ejemplo, las constantes n = 3.141592...
y e = 2.7482818 (base de los logaritmos naturales ) se les pueden dar los _nombres PI y E.
« K >; : U : -J !urv\ H .V Ah
- '

PI = 3.141592
E = 2.718282

Uti?* onii 4 ? n y.' - . , • . •> -y ioiav l i


. j
'
nfinimonsh ' . aaio í sv ?oí
1.6,. EXPRESIONES ^
*> }
' vp t . sni I ¡fiirji ob n *; \ li > .¡
"I J í" ri O A¡O ;.. í il“ j
Las expresiones son combinaciones de constantes , variables , símbolos de operación , paréntesis y
nombres de funciones especiales . Las mismas ideas son utilizadas en notación matemática tradi -
cional ; por ejemplo, ' . J *: ¡ ; »• .. . * .


.vTi tn v £> 3 r.a /^,>1 i )H } 1 ;|ñ at ;
. ¿ .

. . . ••
sb 7. ' ;.> !
J
a + (b + 3) + Vc
. :

+6 + (6 - 5) + ve

' *

* r V -v '
f

— '
‘ *

* < • '* í
• j
' *
t
•U .' - i
*
nA u i •
11 • •/
' «
;uu 7 U* i • \,

—’ —AISunos— lenguajes dei programaci


nt 'Si* ? *
-i n ¡
ón admiten
r «
\ • t * iirj
* » j »
"
/i . «
| * ’ • 1
/ i»
f
í ; ' • • •• •

como v álido el carácter subrayado en los identificadores.

Scanned with CamScanner


18 Fundamentos de programación

Aqu í los paré ntesis indican el orden de cálculo y V representa la función raíz cuadrada.
Cada expresión toma un valor que se determina tomando los valores de las variables y constantes
implicadas y la ejecuci ón de las operaciones indicadas.
Una expresión consta de operandos y operadores. Seg ú n sea el tipo de objetos que manipulan,
las expresiones se clasifican en :
aritméticas, i í ir * • . I rr '
J ) Su
lógicas, 11 •» í i' n¡ ', . y >
carácter. /
»
* i í n j' í r ¡ ‘J rji . : u / j, n i u * wjil < n > •f - *
»
/

El resultado de la expresión aritmética es f de


• 41 w vtrr'
tipo numérico; el resultado de la expresión rela-
;

cional y de una expresió n l ógica es de tipo lógico; el


resultado de una expresión carácter es de tipo
carácter.
i tí i i
I ,
Í ¿
i
-. . 11 . r* .
y I

-
A , <

'/ . ni f ‘ . » «; , *
;/ » J
f ;’ rA ¡\ j í UU .
1.6.1. Expresiones aritméticas .
i l í / / i í!:/'
i .i • .
'
» ./ • ]

H ; . 3 idíTK / ‘ f U j / ?‘ :
Las expresiones aritméticas son análogas a las fó
rmulas matemáticas. Las variables y constantes son
numéricas (real o entera) y las operaciones son las
aritméticas.

+ suma
u
- l « YA > t rj . • • •
-
. ; ü í 'j
resta
¿a> í y: i. *
? í; > .
*
< / % <*1 ?

^,do b nw nóhtbi -lomu


?!: *
nr. iJ..V .! multiplicación

/

j
divisi ón
\ ,

¿exponenciación
A
/ r

div división entera


mod módulo (resto)
•ílrh í di - ' , -
. .;
'« ti H'J -i ;: :
»
f
• / ‘. "
n ,! ¡ j /

l » •
- ;
. < r. '
: m
"( i ,
1
• •
'
Los símbolos + , *, * *, A ( r o * *) y las palabras clave div y Imod se conoc rá>;. >. :! l (J
i '
;
en como opera-
,
dores aritméticos. En la expresión

5 + 3

los valores 5 y 3 se denominan operandos. El valor de la


expresión 5 + 3 se conoce como resid-
íalo de la expresió n.
Los operadores se utilizan de igual forma que en matem
.
; r
- ~ .3 -
be en un algoritmo como A á ticas Por consig uiente, A x B se escri-
* B , y 1 / 4 x C como C / 4 . Al igual que en matemáticas el signo
menos juega un doble papel, como resta en A
No todos los operadores aritméticos existen- B y como cambio de signo en - A.
plo, en FORTRAN no existe div
ni mod.
en todos los lenguajes de programación; por ejem -
El operador exponenciación es

( \ en BASIC, * * en FORT diferente según sea el tipo de lenguaje de programación elegido
RAN ).
Los cálculos que implican tipos de '

mismo tipo si los operandos lo son datos reales y enteros suelen dar normalmente resultados del
un real ( véase Tahla 1 n tambi é n. Por ejemplo, el producto de operandos
reales produce
- U

Scanned with CamScanner


Algoritmos y programas 19

Tabla 1.1. Operadores aritméticos f r !qmof 3


/ Operador Significado Vr. •
Tipos de operandos » » » / /• i
Tipo de resultado I

»
A
y Exponenciación Entero o real r Entero o real
Supla Entero o real Entero o real
vi
Resta Entero o real Entero o real
V iJ (

Multiplicación Entero o real Entero o real


vlb 0 *
/ División s Real Real
div División entera * viL
Entero Entero
rr vt
mod Módulo (resto) Entero Entero

•i
v

Ejemplos:
5 x 7 se representa por
6 representa por
5 * 7
6/4
1>: í/t JOlr; db MllnoF .f.f.a . r
j
3
;
se representa por rm ?obnfiisq > / ijfn o wb ns reiJ *
uj tonoi ?? <fxs zsJ
3 A 7 ,
n< v v ; j
.
v . . i > i v \ ' ' . - . t ' ’ * • *. ' \ > li ¿liljrsn nnnmionst # t* - *
,
/M sb ns *
T »
u
• ?

Operadores DIV y MOD eulr> v teaJn &uiq mirra ¿abcmsons ni u wp


11 - i .i i . - ci
_
¡- _i I i ¿criío fi ¿onu
iU.]• . •f
;



*
i ti $ . i ‘ /
El• sí>mbolo /* se utiliza
*
i i•
i ' i
^
para la divisi•ón real y el operador div
. i < t / <
a • •i *
en algunos lenguajes , por ejemplo
* *

BASIC, se
) , suele utilizar

A div B
i \ ,:
el símbolo \ ; * representa
' .| -j . t la .divisi
w
ón entera
.. - r” —
-.. * I * : i
-
,

: hsbnon ;¡
. ..
- tii . • í • t -
4

I ' f ?‘J!
Sólo se puede utilizar si A y B son expresiones enteras . - Lllla parte enteraT de
y obtiene
* : t *
|

A / B. Por con-
siguiente, ,
i
° bom x vxb -co iobcwjo © #
'

r+
¿ttobmaqu
1 9 div 6 *

toma el valor 3 ma : babiioiiq Isugi sb amobfiiaqo aohsv libramos sb oseo IU!


* , r 1 1 J irabio lo «arasifi tsc] Míw t u >f
,
Otro ejemplo puede serla división 1 5/6:
^ -
15 |6

3 2 cociente 2. r olqmai3
I
resto * * . \
w > \ <\/ t Aútw.yu í V>\ ‘A * uW\ « >v . . . . Y , . » Vu 0 \
'
? \

En forma de operadores resultará la operación anterior:


* Id :í > * í Vi

* £ Í V>


1 5 div 6 = 2 1 5 mod 6 = 3 .- .y «

Otros ejemplos son: ó / l “5


: - «"
.0
*

1 9 div 3 equivale a 6 i
1 9 mod 6 equivale a 1
;

Scanned with CamScanner


20 Fundamentos de programación

Ejemplo 1.4
Los siguientes ejemplos muestran resultados de expresiones aritméticas:

Expresi ón Resultado . ; t Expresi ón Resultado


10.5 / 3.0 3.5 10 div 3 3

1/4 0.25 18 div 2 9


i v * j
/ , |r • , ‘i 1 J f /i
2:0 / 4.0 0.5 30 div 30 1
íL j < •
f u tí Ó'J
6/1 6.0 6 div 8 0
I \ <, *i-

• j 1 i r *, 1

30 / 30 1.0 10 mod 3 , 1
•» .
V! 1
0 "M /
6/8 0.75 10 mod 2 0

1.6.1.1. Reglas de prioridad V, * V

Las expresiones que tienen dos o más operandos requieren unas reglas matemáticas que permitan
determinar el orden de las operaciones, se denominan reglas de prioridad o precedencia y son:

1. Las operaciones que está n encerradas entre paré ntesis se eval ú an primero. Si existen dife -
rentes paréntesis anidados (interiores unos a otros), las expresiones más internas se eval ú an
OK primero.
* : ' r '
. - .

2. Las operaciones aritméticas dentro de una expresión suelen seguir el siguiente orden de
prioridad:

• operador exponencial ( , T o bien * *),


A
í o.v 'j'iq .'.:: ! '• 11*5- litJi ! LV /J KJ
>
olor
i

• operadores *, / , \ , .

í noiiisir»
• operadores div y mod,
• operadores + , -. Jj

En caso de coincidir varios operadores de igual prioridad en una expresi ón o subexpresi


ón
encerrada entre paréntesis, el orden de prioridad en este caso es de izquierda a
derecha .
Ejemplo 1.5

í ¿Cuál es el resultado de las siguientes expresiones?

a) 3 + 6 * 14 ¿>) 8 + 7 * 3 + 4 6 *
• wnscjoiii
’ ¿siobt ? rro si sttw . • \
a) 3 + 6 * 14 b) 8 + 7 * 3 + 4 * 6
i > vit
3 + 84 8 + 21 24

87 29 + 24
: ¡v •
^- j - IMK "

i \
53 *

Scanned with CamScanner


Algoritmos y programas 21

Ejemplo 1.6 ,4 o¡ r '

Obtener los resultados de las expresiones:


%

i .
-4 * 7 + 2 A
3 / 4 - 5

1. -4 * 7 + 8 / 4 - 5
2 . -2 8 + 8 / 4 - 5
'*
>
*

3. -2 8 + 2 - 5
4 . -2 6 - 5

-3 1
fi Q h
( ¿Wí DtfO í jd ) Siidlpcl ¿ 3« » r V •t

Ejemplo 1.7
I <J 7 n' f
ítmicas las siguientes expresiones algebraicas:
Convertir en expresiones aritméticas algor
-ChfiV5 ( x + y )
'

i '
'
1
'

C~ ÍF R -V e'f l)
,
-
f :
1 '
'

uwj . : ü ú\ . l ! ;• •• • "
oDifié Jnd < 3 tl í¡íTi5> nfn » v
• • •
- • *'

b a2 + b2 o ^ ÍL V \)
' ‘

*
. oleofl
'
> » njo ?fioig6l obniinidmoo tuumoi 3

?>.
w+
^——vv ri \ I .pG ' « 1

'
. f — ^ r
ÓV

-> * ^' • '


' -v -

fno ; O II
•• -
t
3 >l
a •
#

. '
- Ti

— — - -
óicfibrcb eslob
nnWtfKIIVI sqO
«< » «» í * | • \ 3. f
.f A tfg # #
*
1
l r% W *» MtW <

fv w) - '

, .. Mi- ^ jjs - 1 * » r v io:' .- 1


:
i\j i

r,
-
.

:v . ' j i j . /sdbp:. ! u
'
b v r .; .-. : í e-’ tv j -i
o ' Vjr
*i u\ • t .
- v. q i í iv
Los resultados serán: . i iddíí j . r. npn'> .v . rx . b: . ,. J
^^
'
w 3'yi
• • i; : - / : {< » . . •
. 1|3 • * .. . ’

.
5 * (x + y) V

V.
s \

a A 2 + b A 2 .
V

( x + y ) / ( u + w /a ) •
KOIDAJS íI sa ftoaAnsrao . ( 4 J 4 v • i iX 3 - l

x / y * ( z + w)

Ejemplo 1.8 . fió n í;! *


- » íK
eb aciobfv>c¡0 :£ . f sidri1 -: b c o r ;

t
* « /•< * *\

Los paréntesis tienen prioridad sobre el resto de las operaciones: ; Ji

A * (B + 3) la constante 3 s e suma primero al valor de B, despué s este resultado se multiplica por el valor
de A.
( A * B) + 3 A y B se multiplican primero y a continuación se suma 3 .
A + (B + C) + D esta expresión equivale aA + B + C + D.
( A + B/C ) + D equivale a A + B / C + D. i , ,
A * B/C * D equivale a { { A * B ) / C ) * D y no a ( A * B ) / ( C * D ) . vil . 1 Vs.

uU u :
Ejemplo 1.9
Evaluar la expresión 12 + 3 * 7 + 5 * 4.

Scanned with CamScanner


22 Fundamentos de programación
r
ón); por ello los
En este ejemplo existen dos operadores de igual prioridad, * (multiplicaci
pasos sucesivos son:
12 + + 5 * 4
21

12 + 21 + __
5 * 4
20

12 + 21 + 20 = 53

1.6.2. Expresiones lógicas (booleanas) »


lqm ;3
*
ti

Un segundo tipo de expresiones es la expresión lógica o booleana , cuyo valor es siempre verdadero
o falso. Recuerde que existen dos constantes lógicas, verdad ( true ) y falso ( false ) y que las varia-
bles lógicas pueden tomar sólo estos dos valores. En esencia, una expresión lógica es una expresión
que sólo puede tomar estos dos valores, verdad y falso. Se denominan también expresiones boo-
leanas en honor del matemá tico britá nico George Boole, que desarrollo el Álgebra lógica de
Boole.
Las expresiones lógicas se forman combinando constantes lógicas, variables l ógicas
y otras
expresiones lógicas, utilizando los operadores lógicos not , and y or , y los
operadores relaciónales
(de relación o comparación) = , < , >, < , > ,
= = < >. *
Vi
1.6.2.1. Operádores de relación
Los operadores relaciónales o de relación permiten t.
realizar comparaciones de valores de tipo
numérico o carácter. Los operadores de relación
sirven para expresar las condiciones en los algo
ritmos. -
Los operadores de relación se recogen en la ni. >
El formato general para las comparaciones
Tabla 1.2. du ¿'ji «>.I r

es
i0 1

expr é sionl
OPERADOR DE RELACION expr é sion 2
I

Tabla 1.2. Operadores de


relación i' f « JqfYii yl
* Í Operador Significado uv. vm
.
’ "- M U > l ,'
< VM
menor que »

A
- n* V

>
mayor que
V >' " <r" \ 1 • , *

<=
« C
llWU t
-
igual que
menor
'• M
o igual que
• i . SW. r
*
,¿
c 1
• Al
# •

>=
mayor o igual que
O í:. r clqrnsiB
distinto de
4
v ' ‘'.\ iu\ vy:7i

Scanned with CamScanner


nao Algoritmos y programas 23

y el resultado de la operación será verdadero o falso. Así, por ejemplo,, si A = ¡4 yB - 3 , en -


tonces vv . - IU í * . - "
'
'

„ t-
A > B es verdad

mientras que i ;
knomH / vio V,
/ \
i ¡IíAII íí II *. l > n 1

, V T
\’ . . -- ¿ •
\ ' T L ÍU í .l OUp 1 'jtfiLnorjriT !
(A - 2) < , (B - 4) es falso
tf f f Uíií r j J l 'j / i r, i *
. : *. ! JjO - ÍV ' J fi ’•
. , s J

Los operadores de relación se pueden aplicar a cualquiera de los cuatro tipos de datos estándar:
:, r . ¡ 4 ,. , . , ,j
I . J r f; f
. , •) T *
* *
> * * ' ‘ f*.
i 1i * ! ;
* J' .
- -
•‘ J

enteros, real , lógico, carácter.


La aplicación a valores numéricos es evidente. Los ejemplos siguientes son significativos:
' • .

:»(
. i . . , ; TA í I í . -J I !» ' í :•

¡
= . / v n.i
:

i"
*‘i Uv .nv »


NI

3
N2

6
-
Expresi ón lógica

3 < 6
— Resultado
verdadero
; (:
- \\ .
i
) \
V •
4?

.
. . 1

*7fl

falso".: ' ' ¿


-i ’ ;
ui3 C< C>
0 1 0 >1
4 2 4 . =^2 r,
'
' /a /ío
iwo iloib t’L olfidimi noi'jnfj 5 *
•, . O íT • •
8 5 fa /so .
o - o A ?i n ú í H mimtn J?. O r¿ ,on panoioülocj >
8 <*= 5 . snoioin
• r
/ ' í J <
9 9 9 >= 9 verdadero .
5 5 5 o 5 falso o;: '
r

' r. ivvt \ r -5 l ü r rrcn " V-T ^ \ * •' • •

Para realizar comparaciones de datos tipo car ácter, se requiere una secuencia de ordenación de
los caracteres, similar al orden creciente o decreciente. Esta ordenación suele ser alfabética, tanto
mayúsculas como min úsculas, y numérica, considerá ndolas de modo independiente. Pero si se con-
sideran caracteres mixtos, se debe recurrir a un código normalizado como es el ASCII { véase
Apéndice A). Aunque no todas las computadoras siguen el código normalizado en su juego com-
pleto de caracteres, sí son prácticamente está ndar los códigos de los caracteres alfanum éricos más
usuales.
Estos códigos normalizados son:

• Los caracteres especiales # , % , $ , exigen la consulta del código de orde-


nación.
• Los0 valores de los caracteres que representan a los dígitos está n en su orden natural. Esto es,
’ ’ < ’ 1 ’ , ' 1 ’ < 2 , . . .. 8 < ' 9 ' . 1 1 1 1

letras may úsculas A a Z siguen el orden alfabético ( ' A ’ < B , ’ C ’ < ' F , etc.).
• SiLasexisten 1 1 1

• etcétera). letras minúsculas , éstas siguen el mismo criterio alfabético ( ' a ' < ' b ' , ' c ' < ' h '
. >?
, „ .. .. . 77
En general, los cuatro grupos anteriores están situados en el código ASCII en orden creciente.
Así, ' 1 ' < A y ' B ' < ' C ' . Sin embargo, para tener completa seguridad será preciso consultar el
1 1

código de caracteres de su computadora (normalmente , el ASCII (American Standar Code for


Information Interchange ) o bien el EBCDIC ( Extended Binary Coded Decimal
utilizado en computadoras IBM diferentes a los modelos PC y PS/2)
Interchanee
6 Code *
'
) -

Scanned with CamScanner


24 Fundamentos de programación

, la constante false { falso) es


Cuando se utilizan los operadores de relación, con valores lógicos
menor que la constante true { verdad).
false < true falso < verdad
true > false verdad > falso

Cuando se utilizan los operadores relació nales = y < > para


comparar cantidades numéricas, es
exactamente.
importante recordar que la mayor ía de los valores reales no pueden ser almacenados
En consecuencia, las expresiones lógicas formales con comparació n de
cantidades reales con ( = ), a
veces se eval ú an como falsas, incluso aunque estas cantidades sean
algebraicamente iguales. Así,

teóricamente es verdadera y, sin embargo, al realizar el cá lculo en una computador


a se puede obte-
ón limitada de
ner . 9 9 9 9 9 9 . . . y, en consecuencia, el resultado es falso; esto es debido a la precisi
comparacio nes
la aritmé tica real en las computadoras. Por consiguiente, a veces deberá excluir las
con datos de tipo real.
. . . . , »' * f
V

1.6.2.2. Operadores lógicos


Los operadores lógicos o booleanos básicos son not (no), and (y) y or (o). La Tabla 1.3 recoge
el funcionamiento de dichos operadores.
Las definiciones de las operaciones no, y, o se resumen en unas tablas conocidas como tablas
de verdad. M .

a no a

verdad falso no (6 > 10) ; es verdad


vcxuau
•*.*i falso • verdad * t ya que (6 > 10) es ^ falso ‘

Oii * i'i • • t
:
. : . Lv . • • i i. - i . ví; o nouio !*; I;:!í VP ?ci
a b a y b .. .
i J ) i f. : •
- (tt . - -
s i i j j : ir * , ü *jiTjrni ; n ; *: » :.

u u ;-- *

verdad ^ verdad verdad a y b es verdad solo • ÍOfilCQ fUHSbtt


verdad falso falso si a y - b son verdad ' , ;
e
(A S
íí ;/ . íbnoqA
¿ -i falso
falso
verdad
falso
falso *> L ' íi f < ii . L tlia . ,- -j
' . n* -. «’sdsivsif.
^
o o’ a í q
jb
' ,

falso
. . okuzu
a b a o b ii i - r ( í bf : \ iii¿íín < ' ii . Oviifu
' , oj? 3
- L verdad
verdad
verdad i
falso
. verdad
verdad
a o b• sonn verdad
e t

¿919 . rtBO ÉOJ •
cuando a , b o ambas
falso verdad verdad son verdad
'
falso falso i
falso r. /• j j Mi \J C'J.VS)U v ?o. }
4
o
i.

J , .
.t * . I
Tabla 1.3. Operadores lógicos
Vl ’> i’ 1
1 * *
» HJjfiiftinr , \ hl o
' * v » j.; i ,


r Operador lógico Expresión lógica Significado
I
no ( not ) no p ( not p ) negación dep • ' ! r
'• < ’
, , y ( and ) p y q ( p and q ) conjunción de p y g ,v
,i -A
r

o ( or ) p o q ( p or q ) disyunción de p y <7 i . • > ' \


< ) o ! . y,


V

Scanned with CamScanner


A *V
Algoritmos y programas 25

xpresiones lógicas se pueden


mezclar operadores de relación y lógicos. Así, por ejemplo,
* yi; ; ' ,i\ j ¡

II y ( 5 < 10
K
( 5 > 10 ) o ( ' A ' <
>
' B' )
es verdad
e s v e r d a d , ya que ' A ' < ' B' ’
rr ¡ oiqmojS
Ejemplo 1.10
La Tabla 1.4 resume una serie de aplicaciones de expresiones lógicas.

1.6.2.3. Prioridad de los operadores en las expresiones lógicas


Los operadores aritméticos segu ían un orden específico de prioridad cuando existían más de un ope-
rador en las expresiones. De modo similar, los operadores lógicos y relaciones tienen un orden de
prioridad. n o.. . \ -v .
. . - * el 1 ll 1 r

t
l t>
j )

r* f f « « .t t Tabla 1.4. Expresiones lógicas *i


* i i )

Expresión lógica Resultado Observaciones



-1
(1 > 0 ) y ( 3 = 3)
‘ *
1

verdad
. , • •
r
!• n i o >i
_
J

!*
!; 1 e r i
. *

i
i'U Ziitl ^ -r - - . - ,f , , , T i , j ,» r p r
'
PRUEBA es un valor lógico falso
i
no PRUEBA verdad
(0 < 5) o ( 0 > 5) verdad
' irT
(5 <= 7 ) y ( 2 > 4 ) falso *

no ( 5 <> 5 ) . , verdad
. '• í , i ‘4 *
H *. • •* ^ * .‘‘.» * 1 * rM * -• 4.

( numero = 1) o ( 7 -> = -4 ) verdad numero es una variable entera de valor 5


t \
!

Tabla 1.5. Prioridad de operadores ( lenguaje Pascal )

Operador aly ’
.A
•* < Prioridad
.

no ( not )
y' 1 iJ
más al ta (primera operación ejecutada)
/ , * , div, mod, y ( and ) í ‘>r/ ! r * • i . ( .
r t .n *: • « ;!n 3 n ;.20 i ( X ) JXl .

o ( or )
!1 :: ooistiro Y ;! ernbsbonuh
• ó to! (x) OItioI
más baja (ú ltima operaci ón ejecutada)
<, >, =, < = , > = , o

) -
Tabla 1.6. Prioridad de operadores lenguaje BASIC
(

¡* Operador i v oí - ¡
Prioridad • t j' .
..
'

.
. .

*
• !

A <_ i |O Ol í .
más baja U ú xr .
.-
.
"* •

* /
div ( \ ) \x) r uvx
ü:
rr j ‘1 o l , i.l i1f IL U • * > !» *
mod U . v , •• t

+, -
<, >, =, o, < = > = . I
i vi y .( » ;- >?:. ? »* * «
*

t
J• i

no ( not )
y { and ) 4
más alta VJl 'iitl «
, < *
o ( or )

Scanned with CamScanner


26 Fundamentos de programación

Al igual que en las expresiones aritméticas, los paré ntesis se


pueden utilizar y tendrán prioridad
sobre cualquier operación.

Ejemplo 1.11
no 4 > 6 produce un error, ya que el operador no se aplica
a4 OU olqrn^' 3
no ( 4 > 14 ) produce un valor verdadero • I\ ‘ * V>
'
'
i' ¡\ » 1 >‘ *
V •'
(1.0 < x) y (x < z + 7.0) si x vale 7 y zvale 4 , se obtiene un valor verdadero

a^ O - wO r qxt> - 6l '

*, U10 i > M 9C- 0 - ‘ > 1# :. .t 'o-


ahjioi :
»

)I M . i íXjO < o ;
1.7. FUNCIONES INTERNAS in :;
-
j
i MI
fob ; ! I *
i

*
9

- t • M J -i
' >¡ n j

Las operaciones que se requieren en los programas exigen en numerosas ocasiones, adem
ás de las
operaciones de las operaciones aritméticas básicas, ya tratadas, un n ú mero determinado de opera-
dores especiales que se denominan funciones internas , incorporadas o está ndar. Por ejemplo, la fun-
ción ln se puede utilizar para determinar el logaritmo neperiano de un n ú mero y la función raiz 2
( sqrt ) calcula la raíz cuadrada de un nú mero positivo. Existen otras funciones que se utilizan para
determinar las funciones trigonométricas.
La Tabla 1.7 recoge las funciones internas más usuales, siendo x el argumento de la función.
.
!./ : [ ) fj / >
i
uS
f

Tabla 1.7. Funciones internas >

Función Descripci ón Tipo de argumento Resultado


i . --- r f : .. « •* r .\ i

abs(x) valor absoluto de x — entero o real igual que argumento


arctan(x) arco tangente de x : 1
- ‘ « centero o real ' rdri real
cos(x) coseno de x i - ' >0 entero o real real toluis . <.
exp(x) exponencial de x entero o real real ( Ion ) on
ln(x) logaritmo neperiano de x entero o real real Y • -vr "
-(1- ,

loglO(x)
. ¡m . logaritmo decimal de x entero o real real
w .
t * p n ó iafiTjn » > r< itlKA
redondeo(x) redondeo de x .= ,< ,
(round ( x ) ) *
real — entero
:
^noi ) aoiobmaqo ob bfirih
^ riS o r eldoT
• 1
. ,

sen(x) seno de x
( sin (x) ) * .Y - entero o real real

cuadrado(x) cuadrado de x
(sqr (x ) ) *
entero o real igual que argumento
•«
raiz2(x) raíz cuadrada de x Y
entero o real real c - cvn
ísgrt ( x ) ) *
trunc(x) truncamiento de x -
real entero sr ;
t »

* Terminolog ía en inglés. . v i M
« • t o

Scanned with CamScanner


Algoritmos y programas 27

Ejemplo 1.12 < M y)


t
>¡ i

Las funciones aceptan argumentos reales o enteros y sus resultados dependen de la tarea que realice
la Junción:

Expresión Resultado j « ?
h - jft F. )
i
raiz 2 ( 2• 5 ) • .....
ti.»
5
l » . . - i»
'* *

redondeo ( 6 . 6 )
i , » jl : ij , < , / ,
• * ‘ ? ; 1 ! i >1|
„ / *
i .
*
fr

7 . i jh r . > 1 • •
,

redondeo ( 3 . 1 ) 3
redondeo ( -3 . 2 ) -3
truno ( 5 . 6 ) i tuv feobsn iafifiri »132 A afdfihfi'/ « IB st/psoilin*'»
truno ( 3 . 1 ) i . b sup 3 .

ni no ,1¿A .TQ V OVMOT h Toq Bsalqmwi x x. obisiq 02


^
; n- . i r •
-i '

. .
truno
cuadrado ( 4 )
. . ;
16 . 1 * ;
^ . * ’ '

-

abs ( 9 )
abs ( - 1 2 )
9 Aí I

12
r
4

— >

.
O 'J r ud i-U v Al "> • . s- tA ) 7t hix A srnol 3up omiJ Íü WIJí V h
: / itcumo v. í »u ?:> obm uo
Ejemplo 1.13 tobo
Utilizar las, junciones internas para obtener la solución de lá.ecuación cuadrá.tica ax2 + bx + c> =- '0. í-
|
;j I V i: ' - . • 1.
. i • i J
"
• •

. Las raíces de la ecuación son . 6 j ntf ;


¡:.

— ^
mjs x tolev al» ,oücq obm/g*; b n3.00
^
.oli ítKtnonsms einoi or ; p toil:/ b obriv / usi ía / .-’ .ó
r ben» bs íó lobcisq . » hb - -
x=
-b +
^ b
2a
2
Aac
> \

o lo que es igual:
rr

xl =
-b ± ~Jb 2
.

- Aac
-Ty>r¡ '/ \ -
j.
v

x2 =
-Hub.
-
. ¡ v. rnauti Sí £ + Y nó iasiqxs 1J si» TOIIí V is

b ± yb 2 - Aac
2a
/ !
brns nsbWí b " sidmon ooreim la íUí HIJU oldi c 7
Oín -. i . A >!'-) >
\
< *! v
- .»
r

la
Las expresiones se escriben comox
b , rscrjnimn'j 1 r Mi »n aism -4 slda/ if*í c «fab/ íaulsfi
'
í / lolcv btmiimslsl »
2 Y* ) IfXBV B TI ¿m ‘ ¡ K
Sí ;oUiJns^ nsnsn
obfill ü
xl = (-b + ralz2 (cuadrado(b) - (
) ) ja Í Í ’
* . :
x2 = -
( b - raiz2 (cuadrado(b) - »
4 * a c)) / (2 * a)
sob SKIXS sb oq íi la x n ügs . nsoiliatb x nórscn|t o ab «snoo
ó i j

Si el valor de la expresión > uv *


) /
raiz2(cuadrado(b) - 4 * a * c)

es negativo se producirá un error, ya que la raíz cuadrada de un n ú mero negativo no está definida.
c
r\
, 'i ru y
i n i ¿'- jianiv 50 / fj • - ' ,

1.8. LA OPERACIÓN DE ASIGNACI ÓN


r
Vi l . vv. í. . :• “ : > ‘f ¿
'* ’ '
1

S
' ’ A
* % .A
La operaci ón de asignaci ón es el modo de darle valores a una variable. La operació n de asignació n
se representa con el símbolo u operador La operació n de asignación se conoce como instrucción
o sentencia de asignación cuando se refiere a un lenguaje de programació n .

Scanned with CamScanner


28 Fundamentos de programación

'* r 7
El formato general de una operación de asignaci ó n es:
¿

nombre de la variable +- expresión

La flecha (operador de asignación ) se sustituye en otros lenguajes por = (BASIC, FORTRAN) o : =


(Pascal ) C/C++. Sin embargo, es preferible el uso de la flecha en la redacción del algoritmo para evi-
tar ambigüedades, dejando el uso del símbolo = exclusivamente para el operador de igualdad.
La operación de asignación:
A <— 5

significa que a lavariable A se le ha asignado el valor 5 .


La acción de asignar es destructiva, ya que el valor que tuviera la variable antes de la asignación
se pierde y se reemplaza por el nuevo valor. Así, en la secuencia de operaciones
A <— 25
A <- 134
A <— 5

cuando éstas se ejecutan, el valor último que toma A será 5 (los valores 25 y 134 han desapare
cido). ?J r
-
La computadora ejecuta la sentencia de asignación en dos pasos. En el primero de ellos se cal-
cula el valor de la expresión al lado derecho del operador, obteniéndose un valor de un tipo especí-
fico. En el segundo paso, este valor se almacena en la variable cuyo nombre aparece a la izquierda
-
del operador de asignación, sustituyendo al valor que tenía anteriormente.
X <— Y + 2

el valor de la expresión Y + 2 se asigna a la variable X . ' '


Es posible utilizar el mismo nombre de variable en ambos lados del operador de asignación. Por
ello, acciones como 1

y\ f
^ [7
N «- N + 1

tienen
. f 11 ( \* ' * í ' ••
'
! . • • -* /
J{ ¡( ' , * *j ?’ '

t
' *
t \
sentido; se determina el valor actual de la variable N, se incrementa en 1 y a continuación el
resultado se asigna a la misma variable N. Sin embargo, desde el punto de vista matemático no tiene
sentido N <- N + 1 . - VI *
Las acciones de asignación se clasifican segú n sea el tipo de expresiones en: aritméticas, lógicas
y de caracteres.
*
iLtu ‘} * •

1.8.1. Asignación aritmética h tiir •» : »: i , i i ; :> y ion', i : : - ;r n •


-
Las expresiones en las operaciones de asignación son aritméticas:
lUM <— ,
3 + 14 + 8 se evalú a la expresión 3 + 14 + 8 y se asigna a la variable AMN , es decir, 25 será el
.
10 i - , Ó i 0An:?c!0 /V .3. T

valor que toma AMN


hr t y/ - > n!
TER 1 <- 14.5 +. 8 I
! :i : •

-
TER 2 4- 0.75 *^ 3;4 ^ r •' *
U r ! .<* 1 i r i t tyy ' ; ;vi J

. tV
y •

COCIENTE 4- TER 1 / TER2 * ' •* ¿t 1 :¡b '


iiV
'
í » tf > «
ll;
*J j ?! U\ O

Scanned with CamScanner


Algoritmos y programas 29

Se evalúan las expresiones 1 4 . 5 + 8 y 0 . 7 5 * 3 . 4 y e n l a tercera acción se dividen ,los


:

resultados de cada expresión y se asigna a la variable COCIENTE, es decir, las tres operaciones equi-
valen a COCIENTE <- ( 1 4 . 5 + 8 ) / ( 0 . 7 5 * 3 . 4 ) .
Otro ejemplo donde se pueden comprender las modificaciones de los valores almacenados en
una variable es el siguiente:

A 0 la variable A toma el valor 0


N 0 la variable N toma el valor 0
A i
— N + 1 la variable A toma el valor 0 + 1 , es decir, 1 >

El ejemplo anterior se puede modificar para considerar la misma variable en ambos lados del
operador de asignaci ón : .fe * 1 W . i

N 2
N N + 1

En la primera acción N toma el valor 2 y en la segunda se evalúa la expresión N + 1, que toma-


rá el valor 2 + 1 = 3 y se asignará nuevamente a N, que tomará el valor 3.
c; - ; . r ¿ b iolfí / ruj ¿liouboiq '

1.8.2. Asignación ló gica ^L *


*

La expresi ón que se eval úa en la operaci.óÍOlJkV


! J

variables de tipo lógico.


* "7
i i
*
f ¡ P. » . 2 ,
* 0 {
0 3.
n de asignaci ón es l ó*gica— . w . - ;! ¿ 1
'

. Supóngase que M,^ N y P son


# * t i

% j •p i

> *

M 8 < 5 i
ni i ;
N «— M o (7 <"= 12)
. yjioq :06 t. * SI * £1 rioai) . í to! r bfru moi A
. .. , •

P <- 7 > 6
p
'
j*
Tras evaluar las operaciones anteriores, las variables M, N y P tomarán los valores falso , verdad , ver-
dad . > ) > ;<
V- . 'J : iV ’i.'- loVwt W V
" >
O, > • '

/ .
1.8.3. Asignación de cadenas de caracteres JC
z l &i * Sxljp: —» x
La expresión que se eval úa es de tipo cadena:
.T -
' oiq /.a nb» .- j t ' jj in. :It.v.o: :\ l
X ' 12 de octubre de 1942 . ,V 1 '
» Y \ V' ) A

OÍ • ’
í ¡J ->
La acción de asignaci ón anterior asigna la cadena de caracteres ' 12 de octubre de 1942 ' a
la variable tipo cadena x .
( 5+ V . . :

; ;;>o n •
> ¡’ 3 1 ) S s - L t-y . •
• ¡ 'W -
. ' üt s n

1.8. 4. Conversión de tipo i . .( C £ ).!


v cv • » ' v ojjjq .
.V J i : tn . r
- .-c / i .. >: *, ,

/ ..
v
í>; j >: > . »! > i ¿ o1
En las asignaciones no se pueden asignar valores a una variable de un tipo diferente del suyo.
Se pre-
sentará un error si se trata de asignar valores de tipo carácter a una variable numé rica o un valor
numérico a una variable tipo carácter.

Scanned with CamScanner


n
30 Fundamentos de programació
, * ;' t ( \ n ( ' .Wirr> mmfuvo ot
Ejemplo 1.14 , i;j|*
tones .
C después de la ejecución de las siguientes operac
¿ Cuáles son los valores de A, By •v *»Í!í|nlj \<\ nt‘jy' j OllO
¡i J í l if íl (' i>» *
* / r: J- ¿
í
; ; /* o !I .
j
i -* '" * -•( f í iWlü V tí f!í j
1

-3 jUV Á l l l i i t
'

A 4 i )
B 4- 4

C 4

C 4 A
- C
+
+
2 * B
B
i , >y
»
B <- C - A \
I
\ * \ + \) v \\s I * f
A <- B * C

y B toman los valores 3 y 4 . . , . u, ! . •

En las dos primeras acciones A


.

' JU tob .v. qo '

_
C < A + 2 * B
4 J +O=
/a expresión A + 2 * B tomará el valor 3 + 2 * -
JJ

C «- 1 1 v ..

La siguiente acci ón
r : nrj d o3
C « — C + B ' '
r.
í ;olc <
••

Is. ciií fno! Uiip . .


i> el
1
.
i rjif! 3í n:; /
^im inun^/s 3« 7
t - •’
. Tile / h L1
producirá un valor de 11 + 4 = 15 iVA

c 15 BOtpdl nób : A .S.8. T


3 = 12 y por ú ltimo:
En la acci ón B <— C - A se obtiene para B el valor 15
- *' ! 5 e» 1 ¿
1

i
. Jí : ' f ' » JJ . í /. o - ' ¡ un
A < - B * C

A tomará el valor B * C , es decir, 12 * 15 = 180 ; por consiguiente, el ú ltimo valor que toma
A será 180 . —> ' i

Ejemplo 1.15 . .. m ,tm, epr, .


- I \.«T

,
L.
i i

¿Cuál es el valor de x después de las siguientes operaciones ?


x 4- 2
x 4- cuadrado ( x + x ) ZQVJ í of -. iss
. . o ab nfcfos
eb ssnibr nrfeA S. 8 . f ,
. . -
x 4- raiz2 ( x + raiz2 ( x ) + 5)
- K> t
• !CC
¡Á r J : .. i idií V ' » • '. é i
' ..- í q / v e.J
TLos
M
resultados de
VA i* A
A
cada expresi" ó* n son:
J

; '
M U* :. .• ea cl tip ) le pr . . ...: n rittru
• , '6 cas
X 4 — 2 x toma el valor 2
x 4- cuadrado ( 2 2) x toma el valor 4 al cuadrado; es decir, 16
-
+

ht ) el cnai 'u lonalnü ri ó iocxiaiVfi ab n d i o o u B J


x +- raiz2( 16 + raiz2 ( 16 ) + 5) x <: i ¡ opf ohlt - tv < .

en esta expresi ón se evalúa primero raiz 2 ( 16 ) , que produce 4 y, por ú ltimo, raiz 2 ( 16 + 4 + 5 )
proporciona raiz 2 ( 2 5 ) , es decir, 5 . . y 1 r .

Los resultados de las expresiones sucesivas anteriores son: i. i

x 2
í nuv Liu .i i . - - '\ < Aí ; S nvf ^uq on - \ n > i ^£ r } gj«?8 ¿r> l n -í <

" >
' * -*
(
l: ' H i /t i j / M U i f j vtiiV Os Id jn IV ( W bvMlis *
*
» * ' 1
X 16 •
>

X 5 * < o' jif : ! ¡ í;V tu ü * *

Scanned with CamScanner


Algoritmos y programas 31

¡
1.9. ENTRADA Y SALIDA DE INFORMACIÓN
l
»
i
. * ">

• »» fin u.* i ^ .r

Los cálculos que realizan las computadoras requieren para ser útiles la entrada de los datos nece-
sarios para ejecutar las operaciones que posteriormente se convertirán en resultados, es decir, salida .
Las operaciones de entrada permiten leer determinados valores y asignarlos a determinadas
variables. Esta entrada se conoce como operación de lectura ( r e a d ) . Los datos de entrada se
introducen al procesador mediante dispositivos de entrada (teclado, tarjetas perforadas , unidades de
disco, etc . ). La salida puede aparecer en un dispositivo de salida (pantalla , impresora, etc . ). La ope -
ración de salida se denomina escritura ( wri te ) .
En la escritura de algoritmos las acciones de lectura y escritura se representan por los formatos
siguientes: - -- f

leer ( l i s t a d e v a r i a b l e s d e e n t r a d a ) '/'

—>
. í
>.
"

Y,

escribir ( l i s t a d e e x p r e s i o n e s d e s a l i d a )
- HGvIrv - \ o
.I -* Vi )
Así , por ejemplo: .-
leer (A, B, C)
\ t A
— . , ,v

representa la lectura de tres valores de entrada que se asignan a las variables A, B y C.


escribir ( ' hola • .JlioubaG X 1
óni ¿sinsiugi?. <:¡! wo rauborq v 5ü p ob£ jItí*n i‘
vargas ' ) anofootrit .
visualiza en la pantalla — o escribe en el dispositivo de salida— el mensaje ' hola Vargas
NOTA T. Si se utilizaran las palabras reservadas en inglés , como suele ocurrir en los lenguajes de
programación, se deberá sustituir
/ i < üiolr, / ol
* W.. *

leer escribir
nn 1 rvr, :ü i ab ovitfeoqssb hru* ¿ q (xtcUioas ) LM . HJU J
por r
MDI I di •
'

vf li;
read write o bien print

NOTA 2 : Si no se especifica el tipo de dispositivo del cual se leen o escriben datos , los dispositivos
de E/S por defecto son el teclado y la pantalla. > \
— »

ACTIVIDADES DE PROGRAMACION RESUELTAS *


l •

*
> ?

1.1. Dise ñar un algoritmo para cambiar una rueda de un coche.


Algoritmo pinchazo
1. Inicio.
2. Si gato del coche está averiado llamar a la estación de servicio y bifurcar al punto 11; en caso con
trario, continuar el proceso.
-
3. Levantar el coche con el gato.
4. Aflojar y sacar los tomillos de las ruedas.

^
5'
0 “
° “ t0ra Í °S
" fl 0j S y qU Í ad0S' bÍ f rCar a paS0 4: en caso «mió
° “ ‘ ' . continue el “
6. Quitar la rueda .

Scanned with CamScanner


32 Fundamentos de programación
j
.I
f k

7 . Poner rueda de repuesto. ,


„ , con lanar el proceso.
volver al paso 8. e caso contrario
\
10. Bajar el gato.

,, LÜ , -
(a ) VALOR <
e valor de la variable WtU
4.0 * 5
*
I
,
después de a ejecncldn de las
siguientes

* I' ’
operaciones:

^ vb t í
(b ) -
X <r 3.0 .
— -
Y i 2 0
VALOR <
»

X * Y - Y I¡i' J
. -J

( c ) VALOR «
X <- 3
- 5

VALOR <r - VALOR * X

( a ) VALOR = 20.0
(b) X = 3 . 0 1
Y = 2.0
VALOR = 3 A 2 - 2 = 9 - 2 = 7 VALOR 7
( c ) VALOR = 5

jb ‘5
VALOR = VALOR * X = 5 * 3 = 15 VALOR = 15 • •
'
:
1.3. Deducir el resultado que se produce con las siguientes instrucciones
var entero: X , Y
X <- 1
;
t ,¡( i ‘J j C .‘ O I -> n *S VU : YJ ! I í•* •* .
" '
; v t \u u s j i
^
i’¿ A KT O'A
*

Y < 5 r ; ‘ ‘1
escribir(X , Y)
i i r' OíTMJ no ^ KJ * r <
1
r
»
Ití VI

:rnt
i

¿ rnfnyjT ; '

X e Y toman los valores 1 y 5. >

La instrucción de salida ( escribir ) presentará en el dispositivo de salida 1 y 5 , con los formatos espe -
c íficos del lenguaje de programaci ón ; por ejemplo,
l 5
/v
-
r «N
sí iiw ti

1.4. Deducir el valor de las expresiones siguientes: ir< > ci Mb ti 1


Or¡Í! \'J l i oci r?. : S \
r f 0*v\

X A + B + C
X . :l i b
r n J ' Á * io(\ ?\
X -
< A + B * C
X
X

< A + B / C
A + B \ C O A 'T i tí 1 K
\í .
7
J -in •
Ajn:
* .
'
r

. . bM
,
í . Sv?
" *" - "*«
*
. ' "* - ** * A ' i*

X —
< A + B mod C
X (A + B) \ C
. / i ;rn « r >\ ] ; ? : » 1
* *0 . 1.1
— , *
J v. 'J ! i ' i
X < A + ( B / C)
Siendo A = 5 B = 25 C 10
iViVV. '
.- \¡ .
Expresión X «

» •. » < ' <
.
A + B + C = 25 + 10 5 +
*
40 > . » \i / j f
i

A + B * C = + 2 5 * 1 0 5 255
A + B / C = + 2 5 / 1 0 5 * n ’
7.5
; í ;* / i i
|V I
A + B \ C = + 2 5 \ 1 0 = 55 + 2 7 i ; I I/ V * t

A + B mod C = 5 + 25 mod 10 = 5 + 5 10 Mi
- I
*
/
% A
P

(A + B) / c
= (5 + 2 5) / 1 0 = 30 / 10 3
A * I B / c>
‘ 5 + (2 5 / 1 0 ) = 5 + 2.5 7 5*. «i

Scanned with CamScanner


Algoritmos y programas 33
no

1.5. Escribir las siguientes expresiones en forma de expresiones algorítmicas:


N sen o( x ) + cos eno( x )
a. —AN# + P„
^
b) M + c)
P -Q tan( x )
w ~* !0! ü / ' / r
t
, mf A " 1
O í IIO
- b + -(t f
.

d)
m+ n
—P 1 -
m+ ’
r. • u y
- Aac
v i '," - no- n á t
fl

* —- ri
,/
P -Q 2Q
.
) * • '? '

) *

o» i r : >!i
M/ nonnn;;! ' 1
n '
HM / .
Q
5 «
%
f/ v
^
r

o; M/N + P
b) M + N / ( P - Q)
c) ( SEN( X ) + COS( X ) ) / TAN ( X ) nbrr.ib / » ';• ) v > v iji r;Iqm ! ) r: r; ni irrl *J /
d) (M + N ) / ( P - Q)
e) (M + N / P ) / (Q - R / 5)
f) ( -B + raiz2 ( B * 2 - 4 * A * C ) ) / ( 2 * A )
.
‘ ~ i' '
'
*
1.6. Calcular el valor de las siguientes expresiones:
4 .* 6 .
5 i 4H LA
a) 8 + 7 * 3 + 4

b) - 2 A 3 * ’ ‘ ,1 * i\
-
» *


C l
cj ( 33 + 3 * 4 ) / 5 c + A
’ 5 LTirxJ 0
d) 2 A 2 * 3 , i t\ .
e j 3 + 2 * (1 8 - 4 A 2 )
16 * 6 - 3 * 2 J .! r rí '
C tib í!/
. Oí *
' '
« v t . '

t »
* *

a) 8 + 7 * 3 + *
A- i L c s n o i j'j’ n '. rii -^ 1 i: . VL / > r::' . : -r
24 r.Maiinb. ob"nTi bt> ?.sn
8 + 21
29 + 24 A ib b 2ÍTOJ ü *
: wb m’ .n • !t unoi D *
53 i ib lüí: ‘!•> o

b) -2 A 3 '
i:
f;
- ! IzttSi
i II StttJ .
;

X V>

-8 OÍA v. ilix » na ; * nx ra íI .

7
'

(3 3 3 * 4) / 5 >
c) +

33 + 12 / 5 » *
^
; »i
- I 4 # <l
, i ; vi i J. 4
\ V

45 / 5 4
I
•4

i «
*
9
» •%
d) 2 * 2 * 3 t { ’
v
) a "iiobv A > I : v\au QK. jnWi
4 * 3 _ - **• v .
)

1
* • .
• »
12
r
* V

e) 3 + 2 * (1 8 - 4 * 2) t ¿i
I . it •i

3 + 2 * (1 8 - 1 6)

3 + 2 * 2
^

3w. 4. M

7 - N
'
Á

Scanned with CamScanner


34 Fundamentos de programación
!» • > / * « ;• \b i .1.1
- r
f ) 16 * 6

9 6 -
3 * 2
6 «* v
(
*
_
M
.* » í <\
I f
(i
9 0

1.7. Cómo se intercambian los valores de dos variables, A y B.


El procedimiento para conseguir intercambiar los valores de dos variables entre sí debe
recumr a una
variable AUX y a las instrucciones asignación siguientes:
AUX A
/ ' » i
A B 1A KU
B <r- AUX

Veá moslo con el ejemplo del ejercicio, donde


•. * f {
;( ) - T; VA
' (7 4 %
- VA
l >
i > » 7 V. i
A 4 -
-
10 / 4 4
(
' .
V ) (*>
B < 5
:> / y, i .-
<«r
?*, % ¿ i a
. Instrucción A B AUX .Observa ciones
7 *. ' f. . .
- , I.' \ r
A <- 10 10
B f -5 10 5
\

AUX <- A 10 5 10 La variable AUX toma el valor de A


A <- B 5 5 10 A toma el valor de B , 5
B AUX 5 10 10 B toma el valor inicial de A , 10

Ahora A = 5 y B = 10 . i\

1.8. Se tienen tres variables A, B y C. Escribir las instrucciones necesarias


para intercambiar entre sí sus valo-
res del modo siguiente:
V,

• B toma el valor de A
• C toma el valor de B
• A toma el valor de C I

* NOTA : Sólo se debe utilizar una variable auxiliar.


Utilizaremos una variable auxiliar AUX.
Las instrucciones que resuelven el problema
AUX A
de intercambio son: \
IG

A C
C B
B AUX

Comprobémoslo con los valores


de A, B y C : 5 , 1 0 y 15 * <*

Instrucción
AUX Observaciones
(1) A <-5 5
(2) B «- 10 —
(3) C - 15
ir
AUX «- A
~
5
io

— 15
__
10
A <- c 15 5
*
C
B <
<—
-
B
AUX
15
15
10
10
15
10
5
5
15 5
5

Scanned with CamScanner


Algoritmos y programas 35

no modifica su valor '^ ^ 3 ejerC1C Í


° de intercambio de valores entre dos variables, la variable AUX
.
1.9 Deducir el valor que toma la variable tras la ejecució de
n las instrucciones:
f !)
J
r *
i» : A -
4 4
i iJ Í L / ' !
jr
B 4- A (M
B 4 A - + 3
M í!
, . i . f ' Í L / •) "
r

•i ? i
J
/

Mediante una tabla se da un mé todo eficaz para obtener los sucesivos valores:
'
A B
(1) A 4 - A . 4 . : ’ . .. . r : . t

——
(2) B 4 A 4 4
(3) B 4 A + 3 4 7

Después de la instrucci ón ( 1 ) la variable A contiene el valor 4.1 ': ' i ; r

La variable B no ha tomado todavía ning ú n valor y se representa esa situación con un guión.
La instrucción ( 2) asigna el valor actual de A ( 4 ) a la variable B.

_ La instrucción (3) efect úa el cálculo de la expresión A + 3, lo que produce un resultado de 7 (4 + 3) y


este valor se asigna a la variable B, cuyo ú ltimo valor (4) se destruye.
Por consiguiente, los valores finales que tienen las variables A y B son:

r . n . ,
. ,
1.10 ¿Qu é se obtiene en las variables A y B, despu és de la ejecución de las siguientes instrucciones?
#
..

(

biiJcM I >¡1 / . < r Oí c* * * (Ü)
A 5 • " f> J : lo 1 » * « * ¡ I . í

*
'
t C
B 4 A + 6
í)\
A 4 - A + 1 í . .
f
;

B 4- A - 5
.3 f V cc:i / r’/ . L’. i

Siguiendo las directrices del ejercicio anterior: ' - i nobomr r; i r. i >


.¿aldjiilfíV ?ü ¡ J!I !¿. i, :'

. r \\ ,; > •

Instrucción A B Observaciones . !

(1 ) A <- 5 5 B no toma ning ú n valor 1 1 r’ O. i

( 2) B 4- A + 6 5 11 Se eval úa A + 6 (5 + 6 ) y se asigna a B
- 5 Jfcu 11
wfloioubób ,<mui9 «iugí>* :
(3) A ir; A +. l •
^
. ’
v> u
j < r
i
6 , • ; Se eval úa A + 1 ( 5 . + . 1)
; y se asigna a A, ; '
borrá ndose el valor que tenía ( 5 ) y tomando el
, -
tv.< \ • ¡ tnio
* nuevo valor, ( 6 ) A . . y mtm. eoJ .
(4) B <r - A - 5 6 1 Se eval úa A - 5 ( 6 - l ) y s e asigna a B
I Ir , iv : vrd (

Los valores ú ltimos de Ay B son: A = 6 , B .


= ¡1 : % ]
, , .. .
. I
rio
i 7 V i </ ft .• • i i f / u> O' ) -F
.
1.11 ¿Qué se obtiene en las variables A, B y C después de ejecutar las instrucciones siguientes? : J |
r. lii . r i t s : r;h •/ íTijiiuin ' » i < ¡K : - > > - *
i

A 3 / . | O .; >

nrv > ro . ¿ ;; v : { I
f » '
n v B 4 204 i

1
C 4 - A + B ) c; v :' Aí - . ! f' !
‘ ;

.

B 4 - A + B í r. rtn t
A —
< B - C

Scanned with CamScanner


36 Fundamentos de programación

>. . 1
Instrucción A B C Observaciones 1: / * 1 ( 1; - TI on
(1 ) A <— 3 3 B y C no toman ning ún valor t

( 2) B <- 20 3 20 C sigue sin valor


(3) C <- A + B 3 20 23 Se evalú a A + B ( 20 + 3 ) y se asigna a C
(4) B <- A + B 3 23 23 Se eval úa A + B ( 20 + 3 ) y se asigna a B;
destruye el valor antiguo (20)
(5) A i — B — C 0 23 23 Se eval úa B - C ( 2 3 - 2 3 ) y se asigna a A

Los valores finales de las variables son:


A 0 B 23 C 23

1.12. ¿Qué se obtiene en A y B tras la ejecución de •r , \ i


Uui •’ ¿ ¡' ¡' Al
'

A <- 10
| y fit oí * » * i
¡ r;
•¡ r - *

B +- 5 ;
r
i í*. 1 i
<
t
* A.' . 1 1
.
A —
< B « ) y
|
t
n ni d
B <— A ; < íí\ i i Mí . '

r i r •> i r • f J

Instrucción A B Observaciones
I

(1) A «- 10 10 B no toma valor


O í O r )
buO\ Mi .
( 2) B < — 5 10 5 B recibe el valor inicial 5
(3) A <- B 5 5 A toma el valor de B ( 5 )
(4) B <r- A 5 5 B toma el valor actual de A ( 5 )
-• t’
-
~ y

Los valores finales de A y B son 5.


En este caso se podría decir que la instrucción (4) B <- A es redundante respecto a las
su ejecuci ón no afecta al valor de las variables. anteriores, ya que

1.13. Determinar el mayor de tres números enteros. i t; » * i •


i

Los pasos a seguir son:


— i
<i
1 . Comparar el primero y el segundo entero, r)
.
deduciendo cuá l es el mayor.
2. Comparar el mayor anterior con el tercero y
deducir cuál es el mayor. Éste será el resultado
.
,
^ ^ oMa

\2. SObtener
PUeden d“ C0m( 0” cr e TOS

í tener el segundo
orZT "°
P^mer número (entrada ) denominarlo NUM1
número (entrada) denominarlo
,
,
ples en lo que se denomina refina

NUM2 • ’
^ *

t\ ú
iU

-
)
-

4. Obtener el tercer n úmero (entrada ) y


? * •
» « ¡guales. seleccionar «MI.
denominarlo NUM3
mYorSeZiLTesr„ merfMACrnr “ ^
3
numero
ú MAYOR.
6. Presentar el valor de MAYOR (salida ).
silos d°s enteros son iguales, seleccionar
el
-P >
7. Fin .

Scanned with CamScanner


I ' Algoritmos y programas 37

EJERCICIOS j \i fil io . '/J í O í


í /í v : ü zjiJ li'irr :! í

1.1. Diseñar los algoritmos que resuelvan los siguientes problemas: n *

a) Ir al cine. j| f . * • >

b) Comprar una entrada para los toros. £ A


ü>
{ L xi
c) Colocar la mesa para comer.
d) Cocer un huevo. ? r; Mr:. - ; , > /; h _
h
*
V .
e) Hacer una taza de té . ft tfi fll • vf M ft ti n n # K i K / i > k

f) Fregar los platos del almuerzo. .. A ' Í S, i/ . ”


' ,
'

g) Buscar el número de telé fono de un alumno. * Ai *


íl * *
*

h) Reparar un pinchazo de una bicicleta. C\ r k , •» *


i) Pagar una multa de tráfico. ; . t

j) Cambiar un neumático pinchado ( se dispone de herramientas y gato).


k) Hacer palomitas de maíz en una olla puésta al fuego con aceite , sal y maíz.
L) Cambiar el cristal roto de una ventana.
m ) Hacer una llamada telefónica. Considerar los casos: a ) manual , con operadora; b ) automático c
; )
cobro revertido . - , ¡> noi*snq 3 ¿amaiugie zul ab tnu Kbao ab TOíEV h isna ídO .OM

n ) Quitar una bombilla quemada de un ^ techo. *


úmero
o ) Encontrar la media de una lista indeterminada de números positivos terminada con un n
negativo. 1 JLCí7¿ T ui
!H .
r vij> (>
1.2. ¿Cuáles de los siguientes identificadores no son válidos? _
l hcr
~

S> t i ( í ^
:
' hL k. . Ravo
^^ re - ipu! sdoi a (
a ) XRayo
d) X fxim ? f (\
c ) R2D2
f ) N14 f f t ban O?. ~ OJ < C
v

sJC 1?5
g ) zzzz
( -i- £. * ( f t -zrr. ( i". Of > *
’ - i A

13. ¿Cuáles de las siguientes constantes no son válidas?, . y; bebhohq ni ttai&cer O

écP) 12
234
E - 5
' • J
b) -8 . 9 7 5 ,
< ¿j' o " 9no MrKI
°* W
' • ?e
.
* so
.
í 'hao
,
2b r ú a /
, , t
b ustf íwind . 11.1
. . ,

¿ 3.6 ¡ f ) 1/ 2 — -- — -
g) ^
32 , 767
E + 7
i) 3.5 x 10
h ) - 7 E12
0 , 4 S«
£P>224
^ '
f
- V-

k) 0.000001
^ r E1
í t<oa taca 7 : Yi
1.4. Evaluar la siguiente expresi n ó para A = 2 y B = 5 :
?. } fio;'' 7
( £ brc.i • . ('i
£ bom ( ?. Iban;? t ) C\
-
éj j ú í ^fcZ ' / 4 - / ' 3.5 ' " - /¡m r' bon “ ) ( v
;
/ iAttvA ’ ú-.i í J • 1 .
5
- 3-0 •
r¡a l f : ; ' el
1.5. Evaluar la expresión T ’ 5


b
4 / 2 * 3 / 6 +
12
6 / 2 / l / 5
K
A
-
25 /
2 / 4 * 2 i . "
£ "
,. í ; La \ ..
(o
< ;'. S
ítmicas: :
1.6. Escribir las siguientes expresiones algebraicas como expresiones algor

1 v;
+ yl a+b *
3x + 2 y

) *
a) - 4 ac b
h ~ ~
> 7 c)
2z
d)
c-d
x+y 3x » a
e ) 4x2 - 2x + 7 D 8) T h ) xyz
x 5 be
y ~y
i) ’ ' j ) 2 nr k ) - 7i r 1 l ) U 2 - x , ) 2 + ( y2 - y , ) 2
x2 - xl 3

Scanned with CamScanner


ón
38 Fundamentos de programaci
^
'

* *»
: 4

como expresiones algebraicas


á *

algoriinricas
.
U Escribir las signes expresiones mWa .1.1
'

. , 1i } i ,
., , . i
•, T
1 1
> i
• i
i * * * •' I

•' l!
, . ,r < .
i

a) b A 2 - 4 * a * c - 17 •! 1
X * 12
b) 3 * XA 4 - 5 * XA 3 + < .
i f l ;s : l ü .
* I I * 1/ , . 1¡ » D (ó
( b + d ) / (c + 4 ) '( / f t >
»<

c) A (1 / 2 ) >> 1*
1
* •>
I
'
2 + y A 2)
M
d) ( -x- A -
V V V
:
es y el valor de C es 1, evaluar las siguientes expresiones
.
1.8 Si el valor de A es 4, el

a) B * A
valor de B

BA 2 / 4 * C
5

-
¿ si l i
« tM 'V t h í i, ' t h " df. ' tf V Á • • ' ‘
x
“ : -V
- ; , 1 i .; > ' IJ Í! ..
i

A 2 •„ .» v „i . ¡f . • ,/ t í , t ;.
(A * B) / 3
()

c) ( ( ( B + C ) / 2 * A + 10 ) * 3 * B
) - 6 ; . , ,; n .

1.9 . Si el valor de A es 2, Bes 3 y Ces 2 , evaluar la


-
expresi ó n: _
.Aj
«v r v f a r i A n *
(
1
,v
r
. 11' “ >.* ! •
í. ;ni i-/
'
'
•!

j '¡ • J i * i * > » i
'
í i l! ¡ ' . i
O
!l
‘ - *
'

j
r
t.V
/1
.
, . \.> i; r rnO O
a A b A c
.:.
r, f '. ! Ll'jV H í
¡
*1 » cb 1 Jt
;
r r

i iw
^
i , • • ' • ; . 1
i. „ WJHC
»i í>
¡\ ! , • , iinjruui
I ia J I : ; • ; l i o> VO
• í
* »x .
<J * 1
'
»f '
í
»

. . . U - ' M'-j '
— .f •
no / 0 ! o 'i ‘
» '
'

1.10. Obtener el valor de cada una de las siguientes expresiones aritméticas: , í M ' 1 s\
n
a ) 7 div 2
nis! - - »i n ú n ob ubi ;r r n ¡i , il ; rui ob fibou
«
1
.

V <
b ) 7 mod 2
c ) 12 div 3
d ) 12 mod 3
e ) Omod 5
»ol il« K », i ) : ; ?. jlfisiu
^ ^ .Óf P !

r I
* -

(o
• »• >

f ) 15 mod 5 0^ S'i !o
g ) 7 * 10 - 50 mod 3 * 4 + 9 V ->
h ) (7 * (10 - 5) mod 3) * 4 + 9 \\\ . V
'1 » c
_ . * <v

NOTA: Considérese la prioridad de Pascal: más alta: *; / , div, mod; más baja:

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


decir si

no es una expresión válida: l a \ 1*1 *

a) 9-5- 3 * V
r
,
b) 2 div 3 + 3 / 5 . **
1

v 4 i
^f»
c) 9 div 2 / 5 (\
J) 7 mod 5 mod 3 V1 ( ;1 ( ni (A
e) 7 mod (5 mod 3)
f) (7 mod 5) mod 3 ...,q iioi
i " irp/j . r.'
i Uiy : .,i u. uluvH .b. l
g) (7 mod 5 mod 3)
h) (( 12 + 3) div 2) / (8 (5
- + 1)) it
i) 12 / 2 * 3
I! , ;n \ ::. t .'il / 1
j) raiz 2 ( cuadrado(4)) S

k) cuadrado ( raiz2 (4)) V


l) trunc(81.5)+ redondeo(81.5)
(
% I

“I '' Hi J :ip; , ; , - _
i :
^i
' v '
Considé rese la prioridad del Ejercicio
, '
'
1.10. 1
I
’ V 'O

i.
*
V
' ^ S *
V V [

Scanned with CamScanner


C:
CV . Vr,

£ • »:•
£* rM ; '; f * O
'

.
7?H í /i f 1 *>
' K. í Jtí * >Í1 í 3 vJ i/ fuli
If if P 5 <f
* > UJUCm - J, .. 9 A

: > :q
OVA1
;

1
'
i

*
' '
- 1

‘" v. i“i »ni;in TJ r» n fn. or:


n ;j;rjirnM!Oil
*
^ .
. ’

i
’« ' j
'
*

v
*
•#

J O <
{ - t
.. . ..
7
; } |4 > ; * : I?
». *.
I; • \ •
- otjjj
I
s ? ; c <{ n \n rr I
n* unmu : .
2• .* ij

'

*V » i - i . 4
M> iiv> tr ; i / i; » ; *j i . - .
/ «(
t »
Oí CAPÍTULO
nonnifom r;i fuloümuqffi Ji J> l - , • - M J t i

ill
r

LA RESOLUCION DE PROBLEMAS
CON COMPUTADORAS Y LAS
r
HERRAMIENTAS DE PROGRAMACIÓN
¡ . di r t •jí lslob oboj noo obcsilfim laq OJM mcusb
vr i i (; ) ." í jr.
í - K * * nq ! •
in oVcq c vv (mil jóiq nrttih n íi io ví lun/>>f3b .
. _
)

Ji ' i. j'
' mino.. ':: h u {< '. ! MI. .omiJlu
t
i
I •
t
#

.
í é
¿!i b íti'jíii!
! ' - .iiifinioo r nu ' ? * •
'
" j- üi • • *

I í TIO rt < rj ,iiD3b - > . vs - .MAJI i '510 i JOMO ..) .



< 1 1
0\D Jü'JZJ 1 ndiosrncq .

1 *
i i3l
nq locnupiusbl^v Mt •;lo ... OHI/OO,
'
:
CONTENIDO ’. * s»í jjioUtiU/uítiqp 3íru,¡ib3in fimsíriniq nu.a\ j . niiWÁ < j¿vn > b <

¡ íMI

2.1 . La resolución de problemas.


2.2 . Análisis del problema. _
2.3. Diseño del algoritmo.
,
AM3J80fi J30 ^ SoíJAWA £ .
.
. . ..
2.4. Resolución del problema mediante computadora.
2.5. Representación gr á fica de los algoritmos. Ido^ q n; J - > ; . í -! .

2.6. Diagramas Nassi-Schneiderman (N-S ). nq la . ( í V A : . vim ; : > ::v ¡ ¡


2.7. Pseudoc ó digo. j hoM MM ;. abiouí t; -
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS / 1 K < 1 nói2Í33iq noo iinñ»b i; : J i 1

EJERCICIOS oí fií jj Bfitoídotq l-t>b riuio >bcn3ud ¡ \ n J oltíJ^b noo tsJii ^rib t . .
^ .
.

¡ .,
*
,
jaq»:?! ¡ v ;iir:j» 3T .- ol rio .*;biíi>; ' diinlno - ’ó «noior/JFLI&\ 3b tbell
r r i. r .

srjjib fi6rjiJÍo<í
- « • í . • ¿ • i i

r
•JÍ
135 U3U 5 f Í1U VJÍKi ¡ < ) -
) . í J r * -
— f y ’ f f f « « • * • 1 . •
r " * **

.
S
f

^
J
W t
^ *» í

La resolución de problemas con computadoras se puede dividir en tres


fases:

• an álisis de problema,
«SfenV Wí
\ \ : . jtimnv » /.
t •
ó
• resoluci
dise o del algoritmo,
> ' >• . ;
ñ
• .' ón:tludel- algoritmo
*j *
'
en la computadora.
iiinq fu ü .ul ouq •
,

1
'
^ / f
V . ' di > .; nt >., En este capítulo se analizan las tres fases anteriores. El aná lisis y el
diseño del algoritmo requiere la descripció n del problema en subproble-
mas a base de « refinamientos sucesivos » y una herramienta de pro-
gramación — diagrama de flujo, diagrama N-S o pseudoc ó digo ; los
conceptos fundamentales del aná lisis, dise ñ o y herramientas de pro

gramació n ( diagramas de flujo, diagramas N -S y pseudocódlgos )
-
se
describen como conocimientos indispensables para el aprendizaje
de la
programación de computadoras. .. .. yjt
t
fu; A.

fio • .* lr .
isu

.
: :•) * .
- ' * , ¿ y
>' >
.
r> r
. 4,..^ „ ...;
.
r' rnniJo ! - •

- r. ste i..¡ MI

39

Scanned with CamScanner


ón
40 Fundamentos de programaci

2.1. LA RESOLUCIÓN DE PROBLEMAS .


E
^ I

«“ lÉí 'a
computadora, la resoluci n de ó P
dividir en «ts
Memas. Ayudado por una
importantes:

1. análisis del problema,


2 . diseño o desarrollo del algoritmo
,
computadora .

-... ..
3 resolución del algoritmo en la

“ í
B i d

p a resoWer el algoritmo mediante una computadora se necesita


lenguaje de programación Pascal , C/C++, COBOL, FORTRAN, etc

j r s s s r s s s s ar
; > elr :"• -en"un
algoritmo
codificar
,, es decir, convertir el algoritmo
el prob ema. Las
en programa, ejecutarlo y comprobar que el programa soluciona verdaderamente en la igura 2.1.
fases del proceso de resolución de un problema mediante computadora se
indican
jlnoiq oo - . Mou ’.oasr. hJ . I .S
¡ • •

b í iai ftnA . +
’-
1
i , ’ ,

2.2. ANÁLISIS DEL PROBLEMA > P J S f o b O f . .Z \ .' , ,


' '
a

.¡vi , bi ú - jqm ; . ? t <- « Kib ?í n r,irolcioiq JD nr ó -


^C
?
A pulcarjh
r nr ' ii

' ) *

El propósito del análisis de un problema es ayudar al programador para llegar a una cierta com-
prensión de la naturaleza del problema. El problema debe estar bien definido si se desea llegar a una
solución satisfactoria. opio óc. . bue?R \. £ ,

Para poder definir con precisión el problema se requiere que las especificaciones de entrada y
salida sean descritas con detalle. Una buena definición del problema, junto con una descripción deta-
llada de las especificaciones de entrada y salida, son los requisitos más importantes para llegar a una
solución eficaz.
El an álisis del problema exige una lectura previa del problema a fin de obtener una idea general
de lo que se solicita. La segunda lectura deberá servir para responder a
las preguntas: ,

• ¿Qué información debe proporcionar la resolución del problema?


• ¿Qué datos se necesitan para resolver el problema? - *

La respuesta
P íTa segunda pregunta indicará qué TdatosreSUlse,proporcionan
ados deseados las «didas del problema.
0
o las entradas del problema.
'* • i TV . o ^ oaih
i •
t at? *n
mt Resolución no rr« £ Tn
de r
* •-» < un problema
i .<

Análisis
del Diseño
del Resolució n del
problema problema con
»
algoritmo
'• ••

r ífrí
la computadora
Jv
Figura 2.1. La
. -v
,

resolución de un problema .
' ;
r v -

Scanned with CamScanner


La resolución de problemas con computadoras y las herramientas de programación

Aná lisis
i
del
problema

Definició n Especificaciones Especificaciones


del de de
problema entrada salida
Mr ,T
Figura 2.2. Aná lisis del problema . J íi
r

O ) vnr n o! ' ’
i

) i

Ejemplo 2.1
j
Leer el radio de un círculo y calcular e imprimir su superficie y la longitud de la circunferencia.

Análisis n : ii ' f¡ ;

Las entradas de datos en este problema se concretan en el radio del círculo. Dado que el radio
puede tomar cualquier valor dentro del rango de los números reales, el tipo de datos radio debe ser
real . : üv
- ''
' '

Las salidas serán dos variables: superficie y circunferencia , que también serán de tipo real .

Entradas: Radio del círculo ( variable RADIO). ífti írcí rj el


• .¡ i

Salidas: Superficie del círculo ( variable AREA). ; » ! •'! m'v.:


r. 3(> ) v ,
-
;
r
) fu.'
ñ ejí
Circunferencia del círculo ( variable CIRCUNFERENCIA). j

Variables: RADIO, AREA, CIRCUNFERENCIA (tipo real ) .


> •
, 1
- ’ * i ' 1 O

2.3. DISEÑO DEL ALGORITMO l

Lina computadora no tiene capacidad para solucionar problemas más que cuando se le proporcionan
los sucesivos pasos a realizar. Estos pasos sucesivos que indican las instrucciones a ejecutar por la
; .v .>
máquina constituyen, como ya conocemos , el algoritmo . ¡ n •

La información proporcionada al algoritmo constituye su entrada y la información producida por


el algoritmo constituye su salida .
Los problemas complejos se pueden resolver más eficazmente con la computadora cuando se
rompen en subproblemas que sean más fáciles de solucionar que el original . Este método se suele
denominar divide y vencerás ( divide and conquer ) y consiste en dividir un problema complejo en
otros más simples. As í , el problema de encontrar la superficie y la longitud de un c írculo se puede
dividir en tres problemas más simples o subproblemas ( Figura 2.3 ) .
La descomposición del problema original en subproblemas más simples y a continuación dividir
estos subproblemas en otros más simples que pueden ser implementados para su solución en la com-
putadora se denomina dise ño descendente ( top-down design) . Normalmente los pasos diseñados en
el primer esbozo del algoritmo son incompletos e indicarán só lo unos pocos pasos (un máximo de
doce aproximadamente ) . Tras esta primera descripci ón , éstos se ampl ían en una descripci ón más
detallada con más pasos espec íficos . Este proceso se denomina refinamiento del algoritmo ( stepwi -
se refinement ) . Para problemas complejos se necesitan con frecuencia diferentes niveles de refina -
miento antes de que se pueda obtener un algoritmo claro , preciso y completo.

Scanned with CamScanner


\

42 Fundamentos de programación

Superficie y
longitud de
circunferencia
\

í!
i
nu i

Cá lculo Cálculo Salida


Entrada de
de : de ) i ?|! £. •' resultados
superficie longitud ( C )
datos (S )
" .5 olqíP ' £ •

I I

Salida Salida Salida


Entrada S = PI * R A 2 L = 2 * PI * R L
radio ( R ) R S
. .i ; , ' r.; <¡ -v.

. •

\ . ; • »
.. . . . , > -> j i* • '
í U! U ' .U > -
Figura 2.3. Refinamiento de un algoritmo. ¡

j, • ¡ ! ;
.. 1‘jllllj' jli '. V *J , jlh íKjl) ' idi- IIC ' • O 1 ) "AUV . S - . ''l - líí O.' * - í

El problema de cálculo de la circunferencia y superficie de un círculo se puede descomponer en


subproblemas más simples: ( 1 ) leer datos de entrada, (2) calcular superficie y longitud de circunfe- ,,
rencia, y (3) escribir resultados (datos de salida). . ¡ , . )
< . . H . . ;
. 0 . í.V ririnvN ' '

- •
. . .. . . i-,
Subproblema Refinamiento
leer radio
ncalcular superficie -v j\ J
leer radio
l » . iV?
'

superficie = 3.141592 * radio A 2


: i •
7

— '


.
V
-. 2 Jfc SV ;. ,O . ...
1

L Ií V . r ! r ) *
' }% t
. I i

calcular circunferencia circunferencia = 2 * 3.141592 * radio


/
nmu ;¡ i
escribir resultados .. . .. . ’ > :t «'
4¡ll J
escribir radio , circunferencia , superficie

1*
Las ventajas más importantes del 1 • » •.
!*
v ; ij nfM ít u n
diseño descendente son:
r.nVmunsi ) Mil ! t

ma
’ módubs. COmprende más «cimente al dividirse en partes m' ás- simplest j II * ^ í í < * ) l > o
Se "*
; J ’ J I

denominadas


f-
* as mot*tiicaciones en los módulos
La comprobacon del problema son más fáciles .

--
se puede verificar fácilmente ‘ ^ 1 » ' y » 1 / * / O? *'' 0
}
•* ' *
.

Xrsr
Tras los pasos anteriores ( diseño
*
,
descendente v ímf , •
i í; li

t
> nobinua
. r .- n ; : ¡ -
- -
i Fssasstistsssi

Scanned with CamScanner


La resolución de problemas con computadoras
y las herramientas de programación 43

Diseño
de un
algoritmo

Diseño Refinamiento Herramientas de


descendente por pasos programación (3)
( 1) ( 2) ——diagrama de flujo
pseudocódigo
— diagrama N-S
Figura 2.4. Fases del diseño de un algoritmo.

2.3.1. Escritura inicial del algoritmo ti

Como ya se ha comentado anteriormente, el sistema para describir («escribir» ) un algoritmo consiste


en realizar una descripción paso a paso con un lenguaje natural del citado algoritmo. Recordemos
que un algoritmo es un método o conjunto de reglas para solucionar un problema. En cálculos ele-
mentales estas reglas tienen las siguientes propiedades:
f

deben estar seguidas de alguna secuencia definida de pasos hasta que se obtenga un resultado
coherente, . > ¡\ , j » ¡ . . ni . JUV , - •

• sólo puede ejecutarse una operaci ón a la vez . , Vj V: < - . .


:>ii / r j U í H ''
. juuit it ! » U b t t A i i l x n i w ¿ni
El flujo de control usual de un algoritmo es secuencial ; consideremos el algoritmo que respon-
de a la pregunta , . , : • / ., /0 ;

t - •
t l•.Ji l t J i ' i . i ; RJ fifniiioi/ '
yP/j i’ Ujj 1 Vr. uu - Vv / t >;v
¿Qué hacer para ver la película Tiburón ? Jjf í 1 •
>< ¿ y
rr/ íí iJ ; r
, * « f t j *
• ; •
j<

t %
* »; .- * , . j
, f f! • # *;
* •
* • j

La respuesta es muy sencilla y puede ser descrita en forma de algoritmo general de modo simi -
lar a:
•»

ir al cine
comprar una entrada ( billete o ticket )
ver la pelicula
regresar a casa
. . ,
> , . . # • » » - 4 1 * ? jf .. ' V r . . \ b i ,; r ; r b S'J urr i b 1 -
I; ( » 1 /0
i *•

El algoritmo consta de cuatro acciones básicas , cada una de las , cuales debe ser ejecutada antes
de realizar la siguiente . En términos de computadora, cada acción se codificara en una o vanas sen-
tencias que ejecutan una tarea particular.
El algoritmo descrito es muy sencillo; sin embargo , como ya se ha indicado en párrafos ante-
riores, el algoritmo general se descompondrá en pasos más simples en un procedimiento denominado
refinamiento sucesivo , ya que cada acción puede descomponerse a su vez en otras acciones simples. .
describir de la
As í, por ejemplo, un primer refinamiento del algoritmo ir al cine se puede
forma siguiente :
1. inicio peri ó dico *•i
2. ver la cartelera de cines en el

Scanned with CamScanner


44 Fundamentos de programación

3. si no proyectan «Tiburón entonces


»
3.1. decidir otra actividad
3.2. bifurcar al paso 7
si _no
3.3. ir al cine
fin_ si
4. si hay cola entonces >* u

4.1. ponerse en ella ''


hacer
4.2. mientras haya personas delante
4.2.1. avanzar en la cola
fin_ mientras
_
fin si
5. si hay localidades entonces
5.1. comprar una entrada
*' 'f
-
5.2. pasar a la sala
5.3. localizar la(s) butaca(s)
5.4. mientras proyectan la pelicula hacer
I , •
Ir» » f
(

- i
I
5.4.1. ver la pelicula
f in_ _mientras
5.5. abandonar el cine *
f i
-I
•iv 0 < : ¡‘ )

_ ••, . l
¡t :11
J. i t
5
' * ;¡¡! ;* • ?
r si no
I W

5.6. refunfuñar
fin_ si
i - j • • [ fi íl í J 90p
• •¡
- jifio
. . ' ¡; í rvjt J , I
f
> cw < !
.IbJu . tY'
*.
. *
* f .

6. volver a casa
7. fin
ii . ••• >
r »
I
•» r i JjJ
' J ’ ;n ) -
En el algoritmo anterior existen diferentes aspectos a considerar. En primer lugar, ciertas palabras
reservadas se han escrito deliberadamente en negrita (mientras, si no, etc.). Estas palabras describen
las estructuras dé control fundamentales y procesos de toma de decisión en el algoritmo. Estas inclu -
yen los conceptos importantes de selección (expresadas por si-entonces-si _no if-then-else) y de repe-
tición (expresadas con mientras -hacer o a veces repetir-hasta e iterar-fin-iterar , en ingl és,
- -
while do y repeat until ) que se encuentran en casi todos los algoritmos, especialmente los de pro-
ceso de datos. La capacidad de decisió n permite seleccionar alternativas de acciones a seguir o bien
la repetici ón una y otra vez de operaciones básicas.
‘ 1

qv ;« V aJ '

si proyectan la pelicula seleccionada ir al cine


_
si no ver la television, ir al fútbol o leer el perió
dico

¿:
l ° C la' ir *Va 2
" “d° repetidamente « .
* L . J 4 . »

, , "
ación

ssxesssassts°lfrT r
O

la indentació n o sangrado de los algoritmos será norm


Para terminar estas consideraciones
¡as para retinar el algoritmo objeto
sanas J
V

.
constan
'
nuestroestlri ^ ° 01
ntm
e - '
S -
repetltlvas
A lo largo de todo el libro
tic : .
s describiremos las acciones nece-
de nuestro estud*o; para ello
S .’
-
“ ,; ” £ rr
empleo de We ‘

analicemos la acción
Localizar las( s) butaca( s ) •* tmirrisp io j *

Si los n ú meros de los asientos están imoresos en V. cói •


in A
entrada , la acción compuesta se resuelve con
I
el siguiente algoritmo:

áv

Scanned with CamScanner


ón 45
La resolución de problemas con computadoras y las herramientas de programaci

1. inicio //algoritmo para encontrar la butaca del espectador < í. r ¿ i J» J

2. caminar hasta llegar a la primera fila de butacas


3. repetir . .. ?
.. . . , .

compara numero de fila con numero impreso en billete i


I f i
<i i
si no son iguales , entonces pasar a la siguiente fila
<

hasta _ que se localice la fila correcta u i y ;v ' i J t. vJffir ‘i .' h . / í : . ?



.
4. mientras numero de butaca no coincida con numero de billete í irtry
hacer avanzar a través de la fila a la siguiente butaca ,
. I H
I
\ ., y •
r *! - » i - * • , ' • * * • i

fin-mientras
5. sentarse en la butaca
v. 11/ :rl / t > . . - iSl :; ; v / f o r j¿;¡ r v > ni
» *
'
j
1
- .

6. fin i o a l t; í i jí ür J¡ ’ • v i r wi i L u t r ?: ¡ < > J . . -

En este algoritmo la repetición se ha mostrado de dos modos, utilizando ambas notaciones, repe -
tir .. hasta_que y mientras fin_mientras. Se ha considerado también , como ocurre normalmen-
. ...
te, que el n ú mero del asiento y fila coincide con el n ú mero y fila rotulado en el billete. ,
l\ j -
-
& i > - *
"i

*
* .• * ' 4
> < * » .r i »1 l l í . 1
.V | . 4

- .
2.4
• - DEL PROBLEMA MEDIANTE
RESOLUCIÓN COMPUTADORA
* • \ i * * » ‘ , * *

. \ / j ».:>S
, aui >n ñm 11 , j .

Una vez que el algoritmo está diseñ ado y representado gráficamente mediante una herramienta de
programación (diagrama de flujo, pseudocódigo o diagrama N-S) se debe pasar a la fase de resolu -
ción práctica del problema con la computadora. ' . "¡ vi: •
1 •

1

Esta fase se descompone a su vez en las siguientes subfases:


, V. jJ
- - ‘r \ , - t\ - ~ Í.J i j £\ fivd - ‘Ú ^ Ú ) = Í 7. 1
-
1. codificación del algoritmo en un programa,
2. ejecución del programa , coa : í u
3. comprobación del programa. . ..
A 'VVlV . t ,V3 . 1
A • V f )V


'

v \
1
* * \ V * V |‘
r . '
’ * • '

»>! v * A«
r
t !
"

r ' ’ r I 1 '
J
*
En el diseño del algoritmo éste se describe en una herramienta de programación tal como un
1 é

diagrama de flujo, diagrama N-S o pseudocódigo. Sin embargo, el programa que implementa el
algoritmo debe ser escrito en un lenguaje de programación y siguiendo las reglas gramaticales o sin-
taxis del mismo. La fagp Hp rnnverdi ón del algoritmo en un lenguaje de programación se denomi-
na codificación , ya que el algoritmo escrito en un lenguaje específico de programación se denomina
código.
Tras la codificación del programa, deberá ejecutarse en una computadora y a continuación de
comprobar los resultados pasar a la fase final de documentación.
* \ .i -J L» r > ! i) -
‘U .. ,.,l : JT. . A ’ '• ú- i -íÍ! *¡ rt í I ’ • .' '
'

-
'
.
• - .

o! 0 " : I _ .s í " O - r I t píUtl


; .. ; : 1 . ; , i ;
CÍ j 4- CUU Í J í IC
' .
'
.
'

-í VI: . r o i !. :
- , ; h n • !
¡ ni b
» ; ¿ "¡ ¡ i 3 ¡
Resolución ICJ «*
- ?
* "
' / •

1 •
iu • •
í del problema 1 • •

id ( . , ii ; a: •
'
> , f n v u\ ; con computadora i til •
• i V
»'

: *
‘ UÍ L. - o ¿.J ' i GHJ :. niJ .

rtliu í f ''
'

i
-'
- / * i
, i

Codificación Ejecución i Comprobación ¡ , T


A < .'.'Ji'
f
del '
eir;; »
del del
r

programa programa programa


V.:- ;* J í
»

"
;
b kriiii
Figura 2.5. Resolución del problema mediante computadora.
• # / ,

— 5
oJ

Scanned with CamScanner


y
>{ , « f t I
-• i\

Fundamentos de program
ación
46

GR ÁFICA DE LOS ALGORITMOS


ITACIÓN
2.5. REPRESEN
codificado
Para representar un algoritm

2S22K:
o se debe u l!

ricamente, de modo
,z a
' j

^
®
conseguir este objetivo
que las
representado gráfica o numéprogramación, sino que la descripción pueda
ue n oritm
sucesivas acciones
^ ^^ ^ .ser

no dependan de la sin-
serv r racímente para su
Tp ued a
~
de
taxis de ningún lenguaje ma , es decir, su codificación.
transformación en un progra para represen tar un algoritmo son:
Los mé todos usuales
n3
: <;bi/i)¿o» fi od > ri
ó bí Joqín ít i rtilnogln otes
. .. , 1. diagrama ífi v sup. ut
de flujo , ;iü
. mi ZBiiiiiM
\ 3. lenguaje
diagramaaN
2 . diagram j -
í v - S (Nassi Schneiderman
ó n de
)
,
algoritm
,
,
os : nvpudoc
pseudoc
.g ntn ifii
ó * , , .{ . , ,
< digo bb oismofi b jup
de especificaci
4. lenguaje español ,
5. fórmulas.
no suelen ser f á ciles de transfor mar en programas . Una descripci ón en
Los métodos 4 y 5
prolija y generalmente ambigua. Una fór
-
no es satisfact oria , ya que es demasia do
español narrativo ón de
ón . Por ejemplo, la fórmula para la soluci
mula , sin embargo, es buen sistema de representaci ítmico que se debe
el procedimiento algor
una ecuaci ón cuadrá tica es un medio sucinto de expresar • , / oij jn
'

ejecutar para obtener las raíces nú .


>

. 1 lit ) lili f .
• • . IM TMU - * o? i J. 'ÍI
y . ¡ J - "

x\ = ( - b +
^
jb 2 - 4 ac ) / 2 a Jb
x 2 = ( - b - - 2 - Aac ) / 2 a
vrowv ! \ « \ * i ' Vi '\swxvf \n \ Ai .V
significa Min VilWSt ':
% • • • 1 p I '
t /. vti ; ;\ v ’ 'A > \\\ nt » v». ) '
1 . Eleve al cuadrado b.
2 . Toma a ; multiplicar por c ; multiplicar por 4 . . .. .
3. Restar el resultado de 2 del resultado de 1 , etc».
" í K : viiu . voluta
Sin embargo, no es frecuente que un algoritmo pueda ser expresado por medio de una simple fór-
rj '
. ni run ¡ v - . quit y - - • •

muía. ‘
'i -' ," . i . • . . . . { .ornzirn ! ixiit
o c. ; i v v >
. ¡ 1
'
* '
" ’ . j 'J|
fIU í I J . • oir ' lrvj 'dt b oup no; , i\o\ y,YÑ }
,
\ >n
toyai

2.5.1. Diagramas de flujo 1 . ,,


,h ( t ! " 11) no DiftbOD si aafi

Un diagrama de flujo ( flowcharts „„a "de A* I « '


"
V " '
" bwlit ótrt ?oI Wtoiqn o
antigua y a la vez más utilizada
S tecnicas
? de represent ón de algoritmos mas
aci
desde la aparición de lenguajes de pro 2ramar , niP
10n
C
° ^ ^
dlsmin
urados
uido considerablemente , sobre todo
ma que utiliza los símbolos (caiasl est á nd - eslryct - diagram a de flujo es un diagra-
Pn
algoritmo escritos en esas cajas
secuencia en que se deben ejecutar.
unidas ñor flechad ^ “ FÍgUra 2, 6 y qUe tiene los pas0S del
’ denominadas l íneas de flujo , que indican la
La Figura 2.7 es un diagrama de flujo
El diagrama citado (Figura 2 7 ) represbásico

= nomhrfr
neto de un trabajador a partir de la 16 de n Pro8rama que
lectura del " “ deduce el salario
*K s x f f i t s j s
,nstí ,U,e) S°n mUy Variados- E la Figurá íJ íS S S;;
" oste iepíetntaTna*plantilla
f Amerídecandibujo típicaAndar ás
donde se
i.

Scanned with CamScanner


La resolución de problemas con computadoras y las herramientas de programación

Símbolos
principales Funci ón '

s N Terminal (representa el comienzo, «inicio», y el final, «fin », de un programa. Puede


J representar tambié n una parada o interrupció n programada que sea necesario realizar
en un programa ).
Entrada/Salida (cualquier tipo de introducción de datos en la memoria desde los
periféricos, «entrada », o registro de la informaci ó n procesada en un perifé rico,
«salida » ).

Proceso (cualquier tipo de operación que pueda originar cambio de valor, formato o
posici ón de la informaci ón almacenada en memoria , operaciones aritmé ticas, de
transferencia, etc.).
Decisión ( indica operaciones lógicas o de comparaci ón entre datos
— —
normalmente dos y en funció n del resultado de la misma determina cu á l de los
si ^ distintos caminos alternativos del programa se debe seguir; normalmente tiene dos
— —
salidas respuestas SI o NO , pero puede tener tres o m ás, seg ú n los casos).
Decisió n m ú ltiple (en funci ó n del resultado de la comparación se seguirá uno de los
diferentes caminos de acuerdo con dicho resultado).
utí rioae
\ c ? jiri ,ai íi < nof ¡ \
Conector (sirve para enlazar dos partes cualesquiera de un ordinograma a través de
un conector en la salida y otro conector en la entrada. Se refiere a la conexión en la
misma página del diagrama ).- .
Indicador de direcci ón o l ínea de flujo ( indica el sentido de ejecución de las
operaciones). . .
; . < - tr Kü :j , v \ v . oft - .
-
Línea conectora (sirve de unión entre dos símbolos ).
-if ; • i Conector (conexión entre dos puntos del organigrama situado en páginas diferentes).
J njiJn
^vjqtn ?abíi\ il
Llamada a subrutina o a un proceso predeterminado ( una subrutina es un módulo *
independiente del programa principal, que recibe una entrada procedente de dicho
programa, realiza una tarea determinada y regresa, al terminar, al programa principal ).
Símbolos
secundarios Funci ón \\
»
f \

! K nbi . í'rttih *
Pantalla (se utiliza en ocasiones en lugar del s ímbolo de E/S).
A I ti * *4 i IJl ‘
í l’ j
V: , < K

-
n jfn üOl 3?
{ ,' r > -- r
Ü
Impresora ( se utiliza en ocasiones en lugar del s ímbolo de E/S). i «( ‘ *
i » f í L ' m; *
r: • 4 ..J, * >


i i , ’, » * » i
iLaii V
t I . 4 1 t i * t * i f
* i I\
( « *t í X

r Teclado ( se utiliza en ocasiones en lugar del símbolo de E/S). *, * •




:
: . *
*•
(f
‘ . r j, K / ’ / M í r.! i ' . * 4. i - J. í» l ’ V >
í "
. í J ü cii í il ü
i
*
. ‘. tuui ) :> t,i
Comentarios (se utiliza para a ñ adir comentarios clasificadores a otros símbolos del
*; . . :; . diagrama de flujo. Se pueden dibujar a cualquier lado del símbolo). - i

t
I

1 Figura 2.6. Símbolos de diagrama de flujo. „1


•* »

Scanned with CamScanner


V

48 Fundamentos de programaci ón
*
i
• •
Inicio
li
t
r leer
nombre, horas 1 í f

precio j ú A
. >r .
;
t
»

brutos-
» horas * precio i )f
r
. 1í
, : •
i
1
i
* Í?JKJ ¡
i

i !' 1' •• i

tasas*-
it / l ' OM? - 4 f
.
0,25 * bruto « i
i
>
Jf ^on- < .
^ •i
, i' i 1

i
neto*-
fí M
r
- .
, 1M O
T .
4
9
1 ‘
bruto - tasas ..
> . -A 1 :
4 -. I\

I
.1
\ )

escribir i »
nombre , bruto
1
I
tasas, neto

x i *: j * . u ») n
í .J
-
i
L•
'
,¿ t í- iT Í ’ . •
Fin
’ r

f
'
1
.1 ‘ t

*
»'
i
I.
*'
1 ; > < , •
i? • . /
- •r
Figura 2.7. Diagrama de flujo . f •

esc iJ *) U í iu • ; > - ' ' '


contemplan la mayor ía de los símbolos utilizados en el diagrama; sin embargo, los símbolos más uti -
lizados representan:
s.

• proceso, •

i ,Í A 4' U \ ) <T VL j 1 •
'
* * Lj/i )
i t

• conectore
>

decisión, p . ‘
. •

.. ... (

• fin, s, J
i: N '* y . Li - í i' i i i i . ‘t i .¡:V! 1 *
í Li
• entrada/salida,
• direcci i

• ón del flujo, r * ’ í Li if ' *


'

y se resumen en la Figura 2.9.


'• .' -
• i t!
r’

En un diagrama de flujo: f

i r
existe una caja etiquetada ‘ 'i n i c i o " , que es de tipo elíptico,
existe otra caja etiquetada " f in " de igual
forma que la anterior,
si existen otras cajas, normalmente son
rectangulares, tipo rombo o paralelogramo (el resto de
las figuras se utilizan sólo en diagramas de flujo
generales o de detalle y no siempre son
imprescindibles). J r
c '. 1 . '


de esta nexibilidad conduce a diagramas de flujo complicados
e ininteligibles

Scanned with CamScanner


programación
La resolución de problemas con computadoras y las herramientas de

> 1
* * •i f ! 3 paa «mi 1 KT ; 3
I
r H « 0 <D J
V

Sigtff í ; M
3
Wt
í crrrrn 1 FTHTTOT]
r rt
UNIVERSIDAD PONTIFICIA DE SALAMANCA
fn-rt ; :
H4 S
Facultad da Informática
< Jr. «la t-
• aaaaaaaaaaa » aaaaaaaaaaaaaaaaaa « aaaaa
. .
Ei.*M^ a »Mm«aAatt ww> fcLa*»ai V»wta>fa»Cylmjm,6iS4 Í!aJj<lrf| .
l f i

Figura 2.8. Plantilla para dibujo de diagramas de flujo.


o

c Terminal

-t;v..qn *:;! I íí XII ü^J i .tuq - o n c^v^n . ; > < :


) Decisi ó n
riftn ¡:J
®t>noo ornli tor:l
.y

.o&b 'iüvPMu hb nóbaoflhav .¿oJub abcmr i sb ¿anuía


Subprograma
V nfn ^ fn

.
. «olfib «í O ob uitorn v L

Entrada/ •
Procesó

> ttUWq}" \5
Salida
/
Figura 2.9. Símbolos m* á^ s' utilizados en los diagra mas de flujo. v
v / • ’ I .* * P

i I
v T
Símbolos de diagramas de flujo
'oitmri 'ireb lobstnoa 3 i 0 3 •
4

Cada símbolo visto anteriormente indica el tipo de operación a


ejecutar y/ el c diagrama de flujo ilus-
tra gráficamente la secuencia en la que se ejecutan las
operaciones. (

Las líneas de flujo ( > ) represe ntan el flujo—secuen cial de


x
la l ó gica
y
del
,
progra ma .
i
— — —
tadora, es decir, acciones a rea-
Un rectángulo ( [DI ) significa algú n tipo de proceso en la compu
n ú mero, etc.).
lizar (sumar dos n ú meros, calcular la raíz cuadrada de un -
El paralelogramo ( EJ ) es un símbolo de entrada/salida
que representa cualquier tipo de entra
a de teclado, salida en impresora o pan-
da o salida desde el programa o sistema; por ejemplo entrad
,
talla, etc.
caja de
:fí
decisi ón que representa respuestas sí/no o bien diferen-
.
El símbolo rombo ( O ) es una '
tes alternativas 1, 2, 3, 4, ..., etc. ?
al ( cz> ).
Cada diagrama de flujo comienza y termina con un símbolo termin
os, tras roturas previas
Un pequeño círculo ( o ) es un conector y se utiliza para conectar camin ' . _J
,
del flujo del algoritmo.
que los anteriores son:
Otros símbolos de diagramas de flujo menos utilizados de mayor detalle
ste con el rectán-
Un trapezoide ( D7 ) indica que un proceso manual se va a ejecutar en contra
gulo, que indica proceso automático.
El símbolo general de entrada/salida se puede subdividir en otros símbolo
s: teclado ( gg ), pan -
.
talla ( CD), impresora ([DO disco magnético ( Q ), disquete o disco
flexible ( [[] ), casete ( fool ).
vrnnq . ni
. \ ,teyobi }| : *!9 .i \\ ¡" ibf ' í TJ
Ejemplo 2.2 ;
'
ir . . \

Calcular la media de una serie de números positivos, suponiendo que los datos se leen desde un ter-

minal. Un valor de cero como entrada indicará que se ha alcanzado el final de la serie de
números positivos.-

Scanned with CamScanner


.,„ » t\ «»y » * .* * '

50 Fundamentos de programación

El primer paso a dar en el desarro !o de


necesi a
, , Safe “ ““ ^ ^
pasos secuenciales. Para calcular una media se .
escnp iv ;¡ .r rrrrr
^ |
Por consiguiente, nuestro algoritmo en forma ^

DS C y variable suma
S. i
1. Inicializar contador de n ú meros r
2. Leer un numero.
3. Si el número leido es cero: .
• calcular la media;
• imprimir la media; ' :
• fin del proceso. - J . T- : ' ' •

Si el numero leido no es cero w . I


: ; . •
r

• calcular la suma;
• incrementar en uno el contador de n úmeros;i . 8.5* * i p * ** . • > .
• ir al paso 2.
4. Fin *T - '
'y
?
» . ..... i i
- j
'v í .
I r o m i o1

El refinamiento del algoritmo conduce a los pasos sucesivos necesarios para realizar las opera-
ciones de lectura de datos, verificación del último dato, suma y media de los datos.
r ~~"

T
'

Diagrama de flujo 2.2


j
\\
'\ A
'
_y \
inicio
O: u .
J : > < ‘o ‘odadc: . G, S fiiugM

C f- 0 c - contador de 'números í¡b • .oinrirnie


¿lili OfUfl !;[!U -

w
• •

¡
s <- o ,
, U1 ' 1, S
, - sumador de n« úM
meros
WIUO ..
V
,v o odmla obíD
•1 -1
' .onmu cu
°“atnamir
w .i
* • • - /: :
leer -
,
y í»b í cbu , '
• '

dato •
!, / 1
f, ;/ i

. J,( • I M
• ' f •
f
íif f í
, í,, imunrol> lemuí) wU
ubi
\!
i "

ÍV.
J * lit ) '
• I.

dato <> 0 no ' * '


r y
O;
#

} , í fe '
statlmo
SI
» - '
. , ' .
,
. oíu ,cf (ci
1 F>
" IíKTI nfodtnb c- j
r! J
• *’ ¡
C <— C 1 ' ' ;!•
s <- S + +dato »i J ?
'' nu.
" “"
,, J fe v t «i . ni . ! '
. . . r, '
£ '1 ' •
" itoattlK íS ,
•! » .! 'll I
.i f , *

...
media
r . i

s/c
Jí y ,

' • so
! 7ft JOfrjuptjtj n »J

°i n "
, ab
.
wpiwibi
i » *, i
s i
c i . « * j( t . .
' 1 >bfos9qtni n 11 *

•mprimir
!
media

fin
< l ; iÜagsSg
^ . v
^ vision por cero.

\‘'
• o íiH!Í3
'

‘. *5
,
ft :
‘ ,v. íS
f
1
* ‘
- t \ \ * \i )
f /
'
n; v ‘*, t * • !

Scanned with CamScanner


La resolución de problemas con computadoras y las herramientas de programación 51

Si el primer dato leído es 0 , la división S / C producir


ía un error si se ejecutara el algoritmo en
una computadora, ya que no está permitida en ella la división por cero.

Ejemplo 2.3
i> ,kr vvyul \ nni /v:í, iU
-
i
o i ó ini
Suma de los números pares comprendidos entre 2 y 100 .

Diagrama de flujo 2.3


r i

C
*
inicio
i i

(
i
;
SUMA 2
N Ú MERO
t
<- 4
1

.n e : SUMA - I
<
SUMA + N Ú MERO
t
A

t
N Ú MEROS- f
— > OIRAJA
i
-
(
AflOR 3
2
OM n V jt.
AHOH. ODqR ® 5, r
( Ofr -SAROH ?
' NÚMERO + 2

i
-»0!HAJA 2
A 10H
AROH OiO lFR .
.
i
í
f

i
i
s
»
1 número =< 100
Á
l I
r

_
t '* •
*
1

*
t r
no *
, . k;
t
\

-. i : ' * i
\ \ escribir
»
SUMA ti

t
. •
J

C )
i
i
i

* i

Ejemplo 2.4 i

Se desea realizar el algoritmo que resuelva el siguiente problema:


Cálculo de los salarios mensuales de los empleados de una empresa, sabiendo que éstos se cal -
culan en base a las horas semanales trabajadas y de acuerdo a un precio especificado por hora. Si
se pasan de cuarenta horas semanales, las horas extraordinarias se pagarán a razón de 1,5 veces la
hora ordinaria. *

Los cálculos son sencillos son:


1. Leer datos del archivo de la empresa , hasta que se encuentre la ficha final del
archivo ( HORAS, PRECIO _ HORA, NOMBRE ). i
2. Si HORAS < » 40, entonces SALARIO es el producto de HORAS por
PRECIO_HORA.
3. s í HORAS > 40, entonces SALARIO es la suma de 40 veces PRECIO _ HORA m ás 1,5
veces PRECIO _ HORA por ( HORAS - 40 ).

Scanned with CamScanner


ón
52 Fundamentos de programaci
- + , ..
El diagrama de flujo completo del algoritmo se indica a continuación: j ;
Diagrama de flujo 2.4 a . o!qmo|j
C inici
° )J . vniw K\

t .f . ov-rt\ nmv\ \ ; Vlu


^
#
/ jO leer
/ HORAS, PRECIO HORA .

/ NOMBRE
r -
r> -
JI.
.? *-MJ
*» < v J2 •

t
- CHr í
A • Mí
• w* -
J . . . • r} '. . > .
i r ';l
4 I
• ^

Si r no V l \

i . HORAS <= 40 .*
i' pfa i i*
V
^ w

pR 9MOH< ?ínj8 >


r j-
y
OR üMÜM SALARIO —
SALARIO -
* ¡ St ÓP 3MUM 40 * PRECIO * +
_HORA
HORA* 1
1,5* PRECIO_HORA *
PRECIO HORA '

T.
•*
*
, i
( HORAS - 40)
* •' v ^v r
*

00 r > = - '

en i
rv
\ 'i! di is, >‘
v

AMO >

escribir
c at- »

/ SALARIO
i i
7

r i.— r í> S olqrnsi.-


.
CT \írí5s datbs
^ .
„ »
r :l\ r !/

«
^ «$ >
'
-
**"
v
.

%» V '
< ” *
O . . i
‘ '
'
'
.
V ' VJ W \ i,
j .
i-
M .'. AIVW v o \ .'oVjií ' fctfttt '. •‘ v
.
. v:’, .' ¿'. ' vyúrt í ' : : > B® ' .
r

. 1, v,,

c
*
i

\

fin
;
VsrtVvi&ss/ not ¿oiüDfr» V 0 * ,
'
W-U'l .. . .
^ _ ve* fcjactrF n e\ ;
" ,
' < i ..
;
1
' y
* .
\
«* * s
*
4 v
. %
r
>
S

6’ ’
^r;^ •
;0 A - .v < *« • ** i
- A;>í \ H_0rÍ3 ^'I
*
í !


iTO.ta#
^ 0Í - í
» 4 *

3OH
*' v
;
^ •
AKOFJJOE *
ips
*
r

Scanned with CamScanner


53
y las herramientas de progr
La resolución de problemas con computadoras
»• • i

US
o bien:
.in »y\ - s > kY,\ lYO > V \ . OA
2.4. b Ai ? c \ Vnn^ v y: i > wic\o us »W/n >m'!\ iAW IVJ
Diagrama de flujo ‘ v \v*
{
:
jU '
\4 t -
,
iv \< o 7 U\ \ . Hk
^ inicio
f ) .
r -,
o
n t
r S
-*
¿
>
r> ; v. . n w bVmV:v \m\
**
no , r r<
. -t
f
i má sdatos *

' 1? Í A > »

. 5
> . »i -
. V • ) of i ‘ji ' V . ' •

T í A; o¿ bi <
fiteq d slrtaruSv oni' : S ííÍ J íJ . ¿) n yn ¡ u/ sc\ o-j VK \ . ominen
" $

pf» , p
«feb oncn&n b fftsq I : 3T Y ^nimí X3 9•
j ' ¿

v o o. j Owl .¿ o! ! ? i norjn > <


n . ‘i Ü ti f *i i* rj , r.
* -
, ¿ »

xi( v bnutefl 3|nugnd mi fp


,

»
leer
'
HORAS, PRECIO.HORA . O . ‘J i . ’ A / OT © T . * í i : -Í i
r f •

NOMBRE c . nr «r j X "> ¿ T ©i r ¿ : ' v


: fi * > ^ trC _ ' Y

• • - > í iO Í T r r. ' r
r

f ? V JATO' C l I " l

i.
r -*
o
8 f ;< o C; i * r« v . ? c T <
* ru n it i r i ;' ,
.

,7L' a O i » Í OiI r - . 2 le 1
* _ > «
*i *

‘ . C: V. <4 :;a, ' u: ¿ '

51 “ % c> - O^.VTTJ
n
S/
HORAS <= 40^ ° .S C. í ¿i 'íí fn í 'í . n
i

ZS Ííi no STl¿SUin 32 '•


iji ’ t,'L nrumüdb í:
1
POTA * t 1 í ! SALARIOS- , _
SALARIOS- 40 * PRECIO_HOR Á+ c re s:iá
¡
HORAS * 1,5 * PRECIO_HORA *
V/ .< yv WH1 v , PRECIO
, _HORA ,U 3 Ai ' idilio v/i wr. u iA Ví
' ' iinv (HORAS- 40) v. ..nO,
-~7 v'r — 3 , —-
.. i
' '
,

* •.
j » ;Y í
*
»l

K ..
>*
i
4
/
' •
’* viua\»
, •

~ ; nus ¿' .oTwnfrrt ? ol ¡2 ,olqnü jp io‘


:
t
, >
V
:noe «owmijn ¿ol U Qgwdnt3 1 <! . / escribir ywp B < , * zelct ^ JI sí
:* •
o •
v :. í
O
SALARIO
/ / v m t tercet nuoieip ; *
;
1
l - í ‘#
'

.V • '
V

» tA l i g o n t m o p r o N e m a ni
' A I*
* . .
> < .
( 4 «
* >o J
r
-r — 1 n b

fin
o
j . . }
V »

Scanned with CamScanner


I

HOO • i
'
U 1

^ C .!
54 Fundamentos de programación

Ejemplo 2.5
realizar operaciones sencillas de conteo es una de las primeras
La escritura de algoritmos para
r.
cosas que un ordenador puede aprendeuna secuencia de números, tales como
Supongamos que se proporciona
2 3 6 0 2
5 3 0 2 4 4 0 0 • • •%
_


i

y desea contar e imprimir el número


de ceros de la secuencia\ i

o r\ los números de izquierda a derecha, mientras


El algoritmo es muy sencillo, ya que sólo basta leer

se cuentan los ceros . ^ I


Dicho algoritmo, por consiguiente, utiliza como variable la
palabra NUMERO para los números
. Los pasos a seguir en el algoritmo
que se examinan y TOTAL para el número de ceros encontrados
escrito en un lenguaje natural son:
\ - IU ' r U
\ ^ ,
' . •
“ ' "' \
Y A C í' w,
’j ’ •{ » ' r
>-
i

í. Establecer TOTAL a cero.


' ‘ '

\
I ’ i

2. ¿Quedan má s números a examinar ?


3. Si no quedan números, imprimir el valor de TOTAL y fin. *
4. Si existen mas números, ejecutar los pasos 5 a 8. * /

5. Leer el siguiente numero y dar su valor a la - variable NUMERO. i


6. Si NUMERO = 0, incrementar TOTAL en uno. .

7. Si NUMERO o 0, no modificar TOTAL.v y; \ , ¡5. '


.

i
i

8. Retornar al paso 2. ^ ; i
f K
r
•«
«

El diagrama de flujo se muestra en el DF 2.5 . ir


«

r >

Ejemplo 2.6 0 ¡ 0 p ,, q .0 >, . ~*Ol RAJAS


: OIO ' 5 <3. f i ’! '
|
1
SAHOH
v r” ; j
Dados tres números, determinar si la suma de cualquier pareja de ellos es igual al tercer número. Si
se cumple esta condición, escribir « Iguales» y, en caso contrario,
escribir « Distintas ».
Por ejemplo, si los números son’ '
I 9
-
6
.
U*.
1
X ,»
-- • ! K
\

la
respuesta es " Iguales " , yaque 3 + .6 ¡ ,
:AJA 8
= 9 . Sin embargo, si los números son:
,

2 3 4 ^
" S i
t

s
el resultado será " Distintas ".
ni n - 1

i I
iy .

nir

Scanned with CamScanner


La resolució n de problemas con computadoras y las herramientas de programación 55

Diagrama de flujo 2.5 (DF 2.5)


.
oic ini

inicio

v
* ,8 , A
TOTAL 4- 0 —

*:
0 « 8 * A
no
m á s números?
*
.-/r Of
SI
-
leer
CV - J 4/ 1

NÚMERO »

os
‘ »

*
no
NUMERO = 0
A -%
I' + * i >

i Ot
s/ ;•
r ¡tíí tOvl) diioap
2< - TOTAL
TOTAL + 1
iíniJeit ÍV

BN

ni
escribir
- -
—^
v

TOTAL
.(5 2 oHbmgjB) ^ r ~ . , . ..
. H eiO .0 r .£ oiugR

\z~ rn M¿SJIRRERFLSTFIH - wAZzm mzmmom .o.s


Para solucionar este problema, se puede comparar la suma de cada pareja con el tercer n ú menxlCon
tres n ú meros solamente existen tres parejas distintas y el algoritmo: de resolución del problema .será
f ácil., . ; - r h .oju íi mmngcrb sol m otum v ¿t timwz ujro na radiis#? 98 ¿cvisaoi/*? ¿¿mohos
^ —

,

t :\trjy » ; nii rjs aonom *; rid


1. Leer los tres valores, A , B y C.
2. Si A + B = C escribir " iguales " y parar.
3. Si A + C = B escribir " Iguales " y parar.
4. si B + C = A escribir " iguales " y parar.
5. Escribir " Distintas " y parar.

El diagrama de flujo correspondiente al algoritmo es el 2.6.

Scanned with CamScanner


de programación
.- . y
n » «, n o s »f' * '
56 Fundamentos

• •
inicio
<
.wi , / . - '
\ »r
^

leer *

A, B, C
n .(;

s/
A+B c
i
\ ?( . u i r c B r,

no . »

s/
A+C B » -
it

Gr ivMUH
'

no
"
si i
B+C A
= 03 IW '
- ?>•

no
-
r
V
escribir escribir
« distintas » f

«
r
-* JATOT
JATOT
«iguales»

...1
fin t

\\
c
1
• r*-*T
Jr uJ íi
II \vJ \
Figura 2.10. Diagrama de flujo
2.6 (Ejemplo 2.6) .
v
X.
2.6. DIAGRAMAS DE NASSI-
SCHNEIDERMAN (N-S)
acciones sucesivas se
bir diferentes
' el° qtTom° tenn lashs
como un diagrama de flujo
d
escrjben en

^
acciones en una caja /
su “ V’
^
W C m diagrama
°,
as & ó°n y°las cajas de Chapin es
en los dlagramas de son contiguas: Las
flujo, se pueden escri
— -
c C» V >» •


a

f A • *

* t
l

•1

Scanned with CamScanner


La resolución de problemas
con computadoras y las herramientas de programación 57

Un algoritmo se representa de la forma siguiente * r I — • .1


( >
v\ 'y y V > AlUínUV)


> \ ’1 , i
nombre del algoritmo •i
A .' i ” - üi ;vn\ í \ •
/ ¿My I
< accion 1> ' • '- .
< • .’\ , 7
)
. 'i » (l
i. ?
• ’
• < > t
* :‘J •
r
!\ ' .s i
¿ . T> :
J *

< accion 2> * • J


* 4 >n . * -
i; * ';líí1, UlOfi ¿f,í •
< accion 3>
.
*.
5:1 ; ! fK/ . ' :! > .
• '
- -- , í - j.Oci > insmí tq «rti a
:*
J• - * **
' * - * * •
' i i
* í
'

. í il - *
bj¡0 i o cr . mi muvti 0 « U)l* -' f;!
fin • vi JIJ 0’ ’ ! :oq •-. /;! ( 'j
*
( tu
'
. ,
'! •
V . *\ ? • .<
* .yjdffion te irdivj
11
"i >\ V
leer ' > oriel»;
nombre , horas , precio *;» V ¡dín
(M H , \
; i o?

calcular
salario 4- horas * precio
nnin )00QU38S . v.s
calcular
. . » •; ! * ?;’; b om r; impuestos 4- 0.25 * salario o' ¡3
'L! . r¡
'
*

f» . . ;
r
.i calcular ¿ : '
* >¿ • 'r . :• »;í in. ¡ 1 til»* »;.. ;.> 4 '

: í* ; y » -'

- ->í
• neto 4- salario impuestos - •• '
*
- '. f
f ¡ ,
I
i ' .
J .-
i
*
* 'í !fU : il
t‘ * • *
>

escribir
i 7 1 1'l
* nombre , ; salario , impuestos , neto Di * ¿W ,
* . 0 * ,í j |3
: M . frj í . .
. V ;r -
' j ,
* i. «
jn i iijji irbitu
4 , i . . .; *
% . |. ' ’

1 /
'
* í '• i '”
' « k • • * . \ >

- 6J í
La estructura condicional (el rombo) ú: . c
'

; -
. r j- , ! v
te , ar; 1 . : ‘j ! -
,
-J u¿.u •; I •' •

!
' / - . \ -V . , i .íjiofj,
gJ - . i- '¿ . ' - i P: :/ M
' • " | .
) v

;
ó !’ ; . • - . .
viort r si .
i : . * / rt ; ^ vi
¿condición?
:ov S ‘j.o c ; /.:! . ii ru í u Í Lrnor .í; ) .
.
'i ;[ M'. i;

*
4
i 'V
OJ íí U TTí ni * no ot/ £3 d ) J i:) '"/ r; n w üííV t/¿i: - ol i;í m)

. J :5 íí O^ í oí r ? . - ü P 'J ^! t. '
t. . •
' • vffjuq V :J : » OliibÓ'J
^ ' J* J .
-
; r J v i i v* r J » í * ** •
mi ) 4 : ; • •••
/

acción 1 acci ón 2 . v \ 6 h /'


f t;

:• .
"
' • , l ^ < / • • ' *.
.

:
/ ? I if ’!M >/ t »; * rvi ’ r » i

íLin n > m í í ü / íi;; .-.‘ ji ; : !! —


i;l
ui
• t i

-
i odKn - u! * :.- , — rtí n n — i i

.•
.
,
•' <

b
» ?

, b >'
í x j!i;: ,
" *
) (
'
IKSHMI ¡
:r

QU

- /. f . i « obrmifwi fiujicm te fi9 Bh§nj;< ) iü . »'PV > ." .


- hb f üjibóoobuvq ni nw¡ J JíKVW|.M 1
se representa por
B í U MH
'
-i iU ojull ' * ;>
J /» .r% %.
.
r
V
> . V
k v *Í. •
«' a
.

¿condición? ,, - r, • . :u , {< >


no * j »; . i :;i * x , t 3 .
si
Lt .
A t i j‘ •

/ i. íf . i -T £ { ;
t m»
< acciones> <acciones>
?• on# » .»
»•
. J r v • -*i * * .
: ; 3Q i:! iKí J l > oruinriid L1
^
y . -' .Tí : b. i .
,

* • /
If ! Y .I : - n -
-
-
*
• r
: •
- ' Im auníl .í ní í oioixxl
J , ;
*

Scanned with CamScanner


• n. » tv, . t:'

de programació •
n >

Fundamentos I ; ll I
.
tr#
58 :I * )r
'
' "•
:•. !•«< r i'
horas traba
Ejemplo 2.7 en función deI número de
trabajador
calcular el salario neto semanal de un
Se desea :
jadas y la tasa de impuestos
35 horas se pagan a tarifa normal, tarifa normal,

las primeras
que pasen de 35 se pagan a 1,5 veces
la
•las horas
las tasas de impuestos
son: ,
• 60.000 pesetas son libres de impuestos impuesto,
de
a) las primeras
40.000 pesetas tienen un 25 por 100
b) las siguientes 100 de impuestos,
c) las restantes, un 45 por .
• la tarifa horaria es 800 pesetas
bruto , tasas y salario neto (este ejemplo se deja
, salario
Se desea también escribir el nombre
como ejercicio al alumno ). - ,


V i <*,
- i

2.7. PSEUDOCÓDIGO
ón ( descripción ) de algoritmos. El
uso de tal lenguaje
El pseudocódigo es un lenguaje de especijicaci
ó n a un lenguaje de programación ) relativa-
hace el paso de codificación final (esto es, la traducci
mente fácil. Los lenguajes APL
algoritmos
1
«»
. rt o
rascai y /Ada
AFL Pascal uuu¿<ui a veces como lenguajes de t
\ ua se utilizan
especificación de

de representar bási-
— j

El pseudocódigo naci ó como un lenguaje similar al ingl és y era un medio


camente las estructuras de control de programaci ó n estructurada que se verá n en capí
tulos poste-
riores. Se considera un primer borrador , dado que el pseudocódigo tiene que traducirse posterior-
mente a un lenguaje de programación. El pseudocódigo no puede ser ejecutado por una computa-
dora . La ventaja del pseudocódigo es que en su uso, en la planificació n de un programa, el
programador se puede concentrar en la lógica y en las estructuras de control y no preocuparse dé las
reglas de un lenguaje específico. Es también fácil modificar el pseudocódigo si se descubren errores
delPr08 - m'^as que en muchas ocasiones suele ser difícil el cambio
en la lóa ca un vST
“ rafma un yaje de Pr Sramac¡ón. Otra ventaja del pseudo-
r
^“. . í °sttlI""sTlXT'" “ Palabras
-
Jig -í
0
3 engua es estructurados como Pascal , C, FOR -

TRAN 77/90, Ada 83/95, C++, etc

,n S ^?^^ . ,
8 reservadas en

-
SU

.
inglés e a
T "
Stop, if then else, rvhile.end rep a un e c «c
' ta es
' *<^t, end,
¡ge normalmente la
indentation (sangría en el margen izquierdo) de dlferentesh' pseudocodlS °“
1T"“ "
start
* “ u »«„ *» j o. ’

_ horashoras _ _hora__hora
/ /calculo de impuesto y salarios i
read nombre, , precio
salario bruto
tasas
_ 0,25 *—
<
salario_bruto
precio

nombre —salario__bruto - tasas


.
salario .

-
neto < salario bruto
tasas salario_
write '
,

-
i
, ,
end
i d neto

El algoritmo comienza con la palabra


start
" .VSSíSiSSiTizgiS
„n '

Scanned with CamScanner


La resolución de problemas con computadoras y las herramientas de programación 59

La línea precedida por // se denomina comentario. Es una información al lector del programa y
no realiza ninguna instrucción ejecutable, sólo tiene efecto de documentación interna del programa.
Algunos autores suelen utilizar corchetes o llaves.
No es recomendable el uso de apóstrofos o simples comillas como representan en BASIC de
Microsoft los coméntanos, ya que este carácter es representativo de apertura o cierre de cadenas de
caracteres en lenguajes como Pascal o FORTRAN, y dar ía lugar a confusión.
Otro ejemplo aclaratorio en el uso del pseudocódigo podr ía1 ser un sencillo algoritmo del arran -
- • 1 de un coche.
que matinal 1 1 r
-- »• • ' ‘ 5 * • l i . h J\ » J 1 1 •
'
•. • .. J i. ¿
: >* * ; I j ) h 1 « H I I

, « * •* - l .
* A- J > i
1 ' r
inicio i ,
• 1 f
!A f 6 5 5i
w * J

: r / / arranque matinal de un coche


introducir la llave de contacto T* I

tirar del estrangulador del aire


.
l & loi í D iisIwuIO .
girar la llave de contacto
c r; c í X :? ¿ o 10 i c T n i • j •

pisar el acelerador
n i i: í •. o i i . l L ’ i a 3 . f .
oir el ruido del motor
. r
t \*
, , » : J ! ; O ¿ Ifc!£ 1 : b I í 5. '3 i 7 . í
.
' < •

- V *
^
pisar de nuevo el acelerador
esperar unos instantes a que se caliente el motor
llevar el estrangulador de aire a su posición
.•• rji V ojwft . l'l tib 13
í.it'
' ,
.
fin

Por fortuna, aunque el pseudocódigo nació como un sustituto del lenguaje de programación y,
por consiguiente, sus palabras reservadas se conserváron o fueron muy similares a las de dichos len -
guajes, prácticamente el inglés, el uso del pseudocódigo se ha extendido en la comunidad hispana
con términos en español como inicio, fin, parada, leer, escribir, si-entonces-si _
no, mientras, f in _mientras, repetir, hasta _ que, etc. Sin duda, el uso de la termino-
logía del pseudocódigo en espa ñol ha facilitado y facilitará considerablemente el aprendizaje y uso
diario de la programación . En esta obra, al igual que en otras nuestras 1 utilizaremos el pseudocódi-
go en espa ñol y daremos en su momento las estructuras equivalentes en inglés, al objeto de facilitar
la traducción del pseudocódigo al lenguaje de programació n seleccionado.
Así pues, en los pseudocódigos citados anteriormente deberían ser sustituidas las palabras
start, end, read, write, por inicio, fin, leer, escribir, respectivamente.
inicio start leer read
r >' h. r i t

-veoit íJunMi1 01jÁTót :


Í A8AT :
JH AAJA2
\
>
*

fin end escribir -write '


ikl üó ihi»
'
— /

> )/ • » ~i ’ ^ •
.Ü T 3M Oí VIAJAS
;\
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS
.

.
.
2.1 Se desea obtener el salario neto de un trabajador conociendo el n ú mero de horas trabajadas, el salario
v % v

hora y la tasa de impuestos que se le debe deducir. . . ,,


. ’ '
.
El algoritmo general es: y, [ .* JATO
, . i

\
1. Obtener valores de horas trabajadas , salario _ hora y tasas.
• * < T !!- . '
• » ¡ »s . 7 re i
2. Calcular salario _ bruto, total de impuestos y salario _ neto.
3. Visualizar salario_ bruto, total de impuestos y salario_ neto.
;úí
i lu í - po l ;;t : } •«

í4 . [ i
1 Metodolog ía de la Programación . McGraw Hill, 1986. -

Scanned with CamScanner


:;<r Q s
ón
Fundamentos de programaci
VA
60
y * í f *:J
• iibbJU’in J :
'
r ' M
; i ¡n %nin cs.il / ri on
• '( %
/

Las entradas del algoritmo son:


horas trabajadas , salario
_ hora , t a s a s I
wr *

¡- Jtri' jmo m
.. /
oT/. ;
M
• /
j /
• . ' fri .
'
/ w i> ri r '
T . •
*

Las salidas del algoritmo son: .triorii' i¡ ¿o! ¿¡oto


losonil/ i
j'

y paga , neta i
V: U I un * u ; fuj' jnt no )'JULO
paga b r u t a , total de impuestos
I 1'> X
1! )£: olqíí . ap 013O
>

El refinamiento del algoritmo en pasos de nivel


inferior es. . 'jf í >< - ; u ob li;ni í i;m buy •

t r a b a j a d a s , salario b r u t o y t a s a s
.
.
1 Obtener valores de horas
impuestos y paga neta .
.
2 Calcular salario b r u t o , t o t a l de
horas t r a b a j a d a s por e l s a l a r i o
.
2.1 Calcular salario bruto multiplicando l a s
hora .
b r u t o por t a s a s
2.2 . Calcular e l t o t a l de impuestos multiplicando salario ’
( tanto por ciento de impuestos )
“ * • * -l . ' *

2.3 . Calcular e l s a l a r i o neto restando e l t o t a l d e i m p u e s t o s d e l a paga b ruta .


.
3 Visualizar s a l a r i o bruto , t o t a l de impuestos , salario neto .
í. • >: - . T
* risciq
' b ; * •

El diagrama de flujo 2.7 representa este algoritmo. T :


^ ¿-o

- í • ‘ v . f /b ' -C r '
i. ¿3 16V5ÍI

Diagrama de flujo 2.7


i r
•v* •
" "N . / xirpíi ujirfliiiií) w ¿
fv inicio
J ^ ,oír»üJgbiiD:
r) , evteí sq
- Uf v

'


• > •
T
..iQ -hilDecríC Ki: / r? AS I í J .rv ? r; *
- . *j / * ;
;intrArlii
-

r
E : Offr *5 : :n {
7' : rr. ittr
——
'
‘ Cnlí 4
V; v .U 1 ..
/
introducir /M r

^ í
zof i
r; HORAS . • ’
. /n ** 7 V
> “ t "* -
, «•
V.
_

O U * **
{« *

ATAAA . ; ;\ j , ,
-.

.
SALARI0 H0RA . - no orili '
i lv ;v t Í 3L L '

3f¿Íii ? P£ l i< i it; ~


wj t
TASAS rr \A * '
" : - JI -í:.

¡
T :
ü r. < i > ;
o!x - - i
r\ íofis : o .T: >:: v A
"

' *» Í£

:i . calcular j > ' '

IbrjnbtV
SALARIO_BRUTO
I

1 c
H0RAS*SALARI0_ H<0-
Í 'í -i ' '

RA
a

t
'
•:


,b ?>
.1 c. -. lí r
ñ \Jzc' zv
-
-
"
Í >i 3 c -
TOTAL_IMPUESTOS<-
calcular \

SALARIO_BRUTO*TASAS
tari
V

*
U *^ >
> » r

.
I
calcular

IvSLé
t* r ^ruu . ! /.
. '
ia
ubi
f .. ;
-
-
u, i .> ; : .. . i /
/ ^ i;
ARIO RUTO-
^ TOTAut
-IMPUESTOS
^ |v 1
^ "
¿ s >
- Vf ?
-
23
^ QAQ í V!T0 \
síguicn ív:
..

visualizar (
^ V. !'. >- ii o i j t r.-t do ;ctí b c’¿ .!
¡ i¿

SALARFO
^
f
BRUTO rn L! <^«TOíi -
i
7 •

TOTALJMPUESTOS
SALARIQ NETO /
/ .
1 l nV!
-
^
i wn*ñ .:; í c 1:1 '
.

'
.
.

.
.
fin
5.
- r
« .
. : v>

Ii
* r

\
v

iV ,l

>
. - *.
. * i *¿

.. . '
.
»!
>**
tivUSStfi

'
--

Scanned with CamScanner


La resolució n de problemas con computadoras y las herramientas de programación 61
* . ¡ OH '
. ' • -
.
- * ' i . I ! ( V/ '' ) !
• ’ .
. .

- 2.2. Calcular el valor de la suma l + 2 + 2 + 4 + . . . + ioo . yj O * / ¡ Wí 3O!» U
^(J ! í *
-
'•
Variables CONTADOR (n úmeros sucesivos a sumar: 1 , 2 , 3 , . . . oiojtni
oqírtflij i . "vt/ í;j.r* j

-

-

Pseudocódigo
> •
r
í ll ! / ; t Mu * tT I . >
í > v a í > r. f w * t/ ; ! f
r « , v»
"Í J ÍíI

EO J L' : \t JO * ( T / ,^ * • ! J . ó,;
f :* > rr?o ¡ :
1. inicio . * í V í J f :( n i
, í i j. !‘i i J ;d
2. Establecer CONTADOR a 1. ü b *
í

3. Establecer SUMA a 0. nil


4 . mientras CONTADOR < = 100 hacer lo siguiente:
4.1 . Sumar CONTADOR' V súNÁ V •* > wn» »n no nm /noo • b H M T oqmsü lis . l-TW.
i
*
'

í ! l ; ivnou •;' ) filtmnó) r I .( • lifft e l KN oqmoi ) v . j )


4.2. Incrementar CONTADOR - 'er '

*
fln_ m± entras ’ , . f
5. Visualizar SUMA.
6. fin.
^oirjnirrr n* ¿LVHF i\ ?!> c# rinit lo i' .Lní rori no? o
Este algoritmo se representa por el diagrama de flujo 2.8 .
Diagrama de flujo 2.8
IOi - !-
• " IT. -
-
. WI .I i ', ,- o omlriojls 3Jt9 9b 0(. í fl 9b t íí HMil io fl!
( inicio )
\ y 91 n\uTVjV, ut*.mTASÜ(i
! !1 * <

70 CONTADOR
V
1
OiO Í ni )
*
v
p
1 obiftevnoo srl 02 :
| staemsivaiq
*
"
l lioLibctni \
soft/ ni n nsSUMA 0 V 7 Isíol oqmeii \
1
*
*
N:t
^ mientras
CONTADOR <=100
*
<TO T

! ptnrtc d' jln jt ) 10


-— í
> '
\Z

a ñ adir \ MCIYV» visualizar


CONTADOR a SUMAi ib e/ / ^mrSUMA
— / T
í
incrementar
CONTADOR en 1 rvteib"
;. > r . 2
fin
1

i
3
I
la carrera en 2 horas 25 minutos . Se desea
í 2.3. Un corredor de maratón (distancia = 42, 195 km) ha recorrido
por kil ómetro.
un algoritmo que calcule el tiempo medio en minutos
-- Jt
El an á lisis del problema es el siguiente:
fy y 0

A V<nuu3í *3 '

Fntrada • Cantidad total de tiempo


empleado en la carrera; se establece el número total de kilómetros
en 42.195 , ya que es igual para
todos .
kilómetro, transformando previamente el tiempo total a
Salida - N ú mero medio de minutos por
minutos . .
en minutos por el numero de kil ómetros.
Proceso: Dividir el tiempo total

Scanned with CamScanner


62 Fundamentos de programación -
y r.v ' . ' ( no sr mnMmq . nonulofc*' * 1

El pseudocódigo es: ( Mi 4 - l f 4 r +| -- i . lO KV' b .«


r
inicio yrtjur
V ' \V
' VU
introducir tiempo total í rn / niJ '
' •
f.
verificar entrada correcta
establecer distancia = 42.195 km ? ; *
V
pasar tiempo total a minutos
calcular media tiempo /kilometro
escribir resultado . i ; " *
fin ;*»
'
t • WJL J '
' ? )
'

’ 'X

NOTA: El tiempo T se ha de convertir en minutos, bien tras introducir su valor o en la instrucción 4


(pasar tiempo total a minutos). La fórmula de conversión es: r
t
T 2 * 60 + 25 :
i;

'"T r
«
* -4
o con carácter general, si el tiempo es h horas m minutos
T h * 60 + m
"! ‘ : -b . '. i n i! f ; t 9 i ¡ vr 92 onjjnogls 9Í *3

El diagrama de flujo de este algoritmo es el representado 6


ón. "
’ ’ ,a
L_
/
a continuaci
V

Diagrama de flujo 2.9 ¿ jtn : \


i

c inicio

i
- 1
. 3

introducir T se ha convertido
tiempo total T
en minutos previamente
r -
-•
»* .

T <= o? no

si

X
••
r
.
i!r » •
escribir
mensaje de error /* * •
'* u ¡

distancia * • ‘i
D <- 42.195
\ Jt)

i
• M
calcular X
T/ D I "

i
.
,j
r
^
- •

vtf }¿
• '

omisioglti nu

i' it :' rJ •|,
"*
I

f
/ t »; ,
i jT ¡ escribir
resultados ! .<
- . - ‘

i i> rn wlojfi !v . >


113
&01 • )
rri
te m*jt . •
-
#
,
< ./
• ‘1 . . » ' u - " Ubimo
r i t
r*
fin 1 oí i **- :,

‘ >.

> nr » - r
« * r irn
r

-
4
;M
«V'Ti al
hi":W

Scanned with CamScanne


r
La resolución de problemas con computadoras y las herramientas de programación 63

2.4. Definir el algoritmo necesario para intercambiar los valores de dos variables numéricas. j

Análisis ú t 'Xv.vJ .
Para realizar este análisis se utiliza una variable denominada auxiliar que de .modo temporal toma uno de
los valores dados. mugni ni nu M> 3101 ti j juz o sata tob . M : OM fcturrnó t £ l -
Variables: A B AUX imnu > •
\\ \r . \ ~ <\

El método consiste en asignar una de las variables a la variable auxiliar: 1


,, v'.
,r D H t S T f U / itOOO
li
AUX 4- A

'
1’ * ;• Jtfl XUU i J #

• • .
lf

/ . . .
• j { •
^
fn tDfiUll!Tílt
.
> B
w í c\vw. * >(Wtn ¡
»

A continuaci ón se asigna el valor de la otra variable B a la primera: u i


1
lo .

A, J. 4
oioini
%

Por último, se asigna el valor de la variable auxiliar a la segunda variable A: : í


* V.
. .• v » » •
- , 1 rv I- , —‘-
J
> f : • * *

B 4- AUX , ;
- * J.
*
I c.V - •
rtr AB . .- -
' *
« . ¡as ! V

Variables: A primer valor, *; f-, * t*

B segundo valor, f
AUX variable auxiliar. \i f # % • • ..*
» .- » »
4 — •’ ‘i

-
• ulo C I ftl á •
“ <1c
> i

AR Ü 7 JA
* f
\ I ^ ^
V

-V
Pseudocódigo
inicio
leer( A , B )
AUX 4- A
sv o
: x nupe : .
, Lro
m - , -> A 3 HA
-
^r . .. ,
- ,; 1 M U")
:
A 4- B '
: A R A T j A :> A 2 A e . .
.
, j . •
H
"
* J
*

B 4- AUX
escribir ( A, B )
ftoha de Madrid el jifa 23 & agosto de 1987 fu el igu
.tr
u fin > fai
\
Diagrama de flujo 2.10 \
lidiioao
Al HA \ \

^ ^
.
t inicio
1
\ 1I t
f
: i« •
*
t * • 1 •!

» J
leer A, B

. 4 ~-
ué !> M

A U X f- A , r ,, . soir> í:iH 3t 3
, 1
A <- B
í .
1

OJ ' I
B <- A U X ; Mi . ’ O /r . » ',
.! • »( v
.
, £ t í oU 1 , 5.

• ‘1 A
>V
escribir
A, B
Í \' -
1
c fin ) *. \ . , *'

*t

Scanned with CamScanner


64 Fundamentos de programación
,f v>\ > i ’
- 1 »•

2.5. Escribir un algoritmo para calcular el á rea de un tri á ngulo dada la base y la altura.
»
i liflf í /T .1,1
. . .' • i
• '•

Análisis
.I • j f i ** If <
j*
» ... * c >t
i *

A
La fórmula geom^ étrica del á rea o superficie de un tri á ngulo es:
f
T
> ' i
>
i •itu t í :' U - ' i ,' .1
¿“ JA;’ -
- t rol

S = ( 1/2 ) BxH B = base H = altura V


A V*
M \ .v y/
\

Se necesita asignar los valores de la base y la altura a variables por ejemplo, BASE y ALTURA, res-

pectivamente ; a continuación, calcular el área utilizando la fórmula y asignar los resultados del cálculo

a una variable llamada AREA. Supongamos B = 4 . 5 y H = 7.2 .
t r / m ía r ‘ u u\ . t ; v u > v \A V .UVJ I J lAtithn uhiMMiiuvrj A -
. frlr.;•. ,.
»
c
idmtigv ..
inicio

|
¿ ; i i ' Mi ,
)
ou'. rt ::: : !,1 ti u !i; / i - .- MinLr o - / Kriitl ú í c/ l
) ’
,
->

BASE <- 4.5


. í J! . / ifvcirrq ft wsAnnül•
ii «

IOIBV obrar ;< x


. li / m; o í d /.., I , /
ií j ' .i \

ALTURA <- 7.2 vv **V3*/i


oioinc
AREA <— fi XfM
1/2 * BASE *ALTURA
-
XUA
4i
a
» A ) tridi 'xoa ®
nil
escribir
Á REA

f "
'• ~ VVV V\ /A u
*

i
O í‘. í 11 ¿
\
)
fin

*
E A. vio
r~-
) -
-— A
I; EJERCICIOS / 1
i >»
XUA
2.1. Deducir los resultados A
que se obtienen del sigiiienii algoritmo:
var entero : y„ y z
inicio \
y §
7 20 V l\ A ,
\
z y 4 y — >

escribir ( •/ , y )
escribir i % )
. i
A -
.1 > V

fin

- •

Scanned with CamScanner


La resolució n de problemas con computadoras y las herramientas de programació n 65

.
2.2 ¿Qué resultados producirá este algoritmo?
var entero: nx, doble
inicio
NX <r- 25
DOBLE NX * 2
escribir( NX )
escribir( DOBLE )
fin M
‘ - • ‘ . e.
*
* ¿ y* ..
^ ^

2.3. Escribir un algoritmo que calcule y escriba el cuadrado de 243.


2.4. Escribir un algoritmo que lea un n ú mero y escriba su cuadrado.
2.5. Determinar el área y volumen de un cilindro cuyas dimensiones radio y altura se leen desde el teclado.
2.6. Calcular el perímetro y la superficie de un cuadrado dada la longitud de su lado.
2.7 . Realizar el algoritmo que sume dos n ú meros.
2.8. Calcular la superficie de un círculo.
2.9. Calcular el perímetro y la superficie de un rectá ngulo dadas la base y la altura del mismo.
2.10. Escribir un algoritmo que lea un nombre de una marca de autom óviles seguida del nombre de su mode-
lo e informe del modelo seguido del nombre.
2.11. Determinar la hipotenusa de un tri ángulo rectá ngulo conocidas las longitudes de los catetos.
a gra-
2.12. Dise ñar un algoritmo que realice la siguiente conversi ón: ú na temperatura dada en grados Celsius
dos Fahrenheit.
NOTA: La f órmula de conversi ón es: F = (9/5) C + 32.
s de sus lados:
2.13. Dise ñar un algoritmo que calcule el á rea de un tri ángulo en función de las longitude

4
Á rea = P ( P ~ a )( P ~ b )( p - c )

donde p = ( a + b + c )/2 (semiperímetro). ( metro = 39.37 pulgadas, 1 pie = 12 pul-


2.14. Se desea un algoritmo para convertir metros a pies y pulgadas 1
gadas).
agosto de 1987 fue el siguiente:
2.15. El cambio de divisas en la Bolsa de Madrid el día 25 de

100 chelines austríacos = 956,,871 pesetas


1 d ólar EE.UU . 499 pesetas
= 122,607 pesetas i

-
100 dracmas griegas = 88 ,728 pesetas

V

100 francos belgas = 323 pesetas



. .

1 franco francés = 20, 110


,938 pesetas
1 libra esterlina = 178
,289 pesetas
100 liras italianas =9 i

) .
ones .
2.16. Desarrollar algoritmos que realicen las siguientes conversi
íacos e imprimir el equivalente en pesetas.
a ) Leer una cantidad en chelines austr
imprimir el equivalente en francos franceses.
b ) Leer una cantidad en dracmas griegos e equivalente en d ólares y en liras italianas.
el
c ) Leer una cantidad en pesetas e imprimir

: *, % t $
/ *V ft i i

Scanned with CamScanner


canner
Scanned with CamS

. rr tet
c) » nj
* CM >
>
j
a)
> f eei ima cat) iqaq eu qi* r.uia<> Eu :
pcct nil 3 «•«a/IK- fj $» .. - GUV í!( V{ T .
C ¡ • vliu ::!

• • •

. •'
-
• r .

' M : . > - j; hti - i -


r. h n f ..
3‘I ? |>*»»«xo¡ *

. - J ~
Ll
-
if# ;
'

I J »p; v i ^ CMIUS
.
* IJ 8 > ‘: : 1 •

j y/juro
= 30 lit 3 ' •

_
'

-si
lOO'qiffcuf • - Suefis •
'
:
'
// •

i <I<?J« EE nr » 1331 '

J (X) C|. JIUC* '


.
= «¿P r. j ‘ ' '
> '
'

3*12’ £j r. -njpor : . . \y
f - r. w .\ ir)
5sqs > ) -
j*ff gc qe?c& n e
qovqr \ > =
, r
* « * ? » • - * o - - -;
• ; v. IT
+ < * 3 . V i ’i b u r ( •
.


• i o; l .' -
r: ' p' t f niriu . y;-> - - •
j

óó
’ft = b(b - a 0

Ti? Dpqra r
ó ajSiwitiw d cap
'

^ |C
i
Jiif 'f»
. t ouunfa (jc
: "
. . ;
( G' . *ifji. cupcif
J' f
nr j. ' :J ’ ; '

- ' • •
: . •
. - IG . r,0 v\’ (r\&L ( V , i ,';
r i*

x , i; Gfjqc u.
«/I fc ^
¡
u e i u y a u' / . or 1

' tiJJpK.
3’ y racupitai/ rjEoufujo 4 »Tfc?i u
• f

3*d C*l - 3 ’ 0 3 - i n - G
• I ¡ Jy #'
‘ ’
. • •

y g‘ Q r j¡'.n j7 L j’ f ^n i j^ Liir :'.


¡ i:
~u a
-
' i .v
1
- -
7J ¡fes / mn c; ujSoutwo
* r

jy 3 :<G
2 * Dctcujjium.6 j
'
J
?'f f in o - j
'
' ’ • •
'
• -* * • -1
-
^
< fK> 'i - '- }
'

/ rJ l» <l«'- ' '


'
3* 2' ÓC { 3f COt '
m *

saci ' r ' . :


«scrr or £. • ;

TOfcjo
f VL t

3' j .3
'
i

r v >

. t .A 3 )
^- '
' '*
rV;* ~: . / T V J - At!. I ' b £4


. •r pJiOKit
l U
^
3
1

• )I.t O iCJ { £> t j


A
J I 11 *

1
I

H' J *

f 5 «
1
u
M
< *

," ¡ G CAPITULO
1 .
i 1
I. , q . ' uri:ro i vi ;' . , . '

I M :
M 1 !
A ESTRUCTURA GENERAL
•* > v » \ « Wii
^ * !JlrDE UN PROGRAMA
>
'

* J
T i o i

0 H • v nftioinuqaQ
.j
ni rr
3 «; ; ? v:i
>u cl o! » * ':t oo »( j 13 * J U c u j p H *


'
Viikwwso >toooi() nó .ainaiugiznoo toq ,«> wi>vM»ium$trtc\ V> otvitnn liZ
- í
*
CONTENIDO
’ '

' I'9'1 ®* ’
- / ll. u; . £ - (/h r1]t¡z r j) ii n >i t- fi

3.1. Concepto de programa. ,miuMnru \



. .
\ A) mV im’i r nbrm\ÍVA > . i
3.2. Partes constitutivas de un programa . .v.fiwinu;,\:\ ' \ I i rU’.V . £

J )

3.3. Instrucciones y tipos de instrucciones. . -


ojuD jb nrnf:ia; ib . w

^.b
3.4. Tipos de instrucciones. ,2 -M nmui ií ©
3.5. Elementos bá sicos de un programa. ;o3ib;) )obu ^ q o
^
3.6. Escritura de algoritmos/programas. wYn V}í \ \ Wvi J. .
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS.
y i< vu
’ ' «'' Vm-ntm; ' u
'' > K\ ,
'

EJERCICIOS.
' * “
.- twrarttwwvjiA » ?.
j

, J . - ¡no ! . ' - : - '


• •
- .tr <
v. ' s ,.' ... 1 . (
"v
1
f ir . ) , d
IcJrrcmabnut ovijyjdo h no/ v ¿siohsiru; ' uluJkjcu.zol Aü ¿abixUau: obic and n / £ y I < s> n \ x«J
,
- -
O Í fl íi V (T 1 olljlKJL ) > : ° ' y n . ^ * ** * * ' ;- < vnrv
' ‘
^ * *' r » ri
* \
%

' t >
i
»
\

ab 23(Eugn9l 9tdo2 / 0 j| bEn los capítulos anteriores se hlá ‘visto la forma de ' diseñar algoritmos
para resolver problemas con computadora. En este capítulo se ¡ntroduce'al
lector en el proceso de la programación, que se manifiesta esencialmente
en los programas.
El concepto de programa como un conjunto de instrucciones y sus .
tipos constituye la parte fundamental del capítulo. La descripción de los
• Mijjr . b elementos básicos de programación, que se encontrarán en casi todos los
.
M r ' iV \ Vv
i programas: interruptores, contadores,'totalizadores, etc., junto con las
normas elementales para la escritura de algoritmos y programas, confor-
resto cle capítulo.
oftioo . .. j^.man e
- . C. ibbo ob Ol::r » (n 03 }. • < ' *
sbauq urrungt /tq mi oinomÍBUiq a
^
.

,
üuVivi, II
' ;
- c .
jii
;
" -
.
!» ¡ « . ¡ ¿ IUIU I ¡ r

,
íí > *• i .b
í : ns ( v.» >tn\ > ) i fí!Biyoiq bb . í i íri íi j tul
'
M- I n i
ucrmobniii) . . '
3.1. CONCEPTO DE PROGRAMA r—
arnsigbiR ! j
.n
Un programa de computadora es un conjunto de instrucciones — órdenes dadas a la máquina que
producirán la ejecuci ón de una determinada tarea . En esencia , un programa es un medio para con
-

seguir un fin . eitif > QC» q . : u el- . oupoltl

. Z . Z niugR

67

Scanned with CamScanner


ón
68 Fundamentos de programaci

D M
I Definición A
del problema O
C N
U T
7 r
M E
>
i ! I ( ' \ V-' Diseñ o del I

> algoritmo E N
v
N I
T M
Codificación - A I
> del programa C E
»
i &
N
V
O T
Depuració n y N O
> verificación

Figura 3.1. El proceso de la programació n.

El proceso de programación es, por consiguiente, un proceso de soluci ón


de problemas como

ya se vio en el Capítulo 2 y el desarrollo de un programa requiere las siguientes fases.
^ f .

1. definición y análisis del problema; . .. sb olqsoncO . f . E ii

2. diseño de algoritmos: . ¡srn & igotq no i» b 26 vi í u í it8 no;> SE .


diagrama de flujo, áonoioouueni 9 i. :. ooit y enob ? ."t rs! .£.£
» i
^ .

diagrama N-S, .a ^ noioouuani sb eoqiT .í . i: -

pseudocódigo;
3. codificación del programa;
• i © b eooieód aoJnem 9l 3 3.E
.ssrrGtQO . c .comthogls ob Biu í iioa 3 .b . i
4. depuración y verificación del programa ; , - ... . . . , , .
.
5. documentación; "TJ 3U 23fl MOANIAHOOIW 3Q 330ACir
6. mantenimiento. 01010 ;13 i
°
de este libro; sin embargo,

programación .
•:* .
dedicaremos
apéndices, a las fases 3 4 5 y 6
’ Y ’ aunaue

/ •
.
atencin &

'
°
q é sta *S SOn proPias de
'
^
antenores V son el objetivo fundamental
Pi
del libro véase Capítulo 13) y en los
M»os espec íficos sobre lenguajes de
’ Bl

^
!
3.2. PARTES CONSTITUTIVAS DE
UN PROGRAMA
Tras la decisión de desarrollar „n

~
/
~
:„ ;:
Conceptualment
^ ^
as del programa
dP

datos en salid (
fbe establecer d conjunto de esped.

)
"
8

el
egra
c - se
d0r

unSalldas a Panir de las entradas*!° gontmos de resolución que incluir n


,fae
j to de códiS q"'
" Como
,

mUeS
0S
á

* °"
Entrada Programa AKO < - *
1
*
* ** '~~
~ -

r nf*
' •» ’

( al
\
* .* 9oritmo de
y. resolución) - ;
v Salida
* ov'A » n \ttvv )
Fi9ura 3 2.
- BloqueSdeun ti l

r
:?>* •
rI V J
programa. ' * +• * V
^
V

.x »
\\ \ * ¡V' i
.
'‘
>
>
i *

‘• .

Scanned with CamScanner


Estructura general de un programa 69

El programador debe establecer de dónde provienen las entradas al programa. Las entradas, en
cualquier caso, procederán de un dispositivo de entrada teclado, disco,... El proceso de intro- — —
datos , operación de lectura o acción de leer. . m n ni \ ¿ornrnib ma

ducir la información de entrada datos en la memoria de la computadora se denomina entrada de— olio , £ sl . atari - -.
Las salidas de datos se deben presentar en dispositivos periféricos de salida: pantalla , impreso-
ras , discos , etc. La operaci ón de salida de datos .. én como escritura
se ‘conoce tambi
. . .. ...
o acció- n de
- O - < 4 4 S *
4 *

escribir.
^ ^
. aJoc CJ ? IV ab oJnua Í3 otaab riern n ó
** it . I

nii \oioini t> b 'Oiioi /juipnt I ,

3.3. INSTRUCCIONES Y TIPOS DE INSTRUCCIONES i ; , ,- b :; j > m i -


El proceso de diseño del algoritmo o posteriormente de codificación del programa consiste en
definir las acciones o instrucciones que resolverán el problema. : '
Las acciones o instrucciones se deben escribir y posteriormente almacenar en memoria en el
mismo orden en que han de ejecutarse, es decir, en secuencia. ¡ ' i . ; -a
r
Un programa puede ser lineal o no lineal.
Un programa es lineal si las instrucciones se ejecutan secuencialmente, sin bifurcaciones, deci -
sión ni comparaciones. ' ’
„ . . ,<J : > : '
%
f ~ :
t . •

\
'r -
:? Q Í q * r;. > lv .- otnriiri bill..instrucci
instrucci
rJTITjl
¿
ón
ón
1.
2
> : {
n\ / 6 v A i • o n mero •

.
V
. Al : * \ h * VH * VV í lili f
- J . ,*

yú) i bkJehfiV i í Muri ó! J\II / TO Íí; / b ¿Yiv < Ihuid


^
instrucci ó n n

-
r r

one dd lectura tío datos ( entrada ) A -» ¿

En el caso del algoritmo las instrucciones se suelen conocer como acciones , y se tendr ía:
. un :* entrada.
! U U

.
*

iv r. r orcjiino? i?
— acción 1
. Múir' o-
i
• 4
* *
— . j

t < .
¿o • / 4
. '
wnoluv b ri 'Ji • / .1
• .acci ón 2. J
í . k i l í.dll < ] I b nóíou03(3 ci 3b V.jnA .KTCM
j f '
'

> .
Tolüti'/ i'Uu < •bmnt'j. ív.ubnl ü inarnKitoHq .o • { vi yiip iVidnri ni 'jini loftí v mj ijoíivb « v^vb i¿
. fiU Ü ' Jl 'J jli br i < iA uyifci 'jini \> T. n íbb sup í fdcfi il'jvb <:l 0 ce /
.
.
'
. .
— acción n
P > !' ;
1
s

u,
archiva » V -- ». : f *W ü * - • ! !<;
U. Ci * 1

Un programa es no lineal cuando se interrumpe la secuencia mediante instrucciones de bifur-


cación: ZBV U í HM /jLMlenl . f l í
t lt
í ;? .
4
'

# vn jfr
* *» » .*.
*
• #
uy » Mjj

hx ni ’ acci ón 1 1* •» ' •
*
Á -;:i * ji «. j if
acción 2
o - Aax ' n Load < XJ 3i) O .1. O
i

n ¿'í Jan» sb nit


acci ó n x s : :'!
* •:»*&
« r ‘ tu -JM * - vru /i >
Í

r Jt d i *
acci ó n n ? jtxv ( :.nnn J'O i . bi ü;y -'
nó iicn i
*. ;
~V

Scanned with CamScanner


70 Fundamentos de programación

-> í K * bt f í i *
3.4. TIPOS DE INSTRUCCIONES
i
•jo * /
Mili J 4

Las instrucciones disponibles en un lenguaje de programación dependen del tipo de lenguaje. Por
ello, en este apartado estudiaremos las instrucciones acciones básicas que se pueden imple-
mentar de modo general en un algoritmo y que esencialmente soportan todos los lenguajes. Dicho de

otro modo, las instrucciones básicas son independientes del lenguaje.
HCÍ iT.
La clasificaci ó n m ás usual, desde el punto de vista anterior, es:

'i3. instrucciones
de lectura,
OQWT3MI 30 8tm Y awqoowreui
4. instrucciones de escritura,
?
: tab w ítaztb b . ;
. , '"I

5 . instrucciones de bifurcación. v
. - 1
.
'

b It‘j u r t w . . .
TJ « i r* , v * u ; . i ' . . / !»
" W> ú o > .. i i
< , . .

Las instrucciones 1 , 2, 3 y 4 ya han sido descritas en capítulos anteriores y se recogen en la Ta-


bla 3.1.
-
• •

-¡ J J\ . - i . i.. ) É Ú . I . í il ; l i /. T :i » U .010 * O''*. > -


i
.
'

;
; ' - x: i q r

. li í « • I. }

-
.zanoiofncmno^j in m
í > ' 'j ,
' '

3.4.1. Instrucciones de asignación


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

a) A < 80 — la variable A toma el valor de 80.


b) ¿Cuál será el valor que tomará la variable C tras la ejecución de las siguientes instrucciones?
A «- 12
B <- A
c «T .-.S 'J /¿'í ntú'i » o ontoo isoonn - mfout s< ¿anotaotnlani - í A omlnosls tab o - . o b
A contiene 12 , B contiene 12 y C contiene 12 . i vo J

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


Si se desea darles un valor inicial , habrá que hacerlo explícitamente, incluso cuando este valor
sea 0 . Es decir, habrá que definir e inicializar las instrucciones.

A 4 0
B 4- 0
t C 4- 0 :
- r , i • oí V é S : ¡A > I nu . \ v )\\\. 1 ,1 < . ^q
? uijs í y '
'
>l
• fi <
¿

Tabla 3.1. Instrucciones/acciones b á sicas


Tipo de instrucci ón Pseudocódigo inglés Pseudocódigo español
comienzo de proceso begin
inicio
fin de proceso end fin
entrada ( lectura) read
leer
salida (escritura ) write
escribir
asignación A <- 5
B < — 7

Scanned with CamScanner


Estructura general de un programa 71

c) ¿Cuál es el valor de la variable AUXal ejecutarse la instrucción 57* ns j .v > %


"‘ ' ‘ *
*
V
* , . . .. . In
1. A i 10
2. B < 20
- I J J » o b o / i í i 'n/ it * uu rr.Hirj* o v o /i^x- inl ^ iu • •

3. AUX i A
:«anob xmeni eatadjuate ; , ( ab nbbuosj > 1 ab obalfijédi I i ; >ilqx3 • > *

4.
5.
A
B
<
< -
— B
AUX V
- *- * CS
í i O'
— OO J *J I *t • •» '
#
« -
-> ‘

• en la instrucci ón 1 , A toma el valor 10 i» / lidlizz b )


Í
í
• en la instrucción 2, B toma el valor 2 0 »

• en la instrucción 3, AUX toma el valor anterior de A, o sea p ¿ tuüuaihmpt u ¿


t
• en a instrucción 4, A toma el valor anterior de B, o sea 20 g^ irii ¡ uv .: f nanaiJnoo
• en la instrucción 5 , B toma el valor anterior de AUX , o sea 10 ^ / !,

• tras la instrucción 5 , AUX sigue valiendo 10


, . . 3b gsnoioouiian! .£ .&.£
r
, . .

d ) ¿Cuál es el significado de N <— N + 5 si N tiene el valor actual de 2 ?


r i. ¡ ,íi ri i . noi jü J < JT.* i mu
'
-v obnet sqrninipjfii . j >¿ i:rpG;r ?<nq nu 7 b ji; í»nii (}fl í ’ - n; ¿ Dó i:i .

i
. Ví i) cibi |
t rj o¿ sbnoL f; Bt/unaoin laB ot íiuq í b niíib¡5 ,is
' ¿ti /tob nataua
H* ¿ 1 ¿ v». \ • 9 . *, #. * , • <
*
' v U•
i1 « . i , v V • • ' 1 uW I1i • 4 » *
* i

Se realiza el cálculo de la expresión N + 5 y su resultado 2 + 5 = 7 se asigna a la variable situa-


da a la izquierda , es decir, N tomará un nuevo valor 7 .
Se debe pensar en la variable como en una posición de memoria , cuyo contenido puede variar
mediante instrucciones de asignaci ón (un símil suele ser un buzón de correos, donde el número de
cartas depositadas en é l variará seg ún el movimiento diario del cartero de introducción de cartas o
del dueño del buzón de extracción de dichas cartas).
« fx • KlfU ; *
i
V - •

3.4.2. Instrucciones de lectura de datos (entrada )


• 4

Esta instrucci ón lee datos de un dispositivo de entrada.


v ! '
itoi - .mrti ..i r
'
e. n ,- ¡ í •
¿Cuál será el significado de las instrucciones siguientes ?
non o UF 1 vJh

ni obom fin vi * anexiliiin nobsuq crníngoiq nn ab o ( uft b na zanoiofioiir í id * yj
a ) leer ( NUMERO , HORAS , TASA ) .fsnohib
í u > : n í: b sup iq/n ir; r. rifuift nóncaurtuJ í .LimitaUm * » mi «onivnt íVM
-
toq 3f rq ; ( •
:
Leer del terminal los valores NUMERO, HORAS y TASAS, archivándolos en la memoria; sillos^ ^
tres números se teclean en respuesta a la instrucción son 1 2 3 2 5 , 3 2 , 1 2 0 0 , significar
ía que se han
asignado a las variables esos valores y equivaldría a la ejecución de las instrucciones .
í

NUMERO - r n ó O -Of '

HORAS
4
4-
12325
32
I

i
*

J
»
TASA 4- 1200 r
j H
.
b) leer ( A , B , C ) *

t 1 í n óí . os
\

i %

t n
ían a las variables los siguientes valores:
Si se leen del terminal 1 0 0 , 2 0 0 , 3 00 , se asignar
r »
A = 100 I
B = 200
0 no bao
c= .j
300
•1 i

Scanned with CamScanner


9

programas '

72 Fundamentos de r . j. tItí i í j \ t O
(salida ) '
J \'J *
resultados
>1J

de escritura de


iones
3.4.3.
t
Instrucci r

,
en urdispd ‘ ° guientesa¡nstrucciones:
> V*

Estas instrucciones se
Ex plicar el resultado
escriben
de la ejecución eS| 0 1
sV
A

3.4.4.
n n .v
c <- 300

El desarrollo
«- 100

contienen las variables A, B

Instrucciones de bifurcación
lineal de un programa se interrumpe cuando seejecu auna
donde se bifurca, hacia adelante o
y C.

ámLas bifurca-
-
1
:i

«**» ’

iisiluv 'JUSí ?
r
IO íü V

u ; ; r. •
(i

i,

\
va.fno

;
ra;í ‘

i .
Jt .

.
¡ , r,

1

"j
i
!
-* - h -
u!

.'a! ' i V

.
H5
*

-

* ** J

- \ :•
?,°

« /»
'

cienes pueden ser, según el punto del programa a


M. J** '4 Bifumamnaddan
.! tedW. « { «
.
Bifurcación atrás ( lllíalfct ÍS U-\ ! ‘
. 14
,,
tfÍ.;U1 SZ

jn : ( negativo ) /. /lID b 03 ,B»l3IUpSÍ El B fil


*
u

^
«

( positivo ) . TOIBV O
iiii i íiv JI
^ of í ji )
t
»
- r ’ « . t
i n s t r u c c i ón 1
instrucci ón 1 rjvin ni dJnuibon ;
Uí - é r. »
li í nt i n s t r u c c i ón 2
instrucci ón 2 ^ r

oí ntjimi / r > :b , Ji .' - qsb rí;i 3 i ;1


:i':. /. ti *
>
instrucci ón 3
'’ ’
instrucci ón 3 4 . r

.fV í; n - Í¡ ib ‘>f> *
L'd• I • ii
. ñí i.ib
i
U C L I1 I
.
1
:

instrucci ón 8 itn > ; eb instrucción,12Snoieain? ¿n! .S. . 3


*
' ;1 , no -h Or : » i <eoq Mb nu tib ¿ol / ib *30 i
;
nó bDtn ) r> ni ub .’
ultima instrucci ón ultima instrucci ón

did» albifurcaci
0 es
" el nuj0 de Un prograraa pueden realizaree «te un modo incondicional o con
Bifurcaci ón incondicional. la bifurcaci ón cp
"
*
-
.
la instmcción sin necesidad del
H .M :
cumplimiento de ntoguna ón
j pr0 gnma
cZdicl °“ ^^
- •
I (
ítt n« 3l»|s¡| 20)90)1111 Í9ll
,
.
• ' r j
Idisiu / asi i . obsngi
• .

acci ón 1
cr i »4

.; - >
J "
. /'

Ot. ’1
i
'
> •• •

acci ón 2
’* * «
é ¡4 * f . 4
! * i < i jt
> ^ « Ai -VaQl Í d
r ,

bb rmol tv i ?.
acci ó n 3
-
* V , - s

' 1 > *1

C 01 >
*
. •

Scanned with CamScanner


Estructura general de un programa

Bifurcación condicional: la bifurcación depende del cumplimiento de una determinada condi-


% •f %
MEffF 9
A

la
ción. Si se cumple la condición , el flujo sigue ejecutando la acción F2. Si no se cumple, se ejecuta
A i ;J
acción Fi .

23 Í D 5 jS . r .C . E
no ¿condición?
s/
• ! •: /• t JU • r; . lyuol í ü «SV. M <> r vD o *r. ven:» k nu í ty c nU
Vi r
• . ~ i .* V Í i » % • » i < •
i - . M . ,> I« . 4v v
i
^ -’ j
- • •í7T•7i » i;nirm : - .
<
>b crtzm n nu
ü
í ¡> A • \ fj f
acci ón F1
t . > 111 1 ) 7• wn orn ^ incvvrn nu LL i 51 . . . yó n , Ft 2- i. >
acci
j 1.1 fiiobcb
4
. í ft ' »: jiii 'iOj

— — -—
' ; j l
VI ' •*
*
ü\‘) * • MU i. rbm |íno j » >
*

.
— -- up ncoil noQ cnu *3 om¿i u» >om
í> b IEJOI ) tibud lab ubi mvm o cwv \
-
v -A id IJ nt; noli }'/! ‘i r
*
ú up
:?3TiBq ¿ vu ab cJ -,noD ohud n J

./

3.5. ELEMENTOS BÁSICOS DE UN PROGRAMA


-
i 'io'jb •
En programación se debe separar la diferencia entre el diseño del algoritmo y su implementación en
un lenguaje específico. Por ello, se debe distinguir claramente entre los conceptos de programación
un lenguaje específico. Sin embargo, una vez que se com-
i. - .. j . i ón,encomo
y¡el •medio en que ellos se implementan J
f ' liniJHl
utilizarlos, la, ense ñanza de un nuevo lenguaje es rela
i i
- i i j
"

prendan los conceptos de programaci .


, • JbJiiTum JJi»bil !U i v m q m u »
. 30 Ua 13 Ü 1*0110 ; Uir.
, l ' * '
, M f O i l :i ' '

.
- ,.
c
tivamente f ácil . . 3b rnumi c! ¿ítV

que se
.
Los lenguaies
...
T

utilizan como bloques


.; ; ! md . ta
de programació n — como los
ti

constructivos ,
nv J cnu rí anlo:)¿2 vi alnenBVji
.
asi
restantes lenguajes ' -.tienen
como
,
reglas para° las que

vi ir. •
esos
elementos> básicos
elementos
r i oI n - ' i , '¿ i
se combi - •
'


nan . Estas reglas se denominan sintaxis del lenguaje. Solamente las instrucciones sintácticamente
correctas pueden ser interpretadas por la computadora y los programa que contengan errores de sin-
taxis son rechazados por la m áquina. . J
Los elementos básicos constitutivos de un programa o algoritmo son:
.
'
V ¿
palabras reservadas ( inicio, fin, si - entonces ..
, •

etc. ),
• identificado res ( nombres de variables esencialmente), j -

• caracteres especiales (coma, ap- óstrofo, etc1 .), ,M
'
constantes, *
variables, V \
H
A
-U jl
(O \ '
, expresiones \
instrucciones. : tt
i V

* elementos que forman parte de los programas,


Adem ás de estos elementos básicos, existen otros

I ^ ——
cuya° comprensi:óx ~n y funcionamiento sera vital para el correcto diseño de un algoritmo y natural-
mente la codificación del programa. i
Estos elementos son:
bucles, lw
i • \
; .V i .
\ AMUY
1
\\ .. >
I
,4
t

contadores, -L - í — A k S .i
i
acumuladores, > : * í . *
L .
interruptores,
estructuras: minimi - ’'¡ty IX nuipn
—— secuenciales,
selectivas,
— -
repetitivas. ii \ 1 ; «J ,i »vi ; . Cjitot -v .

r
1 lk
‘V

Scanned with CamScanner


74 Fundamentos de programaci ón

El amplio conocimiento de todos los elementos de programación y el


modo de su integraci ón
programas constituyen las téécnicas de programación que todo buen programador debe
en los Droeramas
i IO í
conocer.
'

t

3.5 .1 . Bucles
O Í\

Un bucle o lazo ( loop) 1 es un segmento de un algoritmo o programa, cuyas instrucciones se repiten


un nú mero determinado de veces mientras se cumple una determinada condición (existe o es ver-
dadera la condición). Se debe establecer un mecanismo para determinar las tareas repetitivas. Este
mecanismo es una condición que puede ser verdadera o falsa y que se comprueba una vez a cada
paso o iteración del bucle (total de instrucciones que se repiten en el bucle).
Un bucle consta de tres partes:

decisión, ' Mmzom inv


Mt
m Bóoia Áa eomzwu? .5.*
cuerpo del bucle,
salida del bucle. bh * » ciókiti b •nmu t - : riiu r,: ¡ni/r; , ,
•i !
vuun" iij ybl ) : rs}/.. oj í ; . :* ír -¡ n ! '
> .
• lit f
El bucle de la Figura 3.3 es infinito, ya que las . < - t - •' " : -a . i . ni
i '
* '* • '' • • i , |, i « •
.
* ;
(1), (2) y (3) >se
. •
< ¡ ’ i 1
i
ejecutan indefini-
1 '

instrucciones /
• .

damente, pues no existe salida del bucle, al no cumplirse una determinada


Si tras la lectura de la variable N se coloca una condición.
condición, el bucle dejará de ser infinito y tendrá
fin cuando la condición sea verdadera.
____ • ; > 5H' i [j
) (
omoo nBSiiitU 5tip

c
' jfv • . r : . •:}< _ * »• iÚ ! . 1 Í Ul /'. j . lllir

V.
JUJI m m.

. ' i JU í
‘ •inicio ' ’ .-i boi
K '
i ;' - !(¡* ’ !!
’q
¡ • i
y • • ; • .í -
b n no -' m
)y i
stnin « r.
í Ll
o~
lU

-
b t ío • '¡vjt : ;<i >
’ i . n} nom*»fo zoj
SUMA i ' . oio tul ' v v.'.u’i rví v u UYtt\
s .* 1 * J
t > 11 j i ;
0 .
n\nt\ a
’ Mil.
• i .

.:
' ) 1> ? ‘V\ vAuYlí\\ V!ViVÜ *
Hl ' ' ' uno )
i

°
jlUUtWr •
leer N A ó muv / * .
* /•tV Vr*: v \i. . - '

< v .y I
.rjn« ú nmi í.m *
i »

Bucle
-
' %

SUMA <r~ "


' '
I ‘


. , oh ¿femobA

SUMA + N i )¡
• 1t?\1 ¡
^ : 0‘' ú njiqmou
i
’ /
c •;IJV
- .rrnKi I - ¡\ > I
•f ir
: noiui; V.\ OlUOttt

v

escribir
il : l \ f
- » tiV3í ll
^í J f Oí / *
ri

SUMA (3) A A *
' '
'vvvtV nV v . , * > #
V
iAx A AAVVUXU \\ *'

Figura 3.3. YHSUVWVIU ú *


Bucle infinito.
l

L \
1
Este término se traduce tambi
én, a veces , por
lazo o ciclo.
\
\ ?. \ nv \ VMr\ U*

’ i \\
> *

isVvf —
Scanned with CamScanner
Estructura general de un programa 75
El diagrama de flujo escrito en pseudocódig
o» es: * i «
j oi:rn ?
r
inicio »
SUMA <- 0
_
_ !

1 : leer ( N ) I |
J
i /X IIVJVUü
si N = 0 entonces »
i

escribir ( SUMA ) J í l
ir_a fin
i
si _no
SUMA <- SUMA + N
fin_si «•
i
j
i

ir _a 1
fin i 5\ ^V ) \ ) r \
T
»

inicio
)
1


_
•4

L:±l i
SUMA O
.- L
i

>

ntt nil .*
leer N yuii: a&VáuB o olno \br.aqeb ú z \
- z\j3
• . b u> o 0
'
* ' . A: • > \
t :
< £ iu íí
¿
«
^
r / .< 94r>ud eb eoq íT .S.C utupH
si
» rnphc \* N=0 i
• i

.^. Ti W"*» iLCI 1 . v: i T 1 i r - *


¡Ob '-
. V J t /
i *

re ;! >/
Ó: .s .r f•;
Cu * « tv
no ‘ . «i .• •
s
' ’
¿ * .. n «

-TK! nt- j r'aaan o ?o?o * na *


f ‘. w oh - . Jnarna í o «*ol •
- - — —
SUMA
*
-.•
j j r ;
.Ȇ i
A( ’

i ,’ f
í
' /U
' '/ Ó ^
* ;

/
-*y_s
'
*

escribir /
riiyi ¡; . r
i i 1
. ;
' i - !I
'
£ i’
• ir * [ MJ ifilounoj ’J b < ; if í >
SUMA + Ñ SUMA
/ T rn ü n
IULJMOO m > ti 1

.
».
i
>. k

>
í K Ií JV pi r/,
f í U £ 5:; nt»
O t •

v: -iip
* oni!i
J

;
-r
-
<

5 Mji íi .

Figura 3.4. Bucle con fin.


? Vij >?
j »
pm

. t
• ".

V: *
.

c11 - ,

fin

.
D
üU

Jioi
rí q >
*
no!>c 1

.. i;
"

i;¡ .
,
nlJ
í f

¿
h¡: j

o!) r> J
J L - i;* f -y l i 'Á «n i t > I »C l b i f *I M í: > f .f . K í :/ : * 1
Bucles anidados . . v. \\ v »? r» \ tViirir ‘Oh;
v ‘I; ; ir : :
) ’ ; í’• {
* , . . ‘ f
. í
En un algoritmo pueden existir varios bucles. Los bucles pueden ser anidados o independientes.
i
. . , . . . . . * . . •

Los bucles son anidados cuando está n dispuestos de tal modo que unos son interiores a
otros; los bucles son independientes cuando son externos unos a otros (Figura 3.5).
\i f
J I « r. J .. IJV. H. í O - • y ,M I Mii í itiaJ u? t ¡ • .> < m ¡ na .« usa

\
\

Scanned with CamScanner


ón
76 Fundamentos de programaci
inicio
inicio
inicio

bucle A •k
-

l \

bucle B t

( )\ n\ ;

>
bucle C 0 ir / Uo
A*' .
i

‘•t

fin fin
fin s
dLño,
\
- \

^J ^^
Bucles anidados

^
Bucles independientes

Figura 3.5. Tipos de bucles.

r» . \ / [
i

3.5 .2. Contadores


;
i . En estos procesos se necesitan nor-
Los procesos repetitivos son la base del uso de las computadoras
1

malmente contar los sucesos o acciones internas del bucle, como pueden ser los elementos de un
fichero, el nú mero de iteraciones a realizar por el bucle, etc. Una forma de controlar un bucle es
m p Hiantp un
mediante
. rnntarlnr.
un contador ’ %

Un contador es una variable cuyo valor se incrementa o decrementa en


una cantidad constante en
cada iteración.
La Figura 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 CONT
. La instrucci ón que representa a un con-

tador es la asignaci ó n CONT < CONT + 1.
La Figura 3.7 es otro ejemplo de un diagrama de
flujo con contador; en este caso, negativo. Se
dice tambié n descontar. ®

redt onT aZl


,
wL “ ? / / ’?%^ ^ " ^^
0 0 e U 0) 0 negati
10
En laFte
^ " " de (decrementos, uno en uno),
vate 5 „
temi a bude En I F V
n C co tador
cuand ó'
la vmable CONT toma el
"
mismo, descuenta o decrementa - comtew cuenta negativamente, o lo que es lo
“ aniaaacdóñ Lceribir.
cero, en cuyo caso se termina el
tecle y se real deCrementand0
* ^
\

Scanned with CamScanner


Estructura general de un programa 77

inicio

CONT <- 1 l 7
, «
*|

CONT > 50? 1 ri


"M /* r\
» i /1V - 7

no
cuerpo del
bucle
*
iv
i
c *
fin

CONT <- CONT + 1


I
\
h ol c, r VIDU Ñ O v i í *

\ Figura 3.6. Ejemplo de contador positivo.


\ O; ::jh JlO
i

Ejemplo 3.1 I

Si desea hacer cincuenta copias de un informe de ventas, ¿cuál ser


* V

í a el diagrama de flujo que resol-


viese el problema ? — --
r > r Tr
cincuent
^ o í laO impresió\
a veces n de una copia del informe. Dado que el
* /
( > * *
(
*1

La tarea implica realizar


de copias que se
contador I se inicializa a 1, el valor de este contador coincidirá con el número
o cincuenta copias .
hayan realizado. Cuando I tome el valor 51, significará que se habrán realizad
m : <V - .
' <y i i A n o m i > » . tnVjh u iulx . i ol
-, * 1
JM V.
% >
'
' ' i"
"
' "

)
Un a<ját ;
. - t ú t so

AJ n'.' ji ) l . roj ' ( > „
(
V -i ;
.|
inicio
i
' Ji '- ' -
-

. : jt¡

. .’ * / 1 : '0 i A.
. i f. ' '.
. VS
í
.
"

- 1
.
1
M. ;
~
1 . 1: y\
‘j -A < - Uf ; . ‘i ’ -
)7 i¡ • . ,

i . •
.. ,
\ • »

. O / 14- 1 -J i
i . r
fUMl IV i. * j 'jú p
'

- ( -. ! } h:h¡i lit' o ¿lltidj9fw


'

i <- 1 , i: vJtan ofCLV roi irj : i u- 13 *

r' v ' • ' iC;í r ¿ •itit •


1

i .
o1v i a 1**

t - •-
s/ z ,11 J I # OI
* . »r
» I > 50? >
i


/

I • O r j .<

no .i

realizar fin i !< i laa - i


copia

i <— i + 1

Scanned with CamScanner


?
de programac
.2 .

78 Fundamentos
\
;
\
i
¡rucio

f -
<*
|| •

leer
m, n .*

producto < 0 — - ' i « . *• .



CONT <- n tvó
r
> SSL ». ' ! *
: no
CONT > 0? ?

s/T i r 4 TMOO - Tl/iOO •

producto <- producto + m


/ escribir
-
CONT < CONT t qrT rí¡* 3 .O - - r/ ^producto
eaj rn n #

/
I r e olqrno[o
- Vi í V '
\ Vu
r» %\ V umi W»\n *s¿ «zwfiv tm - V > ouf¡n \> W BA
Ví U uozoh u -
I

V iXi IVskVyt‘\
,£!ura UCe 0 t1
°
IV

Ejemplo 3 . 2
Y,
»tni •

I vt eup
:

:i* > " . oliiv


Oí,
,
oiomufi lo oo ¡n bionioo tol ü inoo oj*o oh lolnv ( j
?
lo tniuv
y
^
í fcbini o > lObfií
i; ¿ir
fiJ
, í , JiU ’ U > .O Í í lX Í lfi3! n íi -<ü d •

:, \ i ! ¿ ; y : GO Üqrni fiSIBJ

*
.

"
,
^ r )

Leer todas las fichas de un archivo e imprimir el número total de ellas.


\
oio¡ n ;
4 I

Para realizar estas operaciones es usual poner en todos los archivos una ficha denominada fin de
fichero o de archivo (FF), que se sit úa al final del archivo, con lo cual cuando se lee el archivo y se
encuentra esta ficha (FF) se sabe que se ha alcanzado el final del archivo.
El algor i tmo en lenguaje natural ser ía:
.i

1. inicio *
..
i
\
i
2. C 0
3. leer ( ficha) s.

4. s i ( FF ) i r a ( 8 )_ SOc ^ ; < n

u :

(

5. C < C + 1
i
6. escribir ( ficha)
7. _
i r ar ( 3 )
i v , \ \

I
l .
8. escribir (C ) * • •
‘ •
I .
l V

9. fin ü : : , ZJ * yw

C‘
»
i
r * i -.. v
t
1 I
I
l
*

t
t

ner
Scanned with CamScan
Estructura general de un programa 79

c inicio OI ó IHI

Cf- 0 '< ! ; V -

fi
leer ficha • .Vi ÜÍ'
! i »


*

r?

s/ Vi
¿FF? f • # * O

» ^
/1 *
*

- W ^ C/
i

no
V'
-*
C 4— C 4 1 * * '*' / escribir C

on J fin
«ai
\ v
.
/ •\|VlUt/ A >

i
_ i

t
( fill

3.5.3. Acumulador ¿ (

Un acumulador o totalizador es una variable cuya misión es almacenar cantidades variables resú l
'

de que el
tantes de sumas sucesivas. Realiza la misma función que un contador, con la diferencia
caso del con-
incremento o decremento de cada suma es variable' en lugar de constante, como en el
.
,

tador. .nói mis o nóú bsb A > tsnuvjin\¿‘j wsií iiu nscbb («marig
Se representa por la instrucción S . S +: i N; [donde N es una variable y [no una constante.
- *
.oJnuq olü jni .' ntatsb nn » i/í uou /lid O / .uó bibnov »
¿

Ejemplo 3.3
J
Sumar los primeros K números enteros. El algoritmo correspondiente es:
1. inicio on ' 15
[ noiaibnoo
2. leer ( K ) r 1
3.
4.
N 4

SUMA
0
-
4 0 .. . .
.
i
•é *
I

5.
6.
N 4

SUMA
N + 1
4- SUMA + N
rr; p ;
_
n fil íeos
^
7. si N = K, ir a ( 9 )
8- _
ir a ( 5 ) .

9. escribir ( K ¿ SUMA ) [ '«ib ísooií / UfirtioílenmwinJeni so# pftüü 32 ¿CMSINCO í CO LOIJH


5ÍdlO.;; fin * •

- • •
' • , • ; ! : ; Í3 i U .
*37

Scanned with CamScanner


i
ón
80 Fundamentos de programaci i

inicio
M < 11 M t )

0 ü
leer K _ .i

N <- 0 . orbit i &el \


SUMA <- 0 V- —\ {
I b

N <- N + 1 r TT .
SUMA «- vlis
i
SUMA + N i

j on
f H
\

\\
J . íi
¿N K?
SI
J
"
i

no t

— c—
J

I údno; • /
. \ I;
/
6 rf; y escribir
• - SUMA
_J
fin )
i ü bsh » muoA XXX
3.5.4. Decisión o selección . PI - v.
• '
- . ¡m v.m - "> 11
- .
.
. <>
,
ib . -. - xwn' j ,
'

.
'

íIí . 11 . -» •> 1 * jtj:-- /üfriijfi "juV -b


.
: • íI;< « > nórif * 2 l ;
¡A
Cuando el programador desea especificar dos '
^ '

grama), se deben utilizar o más caminos alternativos


estructuras de decisión o selección. en un algoritmo (o un pro-
Una instrucción de decisión o
condición, se bifurcará a un selección evalúa una condición ,
determinado punto. y en función del resultado de esa

, £. S 0 l Cf í r -
<v
' '
. . . ..
.
ZW \ * > ' M. vn \
' V\ Y. : TV }h; <. ¡ \
r. < > V "
1

'
Si
condición ? no otzint .
*

acci ó n Fl
— i

acción F2 »

En el caso anterior, se
es verdadera, se ejecuta tiene una instrucción w
la acción SI , y
si la ondició condSes
n es T ? d°sePejecuta
falsa °sibles lacaminos ,
S
ó»
: si la condict
acción S2. Es posible
I
Scanned with CamScanner
Estructura general de un programa 81
también
tamoieu realizar diferentes
uucremes acciones para el caso
,es* se
dición ofreciese cinco posibles solucione c*. "teniativas múltiples. En el caso de que la con-
’ ^presentar
ía como
W \ IV i U MI .
r‘ » i >?,
i
»*, / n » i i . \

n ni » * * *

r i
condici ó n ? (5 ) tint í n . i: !
.

rI .* .i
i¿ n * iA I . »» • intit 11
- »
^« »
( 2) Ao
( 3)
(4) j
' •L l ' J J j
acción S1 acción S2 | acción S3 acción S4 acción S5
vi

3.5.5. Interruptores
'

o wp
‘-V
i

Un interruptor o conmutador (switch) a veces se les



variable que puede tomar diversos valores a lo largo denomina indicador, bandera ( flag ) es una
comunicar información de una parte a otra del mismo.
de la ejecución del programa y que permite —
Los interruptores pueden tomar dos valores
diferentes, 1 y 0. (De ahí su nombre de interruptor,
encendido " / " apagado " , ' ' abier - 11

to " / " cerrado" ) . ^.

=1 ,
rt
s w? =0
i %


r I

acción F1 h,
r acción F2
*• f VVt
í

Si SW es igual a 1, se ejecuta la acción SI , y si SW es igual a 0 , se ejecuta la acción S 2.


t ,
Q .
¡n ící
°
I

r -» Wií
)

I
i
\
y
SUMA 4- 0 r »

,1 .-4 i -
v \ \
A i

\ M oqmoc s
t . > M i l

leer N
»

N o
escribir
no .- /n /'> .»
^
SUMA
. i! M « A SUMA
í
*
' •

SUMA + N
C fin

Scanned with CamScanner


82 Fundamentos de programación

Ejemplo 3.4 n a i f c i n nSidfntJ


. Üi o

Se tiene un archivo con un conjunto de fichas con dos campos, M y N . Se desea


listar el campo M
de las fichas pares y el campo N de las fichas impares.
\

) luego se ha de
Los interruptores - SW- se suelen inicializar a un valor determinado ( 0 o 1 y
modificar su valor alternativamente a medida que se leen las fichas impares y pares. De este modo,
cuando SW = 0 , se leerá n las fichas impares y cuando SW = 1, se leerá n las fichas pares.

inicio
.i
i
I
i-
-r 8 -nolooe
j© no i.<í ilOti VC,
' ÍC no * ;: •

S W <- 0 c’dioíqmtotnl .íLC.L


•• 4 1 . ( v i ví ) V V . '‘ © i

-—
. V > V\ n ú lo ii .tuuuvo o UVUYRTVJUú IJ J
(\ ' . .
ülifMiy ; - » ;ip . i : rw/o ‘' )!
‘V © "
y
. : . s.otvjvib wtriol obouq 9Up sídaru /
*
!
ficha
m!
1
> / ? •
'
•i -. fi o\ yitimó
r,‘‘ ú nu
n
- ut
jb itoiafirmolni ifioimimoa
id& $Q) .0 i )Jí ,•

*© > - J .10 " 03

ultima s/
ficha .

N
no x fin


1

21 nrhh
*

5/ n ó bofí
SW 1
I
u§ f
4

f; V » • V
L i 1.1 » » v‘ j ?. 3 . vvr ta y , 12 norooe ti u ryj \ y w , [ u U .uui W 2 i¿
' <rj

SW <- 1 o í a »;SW
*- 0
\

escribir .U ¡r -es •

escribir 1
/
campo M campo N /“

11 v ?:d V


W
u - !/! 'S
>
Ejemplo 3.5
- ,
\ ^ V

diagrama de flujo que escriba los números


de 1 a 1000.

i.
‘• MU
"
, I

A
A */- ‘'
»


— • • -
. " •' ** ’ *a -
.si la convicio
T 4

1 i oo:

Scanned with CamScanner


Estructura general de un programa 83

í ——
f> ' i
1
í <
>v (
v
i i íirrtr
.
"• •
. . . ‘ .. •
• • '
; •
r ‘
'
• ?c .: . ' , V

k

inicio j
* » u » • J.'ou /njtnq | * o r:ino!í¡ ;, VJ ¡\ vru o í u .
f ' ! ' ' iV . r ?¡ on lr •;;!<; m * ob : vv vv í . . - . -
nming® bit olpaiatif i Irw b . TTTTI , t jrwloal u?. aup OUp oborn ob y • 1

! m1 fit . ; ob ?if¿uano! nu no / ibior/


;< ; , jRiboo lorio >q U ¿ y
* '

- ill ' Oi ÜÍ I • ' í ‘ -'¡JU ¡l . ’ .? ! . ( !


.. I
‘ r: v rr ^ itno¿9 VJ - uof * í » / o: ;; j .v / I . . .

ib bU f ' ü ' VLí Ií; o ;; l \ . > i Í A í Oobi ! r ntpX r / i , ; ! . ooirriJtao $ IB ojfiugnol b • m^n í n ; r . : «Nnsuxil
'

^
if íC] ;otííH* r. . vivoib -JUH igcnq ab fíuan 3i (AÍT> olhoffp ¿Bnunaoro zol ab BDíSóI BI éinoupoi otní h
TAI*
<C

mvicM mi y
I < = 1000? 3>
^
umcnn Ai w
t ^
fTÍ Tiiu :?9lnonoqfnoo íob st íiBJenooorninoalB nU
AV.rt 'rr.
c)2:l .ólbi \ io% Lr. i i í Í!
'
} fi í flOO ' A f t -
s/ 1
'
^
í
nÓ ÍO O f i cm; < 0 m. y yvym. At smoofoo cJ
d¿ vi . ( -JV- ito' / oirt ó no '7 leer i
r / '
fin
'
Y ¡nfctee oidsiaq
.
1

-
m vomio
.

/ ; / ' Vj ir L> \ V
• \' S > . -. . V * V- 13
S »

l C Sít' v > t ISV á v v , ' v i . , r, v, ‘ i \ t r>L v ; m 1 '


)
ty ¡

r'
:A> ndirio í t n v ? ó ijp
. ¿• < , st
‘| | ^ , i , i mVui : i iTsm l'J; '
?J» 1
^ ^
'

< »i i .
"

.
iioii óq : Xy r:u \'SJY, ::á nó* \ Aburt4 ' fa
^

n > ó Ai ] f ; Y\
^

ii oljniiuo « i :: í ! ¡ '

.durmi ó J' . rnct mq no obitiovnoa omJh


^
1

Ejemplo 3.6 n
J|^ -
'
om.l .i ^ cn í A |
Calcular la suma de los números de 1 a 1000.
ilO Í T ' f or»
•> **
• 1
JO ?.

3 + 4 ... 9990 vV 1000 - > r.


S = l + 2 + + +
« 9 k t

La suma se realiza con totalizador o acumulador S, que irá realizando las sucesivas sumas
-parciales, 1, 1 + 2 , 1 + 2 + 3 , 1 + 2 + 3 + 4 , etc. Para ello se inicializa la variable del suma-

f

' i ? « -f - « «* .'
- - •í » ¿ H •A 4 > J» t J i* . t V* I

dor S a cero y el contador I representará los n ú meros sucesivos 1 a 1000.


*

issnomoo nodob á>smingoiq / vornJbo Ai «oí aoboT


- nnobí ! , mv"., jnjjrnrrnnr . ar,o anu noo
r, ,ísv odfio nnoissnomoonooou f
^
'

--

_
/

, ¡ : b ícipgf jup rbin r ! ndd®q Bl noo : ; 3Jnoil nor (í TiO j 3iri, non o íol^ roíl
.
) '
^
- -.
*

.candi i UJL; . i .. A xiiíuTmoglc n3 isa etotu abr


¡

t
O'
S <- 0
1 i) ’
1
pÜ +l
- 0 . C í ir á n' .. .- .w v\ ¿Vil *
cail la

/. -'
esí^d á bisv sb nob&'cboO .S.9 X
0% t%
¡
r* j • •
, • ? " '
' MV V

I <- 1

— .’ t
í .
• v' ’'
v ' ' '

X ‘ *
. f.v. iiitu
i "

- 7- \ p : [ Aflrá v . fiboi fftOtTKOO O (ÍCiamb 02 00(3092 nVo nn


. j
^
-i ‘f 2 c: T • ‘

i '.í i ; iii+ ' > n + i vi^ - 1 Ig3 íoqil .!> • obnaortioagea y oid í non- . .-
.BHK . . . . iddcrj í,í noo
_ 7
-.
iisv

< 1000
no
* J escribir
.. .
S
< > V , r 'i /T lo ono i , i i Vmi b ' ai .)
'

K
'

)
7 .
“ XXJV

si i IkilAV * 2* 1i < J

l,
-
u r * (? í r.IF i .! ; N
* 2 k\ ll : !w - tu . *
S <— S + I
rr; > r> r. ; a X 4 : ? •
*'
•; í

• '
i • « >
-
lf l + 1 ri , . b ü )2 i! « n ú ó slqni ía oldshfiv BniM u 3V1 i4v+\ «bao obnob
i
t
.
“ v .wvAwy ) rjif :! {t
r . ::
¿
? í » j vL
. j .: 'í JKV.

/
S¿L

Scanned with CamScanner


ón
84 Fundamentos de programaci

ALGORITMOS/ PROGRAMAS
3 6 ESCRITURA DE ion debe ser lo más
clara posi -
La escritura de un algoritmoque su lectura facilitó consme
entendimiento del algoritmo
estructurada, de modo
ble y un lenguajes1 i pmgram
y su posterior codificación en escritos en lenguaj a programas. En nuestro del algo-
libro uti -
Los algoritmos deben ser ^ ^
ódigo, y la estmctura
llzaremos esencialmente el
lenguaje a gon " '
|
programas escritos en el
nseudoc
“ ‘“
a ue programaci
¡e de
lenguaje p s ,,
ón estructurado; por
ritmo requerirá la lógica de los
de programa y un bloque algoritmo
ejemuú alaoTmo
0
constará de dos componentes
ón
: una
simple
cabecera
que comienza con la palabra
algoritmo. Esta
La cabecera de programa es una acci
palabra estará seguida por el nombre asignado
al programa completo.
algoritmo es el resto del programa y consta de dos componentes o secciones: las
El bloque
acciones de declaración y las acciones ejecutables. que tengan nombres. Las accio -
Las declaraciones definen o declaran las variables y constantes
ejecutables son las acciones que posteriormente deberá realizar la computaci
ón cuando el algo-
nes
ritmo convertido en programa se ejecute.
8.£ o í arrití|3
Algoritmo
cabecera del programa
secci ón de declaraci ó n
- , A ¿'
- VilZ i ;’
>'

secci ón de acciones
c + \

VAMIr

1 J / \* * Jí
^ UV: 5 L ti
Í '
10 ¿ L í iM:

t, í , lobcM Í Blot nr > v e?. üfriu? f;J
3.6.1. Cabecera del programa o algoritmo ’
. : ü - . . : ? !! ? . lobíi’ MOO te V 0130 6 TOO
Todos los algoritmos y programas deben comenzar con una
cabecera en la que se exprese el identi-
ficador o nombre correspondiente con la palabra reservada que
programación, la palabra reservada suele ser program
señale el lenguaje. En los lenguajes de
. En algoritmia se denomina algoritmo.
algoritmo DEM01 T_
i
o z >

3.6.2. Declaración de variables r~-

var
2 i i .i n n n o w ..
.
_ .• "
ooo f
^
»> I
-\
tioo-1
tipo 1:
• ,
lista de variables 1
tipo -2: lista de variables- .
I
-2
: -n: .
tipo

donde cada lista de


lista de variables-n
1 i
-a »
*z

;
J

variables •
1
cada tipo es uno de los tipos es una vürishl *

sicoVSro!
i
de datos bá
UgT Í ^ nÍ 3S Por comaS Y

Scanned with CamScanner


Estructura general de un programa 85

r
Por ejemplo, la sección de declaración de variables u >i C/a!
s i! . .
'
< i .v , rnl
r l .
! • ( * / ; v* > f f i r;
>
11 j i I
#
i
I i ;í i
var
loj
^ f 4

entera: Numero- Empleado . ) I íi A / i


> ; \ ;v."u w
#

\ i . í ,, ,
real : Horas
real : Impuesto
real : Salario
. ( ft n í uhrjj, > >
u / vi. i ’ i ; o:: ii oJMini ' il í
o de modo equivalente
orno:> j< 1
I
« i 1,‘ ,i¿ ¿ 01 / ¡ tr/ ? j;nr J I , r
var _
^
entera : Numero - Empleado
%T
o i j] í . - l n: . .
real : Horas, Impuesto , Salario
rj i id Juj 1 • i; v; ?:;n í r v» » ; un ! / ? J M! I O > ¡ ,V / J

r V f

declara que sólo las tres variables Hora, Impuesto y Salario son de tipo real .
Es una buena práctica de programaci ón utilizar nombres de variables significativos que sugie -
ran lo que ellas representan, ya que eso hará más fácil y legible el programa .
Tambi én es buena práctica incluir breves comentarios que indiquen cómo se utiliza la variable.
var tfrraJxoy ccnsini n i &(tu rq nu sb nófocín^minobaJ
entera: Numero_ empleado / / numero de empleado, TJ í . . ^ :r ; i ; oJ > rr j t •

" al: Horas


*n . ../ /hora3 trabajadas M ,
*

; OfTWOOb üJ

4
Impuesto
Salario
’ dir
nbV
*
1

'
r
'
/ / impuesto a pagar,
,
/ /; cantidad
.
4
^ *
ganada
d ' /ji
- c / ^
Ví?
¡
w T
, ,
\ t i n Ȓ i o r *>1*
i M .' 1
— *
o r' jtwi' jní oti í:OO :
.ru- / r:ovn O í
t*

? * .q it) icq i. bunobV '- qo ; v , rr 1 .^ 15 « : i / .


* r
M J[¿
4
nob ^ / inolni /10 ;iu r WWJ!X. >
3.6.3. Declaración de constantes numéricas
jr DiR / .ti
En esta sección se declaran todas las constantes que tengan nombre . Su formato es:
err::¡r!q i.í t.' i’ j ).- ;nV:;:;óy V ü p •- rif yb óiiuob riyvub»;. o < < -* í l i o o ?oJ . 1 - .
const « . . . . t 4
• • .. i ' T
pi = 3.141592 -
v . Dfcc - í o f #
* j >
% r j

tama ñ o = 43
horas = 6.50

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


t » < ;3 . u. óqu i ’j i - q / u sn ísirru J ir . ) s ¿cy.\\ i no mvtrf ^ni
'
/ » »

3.6. 4. Declaración de constantes y variables carácter


Las constantes de carácter simple y cadenas de caracteres pueden ser declaradas en la sección del
programa const, al igual que las constantes numéricas. . J

* . • * > t 4 *
const l

o
estrella = ' * '
frase = * 12 de octubre '
mensaje = ' Hola mi nene ' XAH í 'HO i
Las variables de caracteres se declaran de dos modos:
*
» a ; ' M í . > . •! ? ! ' )
rl ¡ - 111 4i .
iun : -J Í > itlKAf i ndt J , J t ¡ Vin i J y , :n í
1 . Almacenar un solo carácter.
var cará cter; nombre, inicial , nota , letra

Se declaran nombre, inicial, nota y letra, que almacenarán sólo un carácter.

Scanned with CamScanner


86 Fundamentos de programación

2. Almacenar múltiples caracteres ( cadenas ) El almacenamiento


de caracteres . múltiples depen -
derá del lenguaje de programación . Así, en
BASIC nombre variable cadena = cadena de caracteres
NOMBRES = «Pepe Luis García Rodriguez»

Pascal formato tipo array ( véase Capítulo 6).


Turbo Pascal , que tienen imple-
Existen algunas versiones de Pascal , como es el caso de declarar variables de
mentados un tipo de datos denominados string (cadena) que permite caracteres.
caracteres o de cadena que almacenan palabras compuestas de diferentes
var nombre : string[20]; en Turbo Pascal
enpseudocódigo
• ¡
I
i /
r •
var cadena[20]: nombre
t \ \ uv" w *

\\ y t >YJ t
'
‘ V i
X
* \
i ? \
n 1

t
V. V. • ) V> t • ’ v \\ Á *\ * . i
% \
* t !I « I ,

3.6.5. Comentarios > t. >


' \\\'
,i
* \ '

La documentación de un programa es el conjunto de información interna y externa al programa, que


facilitará su posterior mantenimiento y puesta a punto.
La documentación puede ser interna y extema. La documentación interna es la que se acompaña
en el código o programa fuente y se realiza a base de comentarios significativos. Estos comentarios se
representan con diferentes notaciones, segú n el tipo de lenguaje de programación. La documentación
extema se acompa ñ ará en información ajena al programa y proporcionada por el programador.
2 í.< i é rnuf í á tanos r» h n ó ijfnsiosQ .c Z .t .
BASIC
f «ttdm o tu " . in ¡» «b i nt mbdb

1. Los comentarios se incluyen dentro de l íneas que comienzan con la palabra


nóiww 1 y
reservada REM.
- . . .
100 REM *** autor J . R . Mackoy ***
200 REM subrutina ordenación
1
1

2. En las versiones BASIC de Microsoft (BASICA,


GWBASIC y MBASICt 1los coméntanos se
incluyen en líneas que comienzan por el carácter apó
strofo ( ‘).
100 ** * autor J .R ,. Mackoy ***
200 ' subrutina ordenaci ón i
- dl í / vT ü foaCJ
3. Existen algunas versiones de BASIC
como HP R A C I P r,,
carácter admiraci ón (!) en lugar del cará C’
100 !* * * autor J .R . Mackoy
cter apóstrofo '
qufe
" “ id

***
200 ¡subrutina ordenació
n í tt í too

FORTRAN

letra C y se pueden escribir a pa tbde te í "


co umna 2;
SU C0 Umna
' 1 con el carácter asterisco ( ) o 1a
*
columna 1 7 ou , í ! » w n -.ournlA . !
/ , .
C * * * autor J.R . Mackoy * * * V
* subrutina ordenación
< u, *
> ?,

Scanned with CamScanner


Estructura general de un programa 87

PASCAL .7 /\U ) A

Los comentarios se encierran entre los símbolos - ' ,. i . w. ;u f / '


‘í » > -
I

(* )
. { »
¿ tiiobnut rf . cn ' ú n
' , ; .
*
:) ,- r.í l onp
• ' . -;
O !;

rno .* > W VJ rw ! irjoir: .» . JI'JI JI WU nb / í í5 MI » ; U ! .£ •

¿ bien: * . ^} j >
1 ; *
-
r ; r i x u n&t f ú >s ^ o zaloud *ol na £iih;jní;2 ¡nqrnate Tfixi í ií U .£
.ni 3 7 oi oinJ:
ornoj IB f cbi í .cnungmcj /

{ }

v p filar:'4 ( 3
( * autor J .R. Mackoy * )
{subrutina ordenaci ón} •. r « : r. .Ti í
r
> U f "i L r }
i •'
ÓU
\

MODULA-2
•*

b, - ,d , .
. f' : íL #

o i r, f ni
Los comentarios se encierran entre los símbolos (O « i . i ; t .n i l
*' Si f * #

(* *) K f‘ í i. ¡ *

¿ . . . . unao-i ri » > ia *

i idt 'iTintt
C -
; fr >
'
[ .6 ;
M oeoii
¿
' )
O í: ir
^ -
w

Los comentarios se encierran entre caracteres{ llaves ({})


¿ . ^ í. í _
S & 3íío ? na
. . 0 - Q la
lidi tot j
ort ie
-
- -
{Esto es un comentario en C } . < cr & ) ( fC ; • ‘
( ( 6* i ) í ( O ) Is í 61
* •• í ) ’i i di *2 o a s>
.

C+ +

Admite, además de los caracteres llave, la doble barra inclinada


- , fi
io * r ¿ 3
la nii - ni *

es un comentario en. C + + . r «w, *


QAQIVIT0A ,»* ,w .* -
» » » r »»» » A,

í J 3^US á ?rWOIDAWAfiOCn-í í dO 83
¿
/ / Esto rj LWJR * r * <% . -- % • * # ¿*

NOTA: A lo largo del libro utilizaremos preferentemente


para representar nuestros comentarios los
ndizar la simbología del
símbolos 7 / Sin embargo, algunos autores de algoritmos, a fin de indepe
lenguaJje, suelen represe
r ntar los comentarios entre corchetes (w[ ] )¡.un ' ( I ü!,ol .
-
° . ommr sbeo o
n
j ñu > , >ifi >mh<{ < * ii /oí si lihMj i fr nun

; *
'

- *

3.6.6. Estilo de escritura de algoritmos/programas /I /IíUHL


r algoritmos será el descrito
El método que seguiremos normalmente a lo largo del libro para escribi fu I
al comienzo del Apartado 3.6. ° ' : 1 ' • : ' ' i ! " ~ !
' <
1
• ' j

r. . .- . ‘ .' i .i • r V- *
, i

algoritmo Identificador //cabecera


. í<J C J
'
/ :r • i 1 V I

/ /sección de declaraciones .i d
var tipo de datos: lista de identificadores i
!
A
V
. 1
> .' i,
" í‘< ' '

const lista de identificadores * valor r io *


' / /cuerpo del algoritmo
inicio y i > ** T
< sentencia Sl >
< sentencia S 2 >

« sentencia Sn >
fin

Scanned with CamScanner


88 Fundamentos de programación
t

NOTAS:
án en una
n de consta ntes y variab les las omitiremos o se describir
1 . En ocasiones, la declaraci ó
s funciones .
tabla de variables que hace sus mismaán entre comillas simples.
ar
2. Las cadenas de caracteres se encerr o en aquellas instrucciones que proporcionen legibi -
3. Utilizar siempre sangr ías en los bucles
y fin.
lidad al programa , como inicio

Ejemplo 3.7
algoritmo raíces o
//resuelve una ecuación de 2 grado '
tlw i

var real: a,b,c,d


í;iodf¿ U' ft
' » * TJ ?'iv HMTV ¿ no nMiisrt : > -o ¡ .

inicio
leer { a , b, c)
D f b A 2 - 4 * a * c
- t
si D < 0 entonces '
escribir ('raíces complejas )
si-no COI
-
l *

si D 0 entonces
=
> * i; . íón/dnpíp
escrib ir ( -b/2*a)
si-no
escribir((-b-raiz2( D ) )/(2*a)) u
escribir(( -b+raiz2( D ))/( 2*a ))
4 4J
fin-si
fin-si
fin oldof » ¿;I i n -'ol v!) ¿ L\ K'.TiobL

t
• I

:TU OS

ACTIVIDADES DE PROGRAMACIÓN RESUELTAS


• ;i¿q -i , ,
* ji í i ;TV ! JTq . 1

lo siguiente:
n> • H ¡i il lab ogie! oí A ' KÍ OV . .
3.1. Determinar la cantidad total a pagar por una llamada telefónica , teniendo en cuenta
-r i , i
llamada que dure menos de tres minutos (cinco pasos ) tiene un coste de 10 pesetas,
• minuto adicional a partir de los tres primeros es un paso de contador y cuesta 5 pesetas .
toda

cada
.
. .» - vifco í ; omtiicgto ?.tb eb oi ítaS B.í
f .S
^'
*

Análisis
n i i r»
'
- > .*•
.

El algoritmo de resoluc
;ión del problema-entraña los siguientesi .'pasos
'

:
-
‘:?:r r r.‘ • . - Yr
.
éúncá' f tcp Obi ?
í

; , jv:q Á fct-,
" • .
- h

•í .
' ~r i «.
1. Xn Í C Í O. • , <

2. Leer el n úmero de pasos ( npasos hablados por telefono.


)
3 . Comprobar que el numero de pasos es mayor que cero, ya que realmente se ha
. t *1 V realizado la llamada si el numero de pasos es distinto de cero , ( positivo )v» Si
*
el numero de pasos es menor a cero, se producirá un error. <
4 . Calcular el precio de la conferencia de acuerdo con los siguientes concepto s : -

=
il

: siexce1asn ae 2 ii;s % ;
5 „ Ue estos porten 5 Te\os
16 SUman 10 pesetas se obtendrá el
preciVtotal ^ 36
*
ni »

Scanned with CamScanner


Estructura general de un programa 89

Variables
»

NPASOS N ú mero de pasos de la llamada


N N ú mero de pasos que exceden a 5
FACT Importe o precio de la llamada

©
inicio

n
leer
NPASOS
mal^ |
**»

S\
v
j

v

Ü

NPASOS <= 0 leer


un i ERROR
y '

TI Ü MOcí O no * .
r\ r\
v LO
_ {
' b IfiUQ Í hacer z'' 1
FACT <- 10
N <- NPASOS-5 v ^ !

'
!

;i
' i
I
I

i 4i '
L

N>0
r
— s
c/
\
»
iu
- % !O i*: '

i
.

hacer
f C '*• O 7 .i
lC1« . i

i FACT 4- FACT + N * 5
»
\A * H ~> ri
no 1A ! ,1 n A t « m • » i ." *
,>
.on
1
P i? » v ^
-JOV íít ri oiamuiA
; ' 4 , vruií ©
- .* — t ú ? OiLC r ^ -
. v\ .T
r .- » * - *•
^ .

í
be
i

’1
’ i ti CC J escribir
I NPASOS ¡/ on J
FACT i- t „r '

\?,
I

i
fin v©, y i i ( dnost?

_
t
noo ut íemR '
i

ii o I
i
i
.
' ncvi í isoq

3.2. Escribir un algoritmo que calcule el producto de los n primeros números naturales .

Análisis ¡ r¡ )
El problema puede calcular el producto N * ( N 1 ) * ( N - 2 ) * . . . * 3 * 2 * 1, que en
términos matemáticos se le conoce con el nombre de FACTORIAL de N .

El algoritmo que resuelve el problema será el siguiente : umVdr.v W' < H .

. .
1
2
3
4
.
.
.
Leer N
Caso de que N
-
0 , visualizar “ Factorial de 0 igual 1 M
Comprobar que N > 0 ( los n ú meros negativos no se
V -

consideran ) ,
Hacer l a variable P que va a contener el p r o d u c t o r
.
- c .- tl í W: r;

igual a 1 ,

w
Scanned with CamScanner
90 Fundamentos de programación
/ Vu \ * «; ir> /
5. Realizar el producto p ,,= P * N.
w = 1 , y de modo
hasta llegar a N
Disminuir en una unidad sucesivamente
simultaneo los productos P * N.
.
6. Visualizar P.
7. Fin. I .

• •
inicio

\ r;
leer
N
> ..

r
N 0 - SI
.
/ • ,r r ~
• ,
-> 202,
no .r x*

* C.r I
no escribir
N>0 ' Factorial de 0
: ‘f >i r igual a 1_!_—
s¡ ' - * I - )A
a ogAgM -> n I
p <- i ^ v
10 • r.r!
T M.
escribir
- -
• *.

P <- P * N
U<M >

N ú mero negativo * N <— N — 1 x< m


*

üJnj, -
no . ’- .
rsl 1
S

Y s/
escribir '
' Prueba con escribir
positivos' 'Factorial = '
P

vi* fif: u t f n . * } }
fin
J
; > 1 Uiiu )V ] ‘
l’seudocódigo
’ * «' * « > )Hi , , vi vi

algoritmo . . ; t ;J \ *"
Factoríaj I ‘ 51 •
«
*! , 4 S í» n
var
ont
^ ro í H
real * p

Scanned with
CamScanner
Estructura general de un programa 91
inicio
leer í N ) » - \

si N = 0 entonces
escribir( ’ Factorial de 0 igual a l')
si _ no
si N 0 entonces
> f

P <- 1
1: P f- P * N . i

N <— N - 1 ,»
fli N = 1 entonces
escribir( ’ Factorial = p)
si _ no íj
ir_ a 1
fin_ si
_
si no
•nnr VV
'

-
escribir á ’ Numero negativo ’ )
escribir( ' Pruebe con positivos ' )
fin_ si -<
_

0 v <j
fin si
fin
V•*
?
3.3. Diseñar el diagrama de flujo para resolver una ecuaci ón de segundo grado Ax2 + Bx + C = 0

Análisis 7 .
r a .t
La ecuaci ón de segundo grado es Ax 2
+ Bx + C = 0 y las soluciones o raíces de la ecuación son:

- B + ^JB 2 - 4 A C - B + 4B2 - A A C
XI =
2A
I
X 2=
\
v AS\
2A
< u 8-)
FX
SXy
——
Para que la ecuaci ón de segundo grado tenga solución es preciso que el discriminante sea mayor o igual
t
que 0. ( u:
El discriminante de una ecuaci ó n de segundo grado es:

D = B: - 4 AC
f . 1 -:f » !
:r • > •
v. . I -W S O P • ' : i
Por consiguiente, si
, *
'
.
'V.Ú Vrv í
D = 0 XI = - B /2A X2 = - B/ 2A

a D < XI y X2 >iu{ n OI Il oftv.ib 13


°. •

. !
•1

no tienen solución real .

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

1. Inicio.
2. Introducir los coeficientes A , B y C.
3. Calculo del discriminante D = B; 4AC.
4. Comprobar el valor de D:
-
• si D es menor que 0, visualizar un mensaje de error ,
• si D es igual a 0 , se obtienen dos raices iguales XI
• si D es mayor que 0, se calculan las dos raices = X2
XI X2
y
= -B /
Pin del algoritmo.

Scanned with CamScanner


92 Fundamentos de programación
~
Ql > í nl
Diagrama de flujo
D / .0 ir.

• • •
inicio on . i
.o

.
leer • i

A t Bt C r
& xc
mensaje
hacer de error •* -»
-
4

D = B2 4AC o *r I e
. t'
í
4 i
- -* **
'

IT 4. I
s/
D<0 ic nx ü
ni :
no
•» i . t
t i y > ;/. » ! !/j iwivi'! . ?„>
s/ i
D 0
SuYú /rJ .
no
escribir b r«
rv flOi ( -B/2A

r
' /•
*• »
r V
J íí\f
,

- i*

= 17
XI =
X2 =
(-B + D)/2A
(-B - D)/2A
* r
í\
-
_. „ . á, . n». . 11
, • rj I oí; o - muyo* l' b Í IÓÍ ¿:J ; J J M llfp í 1 ¿ .
l ¡; jjyf O !< / i >
- .0 t/ .
fin 4 /
t : fW - *

!. pontuoo nnu o& oín; nunh '- u. o -
mayor de ellos.
3.4. Escribir un algoritmo que acepte tres n úmeros enteros e imprima el
^
Análisis \ L .\

El diseño del algoritmo requiere de una serie de comparaciones sucesivas. Las operaciones sucesiv
las siguientes: _ A'y. uunv -. vw .‘ r . -
1. Inicio.
2. Introducir los tres números A # B , C.
3. Comparar A y B:
• si A es menor que B:
- comparar B y C: ,
^
• 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:
- • si A es
comparar A y C: *
menor que C , el mayor es C ,
• si A es mayor que C , el mayor
es A.

Scanned with CamScanner


Estructura general de un programa 93
r

Diagrama de flujo ohm. i t» i . > MU * '


? "
: AS 4
- i born t i

inicio
; l i’iriM VJik >
.. -1 • , *
.
i . *
* >

T
;

i ' > JV » <• • :’ i i ; ¡ inooaií m . •


b wi
¡O
» > i
. > \ /.
<
' i ' Ji 1
! J ;í • ' >
'
' ’ ii «j 1
O
leer
A, B, C,
• •
V
• O í‘ T , .• ¿ :i :

s/ no
escribir \
A<B B < C
\ B J
no s/

no
A<C
si
escribirr \
©
escribir \ i
A V
«

fin

EJERCICIOS
. 3.1. Se desea calcular independiente la suma de los n ú meros pares e impares comprendidos entre 1 y 200.
3.2. Leer una serie de n ú meros distintos de cero (el ú ltimo n ú mero de la serie es -99) y obtener el n ú mero
mayor. Como resultado se debe visualizar el n ú mero mayor y un mensaje de indicación de n ú mero nega-
tivo, caso de que se haya leído un n ú mero negativo.
3.3. Calcular y visualizar la suma y el producto de los n ú meros pares comprendidos entre 20 y 400, ambos
inclusive.
-3.4. Leei 500 n ú meros enteros y obtener cu á ntos son positivos.
^
> • ,

3.5. Se trata de escribir el algoritmo que permita emitir la factura correspondiente a una compra de un artículo
determinado, del que se adquieren una o varias unidades. El IVA a aplicar es del 15 por 100 y si el pre
cio bruto ( precio venta más IVA ) es mayor de 50.000 pesetas, se debe realizar
-
un descuento del 5
por 100/
3.6. Calcular la suma de los cuadrados de los cien primeros n ú meros
naturales.
.
3.7 Sumar los n ú meros pares del 2 al 100 e imprimir su valor
- .
6.8 Sumar diez n ú meros introducidos por teclado.
3.9. Calcular la media de cincuenta n ú meros e imprimir su
..

resultado.
.
3.10 Calcular los N primeros m ú ltiplos de 4 (4 inclusive), donde
N es un valor e introducido por teclado.
. BIS/
ar Un 8rama 9 ue permita realizar un contador e
’ ’ , ^'^
3.12 Dados diez n ú meros enteros, visualizar la suma
imprimir los cien primeros n ú meros enteros.
de los n ú meros pares de la lista, cu á ntos n ú meros
pares existen y cu á l es la media aritmé tica de los n ú
meros impares.

Scanned with CamScanner


94 Fundamentos de programación

3.13 Calcular la ñ ola media de los alumnos de una clase considerando -


. -
n n ú mero de alumnos y c numero de
notas de cada alumno.
.
3.14 Escribir la suma de los diez primeros n ú meros pares.
que sólo contiene n ú meros y sume los
.
3.15 Escribir un algoritmo que lea los datos de entrada de un archivo
n ú meros positivos. naturales:
3.16 Desarrollar un algoritmo que determine en un conjunto de cien n ú meros
.

¿Cuá ntos son menores de 15?
•¿Cu á ntos son mayores de 50?
entre 25 y 45?
•¿Cu á ntos están comprendidos
.
3.17 Sumar una secuencia de enteros detectando si está n ordenados.
.
3.18 ¿N es primo?

v» i w * » L* .

i
i'

r>

M V r _.
< 1
'
I fc* f
'
i

! SIX
i

Scanned with CamScanner


.rr. f,»tovxM
I

\o ¿ . ’ndfr;:,i.v \ u
i
ay

T - io’r \
* q? r < . -
. n aol nircubc . n y at;jl:Qr»c • - o n3
1ÍÍ9Q 01 í 4
,
L ri ,:jGqf> > - Os V. VJV »
^ ~r Tiootniarn < nos . vririr
* ;r. P -
¡ \" J 6 n * i>
^ >;: 90 . » . L ;ds; OJ -
j

¡:
í tr - o » c ..
*
MVJQVJ y aonc fibienc
ol : ot JU / O 'J
'« nu
PIILV: t . r

.i 4
- f» nS ' Í 2 fii n:
*
vO - SS ' S - S - '’ 9 b iGli < s MO t. S j* r f . ‘S ‘iibljj»
'
CAPÍTULO
. 1J
’1
*
. :
I Bb üO í '4 or
. rbóoc
. i

; ; j v i

.. .
.

INTRODUCCION A LA PROGRAMACION
ESTRUCTURADA
T r n¿r n# - n p ¿ .
y\
* ^ ^ ~ > .5 f.. .U
•!
A
k * * *
•' : * t
*
* r tZj V », '
*.,/ r- l \J li Í „} i , <
* K *

. . ,
/>luni >0' :¿ioír¡li¿ i » 5nu s;njl .1O í;?>{í / ) b r , . , > •' / r. r
. ;!
:inq< »q ! ’ u i n,i n ' >rü
* . •
h *.
/
-
'¡ rru - - NUV í >' orvi i:
• Vy . lú 'lü .Vr. lobBl/w/FTi - crxrr? noi ut
'

oqU otif ; * .
? , '
^
fiiscjbi: . » : " flíi . i r. " ! . ' « íK
'
í : - .íí J /¡;- ; • f i o r . -v : >
• i¡ , ;RRJ .
ánt íl L, 'j / ulil MO . ; / norlJob ,

- moa n 5oiq ai ;q .
'Jrn: ;¡i¿ o;!>i[oí qritív r : jfilburri y üfi , iptyj *;b ¿ansídoiq >L ; < ; hulo ' ;;i
. ¿
*
C f l J ,£. • : n o: , , fl ',v y. : -„ ) J jidinabivncrj OTl . 'TtUi, stu

*
i •
« . Jli •
:•! > ; b «. 'q
CONTENIDO r nj . '

Técnicas de programación. .
!
4.1. ' • '
4.2. Programación modular.
4.3. Programación estructurada * 1 1 si . . "" ' ' .
" i.

< 11 4.4.
- Estructura secuencial. •
1
t

q 4:5. Estructuras selectivas. V ;‘, y ’ .ur, . - >! ¡c W .<v '

4.6. Estructuras repetitivas. •


i-ili ! .
'
. . - í
-- í,

4.7. Estructuras de decisión anidadas. h. . • * t* > v i

4.8. Estructuras repetitivas anidadas.


4.9. La instrucci ó n ir_a ( goto ) . FiAJUooís KS OAr; / . .' • *
a '
ACTIVIDADES DE PROGRAMACION RESUELTAS.
t>?

EJERCICIOS. -: il ’ s i( 1 >lkx •
;

. v '- sk
., Ü / S ' - isi .
' 1

. - -.

^
• « '

y
»> f
. • J "
'
1
> • t
•»
•v i» » ¡ ¡ ' *
• •
j s . i.

. J .Sií
vi' S
* M •
1 j
- ; rxr¿iwf cuu
O . .* i

En la actualidad, dado el tama ño considerable de las memorias centrales


*

• • y las altas velocidades de los procesadores — citemos, por ejemplo, los
wp U /, (
microprocesadores como el 80486, Pentium y Pentium Pro de Intel, 68030
•JÓ Juv.
. *•
u
de Motorola, PowerPC de Apple e IBM, de 16 y 32 bits— , el estilo de
I¡; join : escritura de los programas se vuelve una de las características más sobre-
salientes en las técnicas de programación. La legibilidad de los algoritmos
j íi Ü /1- ‘ y posteriormente de los programas exige que su dise ño sea f á cil de com-
prender y su flujo l ó gico f á cil de seguir.
*i •
La programación modular enseñar á la descomposició n de un progra -
O UnlÚ ¡ -i / >. -
_*
• t

ma en módulos má s simples de programar, y la programación estructu-


-J-Ir» . - v*

rada permitir á la escritura de programas f á ciles de leer y modificar. En un


I
• ,
j > i’ /i
J i 1

. «= í v ti : J programa estructurado el flujo ló gico se gobierna por las estructuras de


control b á sicas:
•ysiílfo - , V V. I' * ;,
. r i;
^ ' "V v í L Í V! . ! ; . ; ;V , ! Vi! ; . • •

ni ¿ .¿?. l ‘ •
.. .

.
-

. ’ I » !'
'• ' í
1. secuenciales
2 . repetitivas ,
, ,
. i, : , i ¡ >
-
3. selección.
i
o i
- o > , i / :> ; r, t.u r. - n / n i v / - i b - w y i j
95

Scanned with CamScanner


96 Fundamentos de programación
secuenc a/
cap ítulo se introdu cen los tres conceptos anteriores
En este |dadI dei repetir
^
ón- repetitivo'- faPac
-ejecuci ó n instrucción a instrucci posibi lidad de selecc ionar una
I
de operac iones — y select ivo —
una serie
«
• >
basado en las berra-
progra maci ó n ya estudi adas : diagramas de flujo, diagramas
mientas de
M „
N-S y pseudocó digos.
: h

. i

4.1. TÉCNICAS DE PROGRAMACION


as de flujo,
herram ientas de program aci ó n vistas en el Capítulo 2, fundamentalmente los diagram
para el diseño de algoritmos y programas. Este tipo
Las
fueron la primera representación gráfica utilizada
I de herramienta constitu ye el fundam ento
la soluci ón de problemas de peque ña y mediana
de program ació n conve ncion al cl ásica y es de utilidad para
complejidad. Sin embargo, para problemas com-
de la representaci ón gráfica, una
plejos el dise ñ o de algoritmos implica un aumento considerable
memoria f ísica de la computadorá ocu -
reducción de la legibilidad del algoritmo y un aumento de la
teorías de programación se cen-
pada por el programa . Para evitar estos inconvenientes, las nuevas
ón estructurada, de modo que se pueda
tran en las técnicas de programación modular y programaci
descomposición del problema en
conseguir un programa eficaz. El diseño de un programa entraña la

módulos ( partes independientes) programación modular —
, la programación de cada módulo

mediante métodos estructurados programación estructurada y —
su unión posterior mediante pro-
-
cedimientos ascendentes o descendentes. .sebebine ciaos . e: * <-» > L, i o J r . fv
^ ^-
*
_ . aebnbip
c. ~ r n . i j c c : , ‘ .
r j
b .í
f ?.f >
4.2. PROGRAMACION MODULAR .8ATJ 3 U 23R I ÓIOAM / R 0ORR 30 33OAOIV1T0A
:

la
La programación modular es uno de los métodos de diseño más flexibles y potentes para mejorar
productividad de un programa. En programaci ó n modular, el programa se divide en módulos (partes
independientes ), cada una de las cuales ejecuta una ú nica actividad o tarea y se codifican indepen -
dientemente de otros módulos. Cada uno de estos módulos se analizan , codifican y ponen a punto
por separado.
Cada programa contiene un módulo denominado programa principal que controla todo lo que
sucede; se transfiere el control a submodulos ( posteriormente se denominará n subprogramas), de
modo que ellos puedan ejecutar sus funciones; sin embargo, cada submódulo devuelve el control al
módulo principal cuando se haya completado su tarea . Si la tarea asignada a cada submódulo es
demasiado compleja, éste deberá romperse en otros módulos má s peque ñ os. El proceso sucesivo de
subdivisi ó n de módulos contin ú a hasta que cada módulo tenga solamente una tarea específica que
ejecutar. Esta tarea puede ser entrada , salida , manipulación de datos , control de otros módulos o
alguna combinación de éstos . Un módulo puede transferir temporalmente (bifurcación ) el control a
otro m ódulo; sin embargo, cada m ódulo debe devolver el control al m ódulo del cual se recibe ori-
ginalmente el control.
Los módulos son independientes en el sentido en el que ning ú n módulo puede tener acceso direc-
to a cualquier otro m ódulo, con excepci ón del módulo al que llama y sus propios submódulos. Sin
embargo, los resultados producidos por un m ódulo pueden ser utilizados por cualquier otro módulo
cuando se transfiera a ellos el control .

Scanned with CamScanner


97
Introducción a Id programación estructurada

» : nnoornwj unc í '. o í o


• > hrAl‘ I
4 !
Raíz '
*
okf - xVtrf ! ' ¿oin -yi j i ' o v It » iirr > o
y

¡*
. y- \. -> \ 3- 1 'f .
Mó dulo 1 Mó dulo 2 Módulo 3 Mó dulo 4 ^
. .. ;
_
^ / iif rrn v o .
J y !• '
' .. r \ LLLi u
v '
« ji ii .
M ó dulo 12 M ó dulo 31 Módulo 41 Mó- dulo 42
Módulo 11 I.
• •
• i J u J
* >
. ’/ocnq sb nri
i <*

*
- •
oVttWnwJ»?.
• V *
*

l
Módulo 21 Módulo 22 >b ció i aeiqi : r

I gói t
nóbouifónl -
r ¡ CIIIIK 1« omoloH ;¡ i o
Módulo 221 Mó dulo 222

Figura 4.1. Programación modular. e ¿» o 3 v ) DO icr ' Avmv. v du d . '

trabajar simultá-
Dado que los módulos son independientes , diferentes programadores pueden del algoritmo
neamente en diferentes partes del mismo programa. Esto reducirá el tiempo
del diseño
radicalmente sin afec-
y posterior codificación del programa. Además, un módulo se puede modificar
tar a otros módulos , incluso sin alterar su funci ón principal .
se conoce también
La descomposición de un programa en módulos independientes más simples
módulo con indepen-
como el método de «divide y vencerás» (divide and conquer ) . Se diseña cada llegará hasta la descom-
dencia de los demás y siguiendo un método ascendente o descendente se
posición final del problema en módulos en forma jerárquica . í ir . fj c : fe i • rrv . ió - j
- •
- '

.

, :U- íj í U '. ’
I ; ir *.
>. s*5
• .
'
iu i..r

4.2.1. Tamaño de los módulos )


i . '
i
JVi í i í » "
"v \ I
i
7
J

tamaño de un módulo.
Una dificultad en la programaci ón modular reside en la determinación del
Aunque no exista una regla fija que permita definir el tamaño está
ndar del módulo, una buena apro-
de instrucciones ).
ximación es considerar módulos del tamaño f ísico de una página 30 o 40 l íneas de este tamaño,
(
a en módulos
Evidentemente no siempre se conseguirá descomponer un problem . < ; ,
pero el programador deberá realizar esfuerzos para su diseño . , '

iadamen te no hay
Puede no ser claro lo que debe incluirse dentro de un módulo . Desgrac
,
será dema-
reglas, pero tal como se ha dicho antes , un módulo de una o dos l íneas probablemente
grandes de 30 o m ás l íneas pro-
siado corto y será mejor incorporarlo en otro módulo; los módulos as ,
bablemente ejecutarán tareas múltiples y se deberán romper en unidades más pequeñ .
Ejemplo 4.1 T t y
bluboV i»
Se desea diseñar un algoritmo que realice las siguientes tareas:
i

i
*

impresi ón de cabeceras de un informe , j j


lectura de datos, 1
. of ,1 ob t \ totrbft
ejecutar cálculos, 1 ’ M ¡
imprimir l íneas detalladas de información,
imprimir totales .

t
Scanned with CamScanner
\
ón
98 Fundamentos de programaci
, de modo que exista un
módulo principal o de
descomponer en módulos
Este programa se puede
control y diferentes submódulos
.
. !i j i) i
»
!
M ódulo principal :
».
« impresi ón de cabeceras
JL
subm ódulo
• Llamada a
de datos».
Llamada a submódulo « procesoón de totales».
' rbut
p
t * vf

• Llamada a submódulo «impresi


• Fin de proceso.
• pr r " . /
Lí Ü I

Submódulo impresión de cabec


eras:

• Instrucc ión para impresión de cabeceras


é • Retomo al módulo principal.
V OJ ó V» í

..
Submódulo proceso de datos;
;o
>

• Lecturaóden dedatos.. *
!
t -y , r í; ; •» •
? .- £*- • * '* Hit ftrr> óf ? J! -v
• Impresi
Ejecuci cálculos
ón detallada de líneas.
, t

,
pfíVi
.
r ’ • • i i
'
*
;
,

• Retomo al modulo pnncipal. . v' iUM ’ - : \z


f «I iraijf •
, -> ,

'f • j *.' 7 í ;¡ 1 1 . « Ií M í í . .í » > A* t i* i 1 i , i i ' ( y /'"J *.) y (

Submódulo impresión de totales:


' V. M
-. V - . .
.- 'S 'í / ¡ "j Í7 Í b> OtOKfH li Ol í O ) .
tn b ¿of »b cionsb
^
'

-• Instrucc iones de impresión de totales


Retomo al módulo principal. c jiup7í
'

;• , < fob ( unit nó ioi oq


oluborn na Bfní»!dor| ^
, '

La representación gráfica se muestra en la Figura 4.2, cu


y tres submódulos.
de ,modo que existirá un
£ jr ‘ ) c¡ . " * ¡
módulo principa+*l
u ». > * » fe s . * .
- • . . •

: •
'
‘ •
'
1
• • l »i í ' !T ; nófosmi n . i :; , .
4- 2.2. Implementacion dG los mó dulos :,¡ bn ¡
¿ ¿ iu / *

" " u ínrU ! > h íofuí>6/n f /mx


noióí
f

i ,
'

La programación modular se implementa utilizando módulos que toman diferentes nombres, seg ú n
T

modular’ el diseño de los


módulos y

x; á '»
^ T


, *

f . í> olqinc;!
Mó dulo
principal : f
> t «A v i . vnj v’v * ) í\\í i > ; > *>V .

-
'V
*
‘ - J
1 1 •
•) ’ i • V!í{ rui •i
M ódulo de M ó dulo de
impresión Mó dulo de -vi ;
proceso de
de cabecera impresi ó n J «•
datos de totales
J

. Ó Cj i
Figura 4.2. Estructura modular simple. u& , ¡
lww « iiiq.,ii ¿
1U 'v . 9

Scanned with CamScanner


Introducción a la programación estructurada 99

4.3. PROGRAMACIÓN ESTRUCTURADA


El término programación estructurada se refiere a un conjunto de técnicas que han ido evolucio-
nando desde los primeros trabajos de Edsgar Dijkstra. Estas técnicas aumentan considerablemente la
productividad del programa reduciendo el elevado tiempo requerido para escribir, verificar, depurar
y mantener los programas . La programaci ón estructurada utiliza un número limitado de estructuras
de control que minimizan la complejidad de los problemas y, por consiguiente, reducen los errores.
La programación estructurada hace los programas más fáciles de escribir, verificar, leer y man-
tener. Los programas deben estar dotados de una estructura. - i i i J
La programación estructurada es el conjunto de técnicas que incorporan:
• diseño descendente ( top-down ), ...
• recursos
V. + •
abstractos,
Mfci i -
• -» K n
'

» s *• *“ ' ***
.*
' *' * * ' * * • •• » «I 'M .
.
I
W/
.- "
*
<
" i '* “
' *
*
' I ri i I * - - • - -• •
'

• estructuras b á sicas .
t ’
¡5' nu ovio fio
^ cnl^orrrob rnicsooLl v fnrfc H . 9 l c am n3 ) ?

4.3.1 . Recursos abstractos tkníno& sb * ab zoqti ¿9ti etnamaloz


.zslonu
i . 'ivnv
> .
** ( J t • ¿ \ y } / V

La programación estructurada se auxilia de los recursos abstractos en lugar de los recursos concretos
de que se dispone (un determinado lenguaje de programación).
Descomponer un programa en té rminos de recursos abstractos — según Dijkstra— consiste en
descomponer una determinada acción compleja en función de un número de acciones más simples,
capaces de ser ejecutadas por una computadora y que constituirán sus instrucciones.
; voTj knjnoo í/usq ¿ til < > Bí> í I í>: Sí U :;\ í b -. rí ns ub oinuq ' \m nu oo ? oq *»
" . .
/ , i y - i ; r ,-
4.3.2. Diseño descendente ( top-down )

- : l itttt9 BI abaab tonunes nsf •

. rjowL r ¡ . |
éfxa * <

.
El diseño descendente ( top- down ) es el proceso mediante el cual un problema se descompone en una
serie de niveles o pasos sucesivos de refinamiento ( stepwise ) . La metodología descendente consis-
te en efectuar una relación entre las sucesivas etapas de estructuración, de modo que se relacionen
¿
unas con otras mediante entradas y salidas de información. Es décir, se descompone 1 problema en
órquicas, de modo que se puede considerar cada estructura desde dos punte
etapas o estructuras jet
de vista qué hace y cómo lo hace . - forma
.-

-
.
,
. se consideran de la :.
Si se considera un nivel n de refinamiento , las estructuras siguiente
El diseño descendente se puede ver en la Figura 4.4. , ahg |
i C (W tt krj
^ ^^
.
a

YS
r no í o r '•4

V
— '
V 4
.
S IH
.
.

* 7>
* nooiii j
iI V . -.7
J " v/ i i
'

Nivel n: vista desde el exterior Nivel n + 1 : vista desde el interior


“ ¿qué hace?" “ ¿cómo lo hace ?"ft
.
Figura 4.3 Vistas interior y exterior de un níód üloOO

A35 i 0ijef

Scanned with CamScanner


Fundamentos de programaci ó
n
100
r:
i.
i 1
#
,
\ \
: á*
* a‘* / 1*kíf
1

- r .i ñ A íir
1 * *
¿\ f*„ » »v

r
i
. ' P7': i

.. •
,
i •

i .<.
l
‘, i I 1 í

í . » ¿ .í y *' • i * J i •> jUi •

» •«
<• .
, t »

r.M’.v n'P '? . •


iv .w .- 'V;

.
Figura 4.4. Dise ñ o descendente.
»
i
> i

v ; .’ v : >.í M! : * ' - l- r/ l I

básicais
4.3.3. Teorema de la programaci ón estructurada: estructuras
puede ser escnto utili-
En mayo de 1966 Bohm y Jacopini demostraron que un programa propio
zando solamente tres tipos de estructuras de control: . . " ; £V! .i . - 4

secuenciales, mi ib ;; r!rxu:: úhav.íf om -lo HOlOfirrr ír arq tu


selectivas,
1
" " íHW
' Y) ’ ti h il oW. cii í * ¡vi - i: 1 U Í *: TfK
| 8Í b >?. -b . ^
repetitivas. tttVi ;\3 • iWUT' y - '. ' • i ; iit .' i-.VO íC\ •

• -.
- J Un programa se define como propio si cumple las siguientes caracter
;!!'i 'U .•!

. . • .' q .- fLó .
« jl ¡
• 1
ísticas: . “
- *
f



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 seguir y que pasan por todas
partes del programa, "•
-
• todas las instrucciones son ejecutables y no existen lazos o bucles infinitos (sin fin).
rr: - ’ fcJ . ;'V
• " •• • • / ‘- .

‘ ;•'
• •
. i : > , fjjyj
- • • t ,
- *
9(192
^
4.4. ESTRUCTURA . ji.' ? ‘, I¡\ í/; r :j «;' . i i * n * ; isi/ Joi .lo
'
••
fj'J al
SECUENCIAL , n0
. ,

i v •*

I
La estructura secuencial es aqu élla en la que una acción (instrucción) sigue a otra en
!f :
'

^ 'b i* i hora •
- ' ito mi? cnu
secuencia Las
tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as
hasta el final del proceso. La Figura 4.5 representa una estructura secuencial. La
í sucesivamente
cial tiene una entrada y una salida. Su representación gráfica se muestra estructura secuen-
en las Figuras 4 5 4 6 y 4 7

\
t i
>
. .
I
4 \
li i m b
acci ó n 1
i
1
ir » ’
I
1 I
» I

I
acci ó n 2 I ¡
A I

f \
acci ó n n > r rzh u ! y\/ ¡ y¡
FACULTADOE . *

, ,
NSST
UBUOTECA
4'5' Es ruc ura secuencial
- 8‘-

1
1
i

Scanned with CamScanner


101
Introducción a la programación estructurada

\ Y * ft * Vi r
'

acción 1

acción 1 otnifii

• i

V
A \/
f
X -
Y — >aal
s:
- V íÜi ü ^v A
i TO
*'

1

acción n Lr;i + A/< . ¿?» II


*

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


\ » <Y
V
\
Y- AÓ.. «¿ t Ü
T

"iidhoeg
— —\
1
<

inicios \
< accionl >
i

< accion 2 >


*r *• y. . • - .
\
)

i
V • t
fs /
\ : • limb H ) Sy . _J
y. ni i
I
fin

Figura 4.7. Pseudoc ódigo de una estructura secuencial. £.* - oí q - :' i ;

.
< í ACH\ 'jb O '.MV VW n?> ni \n\ ’AvctMt onaisw, noiv/ ilm aVi tAvew
Ejemplo 4.2 otoñé ob\»uz V» witifyvJV -.V .¿p .*v\ •
. W) ,V o\wim \ '¿h moA w\ & orovj

r 'i ,
Lalculo J
de
, J
la suma y producto
, ,
de dos números .
' ><w\ ZGÍlMKynt

La suma S de dos números es S = A + B . El pseudocódigo y el diagrama de flujo correspon-


dientes se muestran a continuación:
orairri
,

Pseudocódigo •."
*

_ O • ) O i l f, J
rs* O [ < • •! ro * \
< fc Tor( o r V/ O iq , <: r. :od » o ? c; . « * n ) i * t
'


*

1 ;
**
. -
r. IC ' I 4 o í:r i i^ o i if *, f r j
inicio
leer ( A ) . T 4-J r í. j x TA . * {J £ . 0 . z * y i j r* r. i
leer ( B ) 0 2 . üq n í
^ -
• • u ¿ Y - Y ;Y I . r . 4 O . a j í /: i . & - .^
—-
S < A + B
P « A * B
'

-
'
^

• <
' • •
V lv

3.14
«

escribir ( S , P )
fin
I

Scanned with CamScanner


102 Fundamentos de programación

Diagrama de flujo
• •
inicio

leer
A

eer
i
i
B

S i— A + B t ;, n ,
S A*B
; rni * &> >J /? : rr ; fi - 3 •• /nogFI

escribir
S, P

i
fin
nri -í

Ejemplo 4.3 A;
- .

too t u eb op 5 ob « j¿>* í
*
O swr ? *
Se trata de calcular el salario neto de un trabajador en función del número de horas trabajadas,
precio de la hora de trabajo y, considerando unos descuentos fijos, el sueldo bruto en concepto de
impuestos ( 20 por 100 ).
/ < >Vi VVí n'' - vu\ « o\ v ) - . .

Pseudocódigo 1
/V '
¡
:
i . <¡ J

h" j; c; . /
jr ; ;: -3 - >3/ j -j2!J
inicio
//calculo salario neto

_
leer(nombre, horas , precio hora) _ _
_ - —-
salario bruto 4 horas * precio hora
impuestos 4 0.20 * salario
__ _
bruto
__ Ol J ¿XI ¿
s

salario neto < salario bruto impuestos


escribir(nombre, salario bruto-,
fin salario neto) _ A v
1
; t o* l
•‘

*
/: - cí

' 'í

nil

Scanned with CamScanner


Introducción a la programación estructurada 103

Diagrama de flujo
AVSTOa .í jP. 2AF.U70UI¿ TZ 2 X X
fíh KJl » ¡ v Ir. r ..W- :
» «J
-

i
inicio (BfTTK ! ffí JOB' ftm J

*r
"j < v . 3
ttil H' •
• • •
*

: t2 6H J J 5ü p sbfi OÜq n K
1 jqnoy
; ni V - ; • M r .. . l * ‘í w • .21» . . 'f .i - ’ f _
~ i
* ’, t • / < ' < w . . .
/n :í ' fj
- b ftf r ; V
.

ofio •

*
. i f’ '
*
- '
'
‘ i /r. ’ \ (
7 ; . i . : i'xnuloin l ' • !
leer *. r•» *
* ••
V - A '
• •
/ NOMBRE, HORAS
PRECIO_HORA
/
*

// íb n O O
.
y.. •' / r
y : f;. í rjoS .
• ¡ .
<; I B T l< ; ; : • •

rió , rx xf o •>& . o rr ; {3 .3 .5 }
*
:n 'J v ¡jyir ! y it!}
í . vn;?v r>n< « oí, i;
t

.
"

n ; / r -.r , í, o d i a VI «JIJ Z C,V > \ > V . —•< r m moaost f ,j U


' ’

SALARIO_BRUTO <- >; , j r r . .u olt .


v i loií t ! lo no oüj n;:iii --
HORAS * PRECIO.HORA It o o vrí Dslt,-
* ¿
. !
,<r. ¡M i : *
'

y ilt r, 5 . -
. < - olqiilarn
fj

IMPUESTOS 4-
0.20 * SALARIO_BRUTO 1

I — i: s B e a r t o j f l o j L c ) olq; - nÍ 3 gvü p.rno/ A .f.SX


' '
.
'

' s -: * ’ ’'
T - í e '- H a -" ‘• •' To - i , > •
n: •
no| oh i¡ /rtcnrrortii .
- { ;

t 1 I • í fTiT? :f sírií fulo obíi£up floiooíi üíünni/fruiioli LíIII


;
/ n Mvhrr; a! ¿uU /;
’ *•

«jnunmv _ onu i VJ ^
cn?¡ y. / -' r
/} -y i? ¡f. o f! r
, • <o i11 ; ’ Vjs
. ! - ..vn- ' j / L ¡ ' - j ' " . -/'
noi
íibnó
fijj ^ ;ó

f / fl / ?

.
íiüií i7: ci no mn
^oum o.': ofqny«
( tinoj > th¿escr b r.;;ns '. id
IO_BRUTO
'
NOMBRE, SALAR
¡¡
- ' rtí : - ?oooijj
^rtOHariooi it í
— SALARIO NETO —
iv>
>
i
t r Aftbpi urj' p i
. n
’ A*- - • Y •• r < noio ? ??r Cio . >
1

I
í
r C fin ) I

t
uvrí.y.'n'.ov .*
i nuirJOB I
88 no * 00.» - J I.

i
1
I ma N-S
Diagra * m nrn tmm •*«
»
f
* 4<w
I >IW >>
— ^ >
7
<
- W> .

- AY -íUt > ‘ • • -S -
•• j\ .U 4 > . 1
' \ \ .. l j i f \Yi r \
- - 1> ‘ i, H i
t
leer
• : •á so;» o p.?» ‘
t\i
y : I®
nombre, horas , precio '
1
r/_ > Vt .» f >
i
iio c!? r¿ e»
^ salariojoruto <- horas * precio An a l J

totf - t u v ¿¿ñu* .
í
'
impuestos <- 0.20 * salario bruto y Vir/t ' *

^
'
^ t
1

salario _ neto 4- salario _ bruto - impuestos 4


/
i

t escribir _
u. nombre,' salario _ bruto , salario neto
,r .i- • ¡ry, > ío ,* > r . I*
'
» • -
r ~ « n;>u- ?0Ln%:3 ^ íVV í^S í

Scanned with CamScanner


ón
104 Fundamentos de programaci

——
4.5. ESTRUCTURAS SELECTIVAS
.
dad uando algontm

^ ^ ^ w^ ^
ealment n

-
ene ^
La especificación formal de
atgoritmos
descripción más complicada que
una is a s ‘ ¡ó n de una determina
^ condición.
da
sírr;
luac
»*

“ paM _
si entonces . si no con una figura ), geomé trica en forma de rombo o bten con un
ángulo en el interior de una caja rectangular.
tri
Las estructuras selectivas o alternativas pueden ser
:

• simples,
• dobles, .
• múltiples
)
4.5.1. Alternativa simple (si -entonces / if -then)i
La estructura alternativa simple si - entonces (en inglés, if -then o bien IF -THEN)ejecuta
una determinada acción cuando se cumple una determinada condición. La selección si -entonces
evalúa la condición y
• si la condición es verdadera, entonces ejecuta la acción SI (o acciones caso de ser SI una
acción compuesta y constar de varias acciones) ,
• si la condición es falsa, entonces no hacer nada.
Las representaciones gráficas de la estructura condicional simple se
muestran en la Figura 4.8.
O)
C)
condició n ¿condición?
verdadera falsa
falsa
verdadera
acciones acci ó n
r
b) Pseudocódigo en castellano
si <condicion >
Pseudocódigo en castellano
entonces
< accion Sl> SI ( a c c i ón
compuesta )
fin_ ai 81 < cond -¿ cion > entonces
< a c c i ón S l l >
Pseudocódigo en inglés < accion S 12
>
i£ <c
°ndicion >
< accion si >
then
endif < acci ón

I
Sln>

' pseudocódig0; c)
diagrama N-S.

Scanned with CamScanner


Introducción a la programación estructurada

Obsérvese que las palabras del pseudocódigo si y f in_ si se alinean verticalmente


indentan -
do (sangrando) la <accion> o bloque de acciones.

if -then-else) i .l
4.5.2. Alternativa doble (si -entonces-si _no /

que permita ele-


La estructura anterior es muy limitada y normalmente se necesitará una estructura
gir entre dos opciones o alternati vas posibles , en función del cumplimiento o no de una deté'rmina-
v : ' aoJ í l»
dacondición. ’
acción S 2.
Si la condición C es verdadera, se ejecuta la acción SI y, si es falsa, se ejecuta la

o; » .* •- . .

u: . n i;

¿condición?
verdadera falsa
-!<
^ condic¡ón? > -
^^ n r>no 3 no V - is: »
.*
— . ¿ - V v

'\t
i
acción SI accion S2 acción S 7 acción S2
on _ i8
S» a
n
4 07 T19

r . »
V ) . —; * '
• .írX - L< • > * * •-*.*
c

^

t

r i
nr. * / « « r
¡ i -> e b ~ :
: b) li<Ü & Mk#
i
a)
*
f - .- () • • <Ñ l . ,- ,
v
’’ v ’ ' Ti _ » < „f . *
*‘ 1 C
s
Pseudocodigo en castellano
#

Pseudocódigo en castellano • n ti

si <condicion> entonces
‘ (S I acci ón compuesta )
• « ! si * < condicion> entonces
<accion Sl >
1 <
g.£ olqfflS :
?
si_ _no * r : . <accionSll >
<accion S12>
acci ón S 2>
i.u mí v < í< \ vwwau í >V> VVA:V/ im \ i A.- vAv - nuvm I . AVV A -nAvnW
< '
.
fin~si
• r: * r : • '

. • ill .» : • • ' ’ . ’ 1 ‘
!
Pseudocódigo en inglés
. i
<acci ón S 2n>
i Ú hv íS
^ if <condicion> then
<accion SI
si_ _no
<a

a c c i o n S2 i > . .
..
f £»
- -
n
.. . .
“T
..
i /

<accion S 22>
« «. > lVr ¿;
else *
Wí ' inq ¡o Bosu6S9(ífi9?¿ obubsl Iti IOCJ ¿ojub 3b cbtnlfo B! üibnoqu¿ o • um'jldoiq L nH
f ' BÍ Ifelu jffi'J 616S.. W - 0« 13 i I 3Un » 0 .O / ilag OIMTtbl
¿»
t . / > ii n n '

d ; ‘. ji ' jw > -> wbrJ«w‘W ¿i¿u Í iío v: of íí ^ <%cifiarP 9 3uboilm miri on


fin si
jt zona •

;» • Hr
^- I ! -A v, . » u : lab tlV '' j í !

c)
. fí .J ULMflAV

Figura 4.9. Estructura alternativa doble: a ) diagrama de flujo;


b ) diagrama N-S; c) pseudoc ódigo.

Obsérvese que en el pseudocódigo las acciones que dependen de entonces y si _no están
indentadas ( sangradas) en relaci ó n con las palabras si y f in_ si; este procedimiento aumenta la
legibilidad de la estructura y es el medio más id ó neo para representar algoritmos.

Scanned with CamScanner


.
, ,V V
Fundamentos de programació
n
106
, * '
í \ í \¡ 4
)S < í

. t
1 jJ / ¿, f fJlJ / * ' J <' ( Á)
) ' ».;
Ejemplo 4.4 Ví f j
| () \t ) , j » » • ' i * * r * ‘1 J -j f r •'
**

grado.
Resolución de una ecuación de primer
datos, y las posibl es soluciones s o n: . t:. 3. >.
Si la ecuación es ax + b = 0, a y b son los

/ uffi ]< l /IiiTjU \ }' r J \ J


a <> 0 x = -b/a ‘j j i i non .
:- n
« solución imposible
'
1 » >
*
j ¡ j r • » b t/ / \'J \ f ' *
a = 0 b <> 0 entonces * J

; ,‘fc
«solución indeterminada»
a= 0 b = 0 entonces
Ot '/J ’ ’ VJ[9 Ur mñmmvtfriZ
» «
á:
El algoritmo correspondiente ser
algoritmo RESOL1
*
var
real: a, b, x c •
on le .
u \ Q \ Du ; r :/ y
inicio
leer í a, b )
,s r 5 5 ICV
I ^
si a < > 0 entonces r* !
x <— - b / a 1
non
u•J
Ic now.;:
escribir( x ) Ve i ^ " *
i L
— — T~ .
si _ no i
si b < > 0 entonces
escribir ( 'soluci ón imposible 'T
W - THBN)
si_ no .4 V r .
\

escribir ( * soluci ó n indeterminada ' ) / ia


fin_ si /

I 1 #%

.
/
fin_ si
fin
.
• AIV; /.u:» ’ V » 4 »¡.\Yt‘41ú > » ‘i é\ Ott »\WV¿ srj : . 1
v’ ííSSOTWISrl 1 ^
/
¿ torzorí no < n xa
t
Ejemplo 4.5
f %
Or
i

Calcular la media aritmética de una serie de números positivos. i

La media aritmética de n n ú meros es:


xl + x 2 + x 3 + ... + xn r: M. = V
I
n »

^ ^ ^^ ^ ^
n úmero n tiv M^ nS T cakuK. 1 1 introduzca el Prinier
” aritm
” ética^ *
n úmeros se han introducido hasta llegar a -99 - na
’ P Ci
*utlllzará un contadse necesita saber cuántos
lavará la
ontadoorr C que llevar
cuenta del n úmero de datos introducidos ° Se mip

VARIABLES:
s ( suma ): real
n (contador de números): entera
m (media): real
i : U í .NM M .t * fin a
1 P
> .*' - LA.
t* • prjv
:* M
*
M i * ifJ i‘
( /(1
'

algoritmo Media
inicio i\ > ;: .
s < 0
n < 0
-- //
inicializacion de s y n , d' •; t ¿
l ;
*

ni
? v ;v *

VJt !
iUt'rl '.r > K; ! •,
T
i
t i*

Scanned with CamScanner


Introducción a la programación estructurada

datos: i . ,
*
V .1 ; i
leer( x ) / /calculo el primer numero ha de ser mayor que cero
si x < 0 entonces
ir_a media * Y* •*

.
si_no i

n4 n + 1 -
s 4 s + x

ir_a datos
i ? I rr i'

fin_si
3G J Ü v JIJO
*
1 . 13
media: .


m 4 s/n / /media de los números positivos
escribir(m)
• vi

fin ; X . 6. * -
, r Y 7 «.
i -
^
1; ¿ ili

En este ejemplo se observa una bifurcaci ón hacia un punto referenciado por una etiqueta alfa
-
numérica denominada(media)y otro punto referenciado por(datos) .
Trate el alumno de simplificar este algoritmo de modo que sólo contenga un punto de bifurca-
IB
ción . t

C ~í II
rr i f
( [ t l *
l a n i*
Ejemplo 4.6 .
« 41 *I - «i

cuyo trabajo
Se desea obtener la nómina semanal — salario neto— de los empleados de una empresa1.1
C ~
se paga por horas y del modo siguiente:
, * ill .

las horas inferiores o iguales a 35 horas (normales) se pagan a una tarifa determinada que
se
debe introducir por teclado al igual que el número de horas y el nombre del trabaja
las horas superiores a 35 se pagarán como extras al precio de 1.5 horas normales,
dor ’
^
los impuestos a deducir a los trabajadores varían en función de su sueldo mensual:
— sueldo <= 20.000, libre de impuestos ,
nsj

— las siguientes 15.000 pesetas al 20 por 100,


— el resto, al 30 por 100. I

Análisis
1I .1
i
1? w
* <
.•
» ;;>J : ,¡
. <

sm JK. i ; * ¿r I

Las operaciones a realizar serán:


i •

> or -
v w
1. Inicio.
2. Leer nombre , horas
. .
trabaja das , tarifa. -
* *•

- *: »«
(

3. Verificar si horas trabajadas < = 35 , en cuyo caso:


___
salario bruto = horas * tarifa; en caso contrario
, !
salario bruto = 35 * tarifa + (horas-35) * tarifa * 1.5 i

__
4. Calculo de impuestos
si salario bruto < = 20.000 , entonces impuestos = 0 *
si salario bruto < = 35.000 entonce s
_
.
-
impuestos = (salario bruto - 20.000) * 0.20 ,
_
si salario bruto > 35.000 entonces _
impuestos = (salario bruto 35.000) * 0.30 + < 15. -
'‘ 000 * 0.20)
_
5. Calcul o del salari
_o _ neto:
salario neto = salario bruto - impuestos.
_
6. Fin.

Scanned with CamScanner


108 Fundamentos de programación

Representación del algoritmo en pseudocódigo i

algoritmo Nomina '


f

var
cadena: nombre
real: horas, impuestos , sbruto, sneto
inicio t.
Ieer(nombre , horas, tarifa) ni *
.si horas < = 35 entonces
sbruto <r- horas * tarifa A 1

ai _ no !. . i».
iir!ÍV,
sbruto <r- 35 * tarifa + (horas - 35 ) * 1.5 * tarifa
fin_si
(
ÍS ; B í sbruto ' < = 20;000 entonces ¡ tt 'O'/í N i finü BWUHdo 3 OÍqíTTOjo *»J2‘ o3 - *
!
'
*

impuestos <- o i • .
8i
¡° ehniM
¡
>qobsijíioialsi OJíHK{ cUo y; < fe .cbfc ) «bfinimonafo fjDhbmun
mlhos ÍB SíA'J ’
iBuBiíq n
- ,

^ ai onrauifi Í 3 3JBIT
'

si (sbruto
( . y (, .
nnn )
20.000

'
/ )
> sbruto < = 35.000) entonces
impuestos (sbruto - 20.000) * 0.20 .H
si _no
impuestos ( 15.000 * 0.20 )
•-
fin_si
+ ( sbruto - 35.000 ) * 0.30
fin si a. o!qr(¡i,¡
.
- sneto <- sbruto - impuestos a l b l l «hull
— • . . .. .“ '" . , ,: ^
scriMrtnombre. sbruto . impuestos , neto ) ' t j i/
'
fin
1 9Jií!(ii> i

tj iK
" ' •
' 1 • >» •>
' ' Mi V ¿VjAOl\

& q<< :.
-
JV

- yte » **» » ttbuboTJniadst


i
Representación del algoritmo en ?J Í
- c; ' :wi
folnr anortas
/

diagrama NS o
'
-Í—
rinicio i > ? ob
,. .. ~
,u ,
¿ -,J, Itrji
inicin '
"‘ 1i
'
' V / ii' ,,
AJ / V i ,f ¡. ;
“,

^. .

i jCJilr. ’,‘iiOf í ?£ Í
leer nombre, horas, tarifas
f
- -
* f •. •
pit » « .i
* >

i

j ÍH¿ 'íó ifjqrni ¿oí ! i »


LEQ I
S,; •

°f »i - > Ob
- • fiOqOWK'T" JaoiugteÍ0?i//J2 —
horas < = 35
^ ¡ t \ luq { £ fo
í
^ ^7 ^
s/
no
ío

*»»**
sbruto f- horas * tarifa sbruto 35 * tarifa +
lhoras-35) *
15 * tarifa
,J
sbruto < = 20.000
' '
í; aanobííiüao ¿í. I
si / » i

no .o
sbruto > 20.000 y . c
i
>
i ,
' i v V !.1 '
-
sbruto < = 35.000 '

'^puestos *- o ,
SI c i •«
-- .(

- -______JJsbruto-20.000
no

— mPuestos - f
)*


o 20
Apuestos
15.000 * 0.20 +
®to 000) * o.30
^
r — . >&

! i
*

"J
~ r’ ‘ *'<
-
T5 C
ij:

---£ *
.
V. J -T' I
-
I j a r..

f’
"
^J
’ C:

Scanned with CamScanner


Introducción a la programación estructurada 109

Representación del algoritmo en diagrama de flujo

v on i A' . $íK ;'un ’ ! '

'
1
'' ¡n¡c¡0 '• .
uv ircV , ' ; jy « > * » . >? v. uVMmy ' ,
.
‘- /
ewrtr pk» . 'i S
r (
1/;
;: O
- i r
r: r '
:
' 'r
*
1/.
'
1 /
-
\ niiv n
leer NOMBRE * -* t\ :
C: V : • HORAS, TARIFA
I
* v
f ! ' oiemur: J* ‘

lit * í ir r
*; :
t
* «
' . »i«U
< a ;i
* '• » . I
¡ ’

fcDCrrtSí Jfi é f - :T i >


*

A .V • • •
, ;: 1; MI . i
. . .J J 'SMi'T.t i > ‘ •' * - • »

o lo í J ir si
HORAS
no n¡ > " > % ;/ i / ‘¿farola
< 35 K

. . - ,
U r<
SBRUTO <-
Vil i•

I I1 ; - V. .* 'i
!Deni ’S
ni 2
SBRUTO
HORAS * TARIFA 35 * TARIFA + ( HORAS
- 35 ) * 1.5 * TARIFA
i
¡o l
8.£ c!qrnéi3
>.

! .u',i.ovt\’\ OH. .
twvv i' i» yt. -ir.HpVwJt» mr » \ Dvh2 )i (AUtitnUla . ^
SI no
I SBRUTO <= 20.000 o ? v:> iz - £ liOTalü
s
l
1AV i

: 019 JH9
IMPUESTOS <- 0 si no cioini
* SBRUTO <= 35.000 i
(o.Ir ¿ ir.al
v-s
O «K • - <
A ' N O 0 <> TN/ I
üs i e i d ’
"
oft £ i
* ° IMPUESTOS
••
1
2 IMPUESTOS <- ° • »
(

í ( SBRUTO - 20.000
,
) 15.000 * 0.20 + -if i
<
: 03 E 0 Mid es ( oa; yofi ñ ( SBRUTO 2- 35.000) 0.30
»*
.
* 0.20 .

- i
i

\
flinch'.roer

» tt'in rtW¿ BWfemtt


* vxi .? / IMPUESTOS ' ,
SNETO
( SBRUTO-
<-
dugnluqú m
)
-

Y. w/ vxor . . b íV > io\ rAi


V , ¿ \u;3\ v , - um *s « oimhofc\ [
vfomV \ > i>\ n\i tartiuyj mn<\ ns’iWui ^
ol3m9
^*
'
c*
V
G Í L'paci emolió t í »
escribir
I t
«
»
* . 1. .

NOMBRE, SBRUTO ¿
: Í 63‘
T 5V
-
i IMPUESTOS, SNETO
olein ¿
I * * *1
'
i1
:> 4

i ( ‘ ij & i ;: O.TV j ’ }itdl iono !

C )
i
cf JOWL (3 %

í
*
O.
fin d * » -> q »
( o < q > Y (d < q ) Y i f i *
^ \ (D

q) * (d - q) #
(G -
q ) * qí S’s i t í
^
- » GO > T. tdl on»
^
Ií: f * f. - i

í ’ olbBhfcVt i
. í: J *
en
.c,. _ r> > i • *•

i{ A ^ ¿:
r Otf din fe! n r »>,‘
, '

.<

Scanned with CamScanner


ón :
110 fundamentos de programaci
'AW » H ¿ «
sV> mtWY'
t > v\\\
\
ú «un *
. . nanos» V'*
: )

X1, * estructuro selectiva para detectar


algoritmo Parte
_fraccionaria
si un número tiene o no
parte fraccionaria.

. 1
var
real : n 3 Flc; MOH .\
inicio ,
\ /v1lflA í 3 AH OH '
,

escribir ( 'Deme numero )

leer( n )
si n = trunc(n) entonces fra a . \

eBcribir [ ' El numero no tiene parte e


#
\

st _no %) ". / *> ;;AnCM


escribir( ’ Numero con parte fraccionaria <r
fin_si
r
i

fin • OTIJflflg -> oT*ü flas


oAHOr :• i

* 3£ » A 3IF!AT 2AF10 H
I
o c ri ;V » . rc * 11 r
.
Ejemplo 4.8
|
A
/ S 11 i .

*

~
T
*
-
V v

Estructura selectiva para averiguar si un año le ído de teclado es o no bisiesto.


r\\'
Cs i\ / ^^ '

iA

algoritmo Bisiesto — <OOO.OS => OTUfl88>~~


var
entero : año
t
inicio
r\ f
- J3C0.A 0TUR 8cf> — | -
0 > SOT 23 U :iM! I
,
leer(año)
si (año MOD 4 = 0) y (año MOD 100 < > 0 ) 0 (año MOD 400 _ =. 0 ) entonces .

ascribivi El año , ano, es bisiesto ) 0 710 root ,, *|


1
t 1
1

&:;ü V!
si no ’
H- V 2I *S>
í
:escribir ; ÜW
_
fin si
( El año t, año, • no es
^
1
*
u bisiesto
-—
fin
T t
T" y

Ejemplo 4.9
- OT3UI 8

Ya‘eZ- tda de dawsm'll program " es ,mctura electiva se


utiliza para el control de
algoritmo Area _triangulo
var
^ f _ ^ \
\ •
3L
i
.

\ 0TU!)fi;;^,M8,Vl0n\
*

real : a, b, c, p, area

inicio
t
escribir é Deme los lados •)
ieer( a, b, c )
P *«- ( a + b + cC ) / 2
-X.
! ni!
si (P > a ) y ( p > b) y ,

CriPirt :
area 4- raiz2 ( p * ( D _
<P - *> / ent°nces
, ,
^
fin
^si"
.
_no
-
eacrihl r

«IMrCNo
i

es un tcian3ulol )
* (< P
- b ) •* (B. c )
p

Scanned with CamScanner


Introducción a la programación estructurada 111

4.5.3. Alternativa múltiple ( segun_sea , caso de /

— —
Con frecuencia en la práctica , es necesario que existan más de dos elecciones posibles ( por
ejemplo, en la resolución de la ecuación de segundo grado existen tres posibles alternativas o
caminos a seguir, segú n que el discriminante sea negativo, nulo o positivo). Este problema, como se
verá más adelante, se podr ía resolver por estructuras alternativas simples o dobles, anidadas o en
cascada; sin embargo, este método si el nú mero de alternativas es grande puede plantear serios pro-
blemas de escritura del algoritmo y naturalmente de legibilidad.
r - - La estructura de decisión múltiple evaluará una expresión que podrá tomar n valores distintos, 1,
2, 3, 4, n. Seg ú n que elija uno de estos valores en la condición,’ se realizará una de las n ácciones,
o lo qtie es igual, el flujo del algoritmo seguirá un determinado camino entre los n posibles:' J

La representación gráfica de la estructura de decisión mú ltiple se representa en la Figura 4.10.


'{VA

g ‘ r
»•
* * ~1

Modelo Modelb 3 I ( simplificado ) :

^rfH
-
*

segun_sea e x p r e s iion
ón ( E ) hacer
. loilp i r\
opcion G de
i

í: ¡ (>

\ el: acci ón Sil


^ acci
!
ón S12
. x2 ' n2 * £2 r>
v <: ra n3 £2 re
fin_opcion
acci ón Sla
i *
eL2: a c c i ón S21
I i
acci ón S 22 Modelo 4 ( simplificado ) :
—;
4 • «

caso_de E hacer
byiiíyjoV im' .
acci ón S2 b
i , . -. p:
t'. vrqvi - ^olqtiljjrn r?o ¿ :

V 'í - irv , . o
• ; tú
>u ?.ac! . v V .
;
I
>v '
*J
; Jtt rCS C<
cu.® en :, , acci ón S 31
lo noiee' jcpce
. fin _hacer
Uto nolis . * y j
tv ... „ rr .
acci ón S32
' % >: r i , i

Modelo 5 ( simplificado ) :
acci ón S 3 p ; noirV o
¿Cu: si-no: acciion
ón Sx e pUCttecoatov-. si
\
« i
Bi E es n i hacer
.!

ualvl iffW
í

fin_segun '
i 1 :
vcrros í:CIV> H• !. C ran < x« i v / . .
' *
v, "
6
w

i -
¿¿ 9.
.

•. ecAjerié ' ; * •
*

«
» 1
í . :: » nu u •
> r

;¿i¿nnoi

g i»
v. ’
d
^
f u
"
j i i j s n q "ó
1u h 3 1 n E ^
t tbboobuoacj^ñ5-5i itItim nóizbsb t> b BiuíotnJ a cj
b omf » ?.Vu \mY¿ , 319 ve 13 KMloiXM «sit»2 *ob í wihu .^ .
I
h
v« ' t
-
.20) i;miol J í I ?oloboiri ?a!uoiijnilj -
nombres sí? ¡os días < k u sa *Ui \
'

- . ;

. te chic qui representa m ¡.vnici / * i .,V



' •
* '
. it

.
*
fin según
. -- -
— ^
o ¡ i • O' :

:
— . Ü rü¿ •^
‘Rgura 4,10 — —.
u í' n /; - MO ) . jze alobioluv
"
i . ;q aup pawi

<

Estructuras de décisión múltiple


.
.

a±. ^

^- ü-irí éíú.- f ^i í vrj


^dOi ? .

Scanned with CamScanner


«

Fundamentos de programación
y i
112

Diagrama de flujo s> a o \ ob oc


* .tw . .
ms í l ofcjHlüw nvitomollA
.£ « • &


•;
1
i ••
*
v .*
.* . .
- VJ > MTI < > • '
Í 191 * l > V « Mi
( » / ->
/

condición
II *

ni <
<\
Í, U 3 ‘ r. nfr no
tor i ' ln > i
i :i í
. - i [ . olqimp

ri i * Mi Ai - i
#

(
KJ 3* il - j u\ : vjf

¡\ \ «i >. . i» fob -
-
ob > y¡
- Ii
3
r

-
« t
i 4 h r obOJ m
^
rr .
^nr ? 4
• . . . ( ; IV
:
L '
/ , .
J , , v nrrMhosJ /: bb cti.Jnoo or
» ' : 4 tn j íd

.
r
f
-i
¿4tJlbm n6 ¿i - ' •• •

nu c
—*
,
1 ^
acci
"r
ón J
t

acción bono r. v />


/
k

- *acci
*
S1
ón \ - acción
S2
r/ ‘ . /
í T; J
acció n
S3 n
S4

^

i i b ^ Sn

Ot i ciiigil j
Diagrama N - S

:
- Jn3 ^ olt rtfimi i ólebob b nuJoinltio
al 9b *»
^3 : , : í : •
‘- J

Modelo 1 — - Modelo 2

condición condición I

n= 1 2 3 n otros
>c • . ; con a:;r _ I
' r r> : i
r •
X < - Fs
I

S1 S2 S3 Sn Sx S1 S2 Sn Sx
no. r.c/c nl ?<
I

c
- •

.
-N
•>
-
• ..
. .
I


<
} .*
J . > -'i
*» < » 'k , »
í.l .' ’
» • i ?C2 n 3i '•
•* . 1

Pseudocódigo
T -> J * : i eb o a íro
»
En inglés la estructura de decisión múltiple se representa: d> á fvO Tr O V

case expresi ón of case expresi ón of


t e l ] : acci ón SI '"
‘ -
[ e l ] : acci ón SI i < 2 ru. ioo ü» : .:s
[ e 2 ] : acci ón S 2 [ e 2 ] : acci ón S 2 r

•i '
« • i

o bien : i

[ e n ] : acci ón S n [ e n ] : acci ón Sn
:: ¡
otherwise else i* L- toa - Ir. *
acci ón S x acci ón Sx
end__case
enclocase

^^^ fl í “""PP“
11
pudi ndo er la acciones'í « e diS° « P<*d é representar de diversas formas,
siguientes modelos de formatos. " ° ° " * caso ,erior °
m ” C e C an compuestas como en los

NOTAS: I
i

Scanned with CamScanner


Introducción a la programación estructurada 113
8egun _ seaE hacer
el: acci ón SI í »

e2: acci ón S2 1ÉV


*. 0 : o 7 r .1 3
oioilfll
en: acci ón Sn V
si_noj acci ó n Sx Arc / . a rufpae
f

fin_segun ' ET.'UJ > 3


*
JLdlmmi : I
£ !7 > ; í 7; '
i
^ id Lioae> : $

1 r.3 JO".» ;3 ? M ; i V dinoa íI :f


'

o bien en el caso de instrucciones compuestas: i > n idinoae


segun_sea E hacer
( ! TV ' i ¿ di *
:, « . * > ;
( OCAt' / .o ) *xldi/xoM : d
'
el: inicio ( ’
0 V J !4.; i i n Id l *ioto :
'

acci ón Sil
on In
acci ó n S12
t : r. Idl'ioae
cupoa , all
fl 15
acci ón Sla
fin
el: inicio
acci ó n S21 rr.A o!qrn 3Í3
\
^ vA bb o Ai \ t Vn ¿ AA \ (mu b
^ .

fin nncr e^. hiJ >


Liadle
en: inicio 70 V
»*
- v C fiib ; oneln d -
.< oioinx
fin <' ftlb a * p ¿C ) T.idlio 3
*'
BÍ_no:
fin_segun
acci ón Sx *
2ü90fcd * 0
trl
í > x b 5>er5 jiu
íh
_ / TVí

^
^
an

.
2. Los valores que toman las expresiones
( ’
( E) no tienen por qué ser consecutivos ni únicos; se
c s r u J ) iidiioiai»
*

pueden considerar rangos de constantes numéricas o de caracteres como valores de la expresión E.


caso_de E hacer i ’ eo I otn 9 ii -í ’
) iidino&e
2, 4, 6, 8, 10: escribir ’ números pares ' . *-
1, 5, 7 , 9: escribir 'n úmeros impares ' { íVJV M í V } iid ÍToee
fin_caso .i, .
» : c5
( ' con 19 i V n i -i lio r.o
»

¿Cuál de los anteriores modelos se puede considerar representativo? En pseu- realidad, como el
docódigo es un lenguaje algorítmico universal , cualquiera de los modelos se podr
ía ajustar a su pre
sentación; sin embargo, nosotros consideramos como más está ndar los modelos 1, 2 y 4. En esta otra
-
seguiremos normalmente el modelo 1, aunque en ocasiones, y para familiarizar al lector en su uso,
podremos utilizar los modelos citados 2 y 4. J ¡: I

Ejemplo 4.10
\

Se desea diseñaran algoritmo que escriba los nombres de los días de la semana en función del valor
de una variable D I A introducida por teclado, que representa su posición dentro de la semana.
Los días de la semana son 7 ; por consiguiente, el rango de valores de DIA será 1 . . . 7 ; y caso
de que DIA tome un valor fuera de este rango se deberá producir un mensaje de error advirtiendo la
situaci ó n an ómala. : ;> t í r; r 7 tr. . .

Scanned with CamScanner


114 Fundamentos de programación

algoritmo Nombre dias


_
var
entero: DIA
inicio
leer (DIA)
segun_sea
DIA hacer * r » ^i> * • .
\M . s o n . i -* *
1: escribir( LUNES ) 1 1

mr* nii
2: escribir( ' MARTES ')
3: escribir( MIERCOLES )
1 1

4: escribir( 'JUEVES ’ ) ?ünoit>wOzn¡ t)b O?. BD te ng nghJ o


5: escribir('VIERNES')
t r5 O i i oa _
6: escribir('SABADO') . .

7: escribir('DOMINGO ’ ) 0101n1 :
si_no -J J

(
escribir (' ERROR') 4
*
I noiLOi>
Él _
fin segun
fin
» »
'
C . i
r

Ejemplo 4.11 O H lili ) : lo-'


r «
.20iOOf >

Leúiíi una fecha, decir el d ía de la semana , suponiendo que el día 1 de dicho mes fue lunes. !

algoritmo Dia_semana
var
entero : dia
— rríí ~ ~
Oió i fíi>":T3
I t
I

inicio
escribir('Diga el día ’ )
leer( dia)
segun_sea dia MOD 7 hacer r. Jt jfe t órtola ' '

1: ítLc © s c:ll # _
escribir( ’ Lunes ' )
i W Slip lOCj < fl ( 3} * O f j r H X*J fcfil ílfimoi Slip ?3lOlj5V oJ . £
*
'
2:
escribir('Martes.* )«ILOGICO Ao ?Q¿hirriun fcoJnui&no' job ¿ogrtfii ungbtenoo nsbauq
3:
escribir('Miércoles') secad 3 *>& O5BO _
4* i t* sidl/tcea ; .
- ? xl 1

escribir( 'Jueves')

escribir( 'Viernes')
lit
-í trov.o
;

• »' . j ,b f ¡ j * » :
V • J í i O6 2Q
escribir 11 í liiinv;? ' . ifjvi ; ai+ bt iutj r'Á yji¡<
'

' .
\ -ó tete » ui •/iohoJMfi ¿ o! sb IhuO
Am ?o\ '-JAí*J ^» • riv/- iji ;.. <;-j» uuv¿ ,, Ui.}.* r: • / n u: » , ) tm _ ^
• n* • »
VJ » ,

(( SaÍDac 0
• ? •

^; ! '' 1 :',í!omu'

• i

jZüfMrob
)ho
* í UJJ
'
Ti ; \!
Mc; gt &usiff
ó l ou < o ostib
¡V!f03 2011020(1 «OgUxjfft ItlZ ;n6Í3BJ03 í
ó’job
i íxi
i
i !
eecrlblr( ’ Domingo ’ ) »
_
£ in segün ¡ í : í ICIIIíUL í iva í J / , 9ííO í ?ííJ'J« J 'II3 - jupti íji ; . i r»í *»bofti ! .- íasf í ilfeitnon zofnsiiugdz
^
< .

^
fin ( •
, » « '

' ‘." .y i í >!'jfx/ííi r ol -
iiu xorutofroq
t. vi
> i » s.
cou i > ( i\

Ejemplo 4.12 Of ,J* olnmcjS


Preguntar qué día de la semana fil é é l día 1 del mes actual y calcular qix

^-

día de la semana es toy
^
. ñWWMnm&to , . ií .
) - i" .
.T
entero : dia,di
'

carácter : dial 4 ' *t *1 i\\


. n ¡ f ¡fi ¡6nfi uoiofi üli ^
'

Scanned with CamScanner


Introducción a la programación estructurada 115

inicio
t
o í ? ini
escribir( ' El dia 1 fue ( L, M, X , J , v , S, D) • )
leer( dial )
segun_ sea dial hacer
r» » o íú set
t: f
'L ‘ : V
i » i « ’
die- 0 ;
•M : 1

die- 1 -
•X *:

die- 2
idlioae
un i R -
•J ‘:
die- 3
rll
* v‘ : . -
die^ 4 i íí L J !* 2Fití) nuicjínolftoo 32 oí
^ibooobuM[ b n
• *

s,;
• r .
) ,J / aa omoD
‘ ‘ ’
l' h oliü ilrl rn sop fibdfirf 3«u1 te« u ;—efionsmi/n ¿sJofi (
^ i 0 .
die
S
/
- 5c i ¿

’D : .
1
“ seo '.' A ’
c *> r. i7 ¿" A
fr
die- 6 |>
— » HO ? F: A’
_ no
si.
die- - 40
C
.>
—*
-.» -
é >
r

fin_ segun 7
ft
— t n
n
f. 1 *

escribir( ' Diga el dia ‘)


leer( dia ) y
' f
. * , ru r ^ rc.v r , ;
dia e- dia + di rrrn? 7 $ n ¿» i . :
, ,

-J
«
* t: i
segun_ sea dia MOD 7 hacer
t
1;
* / $ _ . N'> O r v
f *

escribir( ‘ Lunes ’ ) ' • • '
• ; i¡ t . • > . » , \ .
1 •
ion i .r Otfttno •'. / >
"
'
, > • •

" 2: i ' ‘ ' * * ’ j lV.v,


' ’
• '

escribir( ' Martes ' )


3: -**
.1 0 4.5tumw\7 v» i.- oc _ m/ 2 mMutnii s! oup tsvradoshauq a2 no » .
»R
4:
•escribir { ' Mi ércoles ' ) r <; ,/n -
f¡3 ¿0 Í > t;i *; r: V , . . , . , u BBQaoJfl ?
escribir( ‘ Jueves ’ ) ¿ . . ,
> cor • **
i C T í ' :oJ :UCi ftf f ¡
_

- .^ *

í- 1
5:
escribir( ‘ Viernes ‘ )
6:
! n únví tf
:
• " r !-
ve.
iOC: I 5 '
: • Wí í, .V
V
* *

¡
- U/
c l 4

escribir( ‘ Sabado ‘ )
0:
oi oín i
escribir( ‘ Domingo ‘ )
"; ' ; J
fin_segun
fin A •
2D nx/v >*

< . .. . *
: “1 id
Ejemplo 4.13
i i'4 !. V;P í

^5 desea convertir las calificaciones alfabéticas A


6 7 y 8 respectivamente.
, , ,
, B , C , D j Ea calificaciones numéricas 4 ,

• é rtJir
** ?
^ valores de A, B, C, M, D y E se representarán por* la* variable
*
- •

Los LETRA, el algoritmo de reso-


lución del problema es:
4‘

algoritmo Calificaciones
var
<! f > al < 4 jnai:J
1 V. ) 0\ .
carácter: LETRA iU\h \ \ i i\\\ MW ^ A
entero: CALIFICACIONES ^ r \ > > < vi ’
*

Scanned with CamScanner


116 Fundamentos de programación
oiolni
inicio iIdliofc»
leer(LETRA) ib » aI
segun _sea LETRA hacer inonxí .
• A ': calificación 4- 4 #
L

• B ' : calificación <


• C ' s calificación 4-
- 5
6
•*

• D ': calificación 4 - 7
• E * : calificación 4 - 8
si-no
escribir( ' ERROR ' )
— Ib

fin_ segun
fin
/ i.
C
V
-
otras posibles calificaciones por ejemplo,
Como se ve, en el pseudocódigo no se contemplan

segun_ sea

ía que modificarlo en el siguiente sentido
0, resto notas numéricas ; si así fuese, habr
LETRA hacer
.
: *C
rr ,
calificación 4- 4
• A ':
calificación < 5
• B ':
* C ': calificación 4- 6
— í
Ci7 ia

'D ': calificación 4- 7


• E * : calificación <— 8
- i t i i l- oft's
if> f

\ I, í L i'é bt i
' ;
si_no: calificación 4- 0 fsi í; iiaal
fin_segun L?. - o r £) —* ti .L i í

Ejercicio 4.14 ííaSArf r COK c i ¡ , aou . cirs»a _


.r
Algoritmo que nos indique si un número entero, leído de teclado, tiene 1, 2, 3 o más de 3 dígitos.
Considerar los negativos. :
( Db .1 JcM
' •xidlt’i'i'iO
Se puede observar que, la estructura segun_ sea <expresion> hacer, son varios si <expr.
logica> entonces anidados en la rama si _no. Si se cumplé ¿1 primero ya no
pasa por los demás.
( C í.V i l ,
‘'
algoritmo Digitos .^
var V ' jTldiion
entero : n
*
:3
' ooiScifjR )' xidl x '

inicio :0
leer( n ) ( OT> rtJ. jrioG jlidllOttV
segun_ sea n hacer
-9 .. 9: ai i
escribir( ‘ Tiene 1 digito' )
-99 .. 99:
escribir ( ' Tiene 2 ' )
Zt .b olqrtioi
*

* 5 -
-».1 » 999
"

..
r
999:
i P ,
escribir ( ' Tiene tres '
I n -
r,
' ' 1
..
'íYIIVí'MJ
^
v ú
- Vv &
•) >

si _ no
*
Vn’ / iuyj iyyv >
escribir ( 'Tiene mas de tres ' ) ,8 < V -
-• 1
7
*

«•
fin _ segun »1 ¡ , . ? , •

toq .
nj ifi) n32!¥iqvt en 3 tf a ,M ,D ,a
_. ^cmab tsiotavtabzainvhftí
Ejemplo 4.15
, >
^ qiq

, . oa 3
' '

* desea Por teclado un número comprendido entre l m r „


numero es par o impar. '

( inclusive ) y se desea visualizar si el
^ o jn - j

Scanned with CamScanner


Introducción a la programación estructurada 117

6 , 8 , 10 , escnbirun mensaje de ' par


., J
^ ’
;
' '
1
• • , . . 'i >noiJnoD .
[ «cut) i&í Uiüot/ío üí (TOfnl/n al> iu?.il cnuTBffiu?
¡ algoritmo
l ¡ PAR _IMPAR ^! £ J » >u v - v \\< y\
cruín si /u - ' > . ; • Utiin tv < •
.

n
1 ; )

, var entero: numero ¡*.. * * * > ,i * í iiii is •


i
r
< st * i* t i * r - pv > •ip / fiMp c> f.
l!
V inicio
' ’ '
, 1 '

! v ';
te ohfiutu lü IBJ í Cííí O/ ob

) * 1 ¿inufi
'
, .
"J : L -
'

leer( numero ) l íílSÜP ' > r dldchcv cnu UüíU.¿ttnoi'


jfnatt 9b /ran ún h ifiJtKrj e'

/1 « CMtí íí lf
* - si (numero > -1) y (numero
- <= • 10 ) entonces > ! > '

'

CUfl ünO’j .
J O •
.» ,, r , n

-

según sea numero hacer


-> TATGT Itllaud l b XJTSUD Ü1 Z&1TI fK)ít>JÍi fcftU abfcñ
^< « (
: v mil/! >
11: 1:

«» »
fin_ segun * <* » «* >
*
fin
. si
fin . ‘ 1
JATOT n .) \*
^ f * ••*
U . >1 %
•"> J -*W I. 1 .. I ,. s
ñ i\
oiotnt
v r i
*
!’|
i •

4.6. ESTRUCTURAS REPETITIVAS i


r, .
i< >tiros d L : ? ; , nari •

c •
i o D o -ni ' A . C: L z z s r i ' i n i

Las computadoras están especialmente diseñadas para todas aquellas aplicaciones en las cuales una
operación o conjunto de ellas deben repetirse muchas veces. Un tipo muy importante de estructura
es el algoritmo necesario para repetir una o varias acciones un número determinado de veces. Un
programa que lee una lista de números puede repetir la misma secuencia de mensajes al usuario e
instrucciones de lectura hasta que se lean todos los números de un fichero.
Las estructuras
. . .. . , que repiten una secuencia de instrucciones un número determinado de veces se
í atrtUpi Ü i Oiií Wfü u rjllifnu . , IL ÍF ím tltLl íil rj íM J ü O r.
iteraci ó n ^al hecho de repetir la ejecución de una secuencia de acciones.
• »
denominan bucles , y se llama
* i

Un ejemplo aclarará la cuestión . mvi cw ’ Vi r *; A *


Supongamos que se desea sumar una lista de números escritos desde teclado — por ejemplo, cali-
ficaciones de los alumnos de una clase— . El medio conocido hasta ahora es leer los números y aña-
dir sus valores a una variable SUMA que contenga las sucesivas sumas parciales. La variable SUMA
se hace igual a cero y a continuación se incrementa en el valor del número cada vez que uno de ellos
se lea . El algoritmo que resuelve este problema es: .. 0¿ni
* •- . .
I
il \ >» xuv OD . f i \ •
i • t.

a l g o r i t m o Suma zl
var id * k
. • ?i - í ‘ ’ i ^ i < 4v
rp ; i. ¡o• ».
*.v* íl . * -
. *
-
entero : suma , numero ;o . 3 i : iic:* ni c . t zi í
inicio * ." J

SUMA 0
leer ( numero ) . . ..


. .. . . .
-
Jui / SUMA <r SUMA* numer ó ; íl '• lOmlHfi OtfilíílOl b H3 fiOlüfll Rui R¿ 5u nOlOÍIXlOV A Mlpílü A
A

leer numero
( ) Ábsuy> u\ uup luf ínofl ol # 1 ^!n % í n / > 0 ", r / UJ nOfldilflOQ &l U& W|) op . trjíisi
,,
.

,.
v

-
< ‘ + n\m e oU : ( j n i ; r j j: u ; ú J j rjiJ ü3T] runabtttlO 3 ! ltt
* ^ > ? -
V ú» o\<VOIÚ\V\ - <
in^^ si Ll (i¿ : víu iinov . í W ú J Í: < O í S,: i '-

repite muchas veces


iniuroujii ¿
c! u TJ&¡ cnu ttlttttK - -
-
XA 14 J i
» /V

:V
así sucesivamente para cada numero de la lista. En otras palabras, el algoritmo
, í ¡w ) i* * -
las acciones. .

»
l e e r ( numero ) * i* *

SUMA *- SUMA numero .? ^ T íí 'l , >!cri . J *. vv l » Ad - i \) \


)
+ * #WI • ' *

^ » - « VLU' T *

Scanned with CamScanner


118 Fundamentos de programación rjrj - .
ilK Í'- V. •. * t

“ “crsíETíC conocer
TJ:ííSZL,
de sumar. Para ello necesitaremos ^
algún medio para detener el bucle. En el ejemplo_ sigm te
usaremos la técnica de solicitar al usuario el número que desea, por ejemplo
mientos para contar el número de iteraciones, usar una variable TOTAL
, N. Existen dos prccedt-
que se metaliza a la cantidad de .
números que se desea y a continuación se decrementa en uno cada vez
cedimiento añade una acción más al cueipo del bucle: TOTAL <- TOTAL - 1
que el bucle se repite (este pro-
), o bien imc al zar la vana-
numero deseado.
..
ble TOTAL en 0 o en 1, e ir incrementando en uno a cada iteración hasta llegar al
algoritmo
_
Suma numero
> •
i ff : i
i.a nil
var nn
entero: N, TOTAL
- - : NUMERO, SUMA
real
inicio
leer( N )
TOTAL f- N
SUMA <- 0 aAVITST3c!3R £ ARUT0 UnT33 .B .b
u
\ leer

mientras TOTAL > 0 hacer
“ ( NUMERO ) ; jfiq ü r i II > fips esbof isiiiq f i A A A i : \ b aifrcmfiMOdq ) tt&U S t i lObt
SUMA <- SUMA + NUMERO

TOTAL < TOTAL - 1 Bftofi íí i MH 1 DCJ 31 fltrf
'
, , ¿ ..
í lüqOIOO 2BJ
fill ü Ot íí UjOOO O ílOiOClíKJO
^ *
lU lti / O LflIJ ip í in rj < jhl¿*3:j3f( OfflIriO Ifi
'
te
’ f in_mientras 23
^ ^
1

escribir ( ’ La . suma de los < . , N , V, números es ' , SUMA ) f f i ú A *;) 2 Í l BflU üp B íflBigOiq
fin f *J ; ¿ ” J í Li
^
' #
‘ * ¡ i ''
Oí ^ l í^r n i ' ? f * ; ;f » j !k, J
01 i p UJ ? »f • ' ’> * Ul; !
« !

El bucle *podrá también haberse terminado poniendo cualquiera de estas condiciones:


, no «
^ . "1 > r. KIMI
1r
a Jü ni <
i> onjod ¡ I : tvi \ i M I • » , km nanimon u
• hastajque TOTAL sea cero - ' xtcivvohptt :* • 1 1
-r • • desde 1 hasta N - "" rvr,r» i :;u ! > ’ :. MU ti. nti .'
* r . J '. ¡ i ;t ( ii«
-i • ' rí:
i 1 jf i • í .
Para detener la ejecución de los bucles se utiliza una ^1;!ónt.i:deu abparada
condici
;
't íjfíiiiii <(> 3b «’omiij.rjn
:! i¡

. El pseudocódigo de
— - . .i '

una estructura repetitiva tendrá siempre- este formato: ,


bfiuniinoD v ow fi Isugi >BII V. „
inicio v , ! if ’ M > ‘ vbu /.oi otni
"
*
ocilh dr» LI X ‘J
'
J
-.
//inicializacion de variables
repetir
acciones SI, S2, ...
salir según condición
acciones Sn, Sn + 1, ...
fin_repetir
- ‘
iv u :'

oiolnl

^
IeneuaTefau nfcn0
! ^ “ nd¡ “ el
1
“ ««¡or » el interior del bucle -y existen
Í Ca
,a condición se <%* final o al
f TOl

pri
g
^ o del bucle asUelmT " "
generaless y una
iterar
mientras
aue llld
V
particular
que denonunaremos
b
n mai 58 16

iterar que contiene la salida en el


( loop )
( while ) t/
16
'" “o' iterativas
" “ P° de mstrucclones estructuras repetitivas
interior del bucle
uli.í . ;

Sa

i
0

,
eS qUe
0
'

repetir ( repeat )
. KJC' Í I ui ‘it » i :» friiiri i:L»íi i ciftti) 'tJlnoru í. / jr > > i -
*
. ' . 7
desde I para ( for )
vonob jC '
- 11
i
Modula-2 y QuickBASIC/QBasic, entre . .•
otros. i
z
- - >\
'• J
i

Scanned with CamScanner


Introducción a la programación estructurada 119

El algoritmo de suma anterior podr


ía expresarse en pseudocódigo estándar: ó ,. .,
algoritmo SUMA _ numeros
var r t .

entero : N /•. TOTAL * * . <


, • •> »
real : NUMERO , SUMA
v •> * . • , f . » *Vv
" I
i

I inicio V
•< :. í t i 3 !T ¿ i í; ti I
leer ( N ) I

TOTAL 4 N - oa
r- . i'. » : 1 i
SUMA 4- 0
i
repetir
leer ( NUMERO )
SUMA 4 SUMA + NUMERO - .c
« I
I
í
f
TOTAL 4- TOTAL
_
hasta que TOTAL = 0
- 1
aoaoiD'jQ
*
*
i

1
I
escribir ( VLa . s üma es * ', * SUMA ) ¿* \ *
I

I
fin
ot .c i r .: ©.CJ ífw
;
-
Los tres casos generales de estructuras repetitivas dependen de la situación y modo de la con-
( w
1 J

dición. La condición se eval úa tan pronto se encuentra en el algoritmo y su resultado producirá los
tres tipos de estructuras citadas. r as

1. La condición de salida del bucle se realiza al principio del bucle (estructura


——
mientras
t

).
n - . bi d £ i;iWo£> i • I *

algoritmo SUMA1
asno i o o ñ
inicio
i Cite i J; *

/ / Inicializar K , S a cero 1

K 4- 0 eL ÜuTO

(
S 4 0
Ieer ( n )
— j .•

.. j
mientras K < n hacer
t ;ojuf í ©to emsiQBib ( st :
K ( 4r? ’ Kj + - luéaq ( í t'á luí:
ó *
. IT '•

s 4 s + K
fin mientras
_- . f í - l/* crn ? iiRB ? to í o

escribir ( S )
f 9 dimito y/ > mjí oJ ir í wob o 0 £ iiíw 2 ‘> bni ir;
j txr / i

.
> - gmja JüJSO 1
- Wns/ wí DUfiJ . nói'jibcov tbcninrottb MUI s> iq«Tt/? «. ¿fciinaim sbud !: ¡J oqiout» i o up
Se ejecuta el bucle mientras se verifica una condición ( K < r i ), . J; j ; ? r , ,, ¿5noio

2. La
,
U)
condición de salida se origina al final del bucle;vel bucle se ejecuta fhasta que se verifica
: í f f jíf i t , ; j r j/ ' vJflI íl , V .~ U > \
• • i ‘ l l O O O V )l ¿ Híf U ) • * flD
' ¿ * • *
una cierta condici ó n . ifn ;, , iv M
,
.
,
j j x.;. . ?
, ¿: , - ¡ : A ' , . , tn < r 10 « M I «4 «
*
, - •
; . , ; r/

j wiiyAuon • i iu . iiu
« 1
* IJ ü noujtfiJi ' uigi *
< ir *

-
.

*íun ob éiiW o, Lu' j o! ¿ ib .olMó bl> qmso


% ; repetir í
. i molW ' íl ói¡ 9 iqxs « i < / uq '
?
K <- K + 1 irrtliídiisv isa? ( f!< Éíf irt í&rf ís iep/j s! w *Uo % nnu O í -
S < S + K -
hasta que K > n _ s> r . »
3. La condició, n de salida se realiza con un contador que cuenta el n úmero de iteraciones.
.
•i F ., f tf v . ¡ '.
% . . ’ > i T* rjum i\\\ . )
'
V> » > # * )
.v '
4

desde i '= .vi hasta vi hacer ,


^\ y Á i * 1 í (
; ¿ ilr .vn Í HM! H

fin desde
_
s 4- s + i m im nu A / ;« . • •
• / w hli u
^ /

.
* " 1 " » * 1
^ 1 1 'í 4 1

i es un contador que cuenta desde el valor inicial ( v i ) hasta el valor final ( v f ) con los
incrementos que se consideren.

Scanned with CamScanner


ón
120 Fundamentos de programaci

ura mientr as (" while ")


4.6.1. Estruct .
- .. / j . : o r 1 i 'i O O I *•
1f v
i

Pseudocódigo en castellano 4

m i e n t r a s condici
n ó hacer i i « fj# .r

no acci ón SI
condición acci ón S2 f

la '-'i

si
, ..
. . t'

acci ón Sn * »«
_
f i n m i e n t r ais _ .
iH '
ij < ’i * 4
^ 1 /'
*
*

acciones 0 * JATO? e?rp


Pseudocódigo en inglés Til
. .
while condici ón do
WI1 JL iC
/

v
c.Mt
_
< acciones>¿.au AIXJf
? sb zóunsnog o?.uo
' ¿
: nsbnoq b iliísqoi « í
finiiluirt z
ni . > BUIí* : ob Zfi /
^ oíncnq nal cútevs M nóforbnoo¡ BJ n /01
* / lí ) J t í sfa ofaom / . ótoii
; U¡í { omí hoglB b ns fiittwirare
> O Í ¿i n endwhi1e , ,;i; ;)i'> zmUtOUVZO * b sOqil
o bien . .. .. . r
mientras condici ón • inq |n í jsihaOi CJ ? ' fowl hb L\> í I
.
sb nombnoj uJ .1
( BB 71 T i J :’ »I
dowhile condici ón
< acciones> i\
t
/ V.\ :
acciones o 2 r.li i
.J í T. KZ c
• TP. xoinJW
enddo 3 a
c)
. -
>

Figura 4.11. Estructura mientras: a ) diagrama de flujo; b) pseudoc ó


digo;
c ) diagrama N-S .
ucizr* ii *v . . nil
i
- •- *
La estructura repetitiva mientras (en inglés while o dowhile : hacer mientras ) es aqu élla en
*

que el cuerpo del bucle se repite mientras se cumple una determinada condició n. Las representa -
. ¡ inoibnou r. nn noitn^/ o«t cii í rmn oloua it> uluoois *
,/ , . • ¿ 9
ciones graneas son las anteriores
Cuando se ejecuta la instrucción mientras, la primera cosa que sucede es que se eval ú a la con -
dicion (una expresión booleana ). Si se eval ú a falsa , ninguna acci ó n se toma y el programa prosigue
en la siguiente instrucci ón del bucle. Si la expresi ó n booleana es verdadera, entonces se ejecuta el
cuerpo del bucle, después de lo cual se eval ú a de nuevo la expresión booleana. Este proceso se repi -
te una y otra vez mientras la expresi ón booleana (condición ) sea verdadera.
- #

Ejemplo 4.16
• !
?’.• u ' > * 'i!;:-;. / í \
'
. • •
1* < • *

Contar los números enteros positivos introducidos por teclado . Se consideran dos variables enteras
NUMERO y CONTADOR ( contará el n úmero de enteros positivos ). Se supone que se leen números
positivos y se detiene el bucle cuando se lee un número negativo o cero.
algoritmo
_
Cuenta enteros
Jlt Í

var ’ » b»nn vd • iMsimnoUv b aheab «inou' 'jup i< ¿ tu;ir!wv n>¡ i.


j

entero: numero, contador .nuiobvnn )r. • Jifp . uj'r rrr n „r,i


* • .

Scanned with CamScanner


Introducció n a la programación estructurada 121

¡v : vA
10 inicio .
!

contador 4- 0
;Vi
- •

^ v: *. •
' , •; p '
on

leer(numero)
i» \\ M i"Vi - •f * r* / • i

mientras numero > 0 hacer O } *? ? A i

contador 4 contador + 1 — - '


» •
- •

leer (numero)
fin mientras
_ rl
escribir { ' El numero de enteros positivos es , contador) 1
< r : * -y Í
fin
-
íí si lar.n i l
í. 1 i
inicio
¡ r. v ]. ; r: o!qmop i - j .ai
* *-
f
¡
.
:i ! v
> ¡{M K’ .* > • F

ii - i M i í;i> *:»'» ir> J • •



• contador fe 0 3 « ;< H hóbytfd *1 . > í .< Í £ U : o í loq u r.
r r h. . r;
l e e r numero
i I .*
1'*
. .
. w. V > JV. wuAuT > n n ' » '• ' )Vm ú ,Ai -,í Vttv,ir. R
mientras numero > 0 .
ATVY 1 cmu VA A ?/ > ' Vun \ y «

V
contador 4 contador
l e e r numero — + 1

enr n ^ i /H
escribir ( ' números enteros ' , contador)
< i' > ~ J í7 KJ
:
i
o ^ c
j; f» i.
i . - : r lenl
4 •
i fin % r,l 2¡:o } rt ¿ u ? .

La secuencia de las acciones de este algoritmo se puede reflejar en el siguiente pseudocódigo:


" -* •
.
.
> .* * . - •
; u' • • •
. 7 '
v \ ^ : •
,
'
*

Paso Pseudocódigo ~
Significado
; ~
V ,7
y
* ./ ; 7/ . ¿V r7
' '
• -
>
^
'
? ^

- - »

. .
.

• . . •• * y" . . .. .. . ' I*. • ~ ’ ’• !



- * «I -- % i

— •
contadora 0 ^
• • • f f /N

icializcir
contador ^" ^
4

i leer primer número t : :


0 on dbud í lli ¿ Düofcsuo
.

C'ínun v - p
, g{ sjqrnifd 33 \

Ü
^ ¿
i

f
2 í: ^ ' leer ( numero )
nqrt
°*
uuio oadab n6 » .>
* Eicq buyorj no ¿ eobaaok> n 3tni
ioia ’

•'

-. 3 ? ndentras numero 0 ,hacern ¡


• fe. ‘.comprobar sip úmero > 0 , . bi?no o' .3
.
^
í fi 313
^
- ,
, • - - ,/ ) i 1 w í ~ • • •' * < * i i • » / w "* * '

y. . . 5ci/
vM

continuar
7 C 7 rrmtiminr con
rnn el
» - iit I if
paso
P! nnsn
,,*
4
4
;, »
ci no
si
-w v r- con
continuar
nn , rnntinun
¿ l
/ «
. ?

e]/ npaso 7
/3 7
/i r n
/
i • ; .• t •
/
- '

-- ‘
« fr •,
iqt >
4 . contador <- contador + 1 incrementar contador
í
'
*
:.•
. 0X - 7 :t j¡»“ A::<) i fi?
tiaT y .
5 leer ( numero ) leer siguiente número Q * , .. - > .
- i
: . / ll dito a*
fin_mientras
- - y .f '

6 seguir con el paso 3 i


\ •• r >. ¿ y > r r. r f

-
visualizar resultados '. « sinoi » t i :.
7 escribir ( contador )
-. : *

Obsérvese que los pasos 3 a 6 se ejecutará n mientras los n ú meros de entrada sean positivos.
falso y se
Cuando se lea -15 (despu és de 4 pasos), la expresión numero > 0 produce un' resultado
transfiere el control a la acci ó n escribir y el valor del contador será 4.
5
, :
P °" -, f

.»1 *

¡.
Ejecución de un bucle cero veces < , . i ¡ :: ¿ t .í u . ;
^ ; IHí •• -.
J

-- , . ; . ' . ninn íi » outi < 1 JIóI IQX J ’ criinilftjuiVKw sljud 13 J\.A i '.
'

Obsé rvese que en una estructura mientras la *primera cosa que sucede es la evaluación de la
• f -
expresi ón booleana ; si se eval ú a falsa en ese punto, entonces el cuerpo del bucle nunca se ejecuta.

Scanned with CamScanner


122 Fundamentos de programaci

o salida. Sin embargo, a veces


inicio
n <- 50
S <r -
mientras n < = 4 hacer
leer( x)
-
s « s + x
fin_mientras
ón

cuerpo del bucle .


Puede parecer MUI ejecutar e es la acción deseada.

cero

— ya « P*

ÍA
tendrá efecto en

y i ;í
ningún valor

' **
,
. '1
jll *

.
*
.
'

í
1
- I

¿ ti

= „„minea se cumplirá la condición (expresión booleana


fin
,
aCCÍÓ dd b“ Cle
PS"" "
^ fin “ 56 ejeCU ará nÍngUna
'

n< ^
Ejemplo 4.17
o cero.
, iV -

negativo
-

no se ejecutará si el primer número leído es


El siguiente
C <- 0
bucle

leer(numero)
:>
— f

", • , 'Í Oví i.

mientras numero 0 hacer


C <r- C + 1
>
rJ J
- xi )
-
leer(numero) nif¿
fin_mientras

Bucles infinitos 'noTni'jfbi slwuq ^ orninogln vii'a sb unob j ¿el 3b ebtmrí»*


: ! '

Algunos bucles no exigen fin y otros no encuentran el fin por error en su diseño. Por ejemplo, un sis-
tema de reservas de líneas aéreas puede repetir un bucle que permita al usuario añadir o borrar reser-
vas. El programa y el bucle corren siempre, o al menos hasta que la computadora se apaga. En otras
ocasiones un bucle no se termina nunca porque nunca se cumple la condición.
Un bucle que nunca se termina se denomina bucle infinito o sin fin. Los bucles sin fin no
intencionados son perjudiciales para la programación y se deben evitar siempre.
Consideremos el siguiente bucle que visualiza el interés producido por un capital a las tasas de
interés comprendidas en el rango desde 10 a 20 por 100.
s*
2eer(capital)
tasa 10 ) * \ ¡; u -> iCO.C [
mientras tasa o 20 hacer Ib

interes <- tasa * 0.01 * capital Y j * í * [


... ( interes producido
escribir
-- // tasa * capital/100 tasa * 0.01 * capital
tasa
1

tasa + 2
' , Ínteres)
- b'xynBi íí n.. i ()
fin_mientras «
escribir(' continuación ’ )
Los sucesivos valores de la tasa ser ,
án 10 12 14 16 is on A* rao AoquMtomar
^ elvalor
P
19, 22, ..). El buclere Mnitt
¡ jntasa < 20
*
. obien--
ODten
la
tasa >« 20
^ J
P
^
te terminar al bucle ser#
0 J,
á:
13' 16’
JP ^ • * - "J
nó i ü ffiq / *
*** (

Scanned with CamScanner


i
t

Introducción a la programación estructurada 123

Regla práctica: Las pruebas o tests en las expresiones booleanas es conveniente que sean
mayor o menor que en lugar de pruebas de igualdad o desigualdad. En el caso de la codificación en
un lenguaje de programación, esta regla debe seguirse í rgidamente en el caso de comparación de
números reales , ya que como esos valores se almacenan en cantidades aproximadas las compara-
ciones de igualdad de valores reales normalmente plantean problemas. Siempre que realice compa
raciones de n ú meros reales, use las relaciones < , < = , > o > .
-
= nv . , i ,
O'tob 01'ií
_ .
ü'í l J i ,i
,
1 , 11 H Í >

Terminación de bucles con datos de entrada TO Í»



¡ \ \¡s V

i. *
-
i: .
J: "
; JU II '!( '! \b fv!» ; ! , *)V) - ni . ‘ i! .eii

'

i >i , i ; , ! . ' ¡ ¡

,

* ' •

lU Í / lX ÍJO! l ' • ¡ M 1 IMwjHI


» ‘ VV. ) 1.1 r , ; ;
r \ * ¡i •
»•
*

Si su algoritmo o programa está leyendo una lista de valores con un bucle mientr ,
as se debe
incluir algú n tipo de mecanismo para terminar el bucle. Existen cuatro métodos típicos para tenr
íi-
narun bucle de entrada: • ' 1 - or> ' :
° °
'


*

1. preguntar antes de la iteración,


2. encabezar la lista de datos con su tamaño,

^
~ .. . 5 * - *'5 • > W
3. finaliza

^ WQ • n \ » \ ’ » %*
'
0 * * i 11 / ) . 1‘ » (. i' . • ¿
r la lista con su valor de entrada, ’ I > > ‘ >

4. agotar los datos de entrada.


¿ 3 * T 3raim
Examinémoslos por orden. / i i ? ¿i. tinas *

El primer método simplemente solicita con un mensaje al usuario si existeni m* á


s entradas.
lab 'síima ó • ' JQU'jajja i bca ab oíqionrrq Is \ loilnoa ab aldansv ¿, i *•[ . wlav tu M si. . N > j

escribir( ‘ Existen mas números en, la listalisYn' '


leer( Resp) / /variab ' J j/ l?l V -U .K ,C J .0
le Resp, tipo carácter
mientras(Resp = 'S ’.) o (Resp = ’ s ' ) hacer ' •
* . .1
escribir( ’numero ‘ )
• , 13a pan ; laiJ/'Olr:
leer( N ) *
* :
—> i

Suma < Suma + N
escribir( ' Existen mas números ( s/n) ' )
4
.)i i <\
ei r.
¿ iro
leer(Resp) .
Wf í n_mientras *
3Í:>Ud hb OCpüfiO 13 ó / C J .
f
-
,£ , I 2 íl ) fcuw abltfi* fij
id ; ; ( rahtibwv pfi /zdlood no katq j ü l
1

# i ftbnftuaaup
r
Este método a veces es aceptable y es muy ú til en ciertas ocasiones, pero suele ser
tedioso para
listas grandes; en este caso, es preferible incluir una se ñal de parada. 1 : {' in*
El método de conocer en la cabecera del bucle el tamaño o el n ú mero de iteracio
nes ya ha sido
visto en ejemplos anteriores. r . t v!qn13 [ íi
Tal vez el método más correcto para terminar un bucle que lee una lista de valores -es
tinela. Un valor centinela es un valor especial usado para indicar el final de con un cen-
una lista de datos. Por
ejemplo, supongamos que se tienen unas calificaciones de unos tests (cada
da entre 0 y 100); un valor centinela en esta lista puede ser -999, ya que
calific ación comprendi-
válida y cuando aparezca este valor se terminará el bucle. Si la nunca será una calificación
lista de datos son n ú meros positivos,
un valor centinela puede ser un nú mero negativo que indique el final de la
lista. El siguiente ejemplo
realiza la suma de todos los n ú meros positivos introducidos desde el
terminal. .
surrta 0 -»
leer(numero)
mientras numero > «= 0 hacer 1ST? '
,

^

suma < suma numero
leer(numero)
iV í finvlm n i

f in__mi entras
41 L i

Scanned with CamScanner


124 Fundamentos de programación

negativo, ya que se
Obsérvese que el último número leído de la lista no se añade a la suma si es , e usuario
sale fuera del bucle. Si se desea sumar los números 1, 2 , 3 , 4 y 5 con el buc e anterior
debe introducir, por ejemplo:
i <

1 2 3 4 5 -1 - r • ‘ f' I
r
ir* l ' » ! JT
un valor cen-
el valor final -1 se lee, pero no se añade a la suma. Nótese también que cuando se usa
centinela , este debe
tinela se invierte el orden de las instrucciones de lectura y suma con un valor
leerse al final del bucle, por lo que se debe poner la instrucción leer al final del mismo ,
. . ,
Yj
El último método de agotamiento de datos de entrada es comprobar simplemente que no existen
más datos de entrada. Este sistema suele depender del tipo de lenguaje; por ejemplo, Pascal puede
detectar el final de una línea; en los archivos secuenciales se puede detectar el fin físico de archivo
. wu > . > *jh
: t.u ;
( eof , end of file ). ra '

Ejemplo 4.18
‘ .J •, _ .! ob >* ; ; r:: . r . inugoiq . ! .
r
Considerar los siguientes algoritmos. ¿ Qué visualizará y cuántas veces
- . se ejecuta C
el bucle ? 7
- , r f
1 T f * » ’ r>

Xbof . no ot ) 10! 7 M . no: ¡. . * •

1 i 0
* hbnmi - rJj < . > !.:» / v\ .! j • •

mientras i < 6 hacer


escribir { i ) . ,

} nsí no í oq ^ > í ?orrK> ni í nk / d f


.
i i i
finjaientras
+
- * • 3 j y. tl
-' 'jm Í IU rtOJ I ) bil 02 9Jn3moIqfnt ? oboftfTl 1'JfU Í IO IH '

La salida es el valor de la variable de control i al principio de cada ejecución del cuerpo del
bucle: 0, 1 , 2, 3 , 4 y 5 . El bucle se ejecuta seis veces. -o
- •

-• -* > A K i‘ ' ' ~ >'
*
i* 9
** *J* ‘r
2. i «— o ni c e "
’ 3£ rr :
mientras i < 6 hacer
i
*
)i i 'í : « v
i <r i + 1 - • 3i
escribir( i ) V i r
f in__mientras I * .
)
;1;
> > , .« • • j <

La salida será entonces 1 , 2, 3 , 4, 5 y 6. El cuerpo del bucle se ejecuta también seis veces. C>

Obsérvese que cuando i = 5 , la expresi ón booleana es verdadera y el cuerpo del bucle se


ejecuta; con i = 6 la sentencia escribir se ejecuta, pero a continuació
n se evalúa la expre-
sión booleana y se termina el bucle. , ¡0| , i drjnotoq » c m; v í:. ,
''I 7
1
r « ¡i i #
*
• ,,
* . . ., f .;
> í i
bl,d
i t i
.

Ejemplo 4.19
)
‘ ^ aboboí
^ n 13oJ i
fn

Calcular la media de un conjunto de notas de alumnos.


detecte el fin del bucle . v
Pondremos un valor centinela de -99 aue
xaior centinela
^ que
olqai *)
^ ,
? 5* /

. .i . . .
inicio .b >JHIU fivnaii
^ aup aorniignoquz
'
oíqrnats *
.
total < o “ - '
’ ) no chnimeo

iota nu ; (00 l ¿ Oeilfrcsb
r
'

n
- 0 / / numero de alumnos
leerlnota
)

¡‘ " ' * 7 O BVXtryjfjf
/ / la primera nota debe ser
; pbniiU‘7 / ' : 7 '

distinta de - 99
'

!v “ :'\ > ÍL
*

. <V >
Z n «* •
*

1
: «« »<
"
media
n

escribir
1
leer ( nota )
f injmientras
4
n +

- [ total / n
L»a media es 1
, media )
>.
*
** •
0
» .
*

.
IT .
c ~
il
.

fin ni tttoi-

Scanned with CamScanner


Introducción a la programación estructurada 125

Obsérvese que t o t a l , n y m e d i a se inicializan a cero antes de la instrucción mientras.


Cuando el bucle termina, la variable t o t a l contiene la suma de todas las notas y, por consiguien-
te t o t a l / n , siendo n el nú mero de alumnos, será la media de la clase.

\
4.6.2. Estructura repetir ("repeat ") -.u\ um
iW ) » *\. vy\ v y

i
Existen- muchas situaciones en las que se desea que un bucle se ejecute al menos una vez antes de
comprobar la condición de repetición. En la estructura mientras si el valor de la expresió n boo-
leana es inicialmente falso, el cuerpo del bucle no se ejecutará; por ello, se necesitan otros tipos de
estructuras repetitivas. - 1 llC \ . ií
I >
*
•.

“» rv

Pseudocódigo
repetir repeat do until < condicion>
<acciones> < acciones > < acciones>

i hasta _que < condicion> until < condicion> end do


a ) castellano b) inglés r r c ) inglés
I

.
Diagrama de flujo
i i b i
Diagrama N S - OLp

; y
acciones
acciones uLii(Í í .:b iqioi / t- ^r » rr
>' >
.
bnr;i0 S/ *
?

r. o * i 3r,
i íí I ?
• rep
repetir condiciones o? > au
:> . r dLlVjffV'
.' Ir , i - ' í l j' i i, i tlit huAii' V ¡
r¿
Uu > u!oo : i .it *
fjmi
.‘ ¡ : <r" condici ón
falsa ; fUJ íU » Si; / í; íJfr; .* ! r • ¿O . •' /1 '[ / O . / \} ) { ({ c
i Vv ‘ ”4 i
? ’
J 't J

-.
i

^
' lo I !í . /
u oort
t; ¿ ;'j! u«.t , • [ / i' 11
*
J íJ’ J
verdadera t ?i jrj'jtrJstn tiu .. i' * *

Figura 4.12. Estructura repetir: pseudoc ódigo, diagrama de flujo, diagrama N-S.
Sfr . .*


|* 4
F *'
; .
.

¿himno! IUO:MJ
bibri :
> * < . f íhma í
La estructura se ejecuta hasta
repetir ( repeat ) que se cumpla una condición determinada
que se comprueba al final del bucle.
'

i * ro ..
It El bucle repetir hasta que se repite - mientras el valor de _
la expresió n booleana de la con -
dición sea /a /.«z, justo la opuesta de la sentencia mientras. , (

algoritmo Repetir - * . . i ' í orj st toiupicn . «¡i *:d - •

var
real: numero fS t» ciqf* » oj3
entero: contador
inicio t - • • '
\\ m .
• 1 a\ n ! tui •
w/ ro*\ ivnVujüq
contador <
repetir
—1 » v. \ > \ \ ; yj> \
leer(numero)

hasta _ que contador > 30



contador < contador + 1 i

escribir( ' Números leídos 30') .


fin ' a

Scanned with CamScanner


126 Fundamentos de programación

la variable contador exceda


bucle se repite hasta que el valor de
En el ejemplo anterior, el
cuerpo del bucle.
lo que sucederá después de 30 ejecuciones del

Ejemplo 4.20
factorial de un número N que responda a lafór
Desarrollar el algoritmo necesario para calcular el
muía: i | j ,| • * ' « | . i i
\ : í U H' jl 'tix ;
\ ' ¡¿ Í
) •

'
+• * <
- - - - ... - -
N! =i N ( N I ) ( N- 2 ), ^ ,*3 2. 1
; #
1 . • ^
» 77 % * A . ••
. JU
( » í MTl >
' t
J wi I

.0 vi t
'
i • r {
^oinrni

viii .. >
/n

El algori tmo correspondiente es:


() fl
¡í jiVJl . '! )

algoritmo Factorial
var
entero: I, N
real: Factorial
inicio i. ¿ J ? r. oc3 : i

= 0
//N >
ieer( N)
Factorial 4-1
14 1 - t. í iJ íTI/ > '
; ; » > » LTp. slunrí
repetir
ólrmi nnciluidi / j { v)
Factorial - 4 '
Factorial * I
I 4 I + - 1
hasta _que I = N + 1
escribir é El factorial
*
V/ '
del numero ’ , N,
- *

'es' , Factorial)
u \yA\ ftmivtftMU
» i
fin
j i í I r x ; i - ‘

Con una estructura repetir el cuerpo del bucle se ejecuta siempre al menos una vez . Cuando
una instrucción repetir se ejecuta, lo primero que sucede es la ejecución del bucle y, a con -
tinuació n , se eval ú a la expresi ó n booleana resultante de la condici ó n . Si se eval ú a como falsa, el
cuerpo del bucle se repite y la expresi ón booleana se eval ú a una vez. Despu és de cada iteración del
cuerpo del bucle, la expresión booleana se eval ú a; si es verdadera, el bucle termina y el programa
sigue en la siguiente instrucci ó n a hasta_ que.
-
%

- - . ílü dfii d
Diferencias de las estructuras mientras y repetir !
c
' íf ; ,‘F,

• La estructura mientras termina cuando la condición es falsa, mientras que repetir ter-
mina cuando la condici ó n es verdadera. U saqeij i. I deqei m /tomfc *

• En la estructura repetir el cuerpo del bucle se ejecuta siempre


al menos una vez; por el
contrario, mientras es mas general y permite la posibilidad
Tara ,
de que el bucle pueda no ser
,
-bat
USar eStrUC Ura rePetlr debe es ar
bajo en
cualquier circunstancia- se repetir
á al menos una *vez.
8 < "él cuerpo del bucle * “ Mue
Ejemplo 4.21
' [ <1 »
* r
- ‘ CTL1Í t ' »V Í'

• , * /. # .

,
^ rt • i t

fjmlqm íílítT
i •

0 P05iliv ° may0 r (" um ) pam el cual h mma + 2+3+


- + num es menor o
1. Introducir limite.
2. Inícializar num y . i
‘i

suma a 0.
3. Repecir las acciones
siguientes hasta que > •

• incrementar num en 1 , suma > limite : r> * r; '


• añadir num a suma . • lidian
*

Scanned with CamScanner


Introducción a la programación estructurada 127

4. Restar num a suma y decrementar num


en 1\ \
5. Visualizar num y suma. K -
.
'
nrwi •
::3 . t- . o . -f
4

El pseudocódigo de este algoritmo es: i >

_
algoritmo Mas pequeño
- '
’¡‘JfHtJn I .: • , ' U'ib
, r.
var '
kb . .
- i

, i . . entero; num, limite, suma


'
!‘ - M •
bb t'mú yjfi efíl iu - j
inicio "'i lo '
IJK o! .'• ••

leer(limite)
num 0
‘ i r
_» {


- ! , Í If ,¡ J • ;; f
suma 0
crepetir
• t - V 15 J ílftíf ’ *• <
— k
i. mn ’ ojirjns ' ruu í r» f •

-
.

* 2!num <
° —— num +. 1i
suma < suma + num
¡ - 4
. ; oJneirt 'todb
c
hasta _que suma > limite

suma < suma - num

num < num - 1
escribir(num , suma) ni *
i
fin I
* , b 1 «, - , t

Ejemplo 4.22 \ ib
1
Escribir los números 1 a 100. o ¿ '2::» b tnv. omV*! ,*VV . tuntrui íñU
'
-
algoritmo Uno cien __ LJUí i r.J 'r,;í ;v

J 5 f; i
var V
1

num: entero
inicio
eh^ sL i ll ?

'

num < 1 i
/» Tí v f
repetir
<
y « >v >w > m u‘¿ ^
escribir(num ) ^ **^ .
, /1 .
— ...
— .


num < num + 1
hasta _que num = 101
V!
i *
J ’ r
s & ü Sb siUiv n-. - fi > -> n\iá \ A> iivr wv s A \
'

fin
r mlu .Mso
Ifiioin : IU!BV
. . <

Ejemplo 4.23 ir - m íVHIRV V


£s muy frecuente tener que realizar validació n de entrada de datos en la mayor
í a de las aplicacio-
nes. Este ejemplo detecta cualquier entrada comprendida entre 1 y 12, rechazando las restantes, ya
que se trata de leer los números correspondientes a los meses del año.
algoritmo Validar mes __
var
entero: mes O ’» '. IV /
- ó ICí KJUSV
"*
'

» r * tr , v •
o'i íí > nl
inicio
. ?{ i
escribir('Introducir numero de mes.' )
repetir t
leer ( mes) i
í £i* JO Í n
si (mes < 1 ) o (mes > 12 ) entonces
escribir( ’ Valor entre 1 y 12 ' )
fin—si ó T‘ -. i
if
hasta _que ( mes > = 1 ) y (mes < = 12 )f > ( >
%
i v,
fin

Este sistema es conocido como interactivo por entablar un « diálogo imaginario» .

Scanned with CamScanner


'. rv
128 Fundamentos de programación i

4.6.3 . Estructura desde / para ( " for " )


se desean ejecutac las acetones
En muchas ocasiones se conoce de antemano el n ú mero de veces que , debe usar la estructura
fijo se
de un bucle. En estos casos en los que el n ú mero de iteraciones es
desde o para ( for, en inglés). , , , A
especificado A
La estructura desde ejecuta las acciones del cuerpo del bucle un numero
de
es y de modo automático controla el n ú mero de iteraciones o pasos a través del cuerpo del bucle.
veces
Las herramientas de programaci ón de la estructura desde o para se muestran a continuación.

desde v vi hasta vf [ incremento I


decremento < valor> ] hacer
para v < - decremento
vi hasta vf [ incremento I
< valor > ] hacer
< acciones> < acciones >
3 : r> d

fin_desde finjpara
v : variable indice
r"
i. . na
vi vf : valores inicial y
/ final de la variable :¡ t

a ) modelo 1
a ) modelo 2 0 } qfn 9 ¡;
-
Diagrama N S, estructura desde
? o\ > rU '
desde V <- vi hasta vf [incremento Idecremento
<valor> hacer
.13 i1C t I L
<acciones> :BV
fin_desde
oiú ja V
b ) modelo 3 --
vi

- V 'X
‘i

4
Diagrama de flujo estructura
desde fI i

calcular
valor inicial
. ii
¿

y valor final
(

>
i\
V

r
* . }• lt <
r
fijarla ,
\
' ^ ’
' ‘ .
oiqmcj.**
‘ •

variable índice
al valor inicial

; t ;r .
variable
**
‘ vf !> f .

índice > valor verdadero i » t
f ft V


final
fe /so a ? n ;:
» i
i

acciones cuerpo de/ buc /e J


’ i
^a
i
_
¿ i'

-
'ncrementar
variable índice
}( ) V ,

figura 4.13. c> modelo 4


Estructu a -]c (f o r ) : a ) pseudoc ni *
9 - b) d
ó digo
°
' di|agrama N- S; )
° diagramá de flujo.
Bikftá ,
..

Scanned with CamScan


ner
129
Introducción a la programación estructurada

)
Otras representaciones de estructuras repetitivas desde / para ( for
ón mediante un con-
Un bucle desde ( for ) se representa con los símbolos de proceso y de decisi
tratar de calcular
tador. Así, por ejemplo, en el caso de un bucle de lectura de cincuenta n ú meros para
su suma: - . i
¡

I i *
U
\ <r- 1 inicíalizaci ón
. del contador
\
i i •
i í ü MvJ 3
'
<

\ t

O * *3 hlf * U
\
\
.
2 -: J
* £ i
i • * /1 o* ' l
proceso o acciones i +

del bucle
i . }

r rrt v -
14- 1 + 1 ;j J .'. Í UI' Í )

b r 3

no
i )£ _ » I > 50
¿‘ t
a yi í , T
si
. di: f
M , w • . Mi : i

USM S’X • 1 *


* *

'
’n
'‘ ' 1
• » *' * • -10 O f :í i' í — > : bz :‘b
Es posible representar el bucle con símbolos propios:
t . r* i ,* .*
I
i i- T
Ib . •
=
* ) T. V li j. I wtJS*

— ni i


I 4- vi I 4 VI

ooíbr
i > vf
i <- VI
< » >
si
oh i ü i jim ioír / VJ no . irjTrr^
!
+ X , ¡ > v .;in uri ¿ Iaivi 11 10 ríi . Lnvl +
. *

ro ci?. > cBfóu(t ^


¡ > vf
f: r¡ « - 6 uti;J
-
^
injr.
\
a \J \

. . . I no . ,lcn • Is sbaoxo m tolfiv ovdun - I no{ onu ns* afnsm rani ^


¡> M 3l 3Ud 0 « ¡a ?.
toibm : i( ) i ..• . . . * . , 1 -
. -
- . unaiu ¿¡ r¿m
I í; . . i r . í f; v acciones - { M 1, t u / [ ., gbasb
i * :
;
1 ^ V J í
"
Íí »

.. . . n i i
i
acciones ' t
- / ;

Oii íritr:
• *i
\\
a. - . . ..
if . I ' j' iqmi ^ 1i . }
1> 11 * ~J * 1 4 » J íO í ..

.
J*
i>

A »ni noi aboqil bb obriyitf ioqyG


b ¿np ildiíoq gy .ajau
•í

bÍL«
00,1 o
- -, v -
ib i oi
¡ '
10
113/i 1
^
- o;. lis b nyJi nbc HA HTíKH y Dl Ü Afl .olqruojs bA .ovil
í ioq ,
.
1 1116 iant® este otro
J5> °nl
un !' .
; ... .: - í¡s - ' t ,
' j ¡ r:
^.
,
¡ .
¡wj

I
—repetir
0f1(S|riC|< , ,; u 0 ¿otnaí naioni yiimbe

I, . r • o : nomb « .Mto ? i ¡ oiiiü - o ob o oy íí


olóa
. ¡ ¡i oJd « i
y oinsnraiDni

,
¿OV Ó
!
:
\ . r . ' >.
_

| • .
^ .

• «

—¡ -M. ' variable = ) • h U íl ) ’ l i
a
.

m 1 m 2, m 3
# .tol afuvivobs oviisqyn naicí
!;

o suri mli = contador inicial


proceso m2 = contador final
m3 = incremento o paso

t* - -

It'

Scanned with CamScanner


130 Fundamentos de programació n

Como aplicación, calcular la suma de los N primeros enteros .


i
- í

f íf í J irpi . / ( loi ’

. j f/ > .
-
l
i <- 1 - M í. 1 • b ( i' j olrjm ¡ :í
*
f

i>N :m.v íJ ,
S/
i <- I + 1
no
escribir
’ Suma = \ S

S «- S + I • 3 7T
ioi
Q )
I
9 ljud
'
1

fin

r + i
I

equivale a i
I
.

j
algoritmo Suma
var
on
Oí < I
entero: T, N , S
inicio
S < O
— i
desde I <— 1 hasta N hacer
S S + I :? oiqmq / olodrn ^ nou lo
fin_desde ^ Idistocj ¿H
escribir( ' Suma = ' , S)
r-
fin "
i iV
/ <
( La estructura desde comienza con un valor inicial de la variable índice y las acciones especi-
ficadas se ejecutan a menos que el valor inicial sea mayor que el valor finalALa variable índice se
incrementa en uno y si este nuevo valor no excede al final , se ejecutan de nuevo las acciones. Por
consiguiente, las acciones específicas 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 lo contrario.
Dependiendo del tipo de lenguaje, es posible que el incremento sea distinto de uno, positivo nega
tivo. Así, por ejemplo, BASIC y FORTRAN admiten diferentes valores positivos
o -
o negativos del
incremento, y Pascal sólo admite incrementos cuyo tamaño es la unidad:
bien positivos, bien nega-
tivos.
La variable índice o de control normalmente será de tipo entero
bres las letras I, J, K.
y es normal emplear como nom -
El formato de la estructura desde varía si se desea un
incremento distinto a 1, bien positivo,
bien negativo (decremento). ' t; r ,.

desde v < vi hasta vf inc- I dec paso hacer / / inc , incremento


/ /dec > adecremento i
<acciones> i r •
<
r> » — • ,
i.
. i

i i
—— — J

fin_deade t
i

Scanned with CamScanner


Introducción a la programación estructurada 131
V na e lnc lce es menor que el
oositivos va nue en men
valor inicial es tmvnr n
mentó Al increment
^
T” í
S
^ .
Va 0r ina
. ’
^
valor final, los incrementos deben ser
a secuenc a de acciones no se

ejecutaría. De igual modo, si el
incremento debe ser en este caso negativo, es decir, decre -
denominar tambié n paso ( " step " , en inglés)
Es deck .
ni i .iá J 3 C íí
JJ?.
nn
%

desde i 4- 20 hasta 10 hacer


< acciones >
fin_desde olohil [ >
* ti i
i / Jega :
no
no se ejecutaría, ya que el valor inicial es 20 y
el valor final 10 , y como se supone un incremento
positivo, de valor 1, se produciría un error.
» op. ;
El pseudocódigo correcto debería ser:
:(

ae
!
fin_
ccio reS2
° *“ *“
< acciones >
desde
10 aeotem nto 1 h cer
* * •! : Hí . - cris!!; • „\
ii32W38W* i Unm /Jointe*» (ibiwnsTgonq 11 ab 8«Dí?.í d zmuJatr a
abonJrra > 3 tuiafii a* on ; ipnuA
o í ...: . OÍ M
, ¿¡ i*
- ' " .
H < - ti Otauq tiu ra Bbilfi? ni
ít i^
Glinnv] :up ;; vil ¿ ) v. jji
i . nu ob iw ; : h obiviovi
'

Bí B .V.;. J ¿ -
' _
Realización de una estructura desde con estruct
i oL G ÍT¿l¿rfi3rt
‘ " '
ura mientras
ófibfiisqatB x9di oiiltsa omaninimonab
fil ü aooñto» ísnoia n
J
*

Es posible, como ya se ha mencionado en apartados anteriores, sustitui


r una estructura desde por
una mientras; en las l íneas siguientes se indican dos formas para ello: ;i ¿o / I t !. ; . -r . . . .

1 . Estructura desde con incrementos de la variable índice positivos. i n


. i. »
i
eeono í n ® < noio :i.:* co > la
v <— vi
mientras v < = vf hacer Ki _. nil
< acciones >
1
o no
v <— v + incremento «í 5
7 iJ
_
*
JL .
fin_mientras
naaad < 1 ottu • :>Idi;»n9Tqfnra> y sfdigsí omjrtgmiq mi vjjjfcoiq oil xtlno noicomizni BI ünansg na .
2 . Estructura desde c¿n incrementos de la variable índice negativos; f
¡ti ) lnnfl fe > •; ¿ j sbud fob -
fea cí alnsn non oup wrnrwm .olovd fob osmfei

» **« * •
• •*
^ U|> - . r i; i .tupruji;
mientras v > = • vf hacerla
.
,< •

:J i

noioqo ul > :in innmi on sup « omubiiwtiousi o. l . orn / Vn
fil «b r,« moq*Í b O bvilBfrWik filK) filma on obnfiUD
'

-
< acciones >

: fin_mientras
v < — v - decremento
olC;íT!S{3
.
wn -uA> A» w \ * > ? VA su iwyy» n \ ? m sA > A > cun
iv / » i ; < u ,
^ v’ mi -As nov > Jw » \ < \n nn'O
* .

La estructura desde puede realizarse con algoritmos basados en estructura mientras y


repetir, por lo que pueden ser intercambiables cuando así lo desee. Las estructuras equivalentes
a desde son las siguientes:
í nc - . . - '
» pr í a " i , i
f nr» : *


*
* '
*
a ) inicio
í
“ • ' b ) inicio • •
« . . • • •
*
no ; of r,M j\ í u :i - .ooo i* í
i <- 1
.

-n
i <
mientras i > 0 hacer
.
mientras .
i <= n. .hacer
• •
i 1» « \
ni '± ni . ex/ p i
< acciones > < acciones >

i ~
_Tienh traf ^ ‘
ftfc’Mf óiowrnolniobtirmi si )
i + 1.
íomiho n aol ii3
.« ^ .. -\
= finin 8
lab I £ in ^ -
m miiq «¡I ov; q
. 0 330tq M í - i ;. . '

Scanned with CamScanner


ón
132 Fundamentos de programaci , ?-
,;i - ,b icioin * •'

c ) inicio
11 i
d ) inicio
i 1 ¡

'

O í ifJ I í .^ 0 / jJ Í ” ;

i i— 0 repetir . ¡ p !'.> {!• \n


< acciones> iVir »
repetir * > (> : i l*

< acciones> Í i
hasta que i
—_ i + i
> n / i bob
i < i + 1
-
haatasque i = n fin
fin
f ) inicio
e ) inicio
i <— n + 1
i i n
repetir
— i : ». t ‘ r>.. ni

repetir < acciones>


'
< acciones> • I . . , , :. i 44 i - 1 •
_ '
Í Lfí ii
,

' -
i <r i * “ 1 *, i
hasta que i < 1
hasta__que i = 1 fin •
'

fin
1
i rt > * rf r<
o J rr - r"‘

4.6.4. Salidas internas de los bucles


*

Aunque no se incluye dentro de las estructuras temedto del bucle


pmto ó

granraci n específicos la denominaremos salir o iterar para dtferenctarla


de repetir_tasta
ó ;
suelen ser vá en mientras lidas estructuras , repetir y desde.
ya conocida. Las salidas de bucles
El formato de la estructura es: MV .' ' ‘ .7 ¡ v ; -
*' I nt; üH

repetir
< acciones>
..
i i \\
•\ } AJ / OV . o^'iVM Ú U ’ Ob RVi^ lV \ V/,A.
si < condicion> entonces
salir_ bucle
fin_ si t?« Lí i . i í
< acciones>
fin_repetir

En general , la instrucción salir no produce un programa legible y comprensible como lo hacen


mientras y repetir. La razón para esta ausencia de claridad es que la salida de un bucle ocu-
rre en el medio del bucle , mientras que normalmente la salida del bucle es al principio o al final del
mismo. Le recomendamos que no recurra a esta opcion — aunque la tenga su lenguaje— más que
cuando no exista otra alternativa o disponga de la estructura iterar ( loop ) . ti

Ejemplo 4.24 * t
nr. -. rtn - Irr ni rj

dZeUcUnTnltlT P° sible m de h infmcci


, para°la, introducci
de petici ón en el algoritmo
ón salir se Puede dar cuando se incluyen mensajes
ón sucesiva de informaciones. ,.
Algoritmo 1 # J

Algoritmo 2
1eer( informacion) Oj ’ ití iL 'jir > ¿J uo ¿
repetir 1eer( informacion )
procesar informaci ón * ~ -
r i mientras_.no fin de lectura
leer ( informaci ón ) procesar informaci
ón
oiv .tr: l
hastanque fin leer informaci ón )
(
de lectura
fin_ mientras *• • » *4

!
pendiente proceso (wroUipimera
ctura tá
^^ lfiiera del

Scanned with CamScanner


Introducción a la programación estructurada 133

bucle todas las lecturas de información si se posee una estructura salir ( exit ) . Un ejemplo de
ello es la estructura siguiente: T

repetir
leer( información )
si fin de lectura entonces
«
salir bucle
fin_ si ti V is *

procesar información aeonoina


fin _repetir
¿v
Ejemplo 4.25 (Bucle controlado por centinela ) is» /115

Algoritmo para calcular el salario de una serie de trabajadores, cuyos datos serán introducidos por
teclado. Sabiendo que las horas normales se pagan a 2.000 pts. y las extraordinarias a 2.500 mien -
tras no excedan de 10. Si las horas extraordinarias sobrepasaran las 10, el exceso se pagar
ía a 2.350.
La introducción de datos terminará cuando se escriba '*’ como nombre para un trabajador.
_
algoritmo Calcular salario le nil
var
.
r tl
cadena : nombre
real : hnormales , hextraordinarias , salario
VS . í » ofqrrisjüi
inicio
UobftJno:) ioq obf oTlnoo
^
;;'\wi\ ¿V :\ v >n\>< y \ V» u > A
^v.. A *
*
vr escribir('Deme nombre (* para fin)
leer(nombre) : \ . *

mientras nombre <> ' * ' hacer % •“ N C~ e %

.* r.¿ ? c.” i i r; v1
escribir( ' Deme n° de horas normales ' ) :z.v
*

leer( hnormales) P ’r * <* f .


*• •' "'
Li '
'
1
* n i

escribir( • Deme n° de horas extraordinarias ’ ) : iA t


leer( hextraordinarias) O i O i ff1
salario hnormales * 2000
si hextraordinarias < = 10 entonces
í — * i
" -

salario 4 salario + hextraordinarias * 2500


-
si hO
— r r\ r, »

- 10) * 2350 - T * -
salario
®

fin si
4 salario + 10 * 2500+(hextraordina
. :• -
escribiri nombre, salario)
. t
, V ir- /
rias

'
.
* '
-
_
:

— v -
. •

n»t

escribir( ’ Deme nombre (* para fin)


’)
S .. ,,
'
^- 4 . ¡ • •
%* '

^ C J .
leer(nombre ) ;u <7 ii
fin mientras
y*
fin T f..
* j
* k u

Ejemplo 4.26 (Bucle controlado por bandera )


, . ‘ 'i r • "
*

.
f V»
t r* r.. * i ‘1 ; J i ' '

Algoritmo que nos determine si un n ú mero entero leído de teclado es o no primo Un número es
compuesto en cuanto que tiene alg ún divisor distinto de si mismo o la unidad .
Vamos probando con todos los divisores posibles del n ú mero (2 a n div 2 y en cuanto que detec
) -
temos un divisor ya podremos decir que no es pnmo. , , nu
_
algoritmo Eo _ o _no _primo 31 :c t
var 'V «
entero : n , divisor
logico : primo

Scanned with CamScanner


134 Fundamentos de programación

.; ;r , . fT * i « *J > i/(ffrioftfrno!ni ¿*
'
! JUfl
; ' ;
inicio í j

? i • •
1
< . ¡ ir
i 'joII ';
escribir( ' Deme numero )
leer( n ) . •
jf ,f
-
primo 4 verdad > «
-
t

divisor 4 2 . if!

// la variable primo controla el bucle


hacer
mientras (divisor < = n div 2) y primo
si n MOD divisor = 0 entonces _ '

primo 4 falso
si_ no
-
-
divisor < divisor + 1 .
OÍJHÍ3)2*¿.A Olq í M:

"
fin si
fin_ mientras
/

.
.

..... 9 Mc%Wi v ti . ;«M , IU


si primo entonces 7/ La variable primo pasa información a
h u U) '

.\
o m V n m\K
• «
v w w
««
^
* **

»*
• v
v'4V .. v ‘o\ 1
• / / otra parte del programa
*

escribirf n, * es primo ' ) w if i > ’' '\ ; - - * > * * U 7\i\\


<i\
' '
* i
'

si
*
. no M
.M - Y.; \ )\\ . • .. i .
vAi v » ** 1 ' * • . •
1
• •

escribir( n, ' es divisible por ' , divisor )


fin. si iL 5 r í e ;

fin ! > v .i i 1 •

Ejemplo 4.27 (Bucle controlado por contador )


.. "
Algoritmo que nos pide la introducción por teclado de las notas de una clase de 40 alumnos y nos
.
calcula el tanto por ciento de suspensos. 1

algoritmo Tanto por ciento _ _ ¿¿JO lili



-
*
» :v *

var
’"‘ •I
* -
'
i. •
; fi i ' ;
n «n ‘ -lidiioue
entero : contalumnos, contsuspensos i &9 l ; ;J * ~ M
.

real : tantoporciento , n c" i or•. ">nl 'i r: ; i iidi'ione


- -
inicio
contalumnos —1 4
B9nnoint>
v / ...
:. i is : tj te
^ "
*
í IM t
í ni* .: í * o í -; *
-—
contsuspensos 4- 0 . ,, •, t
j <j in
-
t .. k . *
' ?
i i. I Iv.i - «* V • *
;, 4I
mientras contalumnos < = 40 hacer
escribir( ' Alumno , contalumnos, ’ - Deme nota
leer( n )
1
' ) •
' * '
-^ niv -
?
.
• . oc
.i i r ?
*
• 'í '' 1 * .7 . * ' * * *
veil

nil
si n < 5 entonces i • Í V*: « •

contsuspensos 4 contsuspensos + 1
fin_ si
— v:l ildiioGe.
. ¿

i uit í.irc i
fin_ mientras —
contalumnos < contalumnos + 1
nil

z ^ ' - --^sO.«
fin

Ejemplo 4.28 ( Bucle mientras:


AI
gonmo

para descomponer un número
j
. A
t0 de susPensos es

^
se puede ejecutar de 0 a N veces)
bn8dflo‘

'

entero, leído de teclado, en sus faci


1
'
'

, tantoporciento)

' ” b;
- iv y»
‘ .
* fiwj oonnd .Mi]?ouivi /
¡
-iin> jr.\‘» vnv!./

^
tv > v>\r »MC\w/í
' '

algoritmo Descomponer
órés priinók
orrjlio
'!OT
-'
ia
var
entero : n , divisor »» .
l ^
v rx rC #Y;
I
V V
14 : / V i -

Scanned with CamScanner


135
Introducción a la programación estructurada

inicio fz.b ol
escribir( ' Deme un numero ' )
leer( n ) WtlUt *V, / i'
* A% W •
*

escribir ( ’ Su descomposi ci ón en factores primos es : 1 ‘ )


'h \ f f f \L N r. * f 7. J \ -
divisor < 2
mientras n > 1 hacer

• 4' * *
^
f '

...
\ W IUI Ot mi *
lrtn *

7 MUWV si n mod divisor


;
escribir (divisor!
0 entonces W
>
to
!m ;, >y. \n\ lt A A. v»\\> r;Uwt ¿OlWlftW loi ^ 5

si _no

n < n div divisor
c om 3 Í iCT;.Í6 '

— _-
divisor < divisor + 1 í.7

fin _ si i . x : o 17
fin_mientras ieb nu/n ,e : fr,o í %

escribir( )
fin O 13 i[i i
7
( • X 1. ' 'l ídil'ii f»
i

Ejemplo 4.29
Pseudocódigo que lea un número entero positivo y lo escriba invertido.
í -
k
algoritmo Invertir
var 1 * X «
i .*
i .
‘ jr*

entero : n, resto
i * nsb —* ns*r>
inicio X ¿ :
escribir( Deme numero ’ )
1
rreb \ mua o &

leer(n) 10.0 > cisfc v mun )


(O , ' ñ ' Cb5V9¡9 V
mientras n 0 hacer > ^
/

ni i
resto n mod 10 l ?n
»

escribir(resto)

n < n div 10
fin_ mientras
SS.Í Oír - . -

oñ>i ; v> iv 3 \ Vi )VÍ \ *í Uy \A 'Ai \ >ib ta om»r » V¿n .«ña /


,ai\ > luy» wuthovifc

fin \ , w i\ A oAa%\.n1 a su\i anamv. rA 1 V1 viAi Vi t& Mnnq > t \ ^uv. s . an /


a
> -u:t'u Aph v ?.«V/,'A ?.u\ /.viña ¿ vA liruiv > VA / '\ vi:i sv ivbU
, vñ\i'( vnv '
Ejemplo 4.30
Dado un capital C, que se coloca a un interés anual R, averiguar al cabo de cuántos años se do-
blará. K . , í 13 o ? b , rurroo , cr, , 3 u vbb o it> jne '«

algoritmo Calcular capital


_ CJ e
^ i.ít id . ,6 7 i *3 OO
J o io rosigo
oc:: rc ¿
var
real : cinicial , c , i oi o i a L
asno LWJW xi ^ eix 'x
entero : años i

^
inicio
escribir( Deme capital • )
1
"
/
c(i í ¿> 1
í L b í u* V
'
'

—— f
oia .

j »» *
^i ^ í d
C v - í oo
- '
i

leer(cinicial) ( { h¿ir,:

bó) .i
i í
'
.cí X O i -C
’ i


c < cinicial
años < 0 — Oí i o *0 < > cox aoM foe )
i&í
Y ( 0 ..
^ i O t S71
* - a OH
N
w• 1)”
ie
'
.
'

'

escribir( ' Deme interes anual en % '


leer( i )
bk-.Í MO / ’
— * 0 í c;:
> MU .

repetir
c c + c * i / 100
-
años 4 años + 1
hastanque c > *» 2 * cinicial
*f
•'

ft i » O\i
<
n * ‘A
Qu .
1

c b ln
v *
- - *

fc
v'
*

escribirl ' Para dupl icar el capital se necesitan \ añoa , años ’)


fin
1

UJ i\l $ -

Scanned with CamScanner


ón
136 Fundamentos de programaci . ..
i .

KÍ V '

Ejemplo 4.31
puede aproximar por
Dado que el valor de e A x ( exí se + x n
,
1 + x + j r A 2 / 2 / + x ^ d /ü .
expuesto y
un
, de
calor n* x
escribir un algoritmo que tome hasta que x n / n! sea menor q
-
vvy calcule e ' x ( e lJ , mediante
el m é todo

rminos necesarios
lar téérminos
empleando los
'n

algoritmo
__
E_elevado a x
.
k v:i v
> i *

la
var
entero : x, i a i x:jnola a
real : e, num, den i 2 i d i v r' *

inicio
escribir( ' Dame el valor de x . ' ) CS.f oiqrnsp
Ieer( x )
e 4— 1 Bvip o$sW>ooV>u«H
num 4— 1 OI . ; , cr\ wt V, r . nu ü
den 4- 1 .v. v
i 4- 1 ^ j

repetir i
num x num
den -4 den * i iJ i o1 ~ i
i 4- i + 1 i ti ¡ í .f
• tnarj
e 4— e + num / den
; •
. *
. -iO/ \
_
hasta que ( num / den ) < 0.01
escribir( ' e elevado a ', x, ’ es ', e) ioo t r! 0 < r. 3 ¿vi 21 .3
'
;
-
fin — #

^ 1 3 í. i ) l i l i toas»
Ejemplo 4.32 01 V Í b /!
— *

Algoritmo que lea día , mes y año, así como el día de la semana que fue el 1 de enero de dicho año
y nos saque por pantalla el día de la semana que corresponde a la fecha que le hemos dado.
Deben considerarse los años bisiestos y depurar mes y día .
OS. Jv c!qrn 3Í3
algoritmo Dia _semana
var ItiíMtt ' A •
• *’ v v t
:a . vn\\ . > ,\ boQ
entero : dd, mm , aa , contm , dtotal , di
carácter : día
logico : correcta, bisiesto
- * 1
. , V:í '
v.ru l to .. 1 » *

rav
inicio
repetir / /comienzo de repetir
:,D % ;u i o i n i o : j ¿v i -
bisiesto 4- falso ololnl
correcta 4- verdad o v ‘ v> r7 ' * i \ UJrivmt» .
escribirDeme fecha (dd mm aaaa) ’ ) * ¿ i> i » n¿ , i r.
Ieer(dd , mm , aa ) >
si (aa MOD 4 = 0) Y (aa MOD 100 <> 0) O (aa MOD 400 = 0) entonces
_
bisiesto *- verdad
fin si * }
'
c .- í .
1
BOVi í rtJ, r. > I Í1 3‘\ íf

_
segun sea mm hacer » ft

' 10 > i ‘

1, 3 , 5, 6 , 8, 10 , 12: « i v»u » *w >


1 v
y; .
si dd > 31 entonces
correcta *- falso
* \
- i'» ftUp . aJaAit
fin_si
«

nil

Scanned with CamScanner


da 137
Introducción a la programación estructura

4, 7, 9 , lis » fs jo : b — 1 f i k/

si dd > 30 entonces TSOftrf fccvx r>


' .u ñ ea m/ n& s

correcta < falso


fin si
_ —
2: -> / tidli-;i
si bisiesto entonces
si dd > 29 entonces
correcta < falso
_ — : fc
fin si
_
si no
í '

> 28 entonces
si dd i' .v Jiidbxoa*
correcta 4 falso
fin si _ - ( ’
of - . *
í e1 í TOO ?>

l

fin_si Gi ua« irt » T¿ t »rc >. .


_
,

I b * t¡ v , i ó V IUKI serr é ur % %

si no .
_ * • l. 1 M .. . u»
Ui I i . • • . » . v •

-- óle n i 3
Tir'
• •
* • -.
correcta 4 falso '
_ «í r* ; ido * modo C K íSVí " • uvwV ¿iara ¡ a c:i o ~

-
"
fin segun
_
hasta que correcta / / fin de repetir mee
a v i no nil
i
i
i i \ •:* » tr Ifií rtia v. a o(r. ^ X >¡ ;X ; oS ? r IL .
ii

dtotal 4 0 - . • . *
. u * s

AHUT0UíTf33 X
desde contm < 1
_ hasta mm
segun sea contm hacer ;
1, 3 , 5 , 6 , 8
-
12: . 10, . v .xa nontis so ttnujouil aeJ
í
*
O i , ; » :. ¡í 1
dtotal ¥ at olaí ’ ? f Vj > onodn
' e xa coono dno - - *

¿
4 , ^7V - 9 , :ÍT:i! •; a «utosaaiani oí tsxifii
u í io / drn ?;? sldi/oq ¿3 .üB /iir>msiÍ£ ¿ob i>b cnu
d t o t a l t <- dtotal ¿f ,(3fe¡ms[ s io3 .ZBViJSfmJÍiJ «ob J!J
mj nsínoo ';:¿ p íidÍ 0DSÍ S¿ -
•• t ,

•2 ; ! i aeoaoJae - la Giuttuitzs Biza


v asoaodao ia jnuteinf ós ciio isnsjnoD sbsuq
. - ^
/ Us e ;gsssv sb oismiin isiupleuo ainsrrur/Msoue tea ( ,m? >
s
Hct ' i'-: t ?!-: 4uftW£?l/iH entoI
dtota
1<

dtota
r$ h
l + 29 * '
*

.Kxvi ' j Ji •í sinsistib til - .


si no _
dtotal dtotal + 28
fin si
_ RSDitOj £J 9 lit • LO :fc IVA. O í R .

fin_segun l
fin desde a !jo ñolati .no s o i r « i to o 1 e
• .


{
i i
: * íidlraos i
-
'

dtotal e dtotal + dd
escribir( Deme d í a de la semana que fue el
1 de ENERO ( 1/m /x/j/v/s/d) ' )
leer(dia )
_
segun sea dia hacer, ntfqraoqvb,**/ ¿ B ¿CTül3UIl29 /«1)0 « <fS10ÍTSlnÍ ¿0 KímrtOUlíZS » 1
'1':
di 0 saono ^n3 i c r. nc ; ia >

' m ': t !> ono í xu> ‘ ¿ *Mhn- % tn )

di 1
x :
di f 2
* j* s
- V. :. n - Í . " iV, V .

di « 3
'v : 1
- ¿ ü. nil

- ' I; * - ,
di < 4
• s': íflqiiiurn ;. J O < -j b'
í wrj óslo, ' .
;

¿niJ
di 4 5
'd : 1
— :o / fcnnoi 5.Vo noo is inujouii / o t;nu obnax
C v ’/ T í ! 11 . 1 ' V’í vi." I } . vit.»~ í íJ . » L : •
t v .
" ' '' -

_ di 4 6 - .
f \ :V
^ .; iv .
> *
“ <

fin segun

Scanned with CamScanner


138 Fundamentos de programación

dtotal <r- dtotal + di


segun _ sea dtotal mod 7 hacer
1:
escribir( 'Lunes ' )
2:
o
escribir ( ’ Martes ' )
3:
escribir( ' Mi é rcoles ’ )
4:
escribir( ' Jueves ' ) on i.
5:
escribir( ' Viernes ' )
6:
escribir( ' Sabado ' )
0¿
escribir( ’ Domingo ’ )
nil
on ia _
fin_segun
Ais : r. í i
fin ' ¡i' r> J . v - '

4.7. ESTRUCTURAS DE DECISIÓN ANIDADAS


^o i 1

Las estructuras de selección si-entonces y si-entonces-si _ no implican la selección de


una de dos alternativas. Es posible tambié n utilizar la instrucción si para diseñ ar estructuras de
selecció n que contengan m ás de dos alternativas. Por ejemplo, una estructura si entonces
puede contener otra estructura si - entonces, y esta estructura si -
-entonces puede contener
otra, y así sucesivamente cualquier n ú mero de veces; a su vez, dentro de
cada estructura pueden exis-
tir diferentes acciones.
C' T i 1
-X
si condicionl entonces r nlX
n
— LIT i f j rr b *
si condicion 2 entonces
uLiaeü : T
í

escribir ' hola Mortimer i

4 .

Las estructuras si interiores a (6 rf) h o c


otras estructuras si se
denominan anidadas o encajadas:
si condicionl
entonces
si condicion 2
entonces
*

-v

< acciones >


— *

fin_si
fin_ si

° de dedSÍ6n mÚU¡P e ser construida utiü-


si condicionl entonces
'
< acciones >
*

7 IJ p <“» i! i

Scanned with CamScanner


Introducción a la programación estructurada
.

si _no .
si condicion 2 entonces
< acciones > t
si _no oxoini
si condicion 3 entonces
< acciones > oo >r j o1r. < A ie
si _ no r > 4 A
A i«

on _ lr
,
• - T*

¡
fin _ si ia i

fin_ si
MÍÍ O.1 '3!
0\ i»-«
la
_
fin _ si
»

Una estructura selectiva m últiple 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á preciso utilizar indentation (sangr
ía o sangrado), de modo que exista una correspondencia entre
las palabras reservadas si y f in_ si, por un lado, y entonces y si no, por otro.
_
La escritura de las estructuras puede variar de unos lenguajes a otros, por ejemplo, una estructura
si admite tambié n los siguientes formatos: olqrnsjS t

si e x p r e s i ón booleanal entonces . onttruvp.ws .


» • • » i
*3
t

v . QT . tw
^
< acciones >
4 wui "
- W!
>.V,
'
r \\ .
- ' . > =: i v . .‘ i W W ) \ ' A
B l no
si expresi ón booleana 2 entonces
• 1 ' tv . 1¿ I C Q l *
< acciones> i

11V
si _.no
si expresi ón booleana 3 entonces o i. r * n i
< acciones >
o i -..v:;/ ¡ r
l er»’ \- ; *
? i id i i
si _no
< acciones >
( *. . . J , ¿dieoL
. :iq í . : c::us lebic . iOJ
* '
aeonod /xe d , £a
fin_si *

fin_ si
fin_si r
•d 93 /jO Í *T £ ) * • •
i! *

i TO “ J
, , J ) t x driovi »
•on _ i •

o bien: r - . :11 L' P f J 'v .’I ;> £.) J


£ j »»
'
* ¿o esonosna t , : ia
•i oi : • " v> 'M í í

t
L o r* J r 6! 'b \

si expresi ón booleanal entonces (d *t


lid
< acciones>
on h
si _no si expresi ón booleana 2 entonces ( d ,i )
'>
<

i e .. r: + '
< acciones>
ia . «t i .

fin_ si
on. . le .

teoflo í fl ® > ia
( i .
en . ü
fin si
eavriojnu *
i ft

Ejemplo 4.33 on f a
lea tres n úmeros A, B, C y visualice
en pantalla el valor del más grande.
Diseñar un algoritmo que
Se supone que los tres valores son diferentes. xe nil

el más grande se realizará n comparaciones sucesi-


Los tres n ú meros son A , B y C; para calcular
vas por parejas.

Scanned with CamScanner


n , v \H S ; \\
140 Fundamentos de programaci ó

algoritmo Mayor LJ **% f f

var
real: A , B , C , Mayor
inicio
leer( A, B , C)
si A > B entonces on
si A > C entonces
/ / A > B, A > C
Mayor
si _no
-
« A

Mayor <
_
fin si
C
— //C > = A > B i K n2
i 8 ni*
si _no v¡
si B > C entonces
A
-
i
|
t
#

Mayor < B
si_no
— / /B > = A , B > C
ni i ‘, , .
jb rjP ‘ :;n ' ' - HWWJ ¿/ / iKj& bc :JHí >irn< o
Mayor « Cc- r
/ / c
C = B >=
>=
,
= , A.
1
..
. yt. . (
• 1
; ¿fil «fflO J (

, )( r .í •
í i / *
. í «: > ft
'
escribir ' Mayor.:' , Mayor) .i nil -- & { &
fin ^ .
t

)*jW | ííTIillWlí W lA A) i

.
i,:! -
t fjj
_ _*• »
i*
..
*

-

1 (
-
-.
.
/ * 1
* ’ *
.'. .
Í» f¡;í ojiml r í
«i.
/ jínms ji? col i!í»K i
/ (

Li T io t ' '
Ejemplo 4.34
El siguiente algoritmo lee tres números diferentes, A, B y C, e imprime los valores máximo y mí nimo.
El procedimiento consistirá en comparaciones sucesivas de parejas de números.
v' 4 » •
* » •
^ .
algoritmo Ordenar •
i '
9

var 1’a
real : a , b ,c !
CíOílO :£ 1
,, ,4 *r *

.
>
inicio
escribir( ' Deme 3 números ' )
leerla, b , c)
V
I

c.x iu
_ ' ‘ 1

si a > b entonces / / consideramos los dos primeros (


a, b) X ¿i uU
// y los ordenamos
si b > c entonces u ai *
/ / tomo el 3 o (c ) y lo comparo
escribir ( a , b , c) con el menor (a o b)
si_no
si c > a entonces / / si el 3 es mayor que .i« 'J Ífi ; i
el menor averiguo si va
// delante o detras del mayor
escribir( c , a, b) ina ; J x
si _ no

escribir( a , c , b) zxotic j “i I

fin_si * \ i o on. i "


fin_ si
si _no i ^ ni y
si a > c entonces
escribir(b, a , c)
si _ no
si c > b entonces ío
escribir(c, b, a)
si _ no
escribir( b , c,\ a )
fin_ si
fin _ si
‘ ' ,n
' ;i ' 'JV. MUVw < V¿\ »í i». -UW » -- ' '
' ' ....
fin _ si
fin
^ " « v •
1

* • **
* * ‘ •.* ,:ti' ' J b'

.ilnú'.y - , . ,}‘
( { -. . íí >.J ctn -omiHi f. d

Scanned with CamScanner


Introducción a la programación estructurada 141

i -a K oAr v or
gAClATO': * orrvr t v I l l* -* , r\ " * fy
Ejemplo 4.35
«* •» '•»
> * f *• / **• *» /1 *

~ UAJrs - < * 3 ^
* . .

Pseudocódigo que, nos permita calcular las soluciones de una ecuación de segundo grado, inclu-
yendo los miares mag ,nanos.
algoritmo Sóluciones_ecuacion
, . , , |, •
í büd
y. *> ¡
f
’y
.
.
,

yj > \ *
.
.

.j '
jr
.
var . i;¿. bni o
^
real : a , b, c ,d ,xl ,x2,r,i
• V* f '
; ; •
£0flfit2 nómlaoM iqyi eJ . oJfioffuBq '

Inicio
escribir( ’ Deme los coeficientes ’ )
leer í a, b, c) i
si a = 0 entonces i i

_
escribir( ’ No es ecuación de segundo grado ’ )
si no »


d < b * ’; b 4 * a * c
si d = 0 entonces .. •
-
- , — 1 I
xl 4- b ( -
/ 2 * a) »

x2 < xl — I

si no
_
escribir(xl ,x2)
i .
i

I
.
t
i

si d > 0 entonces r

- -
xl f ( b + raiz2(d))‘ / ¡(2 * a ) I

- -
x2 < ( b - raiz2(d)) / (2 * a) i

si no _
escribir(xl, x2)
I

——
r < ( -b) / (2 * a)
i < raiz2(abs(d)) / .(2 * a)
escribir { r , ’ + i, ’ i ’ j
J
__
escribir(r, i" ’ i * ) '

fin si
_
fin si
fin si
V " Id
-
fin hártf',(l y‘.í$#o»8lWCWVf<?Y'ysfcíwM :

. . . .
! . 1 • t

Algoritmo al que le demos la hora HH , SS y la hora dentro de un segundo. Lee - msmicñie


remos las horas minutos y segundos como números enteros. .
algoritmo _
Hora segundo
_ .
siguiente
. .
: . ;t¡ ; ,

, M .4> vuaR
var
entero : hh,mm,ss
O'- frff

*1-- escribiré Deme hh mm,ss'


leer ( hh , mm , ss )
.
álmhwh
t «A *
, , nWn i%
\ - vA " « •> < ViV' V.*. vr
si ( hh < 24 ) Y ( mm < 60 ) Y ( ss < 60 ) entonces
'
..
'
> . i üV.ali il ’{ hVw'.Uv » * .- •. '- v> *
.
ss 4- ss + 1
si ss = 60 entonces
ss 4- o : . f
'

gw]wforiq íf o Jfattewnoa Miwldoiq 13


<
^
.


nun < mm + 1
si mm = 60 entonces .
ui'jñ ivoiq cbrotnuq 6ftii • n -.;
.

iisqi &i?.9 miian ¿ efo •


-
mm <— 0
hh <- hh + 1 ;i z í r ’ ' y -r f - ; . , - - -T

' f •¿ i CT í i . • >
r
si hh = 24 entonces
_
hh f - 0
r» i £s«7 i . .:rc [•- ^ i v e‘.t
.
-
t. fin

/» si í üb b£til bfibui
fin si ElBf
| ¡q l:
v
n1 inte
. -> ‘ l ** ui rn! sldíncy í;íIU obfif u
1
fin af -

^ H
«OloUlV OWIOIlnií»7 Ol ÍIO! ^ .UI«jVWy¿U -

ss)
'
eecribir ( hh ,
fin_ei
fin
i '

^^ ' . • ; Ir
ni •
*
nw lis ^ imo »

Scanned with CamScanner


142 Fundamentos de programación \ \ VAV

4.8. ESTRUCTURAS REPETITIVAS ANIDADAS


se pueden anidar o encajar estructuras de selección, es posible insertar un
De igual forma que
Las reglas para construir estructuras repetitivas anidadas son iguales en ambos
bucle dentro de otro
dentro de la extema y no puede existir sola-
.
casos: la estructura intema debe estar incluida totalmente
Figura 4.14.
pamiento. La representación gráfica se indica en la
cirial

. C3& I
C ~ • r-> f n
* t . A f *«

oa_ i
{ f>

JNR
¿8
* I
•- 1
Ni ' j' í

ia r
*

^ i - .'

i a) b) c)
T

d)
*
3
ua
Figura 4.14. Bucles anidados: a ) y b ) , correctos; c ) y d ) , incorrectos.
) £ . £ olqms ;:!
Las variables índices o de control de los bucles toman valores de modo tal que por cada valor de
la variable índice del ciclo externo se debe ejecutar totalmente el bucle intemo.
Es posible anidar cualquier tipo de estructura repetitiva con tal que cumpla las condiciones de la
Figura 4.14.
1BV

Ejemplo 4.37
i Se conoce la poblaci ón de cada una de las veinticinco ciudades más grandes de las ocho provincias
tsJtni

de Andaluc ía y se desea identificar y visualizar la población de la ciudad más grande de cada pro-
0 0
m
• «
vincia .M

'/ t i I d = - i2 'v

El problema consistirá, en primer lugar, en la obtención de la población mayor de cada provin-


cia y realizar esta operación ocho veces , una para cada provincia.
0 ITl lü
»Tu t
1. Encontrar y visualizar la ciudad mayor de una provincia.
« í .i
2. Repetir el paso.1 para cada una de las ocho provincias andaluzas.
(

El procedimiento para deducir la ciudad más grande de entre las veinticinco de una provincia
nmvinria se

consigue creando una variable auxiliar MAYOR inicialmente de valor n- qUe
sucesivamente con los veinticinco valores de cada ciudad d e moH * 1
n se va comparando
comparaci ón , se intercambian valores de l i1
° *"* (

Scanned with CamScanner


mación estructurada 143
Introducción a la progra
' #

/
*.
oi r ’

El algoritmo correspondiente sería: » r ra ot :


t
algoritmo CIUDADMAYOR
var
//contador de provincias i * *
_ • - ; : :
!C
'
*i :
entero: i -í f i C * :or, ; v ru i Gi l lrJ
//contador de ciudades ' •

entero: j C3 * ó * ~ í O'. ?7 i
"
vi
entero: MAYOR //mayor población on _ i a
entero: CIUDAD //población de una ciudad toaiv.» L
* i^civxb
inicio **
iV i esi3 ce
mientras i < = 8 hacer p,o on oJc« i v -7 ia
-
.

MAYOR < 0
1

hl tidl'ioae -

_
‘ 3
^
mientras j < = 25 hacer
ic : í i

leer(CIUDAD)
ni
cM
*
i si CIUDAD > MAYOR entonces
. ' LMAYOR < CIUDAD -
"j <

'fin_ si
j + 1
— .. MÓ!33Uf?T8Mi AJ e*
fin_ mientras .. í ** O3 O O > ) 1IX •
'

escribir(' La mayor población tiene ’ , MAYOR)


i < i + 1— itras^ brusu oKjaoxai tehmuoai» siqf í 'X ' í / 3 omJhog íc nu oh loroooo
. ob ojuft 13
“’
¿
fin
f n
mientr as 3
. ?o í
^
/. rMisL'o-v on loií noD ob ^
afibnsiaigrifiiJ fiasi íssi oínonnohoins ¿&h£ Í bui ¿o
x í c / Í 3 o! v > 3Í bü t c »;/m»7 j¿o íq icxiteai aJirmaq cbaiuioinfe í» ndharrurn "
q uJ -
?.oií 5»¿1 obnt¿ \ ; í
¡ P .oyi &drao niZ
^ - '

; « ¡ *b :oonoo i. / ciuíotrüza
Ejemplo 4.38
. ( odo\ ¡) note > tn¡ / u ¡ sí t v . n 32 olte mqr ;23lsnoioibnoofli ¿onoiramñkl issilfim orna
leídos del ttpfff&smddorq ohi ¿ ef ¡ ajqmsi* nóbomt ni r.iz3
in aol cien (cioibiirwo v ¿jacten onio j cien g&pouifgni si pbcri -a *

ri MOK'.- -aX.- , • ;v -kimiiiso


en crlüproblem •

en realiza r una estruct ura repetiti va de n iteracio nes del algontmo del pro
El consistirá
blema ya conoci do del calcul o del factonal de un entero. aonun í K - n i u , s¡ on ..Jnrí ,-n . ,Xfiv n , , ^ 4 %

) s_ -xx í "
. ¿ . • *

.
v %

d wpnuA

• T

. . í zapo
*

üusnal < ol zobo) nanaií al, cdop


>¿i¿aíl ai
( . D
U2 nan &
- '- í v a r; J i
fcy'
algoritmo F a c t o
• /X
i
r 2 -
c u p
- .
Blte s
.
i; ? « m nobasq sD «ip .
aonu
,
.qla íraizixa í
^oinlefii
.
90 OJJúU(
on .Ifiisnag uH . A / 1T
.
- í na éntVro:! .!; ' NUMER0 , >'jHoi 30ifiJzní icsiliiu sb bcbi?.333n amiy. ftiu
^ - z nopoirt í noo cdno i w» eup Gíriei oiq o o :<
gni ^
r» n y <reai ? FACTORIAL j Ttrfhotsoi ab*?ij(j0?
inicio j fiñbiyjuijt íiLz éí huhí t
/ / l e c t u r a de l a cantidad de n úmeros .
'

«nugnino ¿x ^oq fisilHu aupoínoca rraid urmn oiqnu oapi:/.:; f:b 1.5
^
f i / dtii : : : ono ó i nLf . is T i übteatnií/ii snuantn ,ituloni
í X Ííí
;f '
/

^
fci; v -: j ¿¿( ny ri:
-^
'

^
íoqi; desde i l hasta . n^ hacerA í - U atil ACV Í1 . A olf í
O HO* «_xl c-3rfiO. > LS;ií.>nÍ 8t í 83ítotefiUlÍ8
'

Jrt3U0n3 X ' Obtl&UD .i'Steud ob &bils¿ *b «SnoiOBUI Í .


: leer ( NUMERO ) - , H < /¿ C K > 1.70 /13 MU K7
'
» *

FACTORIAL *n.X.K i ;VtinámBíoáiíb vi‘k : irteq fibssHbu 7« í bat


> ía ü. T í nbteomi.
zni ano .
* desde j — -
< 1 hasta NUMERO hacer
FACTORIAL < FACTORIAL * j ,
.OJsIqfftoD otnaim íbaooiq ü n o
ioqaobiooboiq lotlciio onoiOñOTíilid 2i « ü
• •' _
i ' ; ' f ín desde ' L' r y h b
-
T í wnyyjVitú
¿ -
«mu
; FACTORIAL ) .) sbsViOf .rjuf’ lib' s.O 3Up
escribir ( ' El f a c t o r i a l dell numero '/, ¡ NUMEpo loles >
- ^ .
T ?te-S** ? n iocx
. d / í ri ) anu noo mnirmil íneq CLL íí K Í L rx?. : bvuq Grn & v- jOiq nu
; ; •'IO - > ^
fin
lO'iUH or.J IIQQIK .
Ejemplo 4.39
Imprimir todos los números primos entre 2 y 10 O inclusive.
algoritmo Primos
var entero : i , divisor
aesroína -;rcri - •
< noxoií oo» fu
. 101!n si -^ _
logico : primo ni
! ; .,

Scanned with CamScanner


Fundamentos de programación

inicio
desde i <- 2 hasta 100 hacer
primo <- verdad
divisor «- 2 . „ hacer
mientras (divisor < = raiz2( i ) ) Y Prim
si i mod divisor = 0 entonces
primo <— falso
si _ no
divisor *- divisor + 1
fin_ si
fin_mientra8
Bí primo entonces
escribir ( ir '
fin_si
fin—desde
fin

.
fm i s»

_
ir a ( «goto» )
4.9. LA INSTRUCCIÓ N
,, ex epto cuandojas estructuras de contra ,
B flujo da con* de un a gontmo

estructuras ya
ó conocidas :
es siempre secuenci

secuenciales , selectivas
^^
f áciIes Ieg¡bIeS UtÍ I Í Zand laS
y repetitivas. Sin embargo,
n
*
( goto_ s
; es; nece
engastone )
-
.
°

^
ir
; para ello se recurre a la instrucció
sario realiz bifurcaciones incondicionales
Esta instrucción siempre ha sido problemática
y prestigiosos inform á ticos, como Dij stra , han
los programadores y recomiendan no
tachado la instrucción goto como nefasta y perjudicial para
Pascal huyen de esta instrucción
utilizarla en sus algoritmos y programas. Por ello, lenguajes como
y prácticamente no la utilizan nunca.
_
Aunque la instrucción ir a ( goto ) la tienen todos los lenguajes de programación en su
juego de instrucciones, existen algunos que dependen más de ella que otros, como BASIC y FOR-
TRAN. En general, no existe ninguna necesidad de utilizar instrucciones ir a. Cualquier algorit-_
_
mo o programa que se escriba con instrucciones ir a se puede reescribir para hacer lo mismo y no
_
incluir ninmirm instrucci ón i r a Tin nrnarama rmp utiliza mnr* hoc A « ar m A o /t í fí

_
situaciones las instrucciones ir a son ú tiles; tal vez, las únicas razonables son diferentes tipos
de situaciones de salida de bucles. Cuando se encuentra un error u otra condición de terminación,

compito
Cr P
"^
directamente al f a> un bucle, subprograma
'"
' tmeradasprograma
potan rftetTquTsi
que estén

algoritmo Error
Tnr
o
ser ^ puede diseñado para terminar con una
f
” realizarse a instrucciones
36

detección de un error.
nil

errc> r > e tono s » . »


pr K


'
olr ííT
ti
^
fin_ si
” '
ti
lOOrfin

Scanned with CamScanner


Introducción a la programación estructurada 145

ACTIVIDADES DE PROGRAMACIÓN RESUELTAS . Ti i/iu'l ÍÍ J j; 'J ! ! ¿í -


.
4.1 Calcular el factorial de un n ú mero N utilizando la estructura desde. *

Recordemos que factorial de N responde a la fórmula U /2 f l l i

4 .
*

= N • (N - 1) • (N - 2 ) N - 3 ) •... • 3 • 2 • 1
A »
N! •(
.! / >2
otrial
El algoritmo desde supone conocer el n ú mero de iteraciones: >

inicio neofid oi«, r..^ xr. I í : B J B /U í ; -> .


var
entero : I , N
real : FACTORIAL • ) *xi d * ‘1 « It»
inicio nil
// N > = 0
leer( N )
¿1 OtnOiOO
FACTORIAL ; , 3l lOlfi'J }ljp Omlh ¿Í£3l IM> b ¿Olí ' 1
^
*

desde I 4— 1 hasta N hacer
-* .r ; obo m 13 .w
!“ tT FACTORIAL .

coidm&n ¡sol ;n¿ t 2

n ^sn .U nisa
1 escribir ( ‘ E l factorial d e , N,, 1
'es 1 , FACTORIAL )
01 no; . »: í - /no
*
>
-
* mi / /inb oilman .
b ;íJIV ? í;IP «
,
M J.J i .

Vf ¿ f f - Or f; ¡ j (í t
. i '
> t

4.2 Imprimir las treinta primeras potencias de 4* es decir, 4 elevado a 1? 4 elevado a 2, etc. r fj

algoritmo Potencias 4
F. = 3 n ¿ tr «• -
var b í . 3up íonam l ( or.
< ¿SVKMKMI ílasd «si flftifiniandt ^ . ri i
£ /
^^^ eátéror Irf ~ LJJOS í gf
s i n g a o s I J i tul*; : .*b wstnu'U
~
inicio '

desde n -1
4 hasta 30 hacer :»J /7 > sjiTri ? b >;v ¡< cmJ Úo vi fo h .\ r\ .

escribir { 4 A n)
f in_desde * 0 2 c- o i _ v _s 3 n s ¿ rv. o r . Vic$I «
*sv
fin
C ‘v C t .1 u * * í O O . * , d , £> : : 7 3 X í .c»

4.3. Calcular la suma de los n primeros n úmeros enteros utilizando la estructura desde.

,

( 11 » *19

.S = l + 2 + 3 + ... + « i w > a¿
' vii
J
: % Í 6 l'xoae
^i

El pseudocódigo correspondiente es: «

C -> 3
M
- i f: i r o o
— >

t: o¿ií ;* - c- :: ó i o ?de 1 x
algoritmo SumaNenteros ií • 37

var l , .» .
' **
> ireo 'i
. o
entero : i , n
real : suma ctO ) iidt x
^ .oill?
*
( or :m , '

inicio
leer( n )
suma -
4 0
r
suma 4- suma
n-
• •
. ...
lBta n" hacer
desde i 4- 1 hasta
< -* * * - I ^
• l ' -
i
J
- ahsnsídoBieqomihoala tousilad|
} ó.l .
fin_desde A vV^wvAA
suma
/ / e s c r i b i r el resultado de
escribir su m a ( )
í lni }! ,¡i . . o fO . .
r» H ¡c,
.
fin . rO A
= "C. j

Scanned with CamScanner


146 Fundamentos de programación

W :\

.
4.4 Dise ñar el algoritmo para imprimir la suma de los nú meros impares menores o iguales que n. > :•\

Los nú meros impares son 1, 3, 5, 7, .... n , un pseudocódigo será: , n (J , : <;i <

algoritmo Sumaimparesmenores i ! ; bn q* íJI A sl > fth > . • *


I
var
entero: i, n
real: s i . c.t . :
[t - VA \ L \ w . { i - A) v • -
Inicio
-
S4 0 s^noi . •
- •
í b fmm ü n h IO XHJO > om . ’3
leer( n)
desde i 1 hasta n incremento 2 hacer V»
- fZ j'


S 4 S + i
fin_desde 4 : c ;; 1
ZT

escribir(S)
fin
i. * v
_ ’ 'vr
%

-
'*
. i

4.5. Dados dos nú meros enteros, realizar el algoritmo que calcule su cociente y su resto.
ZSJ jfr ú Ví ñ íivczl : -> :Vr -
Sean los nú meros M y N. El método para obtener el cociente y el resto es por restas sucesivás; el método
seria restar sucesivamente el divisor del dividendo hasta obtener un resultado menor que el divisor, que
será el resto de la división; el n ú mero de restas efectuadas será el cociente:

50
11
113
3
j . __
50 - 13 = 37
13 24 ”
,
'
C=1
C 2 **
1 '
^ »' '
•*
SVJ '. II ». i
^ tf * mi . ! J ííI
"
• .. . *¿
f
.

24 - 13 = 11 C=3

Como 11 es menor que el divisor, 13, se terminarán las restas sucesivas y entonces 11 será el resto, y 3
(n ú mero de restas) el cociente.
Por consiguiente, el algoritmo será el siguiente:
__
c ^
‘ » zriri .Yl °
algoritmo Cociente y resto : í *L
%
var J
/ * , » •t <
entero : a,b, cociente,resto

^
in
« triwr
2eer( M )
( ’ Deme dividendo ' ) 'HÍW * m
"!l < » > # / $
escribir( ' Deme divisor ' ) \\ 4 ... 4 £ 4 r4 *
l :?/
leer( N )
resto 4 M- '
*

íi ír • rio í
cociente 4 0 —
mientras resto > = N hacer
!\ ‘ • i Zt
| • 0..
'

—-
resto 4 resto - N
cociente 4 cociente + 1
fin_mientras
F.o::
* j A J» .£
V . i * i:
> C. OíU ) :IOIJ La
v
.c
y,7
^
1

escribir( ’ Cociente: cociente, ' Resto: resto) • v ; v i

fin * oinl
7 ' : if.ol

.
4.6 Realizar el algoritmo para obtener la suma de los n ú meros pares hasta 1000 inclusive.
»

\ nbBst r\ ': Tf
S
Método 1: M E 'M f £. ' i . T
\

S = 2 + 4 + 6 + 8 + ... + 1000
í .. : : : nici •. :u .
- iM1 *

Scanned with CamScanner


147
Introducció n a la programació n estructurada

algoritmo Sumapares ’ / ¿i * > » r r


4 \ «
i;

var
real: NUMERO, SUMA
Ot
ó 11 ^«-"^ *

inicio
SUMA 4 2 - u í. *
r. ..
NUMERO 4 4 - li t& q * í
mientras NUMERO < = 1000 hacer r 11*1 0
SUMA 4- SUMA + NUMERO
•r í V: ) * " "
^-
NUMERO 4 NUMERO + 2
_
fin mientras
- > c- t p r; » £ri
{/» . . '
1 * t i di iOuS»
fin Í li í

M étodo 2i**:• 1; u . OJ » C/ Vi vA i. j í » :;r * ; TI ;¡>s ; w¡ ) • "


í ' M íTO í IX; íUJ :::! < < í J. i .í 3 í .k
. I ot * I-T¿OVí . »
*
’ . *}
' f. j "
, * •

V i
C r í j1

//idéntica cabecera y declaraciones


ó ; *30 Ir
l H ot
inicio
«

i.’
^
*

^
SUMA 4 2 - q: ; T < * .f .
NUMERO 4 4
repetir
- oiolni
? /. í:
SUMA 4 SUMA + NUMERO - ('V5\n leen cinco ;
'*
.7. “»

_
NUMERO 4 NUMERO + 2
hasta que NUMERO > 1000
- %

( ’ Vi * * i -. i se . ' rja í i ) - o / *
r: e r ?
*
/ ¿/ i - •

;
4

i st/p _
* fHk 1
sic /id '

fin nil

_ ¿v rUf obihp a q r n oiamirn iiji i smos atiü alead ,obcboJ lab eopmlm oJfisma rizoon*
g '

^
4.7. Buscar y escribir la primera vocal leída del teclado. (Se supone que se leen, uno a uno, caracteres desde

c _ . i o i 'r wi . c 211 i ico I ¿


el teclado.)
* '

tr r. 1
_ -JGV
tr? o ¿: >
algoritmo Buscar vocal
var
— il.o
cioiul
* •
* :
carácter: p
inicio
repetir
( ‘ C v ; 't
ón ©

'^ >
U ::
:

Y - *<
or. . '* 1
. •. , isfi í
. » :? . 1 » s i. :1
-
ieer(p) *

_
hasta que ( p. = ' a ' )o(p = ' e ')o(p = ' i ' )o(p *,
1
o )o(p
1
= j
/' u')? r i. h • i r* •~v ) •
'
^ .
escribir( ' Primero ' , p) ni":
fin:
¿ obí5iaí3 IB «Mnílalib «obolim üOONCNAMIIN nu al taiBÍi/ tUO .£!.
/1 ti
*
4.8. Leer dos números y deducir si están en orden creciente.
1 > i ;v , . • i/ - 1 r
- <.
:i > '!• ?3 .

Dos números, ay b , están en orden creciente si a <= b .


V ‘
i

- -

- • .

algoritmo Comparacionl W \ xUVXV W


var ü- jz \ v i v ía
real: a ,b i- \ y 1 e
t V

inicio \
l a \\
escribir( ' dar dos números ' )
leer í a , b) urri s.tnot.r -u.ÁUluyj uuM
si a < = b entonces

si no
_
escribir('orden creciente' ) : _
I í I,

• iT. -
i.

^1i
r< **
ii * » •>
- i

fin si
_
escribir( ' orden decreciente ' )
»• •/ *
U + n>
fin
f
/ *

Scanned with CamScanner


ón
148 Fundamentos de programaci
’ I

obtener nn número inferior


a 100 .
serie de números hasta
.
4.9 Se desea leer de una consola a una
algoritmo Menor 100
_ : jsr
var
real: numero
inicio . s l u t* in
i& j
repetir .
') > «• * T *
escribir( 'Teclear un numero
,

•i

leer(numero) vs x j i i& lm nil


hastanque numero < 100 ui.
escribir( El numero es ' , numero
1 )
fin
una pantalla ¿Desea continuar? S /N hasta que la
la frase ‘
.
4.10 Escribir un algoritmo que permita escribir en
respuesta sea ' S ' o ’N ' . oo: tris*
, ¡í J i •
;

algoritmo SN o;i zix.


var 1 Allí ” :
>.
carácter: respuesta •
* -> osniv? ¡
inicio
repetir • •

escribir( ' Desea continuar S/N ' ) .


r
. . . ¿.yi

r /»-;*•* / .
_
¿ V» >
* * i

leer(respuesta) y o o i . 0r
- * -" TI • Fyjx> :
K ‘ zk
hastanque( respuesta = ’ S' ) o (respuesta = ' N' ) aii
fin

.. un número comprendido entre 1 y 5.


4.11 Leer sucesivamente números,del teclado, hasta que aparezca
. a aup arzoqu se) ouislwf leb nbl ji iBytv .insfnrKpal itunaí a raoí'ua v í . .-
A tJi . üI r
algori tmo Numerol 5
. í ?
_ ? '
t.Obtí COJ l'J ^
var * . 1

k dJJestá £
,

entero: numero í £ r ov. - *


• • ; L:
:¿sv
:

inicio
repetir '
1 :
escribir( ' Numero comprendido entre 1 y 5 ' ) oiclni
leer(numero) ;; ¿ 2 qei
hasta_ que(numero > = 1) y (numero < = 5) ( c.O í &et *
escribir( ' Numero encontrado , numero) ^ ’)oi
1
ri 5
^v u - . q)
fin
'
jJ
rj|

.
4.12 Calcular el factorial de un número n con métodos diferentes al Ejercicio 4.1

-
n! = « x ( n \ ) x ( n - 2 ) x ... x 3 x 2 x 1.amaba» uvteo n&Ma fe ibubcti % anamim zob w í
es decir:
" 1 ' ' ' t !uuy >
* í »n{ ) K » fiy ,ú v n .?oi 3(iui íi ?.;>U
51 = 5 x 4 x 3 x 2 x 1 = 120
4! = 4 x 3 x 2 x ] = 24 ' J*
l *
• ;mo ’ i ora . t i
*
i¿
31= 3 x 2 x1 =6 \r nv

21 = 2 x 1 =2 ( . -
* 4 «. Vi ¿
// = 1 ¿iolcJ
=1 5 í
- . ,l JoV* ir i* , . )* ildl*iD
Para codificar estas operaciones, basta pensar que **
( n + 1 )! = ( n + I ) x n x ( n - l ) x ( n - 2 ) x . .. x 3 x 2 x \
- . H
. ’ •J ti! v>
*-
1 * "

• i j

cu , i * ,

mt '* *5 lv‘4
l£ Í11\
( n + 1 )! = ( n + l ) X n! kl\

Scanned with CamScanner


Introducción a la programación estructurada 149

Por consiguiente, para calcular el factorial FACTORIAL de un número, necesitaremos un contador i que
cuente de uno en uno y aplicar la fórmula
FACTORIAL = FACTORIAL * I
: y n i u xr n ,f.nvsf :vnf¡ si*' > io / 1 í . t /1
' * '

.fOlJfujj/l ?O J ¡4
^
inicializando los valores de FACTORIAL e I a 1 y realizando ün bucle en el que I se incremente en 1 a
cada iteración, es decir, • "
-
IIFJ i¿nu hi . vi;; o ! ; ir ¡ 1. r$ h ¿ ¿ obi í i Oí ' . • *

x >uú ju.>r \
Algori tmo 1 de Factorial de n:
<07 *

FACTORIAL < 1
í 4- 1 0 *1 OTTirn r.

repetir
FACTORIAL 4 - FACTORIAL * i n t ; ¡: r _ > 1fiSÜ£9I fcldi OOTlhogl* fob OÓfoOft 3Jfl3ÍUJJt IÜ
-
i

i 4 i + 1 1

hastanque i = n + 1 ' tnam ú n ( y o’ sntni K - I f u .


V»í. i ' ' < Í »
,r
¿ - * ^ * U olnnfi . K U
c * *
* -
% tC . J < •i ’ r

, p ( ni ; jftjpfov fo nao *


J
Algoritmo 2^ de Factorial de n: , ; ; ,
UU «: o
¿; ( í u ¡ y j í n nib's h JUU t .oUcimi .1
, , •
o ronolm ¿5 r > i i

snnjnsfow fo . utnix¿rn IOIOV fo WPBDü jmi ,Tom ¡ue U-


ai í FACTORIAL 4 i - y¿
, n ó i c /!r/ / L
^ snu !?Jn /¿ ibjín oríJ Í m o9!
)
i < O - ^ lii XJ T —
repetir . OC - n 91 p £l¿sri ’Ti tofloiooe
FACTORIAL 4 - FACTORIAL * (i + 1)
i < i + 1—_
hasta que i = n
¿
0 :7! X ñ ?' C « 3 ilOQ Í L
TRY

I !
Alpor tino i ¿fe Factorial de n:
cu /. ;
**
, oí 9 r ;n

{ ovi' Tun
* n : o 7£ * . "
ole? i el

FACTORIAL * 1 -a .. turret y í 0
.

-
i « O - 07 0 í; * ' : r. * x *

repetir .'i 71 r £ ¿ . 7
-
FACTORIAL < FACTORIAL * ( i + 1 ) / - n r
i < i + i

hastanque i > n 1
*
;

- ssonoína ónix * :;
( O J 9.TU/n } 7 fr
*

— * o. u x ^
*
.
*l
ie -
'

I Algoritmo 4 de factorial de n:
GTU

.’i ov: a í nsd


H vs / f’ O Í •

FACTORIAL < 1 - lor. fX ( ,r. < o 7 cvt%r . o: n<:'



i < 1
desde i 4- 1 hasta n - 1 hacer
ci

-
FACTORIAL < FACTORIAL * ( i + 1
) .yvuñ : i ¿vQ
fin_desde
•U UCDUO

ía ser el siguiente: - :
Un algoritmo completo con lectura del número n por teclado
algoritmo Factorial
var
podr
A

[ C X
: ;>

XA
o ’, ote i
,
j
^
entero : i , n í r- 1 n > .. •'

real : f
inicio -
f i
í

*-
1
1
O
r
1
i *• ; » ; - 1 c-
\

^

//n >
-
*

leer( n ) ; ¿ > f , h• / . C v V-
•" /
¿ , » \i ' A
4 *.

repetir
f <- f * i
-_
i * i + 1
1
; »r '
Of •

haeta <jue i = n +
:i
' , n,
«
es ‘ , f ) ' Sí 1 >: > <>
escribir { ' F a c t o r i a l d e
fin

Scanned with CamScanner


150 !r»
Fundamentos de programación • /

4,13 Calcular el valor m áximo de una serie de 100 n ú meros.


. *"
il u t,
'

• *
•: ¡ í t • }
i i/ < * * :.
Para resolver este problema, necesitaremos un contador que cuente de 1 a 100, para contabilizar los suce-
sivos n ú meros.
El algoritmo que calcula el valor máximo será repetido y partiremos considerando que el primer n ú me-
ro leído es el valor máximo, por lo cual se realizará una primera asignación del n úmero 1 a la variable
máximo.
leer(numero)
n = 1
máximo = numero *
5 [' J
- * *

-
T

La siguiente acción del algoritmo será realizar comparaciones sucesivas:


-
• compararlo
leer un nuevo n ú mero;
• si es inferior
con el valor máximo:
—— o igual, implica que el valor máximo es el antiguo;
si es superior, implica que el valor má ximo es el recientemente leído, por lo que éste se convertirá
en máximo mediante una asignación;
— repetir las acciones anteriores hasta que n = 10 0 . *¿
~

algoritmo Maximo
var i ? s.i
entero: n, numero, máximo
inicio \ v . 1 V.» v ll oí *
I l •v '
I
leer(numero) " > .:AI / " . :
n 4- 1 .V
máximo* 4 numero
repetir
— .. X
\

~ ¿ »
-
w r* -
n -
4 n + 1
leer(numero)
I
*
i : * »

si numero > máximo entonces


máximo 4 numero
fin_ si
— .* A i \ .i *
»

hasta_Que n = 100
escribir( 'Numero mayor o máximo máximo)
fin a •? , '
t *r , i . >

.. - ) - ‘ , "" •• •

Otras soluciones ' ti f

1 . Algoritmo Otromaximo ‘ ‘ .* f ’ ;

var #•»
!, IOS
entero: n, numero, máximo
inicio
ieer(numero)

n «
——
2

máximo < numero
repetir
n « n + 1
leer(numero)
^:
*
f
si numero > máximo entonces
_
-
máximo « numero
fin si « r - A - / *
hasta _ que n > 100mayor o máximo ' , máximo)
eBcribir { Numero
fin

Scanned with CamScanner


151
Introducción a la programación estructurada
J 1
*’

2. algoritmo Otromaximo . : .
í í'-J: h •
, JI '1
« 1 > :' '
•0
9h
*

var
entero: n, numero, máximo 1
' i .* .i * ; /» » 1.441
inicio ~ ti j ~v .r
^
leer(numero)
máximo 4 numero-
repetir _para n = 2 a 100
( r: ;; . iMlioaa

//pseudocodigo sustituto de desde


-
:* *i »V r 3 vr ¿ . *
leer(numero) y cu I
si numero > máximo entonces

fin si
_
máximo 4 numero - mcqfribmídoo noioointem ¿onion i<
^
fin_repetir
escribir( ’ Maximo, ' , máximo)
fin ;
; si se desea
NOTA: Los programas anteriores suponen que los números pueden ser positivos o negativos
comparar sólo números positivos, los programas correspondientes serían:
l
i r
1. algoritmo Otromaximo ir <
i
var
l
entero: n, numero, máximo r*
>

inicio
-
n 4 0 i v/

máximo
repetir
4 0

leer(numero)

n 4 n + 1
si numero > máximo entonces
0
i

w\
máximo 4 numero
fin_si
hastanque n = 100
— íiiBq zubü jim; zzhuil . í * clq*YK? j3

escribir('Máximo numero' , máximo)


fin -
\BZ‘Z ¿Í
’ jcofid
I siviii I
f 1
— f i

í r * J. » , i , ’ ioq , i } ildinoze
Q ü G sbjxi í
2. algoritmo Otromaximo
obcab ni 3
var
entero: n, numero, máximo » t , í i ,; » ' ,
i
' . \ ‘ .
¿Siolü S ,.( >J
inicio
*
i ,[ .1 Á) é‘

— —
n 4 0
máximo 4 0
í L X X
1 y f
* J í !f | í ~ X

desde N 4- 1 hasta 100 hacer


leer(numero)
rV
-„.
'v
r
i r * x
i' X i
si numero > máximo entonces

fin_si

máximo 4 numero A i o: » r
i
fin_desde
r ji

)
escribir( ’ Máximo numero = ’ , máximo
v
<
t
i f*
i r
fin /v

A t

4.14. Bucles anidados. i

internamente , es decir, se puede situar un bucle en


Las estructuras de control tipo bucles pueden anidarse c
el interior de otro bucle .
i

4 *
La anidación puede ser:
repetir,
bucles repetir dentro de bucles repetir, etc .
) dentro de bucles
bucles para (desde

\
fe-
-
Scanned with CamScanner
152 Fundamentos de programación

repetir -hasta_que: — «
Ejemplo !. Bucle para en el interior de un bucle
'

repetir c"
leer( n) lili.
desde i 4- 1 hasta 5 hacer
escribir( n * n ) f
19*1
i »

fin_desde : V . i
hasta _ que n = 0
escribir ( * Fin ) 1 C' íiojc , > i*• • ¿

á para: i
Si ejecutamos estas instrucciones, se obtendr tili
5 resultados 25 v , ) itdlioae
*

25 n 1
25
;¿ í i .
ovrv : ai>'*
t íí Ji
,
25
25
í * »íTt ¿/ fl *

I >upfram
) i • soJ ,KT07
t • o)rr;.* OT .. ;
- run20
- ¿ i j * n( . ' . í;^ j ? ' 'ííüH o í ')í ’Mf rno J
^
n = 2 resultados 4
4
4
r• . á , . 30 or:¿ -:
c ;. >
v /

4 ami •
£ ,.' n ,n :0703:19
4 OÍ D
.%.
»¿

O
n 0 resultados 0 n I T
/ . /.1J
'"
I
^
0
;¿u r.
0
0 : J i *r . * * r>I
:) i

fin
0
ú jDnolio
'
Qy \ * i
i

o .r ,
- n
A
n

Ejemplo 2. Bucles anidados para (desde):


j
* oup _ £ 2 r- i
desde i 4— 1 hasta 3 hacer (cus.'
/; , •ov ’ Xi *
í i •: .
desde j 4 1 hasta 1 0 hacer-
escribir á , ’ por ’ , j, ' = • , i * j )
ill

fin _desde . .i *o o-v Inopia .S


fin_desde * lav
' i X ¿> f , O i * ) m;:i %
fj : .
• . - rj
Los valores sucesivos de i, j,i * j, serán: o 2 ?*lrrl
C > n -
1 i- = 1 J
j
= 1
= 2
i * j = 1x
i * j = 1 x
1
2
= 1 0 -¡ t onuxa'n
= 2
* -inertO r — >: h h c -. b
í e 0i*'1 GC í
j = 3 i * j = 1 x 3 = 3 ' * <

j = 4 í * j = 1 x 4 ‘ iJ I > J.
= 4
Bsoaosnp CB;S :r - In
;> ' c.>,- -4
10 i -Di 1 X 10 a 10
i
-
O U 'WuTi
í u lili
2 :
,
i
j
= i
= 2
i * 3 = 2
i * j = 2
x 1 = 2
( o il r v .«.
vh irh_nl1 .
j
j = 4
= 3 1 * j = 2
x 2
x 3
= 4
= 6
^
‘ • -f• i- a/ i
* , oit
*
- ni ;
i * j = 2 x 4 = 8
10 l * j = 2 x 10 = 20 bin; / ol - I J ' ‘
.
,

.. I

- -
fX i i t* J
*
i = 3 : *

3 = 2
1
= 1
w *t
!

i

i *
* J -
=' 3 X i = 3 '
j s 3 x 2 s j
'
Ifibinc íTsbauq l.: ¡ op ,
. i. , . t _ L1 . . .. .
. . .

3 i V .M - '

^
Di

*
=

j = 10
4
i * j = 3 x 3 = 9

i
-í =
í * ]
^
*
3 .x 4- = 12
- _

j = 3 x l0 = 3 0
.

. - ... •
J A 1 r O l y jH w n\ • .. - V

-
-
. i. . .
•í* '
.
r/ínsbinij •

< nlf * ;

¡- ( A /y - .
* . w ,
mi
,

Scanned with CamScanner


Introducció n a la programación estructurada

Es decir, se obtendrá la tabla de multiplicar de 1 , 2 y 3 . níi.l o»:¿lo mi Ij r ;j í; ;* ' 1


/ i • /

t; t Uiv.í j'K / f sv * o iVjm ? * '. * ¡> i i t.» . < ¿ r / » r . * * It


V fr jIrf
lliK ' '
' to
• ' 1
* * *

Ejemplo 3. La codificaci ón completa para obtener la popular tabla de multiplicar de los escolares ser ía
la siguiente: \ f f

algoritmo Tabla de multiplicar _ _ i

var i
i r*
entero: i , j, producto ;

inicio
-
para 4 1 hasta 9 hacer
escribir( ' Tabla del ' , i) í C
VA ) V * a t i e) :f
. «i

#

para j 4 1 hasta 10 hacer


producto 4- i * j ü 'v
• .r r

__
eacrlblrd , ' por ' , j, = , producto) 1 i

fin para
3!
le. ni *
fin_para vi viM •
fin oíii
( XA:i v trixe . -X c
-
4.15. Se dispone de una lista de N números. Se desea calcular el valor del número mayor.
algoritmo
var
entero: I
real: NUM , MAX
i

V * on nijnv rn •. hi ; —i /

v i. i *:xt
- tyj i twuc ? ,lji
'í r Tint V íJ non? ' I

: •
e n t e r o: N * ¿ i i:.- . ; .
*

.< ¡ofqd&ri :.
f

ir " vv.:íl v - J:r » £ ;. /7 » »*
- /
>

inicio MUí.
• -¡ mimingv
' ' ¡
Jub áb bíVüiT. i Ti i
1 '
- --*/ .

^ - *•>

! Sí ernema on >aramún sb / .
'

Li::si!. 4 ® ®r ( N >: * , / / ; N 0 noo buriles '


leer(NUM) í - :r 3 .
'•

:cn í r; i ,ív ' ,

MAX 4 NUM- » % % A\l; „ !• .0 * , » ' J


desde 1 4 2 hasta 1 0 0 hacer
leer(NUM)
.

‘ rv Vil í / 1
si NUM > MAX entonces . í;H -•

_ -
MAX 4 NUM
. ¿ situsi 'to-’ i> *
,rni') ao
_
fin si
fin desde ;£
'

- v
* /
*
. v >
. oic :j i : s on !
i jJcorvIiS - ro i> *
fin
:us- A"3 mui ) da» ir.LnhUu íó
>* tbttúl r.l nixilil» « matriz j J u q u í uolt. o ü ftq « ú o ¡ i rr n Jf
;
-
4.16. Determinar simultáneamente los valores máximo y mínimo de una lista de 100 números. .

algoritmo Max min


_ tygWsi.AiUr!
*
-
var
I: entero rov' .
im:í.TCQI t
MAX, MIN, NUMERO: real 'V

inicio
*•'n t
-
r s •*
• ^ ^1
X

leer(NUMERO)
t ill
-
MAX 4 NUMERO OO

- -
MIN 4 NUMERO
desde I < 2 hasta 100 hacer 'i ? rv!
* 'J { .: i
*
leer( NUMERO) VI y íi i c v j í a i'
ei NUMERO > MAX entonces BWTNO 3 no rr * -
• is

si no
_
MAX 4 NUMERO - :
•> > • t
~>
r
Á
»
3
l ''
I I O i: * .. K •
'
U

__ _
si NUMERO < MIN entonces O'
" ;

MIN 4 NUMERO
fin si
- V T >

fin si ‘r , ni
fin desde , MIN) t f <"j '\ p? i ;y 2
escribir!' Máximo , MAX , ‘ Mínimo
1
1

fin

Scanned with CamScanner


154 Fundamentos de programaci ó n r
‘ Wv.

4.17. Se dispone de un cierto número de valores de los cuales el último es el 999 (no se
procesa: es final de
lista) y se desea determinar el valor máximo de las medias correspondientes a parejas de valores sucesivos.

-
algoritmo
var
* I •.
• i, *
Media _ parejas'
1•• '
. * * | ‘
1* ’
'

I .’ / .J r :- r , .. » ! '• . í 1
--
U M Mipi
1VW‘? W. L\

entero: NI , N2 • vi uml r 11
real: M ,MAX Z L' J
inicio ' "
. :
leer(NI , N2) oioini
MAX 4- (NI + N2)/2 -r •

mientras (N2 <> 999) y (NI o 999) hacer * , lvJ . rton -a


-
M < (NI + N2)/2
si M > MAX entonces
i r
t it

MAX 4 M - ( cor
. \ -i- V . ilciL'toa ^
fin _si
leer (Ni , N2)
JLi 'Xfi - l . .l l c
ac ni 1 _
fin_ mientras nil
escribir ( ' Media maxima = ’ , MAX)
*v ru entrona í L ioiu 7 \ ij IGIUOIBO í> > «b
^ ¿oidoitm V-, oh cf
ói í enu ob onoq * ib .51!
«

4,18. Detección de entradas numéricas — enteros— erróneas. .


jVV

Análisis 'T A .

Esta subrutina es una aplicación sencilla de «interruptor ». Se sit ú a el valor inicial del interruptor
( SW = 0 ) antes de recibir la entrada de datos. o ID ¿ai
La detección de números no enteros se realizará con una estructura repetitiva mientras, que se realizará
si SW = 0 . La instrucción aue
que detecta si un n ú mero leído desde el disnositivn
dispositivo de entradle
entradas es entern:-
ec entero
. .r i — « u«
leer( N ) - - osrí
£? -* I íí l) 3 S? fc
Mwilfieol
realizará la comparación de N y parte entera de N: aaor. - jjr.s . ’ . r, . te

• sisi son iguales, N ,es entero,


y - — --• XAH
nn
• son diferentes N no es entero. t - asb
nil
Un método para calcular la parte entera es utilizar la función está ndar ent (int) existente en muchos
lenguajes de programación.': t;ar, ah cmmiui v omixSm «aiolcv not airwraiíanJUluflii waiimalaCI •

Pseudocódigo rí t v :.a *
c m 2 iioij í '*
*
!DV
algoritmo Error
var OX

XAM
entero:SW oloial
real:N
inicio
SW -o
4
mientras SW = 0 hacer
OZHIVCV, > XA>'
- -
* .
• . í'* — .* « » -
r \r *
* s/

* : 0 b**b
»• — *

*

.
leer ( ' dato de entrada ' , N ) • ÍJ -
si N < > ent ( N ) entonces cssnccí n ** i !; ln jn

-
*

escribir( ' Dato no valido ' ) v *


> XAM
escribir( Ejecute nuevamente ' ) on„2 c
ei _no . Mr* :-
. JM le
escribir( ' Correcto', N , 'es entero * )
SW 4— 1 i Si n 11 _ t

fin _si Jr .ai*


fin _mientras .ni i
fin
nii

*
i*

Scanned with CamScanner


Introducción a la programación estructurada

.
4.19 Calcular el factorial de un n ú mero dado (otro nuevo método).
Análisis r. . C /i 3
' 'i * ' ll £

El factorial de un n ú mero N ( N!) es el conjunto de productos sucesivos siguientes:

-
N! = N * ( N \ ) * ( N - 2 ) * ( N - 3 ) * ... * 3 * 2 * 1
r •' , T

i
» t
1 .
' s»

L* ? ) ro.Vi *
> n 1
Los factoriales de los primeros n ú meros son: r, i * V T »*• f.•* .

1! = 1 -
neonodnfl
2 ! = 2 * 1 = 2 * 1!

ri ¿ L * . *
7
'

.* .t : 1 j O ií
3! = 3 * 2 * 1 = 3 * 2!
*

* ; * *
.
41 = 4 * 3 * 2 * 1 = 4 * 3! r
:f * c\: nil
i
•j í x
*

;*
i

M = W * (N - 1) * (W - 2) * ... * 2 * 1 = W * (W - 1)! n i1

Los cálculos anteriores significan que el factorial de un n ú mero se obtiene con el producto del n úmero N
por el factorial de ( N - 1)!
Como comienzan los productos en i, un sistema de cá lculo puede ser asignar a la variable factorial el

valor 1. Se necesita otra variable '1 que tome los valores sucesivos de l a N para poder ir efectuando los
productos sucesivos. t ¿ »6 & nnl íoq oiasiq 13.001 loq .OC lot
Dado que en los n ú meros negativos no se puede definir el factorial, se deberá incluir en el algoritmo una
condición para verificación de error, caso de que se introduzcan n ú meros negativos desde el terminal de
entrada ( N < 0 ) .
La solución del problema se realiza por dos métodos: ( , , .. .. .

1. Con la estructura repetir (repeat ). : ' r> x L. . r- r ':- nr - 2 ib - 10 - 1 . í


*

• > ¿p
.(: .f.
2. Con la estructura desde (for), notzeiub rO
*?
í .•
. .C

--
e13 i 1 ó ; AU’ ¡

Pseudocódigo n ,t
t
r. » :¡MU6
I • 1% I 1

t

i
.
.
• - • • .
!f f •
w i.
;

J
M étodo 1 (estructura repetir):
' i.

•r*» :
:h
\
"

“ •
*

' * *
'TO X O b J i ’ ó
l -
* • * * -
v


0 ’ •>
;i
oi
f; 7 0 7 o : _ *

•I

algoritmo FACTORIAL . N i

i "
var
r entero: I, N
real: factorial L: .
inicio I üV
repetir '
4 • t . i ;•
Ieer( N ) »

-
*
hasta _que N > 0 oi Jlrl
factorial
1 -4 1
-
4
— 1
. ’»
» •
i < j i
i „ ; .i i

repetir tí ñ' j i x z j n a ; v 1 2
factorial * I
factorial
-
,1 4 1 + 1
4 oo. o¿ • * Tí - -i
% .r. r 1
haeta _ que I = N
escribir ( factorial )
+ 1
- V
^
í
4
í,
< j; " » : 0- . “ v ó . . i . ' Tí »
¿ "

nil
fin

Scanned with CamScanner


,A

ón
156 Fundamentos de programaci »

SU 1

):

' íl

M étodo 2 (estructura desde


algoritmo FACTORIAL >
i t Jj
*

/) OJ
var
. . n]j v ormino; i t

entero: K , N *

real: factorial r. <


%

r k \
A
inicio
leer( N ) i )( I
si n < 0 entonces positivo )
escribir( ' El numero sera
si _no
rV

factorial < 1
si N > 1 entonces
— I
-. -
^ i
I

r
-
pf

desde K «- 2 hasta N hacer ir * t i í i

factorial 4 factorial * K
-
fin_desde
fin_si
factorial )
escribir( ' Factorial de ’ , N, =
'

y\ ) * i I \\\' V\ r VA
fin_ si
fin
.
Vi » \/
*
r. r
t
- \
<

vh 4o í ? f .' ir
ti i .» CLp íU
1 p.
O í:- ", ?.lv.: ofrabov 1- * i : , o :v ovjf ü sjn nts
ft r - A\ ob isnói j/:í tt?:ocj

4.20. Determinar el precio del billete de ida y vuelta en ^ferrocar


ril, conociendo la distancia a recorrer y
de d ías de estancia es superior a 7 y la distanciá superior
a 800 km el billete
i sabiendo que si el n ú mero
tiene una reducción del 30 por 100. El precio por km es de 2.5 pesetas
. > y?

¿
no ; • v. tv
. . /I# .
il & 'l ü ft T
-
. ' u; V
cu
i
- i s< dup t>b•
}>?. \iü ¿v

o jorí >
Mri » . «"/-
iu¿ íl / 1 I rt uoibnoj
y


Análisis . v > w) com iv


cpfjpti maob c l L :<
j
,,
Las operaciones secuenciales a realizar son: . ^ •
. .

1. Leer distancia , duración de la estancia y precio déí kiló



m e t1r o» V’
1

s 3
2. Comprobar si distancia > 800 km y duración > 7 dias. *• • >

3. Calculo del precio total del billet e: i

r v * •v*
• si distancia < 800 km o duración < 7 dias
precio total = distancia * 2.5
• si distancia > 800 km y duración > 7 dias
precio total = (distancia * 2.5) - 30/100 (precio totaij1^0^10'
- • : Le i &03 ÍÍOt[ -
Pseudocódigo
; .. ' i e

algoritmo
•> * : •
'
o
Billete j o in i
.
var
xí3 '
^
entero: E
real: D , PT > f -tSOt
inicio Ó I4 Ü LT
•»
i
leer(E)

PT < 2.5 * D
v 5:
r
k :
i
si ( D > 800 )y ( E > 7 )entonces
PT 4 PT- -
PT * 30 / 100
«i
'
r * . , u .
fin_ si
-
4

escribir é Precio del billete ' , PT) T 9


fin
al %

Scanned with CamScanner


Introducción a la programación estructurada

.
4.21 Se tienen las calificaciones de los alumnos de un curso de informática correspondiente á lás asignaturas
C++/C, Pascal, FORTRAN. Dise ñar un algoritmo que calcule la media de cada alumno.
I r. i o L 0:1 rJllOQtr
Análisis '¡ . M

.
o nuT , í ifl . i b n* í' £ Z

Asignaturas: C+ +/C í ^rxo:. % TH :


O Í D , iT >
Pascal
FORTRAN : ;i íí '
f , r í e?
s /. . •« . * r> i ' J lo
•3 o DXJ c > J n ? o . ; .. . i b
' • o^ r . i a
Media: (C++/C + Pascal + FORTRAN ) TH * COc? ItmvL
3 Oí*...
-a
:» •
TI : * 008 - » Iftjí ioL
} r ¥1
Se desconoce el n úmero de alumnos N de la clase; por consiguiente, se utilizará u ña matea final del
- .1 ^
archivo ALUMNOS. ^La marca final es - ' *** ' y se asignará a la variable; ;nombre.
^
9 A M O»
" 11 *
““ 1

AH O *j r or n . J V> i v I i. C ri i / '
In
TH * 01 V Ir ^ rí oL
Pseudoc ódigo
TH * (H ' J : :r - rioL
a l g o r i t m o Media
...al 3
var
cadena : nombre
( C / . Tjrc
ni *
real : media
real : COMAS , Pascal , FORTRAN
inicio
«9ldíffOa «OÍ iJnw Sü p fl iho Iü jf UlÍl/ll2íJO ) «££*fe
/ / entrada datos de ‘alumn'ds
leer ( nombre ) - . Al Tldeni. v t ! oinjfbfK *;
"
^
mientras nombre < > * * * * * hacer
l e e r ( CCmas , * Pascal , FORTRAN )
media < —
( C + Pascal + FORTRAN ) / 3
e s c r i b i r nombre , media )
(
ú iMiui
leer ( nombre )
lOD BOBm
. . M r
1 3D t »*
ób 00831
. .
í Ü3 GltWenOO
. . óm 13
HJJgtt E obof
,
fin mientras *

fin
cs'-nu . f
83TÍLAM . T
4,22. Los empleados de una fábrica trabajan en dos tumos: diurno y nocturno. Se desea calcular el jornal dia-
rio de acuerdo con los siguientes puntos:
*

'A . r
~ V . c1
f
*

OGAEAS , d
1. la tarifa de las horas diurnas es de 500 pesetas, O:::MOO . v
2. la tarifa de las horas nocturnas es de 800 pesetas,
3. caso de ser domingo b , la tarifa
se incrementará en 200 pesetas el tumo diurno y 300 pesetas el tumo
¡¿
T« !t »rl r>o \ <
. -<’ ' AiiU
' :

•' : -
(
1» i . \ ¡*
t - ° , :
‘ •

y
.
- - r ; ííTc ia uutMiui9 isl oK oqo n < ; ¡
jr»i < n •.s KA
¿
wo s
¡ nvr ab afeitaifef to iZ
¡boa
- .
. c >?
( - ; otrgbH OT » jlc« - ? :: i obotdm \ttnon
Análisis obo) V; ¿ ;

El procedimiento a seguir es:


..
o V V.rj ¡Vm Y<S
1. Leer nombre del turno, horas trabajadas (HT ) y d ía de la semana.
2. Si el tumo es nocturno, aplicar la fórmula JORNAL = 800 * HT.
3. Si el tumo es diurno, aplicar la fórmula JORNAL = 500 * HT.
4. Si el d ía es domingo: ,
JORNAL = ( 500 + 2 0 0 ) ) * ht,
• TURNO DIURNO
JORNAL = ( 800 + 3 0 0 ) * H T. '
• TURNO NOCTURNO (

Scanned with CamScanner


ón r. ov v.' vv \ iH
158 Fundamentos de programaci
!¡ o n- IU
. .- h !f( ¡’
, i . ! * it.> • ' ,

-

-

Pseudocódigo iltti •. < ti



! .' i , /! »

j IJ íí UU ; OLD . J
4 i»
^ J ! ' IIIJJ í I . :.u
) M C !i |¡ ,r ) '( ' f .' /

algoritmo Jornal
var
cadena: Dia, Turno
real: HT, Jornal
J t
f. .M
) •
-r ¿ iniM í l / /

inicio •
*
í
2eer(HT, Dia , Turno)
si Dia <> ' Domingo ' entonces
si Turno = 'diurno' entonces .‘ 1» / A I>!I TI /< 1» * Y* . 7»
/
* / i
l í i J rnrCf
,
l* •
-
Jornal < 500 * HT
si_no

.
-
Jornal < 800 * HT
_ .. ti ) . ; rjrf K¡ !C> y j( ; i VOVJ 1 ;
hb i L;.’ i no si
fin . . •: I, I .
;rJ.L . o /iri jio
si ' i. '
' diurno ‘ entonces
¡¡•‘'
•'

I l . 7 *
'

si Turno
Jornal 700 * HT
si_no
Jornal 1100 * HT
«
^ikiv>ouufiA
f in_ _ si 1
líenle
fin_si 2 SV
escribir(Jorna1) ft i tir ó n :
fin sebern : í SJI
'

? •
i V •

.
4.23 Construir un algoritmo que escriba los nombres de los días de la semana, en función de la entrada corres-
-
:> r O ir; ?> ,

pondiente a la variable DIA. . '

Ii
' t
/ 3?
T r* I i , >? *

Análisis l T - • J
')
|
— W 4\ '•

i .' ;.
T iir"
- ;
a- rve
•i '. í í TVeO
% I.
El método a seguir consistirá en clasificar cada día de la semana con un número de orden: %

J 15
:
1. LUNES
2. MARTES

i , m & eobfislqnw ?.oJ Si


, ,,
4.
5
JUEVESLES
. VIERNES
' ' ! 7 ‘ • inmb
!f . - ¿ ‘» 1 111 y '
j « : 1 >• L . -! f *!’
*
é

6. SABADO
7. DOMINGO

, ' K'
* '‘
: v ; 01 :

'
- > • >»
" Íí'í tt ;! ,

-• * .<
r,

•'
,u í i
*

' n \
'1 *
o
L .M ; UII &1 í
h ctiifij ti! .
'.

Si Dia > 7 o < 1 Error de entrada: Rango (1 a 7). -' * . J •

- ‘
f IIvi : ,,
IT
C > lt í - JIJ murj
'
* (V


' ji • *1 •
iUW
Si el lenguaje de programación soporta sólo la nn\ » .\::í
& C n d mét d 1; Cas de
estructu ra si entonces si_no (if -then else), - - .

-
método 2 ° °° soPorta r la estructura segun_sea (case), la codificación será el
°
hu í "

Pseudocódigo
,, .

i; o.Mj inib ^ n - ] 1 H - '

í I » »• « • <•

'
• «I!
, f

« ni i i in : ki f

..
; /
• •

,.

M étodo 1:

algoritmo Dias_semanal
a í

'
“ '«HU t . 1•
i
:
.omm # . i** omits h «? .£
.
v ; » í H;I » > » ,!> , . rp ., i \ , ¿ ¿
var * |f ^ / 31 (¡A . « .1 * *

Dia: entero ’ V'- / . v Vi •



• ' * *
.,

. V ’ óV . C.V1 T TV a -

Scanned with CamScanner


Introducción a la programación estructurada 159
¡ .' " ’ •: ' • *
’: ‘

inicio ,
,
leer ( Dia ) '
' •‘
• • I j
s i Dia = 1 entonces
escribir ( LUNES ‘T - ’ K 1
. • r . , r\: , í :'j í • *

^ ÍV
j

_
«

s i no
i .? s i Dia = 2 entonces
escribir ( ’ MARTES ) 1

s i no _ Pí . iV ) Í ’
)V . Y / < - . - , r. .
7
. ‘
vn
4 . U. s i Dia = 3 entonces . \ t • > S f t A \ l Z / * jV. . • - V :
v Í , JV,V « n i
# ’
"

, . i 5. escribir ( ’ MIERCOLES ’ ) ,
*
s i _no
s i Dia = 4 entonces - " Y SV AYA a • V - V n > i\ . /A r
* ' *

escribir ( ’ JUEVES ’ )
®i no [i
- v ,l
> '
• •
, ' . A J
s
,
i Dia = 5 - entonces
• . • V» . • . ,
* I *
• %
» 4
* •• # f *
1

escribir ( ' VIERNES ' )


8l n
- °
s i Dia = 6 entonces 20Í0I0SHL3
1 % , s

.r ' 4* r: ? i C MVnH escribir ( ' SABADO ' ) , .


SEC
s i _no . ts ¡vi # i
.
, . . .
.i. .!. *
. •
. , ,
0 t> ovjinu í i • t * * ? of . !r r o
* i
• • •
s i Dia - 7 entonces ' ¿ • >

: : "
escribir ({ ’ DOMINGO .’ v)
- íYu> . . ; ;; :r: •>> > . . r, * •
> u* : • >

s i no _
'
escribir ( ’ error ’ ) 5
'
;, v
: ^ '
; •
:-/ ! XX
escribir é rango 1 - 7 ' ) .o b l i g o»:,, ; ,;

_
fin si ti - 0( Xl. I ( ¿ sDnseotnrn lan un *J soboic , 97 i <iuÍ 3í
. . .
••• 1
.c.u
) .
' £ uJUls T ñlooo v i jiiL .
’ í . i ; tu ; ‘ Jj ¿ 13 vb ó e Hite c - .. 2 .rt.í-
' S B MU tsno .
* * íO 1
\ .
j *

i n_s
ffin
r fllli
*
*
« 2 »P . . . «noli
.

i el - z A
.( t > f i n s i fte» M Ü aü pc « íí;bo! ibiibeb / fioiiiimólnl <
XX
¿¿si* sb iitom ti v ?.o riji^oq /.o\ rmah fl . ot niun * X)|
f i n_¡ü
^ ^
f i n_s i
s i^üft70í / ibE / f>lrt¿Sbnoqa írno4 riort ns zolujins db «í KJ ü ¿ob ; ü Moqaiboiowmoo r¡ ’ J
^ .QX
fin
' .? i <i .. * 0 :< onrn;o / oinoiati
.
^ ^
1 * ? A oiin'ms I i o; ribf » :
, OIíJ'¿I )U * jb ohc í inti- oiotnq «
^
225 .?uluJins ab crraaifjíi
^
M é tbdo 2:
> .
^Y f algoritmo Y . :r v ‘ ;; / / . ^b o/ ubw f
ib wJofl ills sj

*
BíI
^
var
«M A ni
Dias —
._ semana
- - = 2O
» r » » ftiw I » «

23Jí «ol&nlna eb mmim b ^


Dia : e n t e r o .
; . í\B .
io ob wdu:St . cJoi odoqai . • .
r '

• * inicio * **
nf ,
l e e r ( Dí a )
« .
í fffXÍ » lfiq
|fí»l obl í •' iní ishicqoi
úq Üü ; - nono* nj : Y*.
s e g u n d e a Dia hacer .
a

^ • f*

; fcir¿g!¿s. ! . H.
,
• 1 : escribir ( ' LUNES ’ ) j ioqcnq : t . : -
^
.
, : f /. ? . •

2 : escribir { MARTES ' ) f ; . .


t( \í f!J
3*5 :. escribir ( ’« MTrppnr
MIERCOLES .PQ * í) 1
> ‘
m. 1 ;
4 : escribir ( JUEVES ’ )
1 .U.b
5 : escribir ( ’ V I E R N E S ’ )
6 : escribir ( ’ S A B A D O ’ )
A
..
7 : escribir ( ’ DOMINGO ’ ) it
? •
^ X 4. J , í x )rA
s i _.no escribir ( ’ error de entrada , rango l - 7 ‘ )
fin _segun
fin U «
V >f - J VA ; wLr.:í
¿
* :;i •
> !>!íp

A ir , '! .
tlfi » r 7 fi! :,M ; «!

Scanned with CamScanner


160 Fundamentos de programación
o ir; ir. }
números de la serie de Fibonacci .
4.24. Realizar un algoritmo que escriba los N primeros .
- ¿n :
siguiente
.
a
'•

.
y se genera de acuerdo a la ley,
NOTA: La serie ( Fibonacci es 1 , 1 , 2, 3 , 4, 8, 13, . . .
^
eeoiiocjuv .
Fibonacci 1 ) = 7
-*

( : :t \ • '.
k
- j
Fibonacci( 2 ) = 7 on. ¿ n
Fibonacci( 3 ) = 2 = Fibonacci( 2 ) + Fibonacci 1 ) - iO
Fibonacci( 4 ) = 3 = Fibonacci( 2 ) + Fibonacci( 3 )

eorno

on. la ,

C ¿s
FibonacciN . para N > 1 ) = Fibonacci( N - 1 ) + Fibonacci( N - 2 ) rojmv
/ .ifij; . ‘ib. 'noa*
!
alumno. ca- in
MOTA: La realizaci ón del pseudocódigo se deja como tarea al
pf ono ns *a
)

{ ’ ¿¿¡ L/ia
^í V ^ t

on i. 3
EJERCICIOS aoono^ r: *) :* - r' i
número negativo.
4.1. Determinar la media de una lista indefinida de números positivos , termirtádós con un
4.2. Dado el nombre o número de un mes y si el año es o no bisiesto, deducir el nú mero de d ías del mes.
4.3. Sumar los números enteros de 1 a 100 mediante: a) estructura repetir ; b) estructura mientras ;
"I 2.7J UOBU

c) estructura desde .
4.4. Determinar la media de una lista de números positivos terminada con un número no positivo después del
último número válido. >
4.5. Imprimir todos los números primos entre 2 y 1.000 inclusive^ . - ¡ nr
^
4.6. Se desea leer las calificaciones de una clase de informática y contar el¡número total de aprobados
tn

(5 o mayor que 5 ) . lz _n ¿ i '

4.7. Leer las notas de una clase de Informática y deducir todas aquellas que sean NOTABLES ( > = 7 y < 9 ) .
4.8. Leer 100 números . Determinar la media de los números positivos y la media de los números negativos.
4.9. Un comercio dispone de dos tipos de art ículos en fichas correspondientes a diversas sucursales con los
siguientes campos: . .

nil
• código del artículo A o B,
• precio unitario del artículo,
• número de artículos.
.S.

La última ficha del archivo de artículos tiene un código de artículo, una letra X. Se pide:

•el número de art ículos existentes de cada categoría,


- _
. .-..• ns í r. Í. L ¿ G OCrttlOfcXli
-i />v
•el importe total de los artículos de cada categor
ía . o ? me : : a -
cirial
4.10. Una estación climática proporciona un par de temperaturas diarias (máxima, mínima) (no éspósible que
alguna o ambas temperaturas sea 9 grados ) . La pareja fin de temperaturas es 0,0. Se pide determinar el
número de d ías, cuyas temperaturas se han proporcionado, las medias máxima' y mínima, el número de
errores — temperaturas de 0o — y el porcentaje que representaban. ' - ui ' ° 1

4.11. Calcular: - . v '


;

1 '
’ ) ;
__ . v .
' ‘

2 n
X Ti A K;
E =
( x ) 1 + X H h ... + i ^
2! n\ t
*• -

• llcAbiaa * : ”

"
K > -] ic* ) llrv. 3 ií ;í en ¿ c
nup9.2 L1
a) Para N que es un entero le ído por teclado. .!

-4 rtM
b ) Hasta que N sea tal que x"/n < E ( por ejemplo, E = 10 ) .

j
Scanned with CamScanner
Introducción a la programación estructurada
161

4.12. Calcular el enésimo término de la serie de Fibonacci definida por:


Al =1 A2 = 1 A3 = 1 +2 = Al + A2 A =A + A , (n > = 3)

4.13. Se pretende leer todos los empleados de una empresa — situados en un archivo EMPRESA— y a la ter-
minación de la lectura del archivo se debe visualizar un mensaje «existen trabajadores mayores de 65
años en un número de . . . » y el número de t trabajadores mayores de 65 años.
4.14. Un capital C está situado a un tipo de interés R, ¿al término de cuántos años se doblará?
4.15. Los empleados de una fábrica trabajan en dos tumos, diurno y nocturno. Se desea calcular el jornal dia-
rio de acuerdo con los siguientes puntos:

• la tarifa de las horas diurnas es de 500 pesetas,


• la tarifa de las horas nocturnas es de 800 pesetas,
• caso de ser domingo, la tarifa se incrementará en 200 pesetas el tumo diurno y 300 pesetas el tumo
nocturno.

4.16. Averiguar si dados dos números leídos del teclado, uno es divisor de otro.
4.17. Se introduce la hora del día en horas , minutos y segundos . Se desea escribir la hora correspondiente al
siguiente segundo .
4.18. Se desea conocer una serie de datos de una empresa con 50 empleados: a) ¿Cuántos empleados ganan
más 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

1 2 3 4 15
** ** ** ** ** ••• **
1* 1 2 3 4 15
2* 2 4 6 8 30
3* 3 6 9 12 ... 45
4* 4 8 12 16 .. . 60



15 * 15 30 45 60 . .. 225

4.20. Dado un entero positivo n ( > 1 ) , comprobar si es primo o compuesto.

REFERENCIAS BIBLIOGRáFICAS
. •
‘' •
- ' : ’ t '•
‘ p
Harmful » , Communications of the
• •
• w' (: .?' Í i/ f *•
(1) DIJKSTRA , E. W. : «Goto Statement Considered ACM , vol. II ,
núm . 3, marzo 1968 , págs . 147- 148 , 538 541
, .
( 2) KNUTH , D.E. : «Structured Programming with goto Statements» , Computing Surveys , vol . 6, núm . 4,
diciembre 1974, págs. 261 - 298.

Scanned with CamScanner


Scanned with CamScanner

- W.. - ^
« VSilW * f *. . ; í *
*' » ; .
!
. * 4 .N .-
.
i t

Y- OX C
*
• V *i f V4 " • •
*
'
. «'
:•

v t
Uf é *’* 1 O
^"
" *
K'

-
1 ,

i ! •• / .
"
i < ¡ •: ' . • U\ r .- ,
. ,
r r HYi '
' ** If i
JU

SiBnOebVHCVS

• ;< >' D;:í i n|1 ° ;


Í ;> *
« ¿ libl ^ u ^ k. n c,r UUJ .M * . « ; oi í : ' .r
j j
í< >

U* 12 30 t2 W 32

*
T< 1 « 13 10 (Mi
. Yi • &: *
0 Jj 12
3 ’ 1 H 30
4 '5 1 , 5 ^ 4 ¡2

-
°
**
• -

y i ' jtum ry - i ’ t'.;: < •'•


; _ ¡r. Kv 'í ; ¡

in' * * !
i .
» -* *

.
**
V

. ? . - t]
NJH
**
*
*

ic i -
; ¿¿ *
:
<y -.
u
4

< • ' '


i
— ¡ '

'7; \ ‘ i.. r -
<
- -
f *r : - -
* < ’T * L i k.v ¿ > •.* )
'

r
v r''


'
• • •
' •
" . t i >.
i

••
• .• •

r; "
i
- íIíK
;i« » '
'
. .
J
.' c o i
.
.

,
.
.
>.
'
. •

¡t eta .
• , ,r
// u- •
- ih JO

¡ y /• :J ); i 't - tit ; í U .- . ú ; • .• r
'

> , „ ¿c qr>
< ;-; - wj o ^../ü'ü.qyu : ', rj•
«

f|(r //.cuSnan. 2i qaqov UQWCJ.' ? í • '


; iqo n J . iqc . • .

L iKfJJUJO'
4 ero re *a ;sr jjíü VJ ; ¿ . » YJOT / *; : ;; •
; q :Y n / v < LL o, , a *

t ;i j > Liy ' nui ri. . - ?- * ;( .; j r :• - *

^ ¡3 í'TLII 'í r, r* *r ;W r ; SuJ7 ^ : iV


? :

i:o qs criGiqo - ;o -;
:2 • W / ':r
' '
• ; •
• uo . jwpsl ü u ;u
• •

r íT ¡ u r jbiiTT] 7 - - -
unt ; • y w r.; í qr uu ^ r. »
4 * ? !
: *

^
'

^ GU .*] . i rtr - - _ - iC
! (
if M *
/ ¡ unaj >
iy * *

. vi *
-

UJllJi Cl HJ • : i • -
*
• I ; 2Clacfcuqt ;• •

- '
¿ b|QfC|( - qc ti - v ' * ' "

1 - 1 ’

ri ; * B
\ +svi - 1J
*
J
> .* Vi >- n *

I ? y /¡r/ i|Mc¡ . . . , MI ó q& ¡3 .u >k ( p: ¡ypoiiirc:


< i v nq » > ;

vc .vo -.' - “ '

-> •' * iC ¿
^ • , • <
« V
I iI *

ov or IS 2 Oh 3 Uq r y >.

V * « 1
:iu)iqf.o 3?-i* r : .7
p
<
. cl ^ c:o > • z -r. \ f

x»*
r l»* » «1 I
n
"r.CAP ÍTULO
! ir n

HOOUiO - J í ¡

SUBPROGRAMAS (SUBALGORITMOS):
PROCEDIMIENTOS3Y FUNCIONES
AivA: U I iH i * r
< ! , •

hi '
'

: L) . Í ', I- obo? £ m TlU


‘fio : r;
'
'
'

n •> ' a >f ¡ ;- o; ,' i


liJ -i / i . . •: — ' oUhn v
',í;tmiro nr/ d / . .

J' tn 'v v vb r. .inv.- j ni. i .rj /!'Vj; vt» .livid r . & v ' ;> ' { * n i >iq ¿nl
! f

. '
* <
¿•
* * I
.. \ ' • ? \yi t */ ' / •• ¡W. i. nifi ; r iv ^ • •
' -
i

¡
' .
<

r, . >* > i * ) r!. } t

. - r »~• . *. » - '
£; ::v /J r r
- : t í!? tV » tj V • -' h,
CONTENIDO 4 - .

fik * « . .. f .
;. *M. . V >
ir • *
o _> «!!. I •1> . . ) •
;
r,* n* : fia V üO -
5.1. Introducción a los subalgoritmos o subprogramas.
gm 5.2. Funciones. , t* .
5.3 . Procedimientos
_ . ' ,. ( subrutinas ). . . . .. • .
. . . . , OfT! /if? I <
: variables locales y globales. I
. |
I
5.4. Ambito • ^ L >.
5.5. Comunicación con subprogramas: paso de pará metros.
>
, •
'
5.6. Funciones y procedimientos como pará metros.
5.7. Los efectos laterales. ' ‘
. ü ^ - J y iKqionnq cmeigonq
> -
9t 5.8. Recursión (recursiví dad). >bi : >IUDü:O lob wnsldorq '

ACTIVIDADES DE PROGRAMACION RESUELTAS


i n TAP
.
.
: f í. í i ú i ' i' j í ? > v c > i; í i
nPoi
ü bsno "
'

-
EJERCICIOS. . ' i *: » !. .u i- \ >r.' , . ;V. V - . „
ti n >' v í o L - i . >li; „
. * 'JIíIIL,: vi r»i> &;* &?. • < . sy.uVs rvyW?, A

* ^
La resolución de problemas complejos se facilita considerablemente si se
dividen en problemas má s pequeños ( subproblemas). La solución de
estos subproblemas se realiza con
subalgoritmos. El uso de subalgoritmos
permite al programador desarrollar soluciones de problemas complejos
utilizando el método descendente introducido en los cap ítulos anterio-
res. Los subalgoritmos ( subprogramas ) pueden ser de dos tipos: funciones
y procedimientos o subrutinas . Los subalgoritmos son unidades de pro-
i
aim « v í: J . . grama o módulos que est á n dise ñ ados para ejecutar alguna tarea especí-
fcrsi*..» -i? iv-.dK *. •
'
fica. Estas funciones y procedimientos se escriben solamente una vez,
pero pueden ser referenciados en diferentes puntos de un programa, de
\ ’¿ HM . r; ' ’
* i
modo que se puede evitar la duplicaci ó n innecesaria del código.
El uso de unidades de programas en el estilo de programaci ón modu-
»<
ti > .!
;
¡ lar son independientes ; el programador puede escribir cada m ódulo y
la detalles de
verificarlo sin preocuparse de los otros m ó dulos. Esto facilita
, considerablemente la localizaciónmodo de un error cuando se produce. Los
son normalmente también má s
programas desarrollados de este
que la estructura de cada unidad de programa
'* ! ' >; fáciles de comprender, ya

163

Scanned with CamScanner


164 Fundamentos de programació n

nte de las otras unidades de pro-


t- puede ser estudiada independienteme

i
“5
w

_
,
Oí ?, ] !mroCduceeP a mbién el
"Teste
.
,
concepto de recurs V/dad como
0una
.
capítulo se

mienta de resolució n de problemas


deten í as

-*
:
*
. V . v* .^ .'
.
V > *i
£ *
nueva
£«
herra-

- . ; A

.• £ *• Ir
r r » *
- k> w; y
'
M . J >
*
r , I ' .
¿ n
#

*
* «
V - '‘

5 1 ’ INTRODUCCIÓN A LOS SUBALGORITMOS f i 3 8


~ O SUBPROGRAMAS
Un método ya citado para solucionar un problema
complejo es dividirlo en subproblemas pro-
subproblemas en otros mas simples, hasta que

blemas más sencillos y a continuación dividir estos
los problemas más peque ños sean f áciles de resolver. Esta
~

técnica de dividir el problema principal en
stgjnétQdglfcdr&e ñar
snhprohlemas se suele denominar «divide v vencerds» ( divide and
cgn ngr
subproblemas se conoce como ^ ^^
^ ^
l gólíin ó dft-iin-prnhlema principal obteniendojas soluciones de sus
-
diseño descendente (top dow design ). Se denomina descendente, ya que se inicia
en
.
con un problema general y el diseño específico de las soluciones de los subproblemas Normalmente
superior
lasarte
las partes en que se divide un programa deben poder desarrollarse independientemente entre sí.
Las soluciones de un dise ñ o descendente pueden-implefflentarse-fáulinente en lenguajes.de pro-
~

gramas~draIto mviI7como C/C-f +TPascalo FORTRAN. Estas partes independientes denominan


~

súbproeramas o subalsoritmos si selñnplearTdesde el concepto algorítmico. .


Eáxorrespondencia entré el 3íseño déscéndente y la solución por computadora en t é
-
rminos de
_ ^

^
^
’ ’

.
'

programa principal y sus subprogramas se analizará a lo largo de este capítulo. j ¡ r / ¡n sJ T .;


Consideremos el problema del cálculo de la superficie (área) de un rectángulo. Este problema se
puede dividir en tres subproblemas: 8ATJ 3ua3H )AM / flooflS K) 33QAOIVITOA = J' ,J
Subproblema l : entrada de datos de altura y base. " “ ^ “

Subproblema 2: cálculo de la superficie.


Subproblema 3: salida de resultados.

El algoritmo correspondiente, que resuelve los tres subproblemas.es:!


~ ' • * •)
J
*c • - iiJoiq • nebívlb
' ' ' •

leertdatos ( altura, base ) ) / / entrada de datos 'u; 'o


1

area
escribir r bre
, / ( base*, al
,
tura
altura, area ) n
flcV / calculo de la superficies
/ / salida de resultados
-- . *
" ' 1
• v ', i •
V ; •>*
* * » * #
*
* f •
# 1 *
C t\ 0 K •v , . t m

Elmétodo descendente se muestra en la Figura 5 1 .

^
8 ® m ,. e denominan tamtnein¡¡KSjoriímOTr~
Un subprograms Duede realiza, li
! q *
?deSv resTaL rrecibe >
^, ,La ^
pr0gr ma: 1 aceptar dat0S 21
realizar alguno cálculos, y 3 «
programa para un propósito específico. El subprograma
ve resultados. Haciendo un símil con una oficina el oroblema «
-
desrf
desde
ííen
.dl
barg0
' se
programa
uti iza
y le

'
r
devuel ^ dLt

¡ ! f-
a sus subordinados subprogramas ; cuando a '
se -
t ñí

Scanned with CamScanner


Subprogramas (subalgoritmos ): procedimientos y funciones 165

Problema ;
? *

*
;* '
»

Algoritmo
- ''Y »
i -» **

principal *

principal
I/O’ ' ¿
fJW
"
;i'
í i' » • ' ?í
" • jii'ii * it
J .i . ...
/.y4
i v< 'jJm U í \ ¿uutv' jUi í A
nó rjnui .
W
1
'
• 1,
~ ^
bfi
^
'
v Ó .rumonoí / « i » vrju /;o ;q v
;
,
<
I Subproblema 1' m\&
: r: jr <ol / c í jrí l
—* '
Subproblema
SubDroblema Subproblema
1 2 r
' * / * «• _

3
j
mí 7 •'ikjí rj'ji; l |
/
• •

} .
i . t

í
í V
•! * ~
*;
¿7 < Subalgoritmo , Subalgoritmo Subalgoritmo
, 1: rr
/
PV
• ¡3 í r .
t J?íí V ni - ' í J .
2 : í ; i» i,
3
< ? y 4
* ' 'ü > L
I .» . A i
‘ - 1* Jj 1
rv.O o
1
. oroil , , i r
-.- — 5.1
C! i PL " l/
ij
Figura
. . ' _
Dise
" - o descendente.
ñ
.
' ¡ ír f 1 \ - >¡1 . * \ ., - * . <t , .
' •
• , 1 [ > í Í ff /J jjf ‘
J<
:>J ! UJftJltfjI/'; \vq . <¡ - t. ' o ' i.- < v : .. ¡vi í OL •

i <iimr> U ». 3> onp Í . O lofjjv


resultados al jefe. Se dice que el programa principal llama o invoca al subprograma. El subprogra-
ma ejecuta una tarea, a continuación devuelve el control al programa. Esto puede suceder en dife-
rentes lugares del programa. Cada vez que el subprograma es llamado, el control retoma al lugar
desde donde fue hecha la llamada (Figura 5.2). Un subprograma puede llamar a su vez a sus propios
subprogramas (Figura 5.3). Existen — como ya se ha comentado dos tipos importantes de sub-
i » i- 1

programas: funciones y procedimientos o subrutinas .

.sin^ii/GIANOOTO*í .f.ouuxuugw «ohav tona) - oc: q nói untí


Programa
Llamada 1 ’
< -
Subprograma -- = ( Y , D '

Retorno 1
Llamada 2
i i ] , j uóivmjl n r'j .
í .i no -j i hokü oxt ti nn \ iJZ . * l ^XLs ^ , < initaujií: A
.
(
í ú J
' Retorno 2
vi ;br.b ¿cnol * . ;b tcq ts iupÍ Girj ¡/inq
r

Aií i! i : Mtp ; - Aiaoritmo ' ' : " " ;a ’ "!



;
'
Subalgoritmo
ib : y¥K>I übíO '

omoo
^. t '
-
-- Q-. y f Y ; V ' -T^.í - -: f r , -
/
f U 9Db /Oln niU I
í i /

i ^ I '
'

.
non .>1üíí obnoid -
1

I
/

Figura 5.2. Un programa con un subprograma: funci ón y procedimiento o subrutina,


* / . . i «

según la terminolog ía específica del lenguaje: subrutina en BASIC y FORTRAN, .función en C,


procedimiento función en Pascal.

- óh -x - cV ( noiví xú1 ¿u n c i d o o r.r m


}

ivd SKIS? nói jm/l r f c*bolnMRngts


'

-
ri» vf

.
«xonoina csilitu v v 'ye
1
h dtlf .' / o ov. noi^iqx*j el o!x »v / >
• ; » n \ yubprogra
'
afl 1.1 '
¡'
'
«
-. •

^ .
.thnrnnram Vi '

°
'

Programa Subprograma j < . t


«diant
aiú
,( }d>aibfiuo

/lt cbsO
ehiO
.

^
Í;V! O JÍ
< ‘ SL iO *
' i

Z—
i
J ¡C .

•; UilO I ÍJM 1 J '.'IIO ir *; J
^ — .. — .
~~ . : Em !^I;: b; Z.L ^. J' Oíluf EíJ .
• ;I ?
V U&Vtti I'. S O ?.ivn ¿\ s« í :' \; y yr \ :
«rnt}?.'fi o '.'/K.bíU :-''/ ' > ;>:!•
'
'

- «n ittiví w» » >
. ro
Subprograma 2 b otfroüb. -
nitti \ ohfiiRu h mq zabintl ^h witotamA .
< .i. - brtul ' i.- \ : :
;,nu OH ’ if »3m ohsifí ti [ *; >q
oqií fs Ktsffim ntkürmdq
btnrh b nobauq
^
n ú
' ” ' "
.
4
> <i

vi í qyt) fin; M u! *> * on .r ¡ ó iatm1 cnu A


'

I i • * i *
i
-
11

• ;b tl¿
. ¡ jo - - •
- rfii 1 il iufu antdmoft
,
-

con diferantas nivelas da subprogramas .,, . ,, ,


Figura 5.3. Un programa

Scanned with CamScanner


ón
166 Fundamentos de programaci

5.2. FUNCIONES
res4temados-¿zz Mm£«ro s
iv rn á~ sjv
^ ^ — >

de la f \inclóñ para los argumentosjiados


..
"
~ ~
Matemáticamente
y produce un valor denonunada
^
t «ftaÍ 3Í[ ínsecas en el Capitulo 2
intr
, —
X
pot e suar

1r
^
í o. As por e entp o:

/ w = TW
**

. •onsOLV
o t . ionise* n - .
t ' * • ^
valor específico se — -» v .•
. Obsérvese que ningún

el nombre de la funci ón y x es el argumento debemos


donde / es
con x; es un pará metro formal utilizado en la definición de la función. Para evaluar /
puede calcular el resultado. Con x = 3 se obtiene
asocia el
darle un valor real o actual a x; con este valor se
válor 0.3 que se expresa escribiendo
* n > II*
1
/ u.
-.
i
; \
* i t
I
I .

. vr ¿ .1 u .> . ¿ . i ' . 1. . 4
•'
.
»r
«
' « ti
/( 3) = 0.3
• .
t '
'•
* i * i
; v:-
1
» I t . / I i.
' '
> <•
* w ?i
* * 4.
i
i l . . .Ü . !i ' J
. -•
i

• i . -
y .'. . < • .
< i > í y<
\ 1

/ (3) =
JK
’ —1 +3 9 = —103 = 0.3 *
* /
.. . ;
. * « » J M
\
i

»
t
' .v
4

"
i
"

^ 1
t { »s 1 •’>I
4 t

\ f .
i

Una función puede tener varios argumentos. Por consiguiente


1 f ; .! * 1

nx , y) ~
x-y v. rr r.- »
- *

jeS v:c^ 'a -


,
\O f% ’• •»
•'
+
.
*
1

i . '
' C
- y. . .. \ v
* i

es una función con dos argumentos . Sin embargo, solamente un único valor se asocia con la funci ón
para cualquier par de valores dados a los argumentos . *
Cada lenguaje de programación tiene sus propias funciones incorporadas, que se utilizan escri-
biendo sus nombres con los argumentos adecuados en expresiones tales como
rr í " ’ _
“ : " * ’ '
:
+ vsipvt ’ d v no ’
, +ru', v vnq . ¡ U ,£ , ~ tifugH ; *

eos ( x ) ) - aqgs Bigoionirmef «)


'

raiz 2 ( A
*' • 5
v'. Í . Oi - P « f - ii :• i I

Cuando la expresión se evalúa, el valor de x se da primero al subprograma (función) coseno y se


calcuia cos(x). El valor de A + cos(x) se utiliza entonces como argumento de la función raiz 2 (raíz
cuadrada), que eval úa el resultado final .

l e s p“éntes !sZandal°sistema
“ “ **"" " U aeXpreSÍÓ
" COnlos^11108 acluales 0"*
fundones


Las incorporadas se
denominan funciones internas o intrínsecas y las
é oTntemas
funciones definidas por el usuano. funciones externas . Cuando las funciones est
ánd s no
^
-- - -
permiten realizar el upo de calculo deseado es necesario recurrir a las que
q
funciones externas ,
pueden ser definidas por el usuano mediante una declaración de función

.Jr",
asmtnw El ,
o pfogram llama o invoca o la fanciún con el nombre
de cala dltima en aro

Scanned with CamScanner


^Programas (subalgoritmos): procedimientos y funciones 167

expresión seguida de una lista dé argumente* ñ - Á ú

— Ua-
^—
especificas: tomar una lista de valores
mados argumentos (parámetros de entradaa - b) y devolver un único valor. »

^n i&írnt 'r
'

3 sin
;i •
noónol ¿tú no¿ { s.)too (xVr32 sbnob
Declaració
52 1 declaraci ón de funciones tñhnui / 1 nób^bsb ^
La declaración de una función requiere una cPrip A - -- ' :
5 . »
Una fund6n C0m0 tal
'

subalgoritmo o subprograma tiene una constitución SarT Iosdfne * " '

alg°ntmos por consiguiente ,


¿
constad de una cabece que comen? ,m con H tino
. - la función segugogeir HPI , , .
,

palabra funci n y del


.
nombre v . . . ,
f
’ ~

función que será una serie de acciones o insistí


fimcidn Aconunuación irá el cuerpo ñe la
ó aiy mPn » f
.
, 0n hará 3ue se asiSne un valor ál
nombre de la función Esto determina el valor nardl u ^
ClT
^
ejecuci
del, resultado que ha de devolverse al pro-
. l
grama llamador. ^ ,
' ’

La declaración de la función será: i .


' U'üIIT.H w omo>~ nbnom
i
,AT \
¿ o
ft‘ f
.1 ’V
jS
* u
B Ii •* •
' - * •» '• ^- . » ... - j . Í JI (ü tjS , IUJ t* , > 1 A . J íI i t\ • k
*

_de_fesult!ááo _
k

( list á ’ de par ámetros ) ’ ?:OOV í í : v.


; ;
i
* < tipo > funci ón < nombre fun >
[ declaraciones locales ] • '
' " ‘
1
• " > ¡ . • > * ! bi: 1 •' it
* - • • “ > y¡imcwz¿' ¿
'

- *
- * •

inicio -. i ¡ n . ’ ;r;b . bíú/t ú i> b UÓbíilií i ^b fil 20Í rr.ttl . ^oJ


t
r . VMlU 02
' Á\ >1 \
t < acciones >

/ / cuerdo de la función . . ..
tuV , m
, , ir
vfo )
fc un;rnori2íb •' nfin_funcion »í; ii I ’ : ;
^
de*olv* r (
• vi í U 20 J flÓÍ '
; . fii 3¡J OOtPUZ hb oilfreb
|- ;.TJí oh •: . i - . $ iqy.3 . zsfdstiBV . süiiRirno'
¡ , jnabina « »up ,i*u»uV)&
. . ,
-: JJ ' .f t •>
- rcrunon O *!9n

lista de
par ámetros:
{ E|S|E / S > tipo de datoB : parametro x [ , __
lista de parámetros formales o argumentos, con uno o más argumentos de la siguiente forma:
parametro
; E / S : Entrada / Salida
_
( { E|S|E / S > tipo de datoA : par ámetro 'l'[v / parametrOQSjJj^gj
_ y ] . . . )
\
*

- ^
• n' > - ' •! *
E : Entrada ; S: Salida • i ¿l 65 f &s tu .
*

nombre _func: - • , - nombre asociado con la función, que será un nombre de identifícador válido
. .• . . . . I : t; • *

> » «
instrucciones que constituyen la definición de la función y que deben contener una única
< acciones > )
instrucción: devolver ( < expresion >
tj ; . “
( » aoionri.

tipo de resul tado _ ¿ ’ tipo del resultado que devuelve


la función

. Por ejemplo, la función:, j q¡ -niTq oaiihogíe í *J -. i «óbito!&nu ¡¡ atmll o?.


.
xtO (
• • .

aatfamiiflq *ol ««» wM«9bR X|r.ínT03 &mt


«o!
——; -
'
:
'

i ; *[
f ( x,y ) =
• '
, - •• , n gimarrihieq oup - *

• • soihmifcicq -!. tnsmufl om «m b ínam.


í nmmu moqu***} «

^ •

«inártcq : »b « ebwiupsi qnu n t otobooqt


í
* .émulos íKM { ¿ uktiltut
se definirá como: vof .o ?oj Lrjiíqm¡ n ó bnul «! « diuiu. í i ;.:V. >

'
real función F ( x )
rtjwiouifü BSITOI nob jt; tú) íxpsuo b ftlUD3( 3 .r?. '

^ . L

_
llt í ‘

lnlcl °
devolver ( x/ ( l + . *
#
* v ,) , .
x '

„ i 3Tt
í'rK *íi - lu o í ul fil #h toíiiv Is svbjmb
íá
^ s? .

^^ a funcion

Scanned with CamScanner


168 Fundamentos de programación . . .- r >
:JA . r. i

ón trigon om étrica , cuyp valor, es. ^ ^ . . , V . .

Otro ejemplo‘puede ser la definici


..
ó
,
n de la
;
funci
tyj / }\ , mutv? , l « bim toL
; »
ou i wp nó Dm ó O J ¡i
• j f| • . . '
(
'
^ |

</ - . ít
Ilió- ’ • >1 > '. ‘ ' i - . i J
!’ ' ’ ' ' * •

.-
1 • • •

)
sen(x
v ,
: MOl ' L J 11 ‘
.J
v
tai(x) = — .' '• ¡ ISiJtq ) V I ' 11
cos(x) '

i iT- j fi !‘
*
’> ;'f . VVO * .J . ;
i .
*
Í . , i *

donde senfjcj y cosfx) son las funciones


seno y coseno — normalment e funciones internas . La

declaración de la función es: l ri . í


Entrada
- '
ü
/ / x, parametro de
real función tan ( E real:x
)
( x ) / cos ( x ) , á ngulo x en
radianes f . ’j ob fiOlW iM . \
// funci ón tan igual a sen
inicio i ; t - r\ { .
, i jo Muur ' j i¿ nu ‘;;r. ii .- f
o ornihorjMu/
;OU i
devolver ( sen( x ) /cos( x ) ) . (> q
. r
fin funci ón
: í :1 J . . .
í oi / HC -l -ÓCl/ J /! . ¡: \
v y#v í
f

rro- í >: i •I ’
4 ,

bir la función. Es buena práctica incluir docu-


• » * * *
- • *
. - • 4 f 4 f , « #

Observe que se incluye un comentario para descri , lo que representan sus pará metros o cual -
función
mentación que describa brevemente lo que hace la ó n. En aquellos lenguajes de progra -
inform aci ó n que expliq ue la definic i ó n de la funci
quier otra
— —
mación como Pascal que exigen sección de declaracione
s, éstas se situarán al principio del -
programa. ón sean ejecutadas, se necesita que éste
Para que las acciones descritas en un subprograma funci
subprogramas a fin de proporcionarle los
sea invocado desde un programa principal o desde otros
argumentos de entrada necesarios para realizar esas acciones
.
parámetros formales , ficticios o
Los argumentos de la declaración de la función se denominan
o procedimientos y sólo se utilizan
mudos ( dummy )', son nombres de variables, de otras funciones
dentro del cuerpo de la función. Los argumentos utilizados
en llamada á la función se denominan
parámetros actuales, que a su vez pueden ser constantes, variables
, expresiones, valores de funcio -
nes o nombres de funciones o procedimientos.
A í\J ¿o: ' \’ v. . * • .
< ; t íV . . A: • > v \\ nr *. >\ ,v ni%mh

ó: . itell 9C b 3 '¿ -1
- .
5.2.2. Invocación a las funciones
^

i UliCH
Una función puede ser llamada de la formasigujente;
( ,1 ' . t i r ' s* t :
:br* i rJjsTOfnon

.
r: >
F i. v
nombre _ funcion Elista de par á metros actuales )

" '
]
- Z'J
'

nombre _ funcion función que llama


'

lista de parametros actuales constantes , variables , expresiones, valores de funciones , nombres de


funciones o procedimientos

Cada vez que se llama a una función desde el algoritmo principal se establece áutomáticamente
-
una correspondencia entre los pará metros formales y los pará metros actuales. Debe haber exactala
de
mente el mismo n ú mero de pará metros actuales que de pará metros formales en la declaración
funci ón y se presupone una correspondencia uno a uno de izquierda a derecha entre los parámetros
formales y los actuales. :
Una llamada a la función implica los siguientes pasos: -W I M *

1. A cada pará metro formal se le asigna el valor real de su correspondiente pará metro, actuad
*

2. Se ejecuta el cuerpo de acciones de la función . ¿n ri


.
3. Se devuelve el valor de la función al nombre de la función y se retoma al punto de llamada
'

Scanned with CamScanner


1% t
- . I , / '• *

Subprogramas ( subalgoritmos ): procedimientos y funciones 169


j

Ejemplo 5.1 $.2 iir¡rí j 3

a nMmn >up omVi sui i . ú niQ


^ .OítUim \ ü lAjVUtf
real función potencia ( E real:x; E entero:n)
v
var ' “ H - .- ; «omaiirjiBm ol , u n

-
'’ •.
> -
>j o r t u n c g l i
- . * • 1
t ; > joal < J loq bblbono > , tr orno
ó )

entero: i, y
¡ .A ¡n:o: » r
T A T
. 30 “ A *
no1 onul *
-
if *
inicio ' ^ ’ • I. •
«•
5SV
*

•y i •
V j ; r?:»
desde i 4— 1 hasta abs( n )[ hacer • Í U8 M I .« : .
y, <- y * x . , í flu$ 98 , CJ
O loi /ti
fin_desde
si n
y .«r
< 0 entonces
i /y
< ¡

J5
j / Mt ,
.
:r i n *:í n r rf
i
A
r
>
• *
< •*•"
X
obnob
r ? ' /
*
2
i • *

fin_si
devolver ( y ) i : - oo tcrru 7 jvXoveb

fin_funcion í .ai 'i

.
I;; jiL&nisli i: :\ v < O í OO y fin tb teriotoul bh olnoí ra vb f :u/vi *í rnqdu< nu Oí IO í J íK 'J onp ornlifuy í n 1; y . .
abs ( n ) es la función valor absoluto de n a fin de considerar exponentes positivos o negativos
; V. i 7 ; ^O : i
_ íV.; Í ' D L l t I'IG
Cí * * IL
Invocación de la función: ojorurr »y . *
• ; o? 3 ir‘ TSV
. cril \ i o lo liliV
z 4- potencia ( 2.5, - 3 ) v ov1ooq y o i e - a:» oí o:n'jr: n j
*
0 . i ir ^ n op * ex * '

i
( C l - rr ; ; i JO 1 *

: i: parámetros actuales ( O'- Oír.;t i ! i c , '¿i - * v X '


.
*

« nielo < ¿ ) i b i i ' j j' j t A > y -


( y , ;** T. ¿ O n rí Pn
Transferencia de información: r.l í

x,
.•
s
i

2*5
*
n -3
{ n :o Jno /1 ) í L r iojor 3 ac .oc ;
i : oi
- '
.o 7 Ií V
oiolcl
/
z 0.064 A "
7 c* oi5 r f - n a l 8£d r
i
— * .i
* .
i ü

9 *> a & b ciz


Ejemplo 5.2 ( ' \ 7 *> v loveb
»'on. r . x
Función potencia para el cálculo de N elevado a A. El número N deberá ser positivo, aunque
-
podrá tener parte fraccionaria, A es unreal , n ; MUI : nr estmiiafi foiteminuq ¿ol . ¿ U -J *>i o n3

algoritmo Elevar _ a _ potencia A ? olqmsi 3


var
real : a, n .Ww^ i > Al oAu'l Wb o W a t t f t V * Y Hbhmi\n\ w vy !\ .
inicio . ,
')
k . cfvi .4
" ISV
escribir( ' Deme numero positivo
. i : c t e í n«
'

leer( n ) i *
M- r oí o l t z i
escribir { ' Deme exponente ')

leer( a ) Ul , ’ a 4 » bcl ín ' i ? r ' »


escribir( 'N elevado a = ' potencia ( n, a ) )
' dv ü iUTLtH í»
/
y v . ..i;»"! J p* •,
' •

fin . i . all

real función potencia (E real: n , a ) ( v , t . í .i o .i .> nol litu'l :• f > : : -* •

o loin 1
inicio . :*\
devolver ( exp( a * ln( n )) ) íX * . é

rv ;.* * :: ú!J ‘ ni :
fin_ funcion

Scanned with CamScanner


170 Fundamentos de programación vV •
‘u v ^ -
Ejemplo 5.3
un subprograma de cálculo del factorial de un número y una lia.
Diseñar un algoritmo que contenga
mada al mismo.
ya es conocido por el lector el algoritmo factorial , lo indicaremos expresamente :
Como
entero función FACTORIAL(E entero:n) o loi:i
var
entero: i,f run arta & ií I i
//advertencia, según el resultado, f puede ser real \

inicio obznb _nA *



f i 1
desde i <- 1 hasta n hacer
- orro na
ts j - * /. 1 «
*
*

f < f
fin_desde
- í
i

devolver ( f ) . T.a¡Y Í cy . í j

fin_ funcion

y el algoritmo que contiene un subprograma de cálculo del factorial de un número y una llamada al
: - ti> i >
; bi2no:> VJ í : nTr n ab oídío^dé lo n J * íi *
*
mismo: ° .

_
algoritmo Funcion factorial
y> > \ r- W :t
\ \ *

var entero: x , y , numero


inicio
sí " t
escribir ( ' Deme un numero entero y positivo ' )
. leer(numero) ,•
*
——
x < factorial(numero)
y < factorial(5)
' íV
- i,
t

.4
* i t•.

escribirs{ x , y)
fin
.ores ]

. « •
.

entero función factorial ( E entero: n)


var entero: i , f sr c .1 * x
inicio
f 1 • “V f N
.
\

- —
desde i < 1 hasta n hacer
f 4 f * i
fin_ desde
devolver( f ) S.2 oí qmaíi
m _funcion
fin .. . . ... .
£unclon
' ’ 1 1
vs \>i ' • S3 s\s :
.
H tmx|

En este caso los parámetros actuales son: una variable (numero) y una constante (5).
: -t
1

Ejemplo 5.4 '


*
• ' “ o f. v o
- t lr crU i103 i £
Realizar el diseño de la función y = x 3 ( cálculo del cubo de un nú
mero ). >
>. . . V ”
algoritmo Prueba
var
entero: N jr
v
• *
:! ::i úv.V ‘

?

-
inicio //Programa principal -
N cubo(2) ;
í :. ./* .* ''' *

escribir ( • 2 al cubo es ' , N) .; ‘ xííe 1


( •

s a' jS • j V.j í v ;(
escribir ( ' 3 al cubo es ' , cubo(3)) * ¡J . o b r / v J ci i j itidiV
fin ai5
entero función cubo( E entero: x)
inicio
*
-' A - o ’ í *> i }• ; no i O f!1/ 5
.. . . oio
devolver(x * x * x)
finJEuncion •
MÍ * ; . ! it> vl5V . &
¡<

.•. 1. » Í. í , íT i jn 'ri
?
. .
. U
,
f

-- - •
-

Scanned with CamScanner


Subprogramas ( subalgoritmos ): procedimientos y funciones

La salida del algoritmo ser


ía:
2 al cubo es 8
— *#

v t

3 al cubo es 27
!í 7 . V - » ir*
de la fun -
Las funciones pueden tener muchos argumentos, pero solamente un resultado: el valor
ficos. Un concepto
ción . Esto limita su uso, aunque se encuentran con frecuencia en cálculos cientí en el siguiente
más potente es el proporcionado por el subprograma procedimiento que se examina
apartado.
tV.i 7.
Ejercicio 5.5 “V.,'b < Vil n

pasar el
Algoritmo que contiene y utiliza unas funciones ( seno y coseno ) a las que les podemos
ángulo en grados .
_ __ _
algoritmo Sen cos en grados i! \ til oby * » ) f - ’

var real : g
. ';» b liwmyi ;;;p Oír i; *Gí J f:ni; y > iq *

Oi ttPíib
'

\ f?4? < * > •


* ;í ;
> J
hb !
» •; >
r

Inicio
escribir( Deme 1
ángulo en grados ’ )
/; / :.v .¿ , £¿ ií;7 iliiii VJP , x ^
¿dofj
- Knr :
i t óh r n m u s
jup
ob
leer( g ) noun i b r:s .

r ¿ í í, i oí . ¿ O í i í ». '
o f >r r .'i n be
escribir {seno( g ) ) > J
escribir(coseno( g ) ) uJ.jN
fin t
i cn• :r - i * » r
y *
rav
i
1 *! i i *
real función coseno (E real : g )
inicio
devolver(eos(g * 2 * 3.141592 / 360))
I i

:1
fin_funcion ^ r v* i
’ ' L ‘ ** 1 I. ' 1
V -

1
real función seno (E real g) , ) C ‘r ,- íd .V
inicio
V • ¿
;. 0 i 1 4"
^v
^evOfj
. . ,
'
7 [ iJ : '

devolver( sen(g * 2 * 3.141592/ 360))


.

.'L

fin función k A. ; i -ypiad


ni
Ejercicio 5.6
Algoritmo que simplifique un quebrado, dividiendo numerador y denominador por su máximo
común divisor.
_
algoritmo Simplificar quebrado .
.x
-
var
entero : n, d

inicio
escribir( ’ Deme numerador )
1
rr i
leer(n)
escribir( * Deme denominador ' )
leer( d )
escribirin , ' / ’ , d , n div mcd(n, d),'/ ' , d div mcd(n, d )) s ;
t
fin
entero función med ( E entero: n, d )
^; .: .
v« *•
i •

var i

entero : r fvs íO ' M


inicio
r n mod d

Scanned with CamScanner


r< i
\
0

Fundamentos de programación
172

mientras r
n 4- d
<> O hacer
. C . ÜÍ K . . I ' .bilí s j;J
'
.
d 4- r
r 4 n MOD d -
\
,\
fin_mientras
devolver(d) •
fin_funcion
•,
_ * .)>

¿bn3UX*
'

ft W
'
J

V
ffCllfJÍ>U ifI3
- - *

»> Uf >
3
*

fUif¿ .0¿ U U < Bltfml OJ¿3


•, . . .
n i r t u;/ 3 o jup > • • . ííftiibíwiq erriK rgoitjcfug io loq obfinoioroqonq Í3 3lnt> ( , u
Ejercicio 5.7 .obLhtq ».

Supuesto que nuestro compilador no tiene la función seno. Podrí amos calcular el seno de xr median -
‘“ >
te la siguiente serie:
1 » V.V Vi' • . -..t .MX j X X i .-X s y , ; r mm ) tvVnrof * vimt mw ( wwimn
v

cwufwtl /
sen(x)= x + + ... (hasta 17 términ
3!
<
5! 7!
v.oVji : n*i '

x (á ngulo en radianes).
I
ne •
i
- .
i .TC>X?ir
1AV

El programa nos tiene que permitir el cálculo del seno de ángulos en grados, mediante el diseño
ana
de una
_-
función seno ( x ) , que utilizará, a su vez, las funciones potencia ( x , n ) y facto-
.
rial ( n ) , que también deberá n ser implementadas en el algoritmo.
l / \ • A 1 * /. 1 1 / 1 , 1 1 1 *
r
Se terminará cuando respondamos N (no) a la petición de otro á ngulo. icinu ^
/.; r.’
algoritmo Calcular_seno
** 1
;.* •

ni ít
var real : gr
carácter : resp .. ono : ao i o n r»o
J • i •

o tolnf
^
inicio
repetir
»
..J í ; í . f. 4
t . •

-lovlovob
coÍDnz/5 r:ii
_
escribir( Deme 1
ángulo en grados ' )
leer(gr) (r its i Z : ::?c nolcnri
: .

escribir( ' Seno( ' , gr , ' )= ' , seno(gr ))


escribir( ' ¿Otro ángulo?' )
leer(resp )
; ( tí dr .15: .‘ 2 * V)n - k
rtcrvlcvab
aoloav *
hasta _que resp = ' N '
fin
real función factorial (E entero:n) 0.3 O.^
u' * oünVAiViib onuiioj)

real
reai : ff
» tiu
entero : i f
. O i i S’V í *
Afy? V /
" { '•
lU UÍUUQ7
inicio ‘ f

f 4 1 - • i - o m s l s c o i*
desde i 1 hasta n hacer 13*/
f f ;
i
_ , b ,n : OMJ í 3
fin desde
devolver ( f ) o l o i r.l
fin_funcion \
^ • ót tema sx* i’ iLtii xo ¿v *

'n i
real función potencia ( E real: x ;
var real : pot
E enteroin) * '
• • • CK " • ’ -i:
i f ? 1*0 *
entero : i
inicio
j . ,i v \ \ r .5 " , \ 4
.íTinid í lO ' -
pot 4 1
— —
desde i 4 1 hasta n hacer 7 > Ú7* • nol>cjr/l *
. • • •.
rl ^

pOt 4 - pot * X
fin_ desde *N ; 'i *.• '
(* .

devolver ( pot )
fin función f.v boni r í

Scanned with CamScanner


Subprogramas ( subalgoritmos ): procedimientos y funciones 173

r e a l función s e n o ( E r e a l i g r ) . \ I . .. * v u n r v
var r e a l : x , s
entero : i, n '

inicio

s < x
desde i
——
x i gr * 3.141592 / 180

2 hasta 1 7 hacer c r t; : c í. > ¿ o / i t .i J •* r '

n i 2 * i - 1 —
r• si _ i mod 2 < > .0 entonces . . ob
s .<- sc - ^ . Sip »
, ,
b noittí) aslf rmoin oibmt q acJ
,
.
p o t e n c i a ( x , n ) ' / f a* c t o r i a l ( n )

—-
^
>

c nu r . * Bi no
* _ '
' -i

• l . ( : : *
.
oií n J a > *
¿
, , .
;nfí• . )
• • ••
.

. f i f O s «- s + p o t e n c i a ( x , * 1 1 ) / ' f a c t o r i a l ( n ) ;
q . i / i > fi. r j f i /0 7 .. ü t
'

*
N
*

fin—_ si J / O/i s. tWlh : : \ xb 4

fin_ desde
devolver ( s )
Ti ; -
>rfrl >ni I ‘ nsib?m cmfilf 32 oiusiniibsixnq 10
¡ j)

fin_funcion t
J .7\
> «

5.3. , PROCEDIMIENTOS ( subrutinas) . . .r -» . rr- , ¡

-
£

.'-•oí , ivilí •i ~ 3» n '.v ;V - ‘ r i ' j o¿ u v r jin 'V b K \ ¡ y > "¡! .Tull í:


, '
ir • r 'V 4 ' n
-
< .

Aunque las funciones son herramientas de programación muy útiles para la resolución de problemas,
su alcance está muy limitado. Con frecuencia, se requieren subprogramas que calculen varios resul
tados en vez de uno solo, o que realicen la ordenación de una serie de n ú meros, etc. En estas situa-
-
ciones la función no es apropiada y se necesita disponer del r>trn tipn de subprograms - el pmrpr í i-
mieñio o subrutinar. ; O *

Vnjyrocedímiento o subrutina 1 es un subprograma que ejecuta un proceso específico. Ning ú n


valor está asociado con el nombre del procedimiento; por consiguiente, no puede ocurrir en una
expresión. Un procedimiento se llama es<pribif ndn S'1 nomhrrypnr.fqpmplo , SORT, pnra-indirar q
un procedimiento denominado-SORT se va-a-usaiL Cuando se invoca el procedimiento, los pasos que
^ ip

lo definen se ejecutan y a continuación se devuelve el control al programa que le llamó. • ¿


o el
v ? c' v / b "c 3
'

.
U i t. V í' fi* ‘ " . ‘s
J i . * •
»
i *' • ' -
'Vi;
' .. .• •• . •

Procedimiento versus función


Los procedimientos y funciones son subprogramas cuyo diseño y misión son similares, sin embargo,
existen unas diterencias esenciales entre elk&L-
*

1. Un procedimiento es llamado desde el algoritmo o programa principal mediante su nombre y una


|lista de parámetros actuales, o bien con la instrucción llamar a ( cali ) . Al llamar al proce
j _ -
dimiento se detiene momentáneamente el programa que se estuviera realizando y el control pásá
al procedimiento llamado. Después de que las acciones del procedimiento se ejecutan, se regresa .
a la acción inmediatamente siguiente a la que se llamó. .
2. Las funciones devuelven un valor , los procedimientos pueden devolver 0,1 o n valores y en
! forma de lista de parámetros.
3. El procedimiento se declara igual que la función, pero su nombre no está asociado a ninguno de
1, X\ los resultados que obtiene. :
WL • - -. - * . .... » . . .
»; V . *!*
_ - : ,
i*
'
'l u u

~
« » H in V
. Í

r - fr* . r -rrtili - i i f /í t 5 i ty , ? : AO M r\ U
. ,» * c:
" (

i
RAN, la subrutina representa el mismo concepto que procedimiento. Sin embargo, en BASIC )as subrutinas
. EnTORTIlAM
metro! . En el resto de los lenguajes el término general para definir un subprógrama es procedimiento
no podrán pasarr parámetros
° simplemente subprograma
c

Scanned with CamScanner


p

174 Fundamentos de programación

La declaración de un procedimiento es similar a la de funciones.


- • <T f

) ]
procedimiento nombre [(lista de parámetros formales

< acciones> 4

fin procedimiento J fiC ' i. .t 3 f .


,
't

Los pará metros formales tienen el mismo significado que en las funciones; los parámetros

variables en aquellos lenguajes que los soportan, por ejemplo, Pascal están precedidos cada uno
de ellos por la palabra var para designar que ellos obtendrán resultados del procedimiento en lugar

de los valores actuales asociados a ellos.
El procedimiento se llama mediante la instrucción Z ) 13V .[ C
_ 0O Í 9fXJü - i 1
[llamarla] nombre [ { lista de parametros actuales ) ]
i »
v ; \ í> (

M
La palabra llamar a ( callV es-oncional v su existencia depende del lenguajede progra -
mación. El ejemplo siguiente ilustra la definición y uso de un procedimiento para realizarTa división
de dos nú meros y obtener el cociente y el resto.
•Í Ur /!* j i j jiip ; i / ti' jTziiiKví :>? r.O ócJ iil ( tstn ktr* aant ^l
Variables enteras: DIVIDENDO ' nu ntni íü 'ji sup o .otoa onu ob sav na > <


\V. -5 .i. UiODjnrrshT
DIVISOR* ovo tab u'itoqaib Biteí iyan a? / pbniqoiqj; «o on nii'nmftBl ?on
COCIENTE Sffú uV< U:.; J '

ongTi '. .. 9 o ? y .)ov . • tu .- - rj ’.y /: rus - ^ b :qdu «. u .


, o!r¡ - unV. - i , \ i\ n '.í • •
'
'
-
Procedimiento ‘ Jrl on
’ ’ ú ugi noy loq otnoimilo'xnq 1st wímt ' i aoo obsioosc ¡ )

suplí-

, nrfraoa .u 2 thnoidnagsfimuilss oiriaimibsaoiq nU .odwaiqxs
«

procedimiento division (E entero:Dividendo,Divis o r S entero: Cociente/. Resto) i

inicio
, -
;í f : : ¡c i'OJfioy fo avlou / ab a? HÓionuniinov B y naJuowo 32 nonflsb ni
'

Resto

Cociente < Dividendo div Divisor
Dividendo - Cociente * Divisor
fin _ procedimiento

Algoritmo principal ' '[í » ' . . •


m r ; ; n • •

• a *' " . . i - „• . > .- 5 . \ : J» »


*
i
i

algoritmo Aritmé tica


.var
entero: M , N, P, Q , S, T
• * •
- -
r‘ .r; *• ,< •
1
* \¡ >
* < i
. ir : . ..
r’ J
ó il
zb ist
inicio
leer(M, N >
• "•
' * "í r •
K/TO!í
llamar_ a division (m , N , P, Q) ' *
•'Í i K~ U : A l* i
eacribiriP , Q) j

llamar_a division (M * N 4, N - + 1,S, T) MV*' ; ii .


•« .i , •
•* *
» •
- *. : *
ic
*>•.*
i

escribir(S, T) . al #
fin »k ‘
! ti

5.3.1. Sustitución de arqumentos /parámetms


La lista de parámetrosr-bier^/bmrp/eren-el-procedimieptn n nrutn ]P ^ (re ^ ipS ) n ^ nwla¿. se cono-
ctcomóHstade parámetros , pueden ser de Entrada ( LhSalida (S) o Entrada /SalirÍ7( P7 p

Scanned with CamScanner


Subprogramas ( subalgoritmos ): procedimientos y funciones

procedimiento demo «
r\ > > » i )
-
o ; ./iSsed
í

. i . V1 , / -í ; :J
*
• '. '
tOM J 7
fin
. procedimiento ' i'izr * . . ;* r/ • > obasfi
'
í iid ti cae
o bien:
' f 1r COI r / f . #

;r f . .r boar ;
procedimiento demo (lista de parametros formales)

y la instrucción llamadora
, * » '. & ia
1i v i.O'fl
x
- :*
Cí . i M

llamar
. a demo (lista de parametros actuales)
Si . ' í

v
4
. v?
o
-- /a

:
. ]• '
- i . laoAf! -l J
Cuando se llama al procedimiento, cada pará metro formal toma como valor inicial « •
el valor del
é “» '

correspondiente pará metro actual.


eí orden correcto.
algoritmo Demo
/ /definición del procedimiento
8«o ?u.:í n 2> ,
( ’G . V
* i H i
v '. n

co í vrt íí ,lai5xf I -»
'

»> •

oa ia
'

_-
2)
entero: años ( 0 } i VdlTief :
real: números, tasa ni i
inicio
•••

llamar
. a calculo(numero, años, tasa) Cli . ni *
t
•• 4
C .1 v i f t i oj .rib
fin t. • ; .
Ci fy icr v
aeonoirra <•
procedimiento calculo(S real: pl ; E entero: p2; E real: p3)
o 3 LI r r ?.
» ’ X linee
inicio
c;i.¿i o
p3 .... pl ... p2 ... p2
f in_ _procedimiento
ewaoliL* u <
• 1*
[ \ I ’ ) txd 110 1 *

-zszzd ¿ ^
- o j i & i k sisar! i —» r afcaefc
Las acciones sucesivas a realizar son las siguientes:
» ,
-
teefc ni 5
ó
iiioas
_
1. Los pará metros reales sustituyen a los pará metros formales. :,i o::
2. El cuerpo de la declaración del procedimiento se sustituye por la llamada del procedimiento.
3. Por último, se ejecutan las acciones escritas por el código resultante. n
_
i itofsrf 6 iafv;í í ->
‘ Jiidx 'xoee
"

Ejemplo 5.8 i
T O
Algoritmo que transforma un número introducido por teclado en notación decimal a romana. El
número será entero y positivo y no excederá de 3.000. ilii

S/n utilizar programación modular: £ - r ÍU

algoritmo Romanos * , . . . •

var entero : n ,digito , r , j


Ve osz ¿ e _
aer-noJae < o i l: n i s
inicio L ' V ) lidiare o
repetir c* jjxf r ú ejniut i - etsefe •

eacribir( 'Deme numero ’ ) \ I

"rtn >
1 -
ebe ^ b .A: xi
1 VI

Scanned with CamScanner


176 Fundamentos de programación

_
hasta que (n >= 0) Y (n <= 3000)

r < n
digito <- r div 1000

- • . . t

r <- r mod 1000


desde j <— 1 hasta digito hacer * -r r -r. f. rr **
escribir( ’ M ’ )
fin_desde
digito <— r div 100
r <— r mod 100 f c in; ' •
-t
si digito = 9 entonces
escribir( ’C , ’ M ' )
1
'

si_ no J i l
si digito > 4 entonces
escribir('D ')
desde j 1 hasta digito - 5 hacer
escribir( '0'} . ..
bü T !fi / ¡
£in_desde
.
; • fj tfitooTO 1« :emirfl 3Z obnctO
i;
'
M'i.v • ol'jnv -, ! '
1
J .\L'jr¿c vrn . ¡ •jfiuiL. x - « . . •

' si _no .

si digito = 4 entonces
escribiri 'C', D * ) 1
-
.OÍ rVTT)J JO! »0 i .
'

si_no 1 t

escribir( 'C )
-
desde j f 1 hasta digito hacer *
*i

£in_desde ; *•
-
fin_si o ioini
f in__si
"• V
fin_si i

digito <- r div 10 • »



ni i
-
r f r mod 10
si digito = 9 entonces
escribiri ’ X ' , ’ C') .( fc ; íq : c * > n . ' ; • r; •

»
' •'
'
j .f ^

' *

si _no Oioial
* .. <.
si digito > 4 entonces
- i. ..ii
v
• V
escribiri ' L ’ )
desde j <— 1 hasta digito - 5 hacer
escribiri ' X' ) : :5 v:i’r : **

*
}
r« t v! . •
$\ - rM.* v * » .. 1
fin_desde
si-no :.rnV{ . í a VUÍÜ<?U¿ POl&fl ?fn¡ ,
* si digito =4 entonces *
... / ‘IXV ’ , fL
escribiri ( ITI ,-
’)
<

01 lOUV » i r
‘ v / iv' ^ ’
r'
Olí
i . v ,i. ).~
¡r í:
^
\i t

si_ no • rj ’o'
'
> .
h )l .:t í ’’ :
''
• < ín > / > •)’». ¿i ru 10*1
desde j *- 1 hasta digito hacer
escribiri ' X ‘ )
fin_desde
e.d 0*q^«P
VJ i ' I
|
l
. *
* Jv.*
» v .v *: ,\ k iV \ M r
fin_si
fin_si
digito < r - vu
^rAnSotn uhVeia«\r, t^oiq \evA\ iu *
,
- 4
si digito = 9 entonces
escribiri 'I', * X ‘ ) c k
si _ no .. » a •%
& >/

si digito > 4 entonces


escribiri T) íí ijUt
desde j <- 1 hasta digito
escribir('1')
- 5 hacer
*1 3 3 , *7
» Ub *
fin_ desde ( . < tr'K
* *

Scanned with CamScanner


Subprogramas (subalgoritmos ): procedimientos y funciones 177
si_ _no
si dígito = 4 entonces ftn tr\ \/ • :3
j
- JA30J 23JaAIR.< '
; Ofn¡ ¡
.*
escribir( • i • , •y )
si _no \ ' y.

desde j 4 1 hasta dígito hacer !'


escribir( • I • )
-
.Of ¡.ÍBIJICT»,:»; . ) r . . . < jf i ./ f . )

i
fin_desde > ¡ vSVJ
fin_si > ’
kn: v . v ,-tv/í
fin_si

-- ^ ’ b'P l i j b
! ; #
V I ; K> ¿ ' >0 r p \\ . A . A.
1
v j' J
t - . .¡j
r
'
• '
ó '
> ,:• • • •: a .
. p* el . , . m :

j*
1 ' .ludorii ia '

'ni'tyi} I'J )
Í
Mediante

A
programación modular:
» r*
jo f
algoritmo Romanos ; » \ r. : ;L iv ¿ ¡ ¡" Vi r r j :
T ';
1
''
* 'y. i O .! ' '
* f \; •
* ; •

" J A f í? * I. .* ’ ;
var n,r,digito: entero * V *
^ tf.J

I
>jfjjÍ
',
inicio
'
f í iifj Of.- T í n j

repetir
; í « í,i:.v
•.( ^
escribir( • Deme numero') tn;{:>;,
• .

* *
.
. . .it J
l
. * .
.í JVíí.LJJ

m
-
.

¿iJ. .
ni v :jí f‘ jf/ i * » i;«

,
^
VJJ
.
,

,
í,:
v-
y

LI;J
'
.
•*
<
.
: .V./;
>
:

•'

jrplu ^
-
.
V.» f
í»' ~
.< »

i
*
i

ó>
-
f.
ni j
.jahn'

;rJ
-J rJj
' i.
I ! "

ieer(n)
hastanque (n >= 0) Y (n <= 3000) fjp ;r ,; . V - ;r. v
~
. . . f •tl . á
yy ¡ - '
• !!
ir í
-
J
-
dígito 4- r div 1000 f

j

J
‘ ; ; mua noioiivinurnoo ní inoo 2 ?Jft 0 tbfi9q1
T ’r < r mód
-
calecífrarom(dígito. 'M' i
i U *;J > if?rí YN ;¡ yl
* ¿Óí ' . . ¿U i :[* Yir/.m. f - *

SUJO . -rtaUdt » V W ü
'

•) > Ut
. .'. -
' •
f
’ '
. .
dígito ""
r # * 9
' x : v I
* ’ • ' » »

r div ‘
100 h>
L\ vUr.'v.*) u TJ "f •
r mod 100
r ‘

calccifrarom(digito~ , ‘ C , ‘ D' 'M') * "\ i r u y o, io .;uc tv *

dígito 4 r div 10
r
" 4
' r mod -
calccifrarom
I
10
*”*
— ~
T . .

í digito,. ‘ X ’, ' L'.., '•C ' ) , • t,


#

4 • wl

t :
*»•

V

’ ! V
-
.''
i

>
:
0M 3Q erfisiQoiS ¡
»
- a

'
f“

..
"

ry
'
V ,
v ' „•
r '
l
»‘*.
.

1
í '

*
?

dígito 4 r - ' ' / rV ’7 * Xr)


i
i

calccifrarom í digito, !
AoinairnibesotTI I

.

fin
^ \ I \ • ... Ycao ¡ . JY ^ «

procedimiento calccifrarom(E entero ¿ dígito; E carácter:vi ,v2,v3)


var entero: j » *

fl ojnoim¡h93 o ,i<1
i
inicio
si dígito = 9 entonces I r t r\r- ii *

ir . f-
f ,.t
if
escribir( vl 7 v3) i i
si no ú:
\ U ?
? :C
' J ~

i
si dígito > 4 entonces
1 oh oivá mtK
escribir ( v 2) -
desde j 4- 1 hasta díigito
1
5 _ hacer 1 _
*
escribir(vi)
ú r
fin.
sino
_ desde
i
i
- 1«
f »

4
si dígito *= 4 entonces ,* i D oinoimiboootS
escribir vi
(
_ , v 2 ) (
... , W oq\1
¡
rw %

si no
desde j 4 1 hasta dígito hacer- ii i

escribir(vi)
fin .desde
_ j \yJ oV> oSVirr. f- .
finsi f

fin_si
fin_si
rin si
_ I, , . ; (r .i 0
.i . * . . ::
.- .3V S1U

'
'
I
f in _ procedimiento ^

Scanned with CamScanner


1
•t

178 Fundamentos de programación

5.4. ÁMBITO: VARIABLES LOCALES


Y GLOBALES
-; t. .
1

les y subprogramas se clasifica n en dos tipos:


Las variables utilizadas en los programas principa

variables locales,
\
- V.
'
; -
la .ni 5
variables globales.
y definida dentrodejtn SU.bprograma, en gl jen- -
i r r.
_
Una variable local es aquella que está declarada
! 3Istinta-de-las-3¿¿5ábles. .corLfil. nu$mo nornbrejjgcla-

i
^
tido dé muTestá deiltffijl¿iseIIuBp gK5na yIH
raHas en cualquier parte del programa principal. El significa
do de una variable se confina al pro-
utiliza el mismo nombre se refiere a
cedimiento en el que está declarada. Cuando otro subprograma locales al subprograma en el que
'

una posición diferente en memoria. Se dice que tales variables


son
están declaradas.
Tina y í ^ -
rnh /p JnhnLíisi qiieUR -qiie-está declSfada para
'
el program a o
r
algoritmo principal ,
'
TT
aeTque —
^ ^

dependen todos los subprogramas.
La’parte del programa/algoritmo en que una variable se define se conoce como
inglés).
El uso de variables locales tiene muchas ventajas. En particular , hace a los
ámbito { scope , en

subprogra
“ «i

mas inde
dos
.. .

-
pendientes, con la comunicación entre el programa principal y los subprogramas manipula
os
estructuralmente a través de la lista de pará metros. Para utilizar un procedimiento sólo necesitam
conocer lo que hace y no tenemos que estar preocupados por su diseño, es decir, cómo están pro-
gramados. v íi -> .
ñ or ton - i >

* y. , ’ c o , or i p ih ) wiot i i xzo í to
'
%
' 1 "

I Programa DEMO
tipo X, X1, . .. Ambito de X >
u• v io

-
_ n '
r — > i

) ’ *
. X *

Procedimiento A al 2
..
tipo Y, Y1, .
Ámbito de Y ? nr' br r hoZO'iZ
-
: o s ' í n j IíV
Procedimiento B
.
tipo Z , Z1, .. B&OItC Í Cr' i ' ;' i . •

c;i.¿ o
a#o¿K>:te» £ • ¿ L*
Ambito de Z f AV : 3 i

'

? ,
* *
OJ ú S.:j I * e»JE> Ofl> &
t w :í t * ü> a 9
*» £*
on .is _
Procedimiento C ort s ; - r ' •

tipo W, W1, ...


;1 r > . -
•* , J '
>3
03
_* t
I j r r —y cO
i i r 3Id
Ámbito de W cft _n: i
JtO
ir *13
.
Figura 5.4 Ámbito de identificadores .

Scanned with CamScanner


Subprogramas (subalgoritmos ): procedimientos y funciones 179

Esta característica hace posible dividir grandes proyectos en piezas más pequeñas indepen-
dientes. uan o i eren es programadores están implicados, ellos pueden trabajar independiente-
A pesar del hecho importante de los subprogramas independientes y las variables locales, la
mayoría de los lenguajes proporcionan algún método para tratar ambos tipos de variables. j
Una variable local a un subprograma no tiene ning ú n significado en otros subprogramas. Si un
subprograma asigna un valor a una de sus variables locales, este valor no es accesible a otros pro-
gramas, es decir, no pueden utilizar este valor. A veces, también es necesario que una variable tenga
el mismo nombre en diferentes subprogramas.
Por el contrario, las variables globales tienen la ventaja de compartir información de diferentes
subprogramas sin una correspondiente entrada en la lista de pará metros.
En un programa sencillo con un subprograma, cada variable u otro identificador es o bien local
al procedimiento o global al programa completo. Sin embargo, si el programa incluye procedi-
mientos que engloban a otros procedimientos procedimientos
'
global/local es algo más complicado de entender. < , • / —
anidados , entonces la noci
nu í ;
ón de —
F¿ dfnhitn de unJdentifiendor (v áí r ahlpg prestantes, prnredimifíntn ^ es la parte del programa^
donde se conoce el identificador. Si un procedimiento está definido localmente a otro procedi-
miefitó, tendrá significado sólo dentro del ámbito de ese procedimiento. A las variables les sucede lo
mismo; si están definidas localmente dentro de un procedimiento, su significado o uso se confina a
cualquier función o procedimiento que pertenezca a esa definición.
La Figura 5.5 muestra un esquema de un programa con diferentes procedimientos, algunas
variables son locales y otras globales. En la citada figura se muestra el á mbito de cada definición.
Los lenguajes que admiten variables locales y globales suelen tener la posibilidad explícita de
definir dichas variables como tales en el cuerpo del programa o, lo que es lo mismo, definir su ámbi-
to de actuación, para ello se utilizan las cabeceras de programas y subprogramas, con lo que se defi-
nen los ámbitos.
á mbito son accesibles en el
,.
mismo , es
_
. , en todos los' proce-
decir
Las variables definidas en un
dimientos interiores.
í insiuai
¿ol mmífdo w ,orm . •' . SIUO . < . s* i 2 *>

'vonlcv *
»• ^. . , . » M i • »
,
t i
• * f
' • -
í #
*
/t1 I
•;
> ,1 W ^
* *
UWIf M
;
MA

1
f e.»

r •' I 'J 1 I VTI' U ; ) > >: i

A / I
, í ¡o! , ’ b •* ' *

/ , * i

B i

c Variables Accesibles desde * "v


definidas en f

A A , B , C , D , E , Fi jcv
1 f •
, G . . . ,'i j
bonii í !
IAJ
B B C §

D C c i f fer - jr t í i. U
E D D, E, F , G
F, G
F 1 E
F p' or.. qmiP
G
•V .X .A i v* '

-
• J IÍ

G oi

:
- 0’ { ->
. N. »
*

. .. .*
variables.
i* M- t r •

ra í
de definició n de
\ 4
M f'

Figura 5.5. Á mbito


t

Scanned with CamScanner


180 Fundamentos de programación . vv, ,

r
>/ h - I ! ioijr nvT .;/ ncD #
n 1}
Ejemplo 5.9 i
'1

> UL '-'± ¿K : í . t
'j *

La fondón (signo) raifea la siguiente tarea


: dado un número real x si x « 0, ^ *wie/.
ve un 0; si x espositivo, se devuelve 1, y si
x es «egaí/ vo, se devuelve un valor -1. .
1 ’ ’ l , !0 ,
La declaración de la función es:

, ' .
'

f ¡;[ . ; íJUS í * OU /i í!. : í ' f < > iO


' '
? í rV f ' \ !• * MI < J
(

entero funció n signo


^
,*« *

(E
*

real
;

:
^
x

)
• ,i' . ^

,
r
* ^4*
. t /• i
t

var entero:
Trar pnfprnrss . i! ,ir r. > i • >

) f ) idf ¡C! , *V / : 1

‘ • inicio *7 • * I

//valores de signo : + 1 , 0 , 1 n: jv . . í
- ' »
^
• '
* » » • f
%
f *
* V '
#

si x = 0 entonces s 4 0 , * -
tú V > » } : / . ( / 0 . ‘jif' j . i •« ; / v .Or»i- •
* .
**
.

si x > 0 entonces s/ .4ti J-7: 1. . - , í» b ei Ulft r» ! i t> nr, - >' > jai
'
:
si x < 0 entonces s 4 : .r . —
q ' ; :
m ú h g c v K i t í » •
.

_
f

* ' devolver (s) ^i : HK >


#

:uí:iibo¿b » q ' lB
• *

1 . . ) tu IfJfiTl
- ilifin función ¿
JO * *

.. - ‘W - . ..
WWW - «oliwiinttoxan
dentro del
.
subprograma
. . .
í « * - ¿ ¿Qi/ ioiríj
, es local
'

Antes de llamar a la función, la variable S , como declara


( ) se
al subprograma y sólo se conoce dentro del mismo. Veamos ahora un pequeño algoritmo donde se
invoque la función, j , . » C;üíí » í! '
*> 5 » ilrioifttib'vxriq m; 12
"
ro í! i *» " óono: vi;h ' b •

algoritmo SIGNOS •• t Oiq V.9 sb O/Mtynfc t?l rnjffíl “


'
• • •
• • >Ífl9Ím •
' '
' '
'

» ntñtoü j ) oliuO thnaié u? , ( in . >


'
i / .
• . unan á nfláb nülias i ¿ :óírj¿írn - f

entero : a , b , c . nói úin taf:* í$ ¿:í¡ JB h,c.v\sr¿: noq r¿bú ojítairnitrí joiq d fiOrbnüT istdpisúa
'

‘inicio' íatnoi íilm nr/i worngoiq rru a! na ¿it ébimi . c siusrJ tu


; í r6 . x : <— ’ - 5 . 4
. M í dmfc b cii *0lMi muijft fihs í b « I
• .¿üludóls ¿ ri í zb1¿oollnóa asídenÉv . ,

. . .. é
. a . <- signo ( x ) , o ¡ ,| <¡¡¡ fifíbu t SÍfidoIt: ./ C ¿9slIDüSOi tlSliaibfi
<r j fó.:: IL / IlvMll V . i J r.íJJt Jl
’ aoJ
.
*
KlUlti SUD )( C»:
Üi 2U
U0
So «. A
^ KM CJrJDl
r > iru o! o aup ol ,ó mneiaoiq lab ornsijo Is n*# «alfil ocios i&ldfihfiv asrfsib dnifiel
*
b 4
- U -JiL ¿' ¿l'''signo
(y)
7 V8975
— V i ;' '
'

'
,
: «¡rtimgoiq s íí msoodüs «ei turuliiu n¿ olio CICí .nóioBi iDCiñ as oobí oí
/ Jos
^
c <- signo ( z - 9 ) .? DJ ÍCÍ flÍ ¿ol f íSi í
{ j
' yy \ . escribir ( ' Las - respuestas . sori :. r í a ‘¿ fdiV.ü Obi > tJoá OíclrfJU 0 )1 na • X . í rui r í ?9ldfihBV

fin ^ • /

. . J. í itoini /oinrimih '

Si se ejecuta este algoritmo, se obtienen los siguientes valores:


n* ' --
x = 5.4
a = signo( 5.4)
y = 0
x e s e l pará metro actual de la primera llamada a signo( x )
a toma el valor 1 >-
I — S '
f
A
M

b =
signo(O)
z = 7 897!> 51
,
,, , b l o m a e l valordeO
» •. un \ ti Ní
,r
i
r. t 3J
<

c = s i g n o ( 7 . 8 9 7 5- 9 ) c toma el valor -f '


1
t
I

La línea escrita al final será:


Las respuestas son 1
•• \
-
*

0 -1
8.
A

¡
r
i i
—a— r
i

t i
1l
3
Ejemplo 5.10 -? I
Jj i
i
i

algoritmo DEMOX i * I

2]
t I
var entero: A , X , Y * 1 ..
V t

inicio i
l
x4 5 - >

_ *

A 4 10
y 4 F(x)
-- I
» i
*
i

vi

escribir (x, A, y) f

fin : ; r- ' •' '


• - V» ! 9 b r- üí im Á .e. <l
* K * **

Scanned with CamScanner


Subprogramas ( subalgoritmos ): procedimientos y funciones

entero función F ( E entero: N )


var Jt ,. rw • ; .!> ** ’ .
' )
'i -
entero: X
inicio \

A <— 5
X «- 12 i
i

devolver( N + A )
fin_ _funcion " IMM yA V
( ' i* ' V J< J II i r; <ot rí : • y) - rr v . f rJ /

A la variable global A se puede acceder desde el algoritmo y desde la funció n . Sin embargo, X
identifica a dos variables distintas: una local al algoritmo y sólo se puede acceder desde él y otra
local a la función. ,. < . ..
Al ejecutar el algoritmo se obtendrían los siguientes resultados: «, . J . J ,
I \l k
X = 5 , ,
i: , í :
1

. . •
f •
.
A = 1nU
, •? r
i

Y = F ( 5 ) '• invocació n a la función F ( N ) se realiza un paso del parámetro actual X al pará metro formal N
A = 5 se modifica el valor de A en el algoritmo principal por ser A global
x = 12 n se modifica el valor de X en el algoritmo principal porque X es local
se° pasa el valor del argumento X ( 5 ) a través del pará metro N
*

F = 5 + 5 = 10
Y = 10 .’ *!
V ' • tyic :b . ¡ '.i *:: :
* ' cpia , * *, *


se escribirá la l ínea Á'

5 5 10 •' '
. ! Or > .v
; '
í :!, . í ! i . V i OÍ 1
* «

yaque X es el valor de la variable local X en el algoritmo; A, el valor de A en la funci ón, ya que se


pasa este valor al algoritmo; Y es el valor de la función F , ( X ) ¿ .

5.5. COMUNICACIÓN CON SUBPROGRAMAS: : > 7F£


PASO DE PAR ÁMETROS
-IV ú ' U ' rid V > C 0 VMV \ * \ S
- ón
- v ¡.V . \;.t <:.rq <úi¡ fi > ?;« '

^, la informaci
* «
’ * ; <
* , < '•
utfvixS
Cuando un programa llama a un subprograma se comunica a través de la lista de
parámetros y se establece una correspondencia automática entre los parámetros formales y
actuales:
Los parámetros actuales son « sustituidos » o « utilizados » en luear de los parámetros formales
-
Lacleclaraüóttdel subproKiaiiia~sg~hace~CPfi
* ! f i n.t í »

. .
' ¡
ftiLfl í
^ 1

I tn h IfTltflí I **! • i .V in*iVtVv >


< , "* i /
( clase tipo _ de_ _ dato
' 1
»«

procedimiento nombre JTJ: I
i

¿J n i
Fl .

>í ¿ ;
, •
Oí'
! '! - clase tipo_de_ dato: » F2 ;u •
(3)
» «á *

íT) o b I -
i i i A

J tJSfHtl ülut I
'
.
clase tipo_ _ de_ dato :Fn )
o zr> jjn t b ;n f r t iü§o íq d i i i > b A 'SU í í II/ C J J w l u y y f j
iV' > r¡ •
<
fí M í V!I ii >q ‘V i !ü7 nu svfcwj sfr
'
*
¿ ) á Jíóí ¿n úl afiu ÍH )
- b . ;• /
ai. / / ; m fin procedimien to í noiaiiL : r f \ m> D íip
^
'
' ^ .

y la llamada al subprograma con :r ¡:J ( !


» o í « * l V j \ . V M S . ,V ; . oi? .
a .aoh /. «sM jyvlir/st» ‘
; jlu
_
lleunar a nombre { Al, A2 , . . . , An )
u*;Yi 'i
l- ’ ’
• . . . Q : 1 : -
- • « '.
• f ; .
..
• ,• «
donde Fl, F2 , . . . í Fn son los parámetros formales y Al , A 2 , An los parámetros actuales o
reales -
i

Scanned with CamScanner


182 Fundamentos de programación

Las clases de parámetros podr


ían ser: rl o i o t w ^

( E) Entrada
o » : "T ;
>
( S ) Salida
( E / S ) Entrada / Salida

Existen dos métodos para establecer la correspondencia de parámetros: no '


DTL

L Correspondencia posicional. La correspondencia se establece aparejándolos parámetros


reales y formales según su posici ón en las listas: asi , n se corresponde mu A±r4onde i =
1, 2 , . . . , n. Este método tiene algunas desventajas de legibilidad cuando el número de
parámetros es grande. - ir • u •V '
>

2. Correspondencia por el nombre explícito , también llamado método de paso de parámetros


por nombre , Enjeste-método^en-lasJlamadas -se-indica.explfcitamente4axQrrespoñHertcia
entre los parámetros reales y formales. Este método se utiliza en Ada. Un ejemplo sería:
i

SUB( Y = > B, X = > 30 ); •

. ' ..\ 0' OH


MIW¿ . V r; .U Y M , *> vu
. - j .J'-
.
• •r f ,x •
y ,1' * t *
• .
.
"
- .
- ..
; « ... •> > y t i "
.
L * 1:

que hace corresponder el parámetro actual B con el formal Y, y el parámetro actual 3 0 con el
formal X durante la llamada de SUB.
• jr,u . : . o !

Por lo general , la mayor


ía de los lenguajes usan exclusivamente la correspondencia posicional y
ése será el método empleado en este libro.
Las cantidades de información que pueden pasarse como parámetros son datos, tipos en los —

lenguajes que admiten su declaraci ón y subprogramas. \ A >. < : : < - M I : • > M . 1. : ’ . ‘ties ;v¡;q

5.5.1. Paso de parámetros a A ;v¿ AH £508 1808 MOD fAdlDA OIMU& OD .3.5
* .

808T3MÁ HA8 3d 03W


Existen diferentes métodos para la transmisión o el paso de parámetros a subprogramas. Es preci-
so conocer el método adoptado por cada lenguaje , ya que la elección puede afectar a la semántica del
lenguaje. Dicho de otro modo, un mismo programa puede producir diferentes resultados bajo dife- ,

rentes sistemas de paso de parámetros; , •


r:<
,

? d
Los parámetros pueden ser clasificados como: fl 0 j . Bfmr«uiqrteí tebfldroBT£b3b íÜ
entradas: las entradas proporcionan valores desde el . programa que llama y que se
(E) utilizan dentro de un procedimiento. En los subprogramas función, las entra-
í
das son los argumentos en el sentido tradicional;
salidas: las salidas producen los resultados del subprograma; de nuevo si se utiliza el
(S) caso una función, éste devuelve un valor calculado por dicha función, mien-
tras que con procedimientos pueden calcularse céro, una o varias salidas; '

entradas/salidas: un solo parámetro se utiliza para mandar argumentos a:'un programa y P ^


(E/S) devolver resultados.
:\ ' cíi f *

v Desgraciadamente, el conocimiento del tipo de parámetros no es


suficiente para caracterizar su
funcionamiento; por ello, examinaremos los diferentes métodos que se utilizan para pasar o trans-
mitir parámetros.

Scanned with CamScanner


Subprogramas ( subalgor
í tmos ): procedimientos y funciones 183

Los métodos más empleados para realizar el paso de parámetros son :


i; t .
v [ > >| j i i i y,' ;• < > r. í . . •.! ir :
' \ i ,; í : ; . i i til ¿c - r y i v .n \
1
! . -
,: hí : <
•‘ paso porvalor (también conocido por parámetro valor ), . - u. :* •« . . . • ;
- r. • * ’ -
*
paso por referencia o dirección (también conocido por parámetro variable ) , i
paso por nombre ,
paso por resultado .
•• : » r -, K S <í

5.5.2. Paso por valor .1 r . x , • n *•


.i ú i * ;? Zf - \ * : r-

.V \ f íí i ífit ; :‘>'
í j • V s j: i • \> J . . .
/LJ ' / I f l
í J
'
v
!' . i i '!
>
>
•jfi

. • :>?b
>.
’’

El_ paso por valor se utiliza en muchos lenguaie&.de programacion; por ejemplo, C, Modula-2, Pas-
caTTAlgol y Snobol . La razón de su popularidad es la analog ía con ló argüméñtos de una3unción,
^
^

donde los valores se proporcionan en el orden_de~caIculo~dé~resttltadOsTLos ~párámetros se tratan


conío~Variables locales y. los valores iniciales se proporcionan copiando los valores de los corres -
pondientes argumento?. ¡ñ
eme . . cf ü*pü ornrj rsuu mv>iidxñ T7T: . . b .
Eos parámetros formales -— locales a la función— reciben como valores iniciales los valores de
los parámetros actuales y con ello se ejecutan las acciones descritas en el subprograma.
No se hace diferencia entre un argumento que es variable, constante o expresión, ya que sólo
importa el valor del argumento. La Figura 5.6 muestra el mecanismo de paso por valor de un pro-
cedimiento con tres parámetros. - Ml ú ,r : * ‘! Í ^ )V/ vh •

v .El mecamsmo de . paso .se resume así: / cbrle NabmJrra ab noz ¿miimknsq ¿
^ ol of Mita :> : . 3
. v 'ji ó vnw .

r. zl ValoT-prinier parámetro: A .= 5 . un íbb nsfou?. tu akisiiev ¿athmbtBq v ; ;!*; > - n Ñraq <u\ . • .

'i'Walorsegundo parámetro: constante = ;18 . zottwnfctcq ¿oí onioa zopwgnal ib > f *j


Valor tercer parámetro: expresión B * 3 + 4 = 2 5 . ; v ‘snAj

Los valores 5 , 1 8 y 2 5 se transforman en los parámetros X , Y , Z , respectivamente', cuando se


ejecuta el procedimiento. 4
. • una limitación acusada: noV existe ' • * c* ; , “S ’ '
{ ’’; r '*; *
ninguna ^otra cone -
i

Aunque el paso por valor es sencillo, tiene

grama no producen cambios en los argumentos originales y, por consiguiente, no se pueden pasar
valores de retomo al punto de llamada: es decir, todos los parámetros son sólo de entrada . El
parámetro actual no puede modificarse por el subprograma. Cualquier cambio realizado en los
valores de los parámetros formales durante la ejecución del subprograma se destruye cuando se ter-
mina el subprograma.
r valor no devuelve información al programa que llama .

-
A < 5 . ir 9
i

-
B 4 7
llamara PR0C1 * (A, 18 , B * 3 + 4)

. r. rfo
! ’• 5 18 25
I
*01 *
\ 1 <\
\ 71 B9C i
-
~ nr/ . > '
* kOiS'ifxúmq r u \ sup v f . í t rrji, ! Í C¡
fftt . l . 1
b (d
' ¿ú procedimiento * *
PROCl * - '(
E1 enteroi XV » Y , 98 z ) ’ '

-« - i; h: niid » r > n t>


T
* • •
; 1

• I >> M * *1 >
'
1 ' '
> f• _
y .*

"<> • .i \s ii

Figura 5.6. Paso por valor. c.qr > nn (¡ htuv vj


, .
¿r

Scanned with CamScanner


) «*.
Fundamentos de programación r
i

184

por valor variables resultado. Las


Existe una variante de la llamada por valor y es la llamada subprograma por valor tras
al
indicadas por los parámetros formales se inicializan en la llamada formales) se transfieren a la
ejecución del subprograma; los resultados (valores de los pará
metros Jos
actuales. Este método se utiliza en algunas versiones de FORTRAN .
. i. . i

5.5.3. Paso por referencia


En numerosas opasinne«wse-requiere -que-ciertos-parámfitrps sirvan como
pará metros de salida, és
déclrTsede vuelvan los resultados a la unidad o programasque llama. Este método se denomina paso
por yéferenciao\z.mb\én de llamada por dirección o variable. La unidad quejiama asa a la unidad ^
Ilamada IáHírección del parámetro actual (que - está en -eLámbitO-dejajjmdadJlamante Una refe-
’ '

rencia al correspondiente pará metro formal se trata comauna.referencia ala posición de memoria,
cuya dirección-se-ha.pasado. Entonces una variable pasada como pará metro real es compartida, es
*
_ ^
decir, se puede modificar directamente por el subprograma. .
Este método existe en FORTRAN, COBOL, Modula-2, Pascal, PL/ l y Algol 68. La caracterís-
tica de este método se debe a su simplicidad y su analogía directa con la idea de que las variables tie-
nen una posición de memoria asignada desde la cual se pueden obtener o actualizar sus valores.
El área de almacenamiento (direcciones de memoria) se utiliza para pasar información de entra-
da y/o salida; en ambas direcciones. on - jtnhii j . ; uoo o ¿ . , ei:; ai
En este método los pará metros son de entrada/salida y los parámetros se denominan parámetros
variables.
Los parámetros valor y parámetros variable se suelen definir en la cabecera del subprograma. En
el caso de lenguajes como Pascal , los parámetros variables deben ir precedidos por la palabra
clave var; -
- £ noi > >7q . -. ‘ :t*rtz,inh !uq ibor t lol;: -.' . j '

- •

/ program , muestra ;, ;. , ,
- .
X ífcmwn&Kíq ¿OÍ 03 rtomiotgOClI V '
/ / parametros actuales a y b , c y d paso por referencia
procedure pruebafvar x , y : integer ) ; <:
8 ~ ¿ytO¡;; / • « I
íTIfOOOf/lfl í D C JlJ
:. -
begin / / procedimiento j , ; ' hl
* J ; í i B / í li SflvfJ
' ,
c J \ic\ , bfipflliA
/ / proceso de los valores ^de x e y trfl n , , fina
7. gi ii¿
*

- • áünt
; vbt !
-
n nbbu o í nú ?
. begin " 'Ln ; ubtSlJWll Sb OltlUq ii ; OflTOlíT Sb /.370Í6V
• á ¡
I ' 1 l , ] " fiborn absuq on ínulas oiío/nüiüq
- '
,,
‘ 1 (
' 1

'

) , 9 vmu ,i > , , ,.
> !! ¡J ¡b | ui
«¡
J

' anub > iunv .it ¿oijomirisq yol oh ¿ smb; /


1. prueba ( a, c ); .. .r miusbindii f .

2. prueba ( b, d ) ; LÍ C \WJ £ V : Util ; / '


*
i

- .i K •L
( * Í U j. U . 1 * ’• * *

\
i# Takr.’ f f '? ‘ • .«
end .
u i •; i * r• ,* •: i
*
i
La primera llamada en ( 1 ) produce que los parámetros a y
c sean sustituidos por x e y si 1<>S
valores de x e y se modificaran dentro de a y c en el algoritmo
principal. De igual modo, b y d son
sustituidos por x e y, y cualquier modificación de x o y en el procedimiento
afectará también al pro-
grama principal.
i ¿j . aM .- M

Scanned with CamScanner


Subprogramas (subalgoritmos ): procedimientos y funciones 185

valonenSÍd hZs ^ “ P3ra pr0gramas don


^ se necesita la comunicación del
vuAivr v > » U>
.
•i ’

Notas:
•• T . *
7 7 ' r-~ * r srr\
<
; . ,
••
• . tv~
*

>
,
l ; , v -»
1 I <|«V r - • •
r -ü . .
t(
— --- -
. i ,.
-
.•


- -
*»• f ' r »

C ‘\ l
' ••y r
y¿ Oft
1
i Ambos métodos de paso de parámetros se aplican
.
)lican tanto a
la llamada de funciones
.
funci como a las deofproce
i í \>
-
dimientos: * . . '
i- • /

.% / 1
Yí ;
>

v1
' f Y
^
t ',
f "
" ' *
. "
J

1 . Una función tiene la posibilidad de devolver los valores al programa principal de dos formas: a)
J.

como valor de la función, b) por medio de argumentos gobernados por la llamada de referencia en >
la correspondencia parámetro actual-parámetro formal .
2. Un procedimiento sólo puede devolver valores por el método de devoluci ón de resultados .
; ;
• ' * “ : - $ ¡ ¿¿-¿- * ** r '
_ 1
'
rs

*** **•* * -.
“* ¿¿ 1¿w ;

* * * *•* *-** *>
« i . X* ¿¿i*** ¿v„ v. JülCilSfiííCi Lc ~ é M£S íí iI J

. •
. •
• . ,-. ¿¡ r '
í ,
' - ¿ ¡

11 c

El lenguaje Pascal permite que el programador especifique el tipo de paso de parámetros y, en un


mismo subprograma , unos parámetros se pueden especificar por valor y otros por referencia.
.djrmibnoq.-íOTioD ÍBUloc Oiloírt éiuq u¿ s v obflííu <*. 3i 1 b iol <¡
procedure Q(i:integer; var j:integer); * r
' mal í oí >fru¡i £/j 13

; , OJr; - J io' í i
- 4 *
"

i

begin
i := i + 10 ;
j :« j + 10; .> r \ i
*
_-
:nV
.
¿ r'. . 0-
i : - S

*
'AioV.
write(i , j) . 1 \ . i . i . v / - j ' » * ?\ t ' ' * ¿Z

end;
oh : f -. ’
( . -. jl . r \. e v .
J ?
lebr .&iicrn * fr .
> -3 b cnom^m

Los parámetross formales son i , j , donde i se pasa por valor y j por referencia.
c m M Q t i
, t i
« .,
lidlnrrirmfí . t ’ ^
' “
j • •

5.5.4. Comparaciones de los métodos de paso de parámetros .

f ^T •

y i’
^ veamos
Para examinar de modo práctico los diferentes métodos, consideremos un ejemplo único


t

un procedí -
los diferentes valores que toman los parámetros. El algoritmo correspondiente con
, - L-.
miento SUBR: • • . !- • 7T - • ¡v • .
- i
I f ' ir,
'
i • ri % % •2 '* * / t# '
r
*
9 w 1*
L * 1

'
algoritmo DEMO
var i » •

. #
* •
; 1
1 I . .
*

entero: A , B ,C , íf 7 :S- f lolcv b Ülid' Vyi' D > p < I n


inicio / / DEMO 1

A <
B < —
- 517
3
y
'
. VuiAo\" í ViAvVnv;
* ?' > ó. í itt

C < -
llamar_ a SUBR(A , A, A + B , C)

W:
¡V
-. t: - miSii . C’ V: 1 o» >
escribir(C) Cl , ; - cv
fill // DEMO * * . ..\ i mnV tí *
o in ¿ a i
. < Modo> entero: v)
E entero:,z; .
a
v
: x v
y• ^ p ....V s
Procedimiento SUBR (< Modo> entero
/ *

v *
- » *

inicio lo)
x< x
v y
- +
+
1
z '
r " ni i
í d
fin « procedimiento

Scanned with CamScanner


' ‘
ón
Fundamentos de programaci
• ^ r* • v. » »
'
186
. . i ,* * \ h>
*'•' -í»
--

¡ •
! hi < y * rn * *

Modo por valor: \ í > .¡.cr >oli


r
I

a) sólo por valor:


consiguiente, >
no se transmite ningún resultado por
•? $ íÉ Vy
• *i •
, 4

C novar ía C = 17
•f * /; » • • .ir. ; ; j »; * / *• ? \

b ) valorjresultado: *

X A 3 :
- • ,>
i* f 14 /
V >
i . y = A = 3 7 .
A = 3 i ’ z
= A +; B = 8 .
pasa al procedimiento/
i »
= 5 •
;

B •

v = C = 17 'i *

C = 17 Al : '
w '. • 7
t /* j
< •< ? ; *

al ejecutar el procedimiento quedará:


'
X x + 1 = 3 +lobortuiivoiq b SlipJtfinníK}
1
:
¡
fn
'
v = y + v 8 = íi
.
z = 3
1-Jt v ¡or ;- ? )
' '

.
?oTiaor } jenf>Q í?Qnu. ,j' < ic goiqd
•-
m .
el parámetro llamado v pasa el valor del resultado v a su parámetro actual correspondiente , C.
Por / ..
tanto = 1 1.
D - - tontn, C _ 11
"'
-• V .. ' * :
'

; 0i *
Modo por referencia: r

( . i * o d l i v-

7r •
Posiciones de la Posiciones de la i

memoria del memoria del


„ :
„ ¿ iplü v i o q ü«5i»q
Programa llamador
'
.
ubnob i , ' r i o v ^ >!i:rrno1 ¿o ií3f n¿‘rpq ?r>i
Subprograma llamado
<

- - — - • ' ..
1 / «
o ?
ifc OI<" •.»~*
/
»
J
% i o\ Q'J nsqrnc 7 \<?.ru
n; / i: r .: : . m ufn.' ni/rto • inq
>
1 !1
'! o'
> ‘' ‘ *

* : i
“ v .

7< :
i r • 4 ' tn< o . i - noter. :/ . ) toi
: HSU 3 Plnyffl

:« - »
'M ':T oídl
\
TI . y

C recibirá el valor 12 . J,3 A


-
.
r > r .aV*
oi 1
i > A —
- *

Utilizando variables globales: e :


rr
algoritmo DEMO
- A ,A f. ü-MIP,
var entero: A , B , C r ' tkdiv ,ft
inicio r u\ \
oM.:
A < — 3
B -
4 5 •
. , ' U . - » «mti á octnu '

c *- 17
_
llamar a SUBR V nnjidn*'. pv : . Sl:> í 7 •

escribir ( c ) '
fin
ftí í«*ctar# tsnI¡ “
oir.^ lr. i 1

Scanned with CamScanner


Subprogramas ( subalgor
í tmos ): procedimientos y funciones

procedimiento SUBR
inicio
— V) 4

1 u* » v
a
— a '
4 + * .\ *

c f ci + el + t)

fin _ procedimiento A
u i ü IJOCí ? > ni i
* t
í

Es decir, el valor de C será 13.


La llamada por referencia es el sistema estándar utilizado por FORTRAN para pasar parámetros.
La llamada por nombre es estándar en Algol 60. Simula 67 proporciona llamadas por valor, refe
. -
renda y nombre..10 , „ ,
Pascal permite pasar bien por valor bien por referencia
procedure demo ( y : integer ; var z : real ) ;
: < J í mloi icq oiJom Énsq
'
nu ib o?mc .8.a siugR
especifica que se pasa por valor mientras que z se pasa por referencia indicado por la palabra
y

reservada var . La elección entre un sistema u otro puede venir determinado por diversas consi
— -
deraciones, como evitar efectos laterales no deseados provocados por modificaciones inadvertidas de
parámetros formales
‘ • > ;
*

r n.
( véase 5.7).
< -ní j . : . na

: 1 ) 11 01 • ‘
’ - : :; L
'

’ •
nu ¿tíDnoJmi /jldnriK / cnu ^3 ífi üloc OT’íHfii'nf q b *
'"duu; t».í p ¿ ; / , '- uiob rn ttrniM .v *
5.5.5. Síntesis de la transmisión de parámetros
¡
w
lo r,‘, v Irw nu no ¿ j
' 1

.
,
* —.
o . o

.
<oi y^ BDibíiiol noíO jvub ’roq oií3m¿x;q TU lilim nnu ton
^ ’
> íú oibni íncSÍ
Losmétodos de transmisión de pará metros más utilizados-son por.voinr y -
pnj referencia. ;
El paso de un parámetro por valor significa que el valor del argumento parámetro actual o

real se asigna al parámetro formal. En otras palabras, antes de que el subprograma comience a eje-
— i

cutarse, el argumento se eval úa a un valor específico (por ejemplo, 8 o 12). Este valor se copia
entonces en el correspondiente parámetro formal dentro del subprograma.
Una vez que el procedimiento arranca, cualquier cambio del valor de tal parámetro formal no se
refleja en un cambio en el correspondiente argumento. Esto es, cuando el subprograma se termine, el
argumento actual tendrá exactamente el mismo valor que cuando el subprograma comenzó, con inde-
pendencia de lo que haya sucedido al pará metro formal. Este mé todo es el método por defecto en
Pascal si no se indica explícitamente otro. Estos parámetros de entrada se denominan parámetros
valor. En los algoritmos indicaremos como < modo > E (entrada). El paso de un parámetro por refe -
rencia o dirección se llama parámetro variable , en oposición al parámetro por valor. En este caso, la
. . lurnJtr i : - ?n j ‘ . tsq
.Ol J . ’ t •:
*
V -
'
J S bn
- . oJ
- .' n >

zob í h '. Evaluaci ó n v ) x . Parámetro


actual
( bP i i i
5 T ( variables l

constante o i

n

expresión )
Programa principal Xi.:V

No permite la
=4=
i
comunicación en
este sentido
Par á metro formal
o.in ; • , • n; t i

Subprograma i

. i 'í 'N ;í ' '


-i r
^ ^ »i . . , »
/ V ' i K \ I

Figura 5.7. Paso de un par á metro por valor. - K \' . i

' ¡

Scanned with CamScanner


V-Vk
ón
188 Fundamentos de programaci
Parámetro actual
i
Programa principal ( debe ser una variable )
f «lí i
Una posición

» i «• / ,
*
ír i • ? ' *
í
de almacenamiento
iljl < ,1 ‘ •j V ' 0 . rmuiotei toq d)i»m i > •

. •
H * {(
‘ I
’ *T
. ¿v ) Í K J
rrrn nhJf '
í

Parámetro formal
Subprograma ! jf ' y.' ii' j i M j • ’ íOI ¿ » ^ (parámetro var ) . ,y
-
,
r
L * -• J :• i :-
J
i ?
\•

*
. ' •\ 3 BV
í
'

— ncia.
refere
* *

Figura 5.8. Paso de un par á metro por


un :
v. ; % ’ " r ^ •

• : i -i IOU

— —

, • "
~

1O0 ¿ ; ’ i * • •
'

; •

, , .
^ r -í
* | r
'* * > O J
*
' <; j

ámetro actual se envía al subprograma. Si a un


i f

^
posición o dirección (no el valor) del argumento o par
en Pascal con la palabra reservada
parámetro formal se le da el atributo de parámetro variable —
en el parámetro formal se refle-
var— y si el parámetro actual es una variable , entonces un cambio
tienen la misma posición de
ja en un cambio en el correspondiente parámetro actual , ya que ambos
memoria. m - ¡i5f ?u b odt <5Í ITU ;u. ú i - l 3 »:- Tí . o '
: '

con la palabr a
Para indicar que deseamos transmitir un parámetro por dirección, lo indicaremos
parámetro variable — en Pascal se indica con la palabra reservada var— y especificarem
os como
<modo> E/ S ( entrada/salida ) o S ( salida ) . . 5Up bfiln ii TO ÍBV ioq oiJomi teq rw í > o?Jsq 3


* ' 1 ,- íáí » . - f t r y .¡ ; .!* 'im. ü ’ - í u* ; / wo n .

>
- * rr. fi w , j ^ '

Ejemplo 5.11 . > < » rirn }) y ; i ; o IO í BV nu , 6¡ dnsrnnsis l;


j *
¡lin

Se trata de realizar el cálculo del área de un círculo y la longitud de laí.'circunf erencia en función del
' • ' ri / uODO'
iq fe sup ? 11 ’

valor ,del radio le ído desde el teclado.'


’1
’ 4
- ' - :
'• mÍÍT' hiHiv v,
'
jOU
í
• :i •.
- ^ nn
rvjfff : ;
noOlpfr no fcjiwfó1
. r » í

’ > ^ r . . íü ' ; l í
longitud de la
Recordemos las fórmulas del área del círculo y de la longitud
it. * í - . - ía circun
vrju . . • .
' • o
ia:-
nrSa
ferenc
rirrnnferp
b , r. r . . . •
• i i jiii
'
• > / >{ • ‘ .
fi '
maq
'

C
;; 2 P1 X r •2 xpi X P donrfcp¡ = 3.141592 m > ,
'
, .. •
„ .

Los parámetros de entrada: radio.


Los parámetros de salida: a r e a , l o n g i tud. 1
El procedimiento c i r c u l o calcula los valores pedidos . -
procedimiento circulo ( E real radio; s real
/ / pará metros valor: radio
? - ar0
eaa
' longitud )
i

/ / parametros variable: area , longitud


'
^real: pi X\
inicio
. *
pi <- 3.141592
1v i I » • .
>
> -X
area f- pi * radio * radio
longitud \
^ 2 * pi
fin_procedimiento
* rad Í0 u . ,

,
<
¿:: ptzr¿T ^^' ^ ^^«iz; y^
esson:
1 ' r 1 "Jf i f|

Scanned with CamScanner


P gramas ( subalgoritmos
): procedimientos y funciones * 189 :

Invoquemos el procedimiento circulo uü


i
»
llamar a circulo(6 A, C)
_ .
Barfola «ion , , ,
f>tev b omoo SQttfimfli 92 Q
,

fldiWtt»
«
'' " BidmtiD -M a
ti? rimú
' '

programa nrinrinal
/ nrnarama
/ /{ principal oiiarni

bh' ’ ' ' * "" '
••
//
inicio : n< tu << L¿
// llamada al procedimiento
llamar_a circulo(6, A , C)

JOíB / IB . : tole / ! 3 obü td j i 'j í'í l i '/ i tqrni


v M u nernotm nlmaio urjq ¡ í;

fin
;
{ , , v ! ' *' } sbiaiq 32 rbidm . óbrttiru Y < ú óbií iq 'j íl i /
'

- : ¡ok > b t.i , n - fbctóiib


procedimiento circulo( E real; radioes reaTí areaflorlditiudj ‘A lidrr. J S¿ '

-
//parametros valor:radio
//parametros variable: area , longitud

inicio
pi <- 3.141592
area e pi'* radio \*.ía
longitud 4 2 * pi * radio
- —
'á >0"' R IOS SOT¡/l3IM¡ÜHOOfíc¡Y 2HKOIOMU ? .6.3 -
fin_procedimiento . , , , ,
-.. i
*
»
l Ul1

SQLlZPpJ!:}. :; * ív "
' •
. . '

« ' - b.:¡ l./• * • £'
r
. ^ tii> \¿ ¿ ónrin
f ? v
jemp O .
t v n f j /ü { MI ;>
'
o * ni o!,: í . ¿ J < -t n hv
por valor, y j, por
/; • ío * j;
-
Consideremos un subprograma N con dos parámetros formales: i, transmitido
variable. - . ^ ' .: v oinsimiMooiq b no cbihft
.

.
- » un o ó
Tuf » stouq it » p *
5 ndbritn i;! >upo'/ i
nn:> uL" , T Í >r r
ao ..v á i . / tur; í; :í
algoritmo .M ,,. j „ . -
//variables A , B enteras
g r ;i y* i J i ,ttJ ^ i íJTJF« nwn; : . i ¡
a ;- iib,\ ti ,i‘ / <;.
« v W . v/;r . t r v\ . U .u ; . .

-
^
.- .
- ’

var
entero: A , B U tip > real v- ‘s - •
. - ’
- - veb\qTifj\B
inicio
A < 2
B 4- 3
_
_
llamar a N( A , B).
, .
/ .x
i .
:
:
<*

- :

-1 . '

-• u -
- 1
nolonuí-
‘mi:.»
o.n . -
escribir(A , B).
fin 1. { t,//algoritmo M
.
,
1

.Pt .
, .

-- '
1

l
v,<,/* ;;í bl
Y
,'
;
v ún b^O|
. . boniíl <rt
«
v
- •*

,
'

Vi

,
.* u-íú - 1 U
.
-
.

Procedimiento N( E entero: I; E/S entero


//parametros valor i V.bl3li'i\ u .- u. .n
« *
'b'Oi i . »
//parámetros variable j *

inici b:
° .. •
^ol] í x. J .

. 1 ' 1* J

5» cr¿; lo,^
*;

£ 0U / vAO
:
t- viJ . nii ; d
,,^ TibMMu
' r *

ir ( i j)
' j 2# ^ ^ Ji *
M «»». 5! se íescribir
i !Í ¡* án: ' v ^ ^
cJ ÍT3
^^ |f

^ ¿ ti
* *

-Procedimiento , . , >1 *
; - ¡ lo v. : ib
*
m. x resultados , >

Si se ejecuta el procedimiento N,
|
, fl 3 ‘
veam
^
7
,q r . . . , . u;: , .
- j sd orno» ¿olirminidt»
íAl r:
y B son pará metros actuales
'

. *

_ ,
* - y j son parámetros formales.,
h . ) ,
nr
, ’
, : -
de A a i es decir
,

,
r
1

, i
r
= ^2 . Cuando=
,

i se modi
A -
A
. • ,
A *
¡

-
Como i es por valor, se transmite el ,vai consiguiente, a la terminaci ón de N, A
ft por defecto de i « i + 1 0 a l 2 A
*
Slgue valiendo 2 . — . - h- '

Scanned with CamScanner


1
190 Fundamentos de programación

El parámetro B se transmite por referencia, es decir, j es un parámetro de j , i en scomenzar


variable . Al la
valor j y cuando se suma 10 al valor í mismo no
ejecución de N, B se almacena como el
i , j se escriben en N, los
cambia. El valor del parámetro B se cambia a 13 . Cuando los valores
resultados son:

12 y 13 í

ha cambiado el valor B . El valor de


pero cuando retoman a M y al imprimir los valores de A y B, sólo
j tambi én se pierde, pero éste es la
i = 12 se pierde en N cuando é ste ya termina . El valor de
dirección , no el valor 13 .
{ , B ):
Se escribirá como resultado final de la instrucción escribir A
t
2 13
tt z y Z t' i

5.6. FUNCIONES .
Y PROCEDIMIENTOS COMO PARAMETROS
' V * J i ' —>
*
, |
' ' '

Hasta ahora los subprogramas que hemos considerado implicaban dos tipos de parámetros formales:
parámetros valor y parámetros variable . Sin embargo, en ocasiones se requiere que un procedi-
miento o funci ón dado invoque a otro procedimiento o funci ón que ha sido definido fuera del
ámbito de ese procedimiento o funci ón . Por ejemplo, se puede necesitar que un procedimiento P
invoque la funci ón F que puede estar o no definida en el procedimiento P; esto puede conseguirse
transfiriendo como parámetro el procedimiento o funci ón externa ( F ) o procedimiento o funci ón
dado ( por ejemplo, el P ) . En resumen , algunos lenguajes de programaci ón — entre ellos Pascal —
admiten parámetros procedimiento y parámetros función . J
: (L! I
,

Ejemplos:
procedimiento P( E fuñe: Fl ; E real : x , y)
real función F( E fuñe: F1 , F2; E entero:x,y)
r ^ Ji
- .12i V II-
‘ T

Los parámetros formales del proopdimienta-P <;nn la funci ón Fl y las variables X e Y, y los pará-
metros formales de la funci ón F enn la <; funciones Fl y F 2 , y las variables x
.

Procedimientos función

Para ilustrar el uso de los pará metros funci ón consideremos la función integral para calcular el área
,
I
bajo una curva f ( x ) para un intervalo a < = x < = b.
Enotécnica conocida para el cálculo del área es subdividir la regi ón en rectángulos , como se
muestra en la Figuiu y sumar las árt:as~de~los~rectángulos— Estos-reetángulos-sc construyen sub-
dividiendo el intervalo [a , b] en m subintervalos iguales y formando rectángulos con estos
subintervalos como bases y alturas dadas por los valores de f en los puntos medios de los subin -
tervalos.
La funci ón integral debe tener los parámetros formales a , b v_n , Que son parámetros valor ord *
.
'

narí os~actuales de tipo real ; se asocian con los parámetros formales a y b; un parámetro actual

tipo entero las subdivisiones se asocia con el parámetro formal n y una funci ón actual se asocia
con el parámetro formal f .

Scanned with CamScanner


Subprogramas ( subalgoritmos ): procedimientos y funciones
191

j
-ü*
. ora
nc i. Av i

1 > IJ i S
'
TU
*;

rLr ,vr:- D
n ’ iotTiii ni. ¡i

r f .
1X0 / Oflil Ül
K = nx) isv

: ci -
X <

d r.i \ nf ,rt

r• * x
Figura 5.9. Cá lculo del á rea bajo la curva f (x).
xr-ofi .' t
• : *
L * 2 '\A í -
--- 1 »

ÍU
Los pará metros función se designan como tale* rnn una rahprpra HP fnnrinn dpnfrp dp. la lista de
parámetros formales. La función integral podrá definirse por . »

..
. , v )Viove»«
uwi . • ' }
real funclonUnrpnr^l / F fnnr f ; E real: a , b; E entero: n ) »
; ‘ ' C Ó fit
í* í‘
el tipo func-tipo real funci ón ( E real:x ) : func -

aquí la funci ón fu ñe : F especifica que f es una función parámetro que denota una función cuyo
rs ó ramf*tm ínrmal \ r \ ra 1r* r enn r\ f* rP íll F?1 onrrPCnrmHipntP nará mptrn fiinr í nn flrtll íll HPHP RPT linfl

. .YJ
V ÍÍ 'J

: Area <— Integral ( Integrado, O , 1.5 , 20 ) ’ • '


. : . . fj ucriil
;

es vuna referencia válida a función.


.
eo nsiml í; : -roí o rc3 ^ '
.

Diseñar un algoritmo que utilice la funció n Integral para calcular el área bajo el gráfico de las jun-
ción es f l" ( x ) = x3 - 6 x + lOx e Integrado por Integrado ( x ) = x + 3x + 2 para 0 < = x < = 4:
2

0? !; t ; i i , í , MI «t
ti ¡
2

oYo
_
OU \W
í nstff - 1 ^ . *: > * » ' v>‘ ‘r. ‘ í i . ni
UUitty ) tii i : , wy . )I .. 1 i':, - . * 'jt
xr*o J : ^ yvS\ w . IV * on » « ú
:

' i


- • . . ’
"1
‘ 1
» ¿ »¡ '

n , algoritmo ; Area _ bajo curvas *


i, ‘
i ¡ti ,
r •

;
Of íl) Ht
'

r . . mvj ¿GrV "J


y ' Ú J \1 J U í.Y » , í ji ,1
• ( . .. f
' •

:
fcireai
var
. xVi) :. fuñe
^ =1 : :
función( E xeaiL
.
0 - l i / wm u iboóm oínaimibíiooigaM i?
i
± ^1
* '
t < M'
'
'

J ’*
'
,

í)fl jjy real : a, b '

5Jlí iÍUí f0l . ft •

entero n ¿ . : JH <
inicio ' » IK
l ( i bCun
‘ -
ÜIK»:»
. . unitairj n < n
escribir( ' ¿ Entre que limites ? ’ )
i»; i M
vb
r /; ; í ;; i
.

.11

i
!•'
. ¡ , .
' > n í t-

i
-

*;
.
't
ti y
M leerla , b ) ^ •
i J :. •1 ’ I irjt o3
. eacribir ( ' ¿ Subintervalos ? ' ) ; it . ;
*í •>
n* : ; yy -j
jjn
^
i •
* i
< M
r ,i
2 eer( n ) tT 5
• • •*
Y rt : ' r
escribir( integral ( f 1 a, b, n ) ) #

ih ííf -jit.' h - ¡ U

-, ^-
j
eBcribiriintegral ( integrado, a , b, n ) ) I
¡w
fin
) i Ci ; "
j
-* i :i n ;oin rn

Scanned with CamScanner


V. VVJCud.
Fundamentos de programación
iJ

192
i
i
: x)
real función fl (E real i

inicio * x * x + 10 * x)
devolver( x * x * x 6 - t

fin_ _funcion '..


r V. - T

( real : x )
real función integrado E '
»
*
*•

inicio + 2 )
devolver( x * x + 3 * x t
fin_función . .
_ <
, b;'.E .entero : n)
i
(E fuñ e : f ; E real : a * -
t

real función integral * /

. •: *
var.
J
V*
,x,s
•. . • •

: baserectangulo ,al tura


real
entero : i , i
i

inicio c,

baserectangulo < (b a) / n
——
-
x i a + baserectangulo/2! s. fil i r i f oluoffiO
S < 0 ^y
-
desde i < 1 hasta n hacer
altura 4 f(x) -
^
.s s + baserectangulo * altura

x 4 x + baserectangulo
. ' U: M J f i. yj -
m / i ..o > i .
v . fi ó hnut
-- TT 7
fe rnol .
IOUWU
;
'
íWI
,
'

v:p*íi!&i¿q
1I Un í :2 : -
*

fin_desde » .* j ¡ : r í‘ *
.
* •
«

• '

devolver( s )
fin_funcion ¿ ’ t í . rit
-:
I* f
Á ó Í n:L»
i
* ;
i K í
. L> - i
i
-
í< !

;• : 1
. C' *
Ah í A -
' ÍC SvptUIMi

5.7. LOS EFECTOS LATERALES fcl f-tip > ít i -


. ; ajoí if í ijjibnorrorKO í rí U, > . . J
>;nu •
Carino} cyu t ¿q

^: . K fí 1 :

^
:
^
Las modificaciones que se produzcan mediante una función o
procedimiento en los elementos
situados fuera del subprograma (funci ón o procedimiento se denominan
) efectos laterales . Aunque
en afgunos casos los efectos laterales pueden ser beneficiosos en la programación, es conveniente no
recurrir a ellos de modo general. Consideramos a continuación los efectos laterales en funciones y en
procedimientos.
x ó bm/l r íibil ü v fiiomrjTjt jjr: u ¿3 .
.
V’

^ ’
' .' " V »\
i; .' ' X l V.
"
í '

^
La comunicaci ón del procedimiento con el resto del programa-^e-debe-realizannonnalmente a través
de pará metros. Cualquier otra comunicación entr£ eLprocedimientQ-y el resto del-programa se _ -
conoce como efectos laterales . Como ya se ha comentado, los efectos laterales son perjudiciales en
la mayor ía de los casos, como se indica en la Figura 5.10.
!, éste es un
. Si un procedimiento modifica una variable global ( distinta de un pará metro actual
efecto lateral. Por ello, excepto en contadas ocasiones, no debe aparecer en la declaración del pr
cedimiento. Si se necesita una variable temporal en un procedimiento, utilice una variable local, no °‘

una variable global. Si se desea que el programa modifique el valor de una variable global, utilice un
pará metro formal variable en la declaración del procedimiento y a continuación utilice la variable
global como el parámetro actual en una llamada al procedimiento.
En general, se debe seguir la regla de « ninguna variable global en procedimientos» , aunque esta
prohibición no significa que los procedimientos no puedan manipular variables globales. De hecho,
-
^

el cambio de variables globales se debe pasaraT proced í miento como pará metros actuales. Las varia
bles globales no se deben utilizar directamente en las instrucciones en el cuerpo de un procedi
miento; en su lugar, utilice un pará metro formal o variable local. ~
-
^
Scanned with CamScanner
Subprogramas ( subalgoritmos ): procedimientos y funciones 193

- liTVyt '

¿évrtfB vu.
’ " AJ ) ?!

'"

' f i íjftj
í

.?f 5í runri
U V’ U , ñ,V * /sino :: ojoolo xJ "

Oiljí . ¡ \ n nt: * r.n H :/ í;<3 , non£ fH


.
—-
i" ‘
Programa
principal y otros
j

;
4

dsb OfTOfapitf
¿ " •
-- ‘ - 1
i «
f
usu J:í nboT procedimientos *

'i ll <J QMO í MI l ; .X - I ? i y fi liflO / (TW )í?g


'
1.71 1 ir ? Í -
. " ! . - i T on
. ~ í j V - v / í l “ . fTT Í .. - ':n ->!; BÍ 2 Í1 c! sb
r
.
"

i A

•Í799opbl , ? Soj < ; , « •

-
r . { > i r > uq'jb ' U . r nonno •- i xhauiL am - ' OíIMEX
: II > lubóffi no ó rb * 1 1

fc.il fnaoir/feh Lista dé ^> b ot> lo q í O rj voiq


¡ T > f í n í . ) jo' en / .id
Efectos
pará metros
laterales
actuales : r H . do r. - ’ • l . (

V
nsa ..
.tifl Ú Mc ) IrtOI8BU 33H 8 S
^
Mi <

,oiln «
í
vvv
J . bouq
cmci -Oiqdus
Tsbim r . ;
'

«• V W f
¡O ' IJpD . Uj ...

V* O
nmcll otouqemeis iqtfiw na »ofioa 92 onioD
,i
o í 'f’JJPJIf ® ,;f otíoab orbib jaiiwrafivioMiw

t

Ü C, '
.
£ rl « i í C i :r s « 3 ¿r
_ 4

Figura 5.10. Efectos laterales en procedimientos.


- otq b 20lio vb onu. Bbco oh nobenimoHif a 2tmíngot ( jdu¿ ¿oí ob omolo » lo oouLmq o¿ obru-.u' ) .


ICIO ‘ O 1 . 0:0 1 0200
En aquellos lenguajes en que es posible declarar constantes como Pascal se pueden utilizar
constantes globales en una declaración de procedimiento; la razón reside en el hecho de que las cons-

tantes no pueden ser modificadas por el procedimiento y, por consiguiente, no existe peligro de que
se puedan modificar inadvertidamerite?' b -" ‘0U'j3¿ cnu ob ¿ iinotoenqdu ' íirtobooué 3W0á ’
¡

A i huí 11 A
5.7.2. En funciones
:rjoid o *•

Una función toma lns valores de los argumentos y de\ueh/£ un únieo v¿ilor. Sin embargo, al igual - - -
que los procedimientos, una función en algunos lenguajes de programación puede hacer cosas
similares a un procedimiento o subrutina. Una función puede tener parámetros variables además de
— —
parámetros valor en Olleta dp pará metros formales. Una funci ón puede cambiar el contenido de una
variable-global y ejecutar-instrucciones de-entrada/sahda (escribir un mensaje en la pantalla, leer un
.
válor del teclado,' etc.) Estas operaciones
r. ! oí' ; j b obol ~
. : , í iioqor fioloui í es u ub
‘ “
se conocen como parámetros laterales y se deben evitar,
"

¡
~
, jb
:
¡v í « nif : ' . : .' o or roo . LuxittJv J ;S OUS¿í.*; nb; -..í uooi
-
2 nbir is fal ah o> u 13
b
- "
— -— . — — — — -.
u >; OLqj :. . íí jl j.oiq ¿olbupi» of » nó tor » ' . 1 o ^ • 4 * 4J á

,, Programa principal ( !/; ti íin oborn ob o¿ririí) ob tr. b


- í U' OMI on 2ornin ómorf ?if \>
^
oó: >. oo L' txu lici ón i o
•,
/ . Oinon i binri
1
^ '
procedimiento y
otras funciones ooiq nu ob mulho 'o cJ
jp islivo nsq .ogtcdmo rrir
- -
.rtóiocninnol ob i T
- 0íri!20 oL
. -
\ va .d i; ocfob ? f .íibi t T oo
i f i . < <; ' f !; : ub in Efectos / d b
:
Argumentos > r. rr < ,Valor\ > .\ -
: el uonrnbfi O í; . 20{ i . r > noj ni . >:a oup ob n ósci eJ
;
I '

( par á metros 1.2 devuelto por , u \ fvqit .' /io ífiocrp.o zirtu )
- .
' T i

ov.s&ri. . o í n o' í ii <•


o ! ». H-r i aiotte
ne n I
iq /d 1
. •i
• IL, -
-Hr valor ) ' ; ] ' la funció n * 1 ( OOr Í OJOI ob Zíi ííOtOOTlib
A
1


rr . \: ) i ¡ n:l . ( U olm'tqr.O '

-
• .

Ü • .2O0Í2Ü í áoiqi asió noo ¿ (y. n.- Hn < uno r;;; n i T beb í / R ( coot ob oícraonoo lo no
:

r
Funci ó n er .n cb
. ^ rtejH
iV. - -
;u 1 . ’ bv. -

nvj’ ' A \ \o i i ¿
* • ’ i' v
1 ' • . lJ % % r: •
w?
. ~ iK
Figura 5.11 . Efectos laterales en una funci ó n . n mwvy CTI íí A:W

i 4

Scanned with CamScanner


194 Fundamentos de programación \ \C •
i * > .i 11

Los efectos laterales están considerados — normalmente— como una mala


técnica de progra-
mación, pues hacen más dif ícil de entender los programas.
Toda la información que se transfiere entre procedimientos y funciones debe
realizarse a través
procedimiento o fun-
de la lista de parámetros y no a través de variables globales. Esto convertirá el
sí solos, lo que evi-
ción en módulos independientes que pueden ser comprobados y depurados por
tará no preocupamos por el resto de las partes del programa. . n

j | I

5.8. RECURSION (RECURSIVIDAD)


i i !
Como ya se conoce, un subprograma puede llamar a cualquier otro subprograma y éste a otro, y así
sucesivamente; dicho de otro modo, los subprogramas se pueden anidar. Se puede tener
— cuJ -ftfflHT~~aHD
A llamar _a B , B l l a m a r a C .
^ VJG í ao, * . .Gf . <? s v f f j i -
'
¡ :
• iv •
G í. .. * .

Cijand^ sp prr>rlnrp pl rptoiau^Ufts-^ HhpiiigiHniTTy n 1a-tefromación de cadajino de ellos el pro- .

^
cesoxesultante serái —
LM. »
¿ q M í . r - jiffi. i ji í )
. '. j|f í i ¿oq
•• • ' .
y. 3 5tip, no ,: 3 jBü v / í t» F /olbupí ; n3
. D retornar a - C,
_ - - r e t o r n a r l a-
B A . ‘
i . :
v. rrvj T ' fC¡* ,v iv nubjsí . J íICI
^
^-
tí Uf i M
^
ía si dos subprogramas
¿Qué suceder de^ una secuencia son 1los mismos?
• 1
• >
_ A

j > or;< nfib'wn v.

A llamarla A
e&neianu) í « 3 .S. V
o bien:
I i .- - _
• % '< Tj; n: . . •: \
_
\\\ :. j ; < -.
: :.•! 9b - y. 'ley ¿ o í ani.oJ ¡ ¡iú|; * J
.
t
í A llamar a B , B llamar a A .
• . . ; .. jni íi - ' 1 * Uu
) ci « i - riiLv >OU ( aq í v, ,

: ;
i as

- -
-
En primera instancia, parece incorrecta. Sin embargo, existen lenguajes de programación Pas-
.


cal, C, entre otros en que un subprograma puede llamarse a sí mismo. . . . v *
_
¡ , r

IIna-funcinn n procedimiento que. se- pnedeJlamar a sí mkmn Harp? rorursivo. La recursion


sp
- -
eu vidn < ' i í rttbapqtq iu ; .

.
• I > 1 •


.

'

* '

(regursividad) es una herramienta muy potente en algunas aplicaciones j;ohretodoide cálculo. La


recursion puede ser utilizada como una alternativa a la repetición o estructura repetitiva.
El uso de la recursion es particularmente idóneo para la solución de aquellos problemas que pue-
den definirse de modo natural en términos recursivos. *

La escritura de un procedimiento o función recursivo es similar a sus homónimos no recursivos;


sin embargo, para evitar que la recursión contin úe indefinidamente es preciso incluir una condición
de terminación.
La razón de que existan lenguajes que admiten la recursividad se debe a la existencia de estruc -
turas específicas tipo pilas { stack , en inglés) para este tipo de procesos y memorias dinámicas. Las
direcciones de retomo y el estado de cada subprograma se guardan en estructuras tipo pilas ( véase
Capítulo 11). En el Capítulo 11 se profundizará en el tema de las pilas; ahora nos centraremos sólo
en el concepto de recursividad y en su comprensión con ejemplos básicos.

Ejemplo 5.13
Muchas funciones matemáticas se definen recursivamente. Un ejemplo de ello es el factorial de un
número entero n. > rt \ *;

Scanned with CamScanner


Subprogramas ( subalgoritmos ): procedimientos y funciones 195

La función factorial se define como JAJflOT )A 3 ) ) i -t


V
1 si n = 0' 0! = 1 £e
" " r - i S ) J í lf íoi: if * /r
^
* ' '
n! = <

k
< n > x i 11' 1 ) x ( n 2 ) X ... X 3 X 2 X 1 si n > 0 n. ( n-l ) . ( n-2 ) ....3.2.1

Si se observa la fórmula anterior cuando n > 0 , es f ácil definir n ! en función de ( n - 1) !


pipmnln, 5
Por• ejemplo R !i 1 A )A I \ • 1 \ - •

omolí

5! = 5 x 4x 3 x 2 xl = 120 “

4!
3!
2!
11
=
= 3x2x
= 2 x1
= lxl
4x3x2x1
l
-
= 24
=
=
r A.
b

- -- - I—
2
-tUI *
.
.
r
- /*•
’ M1

2222?íü
'
'

•*

0! = 1
i IFk T J \ ?
»
<* .vw i ¿I
f i,
«• id i ) I’

Se pueden transformar las expresiones anteriores en


*b . A 9b ovicusoi O í . JC * í D .sr .a r,i: jj¡ -
5! = 5 x 4 1
41 = 4x 3 1 tnozSl < ; BIUSRALSB toblaux » *
• * -i^ «ozcq 2oJ
31 = 3 x21
2 1 = 2 x 11 T
1! = 1 x 0! 0 n un u íMW í )
JA1 ROTOAH
~~ UntU V \ . Y¿

.
1

En términos generales sería: sT k


'
>4 í ’ > 1
i
JL
•ión de 1 MA1.R0T0. AH r

n! =
i n ~. 0 TKüí
si
i . . m n
'

>
• v \ ' tc\ uv3i? o
• *

n (n - 1 , u

. | JAlROTOA -1 i
> V; * ,¡ f
La función FACTORIAL de N expresada en t é rminos recursivos ser
ía:
Ai:.
' ' • ' '
*! »

FACTORIAL < — N * FACTORIAL(N - 1)

La definición de la función ser


ía: r
- T-— i —c —
O !
*
£
: i

b t S E * Í U Í JAIfiOTOA - .
^ r: ( EUAinOTDA
^ í JAIflO 1 Al

- 1
entero funci ón factorial( E entero: n)
//calculo recursivo del factorial
fTÍ - ~
1

inicio
. C - c
si n = 0 entonces MAtf íOT JA « ( S ) JAIROTDA
- ^ ^ • JAIMOT i
devolver ( 1 )
si _no devolver (n * factorial( n - 1)) M i
- e “

fin_si

r : r * ( 0 UAIROTOAH ( f )JAlRO r O AH JA i ROIDAS


fin_ funcion •r
r \

Para demostrar cómo esta versión recursiva de FACTORIAL calcula el valor de n 1 , considere-
mos el caso de n = 3. Un proceso gr áfico se representa en la Figura 5.12. ' j

Scanned with CamScanner


, )
*
196 Fundamentos de programación

FACTORIALS
C f
I i r V'y 1 ¡r »
^
FACT
* 0 - n
N es 3 (2)
FACTORIAL <- 3 * FACTORIAL
Retorno x í .
- Ti y < 1 1,
)
(

t *. < i¿
b ' . u' j v n >U ¡ L tluirnof id
1. !: f o : JfJi :
I N 2
es ,' 1

FACTORIAL <- 2 * FACTORIAL


( 1) le ol'jfn'j’' .
Retorno
A \ X i X

N es 1
v x <y y
FACTORIAL <- 1 * FACTORIAL (0) • x í x y

Retorno

N es 0
FACTORIAL <- 1
Retorno .
r r j X-í - -- L-. / üí Tí nutmq •;<
Figura 5.12. Cálculo recursivo de FACTORIAL de
3
\ i
f
» r*
f
X í- *
Los pasos sucesivos extraídos de la Figura 5.12 son: ! C > c ;

.
I
I
X V
3
Como n no es 0
:o > r
FACTORIAL
se genera otra
operación 2
í 'ítb .- tyn'; -
. «oninnSt n T
;

FACTORIAL ;
Como FACTORIAL de 0
T1 es siempre 7 , este valor
se asignará a la variable
> -- :n
FACTORIAL
TQ FACTORIAL, y ahora se
; i.nv * . Ü i LL; t ;, ;
realizará el proceso en ’
.

‘ 1

.
FACTORIAL sentido ascendente #, V. fi V ,

I ,v

3

FACTORIAL
6
FACTORIAL( 3 ) = FACTORIAL ( 2 )
1
. !•' r í ol.ifM/ t ¡¡
* 3 = 2.3 = 6
>[ > fl
*
n* i

^
?

iujnilob ' -

; .f c ? : • ¿i ; í.o¿prüi “ * t* .

ü
.
’,

2 2 • * '
ri
!I
• r y. '
1

*
FACTORIAL FACTORIAL( 2) = FACTORIALS * 2 = 2 ,t; , i 1

* ÍK

1
J7 i I4 J « i$viOVP5 o /; ir
la ni *
.
FACTORIAL FACTORIALS = FACTORIAL( O) * 1 = 1
J
4
i
’ j :v t v f j , Yá J » * Wl7
i
:)b t . / f ' diC. )' » f ^ fr r / r 3), .- > írtdJ.C U :
'

Ar f j
>
.
§

FACTORIAL I r i ;> »
t
íi) ':5?;r n <V. J
9

.I < oxs «y i *» J o«*co « ’> ' •

Scanned with CamScanner


Subprogramas ( subalgoritmos ): procedimientos y funcion 197
es

Ejemplo 5.14 .. -
t 'Xi
*
wjp. • í j
; i * r •
: *V í / í < ' • *
.i » - r»!- / . n n » , ?
Otro ejemplo tí pico de una función recursiva es la
nalmente como modelo para el crecimiento de una granjaFibonacci. Esta serie fue concebida origi -
serie
.de conejos ( multiplicación de conejos ) por
el matemático italiano del siglo xvi, Fibonacci. , ¡ , r , '

.Tonainü í - i - ' ' > A,


> ,r¡ í u > n *)m oi ímiun b sbivib »
•'

Lá seriééslá siguiente: r : : j ¡ - 13 Jon nnuumi«u


°
¿e ott nóUivib si i2 £
ctatrt ¿etoiittnfi tona - > l mints r? .£

-
1, 1, 2, 3, 5, 8, 13, 21, 34 ...
Esta serie crece muy rá pidamente; como ejemplo, el t
'jHW 'V 'iv ' r .
é rmino 15 es 610.
La serie de Fibonacci ( fibfib ) se exoresa
expresa así: noionu! ; ¿ J uto
o l o l t: }
fib( l ) = 1 zaozii r{ < > o MI d mi x

fib( 2 )‘ 1 -
fib( n ) = fib( n - 1 ) + f i b( n
d ** ¿
* a — _
- 2 ) paran > 2 cr/ / a
* - d d
Una función recursiva que calcula el elemento enésimo de la serie - • • •

de Fibonacci es: n >


IOT (. ovao
entero función fibonacci(E entero: n)
nil
//calculo del elemento n-esimo
inicio
inicio
ib:) *' si. * (\ ri.: iX )/ o , :2 )‘
\
OJ
=—ii W
;:
hr
\1 i = / ‘entonces
entunico-
’ l ( rt ' oI ) j í ‘ toflO KMrvibrtumodomixiin fo 16fu
' *
.£.B

r
<
YAA ¿«
_
' devolver ' ( 1 í -mlru :. niii
lf) - < ;[ nnntj
1 tni fí§l - nc
nq( hb LiLv? ¿« H
bb ‘.otitis i wftfjlci
írfirjio sttsb »
*J2 .& rm?. ig
¿ mi iqoiqdu.
<yiqck)£ fiu í;* ; J abra .
loq ' si no si* :* b oüot ó m .
lo ir duiqrnorj Y (S \ )bom fo .livob so ,22 •( C £ ftos soiolív so{ü3
1

_
‘ devolver ( fibonacci(n - 2) + fibonacci í n - 1)
fin si
.JOíBV
fin funci ón
— v i ;. , c o osr* í IC¡T¿ i a -

‘ . .: v *» 1.GV
Aunque es f ácil de escribir la funci ó n de Fibonac ci, no es muy eficaz definida de esta forma, ya
que cada paso recursivo genera otras dos llamadas a la misma función.
OI —* X
ar
—* .
•i

ACTIVIDADES DE PROGRAMACIÓ N RESUELTAS


v r- t W ( Y -
4 .‘
i- v J .. i

*• ; >, n
'
«
r?
.
5.1 Dise ñ ar el algoritmo que calcule el factorial de un n ú mero entero.
L i V, *
• o:: n no locrol c T -J :
> ’ JJX ; f . - ’ : v; .
* •
i "> d ? ' 0
• V3
M* . * f *
«. » *
• / • » • \l 3 : “ i
entero funció n factorial(E entero: n) < * a ü « *x 3tfr 1
*

var entero: f , i a *, ia
inicio rt
- a « j'j

si n = O entonces C íT

_
devolver (1 ) - d -> d
n
si no Jfcrj i
^
_- —
desde i < 1 hasta n hacer 8 fYX 3 í’. 0:;r jill
f < f * i ;L ;
fin desde all

__
devolver (f ) notomil ntl
fin si
fin funcion Y % K 9b v . - IfiV «oí fliftfdfcxn '( i { 6 »9fmrno) fill HI |ítoJ

.
5.2 Dise ñ ar un algoritmo que calcule el m á ximo com ú n divisor de dos n ú meros mediante el algoritmo de
Euclides.

Scanned with CamScanner


198 Fundamentos de programación

Sean los dos n úmeros A y B. El método para hallar el máximo com ú n divisor ( mcd) de dos n ú meros A y
B por el método de Euclides es:
. . V» n \ i ‘ , 5 *. ! v .-: « ' y \'\\\ '
'
t
V .U • '. \)
* '
' • i ••
*
• , f
*

V 1. Dividir el n ú mero mayor ( A ) por el menor ( B ) . Si el resto de la división es cero, el n ú mero B es el


máximo com ú n divisor. n 1

2. Si la división no es exacta, se divide el n ú mero menor ( B ) por el resto de la división anterior.


3. Se siguen los pasos anteriores hasta obtener un resto cero. El último divisor es el mcd buscado.

Algoritmo
OM r.-j ' • •imr : ; t i -
. .i ' .\ i JA :¿ ¿ ¿ ‘SA , ¡
O í IIO J js í rnmfcbiij í vi vum ’imrj
í,!; ( . |M i ir?? r;- í» - ;J fí
y n u 3 ir
entero función mcd(E entero: a , b)
inicio ur u . ' j* < <‘Á ) ' WC. & ! ri 3 b O Í VJK t:J
mientras a < > b hacer
si a > b entonces
a <- a b-
V =
si_no r < u /.,'iiiC
] v - u ) v\:\ + \\ - n')dí\
1
=
-
b 4 b - a
fin _si

fin mientras
devolver( a )
‘ J Oln
^rri^lO h O U p noiofiül cnU
fin_funcion •
j i i noloaui . * 1 •
?
r • • • «
^

5.3. Para calcular el máximo común divisor (mcd) de dos números se recurre a una o to l !Zl
función espec ífica defi-
nida con un subprograma . Se desea calcular la salida del programa principal
con dos números Ay B,
cuyos valores son 10 y 25 , es decir, el mcd(A, B) y comprobar el mé
todo de paso de parámetros por
valor. » - • . } > *
/ .
: ' *
.

Toviovr í *

1 n nti
algoritmo Maxcomdiv
var
i .< entero: N, x / Y • jfio K . uríodfl nonnul el ab Ibfcl 5 tUipnuA
inicio / /programa principal
x < 10 — m ., .
i n rl »: / ijíjrtmll ot> y tn
V o' fü '
/ *
j!OÜECI DUO
, to *
y 4- 25
n 4- mcd(x, y)
escribir ( x , y , n ) £ AT. J £ J 23 I/IOIOAM A A0On 3Q clCAQJVITOA
fi
fin
fUnClonmcd ( E enter : a b)
° ' 4
t pt tA . 1 , ,, , .. ^
inicio
mientras a < > b hacer
1 1.8 .
si a > b entonces
a
* ñ • í noiontrS rz' * 3¡i+ i 1

a - b
_
si no
i s*
' . G oioifti
b 4— b - a ^
_
fin B Í
f in_jnientras
devolver ( a )
c o o n o
*
J ; ll

• >
r> ‘i r r v c V rí . -/
IB vloveb
¡

o:i
_
> r ehaab
fin
fin_ funcion
j * 4
»
'
a ii
levlcvob
Los parámetros formales son a y b y recibirán » í
los valores de X e Y no i 1

--
''
• a 10 n i\ < . ,
b 25 -' n u 1 ¡jlaKS .s .

Scanned with CamScanner


Subprogramas ( subalgor
í tmos ): procedimientos y funciones 199

Las variables locales a la función son A y B y no modificarán los valores de las variables X t Y del algo-
ritmo principal . ’

« ffí jjci ‘ i O"! í r *v


7 5V
Variables del Variables de
programa principal la funci ó n O .. 0 i
< ' sel 6 * * ? Tr »CJ
X Y N a b med í a , b) (s ,v
10 25 10 25 '.inmola * / < ir»
, ,¡ J f •V
/ j '
*
>v I "
'

' '
, '
i '. • f
• iT
'
*
/
'

Las operaciones del algoritmo son: c2 '


)

- ^\ la
, •
, - . i

caorroá r * - *

#
KF\ ’

= 10
' *

a b = 25 4 4« » V '
^ »i .

ifi *i 7

1 . b > a realizará la operación b «- b - a acuno:!ne v y :z


( V ,> *
'
)
‘ :
y, por consiguiente, b tomará el valor 25 - 10 = 15
y a sigue valiendo 10 . " * xá o
ni >
2. a = 10 b = 15 i.

se realiza la misma operación anterior <


i\ v .; h
b «- b - a , es decir, b = 5
a permanece inalterable :, 1 ' v uml/:o c n r
- * uup v . zoi imíirt ¿srü zo í
t *
u-
£P
3. a = 10 b = 5
como a > b entonces se realiza a ¡ h: SLJ R¡ b, es decir, fat O / I ¿dona aoeaq > I
;

^ •

Por consiguiente, los valores finales ser


ían: cblflutos ;* o i í oniL r/] £ y . y cwmJ . 1 #

a = 5 b = 5 med í a , b) = 5 í : m x
2 , Y
*
Como los valores A y B no se pasan al algoritmo principal , el resultado de su ejecución será:

10 25 5
.y < >: í cí , F, ) ( í d, ;r. oi^ lnx cJnsimrliODov; Fu í,bnrm:n n:¿nin S. .
'
. ^
\ d Lisa « ! n . í .] suno
¿ oij ’
jM t

7.:V lV* v U>\ W \ > UV ) MW nvm i. l

5.4. Escribir un algoritmo que permita ordenar tres números mediante un procedimiento de intercambio en
. r
¿

dos variables (paso de parámetros por referencia).

El algoritmo que permite realizar el intercambio de( los valores de variables numéricas es el siguiente:
iu;7 Y í !\ -. b 0Up 8 \ A ul « » H id i l Miin iftnb v - w ¡; .
'« '

^
'

. i
* , . •
’ • •
• • -

AUXI A
:fir:b» i,v tj' ju ú ;Y o >1
A B 4
B AUXI C1

y la definición del procedimiento será: ...


• * y •' ~
— * i * •«
j;; (
.
.. . .
. .. . .
.
*
¡„ -n¡ - , ; ; : >, i ; . . . ?.
PROCEDIMIENTO intercambio Í E/S real: a, b) /.‘ /mv.tori I í NV. J V* ' \
var real : auxi

inicio

-- -
auxi < a
a 4 b \ '. í f n S i f n :» / *
L uU.m ' 11 ¿' V i .* '

• " b 4 auxi • Í oifvjlm í >:, . n ) i "i '


. /• o r j s c T r u v J < .f i- svi
tin_ procedimiento .' í ib;rjh , i
'
• \ 7 •'
' ? !
» »; /

Scanned with CamScanner


Fundamentos de programación :0 ’
200 ^riU
'
».

El algoritmo de ordenación se realizará mediante llamadas al procedimiento intercambio.


. hnbnin O .ííMiin
qivniiq o Ií T
algoritmo Ordenar _3 _ numeros
var real : x,y, z \\j \ 9
\ 1
\\ y/rv ; t /.w > » ,r-
inicio
escribirl ’ Deme 3 números reales')
leer( x, y, z) i •

v-
1 t V

si x > y entonces -r
3

intercambio ( x, y)
fin_si ; rx orr í hogL fob ¿ vnobnaqo nü.

si y z entonces
>
intercambio (y, z )
fin_si
— w i

si x > y entonces
intercambio (x, y ) . d d nó bmaqo al fcifirilcyi s < í t .1
fin_si
r« r pe -roffiv -
,
I farj'no d . wnsiugiznoo i ] ,y
) ¡ »

escribir( x, y, z) . 0 C obfwi í cy ‘. í igi í 6 \[ -


fin

Paso de parámetros por referencia


ci a ox = £ .
loh'jtrrj; n /ro.'. i vqo oi í i > rm G í csl ír Jir. - -
c = d .irjob ¿a , o - d — > í t
Los tres n ú meros X, Y, Z que se van a ordenar son: aldmstforri ojsnr nn: s . ^
132 45 15
'
2 ft í : ; . 0i . - -
-
; « * i » *v » .
» V I , * *
: : . iA
Los pasos sucesivos al ejecutarse el algoritmo o programa principal son: icimo - rno.- n
1. Lectura X, Y, Z parámetros actuales bar . • • r J: pa > i » Je :> 4
: m;n^ r ^ íünn ¿ jiolfiv ?oI '

X = 132
c (J , b ) t ~ :;: c « d
Y = 45
Z * 15
r,:y M ;. : •
j
-
OH ¿ ' ; J 7 b J ; ; q í on : iq omthogtfc Ir; nwcq fin 8 y A asnokv ¿o í orroO
- 2. Primera llamada al procedimiento intercambio ( a , b ) x > y.
La correspondencia entre pará metros será la siguiente: ¡2 I

Parámetros actuales Parámetros formales



>t> ojrt íwrni
#
mj í t /irjn ¿maman wu wtein fit
tnr &í h íinrxoq oup oí n í ho !; nui ídn rf > *?*
X A
*
. íí. í vir i > 1 oi 7 . >q ¿oiteinhitn al o < cq ) ¿ trkbiif; / ¿ob ^ ^
Y B
*
yyr .
Al ejecutarse el procedimiento se intercambiarán los valores de Ay B quese
bles X e Y; luego valdrá n:
devolverla las varia-
A - jXfA
X = 45 a ~> ^
Y = 132 1 XUA -> M

3. Segunda llamada al procedimiento intercambio con Y > Z (ya queSP {


= 1327 Z
Parámetros actuales Parámetros formales ' b i eJnl i
O rW31MI J 3 *i
'

Í XUA : i r ‘- i tfiV
Y A
Z B
Antes llamada al procedimiento Y = 132, Z = 15. s —>
Después terminaci ón del procedimiento Z < 0 132, Y
i —
= 15, ya que A y B han intercambiado los
valores recibidos, 132 y 15. 03 Cl . Iü

Scanned with CamScanner


Subprogramas ( subalgoritmos ): procedimientos y funciones
201

4. Los valores actuales de X, Y, z son 45, 15, 132; por consiguiente, X > Y, y habrá que hacer otra
nueva llamada al procedimiento intercambio. | •'

parámetros actuales parámetros formales

X ( 45 ) A ( 45 )
Y (15 ) B (15)

Después de la ejecución del procedimiento A y B intercambiará n sus valores y valdrán A = 15,


B = 45, por lo que se pasan al algoritmo principal X = 15, Y = 45. Por consiguiente, el valor final
de las tres variables será:

x 15 Y s 45 Z 132 V Iwl VÍÍM ./ * -


ya ordenados de modo creciente. -
: • •s ,¡ ,;( C JI / .
.i • / }‘ j h < oi > » vl

<

i? ‘Á , . ;' f
J .. ; f o» J Y . í
. mrj
,, .
*
i,
*4 ^
t

'1 -»
.
5.5 Diseñar un algoritmo que llame a; laufunci
’ üJ i ¡
ón signo ( X ) y calcule: a ) el signo de un n ú mero, b) el signo
. i /:- > ; < ) . 1

de lá función coseno.
i .

Inm r - < . .uj í cuiin


- ^
*


^
nijr, •

MrfaittMnt b tw • • p «in irmiL- orq m 8


Váriables de entrada: P ( real ) ' "! ^
Variables de salida: Y -signo del valor P- ( entero ) Z -signo del coseno de P, - ( entero
.» • r: j i í »¿I í ¿í7 r y üTI • Y, ris /
» "i
);
'
oíijj f
’ . * i 1

"' -.' I
• . •

iVmu:» .b ..
ft nu 'Wn ob nrn ü d fui 3Up » rttá Oub*j'jOiq lu
• '

-
• -
( / i
Pseudocódigo UJ .!0 V 1 V/ l l v
4
r

algoritmo Signos
var entero: y, z
real: P orí!'/; iv o.. - ,C - X v 30! fo!, /• : » vtc\
inicio
leer(P)
Y <- signo( p) y : .*
Z «- signo(eos (p))
r \ V> L
^Oif .7 iiii
escribir(Y, Z)
fin O

entero función signo(E real: x) i •i •» f > . T fui •

if - H
inicio J Vi
si x > 0 entonces
devolver ( 1 )
si _no I

si x < 0 entonces
i ’•
devolver ( - 1 )
‘i si _no . *

. .i _ devolver (0 ) i
;» •' *!ic i *
t
*
.* • :
j / •

i
f

* ov
1C
* .
i


.*
’!

* !D ‘ n’ j ./
>
-
\yhsi :
* C ‘: .
fin_ si , / tli 4 V
r'
> ' 1 ‘Y t .l U

fsr l * ;

i •jh o f i f / • *. J iv - o . .v i
» , , i. 1
• >
’ -1.3
fin_ funcion

Notas de ejecución
\

Parámetro actual Parámetro formal

P X

Scanned with CamScanner


; .
ón
202 Fundamentos de programaci

'se asasignar.
constituye por el pará

^ ^
34
El parámetro formal X se "
signo que gn án a las variables Y, Z son:
funcón
- 1 45 Los valores devueltos por la i t . i to v :\\

Y <- Signo ( - 1.45 ) x


s i g n o ( c o s ( -1 . 4 5 ) ) .
i*
>
Z i «
-

resultando
Y = -1 '
' . t ti
. .
* e n n id ru
ú
.
ó um « Mr •
. •
• oiniiffiib
oinw •• -.
>
>i 1 í » nbbu
j
1 '
, ’ "
'
1

lo i iq )l U “ '*

ten z = i na t* nf

3 r V f
- - *' X

EJERCICIOS
le ídos del teclado y poner un ejemplo de su
5.1. Diseñar una función que calcule la media de tres n úmeros
entero en el rango 100 a 1 ,000.000
5.2. Diseñar la función FACTORIAL que calcule el factorial de un número
números basado en un subalgo-
5.3. Diseñar un algoritmo para calcular el máximo común divisor de cuatro
ritmo funci ón mcd (máximo común divisor de dos números).
A y B. . rj /
5.4. Diseñar un procedimiento que realice el intercambio de valores de dos variables
5.5. Diseñar una funci ón que encuentre el mayor de dos n úmeros enteros . j j ¡ ¡ > 5b
. Jri .. .

5.6. Diseñar una funci ó que


n calcule xn para x, variable real y n variable entera .
5.7. Diseñar un procedimiento que acepte un número de mes, un número de día y un nú'mero deJa’ ño y los
' e. ^ ‘’ ' *1
uiciitilipp en
visualice el formato
pn bl fnnnatn

SOlIQiTí OSlí ll .- . 1 “ ..
d d / it u n / a a
» I . -
J 1 -l ü V
.
Por ejemplo, los valores 1 9 , 0 9 , 1 9 8 7 se visualizarían como

19 /9/87 . • 1o ’ » I
*

(q ^ onois ->
y para los valores 3 , 9 y 1905 IQ ) cc/ i cncin ---* "

3 / 9/ 05 ri 5

5.8. Realizar un procedimiento que realice la conversión de coordenadas polares ( r , ;0 ) a coordenadas car-
tesianas ( x, y ) r
. •^rcJnp u
'"
v .. .
X = ]T
•C O S ( J )
rl .

y = r.sen (J ) on
S ív
^no U i *
'
.* P

, ,
Sarioto P > un mimen, dado de horas
^ íT **
" La * Sa arios de un rabajador

un s ¿SC
trabajadas 40 »» semanales se pagarán como extras con
5.1«. Escnbir una funerdn booleana Digi to que determine si un
carácter es uno de los d ígitos 0 al 9.
tí o t o n j ¿

\x ~
lUH ':ViWi :• ' to

'U\*V\ \ :oUV > V\ tn » JUAt ' A


t ,* *
»

Y* •
f

Scanned with CamScanner


f*

vt\ * T \ . *

»% .• Ji ! !
# ' •* n
w: *

»
i n. I J > A -
11 6
CAPITULO
.

* i . ? )
* lUr .. ‘- ' J j 't
/!

ESTRUCTURAS DE DATOS ( ARRAYS )


1

I •\ . •.
\ • . I

i!
i
*
s ) ^\U \í¿ ^ r ;^
4

l
:
.
’"
< .'M vif ) < . A
1
V: T oVnif 1 •
•/

l> i
Muum ) o j r n u n o >»
i -A » <
*•
’ * *= > *

uuds
.' V , ‘
/\ V (

CONTENIDO 4
I
)

i
6.1. Introducción a las estructuras de datos. Mi iunrr»
6.2. Arrays unidimensionales: los vectores.
6.3. Operaciones con vectores.
6.4. Arrays de varias dimensiones. i Mi >:ii t • J ¿ -i 5 i •* ‘< s i : *
(

6.5. Arrays multidimensionales.


6.6. Almacenamiento de arrays en ;
memoria. •
i

ACTIVIDADES DE PROGRAMACIÓN RESUELTAS. .. . . »

EJERCICIOS. !oduí
o'lLILi . i

* i 'rl» OI En los capítulos anteriores se ha introducido el concepto de datos de tipo


,
i
simple que representan valores de tipo simple, como un número entero
» * A»
- i A
*

j •

uítii• »
f
. ; fA
t
r.
í
i real o un car ácter. En muchas situaciones se necesita, sin embargo
, pro -
t* ¿ Y¡’; .V ' . • >. ; » ;l; el
t
cesar una colecci ón de valores que est á n relacionados entre sí por
algú n \

método, por ejemplo, una lista de calificacio nes, una serie de temperatu - 5»

ras medidas a lo largo de un mes, etc. El procesam iento de tales conjuntos


r ' . '
f ,
ícil y por
de datos, utilizando datos simples, puede ser extremadamente dif
ello la mayor í a de los lenguajes de programaci ón incluyen caracter sticas
í
r *l % \

que la
de estructuras de datos. Las estructuras de datos bá sicas soportan
' •i t • S
* i

* ' U A - ¡

mayor í a de los lenguajes de programaci ó n son los arrays — concepto


matemá tico-de « vector » y « matriz ».
I' •
f Un array Ihnatriz, tabla, arreglo ) es una secuencia de posicionesjJe la
Oí I: r. s
memoria central a las que se puede acceder directaame rite, que contiene
’• J 'cTat ó s dé r mismo tipo y pueden ser
'
selecciona dos '
individual mente
. .VJt medíante el uso de subíndices. Este capítulo estudia el concepto de arrays
- ufo* ' unidimensionales y multidimensionales, así como el procesamiento de los
" r >q oqii mismos .
l Kl ?. í
'
« .*
• --.
’ i
. ; t * i ¡ » r; . í >
I
En Latinoamé rica , el t é rmino array se suele traducir por la palabra arreglo. ¿o .. - Mí :

203

Scanned with CamScanner

También podría gustarte