Sunteți pe pagina 1din 161

CAPITU LO

ALGORITMOS Y PROGRAMAS

CONTENIDO

1.1. Los sistemas de procesamiento de la información.


1.2. Concepto de algoritmo.
1.3. Los lenguajes de programación.
1.4. Datos, tipos de datos y operaciones primitivas.
1.5. Constantes y variables.
1.6. Expresiones.
1.7. Funciones internas.
1.8. La operación de asignación.
1.9. Entrada y salida de información.
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS,
EJERCICIOS.

La principal razón para.que.ras personas aprendan


renguajes
y técnicas de
programación es utirizar la computadora
como una herramienta para
resolver problemas. La resorución de un probrema
exige ar ,n"náa ro,
s¡guientes pasos:
1. Definición o análisis del problema.
2. Diseño del algoritmo.
3. Transformación del algoritmo en un programa.
4. Ejecución y validación del programa.
Uno de los objetivos fundamentales de este libro
es el aprendizaje y
diseño de algoritmos. Este capíturo introduce ar
rector
atgoritm.o v de programa, así como ras herramie;t* "n "r
ion.uplo o.
logar» al usuario
q;; ólri-,iü,i,,c,u
,v uv¡r
con ro máquina: tos
ra u¡(rqurrra: /os tenguaJes
tenguijes de programación.
proqramación.
un algoritmo es un método para re-soríer un problema.
orobrema. Aunq::
Art
popularización dertérmino ha ilegado
con er adven¡.iá"tá J" rá';r; ^:..
mática. algoritmo proviene de Mohammed ar-Khowárizmi,
persa que vivió durante er sigro rx y arcanzó gran ma:e- z: _ -
reputación por- e :-_--
= ¡ nd ame ntos de p rog ra m ación

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

1.1. LOS SISTEMAS DE PROCESAMIENTO DE LA INFORMACIÓN


Una definición antigua de computodora es'. «una máquin¡ o j:.lrrio eiectrónico capaz de ejecutar
no describe
operaciones repetitivas muy complejas a altas velocidades.'. -\htrr'l bien. esta definición
lás modemas cbmputadorar. pttri són más que una máquiit: ¿e eje.-uta¡ operaciones aritméticas. De
hecho, lostérminos procesaclorcletlatost,i¡tt",rrr,t(lePi'.)t.(súti'"ietrÍoltratttttúento)delainforma-
ción seutilizan con frecuencia en lugar de computafls¡¿ , ¡r7i1gr:.;,í¿r¡'. en 1a jerga informática usual
en España).
En el uso diario, datos e información son esencialme¡r,e s-lónrnos. Sin embargo, los informá-
ticos suelen hacer una diferer-rcia: tlatos se refiere a la repie.:n:.¡i.in de algún hecho, concepto o
eniidad real (los datos pueden tomar cliferentes formas: por eiemplo. palabras escritas o habladas,
números l' dibuios); inJbrmación implica datos procesado' 1 Lrrgu.lrzildos'
yn sí;¡gmg 9n general se define como qgnjunto de compcn.ntes .(rnectados e interactivos, que
rienen un propósito y una unidad total. Sisi'éma de procesámiento de información es U! sistema
- transibrma datos brutos en infbrmación orgotti-ctdrz.
que -ii3r;1¡.,;i¡i o¡ I ¡lrl1.
La Fi-slira 1 .1 muestra los tres componentes de un sistem: ce prtrceso de la información'. entra'
.j.;. r,¡1¡¿7a r- ¡trocesatlor.Lltqgery4pL que puede ser bastanl- ccn-rplicado. se representa por una
.,nple caja ¡: puede aceptar datos liamados entrctcla,l'
esta errrtr;J3 se translbrrna entonces para pro-
J.ri.'ri una intormación denominada salida o resultcttlos.
B:t¡'los este esquema, muchos dispositilos u organi5ill\-rs pueden ser considerados sistelnas
'n
i- ::-u¡.."t-liento de lalnformación. Un temostato qr.le cr-,ntrol¡ 1a temperatura cle un edificio es un
:,>=::i J3 :r\-r.e \amiento de la información. La entrada es 1a temperatura media y la salida es una
:e i -' ;-*e ;¡iti..la 1a caldera del aire acondicionado. E1 cor¡z.in de un anrmal o un ser humano
es un
sr!:iil: ;,:::l1eic de procesamiento de Ia información.
E- --¡r--r:t:¡ i¡
in-.trucciones que especifican 1a secuencia de operaciones a realizar. en orden'
para res\r!.,:.: ,:: )-riima específico o clase de problentas. se denomina aigoritmo. En otras palabras,
lln algoritmo 3: ,/,,-i :ti¡tnttla para la resoluciótt cle wt problertto.

Entrada=datoS Procesador Sa I i d a=inf ormación


: ---) -----,
Figura 1.1, Sistema de proceso de información.
\

Pararealtzar un proceso se le debe suministrar al procesador un algoritmo adecuait¡. F:: --r:.-


