Académique Documents
Professionnel Documents
Culture Documents
ALGORITMOS Y PROGRAMAS
CONTENIDO
ciado de las reglas paso a paso para su-e' '=s:=' ':-ultiplicar y dividir
números decimales; la traducciÓn al lair. .. =.= :c en la palabra algo'
rismusderivó posteriormente en algori:-:. f -: ::s el gran matemático
griego (del siglo lv antes de Cristo , .-e ^'e-:: -- -eiodo para encontrar
át nrár¡nro común divisor de dos n j¡':::s s: ::^s lera con Al-Khowárizmi
el otro gran padre de la algoritrnia o e-: a :-::'a:a de los algoritmos)'
El résto del capítulo trata de los :a::: . as :peraciones elementales
necesarias para el diseño del algoritr.c I D-3'esor Niklaus Wirth -inven-
tor de Pascal, Modula-2 y Oberon-:;:- : --3 ce sus más famosos libros,
Algoritmos + Estructuras de daios =,':J'¿^as. significándonos que sólo
se-puede llegar a realizar un buen p..Q'.-.;cr el diseño de un algoritmo
y una correcta estructura de datos. Es:a e:-:o cr será una de las hipótesis
fundamentales consideradas en es:3 l.'a
l. La Unidatl 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.
2. Memoria central. La información procesada por la UCP se almacena normalmente en la
memoria central hasta que se terminan 1os cálculos. Los programas de computadora se
almacenan también en la memoria central.
3. Dispositivos de almacenomienÍo secundario (memoria auxiliar). Diferentes dispositivos,
tale-s como discos y cintas magnéticas, se usan para almacenar granáél'Cantidádé§AeÍifói-
máción. Para ser procesados por la UCP, los datos se almacenan en dispositivos de almace-
namiento auxiliaiy luego tienen que llevarse a la memoria central.
4. Periferico o dispositivos de entrada/salida (E/S)._Estos dispositivos permiten al usuario
comunicarse lu computadora. Algunos dispolitivos típicos de E/S son el teclado, la
"on
impresora, monitor, etc. Un sistema de computadora puede tener diferentes dispositivos
periféricos conectados a ella.
En la práctica, una instalación grande de computadora puede tener diferentes UCP, cada una con
su propia memoria central compaftida, una variedad de dispositivos de almacenamiento secundario
Dispositivos
de Almacenamiento
entrada/sa lida secu ndario
E/S (memoria auxiliar:
(periféricosl
y periféricos localizados en diferentes partes de un mismo edificio o diferentes edificios e incluso 1.2.
dilerentes ciudades o países.
Las
El objetivo fundamental de este texto es enseñar'a resolver problemas mediante una computadora.
Un programador de computadora es antes que nada una persona que resuelve problemas, por lo que
para llegar a ser un programador eficaz se necesita aprender a resolr er problemas de un modo rigu-
roso y sistemático. A 1o largo de todo este libro nos ret-eriremos a la metodología necesaria para
resolver problemas mediante programas, concepto que se denomina metodología.de.Ia progra- alg«
macién. El eje central de esta'metodología es el eoncepto- r'a tra¡ado- de algoritmo.
La resolución de un problema exige el diseño de un algoritmo que resuelva el problema pro-
puesto.
'' 1. Diseño del algoritmo que describe la secuencia ordenada de pasos ambigüedades- que
-sin
conducen a la solución de un problema dado. (Análisis del probletrta t' desarrollo del algorinno.)
'2.
. Expresar el algoritmo como un pro grama en un lenguaje de pro-uramación adecuado. (Fase de
codificación.')
3. EjecuciónT,validación del programa por la computadora. Ei
S¿
Para lle-ear a la realización de un programa es necesario e1 diseño previo de un algoritmo, de
modo que sin algoritmo no puede existir un programa. L
Los algoritmos son independientes tanto del lenguaje de programación en que se expresan SC
como de ia computadora que 1os ejecuta. En cada problema el algoritmo se puede expresar en un len- si
direrente de pro-eramación y ejecutarse en una computadora distin'ta: sin embargo. el algorit-
-suaie
mo será siempre el mismo. Así, por ejemplo, en una analogía con la r-ida 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 paso: para 1a eiaboración del plato se realizarán sin imponar el idioma del cocinero.
En la ;iencia de 1a computación y en la programación, los al-eoritmos son más imporlantes que
lo: lensu¡je. de programación o las computadoras. Un lenguaje de programación es tan sólo un
medio pan e\prrsar un algoritmo y una computadora es sólo un procesador para ejecutarlo. Tanto el
len-uuaje de prtrtramación como la computadora son los medios para obtener un fin: conseguir que
el al-soritmo se e-ie'-ute r 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 atsotittt¡o-s. \ 1a enseñanza y práctica de esta tarea se dedica gran pafte de este libro.
El diseño de la mar oía de los alsoritmos requiere creatividad r conocimientos profundos de la
técnica de la pro-uramación. En esencia. la soluciótt cle Lm problema se puede expresar mediante wt
algoritnto.
b-
Algoritmos y programas s
Ejemplo 1.2
se desea diseñar un algoritmo para saber si un número es primo
o no.
Un número es primo si sólo puede dividirse por sí mismo y por la
unidad (es deci¡ no tiene más divi-
sores que é1 mismo y la unidad). por ejemplo, 9, g, 6, 4, rz,'
16,20, etc., no son primos, ya que son divi-
sibles por números distintos. a ellos mismos y a la unidad. Arí,
9 divisible por 3, g ío ei por 2, etc.
",
El algoritmo de resolución del problema pasa por dividir sucesivamenteil
número pir 2,3, 4...,
etcétera.
1. Inrc io .
2. Poner X igual a 2 (,X = 2, X, .¡artable que representa a los divisores del rrurer:
que se busca N) .
3 Divrdir N por X (N/X) .
4 Si el resultado de N./X es enLero, enLonces N no es
al pur]r-o 7; en caso contrario, continuar eL proceso.un numero primo y
Suma I a X (X <- X + 1).
6. r.= igrual a Nr, entonces N es un numeto primo; en caso contrarrt,
!i p.r1-_o J.
al
Frn.
U
-Y
Fundamentos de ProgramacrÓn
ñ 1.3.
Por ejemplo, si N es 131,los pasos anteriores seían:
Los
1. Inicio.
)-i,) SdiIk
3 y 4. L3L/x. eI resullado no es €:---=1" := l-:--l
Como !rcceso máq
5. \ + ) - ., 'r-96 X = 3. conS
b. ^o10 ^ no es Jl, se bifu 'a aI o:-. - '
:
no es entero' fica
3 y 4. 131/X resultado
l
5. X e 3 + 1, X = 4.
6- Como x no es 131 bifurca al Punto :' ,sua-i
3 y 4. L3L/x..., etc. tipo:
7 . Fin. tluc
cual
Ejemplo 1.3
Realiz,ctr la suma de todos los números pares entre 2 t 1000'
--'
El problemaconsisteensumar2 + 4 + 6 + E -
Utilizaremos las palabras SUMA y NUMERO (t'ariables' serán i.no-inudas más tarde) para
representar las sumas sucesivas (2 + 4), (2 + 4 + 6), (2 - =- á - : l' etc'
La solución se puede escribir con el siguiente algoritmo:
l. Inicao. 'l
2. Establecer a 0. 1
SUM-A
1 N. v-RO a z.
LsLob-e-or
4. Sumar NUMERO a SU14-A. El resultado sel:a =
¡- su;na (SUILA) .
1.:
5. Incrementar NUMERO en 2 unidades '
6. Si NUMERO =< 1000 l¡ífurcar al paso 4i e:
esc::ibir e1 ultimo
Lor
valor de SUMA y terminar el proceso' "t
m3
1. Frn.
irn'
m3
1,3. LOS LENGUAJES DE PROGRAMACION
Como se ha visto en el apartado anterior, para que un procesador realice un proceso se le
debe sumi- dii
de interpretatgl-¿lgo- di:
nistrar en primer tugar un algoritmo adeóuado. El p¡gcesador debe sg'capaz
ritmo. 1o que significa
que se
CuanrJo el procesador es una computadora, el algoritmo se ha de expresar en un formato
denomiaa prr-, qrnurn. L n programa se éscribe en un lenguaje de programación y las operaciones
-que
pues, los len-
conducen a e\presarun uigoitrno en folrna de programa se llaman programacióre. Así
- y pro-
guajes utilizados pam escribir progtamas de computadoras son los lenguajes de programación
gramndores son los escritores 1' diseñadores de programas'
Los principales tipo: de len-euajes utilizados en la actualidad son tres:
o lenguaje nuíquinLt.
c. Ienguaje de bajo ni'el tettsotttblador),
o lenguajes de alto ntel.
f' , L- *_
Algori!,tcs , :
01 00 001 0 0000 01 00
Posiciones 01 01 01 00 0000 01 01
de memoria 0102 001 1 0000 01 10
programa a la memoria.¡ s.U qgg_e_sidaqde traducción ppsterior. 1o que supone una velocidad de eje-
c uc i ón superi oia cüal quier ot ro len guaje- de prrogra m ac i ón.
Los incenvenientes la actualidad- superan a 1as I'enta3as. 1o que hace prácticamente no
-en
recomendables los lenguajes máquina. Estos inconr e nientes son:
Para evitar los lenguajes máquina, desde e1 punto de r.ista de1 usuario, se han creado otros len-
guajes que permiten escribir programas con instrucciones simila¡es al lenguaje humano (por des-
g.uóiu, óasi siempre inglés, aunque existen excepciones. como es el caso de las versiones españolas
del lenguaje LOGO).
Estos lenguajes son los de alto nivel y bajo nivel.
' , --
1010
--,- 1011
j-: ;;¡grama escrito en lenguaje ensamblador no puede ser ejecutado directamente por la com-
:;¿*ta esro se diferencia esencialmente cle1 lenguaje máquina-, sino que requiere una
-!:n
r::= -ri i¡-i-j- t: ; ión al lenguaje máquina.
E- :: ::":t: ori_einal escrito en lenguaje ensamblador se denomina programa fuente y e7 pto-
-¡;ir;¡á-.en lenguaje máquina se conoce como programa objeto, ya directamente inteligible
=¿::,¿
F\.r: -r JüEi\i;*i*{-d-
E- -:.,,jr-,--,-,- ;¿+ra€r¿susfuentc a objeto e.s-un programa llamado ensamblaelar (assembler),
eistei;; en c¿sr. t':,,jas las computadoras (Figura 1.5).
\o s¿ ,lebe cc,ni]¿ndir en español adoptan el mismo nombre- el programa ensam-
bladt,r ,r¿-r-rc¡nr¡¿¡ . encars¡do -aunque
cle efectuar la traducción del programa fuente escrito a lenguaje
máquina. con el i¿,r¡¡, 1;,,¿ ¿t!stünblaclor (assembly language), lenguaje de programación con una
estructura r gramática derlnirlas.
Los lenguajes ensambl¿dore! presentanlat,entaja frente a los lenguajes máquina de su mayor
facilidad de codificación r.. en seneral. su velocidad de cálculo.
I' J
7
Algoritmos y programas
Programa Programa
fuente en Programa
ENSAMBLADOR
objeto en
ensamblador (assembler) código
(assemblyl máquina
Figura 1.5. Programa ensamblador,
Hoy día los lenguajes ensambladores tienen sus aplicacitn¿s n;., ieiucidr< en 1a pro_eramación
de aplicaciones y se centran en aplicaciones de tiempo real. .r,nir,:,i üe procasL1s r de dispositiYos
electrónicos, etc.
A1 igual que sucede con los ienguajes ensambladores. lo-s prosramas fuente tienen que ser tra-
ducidos por programas traductores. llamados en es¡eca5o caii\ltúiljrd{e intérpretes.
Los lenguajes de programación de alto nivel existentes hov son muy numerosos aunque la
práctica demuestra que su uso mayoritario se reduce a
y comienzan a difundirse:
aunque los dos primeros no dejan de ser entomos de programación orientados a objetos con sopor-
te en los lenguajes Clipper y Turbo Pascal.
o compiladores,
o intérpretes.
1.3.5.1. lntérpretes
Vn irúérpretg es lJn traductor que toma un programa fuente 1o traduce y a continuación 1o ejecuta.
Los programas intérpretes clásicos como EASIQ, prácticamente ya no se utilizan, aunque las
r.ersiones a&§ISNUckBAS[C-se comerciali-zan-todar,r-a--con-efSistema-Qp-erativo -DO"S que
.t)rre en computadoras personales. Sin embargo, está muv e\tendida 1a versión interpretada del
1as
lenuuaje Smalltalk, un lenguaje orientado o objetos puro.
Programa fuente
lntérprete
Traducción y ejecución
línea a línea
h'
Algoritmos y c.rc-.-.: 11
Programa fuente
Programa objeto
1.3.5.2. Compiladores
U-n,soflpiladaL§*tJ;E-l],rograma-quclmduce -l,os4rogramas-fuente-eseeitss-e+,lenguqjes-de-alto
nivel ;-alenguaje-máquina.
*Los-PascaLEOIIIRANT-,
programas escritos en lenguajes dé alto nivel se llarnan prograruas"fwettte y el program-a-Ira--
ducido programg objeto o códiga abjefo. El compilador traduce a sentencii el pro-
grama fuente. -sentencia
Lo_s__Le¡e.uqies Lampdad*o{es_ IÍprs-qs,son: C-Cir,IAs-gAL.LqBIlAN, CoBoL.
Programa fuente
Compilador
(traductor)
Programa objeto
Programa ejecutable
en lenguaje máquina
Modificación
programa
fuente I
fuente
v
Compilador
I
-¿'...
.,/ Exrsten \
,/ errores en la \
\ compilación-,/
\.,.-
lno
Programa
Programa
Montador e.iecutable
Ejecución
56
15 4
20 1,a
I34A 26
I
14 Fundamentos de ProgramaciÓn
LosenterossedenominanenocasionesnúmerosdepuntoocomafijaLqqnÚDqlqqenlgros
Lo: enteros
suele-{r:e:,--t"!::
-á^ñll;rtiqq'*Ou-,,"'""Áp*'+aa"a' :^:!6J-
se suelen repfesentar como enteros' sino como
lum-eros
reales' aunque eruSten excep-
fuerá de este rango no
C' C++' etc')'
ciones (enteros lárgos:FORTRAÑ' Quick/QBasic'
0. 08 3139 .4L
3.1 452 -52 -32L
-8.L2 3'0
16752010000000c000000
qn grupos de tres dígitos:
se repres-enta en 1o119!-Qq q-ienlífi-c-a.descomponiénd'o1o
x 102!
: -: /Y
= :tir-S::l:á
COrnO
Numérico
16 Fundamentos de programación
'B + 4' i
_ ":*
r3-- Mi ¡arr¡r
!rrrr9uL¿
lrrn JLrtrI-itrilltes de cadena válidas. Nuevamente, si un apóstrofo es uno de los caracteres en una cons-
u:te ie cadena. debe aparecer como un par de apóstrofos:
Variables
tJyg_ygighle qbje,tg o pl4ida de datos quyo yalor puede camliar durante el des¿rrollo del algo-
-ql iU
ritmo o ejecuc!ón det program_q,
Dependiendo del lenguaje, hay diferentes tipos de variables, tales como €t1.iti'ti!. ,reiiles. carár'-
ter, l(tgicas y de cadena.
Unl yari,qLl-q qqe_ e-s dg un ci-e-rIo tipo puede tomar úticamente valores de ese ripo- I-n¡ I enahle
de earácter, por ejemplo, puede tomar como valor sólo caracteres, mientras que una I ari.ar'le entera
puede tomar s ó1o-. vqlgJ-e5 .-e-.n[g1os.
Si q,-e !g§11t¡1aslglgl-qn ySLo-{ d-e.. un lipo a una variable d.e o-!ro tipo s,e producirá L.ltl et ror de-lrJ)Lt
Úlg,"variab]e se identifica.por los siguientes atributos: nombre que lo asigna y tipg q)e describe
-el uso-de-la variable. c,onocidos c.ot\p jd-e.ilfirtcadgres, suelen constar de vanos
L-o-l-lio_!.rblg§_.dS,,1e-s_.yAf-iable5,.a.-v-eces
caraó[érét alfanuméricos, de los cuales el primero normalmente es una letra. No se deben utilizar
lo permita el lenguaje, caso de FORTRAN- como nombres de identificadores palabras
-aunque
reservadas del lenguaje de programación.
Nombres válidos de variables son:
451 tl
NOMBRSS
NOTAS
moenr ap¡lt i¡os3
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:
Existen lenguajes en los que es posible darles nombre a determinadas constantes típi-
-Pascd-
cas utilizadas en cálculos matemáticos, financieros, etc. Por ejemplo, las constantes lt = 3.1.41592...
y e =2.7182818 (base de los logaritmos naturales) se les pueden dar los nombres Pf y E.
Pr = 3 .t4L592
F, = 2.7L8282
1.6. EXPRESIONES
Las expresiones §!,L-aoutb-in-¿c!ql}9§d_e--cgn-i[qqles,.-yariable"s, sírfrbqlog de,operación,-paréntesi' '
nómbfésAá funciones especiales. Las mismas ideas son utilizadas en notación matemática tit.l
cional poréjem-pTo,
a+(b+3)+r,ic +ó+(ó-5)+r,c
r Algunos lenguajes de programación admiten como vá1ido el carácter subrayado en los identrll:.: -.
f8 Fu ndamentos de progra m ación
o aritméficas.
o ló?icas,
o carácter.
! Ui.ll i
ri !ii.
muL:i¡iicaiitín
dir i:i¡n
I erpe.nenci;citín
t
div dir isión ¿nter:
la expresión 5 + 3 sq -c--o.
¡lgce- como resul-
I¿¡-¿l¿r üf la e\DfeS1On,
------------*1---
fo: c,p'eradores se utilizan de igual forma que- en
----,^-^^:.:^^^
--- matemáticas. D^- ^^-^i-,.i^-r^
Por consiguiente, ^ A \/x D
B se escr'l-
be enunaleoritmocomoA * B, y I/4 x CcomoCi 4.Aligualqueenmatemáticaselsigno
menos jue-sa un doble papel, como resta en A - B y como cambio de signo en -A'
\o ro,Jos los operadores aritméticos existen en todos los lenguajes de programación; por ejem-
p1o. en FORTR\\ no eriste div ni mod.
El opera,Jor exponenciación es diferente según sea el tipo de lenguaje de programación elegido
( n,
- en BASIC. - * en FORTRAN).
Los cálculos que implican tipos de datos reales y enteros suelen dar notmalmente resultados del
mismo tipo si los operandos lo son también. Por ejemplo, el producto de operandos reales produce
un real (véase Tabla 1.1 ).
!'.'
Algoritmosy prugratÉ rt
Ejemplos:
5x7 se representa por 5* 7
q se represento por 6 / 4
4
3' se representa por 3n t-
19 div
*---.-" 6
1s 6 -, í:q
3 2 cociente #
I
, esLo
equivaTe a6
equivale
20 Fundamentos de programación
a
:.'6
Ejemplo 1.4
Los siguientes ejemplos muestra)n resultados de expresiones aritméticas: fr",
10. s/3.0 3.5 10diw3 3
1-/ 4 n 2q 18div2 9
Dnmero.
,'.,+
2. I4s-epsraciones aritmétkns dentro de una expresiónsuelo:_seguir_o-i §rgg-i9I{-e*-o.Ideq de
prioridad:
§ftxrplo 1.5
¿Cuíl es el rcsultado de las siguientes expresiones?
q)3=5*--1 b)a*7*3+4*6
a) 3 - 6 * ;1 b)a*7*3+4*6
\-/
--
3-3¿ 8+21
-.J 24
H-
87 29+24
-.-
Algoritmayolagzrrc ZI
Ejemplo 1.6
Obtener los resultados de las expresiones:
-4 * 7 + 2 ^ 3 / 4 - 5
1. -4 * 7 + 8 4 5 L^31
2. -28 + I / 4 - 5
/'J'or P*
3. -28 + 2 - 5
4. 26 - 5
31
Ejemplo 1.7
Convertir en expresiones aritméticas algorítmicas las siguientes expresiones algebraicas:
t¡ 5.(x+y)
ú
la'+b'
J
I x+y
üwu+-
x
¡ -'(z+
ty w)
Ejemplo 1.8
Los paréntesis tienen prioridad sobre el resto de las operaciones:
A * (B + 3) la constante 3 se suma prirnero al valor de e, después este resultado se multiplica por el valor
de A.
(A*B) +3 A ) B s¿ multiplican primero y a continuación se suma 3.
A+(B+C)+D estaexpresiónequivaleaA +B+C+ D.
(A + B/C) +-D equivaleaA+B/C+D.
A*B/C*D equivale a ((A * B)/C) * Dynoa (A * B)/ (C * D).
Ejemplo 1.9
Evaluarlaexpresiónl2 + 3 * J + 5 * 4.
r 22 Fundamentos de programación
En este ejemplo existen dos operadores de igual prioridad, x (multiplicación); por ello los
pasos sucesivos son:
12+ 3*7+5 *4
2L
1?, + 2l+5*4
\-/J
2A
L2+2L+20-53
ble*s,1.(gi-c-qqgg9*!_tgnars"é!q -estgg do¡ ,valg¡es. En esencia. una expresión lógiia es una expresión
que sólo puede tomar estos dos valores, verdad v 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.
Llljl.¡¿r-.stqq"g1ógi.ps s9 forman e ombin-ando-constantes 1ógicas,. variab]p;]ó.gr,qa§- y_"-oqas
9lP-ry.:igles tógicas, glilizand-o- lss opevqdore; lógicos not. and y or: y 19; 9g9ry!9yes_-r9Jqq!q491!es
t¿::]19lj.:oqe*:g!*-, :, l \-- ---(- =j-r
,':-r:=*.*i;
1.6.2.1. Operadores de relación
Los operadores relacionales o de relación permiten realizar comparaciones de valores de tipo
nu mé rico o c a rá Qtgr*Lo s operadore s ae r"t aó i@di_ó-r6__árlnr._al g *
ritmos
Los operadores de relación se recogen en la Tabla 1.2.
El formato general para las comparaciones es
Oitefador Significado
menor que
mayor que
igual que
distinto de
f
Algoritmos y programas 23
4 r.B es veill.ad.
mientras que
(A 2)<(B-4) es.fnlso
36 3<6 verdadero
01 0 >"1 Jalso
42 A'
ialso
B5 B<-5 -falso
99 o -_ o rerdadert¡
55 5<>5 Jatso
ordenación de
los caracteres,,ürü-4r al orden creciente-gde,c{gcigqte. 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:
..
...9
exisen la consulta del códiso de orde-
, Cuando se utilizan los operadores relacionales = \' <> para comparar cantidades numéricas, es
/ importante recordar que la mayoría de los vcilores reales no pueden ser almacenados exaclamente.
\.. En consecuencia. las expresiones lógicas fomales con comparación de cantidades reales con (=), a
se evalúan como falsas, incluso aunque estas cantidades sean algebraicamente iguales. Así,
,,
)u...r .0 * '.0 .0
'.0
f., )t'. i
..''
-' I
/ teóricamente es verdadera y, sin embargo. al realizar el cálculo en una computadora se puede obte-
f ne. . 999999 . . . y, en consecuencia, el resultado es thlso: esto es debido a la,;,precisión limitada de
la aritmética real en las computadoras. Por consiguiente. a veces deberá excluir las comparaciones
{''',,con
datos de tipo real. -/
Los operadores lógicos o booleanosbásicos son no,t t.). and (V) y o-1(o..),*!4 Tabta 1.3 recoge
¿l Tüñaióna mi e-ñrrt dldi chóí operad ore s.
verdad falso
Ial so verdad
b
a ob
verdad aobsol
verdad cuando a,
verdad son v-ordad
¡t
A,'gor:-:s :--:-:-:: 25
Ejemplo 1.10
í'' ,&/
(1 > 0) y (3 - 3) verdad
no PRUEBA verdad . PRUtrBA es un valor lógico falso
(0 < 5) o (0 > 5) verdad
(5<=7)y(2>4) falso
no (5 <> 5) verdad
(nr-mero - 1) o (1 >- 4) verdad . nlilnero es una variable entera de valor 5
Operador Prioridad
+, , o (or)
I
V
(, ), =, <=, >=, <> mas baj a (última operación ej ecutada)
0perador Prioridad
mós ba.ja
div (\)
l
mcd
{, }, =, (}r {=r }= I
no (rot)
Y (a,ad) +
o (or) ntds alta
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
no4>6 produce Ltn error ta que el operador no se aplica a I
no (4 > 14) produce tm yalor yertiariero
(1.0 < x) y (x < z + 7.a) si x t,ale 7 y : ral¿ -i. :e obrie¡te un t,alor t'erdadero
Ejemplo 1.12
ltts funciones aceptan argumentos reales o enteros y sus resultados dependen de la tarea quc rcalice
lafunción:
tnrnc (5.6) 5.
tr:unc (3 . 1) )
trur¡c (-3.8) _3 1
cuadrado (4) 16
abs (9 ) 9
abs (-L2\ L2
Ejemplo 1.13
Utilizarlas funciones internas para obtener la solución de la ecuación cuadrática ax2 + bx * c= 0.
Las raíces de la ecuación son:
-b+ - 4ac L
o'"'
d,"
y'CI
II
I-
2a
o lo que es igual:
Si el valor de la expresión
raiz2(cuadrado(b) - 4 * a * c)
es negativo se producirá un eror, ya que laraíz cuadrada de un número negativo no está definida.
¿
28 Fundamentos de ProgramacrÓn
!
Ae134
--+5
cuando éstas se ejecutan, el valor último que toma A será 5 (los valores25
y 134 han desapare-
cido).
iúquip*rflt¿qll_ejeguta la sentencia de asignación en-do¡ p-asos. En el pdmero
de el1qq-,s-e- -qjtl-
q"lu al tado derecho dél óperaaór-obteméndose un valor de un trp-q*gqpgci
"|la-lo;-¿tif "#;.iJn
fico. En ái segundo paso, este valor se almacena en la r ariable cuyo nombre apalece a la'iz-quierda
X<-Y+2
e1¡a1srd-e-la§¡p-igsi9,q:---t-2-s-e¿signaalavariable:t'
e, poriuL rtiiir*;l 4ogú,i9 Qe v4riab.§ 9l gm!-s§-lados de,l qpergdslde-asignación- Por
ello.Tccionés-comó
""úo-
l.<-li+1
rienen sentido; se detgrmiU-a. el- \¿alor acJual de la variable N, se increqe4ta -e-n 1 y a confinuacié+el
Lq+lr4ds§e_g.s_lgna a tq mj_ !r14--Variable-N, sin embargo, desde el punto ds vista matemático no-Ii9ne
sen!lq_o_.]:-(-N + 1..
Li. u.Cior.s de asignación se elasifican según sea el tipo de expresio¡rqs-en: qri¡m(-ticas,lóg"icas
\ Lle clirocte re s .
Seevalúanlasexpresiones14.5+8y0.75x3.4yenlaterceraacciónsediridenlos
resultados de cada expresión y se asigna a Ia variable COCfENTE, es decir, las tres operaciones equi-
valen a COCIENTE <- (14 .5 + 8) / (0 .75 * 3 .4 ) .
Otro ejemplo donde se pueden comprender las modificaciones de 1os valores almacenados en
una variable es el siguiente:
* * 1 lavariableAtomailvalbr0+l,esclecir, I \.,--..---'
É.--
El ejemplo anterior se puede modificar para considerar la misma variable en ambos lados del
operador de asignación:
. En la primera acción N toma el valor 2 y enla segunda se evalúa la expresión N+ 1, que toma-
ráelvalor 2 + L - 3 y seasignaránuevamente aN, quetomaráelvalor 3.
M<-B<5 f¡¿-"F
N<--[4o (7 <=12)
P<-7>' fué._ f4üy
{ré*v
Tras evaluar las operaciones anteriores, las variables M, N y P tomarán los valores/also,verdad,ver-
dad.
NorA l:
Si se utilizaran las palabras reservadas en inglés, como suele ocurrir en los
lenguajes de
programación, se deberá sustituir
leer escribir
por
read. writ.e o bien print
it t
NorA 2: §ln: se espectnca tivo del cual se leen q.gsgüendatos-losjisBpsitivos
9'--s§ry1d9!p-ctg.,s--o-11-."ltes-lado-v-.1q-rr"a:l@...-"*
Algoritmo pinchazo
l. Inicio.
2' Si gato del coche está averiado llamar a la estación de servicio y
bifurcar al punto 1 I ; en caso con-
trario, continuar el proceso.
3. Levantar el coche con el sato.
4. Aflojar y sacar los tornillás de las ruedas.
5' si No todos los tomillos estan flojos y quitados, bifurcar al paso 4; en caso contrado. co.:-.
proceso. -: :
6. Quitar la rueda.
32 Fu n da m entos de P rog ra m aci ón
1.2. Encontrar el valor de la variable VALOR después de 1a ejecución de las siguientes operaciones:
,F
(a) VALAR <- 4'0 * 5 -: ?.2
(b) x <- 3.4
Y <- 2.0
VALOR<_X^Y_Y = s.0 /20 - Z'D a 4'Ü -"'': 7"il
(C) VALOR <_ 5
x<- 3
¿|LOR?VLLOR+:/ -. 5f 3 "ͧ
(a) VALOR = 24.0
(b) x = 3.4
Y = 2.0
vALOR-3^2 2=9-2=7 \/AT,OR = 7
(c) VALaR = b
x.- l
LALOR = VALOR * X = 5 * 3 = 15 VALOR : 15
La instrucción de salida (escribir) presentará en el dispositivo de salida 1 y 5, con 1os formatos espe-
cíf,cos del lenguaje de programación; por ejemplo,
-Y(-ArB-C
]:fArB*C
1(--L-B/C
.e--ó\L
r(-l-3moilC
_1. ? : - :J \ L
!^{--r-- C\
= C=10
B=25
F-ryresión x
]- - B + C = 5 + 25 + 1a 40
_: - .j * C = 6 * )5 * tA A,,.n(¿,cta 255
:- j C 5t2c 19-'>''';'2'f I 7.5
. . c 5 zr\'ñ=5,2J 7
-:. - -- @d C = 5 + 25 mod 10 = 5 + 5 I 10
: - j.r C: (5 +.25) ./ 1A - 3A / 1A 3
\.
Algorítmosy alrryramas
,,m+n
a) ¡mt')/12'a)
m+
n
-b+"f'ü -+o,
p-q , p{r¡fn/P)/,J)
-(g-
- et-i, r/s.! (u, rt),\aÍ ibáz -r>oÍc)/,¿* o,
Ll* _
5
a) M/N + P
b) M+N/(P-Q)
c) (SEN(X) + COS(X)) /TAN (X)
d) (M +.N)/ (P - Q)
e) (M+N/P)/(Q-R/s)
f) (-B + raiz2 (Bn2-4* A* C))/(2* A)
a) B + f .* 3 + 4 *.5
b)-2^3
c) (33 + 3 * 4) /5
d)2^2x3
e)3+2*(18- 4n2)
f) 16 * 6 - 3 * 2
a) 8 + 7 * *
u\- 3 + 4 6
8+2L 24
--29+24 -
53
--
b) !---2^3
-8
c) (33 + 3 * 4) / 5
33+ --L2' /5
45 /5
-- o
d) )^)*a -\--
\--
12
e) 3 + 2 * (1-B - 4 ^ 2)
3 + 2 * (18 16)
?,r*a
_H-
3+
--
4
\-
7
31 Fundamentos de Programacron
f) 16 * 6 - 3 * 2
--96 - 6 ti,{"i
rí- ¡i.ri ilj
I'v
I
..
AUX <- A
A<-B
B <- AUX
Veámoslo con el ejemplo del ejercicio, donde
A<-10
ALD( ObserYác¡ürles
A <- 10 l0
Be5 ,r 5 -
10 La variable aUX toma el vaior de A
AUX <- A 5 -:
A(-B 5 5 -: AtomaelvalordeB' 5
10
B <- AUX 5 l0 -: B toma e1 valot inicial de A '
Ahoraa = 5 y B = 10.
para intercambiar entre sí sus valo-
1.8. Se tienen tres variables A B y C' Escribir las instrucciones necesarias
res del modo siguiente:
. B toma el valor de A
¡ C toma el valor de B
. A toma el valor de C
NOTA'. Só1o se debe utilizar una variable auxiliar'
-L<-: -510155
l<_- a 10 10 5
Algoritmos Y Drogramas 35
l.g.Deducirelvalorquetomalavariabletraslaejecucióndelasinstrui..i..nes:
Ae4
B(_A
BeA 3. -'- . 7
-..-*-?
Medianteunatab]asedaunmétodoeficazparaobtenerlossucesivosvalores:
AB
(1) A<-A
(2) B<-A AI
(3) B (- A + 3 4 7
el valor n'
Después de la instrucción (1) la variable Acontiene - -^^ ^'
LavariableBnohatomadotodavíaningúnvalorySerepresentaesasituaciónconunguión'
(4 a la variable B'
La instrucción (2) asigna el valor actual de A ) il)
La instrucción (3) efeitúa e1 cálculo de la expresión A + 3 , lo que produce un resultado de T t-l '
valor (4) se destruye'
este valor se asigna a la variable B, cuyo último
que tienen las variables A y B son:
Por consiguientJ, los valores finales
B 7
^-1,
instrucciones?
variables Ay B, después de la ejecución de las siguientes
1.10. ¿,Qué se obtiene en las
Ae5
U
u <- o"* '-- . t. ',. t i
A<-A+1 :r -"i rr- d. / A n
B+A-" 1. J \ fr"- b ¡-,: / 4
-;-
Siguiendo las directrices del ejercicio anterior:
1.11. ¿Qué se obtiene en las variables A, B yc después de ejecutar las instrucciones siguientes?
Ae3
B<-24 /
,"/-. L
)
C<-A+B
B (- A +,8 j/' .. / i.
A<-B_C
t-'
.../
-
36 Fundamentos de programación
lnstrucciónABaObservaciones
(l) A<-3 3 - 3ycnotomanningúnvalor
(2) B <- 20 3 2a valor
C si-sue sin
A 0 B I . )'
1.12. ¿Qué se obtiene en A y B tras la ejecución de
A <- 10
B<-5
A<-B
E-¡
InstrucciénABOt¡servaciones'
(l) A <- 10 10 : no ioma valor
r?) R¿-5 10 a : recibe el r,alor inicial 5
(3) A<-B 5 5 .:- toma e1 I'alor de B (5)
(.4) 'B <- A 5 5 = Ioma el r.alor actual de A (5 )
L,-,. p;..-rs antenores se pueden descomponer en otros pasos mái simples en 1o que se denomina refina- I
EJERCICIOS
1.1. Diseñar los algoritmos que resuelvan
los siguientes problemas:
a) Ir al cine. r'
b) Comprar una entrada para los toros.
c) Colocar la mesa para comer.
d) Cocer un huevo.
e) Hacer una taza de té.
f{ i! J',í,",$Í' r': ;
f) Fregar los platos del almuerzo.
p) Buscar el número
de teléfono de un alumno. ¿o /g ¿t¿,.c/'
:'
h) Reparar un pinchazo de una bicicleta. rt a'r',¡)7v,; f tt" l: , l:4,: ;
i) Pagar una multa de tráfico. ]^at, \J
J) pinchado rse dispone de henamienra\ y garo). _
[::?,::palomrtas
k) Eacer lllermático
de maÍz en una ora puesta al fuego
con aceite, sar v maí2.
t) Cambiar el cristal roto de una ventana.
!) I#..J;i:i,lT:da
relefónica. Considerar los casos: a) manuat,con
operadora ; ,b) auomátrco; c)
¿l Quitar una bombilla quemada de un techo. b
Encontrar la media de una lista indeterminada
3,) negatlvo.
de numeros posltrvos terminada con un
número
1.4. EvaluarlasiguienteexpresiónparaA
= 2yB = \;
t+A-4.8 I
., ),-}l,
*-; -- D(
t)4 4-
xz*xt k)'3-ttr' l) (x, - x, )2 + 1..
38 Fundamentos de programación
a)b^2-4*a*c
b) 3 * X ^ 4- 5 * X ^ 3 + X * 1-2 - !7
c) (b+d) , tc-4)
d) (xn2+yn2) n (L/2)
a)B*A-B^2/4*C
b) (A*B) 3/2
c) (((B+C) /2*A+Ia) *3*B) -5
1.9. Si el valor de A es 2, B es 3 y C es 2, evaluar la expresión:
a^b^c
a) 7 dív?
b) 7ú2
c) 12dLv3
d) 12 Ípd 3
e) 0rpd5
f¡ l5 Incd 5
d 7* 10-50mcd3*4+9
h) (7* (10-5)mcd3)*4+9
NOTA: Considérese la prioridad de Pa§cal: más alta: *, /, dív,ú; 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:
a¡ 9-5-3
b) 2dív3+315
c) 9dív215
d) '1 d.5 rrpd 3
e) 1ñ. (5 lncd 3)
.ft (7 rrlcd 5) Ípd 3
gt fi trd.5 rrod 3)
ht tt12 + 3) div 2) / (8 - (5 + 1))
ir 1l I I * 3
jt raiz2 (suadrado(4))
kt erad¡'ado (raiz2(.4'|1
ii t¡r¡¡ci81.5 l+ rdorrdeo(81.5)
Considérese la priondad de1 E jercicio 1.10.
CAPITULO
LA RESOLUCION DE PROBLEMAS
CON COMPUTADORAS Y LAS
HERRAMIENTAS DE PROGRAMACIÓN
CONTENIDO
39
40 Fu n dame ntos de p rogra mació n
Ejemplo 2.1
Leer el radio de un círctilo y calcular e imprimir su swperficie y la longitwtl de la circunferencic.t.
Análisis '>
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.
Las salidas serán dos variables: superficie y circunferencia, que también serán de tipo real.
Superficie y
long¡tud de
circu nferencia
Cálculo
de
longitud (C)
ntrada
S=Pl *R^2
E
L=2*Pl +R
radio (R)
Subproblema Refinamiento
Tras los pasos anteriores (diseño descendenfe y reJinamiento por pasos) es preciso representar e1
algoritmo mediante una determinada herramienta de programación: diagramn ie
llujo, psLuclocódigo
o diagramo N-5.
Así pues, el diseño del aisoritmo se descompone en las fases recogidas en la Figura 2.4.
La resolución de problemas con computadoras y las herramientas de p,so-^--- ^- 43
Diseño
de un ,/ : /''t1
-^
algoritmo
*l ,/
Refinamiento Herramientas de
por pasos programación (3)
(2t
- diagrama de flujo
pseudocódigo
- diagrama N-S
-
Figura 2.4. Fases del diseño de un algoritmo.
o deben estar seguidas -de alguna secuencl.p de_firlida de pasos hasta-que se obtenga .unJesqll4do
coherente.;.
o sólo puede ejecutarse una opgración alaveT.
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
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 codificará .n
,ná o varias sen-
tencias que ejecutan una tarea particular.
El algoritmo descrito es muy sencillo; sin embargo, como ya se ha indicado en párafos ante-
dores, el algoritmo general se descompondrá en pasos más simplás en un procedimientó denominado
refinamiento sucesivo, ya que cada acción puede desco*pon".i" a su vez en otras acciones
simples.
Así, por ejemplo, un primer refinamiento del algoritmó ir a1 cine se puede describir de l.
forma siguiente:
f. inicio
2. ver la carttelera de cines en e1 periodico
44 Fundamentos de ProgramaciÓn
EnelalgoritmoanteriorexiStendiferentesaSpectoSaConSiderar.E¡.!r@ras
n-qr gt§:):-Estas palabras-deseriben
reser-vadas se han escrito delibg¡adqmg-rl-te en ll-egdta-LmieirlfaS, Si
las estructuras de control fundamentales y proce;os de to¡na de decisión en el algoritmo,.Eslp-q1nc1u-
repe-
yen los conceptos i4pofi4ntes le seteg9!ó1.(expresadas por si'gntontes-si-xo ,/-{hqry-.c!§e»}&
e iterar:fin-iterar*en-inglés'
ii_r¡¿, (expreiadas ion mieniras-háce¡ o a.veces r€petir-hasta
se"en:uentlan en casi todos los algoritmos, especialmente los de pro-
whílé-do f t¿p¿at-anit)que
de acciones a seguir o bien
ceso de datos. La capacíd;d de decisión permite seleccionar alternativas
ia repetición una y otra vez de operaciones básicas'
empleo de inden'
Otro aspecto a considerar es el método elegido para descnbir-Ios algoritmos:
tan importante la
ración rsan-wado o justificación) en escritura áe algoritmos. En la actualidad es
de las acciones
escrirura de programa como su posterior lectura. Eúo se faciiita coLla indenfación
interiores a la-\ esrructuras fundar-nentales citadas: selectivas y repetitivas. A
lo largo de todo el libro
la indentación o sangrado de los algoritmos será norma constante'
para termrnar estas consideraciónes iniciales sobre algoritmos, describiremos las acciones nece-
la acción
sarias para rel-lnal el al-soritmo objeto de nuestro estudio; para ello analicemos
-=:afs)
se resuelve con
Si los números de los asientos están impresos en la enffada, la acción compuesta
el siguiente algoritmo:
La resolución de problemas con computadoras
y las herramientas de programación 45
f. inicio //algroritmo para encontrar
2. caminar hasra llegar a la primera la butaca Ce_ :s:=:_=::_
fit;-;;';"._._;'==- =-.
3. repetir
compara numero de fita con numero impreso
en llt__:::
si no son iguales. entonces pasar a la siguienr=
hasta_que se localice 1a fila co.rect_ i: a
4. mientras numero de butaca no coincida
con
hacer avanzar a traves de la fila a la numero oe cr__=_=
fin-mientras siguiente bj_!a:a
5. sentarse en la butaca
6. fín
Resolución
del problema
con computadora
Codificación Ejecución
del
Comprobación
del del
programa programa programa
Figura 2.5. Resolución del problema mediante
computadora.
46 Fu nda mentos de prog ra mación
l. diagrama de flujo,
",4 2. diograma N-S (Nassi-Schneidermanl.
3. lenguaje de especificación de algorinnos; pseudocódigo,
4. lenguaje español,
5. fórmulas.
l. Eleve al cuadrado b.
2. Toma a; multiplicar por c; multiplicar por 1.
3. Restar el resultado de 2 del resultado de l, etc.
Sin embargo, no es frecuente que un algoritmo pueda ser erpresado por medio de una simple fór-
mula.
Símbolos
principales Funcién
<->*
Yno
Decisión-(indica operacioner
;":,"-1T^.1^T:lte
togi.ffi
do1- y en función del resuttaáo áe ta misma dererminr
carninos alrernativos del programa se debe
cuát de to:
+s, :]:111:r seguir; nomalmenre ¡iene ,i.¡
salidas SI o NO--, p"ro"pueO. t.r", t.." 3;;;,
-respuestas üffi,
..:::';
(en funcióa d.r .",,lir,,r"
3::::::l"llllge
diferentes caminos de acuerdo con dicho
resuttaáo;
Í:'::T:l:':"'t,
uagrama oe lluJo. Se pueden dibujar
a cualquier lado del símbolo).
nr . r.
bruto<-
horas + precio
neto<-
bruto - tasas
contemplan la mayoría de los símbolos utilizados en el diagrama; sia embargo, los símbolos más uti-
lizados representan:
*:)
o proceso. I#l
o decisión. (,\
A o conectores.Q
o lln. S._r'
o entrada./sat ¡u, fl
o dirección del flujo, --)
v se resumen en la Figura 2.9.
En un diagrama de flujo:
Se puede escribir más de un paso del algoritmo en una sola caja rectangular. EI uso de flechas
significa que la caja no necesita ser escrita debajo de su predecesora. Sin embargo, abusar demasiado
de esta flexibilidad conduce a diagramas de flujo complicados e ininteligibles.
La resolución de problemas con computadoras y ras herram¡entas de programación 49
Las líneas de flujo (-+) representan el flujo secuenciar de la lógica del programa.
rectángulo ( T--l I significa algún tipo áe proceso en la coffiadora, es
decir, acciones a rea.
lizar (sumar dos números, calcular Taraíz-cuadiada de un número, etc.).
- El paralelogramo ( ¡l ) es un símbolo de entrada./salida que representa cualquier tipo de entra-
da-o salida desde el programa o sistema; por ejemplo, entrada de
teóhdo, salida en impresora o pan-
talla, etc.
El símbolo rombo ( + ) es una caja de decisión que representa respuestas sí/no o bien diferen-
tes alternativas 1,2,3, 4, ..., etc.
cada diagrama de flujo comienza y termina con un símbolo terminal (
c¡).
Un pequeño círculo ( o ) es vL conector y se utiliza para conectar caminos,
tras roturas previas
del flujo del algoritmo.
otros símbolos de diagramas de flujo menos utilizados de mayor detalle que
los anteriores son:
Un trapezoide (v ) indica q\e tn proceso manual se va a ejecutar en
- contraste con el rectán-
gulo, que indica proceso automático.
El símbolo general de entrada./salida se puede subdividir en otros símbol
os: teclado (w+), pan-
talla ( '), impresora (;;, disco magnéiiro ( disquete o discoflexible (E),,i#i
Z ), t r.
Eiemplo 2.2
calcular la media de una serie cle números posifivos, suponiendo que
los clatos se leen desde u¡t te t,-
minal. Un valor de cero entrqda- inclicard qu" ,, hallcanzado elJinal de la serie c¿
números positivos. -como
50 Fu n da me ntos de prog ra m ac i ó n
El primer paso a dar en el desarrollo del algoritmo es descomponer el problema en una serie cle
pasos secuenciales. Para calcular una media se necesita sumar y contar loi valores.
Por consiguiente, nuestro algoritmo en forma descriptiva seía:
El refinamiento del algoritmo conduce a los pasos sucesivos necesarios paranealizar las opera-
ciones de lectura de datos, verificación del último dato. suma y media de los datos.
,"1 fu a-
2- q' )t2 t:*¿
* L/ ) / '-) .{ á ¡*)
{- .L ¿* t2
tg¿;
%
dato <> 0
¡ ¿4
I /" lory'lr
1
----_.)
Ejemplo 2.3
Suma de los números pares comprendidos entre 2 y 1 0 0.
Diagrama ,,)
de flujo 2.3
SUMA e- ik"
SUMA + ruÚurnO
Ejemplo 2.4
Se desea realizor elalgoritmo que resuelva el siguiente problema:
Célculo de los salarios rnensuales 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 horcts semanales, las horos extraordinaias se pagarán a razón de 1,5 yeces la
hora ordinaria.
HORAS <= 40
SALARIOe- SALARIO<-
HORA* 40*PRECIO_HORA+
PRECIO_HORA 1,5*PRECIO_HORAX
(HORAS-40)
La resolución de problemas con computadoras y las herramientas de programación
o bien:
d.
-.j
\r1. i
SALARIO<- ,
o*)-{{;r
,"\ SALARIO<-
40*PRECIO-HORA+
HORASX
y' 1,,5*PRECIO-HORA*
PRECIO_HORA ,t (HORAS-40)
!
r1.
5= 4;* h*
fi
{
)'- hf r:]t?
1..
,!
54 Fundamentos de programación
Ejemplo 2.5
La escritura de algoritmos pqra realizar operaciones sencillas
¿le conteo es una de las primeras
cosas que un ordenador puede aprender
supongamos que se proporciona una secuencia de números,
tales como
302 0
Ejemplo 2.6
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 «lguales» y,
en caso contrario, escribir «Distintas».
:.1 5
NUMERO = O
TOTAL <-
TOTAL + 1
escri bi r
TOTAL
Para solucionar este problema, se puede comparar la suma de cada pareja con el tercer número.
Con
tres números solamente existen tres parejas distintas y el algoritmode iesolución del problema
será
fácil.
A+B=C
escribir
«iguales»
calcular
salario <- horas * Precio
calcular
neto (- salario impuestos
escribir
nombre, salario, impuestos, neto
se representa por
58 Fundamentos de programación
Ejemplo 2.7
se desea calcular el salario neto semanal cle un trabajador
enfunción del núntero d.e horas trabe-
jadas y la tasa de impuestos:
Se desea también escribir el nombre. salario bruto. tasas y salario neto (este ejemplo se deja
como eiercicio al alumno).
2.7. PSEUDOCÓDIGO
E'l pseudocódigo es un lenguaje de especificación (_descipción)
de algoritmos.El uso de tal lenguaje
hace el paso de codificación final (esto es, la traduccion a un
tengLi.¡e de programación) relativa-
mente fácil' I os lenguajes APL Pascal y Ada se utilizan a .oáo i.rguá1"ú" especiácación
'eces de
algoritmos.
El pseudocódigo nació como un lenguaje similar at inglés y era
un medio de representar bási-
camente las estructuras de control de programación,estructu.uáu
qu" se verán en capítulos poste-
riores' se considera tn primer borradir, áado que e1 pseudocódigá
tiene que traduci'rs" port".io.-
mente a un lenguaje de programación. El pseudocódigo no puedJ
ser ejecutado por una computa-
dora. La u_entaja del pseucrocódigo es qr" .n
programador se puede concentrff en la lógica y en las
su uso. en ra pranifiáción d.'r,
;;;;*ma, el
esrructurai de control y no pr"oórpalse de las
reglas de un lenguaje específico. Es también fácil modificar
ei pseudocódigo si se descubren errores
o anomalías en la lógica del programa, mientras que en muchai
ocasiones suele ser difícil el cambio
en la lógica, una vez que está codificado en un lenguaje
de p.ogramación. otra venta¡aáei pseudo-
l1aiqo es que puede ser trarjucido fácilmente a iengua¡ei esiructurados como pascal, c, FoR-
TR\\ 11/90, Ada 83/95, C++. etc.
pseudocódigo original utiliza para representar las
.E1 acciones sucesivas palabras reservadas en
inglés a sus homónimas en los lenguajes de programación-, tales
-similares while-end, como start, end.
stop' if'then'else. repeat-until, etc- La ás.rituá dJ pseudocódigo exige normalmente
indentación ( san-ería en el marge.n izquierdo) de diferentes la
líneas.
La representación en pseudocódigo del áiagrama de
flujo de la Frgura 2.i eslasiguiente:
El algontmo cornienza con 1a palabra start y finaiiza con la palabra end, en inglés (en
español, ini_cio. fin). Entre estás palabras, sólo se escribe una instrucción
o accjón por línea.
La resolución de problemas con computadoras y las herramientas de programación 59
Lalí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 :uttlizar corchetes o llaves.
No es recomendable el uso de apóstrofbs o simples comiilas como representan en BASIC de
Microsoft los comentarios, ya que este carácter es representativo de apertura o cierre de cadenas de
caracteres en lenguajes como Pascal o FOMRAN, y daría lugar a confusión.
Otro ejemplo aclaratorio en el uso del pseudocódigo podría ser un sencillo algoritmo del arran-
que matinal de un coche.
inicio
/ /arranque matínal de un coche
introducir 1a 11ave de contacto
tirar de1 estrangulador del aire
grirar 1a llave de contacto
pisar el acelerador
orr eL ru,ldo de, roLo'
.pisar de nuevo el acelerador
esperar unos instantes a que se calrente e- ro:::
Ilevar el estranqulador de aire a su oosicio---
fin
Por fortuna, aunque el pseudocódigo nació como un sustituto del lenguaje de programación y,
por consiguiente, sus palabras reservadas se conservaron 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 comortlutc;Lg, f in-pa¡e§¡1, 1e_e,r, 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 facrlitará 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
§.^t--?.nt,".ena1.Iead, wriEe, por inicio, f in, 1eer, escribir. respectivamente.
LnJ-CJ-O statt Leer read
introducir
HORAS
SALARIO_HORA
TASAS
calcular
SALARIO-BRUTO<-
HORAS*SALARIO-HORA
calcula r
TOTAL_IMPUESTOSe-
SALARIO-BRUTOXTASAS
calcular
SALARTO NETOe_
SA LAR O_B I R UTO.TóTAL_I M PU ESTOS
visualizar
SALARIO_BRUTO
TOTAL-IMPUESTOS
SALARIO_NETO
La resolución de problemas con computadoras y las herramientas de prqrana.ioo 61
Pseudocódigo
1. rnicio.
2. CONTADOR a 1.
Establecer -t
3. Establecer SUMA a 0.
4. mientras CONTADOR <= 100 hacer Io siguiente: l'(
4.1. SUMAT CONTADOR A SUMA. I
4.2. Incrementar CONTADOR en 1. ?.j.r ,,.!-
fin-mientras
5. Visualizar SUMA.
6. tln.
Este algoritmo se representa por el diagrama de flujo 2.8.
I
li
I -'r
CONTADOR <- 1
ü\J
j7 I
I r::'
mientras
. .&
Í, añadir visualizar
L. *, ¡;'" CONTADOR a SUMA SUMA
incrementar
CONTADOR en
2.3. Un corredor de maratón (distancia = 42,195 km) ha recorrido la carrera en 2 horas 25 minutos. Se desea
un algoritmo que calcule el tiempo medio en minutos por kilómetro.
Entracla: Cantidad total de tiempo empleado en la calrera; se establece el número total de kilómetros
en 42.195, ya que es igual Para todos.
Salid.a: Número medio de minutos por kilómetro, transformando previamente el tiempo ttrt.r .
minutos.
Proceso: Dividir el tiempo total en minutos por el número de kilómetros.
62 F u n da me ntos de p rog ra m ac i ón
El pseudocódigo es:
inicio
introducir tiempo total
verificar entrada correcta
establecer distancia = 42.195 km
pasar Liempo total a minutos
calcular media tiempo/kilometro
escribir resultado
fín
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:
T=2*6C.+25
.d r
o con carai::-general,
LAZ: E
si el tiempo es ft horas rfl minutos
T=h+60+m
El diagrama de flujo de este algoritmo es el representado a continuación.
T se ha convertido
m¡nutos previamente
distancia
D e- 42.195
La resolución de problemas con computadoras
y las herram¡entas de programación 63
Variables: AB AUX
Pseudocódigo
inicio
leer (A, B )
AUX <_ A
A<_B
B +_ AUX
escribir(A, B)
fin
AUX <- A
A<-B
B <- AUX
\ ü
2'5. Escribir un algoritmo para carcurar el iárea de un triánguro dada ra base y ra
' altura. ' t,, )
-=:Gi=3
Andlisis
AREA <_
1/2XBASE*ALTU
EJERCICIOS
2.1. Deducir los resultados que se obtienen del siguiente algoritmo:
v-ar =t-
_::: : 7: , :- , 7
iaicio
. xe-:
a*^-r-
escribir , x, ,.'
escribir i z.
fin
La resolución de problemas con computadoras y Ias herramientas de programación 65
fin
,L
- 2.3. Escribir un algoritmo que calcule y escriba el cuadrado de ll3' ,- ,
J
* ,-1. '1, '
¿2.4. Escribir un algoritmo que lea un número y escriba su cuadrado {
* 2.5. Determinar el área y válumen de un cilináro cuyas dimensiones radio r altura :e leen desde el teclado.
* 2.6. Calcular el perímetro y la superficie de un cuadrado dada 1a longitud de su lado.¡
n 2.7. Realízar 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 1a base ¡ 1a altura de1 mismo.
2.1.0. Escribir un álgoritmo que leá un nombre de una marca de automór'iles se-euida de1 nombre de su mode-
lo e informe del modelo seguido del nombre.
Determinar la hipotenusa de un triángulo rectángulo conocidas 1as longitudes de 1os catetos.
gra-
Diseñar un algoritmo que realice la siguiente conversión: una temperatura dada en grados Celsius a
dos Fahrenheit.
NOTA: La fórmula de conversión es' F = (9/5) C + 32.
.. 2.13. Diseñar un aigoritmo que calcule el área de un triángulo en función de las longitudes de sus lados
gadas).
2,15. Elcambio de divisas en la Bolsa de Madrid el día25 de agosto de 1987 fue el siguiente:
ESTRUCTURA GENERAL
DE UN PROGRAMA
CONTENIDO
b/ &
ü
,,t
,;f
68 Fundamentos de programación
Definición
D
del problema
o
c
U
Diseño del
M
algoritmo
E
N
T
A
C
I
Depuración y ó
N
verificación
. Las fases 1 y 2 yaban sido analizadas en los capítulos anreriores y son el objetivo fundamental
de este libro; sin embargo, dedicaremos atención, a 1o largo del libro (véase Capítulo 13) y en los
apéndices, a las fases 3,4,5 y 6, aunque éstas son propias de libros específicos iobre lenguajes de
programación.
Programa
(algoritmo de
resolución)
El programador debe establecer de dónde provienen las entradas al programa. Las entradas, en
cualquier caso, procederán de un dispositivo de entrada disco,...--E1 proceso de intro-
ducir la información de entrada --datos- en la memoria -teclado,
de la computadora se denomila entada de
'daiLtos,operación
de lectura o acción de leer.
Las salidas de datos se deben presentar en dispositivos periféricos de salida: parttalla. impreso-
ras, discos, etc. T a operación de salida de datos se conoce también como escrifu¡¿ o acción de
-gsqribir.
instruccion 1
instruccion 2
instruccion n
En el caso del algoritmo 1as instrucciones se suelen conocer como accion¿s, y se tendría:
accion 1
accion 2
accron n
accion 1
""t:" '
accton x ----l
I
accion n ¡1
:
70 Fu ndame ntos de prog ramació n
f. instrucciones de inicio/fin,
2. instrucciones de asignación,
3. instrucciones de lectura,
4. instrucciones de escritura.
5. instrucciones de bifurcación.
Las instrucciones l, 2,3 y 4 ya han sido descritas en capítulos anteriores y se recogen en la Ta-
bla 3.1.
b) ¿Cuál será el valor que tomará la variable C tras la ejecución de las siguientes instrucciones?
A<*L2
B<-A
teñ
1. A <- 10
2. B <- 2A
3. AUX <- A
4. A <- B
5. B <- AUX
N(-N+5
SerealizaelcálculodelaexpresiónN+5ysuresultado2+5=Tseasignaalavariablesitua-
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 coreos, donde el número de
cartas depositadas en é1 variará según el movimiento diario del carlero de introducción de cafias o
del dueño del buzón de extracción de dichas cartas).
Leer del terminal los valores NUMERO, HORAS y TASAS, archivándolos en la memoria; si los
tres números se teclean en respuesta a Ia instrucción son 12325,32, L200, significaría que se han
asignado.a las variables esos valores y equivaldúa a la ejecución de las instruciiones.
b) Jeer (A, B, C)
A= 100
B= 200
c = 300
72 Fu nda mentos de prog ra mación
_l
rnstruccron B
:::s::::cicn 12
ultima instruccion
Además de estos elementos básicos, existen otros elementos que forman parte
de los programas,
cuya comprensión y funcionamiento será vital para el correcto diseRo de un
algoritmo y natural-
mente la codificación del programa.
Estos elementos son:
o bucles,
o contadores,
o acumuladores,
o intenaptores,
. estructuras:
secuenciales,
- selectivas,
- repetitivas.
-
74 Fundamentos de programación
3.5.1. Bucles
un bucle o lazo (loop)-l es un
-s-ggmen[o de un algoritmo o programa, cuyas
un número determinado a" instrucciones se-repiten
dadera la condición)' se debe
i
'"ó"i mientras .umpi" unui.,!.*rnu d,a cc,¡ncrición(existe o es yer-
mecanismo es una condición que "ttuui"ü,*i".unir.no puru a.t..iinar ras tareas repetitivas.
puede ser veroaoer" Esre
p^so o iteración der bucle se comprueb a ünaveza cada
"'fr],J;.;;
ltoti oá instrucciones que se repiten en el bucle).
Un bucle consta de tres partes:
o decisión,
. cuerpo del bucle,
o salida del bucle.
tntcto
SUMA O
/ reer N (1)
Bucle SUMA e-
(2)
SUMA + N
// escribir
surva (3)
1 Este
término se traduce también. a \_eces.
por lazo o ciclo
Estructura general de un prq9rama
75
El diagrama de flujo escrito en pseudocódigo es:
inicio
SUMA <- O
'l: leer (N)
siN=0entonces
escribirrSJMA)
ir_a ! ir
si_no
SUMA(-SUMA+N
fin_si
ir_a 1
fin
SUMA
SUMA + N
rtgura
Figura S.4.
3.4. Bucle con fin.
Bucles snidados
En un algoritmo puedenexistir
varios bucles.,[.os bucres pueden
I os bucres son'anidados cuan;; ser anidados o independ.ientes.
.rta'i"¿iipu"rr", é rrl;ooo qr"
otros;,os bucres son indepen¿¡rnt"rir-unáoson unos son inreriores a
externos unos a otros (Figura
3.5).
76 Fundamentos de programación
3.5.2. Contadores
Los procesos repetitivos son la base del uso de las computadoras.
En estos procesos se necesitan nor-
malmente contar los sucesos o acciones internas del Lucle,
como pueden ser los elementos de un
l-rchero, el número de iteraciones arealizar por el bucle,
etc. Una'forma de controlar un bucle es
mediante un contador.
L.' confador es una variable cuyo valor se incrementa o decrementa en una
, cantidad constante en
caq¿t lteracton.
La Fi-sura 3'6 presenta un diagrama de flujo para un algoritmo
que se desea repetir 50 veces; el
contador se representa en este ejemplo con la variable coNi.
La instrucción qr" ,"pr"r"nta a un con-
tadoreslaasignaciónCONT <- 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.
El contador puede ser positivo (incrementos, uno en uno)
o negativo (decrementos, uno en uno).
En la Figura 3'6 el contador cuenta desde 1 a 50 y deja
de contar'cuando la variable CoNT toma el
valor 5l y se termina el bucle. En la Figura 3.7 el cóntador
cuenta negativamente, o lo que es lo
mismo, descuenta o decrementa; comienza a_contar en n y
se va decrementando hasta llegar a
cero' en cuyo caso se termina el bucre y se realiza la acción
escribir.
Estructura general de un pry¡irrlln TI
Ejemplo 3.1
le-l+1
78 Fundamentos de programación
producto <- 0
CONT <- n
Ejemplo 3.2
Leer todas las fichas de uru archivo e imprimir el númcro total de ellas.
Pararealizu estas operaciones es usual poner en todos los archivos una ficha denominada fin de
fichero o de archivo (Fr), que se sitúa al final del archivo, con lo cual cuando se lee el archivo y se
encrrcnka esta ficha (FF) se sabe que se ha alcanzado el final del archivo.
El aTgoritmo en lenguaje natural sería:
f- iais{e In 3-ni(,'o
2-Ce-0
3- Ieer(ficha)
). {ry- o
4. ei {FF} ir_a (8) } l) Lee! ¡1"1h"! .,
5. C (- C + 1 "
6- eseibi¡(ficha) 2 ifr)ir_o,i
7- ir_a (3)
8- escri-bi¡(C)
CuoW
9- fiE e: Lktrtit í '.¿''b
i? r^ r?\
¿ *lt"'si¡''{:
Estructura genera! de un ptagannít ñ¡
Ce-C+1
3.5.3. Acumulador
Un acumulador o totalizador es una variable cuya misi§n,es almacenar qa¡tidades
vari._ables resul-
tantes de sumas sucesivas. Realiza Ia misma rrr.iJ" qr. ;; a" ár.
incremento o decremento de cada suma es variable ";;;;á;;;l;;;r'"1,
lrg* ae consiante, como en el caso del con-"r
tador. "n
s.9.I-"-!I"*a por la instrucción
I I s + N, donde N es una variable y no una constante.
Ejemplo 3.3
sumar los primeros K números enteros. Er algoritmo correspondiente
es:
t'
f. inicio
2. Teer (R) l)t.Éjüy il*ll
rr i ra
3. Ne 0 ¡sS".'
4. strMA <- 0 './ .: . ' ir #' ¡,:*
5. N e- N + 1 ,c*. v**
6. SUMA (_ SLIMA + N };-. rliin *.:"' lr+ fi1 e.\ { ft.l
7. si N = x, ir_a (9)
8. ir_a (5) :6, Fr*: il-, ri _. ;",,",§",
9. escribir(K, SUMA) , i1 ; :ii
10. fin ,-:":*,. fi.!;r; i"ff . ... ,' ¿"''
v.r
N<-0
SUMA <- O
N<-N+1
SUMA <-
SUMA + N
escribir
K, SUMA
condición?
acción F2
En e1 caso anterior, se tiene una insffucción alternativa con dos posibles caminos: si la condición
es verdadera, se ejecuta la acción 51, y si la condición es falsa, se ejecuta la acción 52. Es posible
Estructura general de un Prag'e-a 81
acción S1
SUMA <- O
escribir
SUMA
SUMA <--
SUMA + N
82 Fu nda m entos d e prog ra m aci ó n
Ejemplo 3.4
Se tiene un archivo con uru conjunto de fichas con dos campos, M y N . Se desea listar el campo yL
de las fichas pares y el campo N de las fichas impares.
escribir
campo M
Ejemplo 3.5
Diseñar un diagrama de flujo que escriba los números de I a 1000.
Estructura general de un programa 83
l«- l+ 1
Ejemplo 3.6
Calcular la suma de los números de ! a 10 0 0.
S=7+2 +3+4+ +999 +1000
La suma se realiza con totalizador o acumulador S, que irá realizando las sucesivas sumas
1, I 2, I
parciales, + +2 +3, I + 2 + 3 + 4, etc.Paraelloseinicializalavariabledelsuma-
dor S a cero y el contador I representará los números sucesivos 1 a 1000.
S<-S+.1
l+- l+ 1
,l
84 Fundamentos de prog ramación
Algoritmo
cabecera del c::!¡::ra
secc¿on de cJec a::::cr
seccion de ac::::=-s
aiErorjtmo DEMOl
': es-n
var
entera; Numero-EmPleado
real: Horas
real: Impuestc
reaf : Salario !l "' a'
o de modo equivalente
entera: Numero-EmPleado
real; Horas, Impuesto, Salarto /,'
rea-Z ; Horas
ImPuesto //impuesto a Pagar
Salario //cantidad ganada
pi = 3 .14t592
¡r*.¡6 = 43
horas = 6.50
del algoritmo.
Los valores de estas constantes ya no pueden variar en el transcurso
const
estrella = '*
frase = 12 de octubre
mensaje = Hola mi nene
3.6.5. Comentarios
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.
I 'a documentación puede ser i4tema-y ext9rug.La clocuntentación interna qs la que se acompaña
en el código o programa fuente y se reálizá á Uáse ¿e comentarios significativos. pstos comentariós.¡e_
representan con diferentes notaciones, según e1 tipo de lenguaje de programación. La documentación
externa se acompañará en información ajena al programa y' proporcionada por el programador.
BASIC sl i'"'
1' Los comentarios se incluyen dentro de líneas que comienzan con la palabra reservada REM.
100 REM *** autor J.R. Mackoy ***
200 REM subrutina ordenacion
FORTR{.\
que contiene comentarios comienzan en su columna 1 con el carácter
l9t-rytut asterisco- (11,_o-la
letra C v se pueden escribr a parlir de la columna 2:
!u-.-, t¡a l
PASCAL
o bien:
MODULA-2
tS§-sa!0§rlta(i,p§-Le-,9l19,1_99?I!entrecaracteresliayeq({})
{Esto es un comentario en C}
C++
NOTA: A 1o largo clel libro utilizaremos preferentemenfa pararepresentar nuestros comentarios los
símbolos / / . Sin embargo, algunos autores de algoritrnos, a ftn de independizarla simbología del
lenguaje, suelen representar los comentarios entre corchetes ( [ ] ).
.sentencia Snt
in
88 Fundamentos de programación
NOTAS:
si-no
escribir(. (.-b raiz2 (D) ) / (.2*a) ) :
escribir,,-b-Laj /2tD)) ,2*a, ) !
fin-si
fin-si
Ein
Variables
hacer
FACT <- 10
N <- NPASOS-S
Andlisis
ElproblemapuedecalcularelproductoN * (N _ 1) * (N _ 2) * . *3 * 2 * l,queen
términos matemáticos se re conoce con er nombre
EI algoritmo que resuelve el problema será
de FACT.RTAT, é N.
el siguiente:
' 1. -Leer N.
IJ. l:::
que = o, visuarizar ,,Facrorial de 0 isual 1,,.
1: queN N
comprollar > 0 (los numeros negativos no ss consideran)
4. Hacer 1a variable p que va a contener el product.or igruat a 1.
.
90 Fundamentos de programación
5^ Realizar e1 producto p = p * N.
Disminulr en una unidad sucesivamenEe hasta 11egar a N = 1, y de modo
simuftaneo 1os productos p * N.
6 Vrsua-Lazar P-
7 Fin.
escribir
'Factorial de 0
igualaJ
escribir P«-P*N
'Número negativo' N<-N-1
escrib¡r escribir
'Prueba con 'Factorial ='
positivos_
Pseudocffigo
aLgori@ Factorial
var
entero: N
real: P
Estructura general de un programa 91
inicio
leer (N)
eiN=0entonces
eecribir( 'Factorlal de 0 igual a 1
si_no
EiN>0er¡tori.cea
P<-1
1: P €- P * N
NEN_1
siN=lentonceE
eecribir('Factorial -,, p)
si_no
ir_a 1
fin_si
si_no
escribir(' Numero negativo' )
escribir¡ 'pruebe con positivos,)
fin-ei
fin_ei
fin
3.3. Diseñar el diagrama de flujo para resolver una ecuación de segundo grado Ax2 + Bx + C = O.
Análisis
Para que la ecuación de segundo grado tenga solución es preciso que el discriminante sea mayor o igual
que 0.
El discriminante de una ecuación de segundo grado es:
D=8,_4AC
Por consiguiente. si
1. Inicio.
2. fntroducir los coeficientes A, B y C.
3. Calculo del discriminante D = 82 - 4AC.
4. Comprobar e1 valor de D:
. si o es menor que 0, visualizar un mensaje de error,
. sa D es iqual.a 0, se obtienen dos raices iguales XI X2 _B
. si D es mayor que 0, se calculan las dos ralces XI y = = / 2A
X2.
5 . I in de_ a lgori un o.
92 Fu nd a me ntos de prog ra m aci ón
Diagrama deflujo
hacer
D=82_4AC
X1 =1-3+DyzA
x2 = (-B -D)/24
3.4. Escribir un algoritmo que acepte tres números enteros e imprima el mayor de ellos.
Aruúlisís
El diseño del algoritmo requiere de una serie de comparaciones sucesivas. Las operaciones sucesivas son
las siguientes:
i. I-icio.
2. Iotr:oducir 1os tres numeros A, B, C.
3.CompararAyB:
. si A es r.enor que B:
-compararByC:
. si B es mayor que C, el mayor es B,
. si B es menor que C, el mayor es C.
. si A es mayor que B:
-compararAyC:
. si A es menor que C, el mayor es C,
. si A es mayor que C, el mayor es A.
Estructura general de ur s':i'¿-a 93
Diagrama de flujo
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. Leer 500 números enteros y obtener cuántos son positivos.
{R S" trata de escribir el algoriimo que pennita emitirla factura correspondiente
\'-l
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 pp*'setas, se debe realizar un descuento del 5
por 100.
- 3.6. Calcular la suma de los cuadrados de 1os cien primeros números naturales.
-- 3.7. Sumar los números pares del 2 al 100 e imprimir su valor.
- 3.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.
3.1.1. Diseñar un diagrama que permita realizar un contador e imprimir los cien primeros números enteroi.
3.12. Dados diez números enteros, visualizar la suma de los números pares de la lista, cuántos númert.
..--.
é pares existen y cuál es la media aritmética de los números impares.
94 Fu nd a m e ntos de prog ra m aci ó n
INTRODUCCION A LA PROGRAMACION
ESTRUCTURADA
CONTENIDO
5
95 Fu ndamentos de prog ram ació n
Módulo 3 Modulo 4
Módulo 31 Mooulo 42
Módulo 21 Módulo 22
.'r
98 Fu nda mentos de prog ramaci ón
Este programa se puede descomponer en módulos, de modo que exista un módulo principal o de
control y diferentes submódulos.
Módttlo principal:
La representación gráfica se muestra en la Figura 4.2, de modo que existirá un módulo principal
y tles submódulos.
Módulo
principal
recursos absfractos,
:'o
,\. estructuras básicas.
I
\' secuenciales.
\o selectivas,
{".o repetitivas.
acción 1
acción 1
accron n
'":zii:z:::
ttn
Figura 4.7. Pseudocódigo de una estructura secuencial.
Ejemplo 4.2
Cálculo de la suma y producto de dos números.
Pseudocódigo
inicio
.Ieer (A)
J,eer (B )
S<-A+B
P(-A*B
escribir(S, P)
fin
1O2 Fundamentos de programación
Diagrama de tlujo
S<-A+B
S<_A*B
Ejemplo 4.3
Se trata de calcular el salario neto de un trabajador enfunción del número de horas trabajadas,
precio de la hora de trabajo y, considerando unos descuentos fijos, el sueldo bruto en concipto cle
impuestos (20 por 100).
Pseudocódigo
inicio
.r ¡ca1culo salario neto
Ieer(nombre, horas, precio_hora)
saiar;o_bruto <- horas * precio_hora i
i:o:restos <-- 0.20 * salario_bruto
saiario_:ieto é- salario_bruto - impuesLos
escri.bjrilombre, salario_bruto, salarlo_neto)
fiu
lntroducción a la programaciónfuú ltrl
Diagrama d.e Jlujo
leer
NOMBRE, HORAS
PRECIO-HORA
SALARIO_BRUTO e-
HORAS * PRECIO_HORA
IMPUESTOS <-.
O.20 * SALARIO_BRUTO
SALRARIO*NETO <-
SALARIO-BRUTO <_
IMPUESTOS
Diagrama N-S
leer
nonüre, horas, precio
salario*bruto (- horas * orecio
impuestos <- 0.20 * salario.¡.úi"
b t Pseudocódigo en castellano
Pseudocódigo en castelluno
entonces
Si (accion compuesta)
si -o.. ol . .on entonces
<accion SJ1>
Pseudocódigo en ütglés <accian 572>
then
<.1:::: .
-._>
endi f <accion SZn>
fin-si
Figura4,8.Estructurasalternativas,,.o,",,
=§
¿condición?
a) b)
Pseudocódigo en inglés
<accian S2n>
if <condicion> then si-no
<accion Sl <accion 521>
else
<accion 52>
endif
<accian s1n>
fin_si
c)
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 y f irr_"i; este procedimiénto aumenre 1:
Iegibilidad de 1a estructura y es el medio más idóneo "i
para representar algoritmos.
J
105 Fundamentos de programación
Eiemplo 4.4
Resolución de una ecuación de prirner grado.
. a<>0 x=-b/a
. a=0 b<>0 entonces «soluciónimposible,
. a=0 b=0 entonces «soluciónindeterminada»
aTgoritmo RESOLl
var
\..
real: a, b, x al y *, - 1."¡
inicio
Jeerra, br v : ," ,} '
gi a <> o entonces ,X
x e- -bla i.¡
escribir (x) ":
si_no
' si b <> 0 entonces
escribir ( 'solucion imposible, )
si_no
escribir ( 'solucion indeterminada, )
r1n sa
ftn_si
fin
Ejemplo 4.5
Calcular la media aritmética de una serie de números positivos.
VAITIABI FS:
aTgorit@ y,ed-e
inicio
s <- 0 //rtlcíaitzacion de s y n
n<-0
lntroducción a la programación estructurada 1O7
datos:
]eer(x) //calcuto eJ primer numero ha de ser mayor que cero
gix<0entonces
ir_a media
si_no
n<-n+1
s<-s+x
ir_a datos
fin_ei
media:
m +- s/n //media de los numeros positívos
escribir(m)
fin
Ejemplo 4.6
Se desea obtener la nómina semanal neto- de los empleados de una empresa cuyo trabajo
se -salario
pqga por horas y del modo siguiente:
I . Tn_cio.
2. Leer nombre, horas trabajadas, tarifa.
3. Verificar si horas trabajadas <= 35, en cuyo caso:
salario_bruto = horas * tarifa; en caso contrario,
safario_bruto = 35 * tarifa + (horas-35) * tarifa * 1.5.
4. Calculo de impuestos
si salario_bruto <= 20.000, entonces impuestos = 0
si salario_bruto <= 35.000 entonces
impuestos = (salario_bruto _ 20.000) * 0.20
si salario*bruto > 35.000 entonces
_ = (safario_bruro - 35.000) * 0.30 + (15.000 * 0.20)
5 . (^a.ll.nyu"tos
cu.l o del sa Ia rio_neco:
salario_neto = salario_bruto _ impuestos.
b. -1,'rn-
108 Fundamentos de Programación
aTgoritmo Nomina
var
cadena: nombre
real: horas, impuestos, sJlruto, sneto
inicio
-Leer(nombre, horas, tarifa)
si horas <= 35 entonces
sbruto <- horas * tarifa
si_no
sbruto <- 35 * tarifa + (horas - 351 * r'' * tarifa I
-----, _2+=--= -- I
impuestos <- 0
- si-no
si (sbruto > 20'000) v (sbruto <= 35'000) entonces
impuestos <- (sbruto - 20.000) * 0'20
si,no
impuestos e (15.000 * 0.20) + (sbruto - 35.000)* 0.30
fin-si
fin-si
sneto (- sbruto - imPuestos
escribit(nombre, sbruto, impuestos, neto)
fín
tntcto
horas < = 35
SI no
*
sbruto <- 35 tarifa + (horas-35)*
sbruto r- horas x tarifa 15 * tarifa
impuestos e- 0
impuestos e-
impuestos (-
15.000 + 0.20 +
(sbruto-20.000) x 0.20
(sbruto-35.000) * 0.30
fin
lntroducción a la programaciónñ@ú
Representación del algorifmo en diagrama de
flujo
leer NOMBRE
HORAS. TARIFA
SNETO <-
(SBRUTO.
IMPUESTOS
NOMBRE, SBRUTO
IMPUESTOS, SNETO
110 Fundamentos de Programación
Ejemplo 4.7
Eiemplo 4.8
algoritno Bislesto
var
entero: ai-]o
inicio
l,eer ( año )
ei (año MoD 4 = 0) y (año MOD 100 <> 0) 0 (año MoD 400 = 0) entonces
escribir( '81 año ', año, ' es bisiesto')
ei_no
.escribir('EL año ' , año, no es bisiesLo')
fin si
fin
Eiemplo 4.9
Algoitmo que nos calcule el drea de un triángulo conociendo sus lados. La esttuctura selectiva se
utiliza para el control de la entrada de datos en el programa.
algoritno Area-Lriangulo
Yar
. = 1^ e n area
inicio
eecribir( 'Deme los lados ')
Teer (a,b, c\
p<-(a+b+c) /2
gi (P , a) Y (P , b) Y (P , c) entor¡ceE
area <- :aiz2(r¡ * (p - a) * (p - b) * 1p - c))
escribir( area)
si-ao
eecribir('No es un triangiulo')
fin ei
fin
lntroducción a la programacton est''-::"¿:' 111
casod.e E hacer
acciort s2b
Modefo 5 (simPTificado) :
acclon sip
si..no¡ accion Sx "lu.=nhacer
fin_segun
fin segun
Diagrama de flujo
Diagrama N-S
Modelo 1
Modelo 2
-----____..-.-= o n oi o n-_-/
"i
n=1 2 3 -i-]-otros
S1 S2 S3 Sn Sx
Pseudocódigo
NOTAS:
.. 1' obsérvese que para cada valor de la expresión (e) se pueden ejecutar una o varias acciones.
Algunos lenguaies, como Pascal. denominan a estas
inrtÁc.iáre, ,o*pu"rrory las delimitan con las
palabras reservadas begin-end (inicio-fin);
es decir, en ps.uio.oorgo.
lntroducción a la programaciónñú lI3
segun_É¡ea E hacer
eL-. accion 3L
e2:. accion 52
en, accion Sn
gi_no: accion Sx
fin_segun
seEun_Eea E hacer
e1: inicio
accion S11
accian SL2
)ccion sta
fin
e1: inicio
fin
en: inicio
t afr
si_no: accion Sx
fin_eegun
2. Los valores que toman las expresiones (E) no tienen por qué ser consecutivos ni únicos; se
pueden considerar rangos de constantes numéricas o de caracteres como valores de la expresión E.
caso_de E hacer
2, 4, 6, B, 10: escribir ,numeros pares,
L, 3 , 5, 7 , 9: escribir numeros impares ,
fin_caso
¿Cuál de los anteriores modelos se puede considerar representativo? En realidad, como el pseu-
docódigo es un lenguaje algoútmico universal, cualquiera de los modelos se podría ajustar a sü pre-
sentación; sin embargo, nosotros consideramos como más estándar los modelós l, Z; 4. En esta otra
seguiremos normalmente el modelo 1 , aunque en ocasiones , y pafa famlliarizar al lector en su uso,
podremos utilizar los modelos citados 2 y 4.
Ejemplo 4.10
Se desea diseñar un algoritmo que escriba los nombres de los días de la semana en
función del valor
de una variable DrA introducida por teclado, que representa su posición dentro de la semnna.
Los días de la semana son 7; por consiguiente, el rango de valores de ora será 1 . . . 7, y caso
de que DrA tome un valor fuera de este rango se deberá producir un mensaje de error advirtiendo le
situación anómala.
114 Fundamentos de Programación
algoritmo Nombre-dias
var
entero: DIA
inicio
feer (DfA)
aegun-Eea DfA hacer
I: escribir ( 'LL-ITES )
2z escribir('MARTES )
3 : esctíbir('MIERCOLES' )
4t escribir( JUEVES')
5: escribit( VIERNES')
6: escribit ( 'SABADO' )
7 : escribit ( 'DOMINGO' )
si-no
escríbit ( 'ERROR )
fin-segun
fin
Eiemplo 4.11
Leída una fecha, decir el día de la semana, suponiendo
que el día I de dicho mes fue lunes'
aLgorixfio Dia-semana
var
entero : dia
inicio
'áscribir( Diqa el día .i)
) l l.
leer( dia) I
1
segu¡r-sea dia MOD 7 hacer
1: -U
esctibit( 'Lunes )
2:
esctíbir( Martes )
3:
escribit (' Miercoles' )
4:
eectibir(''llleves' )
5:
escribit( viernes')
6:
escribit (' sabado ' )
0:
escribir( Domingo')
fi¡ segiu¡
fiE
Eie¡nplo ¡+.12
Pregwúar qué día de l"a semana fue el día I del mes actual y calcular que día de la semana es hoy'
inicio ,)
escribit( E1 dia 1 fue
,¿a*1 Ái:1 \
Oial hacer
"""""-"""
d1<- 0
,M':
d1€- 1
d1<- 2
d1<- 3
\/, .
d1<- 4
d1<- 5
'D' :
d1<- 6
6i-no
dle -40
fin_segun
.leer( dia)
dia <- dia + d1
/-
escribitl 'Jueves' )
5:
elcribir( 'Viernes')
6:
eÉcribir (' sabado ' )
0:
esctibir{ Domingo' )
fin-segun
fin
Ejemplo 4.13
B, C, D Y E a calificaciones numéricas 4 ,
Se desea convertir las calificaciones alfabéticasA,
5, 6, 7 Y B, resPecfivamente'
/.
r'-
116 Fundamentos de programación
inicio
-7 eer
(LETRA )
segun_Éea LETRA hacer
I
'A': calificacion <- 4
'B : calrficacion <- 5
'C : calificacion <- 6
D : cafificacion t- 7
E : calificacion <- B
si-no
escribirt E^^C-Á ,
fin-segun
fin
Como se ve, en el pseudocódigo no se contemplan otras posibles calificaciones ejemplo,
-por
0, resto notas numéricas-; si así fuese, habría que modificarlo en el siguiente sentido:
segun_sea LETFA hacer
'A : calificacion <- 4
'B : calificacion +- 5
'C': calificacion <* 6
D': calificacion <- 7
E': calificacíon <- 8
si_no: calificacion <- 0
fin_segun
Ejercicio 4.14
Algoritmo que nos indique si unnúmero entero, leído de teclado, tiene 1,2, 3 o mds de 3 dígitos.
Considerar los ne gativos.
Se puede obserr/ar que, la estructura segun_sea <expresion> hacer, son varios sí <expr.
logica> entonces anidados en la rama si-no. Si se cumple el primero ya no
pasa por los demás.
aTgoritmo Dig'tos
var
eatero: n
inicio
.l eer (n )
aegun,sea n hacer
-9 ..9:
escz'ibir ( ' Ti ene 1. digito' )
)) ..99:
egcribir( Tiene 2')
-i)9 . . 999:
eecribir( Tiene tres')
si_no
egcribirr liene mas de tres )
fi. eegnrn
fin
Ejemplo 4.15
por teclado un número comprendido entre
Se desea leer I y 10 (inclusive) y se deseavisualizar si el
número es pqr o impar.
\
lntroducción a la programacion er'---'::: 111
Enprimer1ugar,sedeberádetectarsielnúmeroestácomprendidoenelrangor.álrdc,-:.
acontinuaciónsielnúmeroes 1, 3, 5, 1, 9,escribirunmensajede' impa: :,.ie. *
6 , 8 , 10, escribir un mensaje de ' par ' .
al-goritmo PAR_IMPAR
var entero: numero
inicio
feer numero( )
{
4.6. ESTRUCTURAS REPETITIVAS
!1
Las computadoras están especialmente diseñadas para todas aquellas aplicaciones en las cuales una
i operación o conjunto de ellas deben repetirse muchas veces. Un tipo muy importante de estructura
I
! es el algoritmo necesario para repetir una o varias acciones un número determinado de veces. Un
i 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.
I
i I as estructuras que repiten una secuencia de instrucciones un número determinado de veces se
denominan bucles. y'se llarna iteración al hecho de repetir la ejecución de una secuencia de acciones.
Un ejemplo aclarará la cuestión.
Supongamos que se desea sumar una lista de números escritos desde teclado ejemplo, cali-
-por
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 cadavez que uno de ellos
se lea. El algoritmo que resuelve este problema es:
,{
1 a-Zgoritmo Suma
¿
var
i enLero: suma, numero
inicio
SUMA €. O
Ieer ( r ume ro )
fin
y así sucesivamente para cada número de la lista. En otras palabras, el algoritmo repite muchas vece :
las acciones.
J. eer ( numero )
SIIMA <- SI]MA + numero
f
1 18 Fundamentos de programación
Tales opciones repetidas se denominan bucles o lazos. La acción (o acciones) que se repite en un
bucle se denomina iteración. Las dos principales pregunt᧠á realizarse en el diseñó de un bucle son:
¿qué contiene el bucle? y ¿cuántas veces se debe repetir?
Cuando se utiliza un bucle para sumar una lista de números, se necesita saber cuántos números se han
de sumar. Para ello necesitaremos conocer algún medio para cletener e1 bucle. En el ejemplo siguiente
usaremos la técnica de solicitar al usuario el número que desea, por ejemplo, N. ExiJten dos procedi-
mientos para contar el número de iteraciones, usar una vanable TOTAL que se inicializa ala"*tidrd d.
números que se desea y a continuación se decrementa en uno cada u., qu" el bucle se repite (este pro-
cedimiento añade una acción más al cuerpo del bucle: ICTAL <- TOTAL - 1), o bien iniciilizar la varia-
ble TOTAL en 0 o en 1, e ir incrementando en uno a cada iteración hasta llegar al número deseado.
suma-numero
I:1"rrt^"
entero: N, TOTAL
real : NTUMERO, SUIIA
inicio
leer (N)
TOTAL é* N
SUMA <- O
mientrasTOTAL>0hacer
leer (NUMERO )
SUMA <- SUI{A + NUMERC
TOTAL <- TOTAL 1
fin_mientras
escribir\ La suma de 1cs , N, numeros es , SJIIA)
fin
Para detener la ejecución de los bucles se utiliza una condición de parada. El pseudocódigo de
una estructura repetitiva tendrá siempre este formato:
inic io
::::ctalizacion de variables
rañóts I -
.::t.ues 51, 52, ...
::_r. sequn condicjon
r.,tt,,=-:: Sn, Sn + 1,
f il_repet ir
-\unque Ia condición de salida se indica en el formato anterior en el interior del bucle existen
lenguajes que así la contienen expresamente 1-, lo normal es que /a condición se indique -y al final o al
prirrcipit-t del bucle. r'así se consideran tres tipos de instrucciones o estructuras repetitivas olterativas
generales \ una particular que denominaremos iterar, que contiene la salida irt"rio. del bucle.
"nil
iterar Iloop )
mientras tx.hile )
repetir l repeat )
. l. Lacondición de salida del bucle se realiza al principio del bucle (estructura mientras).
algoritrno SUMAL
inicio )"4f
//Ir1ctaltzar K, S a cero
K<-0 4 ,Pl
l-/"
'J,o , tl
s<-0 "-
leer (n) Ü)t¡'
mientrasK<nhacer
K<-K+1
S<-S+K
fin mientras
escribir (S)
fin
2. La condición de salida se origina al final del bucle; el bucle se ejecuta hasta que se verifica
una cierta condición.
repetir
K<-K+1
S<-S+K
hasta,_que K > n
i es un contador que cuenta desde el valor inicial (vi) hasta el valor final (vf) con lm
incrementos que se consideren.
12O Fundamentos de programación
Pseudocódigo en castellano
a aa: or -cr
fin_mientras
Pseudocódigo en inglés
while :::i:c-ton do
<:::: i-:es >
endwhile
mientras condición c l:: e::
dowhile condicion
acc'l0nes <acato¡es>
endd.o
c)
b)
Ejemplo 4.16
contar los ntitneros enteros positivos introducidos por teclado.
se consideran clos variables enteras
NWEFo -r' CCI'--r-ll?' (cotttará el número de enteros positivos).
Se supone que se leen números
posifit'os y se detiene er bucre cuando se lee un número'negativo
o cero.
aTgoritmo
var
t-
Introducción a la programac¡ón estructurada 121
inicio
contador <- 0
-Zeer (numero )
LnLcLo
contador e- 0
Jeer numero
leer numero
fin
Obsérvese que los pasos 3 a 6 se ejecutarán mientras los números de entrada sean positivos.
Cuando se lea -15 (después de 4 pasos), la expresión numero > 0 produce un resultado falso y se
transfiere el control a la acción escribir y el valor del contador será 4.
Puede parecer inútil ejecutar el cuelpo del bucle cero veces, ya que no tendrá efecto en ningún valor
o salida. Sin embargo, a veces es Ia acción deseada.
inicio
nr-5
s<-0
mientrasn<=4hacer
:':'J'. ,
fin_mientras
fin
En el ejemplo anterior se puede apreciar que nunca se cumplirá la condición (expresión booleana
n <= 4), por lo cual se ejecuta.rá laacciín fin y no se ejecutará ninguna acción del bucle.
Ejemplo 4.17
El siguiente bucle no se ejecutará si el primer número leído es negativo o cero.
c<*0
J eer ( numero )
fin_mientras
Bucles infinitos
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 bucie que permita ai usuario añadir o borrar reser-
vas. EI programa y el bucle coffen siempre, o al menos hasta que la computadora se apaga. En otras
ocasiones un bucle no se termina nunca porque nunca se cumple la condición.
U-u Luslg q_ue nunca se termina se denomina bucle inJinito o sin Jin. Los bucles sin fin no
intenqionados son péijudióialespara lg¡rogramáción y se deben er;iiar siempr.e.
Consideremos el siguiente bucle que visualiza el interés producido por un capital a las tasas de
interés comprendidas en el rango desde I0 aZO por 100.
7éarl---ir-l 1
-,asa <- 10
mie!.tras Lasa <> 20 hacer
r:,-..'=..s (- tasa * 0.01 * capital //tasa
escribiri interes producido , int.eres)
,r;-;r.i.,"="u
-'
escribir :::.lnuacion' )
Los sucesivos r.alores de la tasa serán 10, 12, 14, 16, 18, 20, de rnodo que al tomar taso elvalor
20 se cietendrá e1 bucle y se escribirá el mensaie .continuación,.
Supongamos que se cambia la línea última del bucle por
El problema es que el r'alor de la tasa salta ahora de 19 a 22 y nunca será igual a 20 (10, 13, 16,
19' 22,...). El bucle seía inñnito, 1a expresión booleana que permite terminaial bucle será:
tasa < 20 o bien tasa >= 20
-
lntroducción a la programación estructurada
-..1-23
Regla prdctica: Las pruebas o tests en las expresiones booleanas es conveniente que sean
mayor o menor que enlugar de pruebas de igualdad o desigualdad.En el caso dela codificación en
un lenguaje de programación, esta regla debe seguirse rígidamente en el caso de comparación de
números reales, ya que como esos valores se almacenan en cantidades aproximadas 1as compara-
ciones de igualdad de valores reales normalmente plantean problemas. Siempre que realice compa-
raciones de números reales, use las relaciones (, (=, > o >=.
Sud+0
escribirt, Existen mas numeros en la lista s/n )
f eer (l'l)
Suma <- Suma+N
escribir( Existen mas nume::os (s/n) )
Leer ( Resp )
fin_mientras
Este método a veces es aceptable y es muy úti1 en ciertas ocasiones, p_e1g sgqle ser teüoso para
llqtas gra¡des; en este caso, es preferible incluir una señal de parada'
El método de conocer en la cabecera del bucle el tamaño o el número de iteraciones ya ha sido
visto en ejemplos anteriores.
Talvez el método más coffecto para terminar un bucle que lee una lista de valores es con vn cen-
tinela.rJnyalor centinela es un valor especial usado para indicar el final de una lista de datos. Por
ejemplo, supongamos que se tienen unas calificaciones de unos tests (cada calificación comprendi-
da entre 0 y 100); un valor centinela en esta lista puede ser -999, ya que nunca será una calificación
válida y cuando aparezca este valor se terminará el bucle. Si la 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
real:zal4suma de todos los números positivos introducidos desde el terminal.
suma <- 0
-7.eer (numero l
mientras nurerc >= C hacer
suma (- su:Íra + nuaero
Ieér ( rrrmero )
fin mientras
124 Fundamentos de programación
Obsérvese que el último número leído de la lista no se añade a la suma si es negativo, ya que se
sale fuera del bucle. Si se desea sumar los números L,2,3,4 y 5 con el bucle antedor, el usuario
debe introducir, por ejemplo:
r 2 3 4 5 ,1
el valor final -1 se lee, pero no se añade a la suma. Nótese también que cuando se usa un valor cen- I
tinela se invierte el orden de las instrucciones de lectura y suma con un valor centinela, éste debe I
leerse al final del bucle, por 1o que se debe poner la instrucción leer al final del mismo. i
Ejemplo 4.18
Considerqr los siguientes algoriÍmos. ¿Qué visualizará y cuántas veces se ejecuta el bucle?
1. :- <- o
mientrasi<6hacer
escribir (t)
i<-i+1
fin mientras
La salida es el valor de 1a variable de control I al pnncipio de cada ejecución del cuerpo del
bucle: 0, 1,2,3,4y 5.Elbucle se ejecuta seis veces.
2.i<-a
mientrasi<6hacer
i<-i+1
escribir li)
fin_mientras
La salida será entonce s 1,2,3, 4, 5 y 6. El cuerpo del bucle se ejecuta también seis veces.
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.
Eiemplo 4.19
Calcular la media de un conjunto de notas de alumnos. Pondremos un valor centinela de -99 que
derecte el -fin del bucle.
iaicio
e
:- + , 'aumero de alumnos
-7.eer :: -= _a primera nota debe ser distinta de 99
mientras ---:-_t <> 99 hacer
_ - -d
-
tl<-t:-
1 aa¡
fin_mientras
r.ei a e ,--' :-
egcribir\ -a ::.ecra :s , :--ejra)
fin
lntroducción a la programación es!..c:--¿:= l?s
Obsérvese que total, ny media se inicializan a cero antes de la instrucciónmia-t.ras
Cuando el bucle termina, la variable totaf contiene la suma de todas las notas y. por
consigulr--
te totaf,/n, siendo n el número de alumnos, será la media de la clase.
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 cuelpo del bucle no se ejecutará; por ello, se necesitan
otros tipos de
estructuras repetitivas.
Pseudocódigo
repetir repeat do until <condicion>
<acciones > < acci ones> < a cci ones>
accrones
repet¡r condiciones
La estructura repetir (repeat ) se ejecuta hasta que se cumpla una condición determinada
que se comprueba al final del bucle.
El bucle repetir-hasta-que se repite mientras el valor de la expresión booleana
de la con-
dición seafalsa,justo la opuesta de la sentencia mientras.
aTgoritmo peperir
var
real: numero
entero: contador
inicio
contador <- 1
repetir
J. eer ( nume ro )
ol
126 Fundamentos de programación
Ejemplo 4.20
Desarrollar el algoritmo necesario para calcular el factorial de un número N que responda a lafór-
mula:
Eiemplo 4.22
Escribir los números I a 100.
aTgoritmo Uno_cien
var
num: entero
inicio
num (_ 1
repetir
escrjbir num) (
num (_ num + 1
hast.a*que num = 101
fin
Ejemplo 4.23
Es muy frecuente tener que realizar y,aliclación
de entrqda de datos en la mayoría
nes. Este ejemplo detecta cualquier de las aplicacio_
entrada c:omprenclicla entre I y 12, rechazqndo
que se ftafq de leer los números las resÍantes, ytt
correspondien.tes a los meses d.el
año,
aLgoritmo Va1idar_mes
var
enterc: mes
inicio
escribir (.' fntroducir numero de mes
repet.ir )
Jeer (mes )
si (mes < 1) o (mes > 12) entonce s
escribir( Valor entre l Y12)
fin_si
hast.a_que (mes >= 1) y (mes <=
12)
fin
En muchas ocasiones se conoce de antemano el número de veces que se deseanejecutar las acciones
de un brlcle. En estos casos en los que el número de iteraciones es fijo, se debe usar la estlxctura
desde o para (f or. en inglésl.
La estructura desde ejecuta las acciones del cuerpo del bucle un número especificado de
vece§ y de modo automático controla el número de iteraciones o pasos a trávés del cuerpo del bqqlq
- Las heramientas de programación de la estructura desde o para se muestran a continuación:
<acclones>
fin desde
b) modelo 3
fijar la
variable índice
al valor inicial
verdadero
índice > valor
incrementa r
variable índice c) modelo 4
Figura 4.13. Estructura cesde (:or): a) pseudocódigo; b) diagrama N-S; c) diagrama de flujo.
lntroducción a la programación ñtútú 1A
inicialización
del contador
proceso o accrones
del bucle
l<- l+ 1
repetir
variable =
m1, m2, m3
mL = contador inicial
m2 = contador final
m3=incrementoopaso
F unda mentos de Prog ra mación
i<-l+1
escribir
'Suma ='.S
Se-S+l
equivale a
algoritmo S.tma
var
entero: T, N, S
inicio
s<-0
desdel(-lhastaNhacer
S<-S+I
fin_desde
escribir( Suma -', S)
fin
La estructura desde comienza con un valor inicial de la variable índice y las acciones especi-
ficadás- se ejecutan a menos que el valor inicial sea mayor que el valor final. La variable índice se
incrementaln uno y si este nuevo valor no excede al final, se eiecutan de nuevo las acciones. Por
consiguiente, las acciones 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 1o contrario.
Dependiendo del tipo de lenguaje, es posible que el incremento sea distinto de uno, positivo o nega-
rir o. -tsí. por ejemplo, BASIC y FORTRAN admiten diferentes valores positivos o negativos del
incrementó. r- Éur.ul sólo admite incrementos cuyo tamaño es la unidad: bien positivos, bien nega-
tivo>.
La r anable índice o de control nomalmente será de tipo entero y es notmal emplear como nom-
bre s las letrai -. .'-. K.
El lomtato ,le la estructura desde varía si se desea un incremento distinto a I, bien positivo,
bien nesativo decremento).(
f in_de s ile
lntroducción a la programación est.ructurada 131
v<-vi
mientras v <= vf hacer
<a cci otes>
vé*v+incremento
fin_mientras
V EVI
mientras v >= vf hacer
<acci ones>
v(-v-decremento
fin_mientras
u) L¡)acao b) ir.icio
r <-n i<-1
mientrasi>0hacer mientrasi<=nhacer
<acci ones> <acci o¡es>
i<-i 7 ie-i+1
fin_mientras f in_mient.ras
fin fin
132 Fundamentos de programación
c) inicio d) inic:-o
ieO i<-1
repetir répetir
<acciones> <acciones>
i<-i+1 i<-i+l
hasta_quei=n hasta_quei>n
fín fin
e) inicio y' inicio
i é n - <-n
repetir repetir
<acciones> <acciones>
i+-i 1 :ri 1
hasta_quei=1 hasta_quei<1
fin fin
bucle todas las lecturas de información si se posee una estructura salir (exit ). Un:i¿::-:-: ::
ello es la estn-rctura siguiente:
repetir
Teert intar-1dc.a'
si fin de lectura entoncés
salir bucle
fin_si
pt acesal intotma'ion
fin_repetir
-Ieer ( hnormales )
-7.eer ( hextraordinarias )
leer (nombre )
fin_mientras
fin
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 primo.
inicio
escribit( Deme numero
-l eer (n )
si_no
escribir( n, ' es divisibLe por , divisor)
fin_si
fín
ínicio
escribit('Deme un numero ')
Íeer(n)
escribirt Su descomposicion en factores primos es : 1 )
divisor <- 2
mientraan>lhacer
si n mod divisor = 0 enLonces
escribir (divisor)
n +- n div divisor
si-no
divisor <- di'¿isor + 1
fin-si
fif¡-mientras
esctibir | )
fin
Ejemplo 4.29
pseud.ocóiligo que lea Lrn número entero positivo y lo escriba invertido.
aTqotitmo -n-.er:j r
var
entero : n / re s to
..r. '. -'
i
eÉcribirl'Deme numero' )
leer (n)
mientrasn>0hacer
resto <- n mod 10
escribir ( resto )
n<-ndiv10
fin-mientras
fin
Ejemplo 4.30
Dado un capital C, que se coloca a un interés anualt averi|uar al cabo de cuántos años se do-
blará.
aTqot i Üno Cal cul ar-capi tal
var
real : cinicial,c,i
entero : años
inicio
escribir('Deme capital ' )
-leer (cinicial )
c e- cinicial
años <- 0
escribit( Deme interes anual en %')
Teer (i)
rePetir
-+..1e*iu100
años (- años + L
hasta-que c >= 2 * cinicial
escribir('Para duplicar el capital se necesitan '' años'' años')
fin
136 Fundamentos de programación
Ejemplo 4.31
Dado que elvalor de e ^ x (e') se puede aproximar por la suma
I + x + x^ 2 /2! + x^ 3 / 3! + ............ + x^n/n!
escribir un algoritmo que tome unvalor de xy calcule e ^ x (e'), mediante el método expuesto y
empleando los términos necesarios hasta que x n / n! sea menor que 0.01.
^
aTgoritmo E_elevado a x
var
entero : x, i
real : e,num,den
inicio
escribir( 'Dame el valor de x ')
leer( x)
e(-1
num (- 1
den <- I
i<-1
repetir
num<-x*num
den <- den * i
i<-i+1
e<-e+num/den
hast.a_que (num / den) < 0.01
escribir( e elevado d', X, 'es', e)
fin
'Í
Ejemplo 4.32
Algoritmo que lea día, mes y año, así como el día de la semana que fue el I de enero de dicho año
y nos sqque por pantalla el día de la semana que corresponde a lafechq que le hemos dado.
Deben considerarse los años bisiestos y depurar mes y día.
., ),
aTgoritmo Dia_semana
var §..
enlero : dd, mm, aa, conrr, otoral, d1
caraccer : dia _lt
logico : correcta, bisiesto
.\ \
inisiq +
. repetir / /comienzo de repetir ,r
bj-siesto <- f also _1' n'
correcta <- verdad \. . ... ''
4, 7, 9, LL:
si dd > 30 entonce ')
correcta <- tarsj '.., *t
fin_si
si bisiesto entonces
Ei dd > 29 entonceE
co-rect. 1 L F-t-a5u
rdf ,'.
I L
- _
fin_si \\
si_no
, si dd > 28 entonces
co'recta <- f a-Lso
fin_si
fin_ei
si_no
correcta e- falso
fin_segun
haeta_que correcla /z fin de repecir
dtotal <- 0
desde contm (- t hast.a mm - t hacer //comienzo desde
Éegun_Éeá contm hacer
L, 3 , 5, 6, 8, LA, L2:
dtocaL <- dlolal r 31
/ / q 11.
dtotal <- dtotal + 30
2:
ei bisiesto entonces
dcotal (- dtoLal t 29
si_rio
dtotal <- dtotal + 28
fin_si
fin_segun
fin_desde
.leerrdia)
segun_sea dia hacer
t:
d-e0
. ,m,:
dl e1
'x' :
d7<-2
,j,:
d1 e3
dL<-4
d1 e5
d:
dl <-6
f in-eeg.un
138 Fundamentos de programación
4:
escribir('Jueves )
5:
escribirl 'Viernes')
6:
escribir( Sabacto )
0;
escribir( Dominqo )
fin_segun
fin
sí condlciolll entonces
sí condicion2 entonces
si :::C:cionl entonces
si ;::c-icion2 entonces
fi-._s i
fio si
Una estructura de selección de ¡z alternativas o de decisión múltiple puede ser construida utili-
i
zando una estructura s con este formato:
sí condicíon-i entonces
<acciones>
lntroducción a la programación estructurada 139
si_no
aí condicion2 entonces
<acciones>
si_no
si condicion3 entonces
<acc iones>
si-no
fin_si
fin_si
fin_si
o bien:
fin_si
Ejemplo 4.33
Diseñar un algoritmo que lea fres números A, B, C y visualice en pantallq el valor clel mtís grande.
Se supone que los tres valores son dferentes.
algoritmo MaYoY
var
real: A, B, C, Mayor
inicio
leer(A, B, C)
eiA>Bentonces
eiA>Centonces
Mayor€-A //A>B,A>C
si-no
Mayor<-C //C>=A>B
fin_si
si_no
siB>Cento[ces
Mayor <- B //B >= A, B ' C
si-no
Mayor(-C //C>=B>=A
fin-si
fin-si
escribit('MaYor:, Mayor)
fin
Ejemplo 4.34
y
El siguiente algoritmo lee fres números diftrentes, A B -.t' C, e imprime los valores miíximo mínimo'
Él proc"dlmiento consistiró en comparaciones sucesi'as de parejas de números.
aTgoritmo Ordenar
var
real : a,b,c
inicío
escribir( 'Deme 3 numeros' )
leer(a, b, c)
si a > b entonces // consíderamos 1os Ccs c:l::ei:os (a' b)
y los ordenamos
si b > c entonces // LotLo e} 30 (c) y -o :o::-l¡ar:o con ef menor (a o b)
escribit\a, b, c)
si-no
si c > a entonces / / sl eL 3o es mayor qte enenor averiguo si va
// delante o detras de1 :--aYor
escribirlc, a, b)
si-no
escribir(a, c, b)
fin-si
fin_ei
si_oo
sia>centonceg
escribir\b, a, c)
ei-no
si3>bentonces
escribirlc, b, a)
si-oo
escribiÍ\t, c, a)
fin-si
fin-si
fin_si
fin
lntroducción a la programación estructurada 141
Ejemplo 4.35
Pseudocódigo que nos permita cctlcular las soluciones de una ecuación de segundo
grado' inclu-
yendo los valores imaginarios.
al-gotiLmo So- u c iones-ecuac -on
var
real : a,b,c,d,xI,x2,r,t
inicio
esctibir( Deme los coeficientes )
l.eer(a, b, c)
sia=0entonces
escribit( No es ecuacion de seg:ndo grado )
si-no
d<-b*b 4*a*c
sid=0entonces
x1 <--b/12"a)
x2 <- xL
esctibir(xL,x2)
si-no
sid>0entonces
x"l <- ( b + raiz2(d) ) / (2 * a)
x2 <- (-b - raí22 (d) ) / 12 * a)
esctibirlxL, x2)
si-no
r<-(b)/(2*a)
i <- Íaí22 (abs (d) ) / (2 * a)
escribirlr,*,t,i)
esctibir(,t, - , i,'i')
fin-si
fin_si
fin_si
fin
Elemplo 4.36
Algoritmo al qwe le demos la hora HH, MM, SS y nos calcule la hora dentro de wt segundo' I'ee-
remos las horas minutos y segundos como números enteros'
aL gor i tmo Hora-s eglundo-s i gui ente
var
entero : hh,mm,ss
inicio
escribir( Deme hh,mm,ss )
a) b) c) d)
Figura 4.14. Bucles anidados: a) y b), correctos; c) y d), incorrectos.
Ejemplo 4.37
Se conoce la población de cada una de las veinticinco
ciudades mds grandes de las ocho provincias
de Andalucía y se desea identificar y visualizar la población
de la ciudqd mds grande de cacla pro-
yincia.
aTqoriTmo CIUDADMAYOR
var
entero: r / /conlador de provincias
urruu!vr
^-l^-^.
_'i
l / /conLador de ciudades
entero: MAYOR / /mayor poblacion
. entero: CIUDAD //poblacion de una ciudad
inicio
ie1
mientrasi<=Shacer
MAYOR <- O
j <-1
mientras j <= 25 hacer
-7.eer(CIUDAD)
Si > MAYOR ENTONCES
CIUDAD
MAYORE CIUDAD
j <- j + 1
fin_ei
fin_mientras
escribir( 'La mayor poblacion tiene', MAYOR)
i<-i+1
fin_mientras
fin
Ejemplo 4.38
Calcular el factorial de n números leídos del terminal.
El problema consistirá enrealizaÍ una estructura repetitiva de n iteraciones del algoritmo del pro-
blema ya conocido del cálculo del factorial de un entero.
aTgoritmo Factorial2
var
entero: i, NUMERO, n
real: FACTORIAL
inicio
/ / LecL.jÍa de 1a cantidad de numeros
leer (n)
desde i <- I hasta n tracer
leer(NWERO)
FACTORTAL <_ 1
desde j e- I hasta NUMERO hacer
FACTORIAL <_ FACTORIAL * J
fin_desde
eséribir( 'Ef factorial del numero', NUMERO, es ,FACTORIAL)
fin_desde
fin
Ejemplo 4.39
F
I
t Imprimir todos los números primos entre 2 ), 100 inclusive.
aTgoritno Primos
var entero : i, divisor
logico : primo
144 Fundamentos de programación
inicio
desde i (- 2 hasta 100 hacer
p'' O 4 Ve' dC
divísor <- 2
mientras (divisor <= ratz2 (i) ) y cririo hacer
si i mod drvrsor = 0 entonces
primc <- falso
si no
divisor <- divisor + 1
fin_si
fin_mientras
si primo entonces
escribir( r, ' )
fin_si
fin_desde
fin
El flujo de control de un algoritmo es siempre secuencial. excepto cuando 1as estructuras de control
estudiadas anteriormente realizan transferencias de control no secueflciales.
La programación estructurada permite realizar programas fáciles y legibles utilizando 1as tres
estlxcturas ya conocidas: secuenciales, selectivas y repefitivas. Sin embargo, en ocasiones es nece-
sario realizar bifurcaciones incondicionales; para ello se recure a la instrucción ir_a (goto).
Esta instrucción siempre ha sido problemática y prestigiosos informáticos, como Dijkstra, han
tachado la instrucción goto como nefasta y perjudicial para los programadores y recomiendan no
utilizarla en sus algoritmos y programas. Por ello, lenguajes como Pascal huyen de esta instrucción
y prácticamente no 1a utilizan nunca.
Aunque la instrucción ir_a (goto) la tienen todos 1os 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 Io mismo y no
incluir ninguna instrucción ir*a. Un programa que utiliza muchas instrucciones ir_a es más difí
cil de leer que un programa bien escrito que utiliza pocas o ninguna instrucción ir_a. En muy pocas
situaciones las instrucciones ir_a son útiles; talyez, las únicas razonables son diferentes tipos
de situaciones de salida de bucles. Cuando se encuentra un effor u otra condición de terminación,
una instrucción ir-a puede ser utilizada para saltar directamente al final de un bucle, subprograma
o un procedimiento completo.
Las bifurcaciones o saltos prodlcidos por una instrucción ir_a deben realizarse a instrucciones
que estén numeradas o posean una etiqueta que sirva de punto de referencia para el salto.
Por ejemplo. un programa puede ser diseñado para terminar con una detección de un eror.
aTgoritfuo
inicio
var
entero:I,N,1j:
real; FACTORIAL
inicio
// N >= 0
Jee.r (N)
FACTORIAL .<- 1
desde I <- t hast.a N hacer
FACTORTAL <- FACTORIAL * I
fin_desde
escribir('EI factoria] de,, N, es, FACTORIAL)
fin
4.2. Imprimir las treinta primeras potencias de 4, es decir,4 elevado a l, 4 elevado a2,
etc.
aTgoritmo potencias4
var
entero: n
inicio
desde n <- t hasta 30 hacer
escribir(A ^ n)
fin_deede
fin
4'3. Calcular la suma de los n primeros números enteros utilizando la estructura desde.
,S=1+2+3+...+n
El p s eudo có digo correspondiente es :
aTgoritmo SumaNenteros
var
entero: i, n
real: suma
inicio
-Zeer(n)
suma t- 0
desdei(-lhastanhacer
SUIId é suro - i
fin_desde
//escribir eI resultado de suma
escrjbjr( suma)
fin
146 Fundamentos de Programación
4.4.Diseñarelalgoritmoparaimprimirlasumadelosnúmerosimparesmenoresoigualesquen.
5'1' "'' n' un pseudocódigo será:
Los números impares son 1' 3'
i tmo SumaimParesmenore s
aLgor
var
entero: i, n
real: s
inicio
s<-0
-1eer ) (n
2 hacer
desde i <- t hasta n incremento
SeS+i
fin-desée
escribir lS)
t r-n
y su resto'
algoritmo que calcule su cociente
4.5. Dados dos números enteros, rcalizarel
SeanlosnúmerosMyN.ElmétodoparaobtenerelcocienteyelrestoesoorrestassuCeSiVaS.elmétododivisor' que
obtener un resul'tado menof que el
restaruu""rtruir"rü;ñi;;.T"i áiri¿"n¿o hasta
sería el cociente:
será el resto d. l^ d;i;;;; e1 número de restas efectuadas será
Comollesmenorqueeldivisor,13,seterminaránlasrestasSucesivasyentoncesllseráelresto,y3
(número de restas) el cociente'
Por consiguiente, el algoritmo será
el siguiente:
I
Leer(M)
esctibit('Deme divisor ) i. ..,
Leer \ i. l
r:s--o <- M
:::la:-te <- 0 1
4.6.Rea]izarelalgoritmoparaobtenerlasumadelosnúmerospareshasta1000inclusive.
Método l:
S-2+4+6+8+ +1000
*+t|t
aTgoritmo Sumapares
var
real: NUMERO, SUMA t\
inicio ^\
SUMA +- 2
NWERO <- 4
,,
U, b,
mientras NUMERO <= 1000 hacer
SJMA <- SUMA - NUMERO
ry,.
NUMERO <- NUMERO + 2 {^" n "t,
fin_mientras 5' i
fin
\f
Método 2:
4.7. Buscar y escribir la primera vocal teída del teclado. (Se supone que se leen, uno a uno, caracteres desde
el teclado.)
aTgoritmo Buscar*vocal
var
caracter: p
inicio
repetir
l.eer (p )
4'9' Se desea leer de una consola a una serie de números hasta obtener
un número inferior a 1o0 .
aLgoritmo Menor_100
var
real: numero
inicio
repetir
escribir( Teclear un numero,)
Ieer (numero )
hasta_que numero < 100
escribir(,E1 numero es,, numero)
fin
4.10. Escribir un algoritmo que permita escribir en una pantalra la frase ,
¿Desea continuar? S/N' hasta que la
respuestasea s'o,N,.
af grori tmo SN
var
caracter: respuesta
inicio
repetir
escribir (, Desea continuar S/N )
-Zeer ( respues ta )
hasta_que (respuesta - S, ) o (respuesta = N')
fin
4'll' Leer sucesivamente números del teclado, hasta que aparezcaun número comprendido entre 1 y
5.
aTgoritfio Numerol 5
var
entero: numero
inicio
repetir
escribir(,Numero comprendido entre I y 5 )
eer ( numero )
J
hasta_que(numero >= 1) y (numero <= 5)
escribir( Numero encontrado , numero)
fin
4.12. calcular el factorial de un número n con métodos diferentes
al Ejercicio 4.1.
n.t= nX(n-l)x(n-2) x...x3x.2x1 ,'-)
es decir:
j.'=5x4x3x2xl =120
1; =1x3x2xl =24
1' = I v ) w I -6
2.'=2xl
1t _ I _1
-f
(n+l)! =(n+1)xn.r
lntroducción a Ia programación esfructurada l49
FACTORTAL = FACTORIAL * f
inicializandolosvaloresdeFACT0RrALeralyrealizandou¡lbucteenelquelseincrementeenla
cada iteración, es decir, .: !:
ATgoritmo ldeFactorialden: ü I
,\'r,
EACTORIAL <- 1 i
'e1
repet.ir
FACTORIAL <_ FACTORIAL * i
i+-i+1
hasta_quei=n+1
-
ATgoritmo 2 de Factorial de n:
FACTORIAL <- 1
ie0
repetir
FACTORIAL <- FACTORTAL * (i + 1)
aef+1
hasta_que i = n
ATgoritmo 3 de Factorial de n:
FACTORIAL 3 1
1<-0 a
ti
repetir i
FACTORIAL e FACTORIAL * (i + 1) )'
ie-i+lr:
hasta_que i > n - '
'
,..\
ATgoritmo 4defactoialden: /
rb\
FACTOPIAL<_L Y'+
i <- 1
desde i (- t hasta n - t hacer
FACTORIAL <- FACTORIAL * (i +
"''
1)
fin_degde
un algoritmo completo con lectura del número n por teclado podría ser el siguiente:
aTgoritmo -acror j a -.
var -l
entero: i, n L f\i.
real: f lr-'.
inicio , -*9f 5
f<-t
i<-1 4 5
leer(n) //n > A
repetir
f<-f*i
re1+1
hasta_quei=n+1
escribir( 'Factorial de' , n, es' , f)
fin
150 Fundamentos de programación
Para resolver este problema, necesitaremos un contador que cuente de I a 100, para contabilizar 1os 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 vSlor máximg-, por lo cual se realizará una primera asignación del número 1 á la vafiáble
mdximo.
-7.eer (numero )
n=1
maximo = numero
r<-1
maximo <- numero
repetir
n(-n+1
feer numero
( )
Otras soluciones
algoritmo Otronoximo
var
::-.-::o: n, nLmóro, ¿ximo
iaicio
-1.eer ::nero )
7eeÍ --:::.=aa)
si :-:---=:: > ::aximo entonces
::axr:--a <- nJmero
fin-si
hasta-que :- .
n - 5 resultados
25
25
resultados . 4
4
4
4
4
n=0 resultados 0
0
0
0
0
fin
desdei(-lhasta3hacer
desdle j (- t hast.a 10 hacer
escribirli, por, j, ,=,, i*j)
fin_desde
fin_desde
ia I
-) =3x1=3
-3x2=6
-1 i *i =3x3=9
L)
=3x4=12
j=10 i " j = 3 x 10 = 30
lntroducción a la programación estructurada l53
Eiemplo 3. La codificación completa para obtener la popular tabla & mulüplicar de los escolares sería
la siguiente:
4.15. Se dispone de una lista de N números. Se desea calcular el valor del número mayor.
algoritmo
var
enLero: I
real: NUM, MAX
entero: N
inicio
Jeer(N) //N>0
l.eer(NUM)
MAX E NU¡4
desde I (- 2 hasta 100 hacer
-Zeer(NLIM)
si NUM > MAX entonces
MAX <- NUM
fin_si
fin*deede
fin
4.16. Determinar simultáneamente los valores máximo y mínimo de una lista de 100 números.
Pseudocódigo
aTgoritmo Error
var
=:-_a:a:sw
::: _ :...
i¡icio
:.., é-:
mieatrasS,.;=Q!¡¿sq¡
Teer :::: de entrada, , N)
si :: r =: - l. entonces
escribir --a_o no vatído, )
escribir :l_aai:e nuevamente
si-no )
fin_si
fin-mientras
fin
lntroducción a la programación e§tn¡cf.t-a¿ 155
Análisis
1!= 1
2t=2* l =2* ll
3l=3*2*l=3'(21
:.r=0.3*2*t=4*31.
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 1, un sistema de cálculo puede ser asignar ala variable factorial el
valor 1. Se necesita otra variable I que tome los valores sucesivos de 1 a Npara poder ir efectuando los
productos sucesivos.
Dado que en los 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:
Pseudocódigo
fin
156 Fundamentos de programación
aTgoritmo FACTORIAL
var
entero: K, N
real: factorial
inicio
l.eer (N)
sin<0entonces
escribir('El numero sera positivo, )
si_no
factorial e- 1
siN>lentonces
desdeK<-2hastaNhacer
factorial (- factorial * K
fin_desde
fin si
escribir( 'Factorial de , N, = , factorial)
fin_si
fin
4.20. Determinar el precio det billete de ida y vuelta en ferrocarril, conociendo la distancia
a recorrer y
sabiendo que si el número de días de estancia es superior a7 y ladistancia superior
a 800 km el billete
tiene una reducción del 30 por 100. El precio por km es de 2.5 pesetas.
Análisis
Pseudocódigo
aTgorixmo 3tllete
var
=ez,: ), ?-
iaicio
Teerta¡
PTe l: * -
Éi(D > 8i:ly a > ,;entonces
PT <- Pt :_ * 3: _10
fin_si
escribir( precic Cer c_,1ete,, pT)
fin
lntroducción a la yqramación estrucfurada 157
4.2t. Se tienen 1as calificaciones de los alumnos de un curso de informática corresponliente a la-r asisnaturas
C++/C, Pascal, FORTRAN. Diseñar un algoritmo que calcule Ia media de c*1: ¿l¡rmtu¡"
Andlisis
Asignaturas: C++lC
Pascal
FORTRAN
Se desconoce el número de alumnos N de la clase; por consiguiente, se utilizará una marca final del
archivo ALUMNOS. La marca final es ' 1**' y se asignará a la variable nombre.
Pseudocódigo
aTgoritmo Medra
var
cadena: nombre
real: media
real: CCMAS, Pascal, FORTRAN
inicio
//enlrada datos de alumnos
-7.eer (nombre )
fin miéntras
n
empleados de una lábrica trabajan en dos tumos: diurno y noctumo. Se desea calcular el jornal dia-
de acuerdo con los siguientes puntos:
Antilisis
Pseudocódigo
algoritmo Jornal
var
cadena: Dia, Turno
real: HT, .fornal
inicio
J.eer(HT, Dia, Turno)
si Dia <> ,Domingo, entonces
si Turno = ,diurno entonces
Jornal <- 500 * HT
si_no
Jornal <- 800 * HT
fin_si
si_no
si Turno = ,diurno, entonces
Jornal e- 700 * HT
si_no
.Tornale1100*HT
fin_si
fin_si
escri.bir (.Torna1 )
fin
4.23. Coilstruir un algoritmo que escriba los nombres de los días de la semana, en
función de la entrada corres-
pofdiente a la variable nt¡.
Andlisis
1. LUNES
2. MARTES
3. MIERCOLES
4. .JUEVES
5- VIERNES
6. SABADO
-7.
DOMINGO
Pseudocffigo
Métoda l:
a 7 gori tmo Dias_sema¡ra1
var
Dia: entero
lntroducción a ta prqnmrcitiosqúr* 159
inicio
Leer(D ia)
siDia=1éntonces
escribir('LUNES )
si-no
siDia=2entor¡ces
escribir( MARTES' )
si_no
siDia=3entonces
EéCTibiT( MIERCOLES, )
si-no
siDia=4entonces
escribir('JUEVES )
si-no
siDia=5entonces
esctibir( VIEFNES' )
si-no
siDia-6entonces
escribit('SABADO )
si-no
siDia=Tentonces
escribir('DOMINGO )
si-no
eectibit('error )
Método 2: ,ll
E'\
al-gor itmo Dias-semana2
var
Dia: entero
inicio
Leer(Dia)
segun-sea Dia hacer.
l: escribir( 'LllNES')
2: esctíbir( MARTES )
3: escribit('MIERCOLES )
4: escribir('JUEVES )
5: escribir ( VItrRNES' )
7 : escribir ( DOMINGO' )
4.24. Realizar un algoritmo que escriba los N primeros números de la serie de Fibonacci.
NorA: La serie de Fibonacci es 1, 1, 2,3, 4,8,13, ..., y se genera de acuerdo a la 1ey siguiente:
Fibonacci(l ) = I
Fibonacci(2) = I
Fibonacci(3) = 2 = Fibonacci(2) + Fibonacci( I )
Fibonacci(4) = 3 = Fibonacci(2) + Fibonacci(3)
EJERCICIOS
4.1. Determinar la media de una lista indefinida de números positivos, teminados con un número negativo.
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;
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 1os números primos eífie 2 y 1.000 inclusive.
4.6. Se desea leer las calificaciones de una clase de informática y contar el número total de aprobados
(5 o mayor que 5).
$I. Leer las notas de una clase de Informática y deducir todas aquellas que sean NOTABLES (>= 7 y < 9) .
4.& Leer 100 números. Determinar la media de los números positivos y la media de los números negativos.
'í.y;Vncomercio dispone de dos tipos de artículos en tichas correspondientes a diversas sucursales
con los
'¿ siguientes campos:
La última ficha del archivo de aftículos tiene un código de artículo, una letra x. Se pide:
{.10. Lna estación climática proporciona un par de temperaturas diarias (máxima, mínima) (no es posible que
alguna o ambas temperaturas sea 9 grados). La pareja fin de temperaturas es 0,0. Se pide deierminai el
número de días- cuvas temperaturas se han proporcionado, las médias máxima y mínima, el número de
+4.11. Calcular:
-l"n
E(x)= l-.r- "
l: n'.
4.16. Averiguar si dados dos números leídos de1 teclado. uno es divisor de otro.
4.17. Se introduce la hora del día en horas, minutos 1' se-eundos. Se desea escribir la hora correspondiente al
siguiente segundo.
r4.1& Se desea conocer una serie de datos de una empresa con 50 empleados: a) ¿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
I 234 15
,rjÉ ++
11' 1 234 l5
2*2 468 30
-l* j 69t2 45
4*4 81216 60
is* 15 30 4s 60 225
REFERENCIAS B¡BLIOGRAFICAS
(1) DIJKSTRA, E.W.: «Goto Statement Considered Harmful», Communications of the ACM, vol. 11.
núm. 3, marzo 1968, págs.147-148,538,541.
(.2) KNUTH, D.E.: «Structured Programming with goto Statemenfs>>, Computing Sw-veys, vol. 6, núm. -1.
diciembre 197 4, págs. 261-298.
30 Fundamentos de programación
Ejemplo 1.14
¿Cuáles son los valores de A, B y C después de la ejecución de las siguientes operaciones?
Ae3
i;Á*:*" cr?
cec+Bf\-r-t"1.
e<-c-h Ce-(/í7''l
Q!)
Crs)
A,-B*c g* f,a{-*?tL) \
En las dos primeras urfr,n"{:í*rk#r"r,k"l'fÍ )
Ce A+2 * B laexpresiónA+2+Btomaráelvalor3+2*4=3 +8=Il
ce11
La siguiente acción
- C<-C+B
produciráunvalordell + 4 = Is
ce15
EnlaacciónB <- c - AseobtieneparaBelvalor15 - 3 = l2yporúltimo:
A(-B*C
Ejemplo 1.15
¿Cuil es el valor de x después de las siguientes operaciones?
x e- 2 ../--"*.\-
x (- cuad.rado(x + x) X 1- ynL , lÁ
x <- Éaizz(x ' raíz2ix; - :r l¿-.,,1¿ ¡¡{tra¡rzfil)" j )
I-m resultados de cada expresión son: y A- 5
x <- 2 x bma el valor 2
x <-- ádrado (2 + 2) x toma el valor 4 al cuadrado; es decir 16
x<-2
x<-16
x-l