plo, al cocinero debe dársele una receta, al pianista la partitura y así sucesivamente. consi,ie¡.n;- :.
cocinero y al pianista como procesadores.
Cuando el procesador es una computadora, el algoritmo ha de expresarse de una forma que reci-
be el nombre de programa. Un programa se escribe en un lenguaje de programación y a ]¡14c1i1_id3d
de expresar un algoritmo en forma de programa se le denomina programación. Cada paso en el algo-
ritmo está expresado por medio de una instrucción en el programa. Por consiguiente, un programa
consta de una secuencia de instrucciones, cada una de las cuales especifica las operaciones que debe
r e alizar la c omputadora.
Existen dos conceptos importantes a considerar en los sistemas de procesamiento de la infor-
mación: hardware y software. Hardware es el conjunto de componentes físicos de una computadora
(Figura 7.2,¡
-equipo
Jísico- y software es el conjunto de programas que controlan el funciona-
miento de una computadora lógico-.
-equipo
E1 hardware de una computadora se compone de:

l. La Unidatl Central de Proceso, UCP (Central Processing Unit, CPU). La UCP es el conjunto
de circuitos 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

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


7 Fu ndamentos de prog ra mación --

y periféricos localizados en diferentes partes de un mismo edificio o diferentes edificios e incluso 1.2.
dilerentes ciudades o países.
Las

1.2. CONCEPTO DE ALGOR¡TMO I

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.

Diseño Programa Eie


Problema ----------> del ----------> de
IJn
algoritmo computadora
clit
Figura 1.3. Resolución de un problema. ell
Lo
Los pasos para la resolución de un problema son:

'' 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

1.2.1. Características de los algoritmos


Las características fundamentales que debe cumplir todo algoritmo
son:
a Un algoritmo debe ser preciso e indicar el orden de, realización de cada paso.
o Un algoritmo debe arjiniao. Si se sigue un algoritmo dos veces,
"sia, se debe obtener el
mismo resultado cada vez.
o Un algoritmo debe ser finito. Si se sigue un algoritmo. se debe terminar en
algún momento; o
sea. debe tener un número finito de pasos.
La definición de un algoritmo debe describir tres partes: Entrqcla, proceso y Salida. En el
algoritmo de recetá de cociña citado anteriormente se tendrá:
Entrada: ingredientes y utensilios empleados.
Proceso: elaboráción de la receta en la cocina.
Salida: terminación del plato (por ejemplo, cordero).
Ejemplo 1.1
(Jn cliente ejecufa un pediclo a unaftibrica.
Laflíbrica examina en su banco de ¿atos laficlta ctel
cliente, si el cliente es solvente entonces la empresa acepfa el pedido; en
caso confrario, rechazará
, el pedido. Redactar el algoritmo correspondiente.

, Los pasos del algoritmo son:


1 . Inicio.
2. Leer el pedido.
3. Examinar la ficha del cliente.
4. Si el cliente es solvent_e, aceptar pedido; .l caso contrarro, rechazar pedido.
5. Fin.

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.

- .' E:!u condición puede ser sustituida por


página 19.
x = n diw 2 (donde div es el operador dir.i-iión eni¡:

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

o comprender las instrucciones de cada paso'


. realizar las operaciones coffespondientes.

que se
CuanrJo el procesador es una computadora, el algoritmo se ha de expresar en un formato
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 , :

1.3.1. lnstrucciones a la computadora


Los diferentes pasos (acciones) de un algoritmo se expresan en los programas conlo il¡sr¡:¿ . ¡ . ,:.
sentencies o proposiciones (normalmente el término instrucción se suele referir a los leng;r-;.
máquina y bajo nivel, reservando la sentencia o proposición para los lenguajes de alto nir.el . P :
consiguiente, un programa consta de una secuencia de instrucciones, cada una de las cuales espe..-
fica ciertas operaciones que debe ejecutar la computadora.
La elaboración de un programa requerirá conocer eljuego o repeftorio de instrucciones del 1en-
guaje. Aunque en el Capítulo 3 se analizarán con más detalle las instrucciones, adelantaremos los
tipos fundamentales de instrucciones que una computadora es capaz de manipular y ejecutar. Las ins-
truccionq¡ !-A_t:lsJ-c,qmu-nes-.a.casi todoslos le-nguaje5.(-- programación se pueden condensar en
cuatro gfupos:

o Ins.tt:uc.cioues de eülra.da/,tslidaJnstrucciones de trans.ferencia de información y datos entre


dispositivos periféricos (tec1ado, impresora, unidad de disco, etc.) y la memoria central.
o Instrucciones aritméticq-lósicqs.Instmcciones-que ejecutan operaciones aritméticas (suma,
iesta;rnültlpticacióñ. división. potenciación), lógicas (operaciones and, or, not, etc.).
o Instrucciones selecf ivas. Instrucciones que permiien la selección de lareas alternativas en fun-
ción de los resultados de diferent"r condicionales.
"^pi.riónes
c Instrucciones repetitivas. Instrucciones que permiten la repetición de secuencias de instruc-
ciones un número determinado o indeterminado de veces.

1.3.2. Lenguajes máquina


lep"ggSig§.m"á-$d4?*sgg-49uellos,qu-e-.sstán qs-qn-los en lenguajes directamente inteligibles por la
-!.o--s
máquina (computadora), ya que sus instrucciones son cadenas binctrias (cadenas o series de carac-
teres que especifican una operación, y.las.posiciones (dirección) de memoria
-dígito-s--O.y.1)
implicadas en.la operación se denomi-nan instrucciones de máquina o código mtíquina. El cédi§o
máquina es el conocido código binario.
-f--as-iqstr!99r_9!es-en le¡ggaje má_q¡i_na{,gpCtd§.fr"dd*bpt{lyax de la c_ompur_ad-ora y, por tanro,
diferirán de una computadora a otrá. El lenguaje máquina de un PC (computadora personal) será
diferente de un sistema HP 9000 (HP, Hewlett Packard) o un sistema 6000 de IBM.
I-a;venrltiqs dg programay en ]epgu4je máquina son la posibilidad de cargar (rransferir un

01 00 001 0 0000 01 00
Posiciones 01 01 01 00 0000 01 01
de memoria 0102 001 1 0000 01 10

lnstrucciones binarias (código máquina)

Figura 1,4. lnstrucciones en lenguaje máquina.


r T
Fundamentos de programacion

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:

o dificultad y lentitud en 1a codificación.


. poca fiabilidad,
o dificultad grande de verificar y poner a punto los programas.
o los programas só1o son ejecutables en el mismo procesador (VCP, Unidad Central de Pro-
ceso).

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.

1.3.3. Lenguaies de baio nivel


los-Ienguajes de bajo ni+et son más fáciles de utilizar que 1os lenguajes máquina, pero, al igual que
elios, dépenden de 1a máquina en parricular. El len-uuaje de bajo nivel por e¡c9!919Q_e;91*e11am
g!¿1,1or (issembly language). Las instrucciones en lenguaje ensamblador son instruccio-nes qglocidgs

comonematécnko§ (mneruonics'). Po+ejemplo, nemotécnicos típicos de operaciones aritméticas son:


en ingles, ADD, SUB, DIV: e_tc:; en español, SUM, F-'S. l---. etc.
Una instrucción típica de suma sería:
N,P

Esta instrucción podría significar <<sumar el número contettido en la posición de memorio M al


,"ir,'¿¡p alntacenado en la posición de memoria N t' situar el resultctclc¡ en la posición de memoria
P Er identemente. es mucho más sencillo recordar ia instrucción anterior con un nemotécnico qtte
. * :¿:ir alente en código máquina:

' , --
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,

Los inconvenientgs más notables de los lenguajes ensambiadLrres son:


o . D-ependencia total de la máquina, 1o que impide la transp..nabilidad de los programas (posi-
bilidad de ejecutar un programa en diferentes máquina-r r. Ei lenruaje ensamblador del PC es
distinto del lenguaje ensamblador del Apple Macrnto:h.
o La formación de los programadores es más compleja que i: c¡,rr;.pondiente a 1os proglema-
- dores de alto nivel, ya que exige no sólo las técnica-s ri.e ,¡ü=.r-r,,:ión. sjlo tambié-ñl_sono-
cimiento del interior de la máquina.

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.

1.3.4. Lenguajes de alto nivel


Los lenguajes de alto nivel son los más utilizados por 1os pro_:r::nadores. Están diseñados para que
las personas-escriban y entiendan los programas de un moi¡ r.rucho mris t=a-ci1-qué-IliTáñ3ü¡ies
máquina y ensambladores. Otra razón es que un prosram3 e.--:--Io en un lenguaje de alto nivel es
independiente de la máquina; esto es, las instrucciones del prrr_irama de la computadora no depggden
del diseño del hardware o de una computadora en particul:r. En --onsecuencia. los programas escri-
tos en lenguajes de alto nivel son portables o transporrLibir--r. lo que signilica la posibilidad de poder
ser ejecutados con poca o ninguna modificación en dilerentes tipos de computadoras; al contrario
que los programas en lenguaje máquina o ensamblador. que sóio se pueden ejecutar en un determi-
nado tipo de computadora.
Los lenguajes de alto nivel presentan las siguienres;+,.r:.r;-las:
o El tiempo de formación de los programadores es relativamente_ c_qrto e-omparado con otros len-
guajes.
o La escritura de programas se basa en reglas sintácucas similares a los leuguajas hum,a.nos.
Nombres de las instrucciones, tales como :.:-r--. r -:1 ?RINT, O.pEN,.etc.
¡ Las modificaciones y puestas a punto de los programas son más fáciles.
o Reducción del coste de los programas.
. Transportabilidad.

Los inconvenientes se concretan en:


o' Incremento del tiempo de puesta a punto. al necesita¡.se {ifelenteg t¡aducciones..del,programa
iirénte para con§eguir éfpiograrna féfi"iili,o.
o No se aprovechan 1os recursos intemos de 1a m{quina* qu-e -s-e axplotan mtlcho mejor en len-
guajes máquina y ensambladores.
. Aumento de la ocupación de memoria.
o El tiempo de ejecución de los programas es mucho,mayor.
10 Fu ndame ntos de progra macion

A1 igual que sucede con los ienguajes ensambladores. lo-s prosramas fuente tienen que ser 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

C C++ COBOL FORTRAN BASIC Pascal \¡lsual B,\SIC

están muy extendidos:

Clipper Ada Modula-2 Prolog LISP Smalltal}r

y comienzan a difundirse:

v11yt O!_ject Delphi Miranda Eiffel

aunque los dos primeros no dejan de ser entomos de programación orientados a objetos con sopor-
te en los lenguajes Clipper y Turbo Pascal.

1.3.5. Traductores de lenguaje


Los traduq!-9,res.de leruguctje son programas que traducen a su \ ez los programas fuente escritos en
lenguájes de altonivel a código rnáquina.
Los traductores se dividen en:

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

Figura 1.6. lntérprete.

h'
Algoritmos y c.rc-.-.: 11

Programa fuente

Programa objeto

Figura 1.7. La compilación de programas.

1.3.5.2. Compiladores
U-n,soflpiladaL§*tJ;E-l],rograma-quclmduce -l,os4rogramas-fuente-eseeitss-e+,lenguqjes-de-alto
nivel ;-alenguaje-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.

1.3.6. La compilac¡ón y sus fases


La c-qmpilaiión es elpr.gcgso de traducción dq programas fuente a programa§*qbieJo. El programa
objeto obtenido de la compilación ha sido tradu-c-1dq_uptaalmsn"q%*qgdigomráqui$a.
eele coltSAgS|p1gqyma mgggrng_§glS9-qe}e-utilizar un-prog-ram¿-11amads-monlade¡.p--9nla-
.
,q!glty!rt). El prg!-qs-o_€!róúrEEó1,@_.. e_UpIggr¿ma-""J"**guei*mrAqu.iui.dirce¿arrre;Ae¡e-
cutable (Figura 1.8).

Programa fuente

Compilador
(traductor)

Programa objeto

Programa ejecutable
en lenguaje máquina

Figura 1.8. Fases de Ia compilación.


12 Fundamentos de Programación

los siguientes pasos:


El proceso de ejecución de un programa Pascal. por ejemplo, tiene
\i
1. Escritura programafuente con un eclitor (programa que permite a una computadora
del
y guardarlo en un dispositiVo
actuar de modo simila, u unu máquina de escribir electrónica)
s!
it\ de almacenamiento (por ejemplo, un disco)'
2. Introducir el programa fuente en memona'
\ 3. Compilar el programa con el compilador Pascal'
4. Veriiicar y cárrigtr errores de compilació¡¡ tlistado de errores)'
5. Obtención del Programa objeto'
6. E1 montador obtiene e7 programa ejecutable '
del programa.
i. §" el programu y, ,i no existen e.'ores. se rendrá 1a salida
"¡""",a
El proceso de ejecución sería et mostrado en la' Figura: l'9
r l l0'
Programa
V
Datos - -------------'
p rog ra m a ---------------- Computadora
ejecutable
V
Resultados
Figura 1.9. Ejecución de un programa'

Modificación
programa
fuente I

fuente
v
Compilador
I

-¿'...
.,/ Exrsten \
,/ errores en la \
\ compilación-,/
\.,.-
lno

Programa

Programa
Montador e.iecutable

Ejecución

Figura 1.10. Fases de la e.iecución de un programa'


Algoritmos y programas 13

1.4. DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS


El primer ob.jetivo de toda computadora es el manejo
de la informagi¡í¡ ,¡ js¡t_r.. Estos datos pueden
ser las cifras de ventas de un supermercado
o las caiificaciones de una cia-ie L-¡
ggneral que,{e¡cribq lqs objelos con los cuales lijr{i + la erpresión
op.ru unu.Áfrruao.u.
La mayoría de las compuiadota, pueden trabajar .on
ritm_os y los programas correspondienies
u*iár ,lporl.n*io. ,' uL ¡e j¡r,¡:
uf,Lr-': tLos also-
operan sobre datos. -
La acción de las instrucciones ejecutaLles de las computadores
se rel-1ejan -n ,-:lnbi,rs in lo\
valores de las parridas de daros. Los áatos de enrrada
se rrarisformar;;;;i;;;;;. :.,;;':. .: ;,
etapas intermedias, en datos de salida.
En el proceso de solución de problemas el diseño
de la estructura de datos e. r.r. iirlprrflBrlre
como el diseño del argoritmo y del programa que
se basa en el mismo.
Existen dos clases de tipos de-datos:. siiples
lrlr.rt..rarrij y ,o*pur.r/os (esu-rjruradrrs).
Los datos estructurados. se estudian a partir oel'capítulo
o y ron de partidas ,Je futo. sim-
ples con relaciones definidas entre ell,os. "or¡untos
Los distintos tipos de datos se representan en diferentes
- formas en la computadora. -\ nii el Je
máquina, un dato es un conjunto o seiuencia de bits (dígitos
o o ij.-I-o, lenguajes de alto rur.el per-
miten basarse en abstracciones e ignorar los detalles
aJu ,"p."ránhción interna. Aparece el con-
cepto de tipo de datos, así como su representación.
I os tipos de datos simples son los siguientes:

numéricos (inte ge4 real),


lógicos {boolean).
caráctgr (char, string).

Existen algunos lenguajes de programación


esencialmente- que admiten otros
tipos dedatos; complejos, que permitJn harar los-FoRTRAN
números y otros lenguajes
que también permiten declarar y definir sus
propios tipos""dl"j;r, -pasc¿-y
de áatár, enumerados (enumerateS
subrango (subrange).

1.4.1. Datos numér¡cos


E!1ipo numédco-es el conjunto de los v4lq¡e-g--numé.ricos.
Éstos pueden representarse en dos fbrmas
distintas:

o tipo numérico entero (integer),


o tipo numérico reql (reql).
Enteros: El tipo entero es un su-bconiu.ttto-finitq
de-.Iq,s=rlúrugIgs..enferos. Los enteros son nú-
t"^oletos, no tienen componentes fraccionariosiláÁ;ñ'y
preaen ser negarivos o posi-
frtJ:''
Ejemplos de números enteros son:

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'

los números reales' Los números reales


Reales:El tipg-1eal consisteerrun subconjuno de consta de un
,i"-t¡rffiíeil;ñil-[-;;""ra.l y pueden ser frsiti'os o negativos' un número real
entero y una Parte decimal.
Loi siguiintes ejemplos son números reales:

0. 08 3139 .4L
3.1 452 -52 -32L
-8.L2 3'0

especiai para manejarlúmeros muy


En aplicaciones científicas se requiere una representación
grandes,como]amasadelaTierra,omuyp.qu.no'.comolamasadeunelectrón.Unacomputa-
Este número.puede variar de una máquina
a
dora sólo p.r"d" r"preserit rn número frp O.iigltos. y alma-
otra, siendo octro dígitá; rn ,¡-"ro típico. Este
líi"itt ptot'otará problemas pafa representar
cenarnúmerosmuygrandesomuypequeñoscomosonlosr-acitadosolossiguientes:
4861 213432 0.00000000387

E1lste un tipo de representación denomi nado


twtación erponencial o cienlfica y que se utiliza
para ñúmeros muy grandes o muy pequeños' Así'

16752010000000c000000
qn grupos de tres dígitos:
se repres-enta en 1o119!-Qq q-ienlífi-c-a.descomponiénd'o1o

.,, a2O 100 000 000 000 000

¡ posteriormente en forrn-a de potencias'de 10:

x 102!

: -: /Y

= :tir-S::l:á
COrnO

de notación científica. Obsérvese que


La r¿::esella'-ión en coma flotante es una generalización
las si sulente s . \pre siLrne s son equivalentes :

I En computadoras de 16 bi.L' .-¡mo IB\l PC o compatibles'


Algoritmos y programas 1S

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


n_rLmeroreal y et qrypg1e_ryt1.lBfffe
potencial) el de la potencia de diez.

35.752AL mantis(1 18 exponente

1.4.2. Datos lógicos (booleanos)


Eltipo .' lóg-ico denominado booleqno_ es aquel dato qqe_1c-üg1¡ggdq
v¿O¡o| - -también 1oq3¡ 1¡.ro {e dos

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

Este tipo de datos se utiliza para representar las altemativas (s¿l¡rLr,


a de¡;n.¡unadas condiciones.
Por ejemplo, cuando se pide si un valoi entero es par, la respuesta
será r er¿aclere r¡ falsa. se,uún sea
par o impar.

1.4.3. Datos tipo carácter y tipo cadena


El tipo carácter es el conjunto finito y ordenadode caraeLefes que r&€€iÉ,Fiii,id..,¡¿de!¿Lu.i-¡--e.
L-n tJato
tipo carácter contiene un solo carácter.
Los caracteres qtle reconocen las diferentes computadoras no :on
e.:¡lJa¡: sin emb,a¡so. 1a
mayoría reconoce los siguientes caracteres alfabéticos y numéricos:

. caracteres alfabéticos (a, B, C, Z) (a, ., .:,


. caracteresnuméricos (1, 2, 9, 0),

/ fJna cadena (string) de caracteres es


Uq?.sugesión de caraqrq.lqs qg-_9_qry.lgqt4r1_de-Iimidados
p?.
tn? comilla (apósrrofo; o dobles comi[as, sesrñ et tipo de 1;;u;je-;p*-sr;-"áiá, . La ton_
Situd de una cadena de caracteres es el número de ellos compre"*d,oo. entre 1os
separadores o
rvvoror
limitadores. Algunos lenguajes tienen datos tipo caclena.
Hola Mortimer
8 de octrrbre de 1946
Sr. McKenna

RESUMEN: Los tipos de datos primitivos se clasifican


en:

Numérico
16 Fundamentos de programación

1.5. CONSTANTES Y VARIABLES


Los programas de computadora contienen ciefios valores que no deben cambiar durante la ejecución
del programa. Tales valores se llaman constantes. De igual forma, existen otros valores que cam-
biarán durante la ejecución del programa; a estos valores se les llama variable.g.
L':'' rJ,ryúot*tanie*esuna'paltida dad.atos-(ohieros) qug-pg-Eaneqglsilcambios-dumnte todo el

desarrollo del algoritmo o- glg_JA-nte-la.ejecución del.programa.

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

: I:234 i;752.63 (comasnopennitidas)


,i - a .1436 d2 ¡nonnalmente contienen Lol pLmto decimal, aunqLle existen
\_. + 54431324 lenguajes que lo admiten sitt punto)

Constantes reales en notación científica:

. 3.31456282 equivale a 3.3-=:e2 x i)'

Una constante tipO.Cprdcter.o.constante de caracterrs consiste en unearácter r¿álido encerrado


dentro de apóstrofos; por ejemplo,

'B + 4' i

Si Se deseaine+ufu-etapóstrofUen la cadena, entonces dehe aparecer conto r,n par deapéstrofos,


e nc errado s denlr_o_ dg I
t
TpEl._o_!¡lla§.

Una secuenciq dp qa¡actery-s ge denomina ,n*ormalmeñ{etta-cctdenay :urlu' constante tipo coiena


es una cadena encerrada entre apóstrofos. Por consiguiente,

_ ":*
r3-- Mi ¡arr¡r
!rrrr9uL¿

.=.:= -tS Garcia'

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:

C¿'¡n-srcni¿¡ iósiccs ¡ boolean)

Sólo eristen dos constantes lógicas o booleon:

La ma1-oría de los lenguajes de programación permiten diferentes tipos de constantes: enteras,


reales, caracteres y boolean o lógicas. y representan datos de esos tipos.
Algoritmos y programas 17

Variables
tJyg_ygighle qbje,tg o pl4ida de datos quyo yalor puede camliar durante el 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:

NOIIBRE para representar nombres de personas


PRECIOS para representar los precros de diferentes arlículos
NOTAS pat:a representar fas natas de u¡a clase

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

Aquí 1os-_paréntesis indican el grdgn de cálculo \ \ represenJa la funciQn raiT,quadrada.


Cadáéifióiién toma un valor que se determina tomando los valores de las variables y constantes
implicadas
-
y la ejecución de las operaciones indicadas.
U!.?..¡pfgslg¡ qp-ns-ta de operandos y.pperadotcs-. Se-sún sea el tipo de objetos que manipulan,
las expresiones se clasifican en:

o aritméficas.
o ló?icas,
o carácter.

el¡gsql1adq dc_la_elplgstsn¿ritmétrsa es-de tips nul[élcq-cl,resu]lado-deia-exprm-ié+rel-a-


cionglylgy¡q§1p_fgsign !óg_l_qq_e,§-Oe tipo.1ógcg 91 rq:ultado de-qra-expresign ca1á.c-!91 e§-de-lipo
carácter.

1.6.1. Expresiones ar¡tméticas


1-as a]aq fómu$¡ n-r4terniiticas Las variables y constantes son
iluméricas (real o entera) y las operaciones son las aritméticas.

! Ui.ll i

ri !ii.
muL:i¡iicaiitín
dir i:i¡n
I erpe.nenci;citín
t
div dir isión ¿nter:

mod. módulo i ¡esto ¡

I os símbolos !__,j._1_1lC_g_1")_y las palabras c1ave div _l-mo§ ü§-§glgggl]-_cplnp.epsLa-


,¡ o, lu ¿ipr* ió"
"'lrii.u@Épffi

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

Exponenciación Entero o real Entero o real


+ Suma Entero o real Entero o real
Resta Entero o real Entero o real
Multipliiación Entero o real Entero o real
División Real Real
t

div, División entera Entero Entero


rrpd Módulo (resto) Entero Entero

Ejemplos:
5x7 se representa por 5* 7
q se represento por 6 / 4
4
3' se representa por 3n t-

Operadores DIV y MOD


EI --:.en al qiemplo
EA SI C. s e s u e I e
I 9lg:glql I-* o re presen ra la _d.i_vi.riéq ."llqlt.
A Cl1V ll

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


srgulente.

19 div
*---.-" 6

ill-i$ ,,t, { .1J.


.1gma el valor 3.
:

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

2.0/4.0 0.5 33 div 30 1

6/1 6.0 5 div 8 g


--,---'h
30/30 1.0 -0 mod 3 l,
6/8 0.75 10 nod 2

1.6.1.1. Reglas de prioridad


LáS expresio_nes gtte tienen dss o
'náq operandos reqrieren rnas reglaq matersátieas que-pe¡Iften
¿gterm-ua-el orden de lrs
" :

Dnmero.
,'.,+
2. I4s-epsraciones aritmétkns dentro de una expresiónsuelo:_seguir_o-i §rgg-i9I{-e*-o.Ideq de
prioridad:

o operador exponencial (^. t o bien **),


. operadores *.l.(ff uo
(L. operadores d.ivl*"er
\o operadores +,-. )/

§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)

Los resultados serán:


\_5*(x+y)
R_a 2 + b' 2
\ (x + y)* / \u.+ w./a)
\*" x / lz I 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

1.6.2. Expresiones Iógicas (booleanas)


Un segundo tipo de expresiones esla expresión lógica o booleana, cuyo valor es-si€{ápre.verdade+o

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

=tc::e s t on7 OPERADOR DE REIJACION

Tabla 1.2. Operadores de relación

Oitefador Significado

menor que

mayor que

igual que

menor o igual que

mayor o igual que

distinto de

f
Algoritmos y programas 23

y el resultado de la operacrón será verdadero'o falso. Así. por ejemplo, si a = 4y B= 3, en-


tonces

4 r.B es veill.ad.

mientras que

(A 2)<(B-4) es.fnlso

Los operadores de relación se puedqn aplicar g_crUtlquiera-delosq¡at+o tipos dedalos estándar:


eI!-9r9*-t*!,"!éxsp-ssúek*
La aplicación a valores numéricos es evidente. Los ejemplos siguientes son si-snificativos:

N1 N2 Exprepidn lógica Resultado

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-

En general, los cuatro grupo,s anteriores están situados en el códigglSCll en glshUqIgggSre.


---':*-:-_-
Así, 1 < 'A y e ?tealTiñGd6argo, pa?á'Gn-e-r¡ory;1éta seguridad seiá preciso consultar el
código de caracteres de su computadora (normalmente, el ASCII (American Standar Code .for
Information Interchange) o bien el EB.CD_ IC (Extended Binarl--Coded Decimal Interchange Code,.
utilizado en computadoras IBM diferentes a los modelos PC y PS/2).
------:]-

24 Fu nda mentos de progra mación

Cyqrlo-sertili.za+1os-operadores-de-relaeién. eo+vaLores lógico¡ 11 constanfe false (f-also) es


m lól qy:lu:-o-l,t?n'te frue (ye-ry|.qil.
false <true f also < verdad
true>false verdad > fafso

, 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. -/

1.6.2.2. Operadores lógicos I

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

e:dad I verdad verdad aybes


=rdad falso ta I so ; si a y i:
verdad

a ob

verdad aobsol
verdad cuando a,
verdad son v-ordad

Tabla 1.3. Operadores lógicos

Operador lógico Expresión lógica Significado

r¡o :aa _ r¡o p (not p) negación dep

! 1- PYq(Pffid s) conjunción depy q

oaa pog(por q) disyuncióndepyq

¡t
A,'gor:-:s :--:-:-:: 25

En las expresiones lógicas se pueden mezclar operadores de relación


// i lógicor. \s:. :, r : ;- :,.
'I '/
(1 < 5) y (5 < 10) es yerdad
(5>10) o(A. B) esr¡ero-ad,yaque A < B,

Ejemplo 1.10
í'' ,&/

La Tabla 1.1 resume una serie de aplicaciones de expresiones lógicas.

1.6.2.3. Prioridad de los operadores en las expres¡ones lógicas


Los operadores aritméticos seguían un orden específico de prioridad cuando existían más de un ope-
rador en las expresiones. De rnodo similar, 1os operadores lógicos y relaciones tienen un orden cle
prioridad.
Tabla 1.4. Expresiones lógicas

Expresión lógica Resultado 0bservaciones

(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

Tabla 1.5. Prioridad de operadores (lenguaje Pascal)

Operador Prioridad

no (not ) mas alta (prlmera operación ej ecutada)


/, *, div, mod, y (a¡d) l

+, , o (or)
I

V
(, ), =, <=, >=, <> mas baj a (última operación ej ecutada)

Tabla 1.6. Prioridad de operadores flenguaje BASIC)

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

1.7. FUNCIONES INTERNAS

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


ope{apianes d§ la§
-oPglggiqt-q-s.--aritmiticas--!á¡!-c¡¡¡,}a tra¡adas* un número determi¡udo-de-opera-
dgjg#pggrilq§ Wgj-". Ée{,-qminanfunciones itttenlqt.-ilco¡p,9¡qri35-o .esr.iándar. por ejemplo, la fun-
clon rn se puede uttlizar para determinar el lo,earitmo neperiano de un número y la función raiz2
( sqrt ) calcula Tataiz cuadrada de un número positi\-o.
Erisren otras funcion"i qo" se utilizan para
determinar las funciones trigonométricas.
La Tabla 1.7 recoge las funciones internas más usuales. siendo.r e1 argumento de la función.
Jo'
[i"*t*
, Tabla 1.7. Funciones internas

Funeión : Descripcir6n Tipo de argumeuto Resultado


abs (x) valor absoluto de ¡ entero o real igual que argumento
arctan(x) arco tangente de r entero o real real
cos (x) coseno de x entero o real real
e¡p(x) exponencial de x entero o real real
1n(x) logaritmo neperiano de x entero o real real
1os10 (x) logaritmo decimal de ¡ entero o real real
redoadeo(x) redondeo de ¡ real entero
:- i
-:.': -,:

se¡{x) seno de x entero o real real


_=_ - -t

cuadrado (x) cuadrado de ¡ entero o real igual que argumento


-=;j- -1

raiz2 (x) raíz cuadrada de ¡ entero o real real

tru¡rc (x) truncarniento de -r real entero


I Terminolo-eía en inglés
Algoritmos y ptqyarnas ZI

Ejemplo 1.12
ltts funciones aceptan argumentos reales o enteros y sus resultados dependen de la tarea quc rcalice
lafunción:

raiz2 (25) 5 r,"' ,l:':


redondeo (6.6) 7
redondeo (3.1) 3
redondeo (-3 -2) ?

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:

xl= -brxT 4* -a_ -b+^tF 4*


2a 2a

Las expresiones se escriben como


x1 = (-b + raí22 (cuadrado(b) - 4 * a * c)). / 12 * a)
x2 = (-b - raí22 (cuádrado(b) - 4 * a * c)) / (2 * a)

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.

1.8. LA OPERAGIÓru OE ASIGNACIÓN


La operación de asignaciirq $ e!Todqigdatle .r_e]gg!j_U!1_y@ble. La operación de asisna-lou
.se lepresenta con el símbolo u operador <--. La operación de asignación s-e cAooqe como rr¿rrr -,1E
+
@o se refiere a un lenguaje de programación.
%.*%--:*--:*-..*

¿
28 Fundamentos de ProgramacrÓn
!

El formato general de una operación de asignación es: lJo ¿ri'¡ toi

noml¡re de 1a ve,::-¿-;:-e 3 expreslon


(BASIC, FORTRAN) o : =
La flecha (operador de asignación) se sustituye en otros ienguajes por =
(pascal) Cii++. Sin embarlo, es preferible eiuso de ia flecha en la redacción del algoritmo para evi-
erclusivamente para el operador de igualdad'
iar ambigüedades, dejando".t uró del símbolo =
La operación de asignación:
Ae5

significa que a la variable A se le ha asignado el I'aior : '


" La acáón_{e-ry-1g.lq e_s que tuviera la variab]e antes la asignagién
Qestructiva,ya que el vaLor -ds
de operaciones
elrp,iáéniñfaZ_"poi el nuevo valor. Así. en 1a secuencia

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

del'ofierador áe asignación, sustituyendo al valor que tenía anteriormente'

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 .

1.8.1. Asignación aritmética


Las erpresiones en 1as operaciones de asignación son aritméticas:

se etalúa la expresión 3 + 14 + 8 1- se asigna a lavariable AMN, es decir 25 serd el


talor que toma AMN
Algoritmos y prryrara5 Zl

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:

lle2 ,t, (*l:, -,-¿l Ne-3


N <- N + 1 4* '4:-.
fl,-**;,

. 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.

1.8.2. Asignación lógica


La expresión que se evalúa en la operación de asignación es lógica. Supóngase que M, N y P son
variables de tipo lógico.

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.

1.8.3. Asignación de cadenas de caracteres


La expresión que se evalúa es de tipo cadena:

x <- 12 de octubre de 1-942'

Laacciónde asignación anteriorasignalacadenadecaracteres' 12 de octubre d.e L942 a


la variable tipo cadena x.

1.8.4. Conversión de tipo I i


/ l^ r:1
- r'¡i-$
'
(
/' lvv
i.En las asignaciones no se pueden asignar valores a una variable de un tipo diferente del suvo. Se :::-
/sentará un effor si se trata de asignar valores de tipo carácter a una variable numérica o u:,'.. -':
f numérico a una variable tipo carácter.
Al go ritrn os y prag ra - a s 3't

1.9. ENTRADA Y SALIDA DE IIVFORMACIÓN


Lo§ cálculos que realizan Ias cotrl+utado&-§-re.guiru-ea{a-§srátiJs.la
€zl"odd-delos daros nrJe-
*qlP:9ryf]Sry.la;-9re:as1-o¡-c§-qu§-p.§§.tsg9g§tl.-.*s-o:.y-e{tirán-euresullade§,§üdesrg¡r¡lú¡.'
= Las operaciones de entrada permitén
Éé?'er".n;iñád*;br;ü asignarlos a determinadr.
variables. Esta entrada se conoce como operación de lectura (
read). Los datos de entrada se
introducen al procesador mediante dispositivos de entrada (teclacio,
tarjetas perforadas, unidades de
disco, erc'). La salida puede aparecer en un dispositivo de salida (pantalla,
impresora, etc.). La ope-
ración de salida se denomina eseritrrra (rn¡ri ro\
de lectura y escritura se representan por los formatos
J
l-eer (ljsi:a de,¡ariabfes de e¡trada)
escribir llista de expz-esiones de salrda)

Así, por ejemplo:


Taar tL E a\

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


A, B y c.
escribir ( hola Vargas
visualiza en la pantalla
-o escribe en el dispositivo de salida- el mensaje ,
hola varqas ,
.

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@...-"*

ACTIVIDADES DE PROGRAMACIÓN RESUELTAS


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

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

7. Poner rueda de repuesto.


8. Poner los tornillos y apretarlos.
9. Si NO están puestos tódos los tornillos volver al paso 8, en caso contrario, continuar el proceso'
f O !.ajar el gato. y !ut,t )o,t "
I l. Fin.

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

L.3. Deducir el resultado que se produce con las siguientes instrucciones:

araa entero: x, Y - '


x<-I
Y<-5
escribir(x, Y)
x e Y toman los valores 1 Y 5.

La instrucción de salida (escribir) presentará en el dispositivo de salida 1 y 5, con 1os formatos espe-
cíf,cos del lenguaje de programación; por ejemplo,

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

-Y(-ArB-C
]:fArB*C
1(--L-B/C
.e--ó\L
r(-l-3moilC
_1. ? : - :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

-r_ -._= C) = 5 + (25 / 70) - 5 + 2.5 7.5

\.
Algorítmosy alrryramas

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


p¡yr/2 H * u /(p-a) ' /nn,,,'
M N seno(x)+cose,?o(.r) (9enoU,-/>-'/)
a) P bl M+ c,
-+
N P- Q tanlx)

,,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)

1.6. Calcular el valor de las siguientes expresiones:

a) B + f .* 3 + 4 *.5
b)-2^3
c) (33 + 3 * 4) /5
d)2^2x3
e)3+2*(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

..

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


sí debe recurir a una
El procedimiento para conseguir intercambia¡ los.valores de dos variables entre
variable AIx y a las instrucciones asignación siguientes:

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'

Utilizaremos una variable auxiliar AllX.


I-as instrucciones que resuelven el problema de intercambio son:
:-.{ <- A
-:_ <- :
l<-3
<- .--:.,
- =
Comprobémoslo con los valores de A e y C: 5, 10 y 15'
I i':.i':. ir.tr,g..:rr ,.:: .i '.f:tr:rt.,::t t0b§e.rv.aCioneS
I¡S¡renón Á :.rrrAItX
_ !-<-a
: : (- --
3 le-:
l--:': €- -1- 5 10 15 5

-L<-: -510155
l<_- a 10 10 5
Algoritmos Y Drogramas 35

3nir¿ dtr! i e¡i¿t'les' la r ¡riable AUX


Obsér.¿ese que aligual que en el ejercicio de intercambio de Yalores
no modilica su valor'

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:

Instrucción ' A R Observaciones

(1) A<-5 5 B no toma ningún valor

(2) B+_A+6 5 11 SeevalúaA + 6(5 + 6) YseasignaaB


(3) A(-A+1 6 LI Se evalúa A + 1 (5 + 1) Y se asigna a A'
borrándose el valor que tenía (5) y tomando el
nuevo valor (6)

(4) D L 1 - ( 6 7 SeevalúaA - 516 - lt yseasignaaB

Losvaloresúltimosdeayeson:A = 6'B = 1'

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

(3) C<-A+B 3 20 -: SeevalúaA+B(20+3) yseasignaaC


(.4) B<-A+B 3 23 j SeevalúaA+B(20+3) yseasignaae;
destruye el valor antiguo (20)
(5) A<-B-C a 2-1 SeevalúaB Cl23-23) yseasignaaa

Los valores finales de las variables son:

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 )

Los valores finales de Ay B son 5.


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

1.13. Deterrninar el mayor de tres números enteros.

Los pasos a seguir son: i

1. Comparar el primero y el segundo entero, deduciendo cuál es e1 maYor.


i. Comparar el mayor anteriorion el tercero y deducir cuá1 es e1 ma1'or. Éste será el resultado.

L,-,. p;..-rs antenores se pueden descomponer en otros pasos mái simples en 1o que se denomina refina- I

,,: ; ¿,.:,:' d¿ I al g orirtno.

1 . . O'¡ten¡r el primer número (entrada), denominarlo NtI'41.


l. Ol'ien¡r ei .egundo número (entrada), denominarlo NIJM2.
-: . Crril',pr.li l con - :;'e y seleccionar el mayor; si los dos enteros son iguales, seleccionar
. \IJM1..
L,¿mul ú c.ii númcfo . --., O: .

J. Ot'tener el ter,-er número (entrada) y denominarlo Nlll't3.


5. Comparar l l r -: .rrn l
-l:3 ), seleccionar el mayor; si los dos enteros son iguales, seleccionar el
l.--: -:.. Denomin¡¡ a este número I4AYOR.
6. Presenta¡ el valor de l--.,: t salida).
7. Fin.
t -(Lf"¿"/ .-( ';r;, ,-r 4 .t¿t*'ttr€nh -n/¿,t-. t' /tt'4
i; ¿., ir',1or' '- -.*, .¿' -., I --.,
-.'.: ---
-, ?ü/',-1)o,,fo i,- f /¡o,/n.,- "k'4't,¡'¿e/'2
ul - '/o/rr"n ¡, ._.kt z¡ (l:, 4*- '7.{r.l-uQ et2-¿t c,2, Algoritncs; f,':"-:'.-.s 37

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

l'2' ¿cuáles de los siguientes identificadores no son váridos?


a) XRayo á) x_Rayo
c) R2D2 d)x
e) 45
Í) N14
g) ZZZZ h) 3p
1.3. ¿Cuáles de Ias siguientes constantes no
son válidas?
a) 234 b) -8.915
c) I2tr-5 d) o
e) 32,767
'gf f) 7t2
T:68 + j h) -1872
¡l -3-. 5- x_ l=Q L-Lt:o
k) o. oooool l) 224E1 -

1.4. EvaluarlasiguienteexpresiónparaA
= 2yB = \;
t+A-4.8 I

I.5. Evaluar la expresión


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

siguientes expresiones algebraicas como


''u';uIg'as expresiones argorítmicas:

4 E -+ac x'+y' ,3x+2y' a+b


b) L',) ,,
a)
)- c-d
e) a -
4x2 -2x +7 h) x,vz

., ),-}l,
*-; -- D(

t)4 4-
xz*xt k)'3-ttr' l) (x, - x, )2 + 1..
38 Fundamentos de programación

1.7. Escribir las siguientes expresiones algorítmicas como expresiones algebraicas:

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)

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

a)B*A-B^2/4*C
b) (A*B) 3/2
c) (((B+C) /2*A+Ia) *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

1.10. Obtener el valor de cada una de las siguientes expresiones aritméticas:

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

2.1 . La resolución de problemas.


2.2. Análisis del problema.
' 2.3. Diseño del algoritmo.
2.4. Resolución del problema mediante computadora.
2.5. Representación gráfica de los algoritmos.
2.6. Diagramas Nassi-schneiderman (N_S).
2.7. Pseudocódígo.
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS.
EJERCICIOS"

La resolución de probremas con computadoras se puede dividir


en tres
fases:
o análisis del problema,
o diseño del algoritmo,
o resolución del algoritmo en la computadora
En este capíturo 6e ana,rizan ras tres fases anteriores. EI anárisis y
er
diseño del algoritmo requiere ra descripción der probrema en suopronre-
mas a base de «refinamientos sucesivos» y una herra.mienta d" pro-
gramación
-diagrama de flujo, diagrama N_S o pseudocódigo:; /os
conceptos fundamentates det anátisis, diseño y herramientrí d" prr-
g.ramación (díagramas de flujo, diagramas N_S y pseudocódigos)
se
describen como conocimientos indis[ensabres para er aprendizale
de ra
progra mación de computadoras.

39
40 Fu n dame ntos de p rogra mació n

2.1. LA RESOLUCION DE PROBLEMAS


La principal razónpara que las personas aprendan a programar en general y los lenguajes de pro-
gramación en particular es utilizar la computadora como una herramienta para la resolución de pro-
blemas. Ayudado por u_n? computadora, la resolución de un problema se puede dividir en tres fases

'7. andlisis del problema,


2. diseño o desarrollo del algoritmo,
i3. resolución del algoritmo en la computodora.
El primer paso del problema- requiere que el problema sea definido y co11-rp¡g¡dido
claramén1á páia que -análisis
pueda ser analizado con todo detalle. L-na rez aqa-lizado el problema, sed-ebe
desarrollar el algoritmo paso a paso para solucionar el problema- dado . Por
-procg{imlento
último, para resolver el algori-mo
-
mediante una computadora se necesita codificar el algoritmo en un
lenguajá de programación Pascal, C/C++, COBOL. fOnfnff. etcrr-9.q--decir, con",erii el algq;fr;;o
en programa, ejecutarlo y comprobar que el programa solucional erdaderamente el problema. Las
fases del proceso de resolución de un problema mediante computadora se indican en la Figura 2.1.

2.2. ANÁLISIS DEL PROBLEMA


el plol.g!!tg_{el análisis de un problema es ayudar_a1pr-ggryryqdor pglq !.19-ga{ I ung gle-rta com-
prénii-On Oela natürateza-tretpfot'leúa.Efprol;Iémá-debéisiar Uien ¿enni¿o
-"-
ii
sé ¿eiea iiégará üna
soluCi6n §átiffáetófiil --
Para poder definir con precisión el problema se requiere que 1as especificaciones de enúqqgJ
salida séañ déscritas-corrdetalle. Una'buéna definición deI probiema, junto con una descripción detá-
llada de las especificaciones dé.entrada y salida, son los requisitos más imporlantes para llegar a una
solución eficaz.
El3!,álisisdelproblsuacxige-un-a lsetura-p{-9-v-tadelprsble*ra¿ findeobteueLu!4-sgqggneral
de 1o q¡q_q9_qo,1rylla._La.f9gunda lectura deberá servir pararespo$deral4-§_prcgunlas:

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


e ¿Qué datos se necesitan para resolver el problema?

La re¡gue-9ta a l?lri1gqlapregunta-indicará los resultados deseados olas salidas del p-roblerua-


La respuesta a la segunda pl"€93,r_l4i_c-?¡r4-q}9 g-!9-s_ se.p,r_opo¡cionq19 la¡ enÍradas del*prob.lema.

Aná lisis Resolución del


del problema con
problema la computadora

Figura 2.1 . La resolución de un problema.


La resolución de problemas con computadoras y las herramientas de proc.^ - ^ - - - 41

Definición Especif icacio nes


del de
problema entrada

Figura 2.2. Análisis del problema.

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.

Enfradas: Radio del círculo (variable RADIO).


Salidas: Superficie del círculo (variable AREA).
Circunferencia del círculo (variable C IRCUNFERENC IA).
Variables: RADIO, AREA, CIRCUNFERENCIA (tipo real).

2,3. DISEÑO DEL ALGORITMO


Una computadora no tiene capacidad para solucionar problemas más que cuando se le proporcionan
los sucesivos pasos a realizar. Estos pasos sucesivos que indican las instrucciones u.¡ecutur por la
máquina constituyen, como ya conocemos, el algoritmo.
La infotmación proporcionada al algoritmo constituye st enfratla y la información producida por
el algoritmo constituye stt salida.
I=g§?-Iab-l9al4q cqmplejos se pueden resolver más eficazmente con la computadora cuand_o se
rompen en subproblem¿s que sean más fáciles de solucionar que el original. Este método se suele
denominar divide y uettcertís \divide and conquer) r19nspte én dividii u, plo-b]gpt-gomple¡q
T
,9!rqqJras-s-1.4p]§. Así. el problema de encontrar lálupélfltiey 1aIoñsitud dé ün aíi¿üló se ÑA-.
dividir en tres problemas más simples o subproblemas (Figura 2.3).
La descomposición del problema original en subproblemas más simples y a continuación dividir
estos subproblemas en otros más simples que pueden ser implementados para su solución en la com-
putadora se denomina diseño descendente (top-down design). Normalmente los pasos diseñados en
el primer esbozo del algoritmo son incompletos e indicarán sóto unos pocos paios
1ún máximo i¡
doce aplgximadamente). Tras esta primera descripción, és1o-s sg a11l_plíal eq^uqa {esgripción :::..
detallada con más pasos específicos. Este proceso se denomina refinimiento del algorittict (-!¡r .r,, . -
se re.finemenl). Para problemas complejos se necesitan con frecuencia diferentes ttitet".,,;. ,.. ...-
miento antes de que se pueda obtener un algoritmo claro, preciso y completo.
42 F u n d a rn e ntos d e prog ra m aci ó n

Superficie y
long¡tud de
circu nferencia

Cálculo
de
longitud (C)

ntrada
S=Pl *R^2
E
L=2*Pl +R
radio (R)

Figura 2.3. Refinamiento de un algoritmo.

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


subproblemas más simples: (1) leer datos de enrrada. €)calcuiar superficie y longitud de óircunfe_
rencia, y (3) escribir resultados (datos de salida).

Subproblema Refinamiento

leer radio leer radio

caicular superficie superficie = 3.1+1592 * radio ^ 2

calcular circunferencia circunferencia = 2 x 3. 14i592 * radto


e scibir resultados e s c rib ir radio, circunferencia, superficie

Las rentojas más imporlantes del diseño descendente son:

¡ El problema se comprende más fácilmente al dividirse en partes más simples denominadas


tnódulos.
o Las modü-rcaciones en los módulos son más fáciles.
( o La comprobación del problema se puede verificar fácilmente.

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.

2.3.1. Escritura inicial del algoritmo


Como ya se ha comentado anteriotmente, el sistema para describir («escribir») un algoritmo consiste
en realizar una descripción paso a paso con un lenguaje natural del citado algoritmo.
$.gcoldemo_s_
que-un algorilmo qg g¡¡-q(t-qd-q.-o---cp-njunto dereglas.para-sshreienar-uaproble.rna. gn cáiculos ele-
mentale § e sia s re glas tienen I as sigulenJqs p.rpptp-dade-s :

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.

El flujo de control usual de un algoritmo es secuencial; consideremos el algoritrno que respon-


de a la pregunta

¿Qué hacer para ver la película TiburónZ

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

3. si no proyectan <<Tiburon>> entonces


3.1. decidir otra acti-¿rdad
3.2. bifurcar al Paso 7
si_no
3.3. ir al cine
fín_si
4. si hay cola entonces
4.1. ponerse en ella
4.2. mientras haya personas de-a:-:= hacer
4.2.f. avanzar en la cola
fin-mientras
fin-si
5. si hay localidades entonces
OTPLoI r, a en'rada
.2- Pa-oL o.o 3o'o
5.3. localizal: la(s) butacat:
5.4. mientras proyectan la p=--:- = hacer
5.4.L. ver la Pelicula
fin-mientras
:.'. abandondr er cia'
si_no
5.6. refunfuñar
fin-si
, volver a casa
fin

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'

si p:cyectan La pelicula seleccionada rr


si no ver la televisiorL, rr al futbol o
mieotras iaya Personas en la cola
.-,==--= -eq¡ar a la taquilla

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

En este algoritmo la repetición se ha mostlado


de dos modos, utilizando ambas notaciones. nepe-
tir"' hasta-que y mientras... fin-mientras. se ha considera¿o'tá*ti¿r, como ocurre norrnalmen-
te' que el número del asiento y fila coincide
con el número y fila rotulado en el billete.

2.4. RESOLUCIÓN DEL PROBLEMA MEDIANTE COMPUTADORA

ng-e!a.lg9-ritmo-est¿á diseñado- y representado gráficamente mediante


-lli-*
programación"(diagrama de flujo, pseudócódigo una herramienr+de
o diagrima x-y r" a.u" pasar a la fase de resolu-
ción priáctica del problema corrla computadora.
Esta fase se descompone a
:u vez án 1as siguientes subfases:
t
cldrfic1ción det algoritmo en un programa,
,1^.
.. z. qecucton det programa,
i 3. comprobación del programa.

se describe en una herramienta de programación


*:li:"*le1,1godtmo.éste rat como un
#s;:*Í:J:l?"::lri'J,*t:"9o'áaisoú;;;;;;,;;;ü'f#'l'J:ilffi"ffi :1
*::""j:"j:*^'"1:',:T.,",1111,s1,9".a{rJ"siá;;;üil¿;á"",'"",1J;ii,:H;IffiTJ:'il1
jil:?'fi jJ[X'.fffi
?:::?:::lr"il-*3'16'eposye;ió"¿"rárd'td'ü;'.;"ü#"
na codificación #:
-"1qq,o-lJ.ryo-g.qc-lit-osq,uoJenguajeesp""ifi.ád;p;ü;;á'J;;á;
Tras la codificación del programa, deberá
ejecutarse en una computadora y a continuación
comprobar los resultados pasar a Ia fase de
final de documentación.
( , rl

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

2.5. REPRESENTACION GRAFICA DE LOS ALGORITMOS


Para representar un algoritmo se debe utilizar a1gún método que permita independizar dicho algo-
ritmo de1 lenguaje de programación elegido. Ello permrtirá que un al-soritmo pueda ser codificado
indistintamente en cualquier lenguaje. Para conse-suir este objetii'o se precisa que el algoritmo sea
representado gráfica o numéricamente, de modo que 1as sucesivas acciones no dependan de la sin-
taxis de ningún lenguaje de programación. sino que la descripción pueda servir fácilmente para su
transformación en un programa, es decir, su codi.ticaciótt.
i.. Los métodos usuales para representar un algontmo son:

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.

Los métodos 4 y 5 no suelen ser láci1es de tran-.iormar en programas. Una descripción en


español narrativo no es satisfactoria, ya que es demasiaCo proli-ja y' generalmente ambigua. lJnafór-
mula, sin embargo, es buen sistema de representación. Por ejemplo, Ia fórmuJa para la solución de
una ecuación cuadrática es un medio sucinto de erpresar e1 procedimiento algorítmico que se debe
ejecutar para obtener las raíces

xl = (-b * trlr' - 4ac) /2a x2=Fb- b -lac\/2a


significa

l. Eleve al cuadrado b.
2. Toma a; multiplicar por c; multiplicar por 1.
3. Restar el resultado de 2 del resultado de l, etc.
Sin embargo, no es frecuente que un algoritmo pueda ser erpresado por medio de una simple fór-
mula.

2.5.1. Diagramas de flujo


L idialrama-defuio-(fTawchart) es una de las técnicas de representación de algoritmos más
lnii,gua r
a 1a vez más utilizada, aunque su empleo ha disrunuido considerablemente, sobre todo
i.e sde 1a aparición de lenguajes de programación estructurados. Un diagrama de flujo gs un
_d-iagra=
que utiliza 1os símbolos (cajas) estándar mostrados en la Figura 2.§ y que tiene los pasa_s del
T1.¿
alSCñ:¡n iscJi¡-os- en esas cajas unidal pói-flgch_a¡. dgnomina{as ttneai ai ftu¡o, que indican la
\-ejri:i_r in quc :e deben ejecutar.
La Fi_sura 1.7 95 ,, diagrama de flujo básico.
El diasrama citado (Figura 2.7) representa la resolución de un programa que deduce el salario
neto de un traba,jador a partir de la lectura del nombre, horas trabajadas, precio de la hora, y sabien-
do que los in'rpuestos apiicados son el 25 por 100 sobre el'salario bruto.
Lqq-rínrhotos.¿5tánd¡r-ry¡¡1aliz¿fl-ss.ps¡ AN§I (abrgylatura de American Nqtional Standards
Insllllttg;-orr n!)¡ ¡¡.1dos En ia Figura 2.8 se representa una plantilla de dibujo típica donde se
-t
La resolución de probremas con computadoras y ras herramientas de programación 47

Símbolos
principales Funcién

Terminal (representa el comienzo, «inicio»,


1 el ñnal. ,.tin . c: :: ¡r :,_-¡::-L:i. Puede
representar también una parada o interrupcidn
en un programa).
prorramrC; ;:: ::: i3; : !]n,:, re:liZar
Entrada/Salida (cualquier tipo de i,
«enrrada», o .egisr.o de la informacián
ry:ilÍir.:., p.o..rud, en ur :,;:.:::: -
«salida»).
Pro99s9 (cualquier tipo de op".u.ió@u,o o. *i., :,-=.-.u .
ll:,".,r^"-l-O:,
información almacenada
transferencia,]" etc.). "n
**Ju, operaciones aiirm¡:r¡
".
. ¿:

<->*
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;

Conector'(sirve para enlazar Oo.


salida y orro conecror en la enrrada. Se
:l:1..^.i:l.rla,
misma página del diagrama).
refiere uio
"or.*, l,
"n
...._ Indicador de dirección o línea de n,¡
operaciones.¡.
Línea conectora (sirve de unión entre dos
.l*Uofor)
Conector (conexión entre dos
Oun,o.G

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


independiente- clel programa principal, qu"
.".iu" ,no entrada procedente de dicho
programa, realiza una tarea dererminadá
y regresa, a ,"ÁirJ,uiir"s.'";;;t trr.
§ímbolos
secundarios F'uución

Pantalla (se utiliza en ocasiones en lugar


deJ símbolo de E/S).

Impresora (se utiliza


",
n"u.ion"r@

Teclado (se utiliza en ocasiones en lugar


del símboto de E/S).

Í:'::T:l:':"'t,
uagrama oe lluJo. Se pueden dibujar
a cualquier lado del símbolo).
nr . r.

Figura 2.6. Símbolos de diagrama de


flujo.
48 Fu nd a m e ntos de p rog ra m aci ón

bruto<-
horas + precio

neto<-
bruto - tasas

Figura 2.7. Diagrama de flujo.

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:

. eriste una caja etiquetada ,, inicio " , Que es de tipo elíptico,


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

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

Símbolos de diagramas de ftujo


Cada símbolo visto anteriormente indica el tipo cle operación a ejecutar y
el diagrama de flujo ilus-
tra gráficamente la secuencia en la que se ejecutanlas operaciines.

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:

1. Iniclalizar contador de numeros C y variable sum.a S.


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

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.

Diagrama de flujo 2.2

c<-0 contador de números


s<-0 sumador de números

,"1 fu a-
2- q' )t2 t:*¿
* L/ ) / '-) .{ á ¡*)
{- .L ¿* t2
tg¿;
%

dato <> 0
¡ ¿4
I /" lory'lr
1

----_.)

Si el primer dato leído es 0, la división szc


produciría un error si se ejecutara el algo-
ritmo en una computadora, ya que no eitá
permitida en ella la división por cero.
§

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

Si el primer dato leído es O, la división S /C produciría un error si se ejecutara el algoritmo en


una computadora, ya que no está permitida en ella la división por cero.

Ejemplo 2.3
Suma de los números pares comprendidos entre 2 y 1 0 0.

Diagrama ,,)
de flujo 2.3

SUMA e- ik"
SUMA + ruÚurnO

NÚMERo <- j ¡.-l


uk NUMERO + 2 I

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.

Los cálculos son sencillos son:


1. Leer datos del archivo de la empresa, hast.a que se encuentre.1a ficha fr::
_ archjvo (HORAS, PRECIO_HORA, NOMBRE) .
2. Si HORAS <= 40, entonces. SALARIO es el producto oé HODAS por 1
PRECIO_HOFA.
3. Si HORAS > 40, ent.onces SALARIO es la suma de 40 veces PRECIO HOF-I. r-á=
veces PRECIO_HORA por (HORAS-40).
52 Fundamentos de programación

El diagrama de flujo completo del algoritmo se indica a continuación:

Diagrama de flujo 2.4.a

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:

Diagrama d,e flujo 2.4. b

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

y desea contar e imprimir el número de ceros rre ra secuencia.

El algoritmo es muy sencillo, ya que sólo basta leer los números


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

1. Establecer TOTAL a cero.


2. ¿Quedan más numeros a examinar?
3. Si no quedan numeros, imprimir ei \_a_:t r= y fin.
4. Si exÍsten mas numeros, ejecutar 1os:_::s :-_:;,_
a g.
5. Leer e1 siguiente numero y dar su r¡a,c:
5. Si NUMERO = 0, incrementar TOTAL en ::c. = --.-a:rabre NUMERO.
7. S NUMERO ., 0, no modi ticdr TC-q_.
ó. RéfOt.1AI A paSO 2.

El diagrama de flujo se muestra en el DF 2.5.

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».

Por ejemplo, si los números son:

:.1 5

larespuestaes' rgruales',yaque 3 + 6 = g.sinembargo. sirosnúmerosson:

el resultado será l- s tintas


La resolución de problemas con computadoras y las herramientas de pro!ramación 55

Diagrama de flujo 2.5 (DF 2.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.

1. Leer los tres r¡alores, A, B y C.


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

El diagrama cle flujo corespondiente al algoritmo es el 2.6.


56 Fundamentos de programación

A+B=C

escribir
«iguales»

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

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


El dia-erama N-s de Nassi-Schneiderman conocido como diagrama de
-también
como un dia-erama de flujo en el que se omiten chapin- es
las flechas de unión y las cá¡as ,on Lu,
flujo, se"orffir.
acciones sucesi§as se escriben en cajas sucesivas y,
como en los diagramas de pueden escri-
bir diferentes acciones en una caja.
La resolución de problemas con computadoras y las herramientas de programación 57

Un algoritmo se representa de la forma siguiente:

nombr:e de1 algoritno

calcular
salario <- horas * Precio

calcular
neto (- salario impuestos
escribir
nombre, salario, impuestos, neto

La estructura condicional (el rombo)

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:

o las primeras 35 horas se pagan ataifanormal,


o las horas que pasen de 35 se pagan a 1,5 r,eces la tarifa normal,
. las tasas de impuestos son:
a) las primeras 60.000 pesetas son libres de impuestos,
' b) las siguientes 40.000 pesetas tienen un 25 pár 100 de impuesto,
c) las restantes, un 45 por 100 de impuestos.
o la tarifa horaria es 800 pesetas.

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:

r::-a ..esio y salarios


- - -., ore-io-nora
4:tras * precio_hora
- -;-::'tC-brUl:O
-_ -;_t:::-¡ru:o tasas
.=-=:_:_;::-:a, taSaS, salario neto

El algontmo cornienza con 1a palabra start y finaiiza 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

fin end escribir write

ACTIVIDADES DE PROGRAMACION RESUELTAS


2.1. Se desea obtener el salario neto de un trabajador conociendo el número de horas trabajadas, el salario
hora y la tasa de impuestos que se le debe deducir.
El algoritmo general es:
1. Obtener valores de horas trabajacias, salario_hora y tasas.
2. Calcular salario_bruto, total ce :r,puesros y salario_neto.
3. Visualizar salario_bruto, total de impuestos y salario,neto
1 Metodología de la Programación.McGra:w-Hil1,
1986.
60 Fu n da m e ntos de prog ra m aci ó n

Las enfradas del algoritmo son:

horas trabajadas, salario_hora, tasas


Las salidas del algoritmo son:

paqa bruta, total de impuestos y paj|e :-e_a


El refinamiento del algoritmo en pasos de nivel
interior es:
1. Obtener vafores de horas trabajacas, sa_ario bruto y
2. Calcular salario bruto, total áe tl..ct=s,os tasas.
y paga net.a.
2.l. Calc jLar sr a,io bru-o nu-l ..:. _ _:.-:: _¿s
hora.
horas rrabajadas
por e1 salario
2.2. Calcular e1 total de impues:cs ::_,rpllcando
(tanto por ciento de impues_cs salario bruto por tasas
2.3. Calcular el salario neto ::es:a:-i: _ :olal
3. Visualizar salario bruto, total ie tt.._es_.s, de impuestos de la pagfa bruta.
salario neto.
El diagrama de flujo 2.7 rcpresentaeste algorirmo.

Diagrama deflujo 2.7

introducir
HORAS
SALARIO_HORA
TASAS

calcular
SALARIO-BRUTO<-
HORAS*SALARIO-HORA

calcula r
TOTAL_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

2.2. Calcular el valor de la suma 1 + 2 + 2 + 4 + ... + 100.

Variables CONIADOR (números sucesivos a sumar: L, 2 , 3, . ).


SL44A (totalizador de sumas).

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.

Diagrama de flujo 2.8 'i-


q
t *':

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.

El análisis del problema es el siguiente:

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.

Diagrama de flujo 2.9

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

2'4' Definit el algoritmo necesario pa.a intercambiar los varores


de dos variables numéricas.
Análisis

análisis se utiliza una variable denominada


lTffilfffite auxiriar que de modo remporal toma
uno de

Variables: AB AUX

El método consiste en asignar una de las var.iables


a la variable auxiliar:
AUXEA
A continuación se asigna el valor de la otra variable B a ia primera:
A<-B

Por último, se asigna er valor de ra variabre


aux,iar a ra segunda'ariabre -r:
B <- AUX

Variables: A primer valor.


B segundo valor,
ALI( variabie auxiliar.

Pseudocódigo

inicio
leer (A, B )
AUX <_ A
A<_B
B +_ AUX
escribir(A, B)
fin

Diagrama de ttujo 2.10

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

La fórmula geométrica del área o superñcie de un triángulo es:

S=(l/2)BxH B=base H=abura


Se necesita
asignar los valores de la base y la altura a variables ejemplo, BASE y ALTIIRA, res-
-por
pectivamente-: a continuación, calcular sl á's¿ ¿¡ilizando la fórmu1á
y urigrr* los resultados del cálculo
aunavariablellamadaAREA. Supongamos B - 4.5y H=7.2.

ALTURA <_ 7.2

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

2.2. ¿Qué resultados producirá este algoritmo?

var e ófo: fx, crool^


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

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

Área = p(p - a)(p - b)(p - c)


^,,

dondep = (a + b + c)/2 (semtperímetro)'


pie = 12 pul-
- 2,14. Se desia un algoritmo para convertir metros a pies y pulgadas (1 metro =39.37 pulgadas, 1

gadas).
2,15. Elcambio de divisas en la Bolsa de Madrid el día25 de agosto de 1987 fue el siguiente:

100 chelines austriacos =956,871 pesetas


1 dólar EE.UU. = 122,499 pesetas
100 dracmas griegas = 88,607 pesetas
100 francos beigas =323,728 pesetas
1 franco francés = 20,1 10 pesetas
1 libra esterlina - 178,938 Pesetas
100 liras italianas = 9,289 pesetas

2.16. Desarrollar algoritmos que realicen las siguientes conversiones:

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


b) Leer una cantidad en dracmas griegos e imprimir el equivalente en francos franceses
c) Leer una cantidad en pesetas e imprimir el equivalente en dólares y en liras italianas.
CAPITULO i

ESTRUCTURA GENERAL
DE UN PROGRAMA

CONTENIDO

3.1. Concepto de programa.


3.2. Partes constitutivas de un programa.
3.3. lnstrucciones y tipos de instrucciones.
3.4. Tpos de instrucciones.
3.5. Elementos básicos de un programa.
3.6. Escritura de algoritmos/programas.
ACTIVIDADES DE PROGRAMACIÓN RESUELTAS.
EJERCICIOS.

En los capítulos anteriores se ha visto la forma de diseñar algoritmos


para resolver problemas con computadora. En este capítulo se introduce al
lector en el proceso de la programación, que se manifiesta esencialmente
en los programas.
El concepto de programa como un conjunto de instrucciones y sus
tipos constituye la parte fundamental del capítulo . La descripción de los
elementos básicos de programación, que se encontrarán en casi todos los
programas: interruptores, contadores, totalizadores, etc., junto con las
normas elementales para la escritura de algoritmos y programas, confor-
man el resto del capítulo.

3.1. CONCEPTO DE PROGRAMA


Un programa de computadora es un conjunto de instrucciones dadas a la máquina- qL-
producirán la ejecución de una determinada tarea. En esencia, -órdenes
un programa es un tnedio pG,r!; . ,'.-
seguir un fin.

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

Figura 3.1. El proceso de la programación.

El proceso de programación es, por consiguiente. un proceso de solución de problemas


ya se vio en el Capítulo 2- y el desarrollo de un programa requiere las siguientes fases: -como
1. definición y análisis del problema;
2. diseño de algoritmos:
o diagrama de flujo,
o diagrama N-S,
o pseudocódigo;
3. codificación del programa;
4. depuración y verificación del programa;
5. documentación;
6. mantenimiento.

. 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.

3.2. PARTES CONSTITUT¡VAS DE UN PROGRAMA


Tra-< la decisión de desarrollar un programa, el programador debe establecer e_l conjunto de especi.
flcaciones que debe contener e1 programa: entrada, salida y algorinnos de resolucián, que
incluirán
las técnica-< para obtener las salidas a partir de las entradai.
Conceptualmente. un programa puede ser considerado como una caja negra, como se muestra
en
la Fieura -1.1. I-a L-a-ja negra o el algoritmo de resolución, en realidad, ei el con¡unto de códigos
que
transtbrman la-s entradas dei programa (datos) en salidas (resultados).

Programa
(algoritmo de
resolución)

Figura 3.2. Bloques de un programa.


Estructura general de un programa 69

El programador debe establecer de dónde provienen las entradas al programa. Las entradas, en
cualquier caso, procederán de un dispositivo de entrada 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.

3.3. INSTRUCCIONES Y TIPOS DE INSTRUCCIONES


El proceso de diseño del algoritmo o posteriormente de codificación del programa consiste en
definir las acciones o instrucciones que resolverán el problema.
Las acciones o insÍrucciones se deben escribir y posteriormente almacenar en memoria en e1

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


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

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

Un programa es no lineal cuando se interrumpe la secuencia mediante instrucciones de bifur-


,cación:

accion 1

""t:" '

accton x ----l
I

accion n ¡1
:
70 Fu ndame ntos de prog ramació n

3.4. TIPOS DE ¡NSTRUCCIONES


Las instrucciones disponibles en un lenguaje de programación dependen del tipo de lenguaje. por
ello, en este apartado estudiaremos las instrucciones básicas que se pueden imple-
-acciones-
mentar de modo general en un algoritmo y que esencialmente soportan todos los lenguajes. Dicho de
otro modo, las instrucciones básicas son independientes del leqgqqje.
I a clasificación más usual, desde el punto de vista anterior, es:

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.

3.4.1. lnstrucciones de as¡gnac¡ón


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

a) A e- 8 0 la variable A toma el vctlor de : - .

b) ¿Cuál será el valor que tomará la variable C tras la ejecución de las siguientes instrucciones?
A<*L2
B<-A
teñ

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

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


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

Tabla 3.1. lnstrucciones/acciones básicas

fipo de insFr¡cción Pseudocódigo inglés Pseudocódigo español

comienzo de prceso begin inicio


fin de proceso end fin
entrada (lecturar read leer
salida (escrirura; write escribir
asignación A<- 5 B<-7
Estructura general de un p,ro,g-¿-z 71

c) ¿Cuál es el valor de Ia variable AUx al ejecutarse la instrucción 5?

1. A <- 10
2. B <- 2A
3. AUX <- A
4. A <- B
5. B <- AUX

. en la instrucción 1, A toma el valor 1 O


o en la instrucción 2, B t"omael valor 2 0 I

o en la instrucción 3, AUx toma el valor anterior de A, o sea 10


o en la instrucción 4, A toma el valor anterior de B, o sea 2 0
o en la instrucción 5, B toma el valor anterior de aux, o sea 10
o tras la instrucción 5, AUx sigue valiendo 10
d) ¿Cuál es el significado de N <- N + 5 si N tiene el valor actual de 2?

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).

3.4.2. lnstrucciones de lectura de datos (entrada)


Esta instrucción lee datos de un dispositivo de entrada

¿Cuál serd el significado de las instruccioneis siguientes?

a¡ Teer(NUMERO, HORAS, TASA)

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.

NUMERO <_ L2325


HORAS 32
TASA "_
E 12OO

b) Jeer (A, B, C)

Si se leen del terminal LO A, 2 O 0, 30 0, se asignarían a las variables los siguientes valores:

A= 100
B= 200
c = 300
72 Fu nda mentos de prog ra mación

3.4.3. lnstrucciones de escritura de resultados


(salida)
Estas instrucciones se escriben
en un dispositivo de salida.
Explicar el resultado de la ejecuciónie-las
siguientes instrucciones:
4e100
B <- 200
c <_ 300
escribir (A, B, C)

,"T':i" o imprimirían en la impresora tos valores


to o, 20 o y
""rffJi'Hltffi;: I 30 o que

3.4.4. lnstrucciones de bifurcación


El desarrollo lineal de un programa se
interrumpecuando se ejecuta una bifurcación.
ciones pueden ser, según ei pinto d"l Las bifurca-
pr;g;;;a a donde se bifurca. hacia adelante o hacia
atrás.
Bifurcación adelante
Bifitrcación atrás
(positivo)
lnegat^'o)
instrucclon 1 ::s -::c:ion 1
instruccion 2 :::s::::::on z <-l
instruccion ::---:-:c:¡:r
3
3 I

_l
rnstruccron B
:::s::::cicn 12

ultima instruccion

en el flujo de un programa pueden


¿i.illjrlifut"aciones realizarse de un modo incondicional
o con-
BiJfurcación inconclicional" la bifurcación
se realiza siempre que er flujo
la insrucción sin necesidad a.r del programa pase por
.urfiir"ri"
¿. ninguna condición.
Estructura general de un programa 73

Bfurcación condicional:la bifurcación depende del cumplimiento de una determinada


condi-
ción' Si se cumple la condición, el flujo sigue ejecutando la acción r:. Si no
se cumple, se ejecuta la
acción rt.

3.5. ELEMENTOS BÁSICOS DE UN PROGRAMA


En programación se debe separar la diferencia entre el diseño del algoritmo y su implementación
en
un lenguaje específico. Por ello, se debe distinguir claramente .-lo, conóeptos áe programación
"rtSin embargo, unuuJrqi" ," .o--
y el medio en que ellos se implementan en un lenguaje específico.
prendan los conceptos de programación, cómo utilizarlos, la enseñanza
de urinuevo lenguaje es rela-
tivamente fácil.
Los lenguajes de programación los restantes lenguajes-
-comoasí como reglas puá tá, que tienen
que se utilizan como bloques constructivos,
elementos básicos
esos elementos se combi-
nan. Estas reglas se denominan sintaxis del lenguaje. Sólaminte las instrucciones
sintácticamenre
correctas pueden ser interpretadas por la computadora y los programa que contengan
e11ores de sin-
taxis son rechazados por la máquina.
Los elementos básicos constitutivos de un programa o algoritmo son:
o palabras reservadas (inicio, f in, si-entonces . . ., etc.),
o identificadores (nombres de variables esencialmente),
. caracteres especiales (coma, apóstrofo, etc.),
. constctntes,
o variables,
o expresiones,
. o instrucciones.

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

El amplio conocimiento de todos los


elementos de programación y
constituven las ,a*i.á, a" p.o_nrááu.i; el modo de su integración
::¿";X-*ramas q* todo buen programador debe

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.

EI bucle de la Fisura 3'3.esinfinito,


ya que las instrucciones (l), (z) y (3)se
damente, pues no exíste sarida ejecutan indefini-
¿er uucrá, aiil una dererminada condición.
jJ#::?,ff1[1,1"J:":HH"ilo .áiá*una"rmptirr.
condición. er bucre dejará deser infiniro
,,, y tendrá

tntcto

SUMA O

/ reer N (1)

Bucle SUMA e-
(2)
SUMA + N

// escribir
surva (3)

Figura 3.3. Bucle infinito.

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

tntcto tntcto Intcto

Bucles independientes Bucles an¡dados Bucles cruzados


(no es correcto su diseño)

Figura 3.5. Tipos de bucles.

3.5.2. Contadores
Los procesos repetitivos son la base del uso de las computadoras.
En estos procesos se necesitan 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

CONT <- CONT + 1

Figura 3.6. Ejemplo de contador positivo.

Ejemplo 3.1

copias de un informe de ventas,


l:::;:r !::;;cincuenta ¿cuát sería et diagrama de Jtuio que resot-

La tarca implica realizar cincuenta veces


la impresión de una copia del informe.
contador r se inicializa a 7, el valor de este contaáor coincidirá.,
Dado que el
bayan tealizado. Cuando número de copias que se
r tome r;lr; ! il ,lgriri"*¿ ár" ," üu.¿n "rrealizado
"i cincuenra copias.

le-l+1
78 Fundamentos de programación

producto <- 0
CONT <- n

producto <- producto + m


CONT <_ CONT- 1

Figura 3.7. Bucle contador negativo.

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

80 Fu ndamentos de prog ra maci ón

N<-0
SUMA <- O

N<-N+1
SUMA <-
SUMA + N

escribir
K, SUMA

3.5.4. Decisión o selección


Cuando el programador desea especificar dos o más caminos alternativos en un algoritmo (o un pro-
_rrama). se deben utllizar estructuras de decisión o selección.
Una instrucción de decisión o selección evalúa una condición y, en función del resultado de esa
coradiqló1.-se fifurcará a un determinado punto.

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

también realizar diferentes acciones para el caso de altemativas múltiples. En el caso de


que i¡ '-t'n-
dry1-Qg ofreciese clngo P9¡ib19s soluciones, se representaría como ..; !
,!t./'¿
!,tt v{)i
i

acción S1

3.5.5. tnterruptores' /.:r:,'


l)n interruptor o conmutador (switch) veces se les denomin a indicador" b-qndera (flag)-*9! trp
-a
vg1ülc-+ue pugd-e tomar diversos valores a 1o largo de la ejecución del pro€rama y que
permile
comunicar información de una parte a otra del mismo' Los intemrptores pug4Illq¡oar-dor¡.alotcs
difqrsnle-s--1J-0_.'_(D__" ahí su nombre de inten-r"rptor, encendrdo ll I *?-peS-do
'' ' air-r-,9r-
to' / "cerrado ,)

Si SW es igual a 1, se ejecuta la acción S1, y si SW es igual a 0, se ejecuta la acción 52'

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.

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


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

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

3.6. ESCRITURA DE ALGORITMOS/PROGRAMAS


La escritura de un alsoritmo mediante
una hemamienra de programación
ble y estructurada, de"modo que su t""tr.u'rá.üte debe ser lo más clara posi-
y su posterior codificación en un
considerábi.;;;;; el entendimienro del algoritmo
lenguaje de programación.
Los algoritmos deben ser escritol-en
r.ng"u¡.. similares a los programas. En nuestro
lizaremos esencialmente el lenguaje
,rgo.ídi.", basado * rr"JJ.odigo, y ra estructura libro uti-
lógica de los-prograniu' del algo-
.n r.rd;i""áJ prog.u-ución estructurado;
:]:f"ií:$:Há1a "'.¡ro' "r por
un algoritmo constará de dos componente s:
u,a cctbecera de programa y un bloque algoritmo.
La cabecera t)e programaes una acción
simple qr. .o-i"nrui"n ru palabra algoritmo.
palabra, estará seguida por el nomb." Esta
urignuáo ui p.ág.u*u .áñi";;
El bloque algorilmo es el resto del"programa
acciones de declaracióny las acciones ) consta de áos componentes o secciones; /as
,¡"ríroUnr.
Las declaraciones defineno declaran
1as vanables y constantes que
tengan.nombres. Las accio-
deterá reatizarra computacion cuunao er
i:'X:'::::'";;:H?:"::HX','.-ü:X;,:""*-ente ?lgo-

Algoritmo
cabecera del c::!¡::ra
secc¿on de cJec a::::cr
seccion de ac::::=-s

3.6.1. Cabecera det programa o algoritmo


Todos los algoritmos v programas
deben comen zat coÍtuna cabecera en la que se exprese
rlcador o nombre to''á,ponái.nte el identi-
con ru puüú.u
pro-tramación' la palabra reservada
;;;;;;;,"i"i.'", renguaje. En ros ¡engua.jes cre
suele ser prosram. En argoritmi;;;A;;#"?in§rra*".

aiErorjtmo DEMOl

3.6.2. Declaración de var¡ables


En es¡a sección se declaran o describen
todas las variables utilizadas en
el algoritmo, listándose sus
Esta comienza r" p"iáu.a reservada va¡ (abreviar,ra
;:T:,'.il;li:,.]'n,!Ti:#:tipos' "'"i0, "",
var
;= .-artables_1
-l-- '=::ables 2

': es-n

donde cada lista cle t arictbles es una


simple o una rista de variables separadas
cada tipo es uno de los tipos de
datos'ariable
por comas y
iarir., frrirro, real, ,rrirri, . tógico).
Estructura general de un Programa 85

Por ejemplo, la sección de declaración de variables

var
entera; Numero-EmPleado
real: Horas
real: Impuestc
reaf : Salario !l "' a'

o de modo equivalente

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

declara que sólo las tres variables Hora, rmpuesto Salario


y son de tipo real'
nárytlres de va-r!abl91 significatn os que sugie-
Es una bugna prdctica le prqgramación utilizar
programg
rq"*tá _qiñ ¿tiá,, iiprit"intoi, i" l*
eso harti mds fácil y legibLe e-l
q:ue índlquery-cómo se utili:a la rariable'
Tanúién es b*qna prdc-tiia incluir breves cománturios
vaf
o de empl eaoo
1üTer
ly'' o'r, .
entera : Numero-emPleado '
/ /horas trabajadas
?

rea-Z ; Horas
ImPuesto //impuesto a Pagar
Salario //cantidad ganada

3.6.3. Declaración de constantes numéricas


nombre. Su formato es:
En esta sección se declaran todas las constantes que tengan l¡
! ttt
const f t '-' . , 't {

pi = 3 .14t592
¡r*.¡6 = 43
horas = 6.50
del algoritmo.
Los valores de estas constantes ya no pueden variar en el transcurso

3.6.4. Declaración de constantes y variables carácter


declaradas en la sección del
Las const-antes de carácter simple y cadenas de caracteres pueden ser
programa const, al igual que las consta,nt-e§ numéricas'

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

Las variables de caracteres se declaran de dos modos:

1. Almacenar un solo carácfet.


var cat:acter: nombre, inicial, nota' letra

Se declaran nombre, inicial, nota y 1etra, que almacenarán sólo un CaráCI.i


86 Fu ndamentos de prog ram aci ón

2, Almacenar múltiples caracteres (cadenas). El aLmacenamiento de caracteres múltiples depen-


derá del lenguaje de programación. Así, en

BASIC nombre variable cadena = caclena de caracteres


OMBRE$ = <<Pepe Luis Garcia Rci:rr-ez-
Pascal formato tipo array (véase Capítuio 6).
I Existen algunas versiones de Pascal, como es el caso de Turbo Pascal, que tienen imple-
mentados un tipo de datos denominados string (cadena) que permite declarar va¡iables de
'I caracteres o de cadena que almacenan palabras compuestai de diferentes caracteres.
vat nombre: stringl2O] ; enTurbopascal
var cadena[20]: nonbre enpseudocódigo

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

2. En las versiones BASIC de Microsoft (BASICA, GWBASIC y MBASIC) los comenrarios se


incluyen en Iíneas que comienzan por el carácter apóstrofo ().
--- *** autor J.R. Mackoy ***
--- s:brutina ordenacion
3. Eristen algunas versiones de BASIC como HP BASIC, VAX BASIC, etc., que utilizan
el
carácter admiración (l) en lugar del carácter apóstrofo.
--- 1--a: J.R. Mackoy ***
: -:-.-'t:a crdenacion

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

c --- M^.li-ñ\z ***


ordenac ion
Estructura general de un programa 87

PASCAL

Lqs qomeMe loÁ§tmbolq§

o bien:

(* autor J.R. Mackoy *')


{subrut-ina ordenacion}

MODULA-2

t--SSqq{nejl tAuo§§ff rlsieuau__e-Utre-1ossíUü*o"!g§


l* *)

tS§-sa!0§rlta(i,p§-Le-,9l19,1_99?I!entrecaracteresliayeq({})
{Esto es un comentario en C}

C++

,\drnlle, a&mtás -dp^!o.-p -caractere!.{?u"' la doble barra inclinada


//EsLa es un comentarió en C++

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

3.6.6. Estilo de escritura de algoritmos/programas


El método que seguiremos normalmente a lo largo del libro para escribir algoritmos será el desórito
ál comienzo del Apartado 3.6.

aTgoritmo rdánti f icador / / cabecera


/ / seccion de declaraciones
var tipo de datos: lista de identificadores
congt 1is1-a de identificadores = valor
inicio / /c¡terf¡o del algorii-mo
<sentencia S1>
<sentencia 52>

.sentencia Snt
in
88 Fundamentos de programación

NOTAS:

I. En ocasiones' la declaración de constantes


y variables las omitiremos o se describirán
tabla de variables que hace en una
sus mismas funciones.
2. Las cadenas de caracteres se
enceffarán entre comillas simples.
J. utilizar siempre sangrías en los bucles o en aquellas
lnst uiclánes que proporcionen legibi-
lidad al programa, como inicio y f in.
Ejemplo 3.7
algoritmo raices
,,',/¡'esuelve una ecuacion de 2 grado
"
var real: a,b,c,d
', .t
inicio -
-Ieer(a, b, c)
¡
1, {
Deb^2-4*a*c I
¡
siD<0entonces
escribir ('raices complej as
si-no
siD=0entor¡.ces
escribir l-b/2*a) t

si-no
escribir(. (.-b raiz2 (D) ) / (.2*a) ) :
escribir,,-b-Laj /2tD)) ,2*a, ) !
fin-si
fin-si
Ein

3'1' Determinar la cantidad total a pagar por una llamada


telefónica. ,"nl.loo en cuenta lo siguiente:
o toda llamada que dure menos de tres
minutos (cinco pasos) tiene un coste de 10 pesetas,
o cada minuto adicional a partir de los
tres primeros p;r;;;Jn,uoo, y cuesta 5 pesetas.
";r,
Andlisis

El algoritmo de resolución del probrema


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

: :i:.;;:.: es menor que 5, e1 precio es de 10 peseras,


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

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


Estructura general de un programa 89

Variables

NPASOS Número de pasos de 1a llamada


N Número de pasos que exceden a 5
FACT Importe o precio de la llamada

hacer
FACT <- 10
N <- NPASOS-S

3'2' Escribir un algoritmo que calcule el producto de los primeros


n números naturales.

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

La ecuación de segundo grado es Ax2 + Bx + C = 0 y las soluciones o raíces de la ecuación son:

-B+ 82 _ 4AC -B+^{E'4AC


X1 = X2=
2A 2A

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

D=0 Y1 - -R/2a Y) - -A/)^


D<0 X1 ¡t Y)

no tienen solución real..

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

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

3'13' Calcular la nota media de los alumnos


"- notas de cada alumno.
de una clase considerando n-número de alumnos
y c-número de
* 3.14. Escribir la suma de los diez primeros números pares.
un algoritmo que leá lo. ouio. á. .nt uhu de un
l3f§-gsc¡bir
\_,- ' números positivos. archivo que sólo contiene números y sume los
-- 3'16' Desarrollar un algoritmoque determine en un conjunto de cien números
o naturales:
¿Cuántos son menores de 15?
o ¿Cuántos son mayores de 50?
¿Cuántos están comprendidos entre 25 y 45i,
=_=\:
(3.1y Sumar una secuencia d. detectando si están ordenados.
: )r.fs. ¿Nes primo? "nt.ro,
i- l
.L
CAPITU LO
'41 l

INTRODUCCION A LA PROGRAMACION
ESTRUCTURADA

CONTENIDO

4.1. Técnicas de programación.


4.2. Programación modular.
4.3. Programación estructurada.
4.4. Estructura secuencial.
4.5. Estructuras selectivas.
4.6. Estructuras repetitivas.
4.7. Estructuras de decisión anidadas. .1"
4.8. Estructuras repetitivas anidadas.
4.9. La instrucción ir_a (goto).
ACTIVIDADES DE PROGRAMACIÓN RESU ELTAS.
EJERCICIOS.

En la actualidad, dado el tamaño considerable de las memorias centrales


y las altas velocidades de los procesadores por ejemplo, los
-citemos,
microprocesadores como el 80486, Pentium y Pentium Pro de lntel, 68030
de Motorola. PowerPC de Apple e lBM, de 16 y 32 bits-, el estilo de
escr¡tura de los programas se vuelve una de las características más sobre-
salientes en las técnicas de programación. La legibilidad de los algoritmos
y posteriormente de los programas exige que su diseño sea fácil de com-
prender y su flujo lógico fácil de seguir.
La programación modularen6eñará la descomposieión de un progra-
ma en módulos más simples de programar, y la programación estructu-
rada permitirá la escritura de programas fáciles de leer y modificar. En un
prograrpa estructurado el flujo lógico se gobierna por las estructuras de
control básicas:
1. secuenciales,
2. repetitivas,
3. selección.

5
95 Fu ndamentos de prog ram ació n

En este capítulo se introducen los tres conceptos anter¡ores: secuencial


instrucción a instrucción-, repetitivo de repetir
-ejecución
una serie de operaciones- y selectivo -capacidad
de seleccionar una
acción entre un conjunto de alternativas-posibilidad
específicas.
El estudio de las estructuras de control se realiza basado en las herra-
mientas de programación ya estudiadas: diagramas de flujo, diagramas
N-S y pseudocódigos.

4.1. TÉCNICAS DE PROGRAMACIÓN


Las herramientas de programación vistas en el Capítulo l. fundamentalmente los diagramas de flujo,
fueron la primera representación gráfica utilizada para e1 diseño de algoritmos y programas. Este tipo
de herramienta constituye el fundamento de programacrón convencional clásica y es de utilidad para
la solución de problemas de pequeña y mediana complejrdad. Sin embargo, para problemas com-
plejos el diseño de algoritmos implica un aumento considerable de la representación gráfica, una
reducción de la legibilidad del algoritmo y un aumento de la memoria física de la computadora ocu-
pada por el programa. Para evitar estos inconvenientes. las nuevas teorías de programación se cen-
tran en las técnicas de programación modular y progrontación estructurada, de modo que se pueda
conseguir un programa eficaz. El diseño de un programa entraña la descomposición del problema en
módulos (partes independientes) nndular-.Ia programación de cada módulo
mediante métodos estructurados -programación estntcturodo- y su unión posterior mediante pro-
-programación
cedimientos ascendentes o descendentes-

4.2. PROGRAMACIÓN MODULAR


L9 programación modular es uno de los métodos de diseño más flexibles y potentes para mejorar la
ploductividad de un programa. Eqprqgramación modular. e1 proerama se divide en módulo,s (pafies
independientes). cada una de las cuales ejecuta una única actiridad o rarea y se codilican indepen-
dientemente de otros módulos. Cada uno de estos módulos se analizan. .odifi.un y ponen a punto
por separado.
C¡.dq programa contiene un módulo denominado progranru ¡tringipal
-que controla todo lo que
su!-ede; se transfiere el control a submódulos (posteriormente se denominarán subprogramas), de
mld-tr Que ellos puedan ejecutar sus funciones; sin embargo, cada submédulo devuelve á1 controi al
nlriJuk,pnneipal cuando se haya complelado su tarea. Si la tarea asignaclq a cada submóclulo es
demasiado compleja, éste deberá romperse en otros módulós más péqueños. EI pioceso sucesivo de
subdi" r:i,in ,-le rnódulos continúa hasta que cada módulo tenga solamente una tarea específica
Que
eJecuur. Esr¿ urea puede ser enfradq, salida, manipulación cle datos, cc¡nfrol de otro-s móduloi o
algtttta combitu¿ciótt de éstos. Un módulo puede transferir temporalmenfe (bfurcación) elcontrol a
otro módulo: sin embar-so, cada módulo debe devolver el control al módulo del cual se recibe ori-
ginalmente el conroi.
Los módulos son independientes en el sentido en el que ningún módulo puede tener acceso direc-
to a cualquier otro módulo. con excepción del módulo al que llama y sus propios submódulos. Sin
embargo. los resuitados producidos por un módulo pueden ser utilizados por cualquier otro módulo
cuando se transfiera a e11o: ei control.
lntroducción a la programación estructurada 97

Módulo 3 Modulo 4

Módulo 31 Mooulo 42

Módulo 21 Módulo 22

Figura 4.1. programación modular.

Dado que los módulos son independientes, diferentes programadores


pueden trabajar simuitá-
neamente en diferentes Parles del mismo programa.
Esto reduci=rá el tiempo del diseño del algontmo
y posterior codificación del programa. Adémás, un módulo
se puede modificar radicalmente sin afec-
tar a otros módulos, incluso sin alterar su función principal.
-La descqmposición de un programa en móduloi independientes más simples se conoce
como el método de «divide y vencerás>> (divide and también
conquer). Se diseña cadá módulo con indepen-
dencia-de^los demás y siguiendo un método ascendente
o descendente se llegará hasta la descom-
posición final del problema en módulos en forma jerárquica.

4.2.1. Tamaño de los módulos


una dificultad en la programación modular reside en la
determinación del tamaño de un módulo.
Aunque no exista una regla fija que permita definir
el tamaño estándar del módulo, una buena apro-
xi!+,aciér es qensiderar móduros-def tamaño físico de
Evidentemente no siempre_se c_onseguirá descomponer
,"u pág;; itó ¿ó r;;;;i*ii..i"r"rl.
un problema "en módulos de este tamaño,
pero el programador deberá realizar ésfuerzos para
su diseñó.
Puede no ser claro lo que debe incluirse dentro
de un módulo. Desgraciadamente, no hay
reglas' pero tal como se ha dicho antes, un módulo
de una o dos líneas probablemente será dema-
siado corto y será mejor incotporarlo en otro módulo;
ror ,roJuror-g.ur,a., de 30 o más líneas pro-
bablemente eiecutarán tareas múrtiples y se deberán
romper.n uriáua", más pequeñas.
Ejemplo 4.1
Se deseq diseñar un algoritmo que realice las sigwientes tqreas;
t.,' impresión de cabeceras de un informe.
{. lectura de datos.
lo ejecutar cálculos,
tro
imprimir Iíneas detalladas de información.
l. imprimir totales.

.'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:

o Llamada a submódulo «impresión de cabeceras»


o Llamada a submódulo <<proceso de datos».
o Llamada a submódulo «impresión de totales».
o Fin de proceso.

Su.bmódulo impresión de cai¡eceras..


o Instrucción para impresión de cabeceras.
o Retorno al módulo principal.

Submódulo proceso de datos.'


. Lectura de datos.
o Ejecución de cálculos
o Impresión detallada de líneas.
o Retorno al módulo principal.

Submódulo impresión de totaf es..

o Instrucciones de impresión de totales.


o Retorno al rnódulo 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.

4.2.2. lmplementación de los módulos


La pro-uramación modular se implementa utilizando módulos que toman diferentes nombres, según
e1 len-uuaje de programación:funciones en C/C++, subtutinas en BASIC, procedimienlzs en pasc;al,
subrurittas en FORTRAN, secciones en COBOL y funciones como módulos comunes en todos los
leneuajes (C. C++, Ada, etc.).
En el Capítulo 5 se analizarán con detenimiento 1a programación modular, el diseño de los
módulos r la comunicación entre ellos y el módulo principal.

Módulo
principal

Módulo de Módulo de Módulo de


impresión proceso de impresión
de cabecera i datos de totales
Figura 4.2. Estructura modular simple.
99

4.3. PROGRAMACIÓN ESTRUCTURADA


f.f,.téqninoprogramaciónestructuradaseref\ereaunconjuntodetécnicasquehanidoer';..;...
nandodesdelosprimerostrabajosdeEdsgarpi:ttttu'gttas"técnicasaumentanconsiderablemen:;''
ti"mpo req,erido para escribir' verificar' depur-
piociuótividaa a"t programa reáuciendo "t "t"'ááá
utiliza un número limitado de estructur¡'
y mantener lo, progrurrir. f-u progtu*aciónestructuraia reducen los errores'
de los problemar {l lg, consiguiente,
de control que minimiz* i" verificar' leer y man-
""?pi"¡idad prolru*us mát iáóil"s de escribir'
La programación estructura¿a ná"e to,
ios irogru*u* deben estar dotados de una estructura'
-*l;;;;**ii¡d*
tener.
iirirtrradaes el conjunto de récnicas que incorporan:
{.'' clis eño decendente ( toP - down )'
s

recursos absfractos,
:'o
,\. estructuras básicas.
I

4.3.1. Recursos abstractos


de los recursos Concretos
La programación esüucturada se auxilia delos recursos abstractos en lugar
de programación)'
á" á*""t" dispone (un determinado lenguaje
Descomponer un programa en .término, .d,
irrírro, abstractos -según Dijkstrp- consiste en
descompone, oru d"t"ñi'uáu ut'io' ""*p1"lu "'
r"il*.f¡i¡úmero de acciones más simples'
y que constituirán sus instrucciones'
ejecut;;;;;-;computadoia
capaces de ser

4.3.2. Diseño descende nte ltop'downl


descompone en una
proceso mediante el cual un problema se
E\ diseño descendente (top-down)es el
(stepwise)'La metodología descendente consis-
ñiie de niveles o puroi"rí""riro, ¿" refinamiento a'* de modo que se relacionen
te en efectuar una relacián entre las ,u"".lrur-"tupu, "tqo"t1'ración' descompone el problema en
¿" iniái*utión' Fs decir' se
unas con otras mediante entradas y salidas dos puntos
qo" ," pr"o" considerar cada estructura desde
etapas o estructuras i".árqol.ur, dá modo
de vista: qué hace Y cómo lo hace ' forma:
estnlcturas se consideran de la siguiente
si se considera un nivel n de refinamiento, las
4'4'
El diseño descendente se puede ver en la Figura

Nivel n: vista desde el exterior Nivel n + 1:vista desde el interior


" ¿cómo lo hace?"
" ¿qué hace?"
módulo'
Figura 4.3. Vistas interior y exterior de un
100 Fundamentos de programación

Figura 4.4. Diseño descendente.

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


En mayo de 1966 Bóhm y Jacopini demostraron que un programapropio puede ser escrito utili-
zando solamente tres tipos de estructuras de control:

\' secuenciales.
\o selectivas,
{".o repetitivas.

un programa se define como propio si cumple las siguientes características:


. posee un solo punto de entrada y uno de salida o fin para control del programa,
o existen caminos desde la entrada hasta la salida que se pueden seguii y qr. purun por todas
partes del programa,
o todas las instrucciones son ejecutables y no existen lazos o bucles infinitos (sin fin).

4.4. ESTRUCTURA SECUENCIAL


La estructura secuencial es aquélla en 1a que una acción (instrucción) sigue a otra en secuencia. Las
Iareas se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente
hasta e1 final del proceso. La Figura 4.5 representa una estructura secuencial.Laestructura secuen-
cial tiene una entrada y una salida. Su representación gráflca se muestra en las Figura s 4.5, 4.6 y 4.7 .

Figura 4.5. Estructura secuencial.


lntroducción a la programación es't¡tñtuila l0l

acción 1

acción 1

accron n

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

'":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.

La suma S de dos números es S = A + B. El pseudocódigo y el diagrama de flujo correspon-


dientes se muestran a continuación:

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

NOMBRE, SALARIO BRUTO


SALARIO-NETO

Diagrama N-S

leer
nonüre, horas, precio
salario*bruto (- horas * orecio
impuestos <- 0.20 * salario.¡.úi"

salario_neto e- salario_brut.o - impuestos


escribír
nombre, salario_bruto, salario neto
104 Fundamentos de programación

4.5. ESTRUCTURAS SELECTIVAS


La especificación formal de algoritmos
tiene.realmente utiridad cuando
descripción más complicaaa
quJ r;; ji;;';;.ira er algoritmo requiere una
de insrrul.i"r*. tr,. es er
numero de posibles alternativas caso cuando exisren un
resurra;r;; d" iu .rutru.iJ;á;;;;
determinada condición.
.,,i?ilf?:'";:;;::n::tr';,_.^,:ri:;:;:,:,y,;,"d,;*,.u,, a" ur,iq,",J,i,'Jü, au,o.
En las estructuras selectivas
realiza una opción u otra' Las
tt íra condición y en función der resultado
""¿¿u
condicio*il..rp..ifican de ra misma se
tación de una estructura selectiva usanáo lógicas. La represen-
r" rru.. .on prrabras en
pil;ó"üo (if, then,
"^p..rion"r
,"j?i131 ; ?l
"i
ill.:,ffi
Las qstructuras
:: * ;; i,;:ffi ffi ; ffi ;H".T?".- á' ; ;; ; ;; ;;
u .oÁü
er-se o bien" en

selecrivu, o ¿,..nJriJir.a.n ,".,


o simples,
-o dobles.
.o múltiples.

4.5.1. Alternativa simple (si_enronces


/ if _then)
La estructura alternativa simple
si-entonces (en inslés. if -then
o bien rF-THEN) ejecuta
#,ffi"ffiXX1l,li'lu"'*áo " "-pr" unu ¿.,.. truir.;ra.,ur. La selección si-enronces
o si la condición
es verdadera, entonces
acción.o-pr.riu y consrar de varias acción S1 (o acciones caso de ser
,Jt""?Jll]" s1 una
o si la condición es f,alsa, entonces
no t u'."r ru¿u.
I-a: representaciones gráficas
de la estructura condicional
simple se muestran en la Figura
4.g.
a)
c)
¿condición?

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,",,

lntroducción a la programación esfructurada f 0S

. Obsérvese que las palabras del pseudocódigo si y f in-=-s-i.se-ali:re¿u ve{lealluente indqnran-


do (sangrando) la <accion> o bloque de acciones.

4.5.2. Alternativa doble (si-entonces-si_no / if -then-e1.E_e)


La estructura anterior es muy limitada y normalmente se necesitará una estructura que permita ele-
gir entre dos opciones o alternativas posibles, en función deI cumplimiento o no de-uná determina-
da condición.
Si la condición C es verdadera, se ejecuta la acción S 1 y, si es falsa, se ejecuta la acción S 2 .

¿condición?

a) b)

Ps eudoc ódigo e n castellano Pseudocódigo en castellano

eí <condicion> entonces (51 accion compuesta)


<accion 51> si <cord.lclol-l> entonces
si-ng <acclonS77>
< accion 52>
fin_si

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)

Figura 4.9. Estructura alternativa doble: a) diagrama de flujo;


b) diagrama N-S; c) pseudocódigo.

Obsérvese que en el pseudocódigo las acciones que dependen de entonces y si_no están
indentadas (sangradas) en relación con las palabras 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.

si la ecuación es ax + b = 0, a y b son 1os datos, y las posibles soluciones son:

. a<>0 x=-b/a
. a=0 b<>0 entonces «soluciónimposible,
. a=0 b=0 entonces «soluciónindeterminada»

El algoritmo correspondiente será:

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.

La media aritmética de n números es:

xl+ x2+ x3+...+ xn


-n'
En el problema se supondrá la entrada de datos por el teclado hasta que se introduzca el primer
número negativo, en nuestro caso -99. Para calcular la media aritméticá se necesita saber cuántos
nimeros se han introducido hasta llegar a -99; para ello se utilizará un contador C que llevará la
cuenta del nrimero de datos introducidos.

VAITIABI FS:

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


m {medial: ::ea-

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

F'n este ejemplo se observa una bifurcación hacia


un punto referenciado por una etiqueta alfa-
numérica denominada (media) y otro punto referenciado por (datos).
Trate el alumno de simplificar este algoritmo de modo que sólo contenga
un punto de bifurca-
ción.

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:

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


una tarifa determinada que se
debe introducir por teclado al igual que el número de hoás y el
nombre del trabajador,
a las horas superiores a 35 se pagaráncomo
extras al precio áe 1.5 horas normales,
a los implestos a deducir a los trabajadores varían
en iunción de su sueldo mensual:
sueldo <= 20.000, libre de impuestos,
- las siguientes 15.000 pesetas al 20 por 100,
- el resto, al 30 por 100.
-
Andlisis

Las operaciones a realizar serán:

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

Representación del algoritmo en pseudocódigo

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

si sbruto <= 20.000 entonces ]

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

Representación del algoritmo en diagrama N-S

tntcto

leer nombre, horas, tarifas

horas < = 35

SI no

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

sbruto < = 20.000


no

sbruto > 20.000 y


sbruto < = 35.000
s, no

impuestos e- 0
impuestos e-
impuestos (-
15.000 + 0.20 +
(sbruto-20.000) x 0.20
(sbruto-35.000) * 0.30

sneto e sbruto - impuestos

escribir nombre, sbruto, impuestos, sneto

fin
lntroducción a la programaciónñ@ú
Representación del algorifmo en diagrama de
flujo

leer NOMBRE
HORAS. TARIFA

SBRUTO <_ SBRUTO <-


HORAS * TARIFA 35*TARIFA+(HORAS
-35)*1.5*TAR|FA

IMPUESTOS <_ IMPUESTOS e-


(SBRUTO - 20.000) *
15.000 0.20 +
*0.20
- 35.000) * 0.30

SNETO <-
(SBRUTO.
IMPUESTOS

NOMBRE, SBRUTO
IMPUESTOS, SNETO
110 Fundamentos de Programación

Ejemplo 4.7

Empleo de estructura selectiva para detectar si un número tiene o no parte fraccionariq.

aTgo¡itfro Parte-f racc ionar ia


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

Eiemplo 4.8

Estructura selectiv(t pqrq averi7uqr si un año leído de teclado es o no bisiesto.

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

4.5.3. Alternativa múltiple (segun-sea, caso de / case)


la práctica-, es necesario que existan más de dos elecciones
posibie' :''::
Con frecuencia
-en
ejemplo, en la resolución de la ecuación de segundo grado existen tres posibles altematir " >e:
nulo o po.sitivo)' Este problema' como
seguir, según que el discriminante sea negativo,
"á-iror'o se podría resolver por estructurás alternativas simples o
dobles' anidadas o e r
verá más adelante,
grande puede plantear serios pro'
cascada;sin embargo, este método si el número de alternativas es
blemas de escrituridel algoritmo y naturalmente de legibilidad'
podrá tomar n valor.es distinlgs, I '
La estructura ¿e oe.irfrn -,iltiple evaluará una exple¡ión gye
ualorei en 1á condición,ie realizará qna de las.n accione-s'
:,;É;_u-{;;6" qrg;iü;';;;É ;i"s,"grrirá.rn determinl{g c¿mino entre los n poúbles'
o*r"Ñ"ilgUi, ar húiá'ü;tárgoiit*o
" '"j;;"pr;:éntá.i0, 4'10'
gráficade ta esrructura de decisión múltiple se representa en la Figura

I[adef o^ 1: ModeJo 3 (sinPlliicado) :

segun-Eea exPresion (E) hacer opcion E de


eL: accíon SLL
accíon Sl2
tin-opcion
accion SIa
e2: accion S2I
accion 522 l,Iodelo 4 ( sinPTif icado) :

casod.e E hacer
acciort s2b

enr accion S31 tirr-t...,


a.ccion 532

Modefo 5 (simPTificado) :

acclon sip
si..no¡ accion Sx "lu.=nhacer
fin_segun

Modeio 2 (sinPlificado) : fir,


"i
segun E,n"."t

fin segun

Figura 4.10. Estructuras de decisión múltiple'


112 Fundamentos de programación

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

En inglés la estructura de decisión múltiple se representa:

case expresion of. cage expresion oÍ.


Iel] : accjon .9f Ie7] : accion S7
..e2) : accion 52 le2l: accion 52

-=:_ : accion Sn [enj: accion Sn


otherwise else
::cion Sx accion Sx
end_case end_case

La estructu¡a de decisión múltiple en pseudocódigo


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

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

o bien en el caso de instrucciones compuestas:

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'

algoritw Dia serna¡ra-modi f icado


var
entero : dia,d1
caracter : dial
In t ro d u ccíó n a t a ptog¡rattwiiio d rt5

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

eÉcribir( Diga el dia )

.leer( dia)
dia <- dia + d1

E¡egun-sea dia MOD 7 hacer


1:
escribir( 'Lunes' )
escribir( 'Martes')
3:
escribir (' Míercoles' )

/-
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'

pof la vadable LETRA, el algoritmo de reso-


Los valores de A, B, c, M, D y E se repfesentarán
lución del problema es:

algoritmo Cal i f I cacj ones


var
caracter: LETFA
entero : CALIFICACIONES

/.
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( )

si (numero >= 1) y (numero <= 10) entonces


gegun_gea numero hacer
1,, 3, 5, 7, 9 : escribir( impar )

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


fin_segun
fin_si
fin

{
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 )

SUMA <- SUMA + numero


.Leer (numero )

SUMA <- SUMA + numero


l. eer numero
( )

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

El bucle podrá también haberse terminado poniendo cualquiera de estas condiciones:


. hqsta_que TOTAL sea cero
o desde I hastaN

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 )

desde I para forl

' Modula-2 y QuickBASICiQBasic. enrre orros


{ I

lntrodueion a b p¡qratwiin *tmtrada 119

El algoritmo de suma anterior podría expresarse en pseudocódigo esándm


a1 gor i tmo SuMA_numero s
var
entero: \, TOTAL
real: NUMERO, SUMA
inicio
Leer (N)
TOTAL <- N
<- 0
SIIMA V*V'/
repeLir
-Zeer(NUMERO)
<- SUMA + NUMERO
SIIMA
TOTAL<- TOTAL _ 1
hasta-que TOTAL = 0
escribir(. 'La suma es', SUMA)
tf,n
.la
Los tres casos generales de estructuras repetitivas dependen de la situación y modo de con-
dición. La condición se evalúa tan pronto se encuentra en el algoritmo y su resultado producirá los
tres tipos de estructuras citadas.

. 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

Se ejecuta el bucle mientras se verifica una condición (K < n)'

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

3. La condición de salida se realizacon un contador que cuenta el número de iteraciones.

desde t - vt hasta vf hacer


S<-S+i
fin desde

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

4.6.1. Estructura mientras (',whi1e,, )

Pseudocódigo en castellano

mientras condicion hacer


accion S7
acc.ion 52

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)

Figura 4.11. Estructura mienrras: a) diagrama de frujo; b) pseudocódigo;


c) diagrama N-S.

La estructura repetitiva mientras (en inglés while o dowhile ..


hacer mientras) gsa,quélla en
que el cuerpo del bucle se repite mientras se cumple
una determinada condició.. Ú¿5
ciones gráficas son las anteriores. ffiesenta-
- . Cuando se ejecuta la instrucción mientras, la primera cosa que sucede es que se evalúa la con-
dtclqn (qna expresión booleana). si se evalúa/a/sa-, ninguna
u..ün se,toma y el programu p.;-ri;;
en Ia si-euiente instrucción.del bucle. Si la expresión
bo-oleana es vercladera,
cuerpo del bucle, después de lo cual se evalúa de nuevo la
," Lj".utu
expresión booleana."rton""., "t
Erte pro.esá se repi-
te una \. otra mientras la expresión booreana (condiciónj sea verdadera.
'ez

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 )

mientras numero 2 0 hacer


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

LnLcLo

contador e- 0

Jeer numero

mientras numero > 0

contador <- contador + 1

leer numero

escribir ( numeros en-leros , contador)

fin

La secuencia de las acciones de este algoritmo se puede reflejar en el siguiente pseudocódigo:

Faso :Pseudocédigo §ignificado

1 contador <- O inicializar contador a 0


2 (mrmero)
l-eer leer primer número

3 mientras numero > 0 hacer comprobar si número > 0


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

4 contador <- contador + 1 incrementar contador


5 Jeer(il-mero) leer siguiente número

6 fin_mientras seguir con el paso 3


7 escribir(contador) yisualizar resultados

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.

Ejecución de un bucle cero veces


Obsérvese que en una estructura mientras la primera cosa que sucede es 1a evaluación de la
expresión booleana; si se evalúa/a/sa en ese punto, entonces el cueryo del bucle nunca se ejecuti.
122 Fu nda mentos de prog ra maci ón

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 )

mient.ras numero > 0 hacer


C(-C+1
-7. eer ( numero )

fin_mientras

Bucles infinitos
Algunos bucles no exigen fin y otros no encuentran el fin por error en su 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 >=.

Terminación de bucles con datos de entrada


SUI qlgo.ll¡!_o_o-Brograma está leyendo una lista de valores con un bucle mientras, se debe
iñclüiálgun tipo de mecanismo para terminar e1 bucle. Existen cuatro métodos típicos para termi-
nar un bucle de entrada:
'''-
1. preguntar antes de la iteración,
2. encabezar la lista de datos con su tamaño,
, 3. ftnaltzar la lista con su valor de entrada,
.4. agotar 1os datos de entrada.

Examinémoslos por orden.


El primer método simplemente solicita con un mensaje al usuario si existen más entradas.

Sud+0
escribirt, Existen mas numeros en la lista s/n )

Leer(Resp) //variabte Resp, tipo caracter


mienÉras(Resp = S ) o (Resp -'s' ) hacer
escribir( numero )

f eer (l'l)
Suma <- Suma+N
escribir( Existen mas nume::os (s/n) )

Leer ( Resp )

fin_mientras

Este 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

El último método de agotamiento de datos de entrada es comprobar simplemente que no existen


más datos de entrada. Este sistema suele depender del tipo de lenguaje; por ejemplo, Pascal puede
detectar el final de una línea; en los archivos secuenciales se puede detectar el fin físico de archivo
(eod end of file).

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.

4.6.2. Estructura repetir ( " repeat', )

Existen muchas situaciones en las que se desea que un bucle se ejecute al menos una vez
antes de
comprobar la 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>

hasta_que <condi ciort> unE,LJ-


.- <condtcfon> --
end do
a) castellano á) inglés c) inglés

Diagrama de flujo Diagrama N-S

accrones

repet¡r condiciones

Figura 4.12' Estructura reperir: pseudocódigo, diagrama de flujo, diagrama N-s.

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 )

contador <- contador + 1


hasta_que contador > 30
escribirl 'Numeros leidos 30 )
fin

ol
126 Fundamentos de programación

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


-lo que sucederá después
a 30,
de 30 ejecuciones del cuerpo del bucle.

Ejemplo 4.20
Desarrollar el algoritmo necesario para calcular el factorial de un número N que responda a lafór-
mula:

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


El aTgori tmo correspondiente es:
algoritmo Factorial
var
entero: I, N
real: Factorial
inicio
//N >= 0
-leer (N)
Factorial <- 1
r<-1
repetir
Factorial (- Factorial * I
I<-T+1
hasta_queI=N+1
eÉcribirl El factorial del numero , N,
fin
Con una estructura repetir e1 cuerpo del bucle se ejeuÍa siempre al menos una yez. Cuando
-:t1!-Q--13stryc-9ión repetír se ejecuta, lo primero que sucede es ia ejecución del Uuct" y,'a-ó.o-n
tinuación, se evalúa la expresión booleanáresultanie de la condicióa.-Sise qv_alúa
como"falsa,,el
cuelpo del bucle se repite y 1a expresión booleana se evaiúa unu r.r.b.rpués de
cada iteraciónáel
cuelpo del bucle, la expresión booleana se evalúa; sí es verdctdera, el bucle termina y
sigue en la siguiente instrucción a hasta_que.
J el r'
-- programa

Diferencias de las estructuras mientras y repetir


La estructura mientras termina cuando la condición es falsa, mientras que repetir
' mina cuando la condición es verdadera.
ter-
o En 1a estructura repetir el cuerpo del bucle se ejecuta siempre al menos
una vez; por el
contrario, mientras es más general y permite la posibilidad áe que el
bucle pueda no ser
ejecutado. Para usar la estructura repetir debe istar seguro de que
el cuerpo del bucle
cualquier circunstancia- se repetirá al menos unu u".r.
-bajo
Ejemplo 4.21
Enco,ntrar el entero positit'o mayor (num) para el cual la suma I +2 +3 + ... + num es menor o
igual que límite.

2. Ilicta :zaa -:-.^-: :- _.--:a a 0.


J. Repeat: ,as a:c:::::s ::guientes hasta glle sulxa > limite:
. inc..:s_..cr ...: L.- _,
. añadir ¡ui.t a .<tra -
lntroducción a la programación estructurada 127
4. Restar nun a suma y decremenLar jlum
5. Visualizar en 1.
num y suma.

El pseudocódigo de este algoritmo


es:
aTgoritmo ¡/d sJ-queno
var
entero: num, limite, suma
inicio
Leer ( I imi te )
num é_ 0
suma é- 0
repetir
num (_ num + 1
suma l- suma + nutn
hast.a_que suma > limite
suma (- suma _ num
num c- num L
escribir (.num, suma)
fin

Eiemplo 4.22
Escribir los 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

Este sistema es conocido como interactivo


porentablar un <<criórogo imaginario,,
128 Fundamentos de programación

4.6.3. Estructura desde/para (" for " )

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:

desde v (- vi hasta vf [incremento para v <- vi hasta vf lincrementol


decremento < vafor> I hacer decremento<va7or>] hacer

fin desde finl>ara


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

Diagrama N-5, estructura desde


desde v (- vi haata vf Iincrenentc Cecremento <valor> hacer

<acclones>
fin desde
b) modelo 3

Diagrama de flujo estructura desde


calcular
valor inicial
y valor final

fijar la
variable índice
al valor inicial

verdadero
índice > valor

cuerpo del bucle

incrementa r
variable índice 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

Otras representaciones de estructuras repet¡t¡vas desde/para ( for)


Ualupledes¿e- {fo-r) se.r,epqgs_qnta con los símbolos {"_p1qgq"rq: de {ecisión_mgdianteun con
t¿dpr. Así, por ejemplo, en el caso de un bucle de lectura de cincuenta nilneros parafratar de calcular
su suma:

inicialización
del contador

proceso o accrones
del bucle

l<- l+ 1

Es posible representar el bucle con símbolos propios:

o bien mediante este otro símbolo:

repetir
variable =
m1, m2, m3

mL = contador inicial
m2 = contador final
m3=incrementoopaso
F unda mentos de Prog ra mación

Como aplicación, calcular la suma de 1os N primeros erlteros.

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

Se-S+l

equivale a

algoritmo S.tma
var
entero: T, N, S
inicio
s<-0
desdel(-lhastaNhacer
S<-S+I
fin_desde
escribir( 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).(

d.esde hasta : inc I dec paso hacer / /inc, rncremento


/ /dec, clecremento

f in_de s ile
lntroducción a la programación est.ructurada 131

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


.Si incremenros deben ser
positivos, ya que en caso conrario la secuencia de acóiones no
se ejecutana. De igual rnodo. si e1
valor inicial es mayor que el valor final, el incremento debe ser
en est; caso negarir o" es ileci¡. ¿/¿c¡z-
mento. Alincremento se le suele denominar también paso (, ' step
. en inlles,.
Es decir.

desde i e 20 hasta 10 hacer


< accl ones>
fin_desde

no se. ejecutaría, ya que el valor iniciat es 2 0 y el valor final 10, y como


se supone un incremenrtr
positivo, de valor 1, se produciría un error.
El p s eudoc ódigo correcto debería ser:

desde i + 20 hasta 10 decremento t hacer


< accr ones>
fin-desde

Realización de una estructura desde con estructura mientras


Es posible, como ya se ha. mencionado en apartados anteriores, sustituir
una estructura desde por
una mientras; en las líneas siguientes se indican dos formas para ello:
l. Estrwcfura desde con incrementos de lavariable ínclice positivos.

v<-vi
mientras v <= vf hacer
<a cci otes>
vé*v+incremento
fin_mientras

. 2. Estructura desde con incrementos de lq variable índice negativos.

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

La estructura desde puede realizarse con algoritmos basados en estructura


repetir, por lo que pueden ser intercambiables cuando así lo desee
mientras y
Las estructuras equivalentes
a desde son las siguientes:

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

4.6.4, Salidas internas de los bucles


Aunque no se incluye dentro de las estructuras básicas de la programación estructurada, en ocasiones es
necesario disponer de una estructura repetitiva que permita la salida en un punto intermedio del bucle
cuando se cumpla una condición. Esta nueva estructura sólo estí disponible en algunos lenguajes de pro-
gramación específicos; la denominaremos salir o iterar para diferenciarla de repetir_hasta
ya conocida. Las salidas de bucles suelen ser válidas en estructuras mientras. repetsir y desde.
El formato de la estructura es:
repetir
< acci o¡es>
sí <condiclon> entoncea
salir_buc1e
fin si
<acciones>
fin_repetir
En general, la instrucción salir
no produce un programa legible y comprensible como 1o hacen
mientras y repetir.Larazón
para esta ausencia de claridad es que la salida de un bucle ocu-
rre en el medio del bucle, mientras que normalmente la salida del bucle es al principio o al final del
mismo. Le recomendamos que no recuffa a esta opción la tenga su lenguaje- más que
-aunque
cuando no exista otra alternativa o disponga de la estructura iterar (loop).
Ejemplo 4.24
L'na aplicación de un posible uso de la instrucción salir se puede dar cuando se incluyen mensajes
de petición en el algoritmo para la introducción sucesiya de informaciones.
ATgoritúo 1- ALgioritmo 2
l-eer::-:::.=-^:-: Teer(,informacion)
repetir mientras_no fin de lectura
:: '.:..'^:..-:,-: - ptacesoj infotnacio¡
Teer iniorr,ac:c:
(,
l_eer ( inf ormacion)
hasta_que fi:: ce ¿::-:= fin_mientras
En los algoritmos anteriores cada entrada (lectura) de información va acompañada de su cores-
pondiente proceso, pero la primera lectura está fuera del bucle. Se pueden incluir en el interior del
lntroducción a la programación estr¿c:-'=:¿ 133

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

Ejemplo 4.25 (Bucle controlado por cent¡nela)


Algoritmo para calcular el salario de una serie de trabajadores, cuyos datos serán introducidos por
teclado. Subiendo que las horas normales se pagan a 2.000 pts. y las extraordinarias a 2.500 mien-
tras no excedan de 10. Si las horas extreordinarias sobrepasaran los 10, el exceso se pagaría ct 2.350.
La introducción de datos terminard cuando se escriba'*' como nombre para un trabajador.
aTgori tmo Calcular-salario
var
cadena : nombre
real : hnormales, hextraordinarias, salario
inicio
escribir(.'Deme nombre (" para f in) i)
Leer ( nombre )

mientras nombre <> * hacer


esctibir( Deme no de horas normales )

-Ieer ( hnormales )

escribir( Deme no de hor:as extraordinarias )

-7.eer ( hextraordinarias )

salario <- hnormales * 2000


si hextraordinarias <= 10 entonces
salario <- salario + hextraordinarias + 2500
si_no
salario <- salario + 10 * 2500+'(hextraordinarias - 10) * 2350 j
fin si
escribit( nombre, salario)
escribir\ 'Deme nombre (* para fin) )

leer (nombre )

fin_mientras
fin

Ejemplo 4.26 (Bucle controlado por bandera)


Algoritmo que nos determine si un número entero leído de teclado es o no primo. Un número es
compuesto en cuanto que tiene algún divisor distinto de sí mismo o la unidad.

Vamos probando con todos los divisores posibles del número (2 a n div 2) y en cuanto que detec-
temos un divisor ya podremos decir que no es primo.

aTgoritmo T s_o_nojr jmo


var
entero : n,divisor
logrico : primo
134 Fundamentos de programación

inicio
escribit( Deme numero
-l eer (n )

primo <- verdad


dívisor <- 2

/ / le vartable primo controla el bucle


mientras (divisor <= n div 2) y primo hacer
si n MOD divisor = 0 entonces
primo +- falso
si_no
divisor <- divisor + 'l
fin si
fin_mientras
si primo entonces / / La variable primo pasa informacrc:
/ / oLra parte del programa
escribirl n, ' es primo )

si_no
escribir( n, ' es divisibLe por , divisor)
fin_si
fín

Ejemnlo 4.27 lBucle controlado por contador)


t
/ Algoritmo que nos pide la introducción por teclado de las notas de una clase de 40 alumnos t, nos
' colcula el tanto por cienfo dc suspensos.

a7 gor i tmo Tanto__por_c i ento

entero : contalumnos, contsuspensos


real : tantoporciento, n
inicio
contalumnos (- 1
contsuspensos +* 0
mientras contalumnos <= 40 fracer
escribir( 'Alumno , contalumnos,'- Deme nota
7Áá-lñ1
sin<5entonces
contsuspensos <- contsuspensos + 1
fin si
::::a_!umnos <- contalumnos + 1
f i!._mientras
_::,-_:l:::::tento <- contsuspensos * 100 / 40
=:::.a.. :i tanto por ciento de suspensos es tantoporciento )
fin

Ejemplo 4.28 (Bucle mienrras: se puede e¡ecutar de 0 a N veces)


Algoritmo para desconlponer Ltn número entero, leído de teclqdo, en sus factores primos.

r r*" r. s : :r-_: ' :-=l


1:7"r
e'teIO : -, :l -.
c:-.--s::
tntrodueiónabalqrurwiiÍtcd 135

í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 \. . ... ''

]eer(dd, nrm, aa)


si (aa r¡OD 4 = 0) y (aa MOD 100 <> 0) O (aa MOD 400 = 0) entonces
bisiesto <- verdad
fin_si
geguu_sea rmn hacer
1, 3, 5, 6, 8, 10, 12: :,
si dd > 31 e¡xtoD.ces :,

correcta <- falso


fin_ei
l

lntroduc:ción a la prqnm**in e¡firüú f,

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

dtotal <- dtotal + dd


escribir( Deme dia de la semana que fue e1 1 de ENERO (l/m/x/j/v/s/d) )

.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

dtotal <- dtotal + d1


segun_sea dtotal mod. 7 hacer
1:
escribirl 'Lunes')
2:
escribir( Martes')
3:
escribir( Miercoles' )

4:
escribir('Jueves )

5:
escribirl 'Viernes')
6:
escribir( Sabacto )

0;
escribir( Dominqo )

fin_segun

fin

4.7. ESTRUCTURAS DE DECISIÓN ANIDADAS


Ias estructuras de selección si-entonces y si-enEonces-si-no implican la selección de
una de dos alternativas. Es posible también utilizar la instrucción si para diseñar estructuras de
selección que contengan más de dos alternativas. Por ejemplo, una estructura si-entonces
puede contener otra estructura si-entonces, y esta estructura si-entonces puede contener
otra, y así sucesivamente cualquier número de veces; a su vez, dentro de cada estructura pueden exis-
tir diferentes acciones.

sí condlciolll entonces

sí condicion2 entonces

Las estructuras si interiores a otras estructuras si se denominan anidadas o encajadcts:

si :::C:cionl entonces
si ;::c-icion2 entonces

fi-._s i
fio si

Una estructura de 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

Una estructura selectiva múltiple constará de una serie de estructuras


otras' Como las estructuras si pueden volverse bastante complejas para
si, unas interiores a
que el algoritmo sea claro.
será prcciso utilizat indentación (sangría o sangrado), de modó qüe
exlsta uru entre
las palabras reservadas si y f in-si,
por unlado, y eotoncls y si_no, "ooérpondencia
por otro.
La escritura de las estructuas puede variar de unós lenguaj", u ot
or, por ejemplo, una estructura
si admite también los siguientes formatos;
si expresjon boofeanal entorrces
<acc iones>
si_no
si expresíon boofeana2 er¡.tonces
< ac c ione s>
si_no
si expresíon booLeana3 éntonces
< acci ones>
sí_no
<acciones>
fin_si
fin_si
fin_si

o bien:

si expresjon boofeanal entonces


<acciones>
si*no si expresion boofeana2 entonces
<a cci ones>
fin_si
.

fin_si

Ejemplo 4.33
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.

Los tres números son A, B y C; para calcular el más grande


se realizarán comparaciones sucesi_
vas por parejas.
140 Fundamentos de Programac¡Ón

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 )

Leer(hh, mm, ss)


si (hh < 24) Y (mm < 60) Y (ss < 60) entonces
ss <- ss + 1
si ss = 60 entonces
ss <- 0
mm <- n'l,'n + 1
si mm = 60 entonces
mm<-0
hh<-hh+1
si hh = 24 entonces
hhe0
fin-si
fin_si
fin_si
escribir(hh, ': , mn, ':', ss)
fin-si
fin
142 Fundamentos de programación

4.8. ESTRUCTURAS REPETITIVAS ANIDADAS


De igual forma que se pueden anidar o encajar estructuras de selección,
es posible insertar un
bucle dentro de otro. Las reglas para construir estructuras repetitivas
anidadas son iguales en ambos
casos: la estructura interna debe estar incluida totalmente dentro
de la extema y no puede existir sola-
pamiento. La representación gráfica se indica en la Figura
4.14.

a) b) c) d)
Figura 4.14. Bucles anidados: a) y b), correctos; c) y d), incorrectos.

Las variables índices o de control de los bucles toman valores


de modo tal que por cada valor de
la variable índice del ciclo extemo se debe ejecutar totalmente
el bucle interno.
Es posible anidar cualquier tipo de estruciura repetitiva
con tal que cumpla las condiciones de la
Figura 4.14.

Ejemplo 4.37
Se conoce la 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.

El problema consistirá, en primer lugar, en la obtención de la población


mayor de cada provin-
cia v realizar esta operación ocho ,"".r, unu para cada provincia.

,.'isualizar la ciudad mayor de una provincia.


p:so 1 para cada una de 1as ocho provincias andaluzas.

El procedimiento para deducir la ciudad más grande de entre


las veinticinco de una provincia se
consigue creando una variable auxiliar MAyoR inicialmente
de valor 0- que ," ,u á*pururdo
sucesivamente con los veinticinco valores de cada ciudad,
de modo tal que, según el resultado de
comparación, se intercambian valores de la ciudad por el
áe la variable MAyoR.
lntrdtwión a b rynmación ñuclurada 143

El algoritmo correspondiente sería:

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

4.9. LA INSTRUCCIÓN ir-a (<<sroro>>)

El flujo de control de un algoritmo es siempre secuencial. excepto cuando 1as estructuras de control
estudiadas anteriormente realizan transferencias de control no secueflciales.
La 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

si <cc:árc: a:- a'a'aai> entonces


ir_a(_::ll
fin_si
100 : fin
lntroducc¡ón a la prqramación esfructurada 145

ACTIVIDADES DE PROGRAMACIÓN RESUELTAS

4.1. calcular e1 factorial de un número N utilizando la estructura ces:=.

Recordemos que factorial de N responde a la fórmula

N/ = ¡¿. (N -r). (N -2). (N -3)..... 3. Z. 1

El algoritmo desde supone conocer el número de iteraciones:

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á

50 113 50-13=37 C=1


1i 3 31 ' 13=24 C=2
24-13=ll C=3

Comollesmenorqueeldivisor,13,seterminaránlasrestasSucesivasyentoncesllseráelresto,y3
(número de restas) el cociente'
Por consiguiente, el algoritmo será
el siguiente:

a l" got i tmo Coc i ente-Y-res to


var
entero : a, b, cociente ' resto
inicio
escribir('Deme dividendo )

I
Leer(M)
esctibit('Deme divisor ) i. ..,
Leer \ i. l
r:s--o <- M
:::la:-te <- 0 1

eientsras resto >-: N hacer


'i:s--a <- resto - N
:::l::::e <- cociente + 1
f ia-mientras .- ^^, ^,

escribit :saleate: ',cociente'' Resto: ' re-LU/


fia

4.6.Rea]izarelalgoritmoparaobtenerlasumadelosnúmerospareshasta1000inclusive.

Método l:
S-2+4+6+8+ +1000
*+t|t

lntroducción a la programación estructurada 147

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:

//identica cabecera y declaraciones


inicio
SUMA <- 2
NUMERO <- 4
repetir
SUMA <- SUMA + N.UMERO
NUMERO <- NUMERO + 2
hasta_que NUMERO > 1000
fin

4.7. Buscar y escribir la primera vocal 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 )

frasta_que (p = 'a' ) o (p = 'e')o(p = 'i')o(p = 'o')o(p = u )


escribir( Primero', p)
fin

4.8. Leer dos números y deducir si están en orden creciente.

Dos números, a y b, están en orden creciente si a <= b.

al gor i tmo Comparac ionl


var
real: a,b
inicio
escribir( dar dos numeros )
leer(a, b)
sia<=bentonceE
escribir( orden creciente, )
si_no
escribir\ 'orden decreciente, )
fin_si
fin
1¡18 Fundamentos de programación

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

Para codificar estas operaciones, basta pensar que


(n + l1.t = (n + 1) x nx (n - l) x (n -2) x...x 3x2 x 1

(n+l)! =(n+1)xn.r
lntroducción a Ia programación esfructurada l49

Por consiguiente, para calcular el factorial FACToRTAL de un nríme¡o, necesitaremos


un contador i que
cuente de uno en uno y aplicar la fórmula

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

4.13. Calcular el valor máximo de una serie de 100 números.

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

La siguiente acción del algoritmo será realizar comparaciones sucesivas:

. leer un nuevo número;


. compararlo con el valor máximo:
si es inferior o igual, implica que el valor máximo es el antiguo;
- si es superior, implica que el valor máximo es el recientemente 1eído, por lo que éste se conveftirá
- en máximo mediante una asignación;
repetir las acciones anteriores hasta que n - 100.
-
aTgoritmo Maximo
var
erLero: e, nune'o, mdx mo
inicio
-7.eer (numero )

r<-1
maximo <- numero
repetir
n(-n+1
feer numero
( )

si numero 7 maximo entonces


maximo <- numero
fin_si
hasta_que n = 100
escribir\ Numero mayor o maximo', maximo)
fin

Otras soluciones

algoritmo Otronoximo
var
::-.-::o: n, nLmóro, ¿ximo
iaicio
-1.eer ::nero )

:-,=:.:::-: <- nUmero


:-<-.
repetsir .-!

7eeÍ --:::.=aa)
si :-:---=:: > ::aximo entonces
::axr:--a <- nJmero
fin-si
hasta-que :- .

escribiri ),,ji-..ero t-.al-ot: c maximo', maximo)


fin
lntroduei<in a b pqramación estruc.turada l5l
2. algoritño Otromaxlmo
var
entero: n, nllmero, maximo
inicio
Jeer ( numero )
maximo e nJmero
repetir3ara n = 2 a 100 //pseudocodigro sus:i:;:c
Jeer ( numero ) ae óeede
si numero > maximo entsonáes
raxjmo é nlÍero
fin_si sJ,
fin_repetir
escribir( Maximo, , maximo)
fin
NorA: Los programas anteriores suponen que los números pueden ser positivos
comparar sólo números positivos, los programas o negativ*: § se desea
cofrespondientes serían:
L. algoritmo Otromaximo
var
ent.ero: n, numero, maximo
inicio
n<-0
maximo <_ 0
repetir
feer (numero )
né-n+l
si" numero > maximo entonces
maximo <_ numero
fin_si
hasta_que n = 100
escribir(,Maxímo numero , maximo)
fin
2 , al-gotitmo Ot:romaximo
var
entero: n, numero, maxímo
inicio
n<-0
. maximo <_ 0
desde N t_ t hast.a 100 hacer
-L eer (numero )
gi numero > maximo entonces
maximo <_ numero
fin-si
fin_desde
escribir( Maximo numero =, , maximo)
fin
4.14. Bucles anidados.

Las estructuras de control tipo bucles pueden


anidarse internamente, es decir, se puede
el interior de otro bucle. situar un bucle en
La anidación puede ser:

o bucles repetir dentro de bucles repetir,


o bucles para (desde) dentro de buc]les repetir. etc.
152 Fundamentos de programación

Eiemplo 1. Bucle para en el interior de un bucle repetir-hasta-que:


repetir
l.eer(n)
desde i <-- t hasta 5 hacer
escrjbir(n * n)
fin_desde
haet.a_que n = 0
escribir ( Fin, )

Si ejecutamos estas instrucciones, se obtendrá para:

n - 5 resultados
25

25

resultados . 4
4
4
4
4

n=0 resultados 0
0
0
0
0
fin

Ejemplo 2. Bucles anidados para (desde):

desdei(-lhasta3hacer
desdle j (- t hast.a 10 hacer
escribirli, por, j, ,=,, i*j)
fin_desde
fin_desde

Los valores sucesivos de i, j, i * j, serán:


i=l j I i* j=txl= j
j=z i* j=tx2=2
j=3 i* j-1x3=3
l=4 i* j=Lx4=4
j = lo 1*j - IT ., 1
au^ = lu
^
r=2 =2xI=2
i-
i* =2x2=4
i* =2x3=6
--l i* =2x4=8
-'1 ) v lñ - ¡n

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

Es decir, se obtendrá Iatablade multiplicar de l,2y 3.

Eiemplo 3. La codificación completa para obtener la popular tabla & mulüplicar de los escolares sería
la siguiente:

a7 gor i tno Tabla_de_mu1 tipl icar


var
entero: i, j, producto
inicio.
parar <- t hasta t hacer
escribirl,Tabla del' , i)
para j <- t hasta 10 hacer
productoei"l
escribir(í,'por:, j, =,, producto)
finjara
f injara
fin

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.

aTgoritmo vax min


var
I: entero
MAX, MIN, NUMERO: real
inicio
-Zeer (NUMERO )
MAX <- NUMERO
MIN <- NUMERO
desde_e2hasta 00hacer
Leer (NUMERO )

si NUMERO > MAX enlonces


MAX E NUMERO
si_no
- si NUMERO < MIN entonces
MIN € NUMERO
fin_si
fin_si
fin_desde
. escribir( Maximo , MAx, Minimo,, MIN)
fin
154 Fundamentos de programación

4'17' se dispone de un cierto número de valores


de los cuales el último es el 999 (no
lista) y se desea determinar et valor se procesa: es flnal de
m,l¡mo áe ta, m"¿ras ;;;rp#;;bs a parejas de valores sucesivos.
aTgori tmo Media_pare j as
var
r 7 d- l'
entero: N1, N2
real: M,MAX
inicio
-Ueer(Nl , N2 )
MAX <- (N1 + N2 ) /2
mientras (N2 <> 999) y (N1 <> 999) hacer
M <- (U1 + N2) /2
siM>MAXentonces
MAX <_ M
fin_si
¿eer (N1, N2)
fin_mi,entras
escribirt Medja raxina MAX
fin )

4.18. Detección de entradas numéricas _enteros_


effóneas.
Andlisis

Se sitúa er varor iniciar der interupror


?:t; ItJI1X1":::1:"1Jffi:ff":'"T3'¿de.«interruptor>>.
La detección de números no enteros se
rcalizt. ,
s i sw
= o . La in s rrucción que ¿.t""tu .-ñllÍ;:L',1lTH:tJii:ñt'J,iH ilH?:#: :..l:1,,íl,"
-Z eer (N )

realizará la comparación de N y parte


entera de N:
o si son iguales, N es entero.
o s.i son diferenres. N no es entero.

entera es utilizar la runción estándar


H,Ti.3,d:j|i:;:lffj}J:.r*e enr (inr) exisrenre en muchos

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 )

escribir :.:: --. ) , ::,


SW<-- ^1,- o ,

fin_si
fin-mientras
fin
lntroducción a la programación e§tn¡cf.t-a¿ 155

4.19. Calcular el factorial de un número dado (otro nuevo método).

Análisis

El factorial de un número N (N!) es el conjunto de productos sucesivos siguientes:

N/ = N'k (N - l) * (N -2)'ó (N-3) *... * 3 * 2 * I

Los factoriales de los primeros números son:

1!= 1

2t=2* l =2* ll
3l=3*2*l=3'(21
:.r=0.3*2*t=4*31.

N/ = N* (N _l) * (N _2) * ... * 2* I =N* (N_ 1)!

Los 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:

1. Con la estructura repetir (repeat).


2. Con la esüuctura desde (for).

Pseudocódigo

Método 7 (estructura repeEir):


aTgoritmo FACTORIAL
var
entero: I, N
real: factorial
inicio
repetir
Leer(N)
hasta_que N > 0
factorial <- 1
r<-1
repetir
factorial (- factorial * I
I<-I+1
hasta_queI=N+1
escribirl factorral )

fin
156 Fundamentos de programación

Método 2 (estructura desde):

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

Las operaciones secuenciales a realizar son:

1. Leer dlstancia, duracion de 1a estancia y precio del kilometro.


2. Comprobar si distancia > g00 km y duracion > 7 días.
3. Calcufo del precio total del billete:
. si drstancia < 800 km o duracion < 7 dias
precio tot.al = distancia * 2.5
. si distancia > 800 km y duracion > 7 dias
precio total = (distancia " 2.5) 3A/1AO (precio total)

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

Media: (C++/C + Pascal + FORTRAN)


J

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 )

mient.ras nombre <> *** hacer


Leer\CCnas, Ddsco-, -OPTPA\t
media <- (C + Pascal + ITORTRAN) / 3
escribir (nombre, media)
l.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:

1. la tarifa de las horas diumas es de 500 p"r"tur, {O


2. la tarifa de las horas nocturnas es de 800 pesetas, '
3. caso de ser domingo, la tarifa se incrementará ert 200 pesetas ei turno diumo y 300 pesetas el turno
nocturno.

Antilisis

El procedimiento a seguir es:

1. Leer nombre del tumo, horas trabajadas (HI) y día de la semana.


2. Si el turno es nocturno, aplicar la fórmula JORNAL = 800 * HT.
3. Si el turno es diurno, aplicar la fórmula ITORNAL - 500 * HT.
4. Si el día es domingo:
o TURNO DILIRNO JORNAL = (500 + 204) )* ht,
c TUFNO NOCTURNO JORNAL - (800 + 300)* HT.
7/

r58 Fu nda mentos de prog ra m aci ó n

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

El método a seguir consisti-rá en clasiñcar cada día de la semana con


un número de orden:

1. LUNES
2. MARTES
3. MIERCOLES
4. .JUEVES
5- VIERNES
6. SABADO
-7.
DOMINGO

Si oia >J o < I Error de entrada: Rango (1 a 7).


Si el lenguaje de programación soporta sólo liestructura si-entonces-si_no ( if-then-else) ,
se mdifica con el método 1; caso de soportar la estructura
segun-sea (case) , la codificación será el
rÉú2.

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 )

escribit( rango I 7')


fin-si
fin-si
fin-gi
fin-si
fin si
fin si
fin_si
fin

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' )

5: escribir ( ' SABADO' )

7 : escribir ( DOMINGO' )

si-no egcribir('etror de entrada, rango 1 7')


fin segun
fin
160 Fundamentos de programación

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)

Fibonacci(N para N > l) = Fibonacci(N - l) + Fibonacci(N 2)

NOTA: La realización del pseudocódigo se deja como tarea al alumno.

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:

o código del artículo A o e,


o precio unitario del artículo,
o número de artículos.

La última ficha del archivo de aftículos tiene un código de artículo, una letra x. Se pide:

o el número de artículos existentes de cada categoría,


r el importe total de los artículos de cada categoría.

{.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'.

a) ParaNque es un entero leído por teclado.


b) Hasta que N sea tal que.r-.,/n < E (por ejemplo, E = 10a')
lntroducción a la programación estructurada 161

4,l2...,Calcular el enésimo término de 1a serie de Fibonacci definida por:


1

A1=l A2=l A3=l+2=AI+A2 A,=A,_,+A,_r(n>=3)


l:,4.13. Se pretende leer todos los empleados de una empresa en un archivo EMPRESA- y a la ter-
minación de la lectura del archivo se debe visualizar un-situados
mensaje ..existen trabajadores mayores de 65
años en un número de ...» y el número de t- trabajadores mayores de 65 años.
4.14. Un capital C está situado aun tipo de interés n, ¿al término de cuántos años se doblará?
4.15. Los empleados de una fábrica trabajan en dos turnos, diurno y nocturno. Se desea calcular el jornal dia-
rio de acuerdo con los siguientes puntos:

o 1a tarifa de las horas diurnas es de 500 pesetas.


o la tarifa de las horas nocturnas es de 800 pesetas,
. caso de ser domingo, la tarifa se incrementará en 200 pesetas el turno diurno y 300 pesetas el tumo
nocturno-

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

l!1Q,ruoo un entero positivo n (> L), comprobar si es primo o compuesto

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

AtomaráelvalorB * C,eqdecir, 12 * 15 = 180;porconsiguiente,elúltimovalorquetoma


A será 180.

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 <- rai=2la5 + raí22(16) + 5)

enestaexfesiónse evalúaprimero raí22(16), queproduce 4y,porúltimo, raj-z2(15+4+5)


raí22 (25), es decir, 5.
I-os resultados de las expresiones sucesivas anteriores son:

x<-2
x<-16
x-l

S-ar putea să vă placă și