Está en la página 1de 176

PORTADA

ii

INTRODUCCIN A LA
PROGRAMACIN

PASCAL
COMPILACIN

iii

iv

CONTENIDO

Contenido
AGRADECIMIENTO ...............................................................................................................................x
Parte 1. Acerca de la Programacin ............................................................................... 1
Captulo 1 Introduccin a los lenguajes de programacin .................................................................. 3
1.1.

Orgenes de la programacin .............................................................................................. 4

1.2.

Lenguaje de programacin.................................................................................................. 5

1.2.1.

Elementos .................................................................................................................... 7

1.3.

Tipos de lenguajes de programacin ................................................................................ 11

1.4.

Estructura de los lenguajes ............................................................................................... 11

1.4.1.

Lenguaje mquina ..................................................................................................... 11

1.4.2.

Lenguaje de bajo nivel............................................................................................... 11

1.4.3.

Lenguaje de medio nivel ........................................................................................... 13

1.4.4.

Lenguaje de alto nivel ............................................................................................... 14

1.5.

Lenguaje de aplicaciones................................................................................................... 25

1.6.

Lenguaje de redes ............................................................................................................. 25

1.7.

Autoevaluacin ................................................................................................................. 28

1.7.1.

Autoevaluacin 1....................................................................................................... 28

1.7.2.

Ejercicios.................................................................................................................... 28

Captulo 2 La programacin .............................................................................................................. 29


2.1.

Historia .............................................................................................................................. 30

2.2.

Lxico y programacin ...................................................................................................... 30

2.3.

Programas y algoritmos .................................................................................................... 30

2.3.1.

Programacin Estructurada....................................................................................... 31

2.3.2.

Programacin Modular ............................................................................................. 36

2.3.3.

Programacin por capas............................................................................................ 37

2.3.4.

Programacin orientada a objetos ............................................................................ 39

2.4.

Compilacin ....................................................................................................................... 43

2.5.

Etapas de la programacin ................................................................................................ 45

2.6.

Metodologa para la solucin de problemas..................................................................... 46

2.7.

Fases en la solucin de problemas .................................................................................... 47


v

2.7.1.

Definicin del problema ............................................................................................ 47

2.7.2.

Anlisis del problema ................................................................................................ 47

2.7.3.

Seleccin de la mejor alternativa: ............................................................................ 48

2.7.4.

Diagramacin /Codificar Pseudocdigo: ................................................................... 48

2.7.5.

Prueba de escritorio: ................................................................................................. 49

2.7.6.

Codificacin: .............................................................................................................. 49

2.7.7.

Transcripcin: ............................................................................................................ 49

2.7.8.

Compilacin: .............................................................................................................. 50

2.7.9.

Pruebas de computador: ........................................................................................... 50

2.7.10.

Documentacin externa: ........................................................................................... 51

2.8.

Herramientas de programacin ........................................................................................ 51

2.8.1.

Diagramas de flujo..................................................................................................... 53

2.8.2.

Ejemplos de Diagramas de flujo ................................................................................ 58

2.8.3.

Pseudocdigo ............................................................................................................ 64

2.8.4.

Ejemplos de pseudocdigo ....................................................................................... 71

2.9.

Autoevaluacin ................................................................................................................. 77

2.9.1.

Autoevaluacin 1....................................................................................................... 77

2.9.2.

Ejercicios.................................................................................................................... 78

Parte 2. Aprenda Pascal programando ........................................................................ 79


Captulo 3 Introduccin a Pascal ....................................................................................................... 81
3.1.

Origen de la programacin Pascal..................................................................................... 82

3.2.

Caractersticas ................................................................................................................... 82

3.3.

Caractersticas nicas de Pascal ........................................................................................ 83

3.4.

Implementaciones ............................................................................................................. 83

3.5.

Compiladores disponibles pblicamente .......................................................................... 84

3.6.

Compilador FreePascal ...................................................................................................... 84

3.7.

Crtica a Pascal ................................................................................................................... 85

Captulo 4 Identificadores, datos y operadores en Pascal ................................................................ 87


4.1.

Elementos de un programa ............................................................................................... 88

4.1.1.

Cabecera del programa ............................................................................................. 88

4.1.2.

Unidades o Libreras .................................................................................................. 89

4.1.3.

Declaraciones ............................................................................................................ 89
vi

4.1.4.

Cuerpo principal ........................................................................................................ 92

4.2.

Reglas de escritura de un programa en pascal ................................................................. 93

4.3.

Comentarios ...................................................................................................................... 93

4.4.

Identificadores .................................................................................................................. 93

3.1.1.
4.5.

Palabras reservadas................................................................................................... 94

Tipos de datos ................................................................................................................... 95

4.5.1.

Operador de asignacin ............................................................................................ 96

4.5.2.

El primer programa ................................................................................................... 96

4.6.

Operadores aritmticos .................................................................................................... 98

4.6.1.

Jerarqua de los operadores aritmticos ................................................................... 99

4.6.2.

El uso de los parntesis ............................................................................................. 99

4.7.

Ejemplos .......................................................................................................................... 100

4.8.

Autoevaluacin ............................................................................................................... 103

4.8.1.

Preguntas ................................................................................................................ 103

4.8.2.

Ejercicios.................................................................................................................. 103

Captulo 5 Expresiones lgicas y Estructuras de control ................................................................. 107


5.1.

Objetivos ......................................................................................................................... 107

5.2.

Operadores lgicos.......................................................................................................... 108

5.2.1.

Operadores relacionales o de comparacin ........................................................... 108

5.2.2.

Operadores lgicos.................................................................................................. 109

5.2.3.

Prioridad entre operadores ..................................................................................... 110

5.3.

Sentencias de Control ..................................................................................................... 111

5.3.1.

Sentencia de control simple .................................................................................... 111

5.3.2.

Decisiones mltiples................................................................................................ 113

5.3.3.

La sentencia case ..................................................................................................... 115

5.4.

Instrucciones de Repeticin ............................................................................................ 117

5.4.1.

Instruccin For......................................................................................................... 118

5.4.2.

Instruccin While .................................................................................................... 123

5.4.3.

Instruccin Repeat .................................................................................................. 128

5.4.4.

Ciclo Infinito ............................................................................................................ 131

5.4.5.

Anidamiento en los ciclos........................................................................................ 132

5.4.6.

Diferencias entre las instrucciones de repeticin ................................................... 133


vii

5.4.7.

Eleccin de instrucciones iterativas ........................................................................ 133

5.5.

Ejemplos .......................................................................................................................... 135

5.6.

Autoevaluacin ............................................................................................................... 138

5.6.1.

Preguntas ................................................................................................................ 138

5.6.2.

Ejercicios.................................................................................................................. 139

Parte 3. Programacin modular ..................................................................................... 143


Captulo 6 Funciones y Procedimientos .......................................................................................... 145
6.1.

Objetivos ......................................................................................................................... 145

6.2.

Programacin modular.................................................................................................... 146

6.3.

Procedimientos ............................................................................................................... 146

6.4.

Las variables globales y locales ....................................................................................... 148

6.5.

Subprogramas con parmetros (argumentos) ................................................................ 149

6.5.1.

Parmetros por valor .............................................................................................. 150

6.5.2.

Parmetros por variable o referencia ..................................................................... 150

6.6.

Funciones ........................................................................................................................ 152

6.6.1.

Funciones predefinidas ........................................................................................... 152

6.6.2.

Funciones de truncamiento y redondeo ................................................................. 152

6.6.3.

Funciones exponenciales y logartmicas ................................................................. 153

6.6.4.

Funciones aritmticas ............................................................................................. 155

6.6.5.

Funciones trigonomtricas ...................................................................................... 156

6.6.6.

Funciones para nmeros aleatorios ........................................................................ 157

6.6.7.

Funciones para caracteres ...................................................................................... 157

6.6.8.

Funciones para archivos .......................................................................................... 158

6.6.9.

Funciones definidas por el usuario.......................................................................... 158

6.7.

Que usar Funciones o Procedimientos? ........................................................................ 160

6.8.

Ejemplos .......................................................................................................................... 161

6.9.

Autoevaluacin ............................................................................................................... 162

6.9.1.

Preguntas ................................................................................................................ 162

6.9.2.

Ejercicios.................................................................................................................. 163

viii

ix

AGRADECIMIENTO
Escribo estas lneas para agradecer a todas aquellas personas que han escrito artculos en la web
con la finalidad de que alguien ms se beneficie de ese conocimiento y esfuerzo.

xi

Parte

Parte 1.

Acerca de la
Programacin

Captulo 1

Introduccin a los
lenguajes de
programacin
Bsicamente los lenguajes de programacin pueden dividirse en: lenguajes mquina,
lenguajes ensambladores, y lenguajes de alto nivel.
Las computadoras slo pueden entender directamente el lenguaje mquina, que es el
lenguaje de una computadora en particular, o sea, son dependientes de la mquina que
los ejecuta. Estos lenguajes son difciles de manejar por los humanos, convirtiendo la tarea
de programar en algo tedioso y difcil.
Los lenguajes ensambladores son una forma ms sencilla de escribir en lenguaje
mquina. Bsicamente reemplazan por palabras en ingls las instrucciones del lenguaje
mquina (que son cadenas de nmeros). Igualmente contina siendo tediosa este tipo de
programacin, por lo tanto, tiempo despus, se desarrollaron los lenguajes de alto nivel.
En los lenguajes de alto nivel se pueden escribir enunciados que resumen decenas o
cientos de instrucciones en lenguaje mquina. Se utilizan enunciados en ingls sencillos y
nociones matemticas bsicas. El cdigo generado en un lenguaje de alto nivel debe ser
traducido para que puedan ser ejecutados por las computadoras; el programa encargado
de esta traduccin se denomina compilador o intrprete.
OBJETIVOS
1. Comprender los orgenes de la programacin.
2. Identificar los elementos de los lenguajes de programacin.
3. Conocer la estructura de los lenguajes de programacin.
4. Identificar los lenguajes de programacin con mayor uso.
3

1.1.

Orgenes de la programacin
En los inicios del siglo XIX se produce una invencin muy importante en el campo de la
computacin: el origen de las tcnicas de programacin.
Curiosamente, su fuente no se halla en el clculo sino en la industria textil. Se trata del
telar automtico diseado por el francs Joseph Marie Jacquard (1752-1834). El telar de
Jacquard tiene un efecto indirecto pero eficaz en el desarrollo de la prehistoria de las
modernas computadoras.
Este tcnico francs invent en 1801 un telar singular. La maquina teja de forma
automtica, siguiendo un patrn o programa de trabajo. De esta manera produca tejidos
segn el modelo que se le haba proporcionado, y se ajustaba a l escrupulosamente.
Realizaba en la tela el dibujo deseado. Cambiando las indicaciones del programa cambiaba
el resultado de su labor.
El secreto estaba en unas tarjetas perforadas. stas determinaban el dibujo en el tejido.
Las tarjetas perforadas formaban una ristra o cadena que se introduca en la mquina a
modo de instrucciones. Su funcionamiento responda a una idea de ingeniosa simplicidad.
Permita reproducir sobre la tela dibujos complejos formados por colores diferentes. El
movimiento de los lizos y la combinacin de traba y urdimbre se controlaba por medio de
los cartones agujereados, que se realizaban segn un modelo previsto.
Telar mecnico de Jacquard, que funcionaba mediante tarjetas perforadas de cartn (parte
superior del grabado) para crear distintos tipos de tejidos.

Telar Jacquard en el Museo de la ciencia y la Tarjetas perforadas en un telar de Jacquard.


industria, en Mnchester (Inglaterra).

El telar de Jacquard es un telar mecnico inventado por Joseph Marie Jacquard en 1801. El
artilugio utilizaba tarjetas perforadas para conseguir tejer patrones en la tela, permitiendo
que hasta los usuarios ms inexpertos pudieran elaborar complejos diseos. La invencin
se basaba en los instrumentos que anteriormente disearon Basile Bouchon (1725), Jean
Falcon (1728) y Jacques Vaucanson (1740), todos ellos de nacionalidad francesa.
Aunque siempre se ha denomidado telar de Jacquard, el telar en s es la mquina inferior
que intersecciona los hilos para producir la tela, mientras que lo que verdaderamente
invent Jacquard es la mquina que produce el movimiento independiente de los hilos de
urdimbre para conseguir el dibujo solicitado a travs de las armuras o ligamentos
insertados en las diferentes zonas del tejido.
Cada tarjeta perforada corresponda a una lnea del diseo, y su colocacin junto con otras
tarjetas determinaba el patrn (ligamento/armura) con el que el telar tejera. Cada agujero
de la tarjeta corresponda con un gancho "Bolus", que tena dos posiciones, pudiendo
estar arriba o abajo. De esta manera, dependiendo de qu posicin tuviera, el arns
(montura) que lleva y gua la urdimbre hara que la trama se desplazara hacia arriba o
hacia abajo. De esta manera, la secuencia de subidas y bajadas del hilo termina por crear
un patrn (ligamento/armura) sobre el tejido. Los ganchos o pestaas podan ser
conectados a travs del arns con un determinado nmero de hilos, permitiendo que el
patrn (camino) se repitiera ms de una vez.
Un telar con 400 ganchos poda tener conectados hasta cuatro hilos por gancho,
produciendo as una tela con una anchura de 1600 hilos, y con un patrn compuesto por la
combinacin de las repeticiones de cuatro bandas.

1.2.

Lenguaje de programacin
Un lenguaje de programacin es un idioma artificial diseado para expresar
computaciones que pueden ser llevadas a cabo por mquinas como las computadoras.
Pueden usarse para crear programas que controlen el comportamiento fsico y lgico de
una mquina, para expresar algoritmos con precisin, o como modo de comunicacin
humana. Est formado por un conjunto de smbolos y reglas sintcticas y semnticas que
definen su estructura y el significado de sus elementos y expresiones. Al proceso por el
cual se escribe, se prueba, se depura, se compila y se mantiene el cdigo fuente de un
programa informtico se le llama programacin.
Tambin la palabra programacin se define como el proceso de creacin de un programa
de computadora, mediante la aplicacin de procedimientos lgicos, a travs de los
siguientes pasos:
El desarrollo lgico del programa para resolver un problema en particular.
Escritura de la lgica del programa empleando un lenguaje de programacin especfico
(codificacin del programa).
Ensamblaje o compilacin del programa hasta convertirlo en lenguaje de mquina.
Prueba y depuracin del programa.
Desarrollo de la documentacin.

Existe un error comn que trata por sinnimos los trminos 'lenguaje de programacin' y
'lenguaje informtico'. Los lenguajes informticos engloban a los lenguajes de
programacin y a otros ms, como por ejemplo HTML (lenguaje para el marcado de
pginas web que no es propiamente un lenguaje de programacin, sino un conjunto de
instrucciones que permiten disear el contenido de los documentos).
Permite especificar de manera precisa sobre qu datos debe operar una computadora,
cmo deben ser almacenados o transmitidos y qu acciones debe tomar bajo una variada
gama de circunstancias. Todo esto, a travs de un lenguaje que intenta estar
relativamente prximo al lenguaje humano o natural. Una caracterstica relevante de los
lenguajes de programacin es precisamente que ms de un programador pueda usar un
conjunto comn de instrucciones que sean comprendidas entre ellos para realizar la
construccin de un programa de forma colaborativa.
Historia
Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje
especfico conocido como cdigo mquina, el cual la mquina comprende fcilmente, pero
que lo hace excesivamente complicado para las personas. De hecho slo consiste en
cadenas extensas de nmeros 0 y 1.
Para facilitar el trabajo, los primeros operadores de computadoras decidieron hacer un
traductor para reemplazar los 0 y 1 por palabras o abstraccin de palabras y letras
provenientes del ingls; ste se conoce como lenguaje ensamblador. Por ejemplo, para
sumar se usa la letra A de la palabra inglesa add (sumar). El lenguaje ensamblador sigue la
misma estructura del lenguaje mquina, pero las letras y palabras son ms fciles de
recordar y entender que los nmeros.
La necesidad de recordar secuencias de programacin para las acciones usuales llev a
denominarlas con nombres fciles de memorizar y asociar: ADD (sumar), SUB (restar),
MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le
denomin "instrucciones", y a este conjunto de instrucciones se le llam lenguaje
ensamblador. Posteriormente aparecieron diferentes lenguajes de programacin, los
cuales reciben su denominacin porque tienen una estructura sintctica similar a los
lenguajes escritos por los humanos, denominados tambin lenguajes de alto nivel.
La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella
Milbanke Byron y Lord Byron. Anabella introdujo en las matemticas a Ada quien, despus
de conocer a Charles Babbage, tradujo y ampli una descripcin de su mquina analtica.
Incluso aunque Babbage nunca complet la construccin de cualquiera de sus mquinas,
el trabajo que Ada realiz con stas le hizo ganarse el ttulo de primera programadora de
computadoras del mundo. El nombre del lenguaje de programacin Ada fue escogido
como homenaje a esta programadora.
A finales de 1953, John Backus someti una propuesta a sus superiores en IBM para
desarrollar una alternativa ms prctica al lenguaje ensamblador para programar la
computadora central IBM 704. El histrico equipo Fortran de Backus consisti en los
programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy
Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.
6

El primer manual para el lenguaje Fortran apareci en octubre de 1956, con el primer
compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado,
porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su
compilador pudiera generar cdigo cuyo desempeo fuera comparable al de un cdigo
hecho a mano en lenguaje ensamblador.
En 1960, se cre COBOL, uno de los lenguajes usados an en 2010 en informtica de
gestin.
A medida que la complejidad de las tareas que realizaban las computadoras aumentaba,
se hizo necesario disponer de un mtodo ms eficiente para programarlas. Entonces, se
crearon los lenguajes de alto nivel, como lo fue BASIC en las versiones introducidas en los
microordenadores de la dcada de 1980. Mientras que una tarea tan sencilla como sumar
dos nmeros puede necesitar varias instrucciones en lenguaje ensamblador, en un
lenguaje de alto nivel bastar una sola sentencia.

Cdigo Fortran en una tarjeta perforada, mostrando


el uso especializado de las columnas 1-5, 6 y 73-80.

1.2.1. Elementos
Todos los lenguajes de programacin tienen algunos elementos de formacin primitivos
para la descripcin de los datos y de los procesos o transformaciones aplicadas a estos
datos (tal como la suma de dos nmeros o la seleccin de un elemento que forma parte de
una coleccin). Estos elementos primitivos son definidos por reglas sintcticas y
semnticas que describen su estructura y significado respectivamente.

Sintaxis
A la forma visible de un lenguaje de programacin se le conoce como sintaxis. La mayora
de los lenguajes de programacin son puramente textuales, es decir, utilizan secuencias de
texto que incluyen palabras, nmeros y puntuacin, de manera similar a los lenguajes
naturales escritos. Por otra parte, hay algunos lenguajes de programacin que son ms
grficos en su naturaleza, utilizando relaciones visuales entre smbolos para especificar un
programa.
La sintaxis de un lenguaje de programacin describe las combinaciones posibles de los
smbolos que forman un programa sintcticamente correcto. El significado que se le da a
una combinacin de smbolos es manejado por su semntica (ya sea formal o como parte
7

del cdigo duro de la referencia de implementacin). Dado que la mayora de los lenguajes
son textuales, este artculo trata de la sintaxis textual.

Con frecuencia se resaltan los elementos de la sintaxis con colores diferentes


para facilitar su lectura. Este ejemplo est escrito en Python.
La sintaxis de los lenguajes de programacin es definida generalmente utilizando una
combinacin de expresiones regulares (para la estructura lxica) y la Notacin de BackusNaur (para la estructura gramtica). Este es un ejemplo de una gramtica simple, tomada
de Lisp:
expresin ::= tomo | lista
tomo
::= nmero | smbolo
nmero
::= [+-]?['0'-'9']+
smbolo
::= ['A''Z'<nowiki>'</nowiki>a'-'z'].*
lista
::= '(' expresin* ')'

Con esta gramtica se especifica lo siguiente:


una expresin puede ser un tomo o una lista;
un tomo puede ser un nmero o un smbolo;
un nmero es una secuencia continua de uno o ms dgitos decimales, precedido
opcionalmente por un signo ms o un signo menos;
un smbolo es una letra seguida de cero o ms caracteres (excluyendo espacios); y
una lista es un par de parntesis que abren y cierran, con cero o ms expresiones en
medio.
Algunos ejemplos de secuencias bien formadas de acuerdo a esta gramtica:
'12345', '()', '(a b c232 (1))'
8

No todos los programas sintcticamente correctos son semnticamente correctos. Muchos


programas sintcticamente correctos tienen inconsistencias con las reglas del lenguaje; y
pueden (dependiendo de la especificacin del lenguaje y la solidez de la implementacin)
resultar en un error de traduccin o ejecucin. En algunos casos, tales programas pueden
exhibir un comportamiento indefinido. Adems, incluso cuando un programa est bien
definido dentro de un lenguaje, todava puede tener un significado que no es el que la
persona que lo escribi estaba tratando de construir.
Usando el lenguaje natural, por ejemplo, puede no ser posible asignarle significado a una
oracin gramaticalmente vlida o la oracin puede ser falsa:
"Las ideas verdes y descoloridas duermen furiosamente" es una oracin bien formada
gramaticalmente pero no tiene significado comnmente aceptado.
"Juan es un soltero casado" tambin est bien formada gramaticalmente pero expresa
un significado que no puede ser verdadero.
El siguiente fragmento en el lenguaje C es sintcticamente correcto, pero ejecuta una
operacin que no est definida semnticamente (dado que p es un apuntador nulo, las
operaciones p->real y p->im no tienen ningn significado):
complex *p = NULL;
complex abs_p = sqrt (p->real * p->real + p->im * p->im);

Si la declaracin de tipo de la primera lnea fuera omitida, el programa disparara un error


de compilacin, pues la variable "p" no estara definida. Pero el programa sera
sintcticamente correcto todava, dado que las declaraciones de tipo proveen informacin
semntica solamente.
La gramtica necesaria para especificar un lenguaje de programacin puede ser clasificada
por su posicin en la Jerarqua de Chomsky. La sintaxis de la mayora de los lenguajes de
programacin puede ser especificada utilizando una gramtica Tipo-2, es decir, son
gramticas libres de contexto. Algunos lenguajes, incluyendo a Perl y a Lisp, contienen
construcciones que permiten la ejecucin durante la fase de anlisis. Los lenguajes que
permiten construcciones que permiten al programador alterar el comportamiento de un
analizador hacen del anlisis de la sintaxis un problema sin decisin nica, y generalmente
oscurecen la separacin entre anlisis y ejecucin. En contraste con el sistema de macros
de Lisp y los bloques BEGIN de Perl, que pueden tener clculos generales, las macros de C
son meros reemplazos de cadenas, y no requieren ejecucin de cdigo.
Sintaxis
La semntica esttica define las restricciones sobre la estructura de los textos vlidos que
resulta imposible o muy difcil expresar mediante formalismos sintcticos estndar. Para
los lenguajes compilados, la semntica esttica bsicamente incluye las reglas semnticas
que se pueden verificar en el momento de compilar. Por ejemplo el chequeo de que cada
identificador sea declarado antes de ser usado (en lenguajes que requieren tales
declaraciones) o que las etiquetas en cada brazo de una estructura case sean distintas.
Muchas restricciones importantes de este tipo, como la validacin de que los
identificadores sean usados en los contextos apropiados (por ejemplo no sumar un entero
9

al nombre de una funcin), o que las llamadas a subrutinas tengan el nmero y tipo de
parmetros adecuado, puede ser implementadas definindolas como reglas en una lgica
conocida como sistema de tipos. Otras formas de anlisis estticos, como los anlisis de
flujo de datos, tambin pueden ser parte de la semntica esttica. Nuevos lenguajes de
programacin como Java y C# tienen un anlisis definido de asignaciones, una forma de
anlisis de flujo de datos, como parte de su semntica esttica.

Semntica esttica
La semntica esttica define las restricciones sobre la estructura de los textos vlidos que
resulta imposible o muy difcil expresar mediante formalismos sintcticos estndar. Para
los lenguajes compilados, la semntica esttica bsicamente incluye las reglas semnticas
que se pueden verificar en el momento de compilar. Por ejemplo el chequeo de que cada
identificador sea declarado antes de ser usado (en lenguajes que requieren tales
declaraciones) o que las etiquetas en cada brazo de una estructura case sean distintas.
Muchas restricciones importantes de este tipo, como la validacin de que los
identificadores sean usados en los contextos apropiados (por ejemplo no sumar un entero
al nombre de una funcin), o que las llamadas a subrutinas tengan el nmero y tipo de
parmetros adecuado, puede ser implementadas definindolas como reglas en una lgica
conocida como sistema de tipos. Otras formas de anlisis estticos, como los anlisis de
flujo de datos, tambin pueden ser parte de la semntica esttica. Nuevos lenguajes de
programacin como Java y C# tienen un anlisis definido de asignaciones, una forma de
anlisis de flujo de datos, como parte de su semntica esttica.
Sistema de tipos
Un sistema de tipos define la manera en la cual un lenguaje de programacin clasifica los
valores y expresiones en tipos, como pueden ser manipulados dichos tipos y cmo
interactan. El objetivo de un sistema de tipos es verificar y normalmente poner en vigor
un cierto nivel de exactitud en programas escritos en el lenguaje en cuestin, detectando
ciertas operaciones invlidas. Cualquier sistema de tipos decidible tiene sus ventajas y
desventajas: mientras por un lado rechaza muchos programas incorrectos, tambin
prohbe algunos programas correctos aunque poco comunes. Para poder minimizar esta
desventaja, algunos lenguajes incluyen lagunas de tipos, conversiones explcitas no
checadas que pueden ser usadas por el programador para permitir explcitamente una
operacin normalmente no permitida entre diferentes tipos. En la mayora de los
lenguajes con tipos, el sistema de tipos es usado solamente para checar los tipos de los
programas, pero varios lenguajes, generalmente funcionales, llevan a cabo lo que se
conoce como inferencia de tipos, que le quita al programador la tarea de especificar los
tipos. Al diseo y estudio formal de los sistemas de tipos se le conoce como teora de tipos.

10

1.3.

Tipos de lenguajes de programacin


Los lenguajes de programacin se clasifican en varios tipos, los hay por nivel, y por la
forma como se ejecutan.
Por nivel: Hay lenguajes de programacin de alto nivel y lenguajes de bajo nivel. Los
lenguajes de alto nivel permiten que con pocas palabras se logre hacer lo mismo que se
logra con un lenguaje de bajo nivel.
Ejemplos de lenguajes de alto nivel: C++, Python, Java Ejemplos de lenguaje de bajo nivel:
assembler
Por la forma como se ejecutan Hay lenguajes compilados e interpretados.
Los lenguajes compilados necesitan de un programa especial que lea el cdigo fuente y
cree un archivo binario ejecutable para una plataforma especfica. Ejemplo: C++, Pascal.
Los lenguajes interpretados necesitan de un programa que traduzca en directo el cdigo
fuente escrito a instrucciones de la plataforma en la que se ejecutan. Ejemplo: Python,
Visual Basic Script.
Los primeros son ms rpidos, mientras que los segundos son ms lentos, esto debido a
que al compilar un programa las ordenes son ms entendibles para la computadora,
mientras que al interpretarlo la mquina primero debe leer el cdigo y convertir al paso las
instrucciones a instrucciones de mquina entendibles para ella.

1.4.

Estructura de los lenguajes


1.4.1. Lenguaje mquina
Las invocaciones a memoria, como los procesos aritmtico lgicos son posiciones literales
de conmutadores fsicos del hardware en su representacin booleana. Estos lenguajes son
literales de tareas.
1.4.2. Lenguaje de bajo nivel
Un lenguaje de programacin de bajo nivel es el que proporciona un set de instrucciones
aritmtico-lgicas sin la capacidad de encapsular dichas instrucciones en funciones que no
estn ya contempladas en la arquitectura del hardware.
Complejidad vs Dificultad
Dicho lenguaje es muy simple o nada complicado, pero estructurar programas a ese nivel
es muy difcil. Dado que este lenguaje viene dado por las especificaciones tcnicas del
hardware, no permite una abstraccin fuera de lo estipulado para el microprocesador de
un ordenador. Consecuentemente, es fcilmente trasladado a lenguaje de mquina.
Son instrucciones que ensamblan los grupos de conmutadores necesarios para expresar
una mnima lgica aritmtica. Estn ntimamente vinculados al hardware. Por norma
general estn disponibles a nivel firmware, cmos o chip set. Estos lenguajes estn
11

orientados a procesos. Los procesos se componen de tareas. Contienen tantas


instrucciones como la arquitectura del hardware as haya sido diseada.
Por ejemplo: La arquitectura CISC contiene muchas ms instrucciones a este nivel, que
la RISC.
Son denominados como ensambladores de un hardware concreto.
La palabra bajo no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se
refiere a la reducida abstraccin entre el lenguaje y el hardware. Por ejemplo, se utiliza
este tipo de lenguajes para programar controladores de dispositivos.
Interaccin Mquina vs Humano
En este tipo de lenguajes se trabaja a nivel de instrucciones, es decir, su programacin es
al ms fino detalle, adems, est completamente orientado a la mquina.
Adaptacin - Mxima entre programacin y aprovechamiento del recurso de la
mquina.
Velocidad - Mxima al contar con un acceso directo a los recursos, sin capas
intermedias.
Portabilidad - Mnima por estar restringido a las especificaciones del fabricante.
Abstraccin - Mnima por depender completamente de la tcnica del hardware.
Uso - Requiere de la mxima atencin y de una organizacin estructurada en base a
los planos del hardware y del objetivo del software.

Primera generacin
El lenguaje de programacin de primera generacin (por sus siglas en ingls: 1GL), es el
lenguaje de cdigo mquina. Es el nico lenguaje que un microprocesador entiende de
forma nativa. El lenguaje mquina no puede ser escrito o ledo usando un editor de texto, y
por lo tanto es raro que una persona lo use directamente.
Segunda generacin
El lenguaje de programacin de segunda generacin (por sus siglas en ingls: 2GL), es el
lenguaje ensamblador. Se considera de segunda generacin porque, aunque no es lenguaje
nativo del microprocesador, un programador de lenguaje ensamblador debe conocer la
arquitectura del microprocesador (como por ejemplo las particularidades de sus registros o
su conjunto de instrucciones).
Tercera generacin
Los lenguajes de programacin de tercera generacin son la gama de lenguajes de
programacin para mbitos computacionales donde se logra un alto rendimiento con
respecto a lenguajes de generaciones anteriores.
Dichos lenguajes son utilizados por especialistas, programadores, y otros para desarrollar
programas y sistemas que requieren de un procedimiento especifico para la computadora.
Entre ellos se encuentran C, Fortran, Smalltalk, Ada, C++, C#, Cobol, Delphi, Java, etc.

12

Cuarta generacin
Los Lenguajes de cuarta generacin son ciertas herramientas prefabricadas, que
aparentemente dan lugar a un lenguaje de programacin de alto nivel que se parece ms
al idioma ingls que a un lenguaje de tercera generacin, porque se aleja ms del concepto
de "procedimiento". Pueden acceder a bases de datos.
Alguna gente propone se reserve el nombre de "lenguajes de cuarta generacin" para los
lenguajes orientados a objetos.
Ejemplos: NATURAL, PL-SQL...
Ventajas y Desventajas de los Lenguajes de cuarta generacin:
Ventajas:
1. Permiten elaborar programas en menor tiempo, lo que conlleva a un aumento de
la productividad.
2. El personal que elabora software, sufre menos agotamiento, ya que generalmente,
requiere escribir menos.
3. El nivel de concentracin que se requiere, es menor, ya que algunas instrucciones,
que le son dadas a las herramientas, a su vez, engloban secuencias de
instrucciones a otro nivel, dentro de la herramienta.
4. Cuando hay que dar mantenimiento a los programas, previamente elaborados, es
menos complicado, por requerir menor nivel de concentracin.

Desventajas:
1. Las herramientas prefabricadas, generalmente son menos flexibles que los
[lenguaje de Alto Nivel].
2. Se crea dependencia de uno o varios, proveedores externos, lo que se traduce en
prdida de autonoma. A menudo las herramientas prefabricadas, contienen
libreras de otros proveedores, que conlleva a instalar opciones adicionales que
son consideradas opcionales. Los programas que se elaboran, generalmente se
ejecutan, slo con la herramienta que lo cre (a menos que existan acuerdos con
otros proveedores).
3. A menudo no cumplen con estndares internacionales [ISO][ANSI]. Por este
motivo, invertir tiempo y dinero, es un riesgo a futuro, porque no se sabe a ciencia
cierta, cunto tiempo permanecer la herramienta y su fabricante, en el mercado.

1.4.3. Lenguaje de medio nivel


Son aquellos que, basndose en los juegos de instrucciones disponibles (chip set),
permiten el uso de funciones a nivel aritmtico, pero a nivel lgico dependen de literales
en ensamblador. Estos lenguajes estn orientados a procedimientos, los procedimientos se
componen de procesos.
Ejemplos: C, Basic.
C
C es un lenguaje de programacin creado en 1972 por Dennis M. Ritchie en los
Laboratorios Bell como evolucin del anterior lenguaje B, a su vez basado en BCPL.

13

Al igual que B, es un lenguaje orientado a la implementacin de Sistemas


Operativos, concretamente Unix. C es apreciado por la eficiencia del cdigo que
produce y es el lenguaje de programacin ms popular para crear software de
sistemas, aunque tambin se utiliza para crear aplicaciones.
Se trata de un lenguaje dbilmente tipificado de medio nivel pero con muchas
caractersticas de bajo nivel. Dispone de las estructuras tpicas de los lenguajes de
alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un
control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje
que posibilitan mezclar cdigo en ensamblador con cdigo C o acceder
directamente a memoria o dispositivos perifricos.
La primera estandarizacin del lenguaje C fue en ANSI, con el estndar X3.1591989. El lenguaje que define este estndar fue conocido vulgarmente como ANSI
C. Posteriormente, en 1990, fue ratificado como estndar ISO (ISO/IEC 9899:1990).
La adopcin de este estndar es muy amplia por lo que, si los programas creados
lo siguen, el cdigo es porttil entre plataformas y/o arquitecturas.
C (Lenguaje de programacin)
Paradigma:
Imperativo (Procedural), Estructurado
Apareci en:
1972
Diseado por:
Dennis M. Ritchie
Desarrollado por:
Dennis Ritchie y Bell Labs
ltima versin estable: C99 (Marzo de 2000)
Tipo de dato:
Dbil, Esttico
Implementaciones:
Mltiples
Dialectos:
Cyclone, Unified Parallel C, Split-C, Cilk, C*
Influido por:
B (BCPL,CPL), ALGOL 68, Ensamblador, PL/I, Fortran
Influido a:
Vala, C#, Objective-C, C++, AWK, bc, Java, php, NXC
Sistema operativo:
Multiplataforma
1.4.4. Lenguaje de alto nivel
Son aquellos que permiten una mxima flexibilidad al programador a la hora de abstraerse
o de ser literal. Permiten un camino bidireccional entre el lenguaje mquina y una
expresin casi oral entre la escritura del programa y su posterior compilacin. Estos
lenguajes estn orientados a objetos. Los objetos se componen de propiedades cuya
naturaleza emerge de procedimientos.
Un lenguaje de programacin de alto nivel se caracteriza por expresar los algoritmos de
una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad
ejecutora de las mquinas.
En los primeros lenguajes de alto nivel la limitacin era que se orientaban a un rea
especfica y sus instrucciones requeran de una sintaxis predefinida. Se clasifican como
lenguajes procedimentales.

14

Otra limitacin de los lenguajes de alto nivel es que se requiere de ciertos conocimientos
de programacin para realizar las secuencias de instrucciones lgicas. Los lenguajes de alto
nivel se crearon para que el usuario comn pudiese solucionar un problema de
procesamiento de datos de una manera ms fcil y rpida.
Por esta razn, a finales de los aos 1950 surgi un nuevo tipo de lenguajes de
programacin que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas.
Estos lenguajes se llaman de tercera generacin o de alto nivel, en contraposicin a los de
bajo nivel o de nivel prximo a la mquina.
Ventajas
Genera un cdigo ms sencillo y comprensible.
Escribir un cdigo vlido para diversas mquinas y, posiblemente, sistemas operativos.
Inconvenientes
Reduccin de velocidad al ceder el trabajo de bajo nivel a la mquina.
Algunos requieren que la mquina cliente posea una determinada plataforma.

Principales lenguajes de alto nivel


Ada (lenguaje de programacin)
Ada es un lenguaje de programacin orientado a objetos y fuertemente tipado de
forma esttica que fue diseado por Jean Ichbiah de CII Honeywell Bull por
encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje
multipropsito, orientado a objetos y concurrente, pudiendo llegar desde la
facilidad de Pascal hasta la flexibilidad de C++.
Fue diseado con la seguridad en mente y con una filosofa orientada a la
reduccin de errores comunes y difciles de descubrir. Para ello se basa en un
tipado muy fuerte y en chequeos en tiempo de ejecucin (desactivables en
beneficio del rendimiento). La sincronizacin de tareas se realiza mediante la
primitiva rendezvous.
Ada se usa principalmente en entornos en los que se necesita una gran seguridad y
fiabilidad como la defensa, la aeronutica (Boeing o Airbus), la gestin del trfico
areo (como Indra en Espaa) y la industria aeroespacial entre otros.
ALGOL
Se denomina ALGOL (o Algol) a un lenguaje de programacin. La voz es un
acrnimo de las palabras inglesas Algorithmic Language (lenguaje algortmico).
Fue muy popular en las universidades durante los aos 60, pero no lleg a
popularizarse como lenguaje de utilizacin comercial.
Sin embargo, Algol influy profundamente en varios lenguajes posteriores que s
alcanzaron gran difusin, como Pascal, C y Ada.

15

Hacia 1965 dos corrientes se distinguieron sobre el tema de un sucesor para Algol.
Como resultado se definieron los lenguajes Algol W que es un lenguaje
minimalista, rpidamente implementado y distribuido y, por otra parte, Algol 68
que para la poca est en la frontera entre un lenguaje para programar en l y un
lenguaje para investigar sobre l.
BASIC
En la programacin de computadoras, el BASIC, siglas de Beginner's All-purpose
Symbolic Instruction Code, es una familia de lenguajes de programacin de alto
nivel. El BASIC original, el Dartmouth BASIC, fue diseado en 1964 por John George
Kemeny y Thomas Eugene Kurtz en el Dartmouth College en New Hampshire, USA,
como un medio para facilitar programar computadores a estudiantes (y
profesores) que no fueran de ciencias. En ese tiempo, casi todo el uso de los
computadores requera codificar software hecho a la medida, lo cual era algo
bastante restringido a personas con formacin como cientficos y matemticos.
BASIC originalmente fue desarrollado como una herramienta de enseanza. El
lenguaje y sus variantes llegaron a estar ampliamente disponibles en los
microcomputadores a finales de los aos 1970 y en los aos 1980. El BASIC sigue
siendo popular hasta el da de hoy en un puado de dialectos altamente
modificados, y en nuevos lenguajes, influenciados por BASIC tales como Microsoft
Visual Basic. Por el ao 2006, el 59% de los desarrolladores para la plataforma .NET
usaban Visual Basic .NET como su nico lenguaje.
BASIC
Paradigma:
Apareci en:
Diseado por:
Tipo de dato:
Implementaciones:
Dialectos:
Influido por:
Sistema operativo:

Estructurado - imperativo
1964
John George Kemeny;
Thomas Eugene Kurtz
Dinmico
Mltiples
Mltiples
FORTRAN II, Algol 60
Mltiples

C++
C++ es un lenguaje de programacin diseado a mediados de los aos 1980 por
Bjarne Stroustrup. La intencin de su creacin fue el extender al exitoso lenguaje
de programacin C con mecanismos que permitan la manipulacin de objetos. En
ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++
es un lenguaje hbrido.
Posteriormente se aadieron facilidades de programacin genrica, que se sum a
los otros dos paradigmas que ya estaban admitidos (programacin estructurada y
la programacin orientada a objetos). Por esto se suele decir que el C++ es un
lenguaje de programacin multiparadigma.

16

Actualmente existe un estndar, denominado ISO C++, al que se han adherido la


mayora de los fabricantes de compiladores ms modernos. Existen tambin
algunos intrpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores
(sobrecarga de operadores), y de poder crear nuevos tipos que se comporten
como tipos fundamentales.
El nombre C++ fue propuesto por Rick Mascitti en el ao 1983, cuando el lenguaje
fue utilizado por primera vez fuera de un laboratorio cientfico. Antes se haba
usado el nombre "C con clases". En C++, la expresin "C++" significa "incremento
de C" y se refiere a que C++ es una extensin de C.
C++
Paradigma:
Apareci en:
Diseado por:
Desarrollador:
Tipo de dato:
Implementaciones:

Dialectos:
Influido por:
Ha influido a:

multiparadigma, orientado a objetos, imperativo,


programacin genrica
1983
Bjarne Stroustrup
Bjarne Stroustrup,
Bell Labs
fuerte, esttico
GNU Compiler Collection, Dev-C++, wxDev-C++, Intel
C++ Compiler, Borland C++ Builder, Microsoft Visual
C++, C-Free, Code::Blocks.
ISO C++, ANSI C++ 1998, ANSI C++ 2003
C, Simula, Ada 83, ALGOL 68, CLU, ML
Vala, Ada 95, Java, PHP, D, Perl, C#

C#
C o C# (pronunciado ci sharp en ingls) es un lenguaje de programacin
orientado a objetos desarrollado y estandarizado por Microsoft como parte de su
plataforma .NET, que despus fue aprobado como un estndar por la ECMA e ISO.
Su sintaxis bsica deriva de C/C++ y utiliza el modelo de objetos de la
plataforma.NET, similar al de Java aunque incluye mejoras derivadas de otros
lenguajes (entre ellos Delphi).
El nombre C Sharp fue inspirado por la notacin musical, donde (sostenido, en
ingls sharp) indica que la nota (C es la nota do en ingls) es un semitono ms alta,
sugiriendo que C es superior a C/C++. Adems el signo de # viene de dos +
pegados.
C, como parte de la plataforma.NET, est normalizado por ECMA desde
diciembre de 2001 (C# Language Specification "Especificacin del lenguaje C").
El 7 de noviembre de 2005 sali la versin 2.0 del lenguaje, que inclua mejoras
tales como tipos genricos, mtodos annimos, iteradores, tipos parciales y tipos
anulables. El 19 de noviembre de 2007 sali la versin 3.0 de C#, destacando entre
17

las mejoras los tipos implcitos, tipos annimos y LINQ (Language Integrated Query
-consulta integrada en el lenguaje).
Aunque C forma parte de la plataforma.NET, sta es una interfaz de
programacin de aplicaciones (API), mientras que C es un lenguaje de
programacin independiente diseado para generar programas sobre dicha
plataforma. Ya existe un compilador implementado que provee el marco de
DotGNU - Mono que genera programas para distintas plataformas como Win32,
UNIX y Linux.
C#
Paradigma:
Apareci en:
Diseado por:
ltima versin estable:
Tipo de dato:
Implementaciones:
Influido por:
Ha influido a:
Sistema Operativo
Web

Multiparadigma: Orientado a Objetos, estructurada,


imperativa, genrica, funcional
2001
Microsoft Corporation
4.0 (12 de abril de 2010)
fuerte, esttico
Visual Studio .NET, Mono, SharpDevelop, DotGNU
Java, C++, Lenguaje C, Delphi, Eiffel
Vala, Nemerle, Boo, F#, D, Java 5
Multiplataforma
http://www.microsoft.com/net

COBOL
El lenguaje COBOL (acrnimo de COmmon Business -Oriented Language, Lenguaje
Comn Orientado a Negocios) fue creado en el ao 1960 con el objetivo de crear
un lenguaje de programacin universal que pudiera ser usado en cualquier
ordenador, ya que en los aos 1960 existan numerosos modelos de ordenadores
incompatibles entre s, y que estuviera orientado principalmente a los negocios, es
decir, a la llamada informtica de gestin.
Historia
En la creacin de este lenguaje particip la comisin CODASYL, compuesta por
fabricantes de ordenadores, usuarios y el Departamento de Defensa de Estados
Unidos en mayo de 1959. La definicin del lenguaje se complet en poco ms de
seis meses, siendo aprobada por la comisin en enero de 1960. El lenguaje COBOL
fue diseado inspirndose en el lenguaje Flow-Matic de Grace Hopper y el IBM
COMTRAN de Bob Bemer, ya que ambos formaron parte de la comisin.
Gracias a la ayuda de los usuarios COBOL evolucion rpidamente y fue revisado
de 1961 a 1965 para aadirle nuevas funcionalidades. En 1968 sali la primera
versin ANSI del lenguaje, siendo revisada posteriormente en 1974 (COBOL ANS74), 1985 (COBOL ANS-85, ampliado en 1989 con funciones matemticas,
finalizando el estndar actual ms usado, conocido como COBOL-ANSI), y en 2002
(COBOL ANS-2002). Desde el ao 2007 se viene preparando una nueva revisin del
lenguaje.

18

Adems, existe una versin conocida como COBOL ENTERPRISE, actualizada


regularmente y lanzada en 1991, usada generalmente en sistemas Host.]]
En el 2011 se actualiz con Visual COBOL.
Fortran
Fortran (previamente FORTRAN) (contraccin del ingls Formula Translating
System) es un lenguaje de programacin alto nivel de propsito general,
procedimental e imperativo, que est especialmente adaptado al clculo numrico
y a la computacin cientfica. Desarrollado originalmente por IBM en 1957 para el
equipo IBM 704, y usado para aplicaciones cientficas y de ingeniera, el FORTRAN
vino a dominar esta rea de la programacin desde el principio y ha estado en uso
continuo por ms de medio siglo en reas de cmputo intensivo tales como la
prediccin numrica del tiempo, anlisis de elementos finitos, dinmica de fluidos
computacional (CFD), fsica computacional, y qumica computacional. Es una de los
lenguajes ms populares en el rea de la computacin de alto rendimiento y es el
lenguaje usado para programas que evalan el desempeo (benchmark) y el
ranking de los supercomputadores ms rpidos del mundo.
El FORTRAN (una palabra compuesta, derivada de The IBM Mathematical Formula
Translating System) abarca un linaje de versiones, cada una de las cuales
evolucion para aadir extensiones al lenguaje mientras que usualmente retena
compatibilidad con las versiones previas. Versiones sucesivas han aadido soporte
para procesamiento de datos basados en caracteres (FORTRAN 77), programacin
de arreglos, programacin modular y programacin orientada a objetos (Fortran
90/95), y programacin genrica (Fortran 2003).
Lisp
El Lisp (o LISP) es una familia de lenguajes de programacin de computadora de
tipo funcional con una larga historia y una sintaxis completamente entre
parntesis. Especificado originalmente en 1958 por John McCarthy y sus
colaboradores en el Instituto Tecnolgico de Massachusetts, el Lisp es el segundo
ms viejo lenguaje de programacin de alto nivel de extenso uso hoy en da;
solamente el FORTRAN es ms viejo. Al igual que el FORTRAN, el Lisp ha cambiado
mucho desde sus comienzos, y han existido un nmero de dialectos en su historia.
Hoy, los dialectos Lisp de propsito general ms ampliamente conocidos son el
Common Lisp y el Scheme.
El Lisp fue creado originalmente como una notacin matemtica prctica para los
programas de computadora, basada en el clculo lambda de Alonzo Church. Se
convirti rpidamente en el lenguaje de programacin favorito en la investigacin
de la inteligencia artificial (AI). Como uno de los primeros lenguajes de
programacin, el Lisp fue pionero en muchas ideas en ciencias de la computacin,
incluyendo las estructuras de datos de rbol, el manejo de almacenamiento
automtico, tipos dinmicos, y el compilador auto contenido.

19

El nombre LISP deriva del "LISt Processing" (Proceso de LIStas). Las listas
encadenadas son una de las estructuras de datos importantes del Lisp, y el cdigo
fuente del Lisp en s mismo est compuesto de listas. Como resultado, los
programas de Lisp pueden manipular el cdigo fuente como una estructura de
datos, dando lugar a los macro sistemas que permiten a los programadores crear
una nueva sintaxis de lenguajes de programacin de dominio especfico
empotrados en el Lisp.
La intercambiabilidad del cdigo y los datos tambin da a Lisp su
instantneamente reconocible sintaxis. Todo el cdigo del programa es escrito
como expresiones S, o listas entre parntesis. Una llamada de funcin o una forma
sintctica es escrita como una lista, con la funcin o el nombre del operador en
primer lugar, y los argumentos a continuacin; por ejemplo, una funcin f que
toma tres argumentos puede ser llamada usando (f x y z).
LISP
Paradigma:
Apareci en:
Diseado por:
ltima versin estable:
Tipo de dato:
Implementaciones:
Dialectos:
Influido por:
Ha influido a:
Sistema Operativo
Web
Licencia de software

Multiparadigma, orientado a objetos, funcional,


declarativo
1958
John McCarthy
Fuerte, dinmico
Mltiples
Common Lisp, Scheme, Emacs Lisp
Smalltalk, CLOS, Dylan, Perl

Modula-2
Modula-2 es un lenguaje de programacin cuyo autor es Niklaus Wirth, autor
tambin del lenguaje Pascal.
Como novedad respecto a este ltimo lenguaje, introduce el concepto de mdulo,
y de encapsulacin. Del cdigo contenido en un mdulo, slo se facilita una
interfaz pblica denominada mdulo de definicin, permaneciendo el resto oculto
(encapsulado) para un desarrollador ajeno, lo que facilita el mantenimiento de
dichas estructuras de programacin a la vez que imposibilita la modificacin de las
mismas a cualquiera que no posea el cdigo de su mdulo de implementacin.
Este concepto de mdulo constituye el antecedente de las clases u objetos que se
observan en el concepto moderno de Programacin Orientada a Objetos (POO);
sin embargo, la incapacidad de declarar mltiples instancias de los mdulos, as
como la ausencia de todo tipo de herencia, impiden afirmar que Modula-2 sea un
lenguaje orientado a objetos propiamente dicho.

20

Modula-2 se utiliza principalmente en las universidades por su excelente


adaptacin a la enseanza de lenguajes estructurados, pero en el mbito laboral
su difusin ha sido escasa frente al predominio de C, lo que ha contribuido a crear
un distanciamiento entre universidad y mercado laboral.
Existen compiladores de Modula-2 como Mocka o GNU Modula-2 (para GNU/Linux
y resto de sistemas soportados por GCC), FST (para MS-DOS) o Native XDS (para
Windows) entre otros.
Modula-2
Paradigma:
Apareci en:
Diseado por:
ltima versin estable:
Tipo de dato:
Implementaciones:
Dialectos:
Influido por:
Ha influido a:
Sistema Operativo
Web
Licencia de software

Programacin imperativa, Programacin modular


1978
Niklaus Wirth
Tipo primitivo, Estructura de datos
PIM, ISO
Pascal, Mesa
Oberon, Modula-3
Todos los sistemas
http://www.modula2.org

Pascal
Es un lenguaje de programacin desarrollado por el profesor suizo Niklaus Wirth
entre los aos 1968 y 1969 y publicado en 1970. Su objetivo era crear un lenguaje
que facilitara el aprendizaje de programacin a sus alumnos, utilizando la
programacin estructurada y estructuracin de datos. Sin embargo con el tiempo
su utilizacin excedi el mbito acadmico para convertirse en una herramienta
para la creacin de aplicaciones de todo tipo.
Pascal se caracteriza por ser un lenguaje de programacin estructurado
fuertemente tipificado. Esto implica que:
1. El cdigo est dividido en porciones fcilmente legibles llamadas funciones o
procedimientos. De esta forma Pascal facilita la utilizacin de la programacin
estructurada en oposicin al antiguo estilo de programacin monoltica.
2. El tipo de dato de todas las variables debe ser declarado previamente para que
su uso quede habilitado.
El nombre de Pascal fue escogido en honor al matemtico Blaise Pascal.
Pascal (Lenguaje de programacin)
Paradigma:
imperativo (estructurado)
Apareci en:
1970
Diseado por:
Niklaus Wirth
ltima versin estable:
Tipo de dato:
Implementaciones:
Mltiples
Dialectos:
UCSD, Borland, Turbo
Influido por:
Algol
21

Ha influido a:

Modula-2, Oberon, Component Pascal, Ada, Object


Pascal, Delphi, Java, Oxygene

Sistema Operativo
Web
Licencia de software
Perl
Perl es un lenguaje de programacin diseado por Larry Wall en 1987. Perl toma
caractersticas del lenguaje C, del lenguaje interpretado shell (sh), AWK, sed, Lisp y,
en un grado inferior, de muchos otros lenguajes de programacin.
Estructuralmente, Perl est basado en un estilo de bloques como los del C o AWK,
y fue ampliamente adoptado por su destreza en el procesado de texto y no tener
ninguna de las limitaciones de los otros lenguajes de script.
Perl (Lenguaje de programacin)
Paradigma:
multiparadigma, funcional, imperativa, orientado a
objetos (basado en clases), reflexiva
Apareci en:
1987
Diseado por:
Larry Wall
Desarrollado por:
Larry Wall
ltima versin estable:
5.14.0 (14 de mayo de 2011)
ltima versin de prueba 5.15.0 (15 de mayo de 2011)
Tipo de dato:
Dinmico
Implementaciones:
Perl, mod_perl, embperl
Dialectos:
Perl 5, Perl 6
Influido por:
AWK, Smalltalk 80, Lisp, C, C++, Pascal, sed, Unix shell
Ha influido a:
Python, PHP, Ruby, ECMAScript, LPC, Windows
PowerShell, JavaScript, Falcon
Sistema Operativo
Multiplataforma, muchos (ms de 100)
Web
www.perl.org
Licencia de software
GPL, Licencia Artstica
PL/1
PL/1, acrnimo de Programming Language 1 (Lenguaje de Programacin 1), fue
propuesto por IBM hacia 1970 para responder simultneamente a las necesidades
de las aplicaciones cientficas y comerciales, disponible en las novedosas
plataformas de utilidad general IBM 360 y ms adelante IBM 370.
Este lenguaje tena muchas de las caractersticas que ms adelante adoptara el
lenguaje C y algunas de C++. Por desgracia, IBM registra el nombre del lenguaje
como forma de mantener control sobre su desarrollo, lo que disuadi a otras
empresas de dar ese nombre a sus implementaciones. No siendo posible encontrar
un nico lenguaje para diversas plataformas, los potenciales usuarios del lenguaje
prefirieron no adoptarlo a pesar de sus mltiples innovaciones, que incluan
multiprocesamiento, recursin, estructuras de control modernas, facilidades para
la puesta a punto, asignacin dinmica de espacio para estructuras de datos,
procedimientos genricos, etc.
22

Sin embargo, dentro de los usuarios de IBM, el lenguaje se utiliz con bastante
intensidad, y el proyecto Multics utiliz PL/1 como lenguaje de desarrollo para su
sistema de operacin.
PL/1 fue probablemente el primer lenguaje comercial cuyo compilador estaba
escrito en el lenguaje que compilaba.
PL/SQL
PL/SQL (Procedural Language/Structured Query Language) es un lenguaje de
programacin incrustado en Oracle.
PL/SQL soportara todas las consultas, ya que la manipulacin de datos que se usa
es la misma que en SQL, incluyendo nuevas caractersticas:
El manejo de variables.
Estructuras modulares.
Estructuras de control de flujo y toma de decisiones.
Control de excepciones.
El lenguaje PL/SQL est incorporado en:
Servidor de la base de datos.
Herramientas de Oracle (Forms, Reports, ...).
En un entorno de base de datos los programadores pueden construir bloques
PL/SQL para utilizarlos como procedimientos o funciones, o bien pueden escribir
estos bloques como parte de scripts SQL*Plus.
Los programas o paquetes de PL/SQL se pueden almacenar en la base de datos
como otro objeto, y todos los usuarios que estn autorizados tienen acceso a estos
paquetes. Los programas se ejecutan en el servidor para ahorrar recursos a los
clientes.
Python
Python es un lenguaje de programacin de alto nivel cuya filosofa hace hincapi
en una sintaxis muy limpia y que favorezca un cdigo legible.
Se trata de un lenguaje de programacin multiparadigma ya que soporta
orientacin a objetos, programacin imperativa y, en menor medida,
programacin funcional. Es un lenguaje interpretado, usa tipado dinmico, es
fuertemente tipado y multiplataforma.
Es administrado por la Python Software Foundation. Posee una licencia de cdigo
abierto, denominada Python Software Foundation License, que es compatible con
la Licencia pblica general de GNU a partir de la versin 2.1.1, e incompatible en
ciertas versiones anteriores.

23

Python (Lenguaje de programacin)


Extensiones comunes:
.py, .pyc, .pyd, .pyo, .pyw
Paradigma:
Multiplataforma, multiparadigma: orientado a
objetos, imperativo, funcional, reflexivo
Apareci en:
1991
Diseado por:
Guido van Rossum
Desarrollado por:
Python Software Foundation
ltima versin estable:
3.2.0 / 2.7.1 (20 de febrero de 2011 / 27 de noviembre
de 2010)
ltima versin de prueba
Tipo de dato:
Fuertemente tipado, dinmico
Implementaciones:
CPython, IronPython, Jython, Python for S60, PyPy,
Unladen Swallow
Dialectos:
Stackless Python, RPython
Influido por:
ABC, ALGOL 68, C, Haskell, Icon, Lisp, Modula-3, Perl,
Smalltalk, Java
Ha influido a:
Boo, Cobra, D, Falcon, Genie, Groovy, Ruby,
JavaScript, Cython
Sistema Operativo
Multiplataforma
Web
http://www.python.org/
Licencia de software
Python Software Foundation License
F# (Lenguaje de programacin)
F# (pronunciado F Sharp) es un lenguaje de programacin multiparadigma, para la
plataforma .NET, que conjunta la programacin funcional con las disciplinas
imperativa y orientada a objetos. Es una variante del lenguaje de programacin ML
y es compatible con la implementacin Objective Caml. F# fue inicialmente
desarrollado por Don Syme de Microsoft Research, pero actualmente est siendo
desarrollado por la Divisin de Desarrolladores de Microsoft y ser distribuido
como un lenguaje totalmente soportado en la plataforma .NET y Visual Studio
2010.
F# es un lenguaje fuertemente tipificado que utiliza inferencia de tipos. Como
resultado, los tipos no necesitan estar declarados explcitamente por el
programador; estos sern deducidos por el compilador durante el proceso de
compilacin. Sin embargo, F# tambin permite la declaracin explcita de tipos de
datos. Por ser un lenguaje .NET, F# soporta los objetos y tipos de .NET
F# permite al programador programar de una manera que se asemeja ms a como
pensamos. Por ejemplo: en la cafetera para pedir un caf, nosotros generalmente
no le decimos al mesero exactamente los pasos para hacer el caf, slo pedimos
un caf con ciertas caractersticas. De tal forma que tenemos menos espacio para
cometer errores, porque simplemente escribimos menos cdigo.
Facilita enormemente la creacin de cdigo asincrnico y paralelo, cosa que en
otros lenguajes de .Net nos tomara mucho ms tiempo.

24

F# (Lenguaje de programacin)
Paradigma:
multiparadigma, funcional, imperativo, orientado a
objetos
Apareci en:
2002
Diseado por:
Microsoft Research
Desarrollado por:
Microsoft
ltima versin estable:
2.0 (12 de abril de 2010)
ltima versin de prueba
Tipo de dato:
fuerte, dinmico, inferencia
Implementaciones:
Dialectos:
Influido por:
Ocaml, C#, Haskell
Ha influido a:
Sistema Operativo
Multiplataforma
Web
F# en Microsoft Research
Licencia de software

1.5.

Lenguaje de aplicaciones
Son aquellos que no permiten una bidireccionalidad conceptual entre el lenguaje mquina
y los lenguajes de alto nivel, ni tampoco la literalidad a la hora de invocar conceptos
lgicos. Se basan en libreras creadas en lenguajes de alto nivel. Pueden permitir la
creacin de nuevas libreras, pero son propietarias y dependientes de las suministradas
por la aplicacin. Estos lenguajes estn orientados a eventos, los eventos acontecen
cuando las propiedades de un objeto interactan con otro.
Ejemplos: Visual Basic para aplicaciones.

1.6.

Lenguaje de redes
Son aquellos que se basan en un convenio de instrucciones totalmente independientes de
la mquina, y completamente dependientes de la red a la que estn orientadas. Se dividen
en descriptivos (HTML, XML, VML), de cliente-Servidor (Java, PHP) y de script.
HTML
HTML, siglas de HyperText Markup Language (Lenguaje de Marcado de
Hipertexto), es el lenguaje de marcado predominante para la elaboracin de
pginas web. Es usado para describir la estructura y el contenido en forma de
texto, as como para complementar el texto con objetos tales como imgenes.
HTML se escribe en forma de etiquetas, rodeadas por corchetes angulares (<,>).
HTML tambin puede describir, hasta un cierto punto, la apariencia de un
documento, y puede incluir un script (por ejemplo Javascript), el cual puede
afectar el comportamiento de navegadores web y otros procesadores de HTML.
HTML tambin es usado para referirse al contenido del tipo de MIME text/html o
todava ms ampliamente como un trmino genrico para el HTML, ya sea en
forma descendida del XML (como XHTML 1.0 y posteriores) o en forma descendida
directamente de SGML (como HTML 4.01 y anteriores).
25

XML
XML, siglas en ingls de eXtensible Markup Language ('lenguaje de marcas
extensible'), es un metalenguaje extensible de etiquetas desarrollado por el World
Wide Web Consortium (W3C). Es una simplificacin y adaptacin del SGML y
permite definir la gramtica de lenguajes especficos (de la misma manera que
HTML es a su vez un lenguaje definido por SGML). Por lo tanto XML no es
realmente un lenguaje en particular, sino una manera de definir lenguajes para
diferentes necesidades. Algunos de estos lenguajes que usan XML para su
definicin son XHTML, SVG, MathML.
XML no ha nacido slo para su aplicacin en Internet, sino que se propone como
un estndar para el intercambio de informacin estructurada entre diferentes
plataformas. Se puede usar en bases de datos, editores de texto, hojas de clculo y
casi cualquier cosa imaginable.
XML es una tecnologa sencilla que tiene a su alrededor otras que la
complementan y la hacen mucho ms grande y con unas posibilidades mucho
mayores. Tiene un papel muy importante en la actualidad ya que permite la
compatibilidad entre sistemas para compartir la informacin de una manera
segura, fiable y fcil.
VML
Vector Markup Language (VML) es un lenguaje XML de programacin abierto,
destinado a la creacin de los grficos vectoriales elaborados en 2D o 3D (estticos
o animados) en las pginas Web.
VML fue presentado como una propuesta de estndar al W3C en 1998 por
Autodesk, Hewlett- Packard, Macromedia, Microsoft y Visio, pero compite con el
PGML propuesto por Adobe systems y Sun Microsystems. Despus de un largo
examen, el W3C decide de combinar esos dos formatos, dando origen al formato
SVG.
VML est implementado en Internet Explorer, Microsoft Office y Silverlight. Hace
parte de la especificacin OOXML, donde est definido en complemento de
Drawing ML.
Java
Java es un lenguaje de programacin orientado a objetos, desarrollado por Sun
Microsystems a principios de los aos 90. El lenguaje en s mismo toma mucha de
su sintaxis de C y C++, pero tiene un modelo de objetos ms simple y elimina
herramientas de bajo nivel, que suelen inducir a muchos errores, como la
manipulacin directa de punteros o memoria.
Las aplicaciones Java estn tpicamente compiladas en un bytecode, aunque la
compilacin en cdigo mquina nativo tambin es posible. En el tiempo de
ejecucin, el bytecode es normalmente interpretado o compilado a cdigo nativo
para la ejecucin, aunque la ejecucin directa por hardware del bytecode por un
procesador Java tambin es posible.
26

La implementacin original y de referencia del compilador, la mquina virtual y las


bibliotecas de clases de Java fueron desarrollados por Sun Microsystems en 1995.
Desde entonces, Sun ha controlado las especificaciones, el desarrollo y evolucin
del lenguaje a travs del Java Community Process, si bien otros han desarrollado
tambin implementaciones alternativas de estas tecnologas de Sun, algunas
incluso bajo licencias de software libre.
Entre diciembre de 2006 y mayo de 2007, Sun Microsystems liber la mayor parte
de sus tecnologas Java bajo la licencia GNU GPL, de acuerdo con las
especificaciones del Java Community Process, de tal forma que prcticamente
todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun
que se requiere para ejecutar los programas Java an no lo es).
Java
Paradigma:
Apareci en:
Diseado por:
ltima versin estable:
Tipo de dato:
Implementaciones:
Influido por:
Ha influido a:
Sistema Operativo
Web
Licencia de software

Orientado a objetos
1995
Sun Microsystems
Fuerte, Esttico
Numerosas
Objective-C, C++, Smalltalk, Eiffel
C#, J#, JavaScript, PHP
Multiplataforma
GNU GPL / Java Community Process

PHP
PHP es un lenguaje de programacin interpretado, diseado originalmente para la
creacin de pginas web dinmicas. Es usado principalmente para la interpretacin
del lado del servidor (server-side scripting) pero actualmente puede ser utilizado
desde una interfaz de lnea de comandos o en la creacin de otros tipos de
programas incluyendo aplicaciones con interfaz grfica usando las bibliotecas Qt o
GTK+.
PHP (Lenguaje de programacin)
Paradigma:
multiparadigma
Apareci en:
1995
Diseado por:
PHP Group
Desarrollado por:
PHP Group
ltima versin estable:
5.3.6 (17 de marzo de 2011)
ltima versin de prueba
Tipo de dato:
Dinmico
Implementaciones:
Dialectos:
Influido por:
C, C++, Perl, Java, Python
Ha influido a:
Sistema Operativo
Multiplataforma
27

Web
Licencia de software

http://www.php.net
PHP License 3.01

Falta
Scrip
Scrip es un lenguaje

1.7.

Autoevaluacin
1.7.1. Autoevaluacin 1
1.7.2. Ejercicios

28

Captulo 2 La
programacin
La programacin es el proceso de disear, escribir, probar, depurar y mantener el cdigo
fuente de programas computacionales. El cdigo fuente es escrito en un lenguaje de
programacin. El propsito de la programacin es crear programas que exhiban un
comportamiento deseado. El proceso de escribir cdigo requiere frecuentemente
conocimientos en varias reas distintas, adems del dominio del lenguaje a utilizar,
algoritmos especializados y lgica formal. Programar no involucra necesariamente otras
tareas tales como el anlisis y diseo de la aplicacin (pero si el diseo del cdigo), aunque
si suelen estar fusionadas en el desarrollo de pequeas aplicaciones.
En este captulo se hace una introduccin a los lenguajes de programacin, se describen
las fases en la solucin de problemas utilizando la computadora, y se muestran dos de las
herramientas de programacin (diagrama de flujo y pseudocdigo).
OBJETIVOS
1. Entender los conceptos bsicos de programacin.
2. Aplicar las estructuras de datos, las operaciones primitivas y las estructuras de control,
para solucionar problemas computacionales en pseudocdigo.
3. Asociar los elementos del pseudocdigo con los elementos de un lenguaje de
programacin.
4. Identificar y Comprender los elementos bsicos para resolver un problema.

29

2.1.

Historia
Para crear un programa, y que la computadora interprete y ejecute las instrucciones
escritas en el, debe usarse un Lenguaje de programacin.
En sus inicios las computadoras interpretaban slo instrucciones en un lenguaje especfico,
del ms bajo nivel, conocido como cdigo mquina, siendo ste excesivamente
complicado para programar. De hecho slo consiste en cadenas de nmeros 1 y 0 (Sistema
binario).
Para facilitar el trabajo de programacin, los primeros cientficos que trabajaban en el rea
decidieron reemplazar las instrucciones, secuencias de unos y ceros, por palabras o letras
provenientes del ingls; codificndolas as y creando un lenguaje de mayor nivel, que se
conoce como Assembly o lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A
de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es
bsicamente lo mismo que hacerlo en lenguaje mquina, pero las letras y palabras son
bastante ms fciles de recordar y entender que secuencias de nmeros binarios.
A medida que la complejidad de las tareas que realizaban las computadoras aumentaba,
se hizo necesario disponer de un mtodo sencillo para programar. Entonces, se crearon los
lenguajes de alto nivel. Mientras que una tarea tan trivial como multiplicar dos nmeros
puede necesitar un conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de
alto nivel bastar con solo una.
Una vez que se termina de escribir un programa, sea en ensamblador o en un lenguaje de
alto nivel, es necesario compilarlo, es decir, traducirlo a lenguaje mquina.

2.2.

Lxico y programacin
La programacin se rige por reglas y un conjunto ms o menos reducido de rdenes,
expresiones, instrucciones y comandos que tienden a asemejarse a una lengua natural
acotada (en ingls); y que adems tienen la particularidad de una reducida ambigedad.
Cuanto menos ambiguo es un lenguaje de programacin, se dice, es ms potente. Bajo
esta premisa, y en el extremo, el lenguaje ms potente existente es el binario, con
ambigedad nula (lo cual lleva a pensar as del lenguaje ensamblador).
En los lenguajes de programacin de alto nivel se distinguen diversos elementos entre los
que se incluyen el lxico propio del lenguaje y las reglas semnticas y sintcticas.

2.3.

Programas y algoritmos
Un algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de
seguirse para resolver un problema. Un programa normalmente implementa (traduce a un
lenguaje de programacin concreto) uno o ms algoritmos. Un algoritmo puede
expresarse de distintas maneras: en forma grfica, como un diagrama de flujo, en forma

30

de cdigo como en pseudocdigo o un lenguaje de programacin, en forma explicativa,


etc.
Los programas suelen subdividirse en partes menores, llamadas mdulos, de modo que la
complejidad algortmica de cada una de las partes sea menor que la del programa
completo, lo cual ayuda al desarrollo del programa. Esta es una prctica muy utilizada y se
conoce como "refino progresivo".
Segn Niklaus Wirth, un programa est formado por los algoritmos y la estructura de
datos.
Se han propuesto diversas tcnicas de programacin cuyo objetivo es mejorar tanto el
proceso de creacin de software como su mantenimiento. Entre ellas, se pueden
mencionar las siguientes:
Programacin estructurada.
Programacin modular.
Programacin orientada a objetos (POO).
Programacin declarativa.
2.3.1. Programacin Estructurada
La programacin estructurada es una tcnica para escribir programas (programacin de
computadora) de manera clara. Para ello se utilizan nicamente tres estructuras:
secuencia, seleccin e iteracin; siendo innecesario el uso de la instruccin o instrucciones
de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o mltiples RETURN).
Hoy en da las aplicaciones informticas son mucho ms ambiciosas que las necesidades de
programacin existentes en los aos 1960, principalmente debido a las aplicaciones
grficas, por lo que las tcnicas de programacin estructurada no son suficientes. Ello ha
llevado al desarrollo de nuevas tcnicas, tales como la programacin orientada a objetos y
el desarrollo de entornos de programacin que facilitan la programacin de grandes
aplicaciones.
Orgenes de la programacin estructurada
A finales de los aos 1960 surgi una nueva forma de programar que no solamente daba
lugar a programas fiables y eficientes, sino que adems estaban escritos de manera que
facilitaba su comprensin posterior.
El teorema del programa estructurado, propuesto por Bhm-Jacopini, demuestra que todo
programa puede escribirse utilizando nicamente las tres instrucciones de control
siguientes:
Secuencia
Instruccin condicional.
Iteracin (bucle de instrucciones) con condicin al principio.
Solamente con estas tres estructuras se pueden escribir todos los programas y
aplicaciones posibles. Si bien los lenguajes de programacin tienen un mayor repertorio de
estructuras de control, stas pueden ser construidas mediante las tres bsicas citadas.
31

Estructura secuencial: Una estructura de programa es secuencial si las instrucciones se


ejecutan una tras otra, a modo de secuencia lineal, es decir que una instruccin no se
ejecuta hasta que finaliza la anterior, ni se bifurca el flujo del programa.
Ejemplo:
INPUT x
INPUT y
auxiliar= x
x= y
y= auxiliar
PRINT x
PRINT y

Esta secuencia de instrucciones permuta los valores de x e y, con ayuda de una variable
auxiliar, intermedia.
1 Se guarda una copia del valor de x en auxiliar.
2 Se guarda el valor de y en x, perdiendo su valor anterior, pero se mantiene una
copia del contenido en auxiliar.
3 Se copia a y el valor de auxiliar, que es el valor inicial de x.
El resultado es el intercambio de los valores entre x e y, en tres operaciones
secuenciales.
Estructura selectiva o de seleccin: La estructura selectiva permite que la ejecucin del
programa se bifurque a una instruccin (o conjunto) u otra/s, segn un criterio o condicin
lgica establecida, slo uno de los caminos en la bifurcacin ser el tomado para
ejecutarse.
Ejemplo:
IF a > b THEN
PRINT a ; " es mayor que " ; b
ELSE
PRINT a ; " no es mayor que " ; b
END IF

La instruccin selectiva anterior puede presentar uno de dos mensajes: a es mayor que b
o a no es mayor que b, segn el resultado de la comparacin entre a y b; si el resultado de
a > b es verdadero, se presenta el primer mensaje, si es falso se exterioriza el segundo. Las
palabras clave IF, THEN, ELSE, y END IF; constituyen la propia estructura de la instruccin
condicional (palabra reservadas), proporcionada por el lenguaje, el usuario no debe utilizar
sus nombres salvo para este fin. El caso ejemplo se ha codificado en BASIC.
IF seala el comienzo de la instruccin condicional, y se espera que despus siga la
condicin lgica de control de la instruccin.
THEN seala el fin de la condicin, y despus estar la instruccin a ejecutar si la
condicin es verdadera.
ELSE es opcional, le sigue la instruccin que se ejecutar si la condicin es falsa.
END IF indica el final de la estructura, luego de sta el programa seguir su curso.
Ampliando un poco el ejemplo anterior, con estructuras anidadas:
32

Ejemplo:
IF a > b THEN
PRINT a
ELSEIF a <
PRINT a
ELSE
PRINT a
END IF

; " es mayor que " ; b


b THEN
; " es menor que " ; b
; " es igual que " ; b

Este ejemplo permite considerar situaciones en las que se tiene ms de dos alternativas.
En este caso se ha considerado tres, pero hay situaciones en las que deben considerarse
ms casos y para ellos se puede repetir las veces que sea necesario la opcional ELSEIF.
Estructura iterativa: Un bucle iterativo o iteracin de una secuencia de instrucciones, hace
que se repita su ejecucin mientras se cumpla una condicin, el nmero de iteraciones
normalmente est determinado por el cambio en la condicin dentro del mismo bucle,
aunque puede ser forzado o explcito por otra condicin.
Ejemplo:
a= 0
b= 7
DO WHILE b > a
PRINT a
a= a + 1
LOOP
Esta instruccin tiene tres palabras reservadas WHILE, DO y LOOP.
DO WHILE: seala el comienzo del bucle ("haga mientras") y despus de estas palabras
se espera la condicin lgica de repeticin, si la condicin es verdadera pasa el control
al cuerpo del bucle, en caso contrario el flujo salta directamente al final de la
estructura, saliendo de la misma.
LOOP: seala el final del cuerpo de la estructura de bucle.
El bucle mientras, se repite mientras la condicin sea verdadera, esta condicin se
comprueba o chequea antes de ingresar al cuerpo del bucle, por lo que el mismo puede
que no se ejecute nunca (cuando la condicin es falsa desde un principio) o bien que se
repita tantas veces como resulte y mientras la condicin sea cierta.
En el ejemplo se tienen definidas dos variables a y b, que al iniciarse el bucle contienen los
valores a=0 y b=7.
La condicin del bucle es b > a.
Si a=0 y b=7. la condicin es verdadera, en el cuerpo del bucle se escribe el valor de a en
pantalla y luego se incrementa esa variable en una unidad. Entonces pasa a ser a=1 y b=7.
... (se repite la secuencia)
...
Cuando a=6 y b=7. la condicin sigue siendo verdadera, se escribe el valor de a en pantalla
y se incrementa en una unidad.
33

Cuando se llega a que a=7 y b=7. Entonces la condicin ya resulta falsa y la instruccin
WHILE finaliza, saliendo por LOOP.
La salida por pantalla de este ejemplo es 0 1 2 3 4 5 6, y se iter 7 veces.
El lenguaje utilizado en el ejemplo (BASIC), adems de tener otras del tipo iterativas,
permite utilizar la misma estructura indicada, pero de la siguiente forma:
Ejemplo:
a= 0
b= 7
WHILE b > a
PRINT a
a= a + 1
WEND

Que es absolutamente anloga, en ste formato la palabra reservada WEND marca el fin
del bucle y no se utiliza ni DO ni LOOP.
Anidamiento: El cuerpo de cualquier estructura puede ser instrucciones simples u otras
estructuras, que a su vez pueden contener a otras.
Ejemplo:
CLS
INPUT "Valor entero para a:"; a
INPUT "Valor entero para b:"; b
IF a > b THEN
REM hacer intercambio de variables
auxiliar = a
a = b
b = auxiliar
REM imprimir diferencia en escala de uno en uno
DO WHILE auxiliar > a
auxiliar = auxiliar - 1
PRINT auxiliar
LOOP
ELSE
REM no hacer nada
END IF
PRINT
PRINT a; b

En el ejemplo la sentencia o instruccin CLS slo tiene el efecto de "limpiar" la pantalla al


inicio de la ejecucin del programa. Las instrucciones INPUT permiten que el operador
ingrese, desde teclado y con un mensaje previo acorde, los valores deseados para las
variables a y b. La instruccin no ejecutable REM permite la insercin de comentarios en
cualquier parte del programa, donde el programador lo considere necesario; constituye
una buena prctica de programacin comentar adecuadamente todos los programas, de
este modo se clarifica notablemente su lectura, durante su desarrollo y posterior para
modificacin o mantenimiento.
34

En la anterior estructura IF bien se puede omitir la porcin ELSE, ya que no hay cuerpo all,
de modo que lo siguiente es completamente equivalente:
Ejemplo:
CLS
INPUT "Valor entero para a:"; a
INPUT "Valor entero para b:"; b
IF a > b THEN
REM hacer intercambio de variables
auxiliar = a
a = b
b = auxiliar
REM imprimir diferencia en escala de uno en uno
DO WHILE auxiliar > a
auxiliar = auxiliar - 1
PRINT auxiliar
LOOP
END IF
PRINT
PRINT a; b
Ventajas de la programacin estructurada
1. Los programas son ms fciles de entender, pueden ser ledos de forma secuencial, no
hay necesidad de hacer engorrosos seguimientos en saltos de lnea (GOTO) dentro de
los bloques de cdigo para intentar entender la lgica.
2. La estructura de los programas es clara, puesto que las instrucciones estn ms ligadas
o relacionadas entre s.
3. Reduccin del esfuerzo en las pruebas y depuracin. El seguimiento de los fallos o
errores del programa ("debugging") se facilita debido a su estructura ms sencilla y
comprensible, por lo que los errores se pueden detectar y corregir ms fcilmente.
4. Reduccin de los costos de mantenimiento. Anlogamente a la depuracin, durante la
fase de mantenimiento, modificar o extender los programas resulta ms fcil.
5. Programas son ms sencillos y ms rpidos de confeccionar (y se facilita su
optimizacin).
6. Los bloques de cdigo son casi auto-explicativos, lo que reduce y facilita la
documentacin.
7. Las instrucciones de salto, GOTO, quedan reservadas para construir las instrucciones
bsicas, si fuera realmente imprescindible. Aunque no se usan de forma directa, por
estar prohibida su utilizacin, estn incluidas implcitamente en las instrucciones de
seleccin e iteracin.
8. Un programa escrito de acuerdo a los principios de programacin estructurada no
solamente tendr una mejor estructura sino tambin una excelente presentacin.
9. Se incrementa el rendimiento de los programadores, comparada con la forma
tradicional que utiliza GOTO.
La programacin estructurada ofrece estos beneficios, pero no se la debe considerar
como una panacea ya que el desarrollo de programas es, esencialmente, una tarea de
dedicacin, esfuerzo y creatividad; programar es casi un arte.

35

Inconvenientes de la programacin estructurada


El principal inconveniente de este mtodo de programacin es que se obtiene un nico
bloque de programa, que cuando se hace demasiado grande puede resultar problemtico
el manejo de su cdigo fuente; esto se resuelve empleando conjuntamente la
programacin modular, es decir, si es necesario, se definen mdulos independientes,
programados y compilados por separado (en realidad esto no es necesario, pero si es
recomendable para su mejor mantenimiento y depuracin).
En realidad, cuando se programa hoy en da (inicios del siglo XXI) se utilizan normalmente,
tanto las tcnicas de programacin estructurada como las de programacin modular, de
forma conjunta y por lo tanto es muy comn que cuando se hace referencia a la
programacin estructurada muchos entiendan que ella incluye tambin las tcnicas
modulares, estrictamente no es as.
Un mtodo un poco ms sofisticado es la programacin por capas, en la que los mdulos
tienen una estructura jerrquica en la que se pueden definir funciones dentro de
funciones o de procedimientos.
Si bien las metodologas en cuestin ya son de antigua data ("en plazos informticos"), aun
en la actualidad la conjuncin "Programacin estructurada" y "programacin modular" es
una de la ms utilizadas, juntamente con un ms moderno paradigma, en pleno auge,
completamente distinto, llamado programacin orientada a objetos.
2.3.2. Programacin Modular
La programacin modular es un paradigma de programacin que consiste en dividir un
programa en mdulos o subprogramas con el fin de hacerlo ms legible y manejable.
Se presenta histricamente como una evolucin de la programacin estructurada para
solucionar problemas de programacin ms grandes y complejos de lo que sta puede
resolver.
Al aplicar la programacin modular, un problema complejo debe ser dividido en varios
subproblemas ms simples, y estos a su vez en otros subproblemas ms simples. Esto debe
hacerse hasta obtener subproblemas lo suficientemente simples como para poder ser
resueltos fcilmente con algn lenguaje de programacin. sta tcnica se llama
refinamiento sucesivo, divide y vencers anlisis descendente (Top-Down).
Un mdulo es cada una de las partes de un programa que resuelve uno de los
subproblemas en que se divide el problema complejo original. Cada uno de estos mdulos
tiene una tarea bien definida y algunos necesitan de otros para poder operar. En caso de
que un mdulo necesite de otro, puede comunicarse con ste mediante una interfaz de
comunicacin que tambin debe estar bien definida.
Si bien un mdulo puede entenderse como una parte de un programa en cualquiera de sus
formas y variados contextos, en la prctica se los suele tomar como sinnimos de
procedimientos y funciones. Pero no necesaria ni estrictamente un mdulo es una funcin
o un procedimiento, ya que el mismo puede contener muchos de ellos, no debe
36

confundirse el trmino "modulo" (en el sentido de programacin modular) con trminos


como "funcin" o "procedimiento", propios del lenguaje que lo soporte.

Diagrama del funcionamiento de un


subprograma.
2.3.3. Programacin por capas
La programacin por capas es un estilo de programacin en el que el objetivo primordial
es la separacin de la lgica de negocios de la lgica de diseo; un ejemplo bsico de esto
consiste en separar la capa de datos de la capa de presentacin al usuario.
La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios
niveles y, en caso de que sobrevenga algn cambio, slo se ataca al nivel requerido sin
tener que revisar entre cdigo mezclado. Un buen ejemplo de este mtodo de
programacin sera el modelo de interconexin de sistemas abiertos.
Adems, permite distribuir el trabajo de creacin de una aplicacin por niveles; de este
modo, cada grupo de trabajo est totalmente abstrado del resto de niveles, de forma que
basta con conocer la API que existe entre niveles.
En el diseo de sistemas informticos actual se suelen usar las arquitecturas multinivel o
Programacin por capas. En dichas arquitecturas a cada nivel se le confa una misin
simple, lo que permite el diseo de arquitecturas escalables (que pueden ampliarse con
facilidad en caso de que las necesidades aumenten).
El diseo ms utilizado actualmente es el diseo en tres niveles (o en tres capas).

37

Capas y niveles
1. Capa de presentacin: es la que ve el usuario (tambin se la denomina "capa de
usuario"), presenta el sistema al usuario, le comunica la informacin y captura la
informacin del usuario en un mnimo de proceso (realiza un filtrado previo para
comprobar que no hay errores de formato). Tambin es conocida como interfaz
grfica y debe tener la caracterstica de ser "amigable" (entendible y fcil de usar) para
el usuario. Esta capa se comunica nicamente con la capa de negocio.
2. Capa de negocio: es donde residen los programas que se ejecutan, se reciben las
peticiones del usuario y se envan las respuestas tras el proceso. Se denomina capa de
negocio (e incluso de lgica del negocio) porque es aqu donde se establecen todas las
reglas que deben cumplirse. Esta capa se comunica con la capa de presentacin, para
recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al
gestor de base de datos almacenar o recuperar datos de l. Tambin se consideran
aqu los programas de aplicacin.
3. Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos.
Est formada por uno o ms gestores de bases de datos que realizan todo el
almacenamiento de datos, reciben solicitudes de almacenamiento o recuperacin de
informacin desde la capa de negocio.
Todas estas capas pueden residir en un nico ordenador, si bien lo ms usual es que haya
una multitud de ordenadores en donde reside la capa de presentacin (son los clientes de
la arquitectura cliente/servidor). Las capas de negocio y de datos pueden residir en el
mismo ordenador, y si el crecimiento de las necesidades lo aconseja se pueden separar en
dos o ms ordenadores. As, si el tamao o complejidad de la base de datos aumenta, se
puede separar en varios ordenadores los cuales recibirn las peticiones del ordenador en
que resida la capa de negocio.
Si, por el contrario, fuese la complejidad en la capa de negocio lo que obligase a la
separacin, esta capa de negocio podra residir en uno o ms ordenadores que realizaran
solicitudes a una nica base de datos. En sistemas muy complejos se llega a tener una
serie de ordenadores sobre los cuales corre la capa de negocio, y otra serie de
ordenadores sobre los cuales corre la base de datos.

38

En una arquitectura de tres niveles, los trminos "capas" y "niveles" no significan lo mismo
ni son similares.
El trmino "capa" hace referencia a la forma como una solucin es segmentada desde el
punto de vista lgico:
Presentacin.
Lgica de Negocio.
Datos.
En cambio, el trmino "nivel" corresponde a la forma en que las capas lgicas se
encuentran distribuidas de forma fsica. Por ejemplo:
Una solucin de tres capas (presentacin, lgica del negocio, datos) que residen en un
solo ordenador (Presentacin+lgica+datos). Se dice que la arquitectura de la solucin
es de tres capas y un nivel.
Una solucin de tres capas (presentacin, lgica del negocio, datos) que residen en
dos ordenadores (presentacin+lgica por un lado; lgica+datos por el otro lado). Se
dice que la arquitectura de la solucin es de tres capas y dos niveles.
2.3.4. Programacin orientada a objetos
La programacin orientada a objetos o POO (OOP segn sus siglas en ingls) es un
paradigma de programacin que usa objetos y sus interacciones, para disear aplicaciones
y programas informticos. Est basado en varias tcnicas, incluyendo herencia,
abstraccin, polimorfismo y encapsulamiento. Su uso se populariz a principios de la
dcada de los aos 1990. En la actualidad, existe variedad de lenguajes de programacin
que soportan la orientacin a objetos.
Introduccin
Los objetos son entidades que tienen un determinado comportamiento (mtodo) e
identidad:
El estado est compuesto de datos, ser uno o varios atributos a los que se habrn
asignado unos valores concretos (datos).
El comportamiento est definido por los mtodos o mensajes a los que sabe
responder dicho objeto, es decir, qu operaciones se pueden realizar con l.
La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras
palabras, es su identificador (concepto anlogo al de identificador de una variable o
una constante).
Un objeto contiene toda la informacin que permite definirlo e identificarlo frente a otros
objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al
poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de
mecanismos de interaccin llamados mtodos, que favorecen la comunicacin entre ellos.
Esta comunicacin favorece a su vez el cambio de estado en los propios objetos. Esta
caracterstica lleva a tratarlos como unidades indivisibles, en las que no se separa el
estado y el comportamiento.

39

Los mtodos (comportamiento) y atributos (estado) estn estrechamente relacionados


por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de mtodos
para poder tratar los atributos con los que cuenta. El programador debe pensar
indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de
ellos. Hacerlo podra producir el hbito errneo de crear clases contenedoras de
informacin por un lado y clases con mtodos que manejen a las primeras por el otro. De
esta manera se estara realizando una programacin estructurada camuflada en un
lenguaje de programacin orientado a objetos.
La POO difiere de la programacin estructurada tradicional, en la que los datos y los
procedimientos estn separados y sin relacin, ya que lo nico que se busca es el
procesamiento de unos datos de entrada para obtener otros de salida. La programacin
estructurada anima al programador a pensar sobre todo en trminos de procedimientos o
funciones, y en segundo lugar en las estructuras de datos que esos procedimientos
manejan. En la programacin estructurada slo se escriben funciones que procesan datos.
Los programadores que emplean POO, en cambio, primero definen objetos para luego
enviarles mensajes solicitndoles que realicen sus mtodos por s mismos.
Origen
Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un
lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard
del Centro de Cmputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de
naves, que fueron confundidas por la explosin combinatoria de cmo las diversas
cualidades de diferentes naves podan afectar unas a las otras. La idea surgi al agrupar los
diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de
objetos de definir sus propios datos y comportamientos. Fueron refinados ms tarde en
Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versin fue escrita sobre
Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos
se podran crear y modificar "sobre la marcha" (en tiempo de ejecucin) en lugar de tener
un sistema basado en programas estticos.
La programacin orientada a objetos se fue convirtiendo en el estilo de programacin
dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++,
una extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al
auge de las Interfaces grficas de usuario, para las cuales la programacin orientada a
objetos est particularmente bien adaptada. En este caso, se habla tambin de
programacin dirigida por eventos.
Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes
existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adicin
de estas caractersticas a los lenguajes que no fueron diseados inicialmente para ellas
condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del
cdigo. Los lenguajes orientados a objetos "puros", por su parte, carecan de las
caractersticas de las cuales muchos programadores haban venido a depender. Para saltar
este obstculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en
mtodos orientados a objetos, pero permitiendo algunas caractersticas imperativas de
maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente
acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por
40

Java, en gran parte debido a la aparicin de Internet, y a la implementacin de la mquina


virtual de Java en la mayora de navegadores. PHP en su versin 5 se ha modificado,
soporta una orientacin completa a objetos, cumpliendo todas las caractersticas propias
de la orientacin a objetos.
Conceptos fundamentales
La programacin orientada a objetos es una forma de programar que trata de encontrar
una solucin a estos problemas. Introduce nuevos conceptos, que superan y amplan
conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:
Clase: definiciones de las propiedades y comportamiento de un tipo de objeto
concreto. La instanciacin es la lectura de estas definiciones y la creacin de un objeto
a partir de ellas.
Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la
cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si
esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto,
puede usar los mismos mtodos y variables pblicas declaradas en C. Los
componentes registrados como "privados" (private) tambin se heredan, pero como
no pertenecen a la clase, se mantienen escondidos al programador y slo pueden ser
accedidos a travs de otros mtodos pblicos. Esto es as para mantener hegemnico
el ideal de OOP.
Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de
comportamiento o funcionalidad (mtodos) los mismos que consecuentemente
reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos
rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.
Mtodo: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecucin se
desencadena tras la recepcin de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un mtodo puede producir un
cambio en las propiedades del objeto, o la generacin de un "evento" con un nuevo
mensaje para otro objeto del sistema.
Evento: Es un suceso en el sistema (tal como una interaccin del usuario con la
mquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando
el mensaje adecuado al objeto pertinente. Tambin se puede definir como evento, a la
reaccin que puede desencadenar un objeto, es decir la accin que genera.
Mensaje: una comunicacin dirigida a un objeto, que le ordena que ejecute uno de
sus mtodos con ciertos parmetros asociados al evento que lo gener.
Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una
clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define
como sus caractersticas predeterminadas, y cuyo valor puede ser alterado por la
ejecucin de algn mtodo.
Estado interno: es una variable que se declara privada, que puede ser nicamente
accedida y alterada por un mtodo del objeto, y que se utiliza para indicar distintas
situaciones posibles para el objeto (o clase de objetos). No es visible al programador
que maneja una instancia de la clase.
Componentes de un objeto: atributos, identidad, relaciones y mtodos.
Identificacin de un objeto: un objeto se representa por medio de una tabla o entidad
que est compuesta por sus atributos y funciones correspondientes.

41

En comparacin con un lenguaje imperativo, una "variable", no es ms que un contenedor


interno del atributo del objeto o de un estado interno, as como la "funcin" es un
procedimiento interno del mtodo del objeto.
Caractersticas de la Programacin Orientada a Objetos
Existe un acuerdo acerca de qu caractersticas contempla la "orientacin a objetos", las
caractersticas siguientes son las ms importantes:
Abstraccin: denota las caractersticas esenciales de un objeto, donde se capturan sus
comportamientos. Cada objeto en el sistema sirve como modelo de un "agente"
abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse"
con otros objetos en el sistema sin revelar cmo se implementan estas caractersticas.
Los procesos, las funciones o los mtodos pueden tambin ser abstrados y cuando lo
estn, una variedad de tcnicas son requeridas para ampliar una abstraccin.El
proceso de abstraccin permite seleccionar las caractersticas relevantes dentro de un
conjunto e identificar comportamientos comunes para definir nuevos tipos de
entidades en el mundo real. La abstraccin es clave en el proceso de anlisis y diseo
orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de
clases que permitan modelar la realidad o el problema que se quiere atacar.
Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse
pertenecientes a una misma entidad, al mismo nivel de abstraccin. Esto permite
aumentar la cohesin de los componentes del sistema. Algunos autores confunden
este concepto con el principio de ocultacin, principalmente porque se suelen
emplear conjuntamente.
Modularidad: Se denomina Modularidad a la propiedad que permite subdividir una
aplicacin en partes ms pequeas (llamadas mdulos), cada una de las cuales debe
ser tan independiente como sea posible de la aplicacin en s y de las restantes partes.
Estos mdulos se pueden compilar por separado, pero tienen conexiones con otros
mdulos. Al igual que la encapsulacin, los lenguajes soportan la Modularidad de
diversas formas.
Principio de ocultacin: Cada objeto est aislado del exterior, es un mdulo natural, y
cada tipo de objeto expone una interfaz a otros objetos que especifica cmo pueden
interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un
objeto contra su modificacin por quien no tenga derecho a acceder a ellas,
solamente los propios mtodos internos del objeto pueden acceder a su estado. Esto
asegura que otros objetos no pueden cambiar el estado interno de un objeto de
maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas.
Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del
objeto de una manera controlada y limitando el grado de abstraccin. La aplicacin
entera se reduce a un agregado o rompecabezas de objetos.
Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden
compartir el mismo nombre, al llamarlos por ese nombre se utilizar el
comportamiento correspondiente al objeto que se est usando. O dicho de otro
modo, las referencias y las colecciones de objetos pueden contener objetos de
diferentes tipos, y la invocacin de un comportamiento en una referencia producir el
comportamiento correcto para el tipo real del objeto referenciado. Cuando esto
ocurre en "tiempo de ejecucin", esta ltima caracterstica se llama asignacin tarda
o asignacin dinmica. Algunos lenguajes proporcionan medios ms estticos (en

42

"tiempo de compilacin") de polimorfismo, tales como las plantillas y la sobrecarga de


operadores de C++.
Herencia: las clases no estn aisladas, sino que se relacionan entre s, formando una
jerarqua de clasificacin. Los objetos heredan las propiedades y el comportamiento
de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo
y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos
especializados de objetos preexistentes. Estos pueden compartir (y extender) su
comportamiento sin tener que volver a implementarlo. Esto suele hacerse
habitualmente agrupando los objetos en clases y estas en rboles o enrejados que
reflejan un comportamiento comn. Cuando un objeto hereda de ms de una clase se
dice que hay herencia mltiple.
Recoleccin de basura: la recoleccin de basura o garbage collector es la tcnica por
la cual el entorno de objetos se encarga de destruir automticamente, y por tanto
desvincular la memoria asociada, los objetos que hayan quedado sin ninguna
referencia a ellos. Esto significa que el programador no debe preocuparse por la
asignacin o liberacin de memoria, ya que el entorno la asignar al crear un nuevo
objeto y la liberar cuando nadie lo est usando. En la mayora de los lenguajes
hbridos que se extendieron para soportar el Paradigma de Programacin Orientada a
Objetos como C++ u Object Pascal, esta caracterstica no existe y la memoria debe
desasignarse manualmente.

La programacin orientada a objetos es un paradigma que utiliza objetos como elementos


fundamentales en la construccin de la solucin. Surge en los aos 70. Un objeto es una
abstraccin de algn hecho o ente del mundo real que tiene atributos que representan
sus caractersticas o propiedades y mtodos que representan su comportamiento o
acciones que realizan. Todas las propiedades y mtodos comunes a los objetos se
encapsulan o se agrupan en clases. Una clase es una plantilla o un prototipo para crear
objetos, por eso se dice que los objetos son instancias de clases.

2.4.

Compilacin
El programa escrito en un lenguaje de programacin (fcilmente comprensible por el
programador) es llamado programa fuente y no se puede ejecutar directamente en una
computadora. La opcin ms comn es compilar el programa obteniendo un mdulo
objeto, aunque tambin puede ejecutarse en forma ms directa a travs de un intrprete
informtico.
El cdigo fuente del programa se debe someter a un proceso de traduccin para
convertirlo en lenguaje mquina, cdigo ste directamente ejecutable por el procesador. A
este proceso se le llama compilacin.
Normalmente la creacin de un programa ejecutable (un tpico.exe para Microsoft
Windows o DOS) conlleva dos pasos. El primer paso se llama compilacin (propiamente
dicho) y traduce el cdigo fuente escrito en un lenguaje de programacin almacenado en
un archivo a cdigo en bajo nivel (normalmente en cdigo objeto, no directamente a
lenguaje mquina). El segundo paso se llama enlazado en el cual se enlaza el cdigo de
bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y
se aade el cdigo de las funciones que hay en las bibliotecas del compilador para que el
43

ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo as


finalmente el cdigo objeto a cdigo mquina, y generando un mdulo ejecutable.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de
compilacin en archivos objetos (un tpico.obj para Microsoft Windows, DOS o para Unix);
para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase
de compilacin se almacena slo temporalmente. Un programa podra tener partes
escritas en varios lenguajes (por ejemplo C, C++ y ensamblador), que se podran compilar
de forma independiente y luego enlazar juntas para formar un nico mdulo ejecutable.
Programacin e ingeniera de software
Existe una tendencia a identificar el proceso de creacin de un programa informtico con
la programacin, que es cierta cuando se trata de programas pequeos para uso personal,
y que dista de la realidad cuando se trata de grandes proyectos.
El proceso de creacin de software, desde el punto de vista de la ingeniera, incluye los
siguientes pasos:
1. Reconocer la necesidad de un programa para solucionar un problema o identificar la
posibilidad de automatizacin de una tarea.
2. Recoger los requisitos del programa. Debe quedar claro qu es lo que debe hacer el
programa y para qu se necesita.
3. Realizar el anlisis de los requisitos del programa. Debe quedar claro cmo debe
realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez
del programa se pueden especificar en esta fase.
4. Disear la arquitectura del programa. Se debe descomponer el programa en partes de
complejidad abordable.
5. Implementar el programa. Consiste en realizar un diseo detallado, especificando
completamente todo el funcionamiento del programa, tras lo cual la codificacin
debera resultar inmediata.
6. Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento
junto con los componentes que pueda necesitar (bases de datos, redes de
comunicaciones, etc.).
La ingeniera del software se centra en los pasos de planificacin y diseo del programa,
mientras que antiguamente (programacin artesanal) la realizacin de un programa
consista nicamente en escribir el cdigo.
Objetivos de la programacin
La programacin debe perseguir la obtencin de programas de calidad. Para ello se
establece una serie de factores que determinan la calidad de un programa. Algunos de los
factores de calidad ms importantes son los siguientes:
Correccin. Un programa es correcto si hace lo que debe hacer tal y como se
estableci en las fases previas a su desarrollo. Para determinar si un programa hace lo
que debe, es muy importante especificar claramente qu debe hacer el programa
antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace.
Claridad. Es muy importante que el programa sea lo ms claro y legible posible, para
facilitar as su desarrollo y posterior mantenimiento. Al elaborar un programa se debe
intentar que su estructura sea sencilla y coherente, as como cuidar el estilo en la
44

2.5.

edicin; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de


creacin como en las fases posteriores de correccin de errores, ampliaciones,
modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador,
con lo cual la claridad es an ms necesaria para que otros programadores puedan
continuar el trabajo fcilmente. Algunos programadores llegan incluso a utilizar Arte
ASCII para delimitar secciones de cdigo. Otros, por diversin o para impedir un
anlisis cmodo a otros programadores, recurren al uso de cdigo ofuscado.
Eficiencia. Se trata de que el programa, adems de realizar aquello para lo que fue
creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los
recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele
hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a
la cantidad de memoria que necesita, pero hay otros recursos que tambin pueden ser
de consideracin al obtener la eficiencia de un programa, dependiendo de su
naturaleza (espacio en disco que utiliza, trfico de red que genera, etc.).
Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse
en una plataforma, ya sea hardware o software, diferente a aqulla en la que se
elabor. La portabilidad es una caracterstica muy deseable para un programa, ya que
permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux
ejecutarse tambin en la familia de sistemas operativos Windows. Esto permite que el
programa pueda llegar a ms usuarios ms fcilmente.

Etapas de la programacin
Programacin de algoritmos
La programacin de algoritmos no es ms que el estudio de un problema, su anlisis e
implementacin final del mismo.
En la programacin de los algoritmos encontramos tres fases fundamentales, las cuales
son: identificacin del problema, anlisis y desarrollo del problema e implementacin.
Primera etapa: En la programacin de algoritmos la identificacin del problema no es ms
que, que es lo que se quiere hacer, para ello en esta etapa, encontramos informacin de
entrada o inicial, que servir para el anlisis del problema.
Segunda etapa: es analizar el problema, en esta etapa es conveniente dividir o segregar las
tareas necesarias e identificadas que ayudarn a la solucin del problema dado. De esta
forma se simplificarn y sern ms comprensibles para su desarrollo, es recomendable
siempre ir de las tareas o actividades ms simples a las ms complejas. En esta fase se
transforma la informacin de entrada recibida.
Tercera etapa, consiste en la implantacin y puesta en desarrollo del mismo, aqu se
obtiene la informacin y resultado final resultante de las etapas anteriores.
En la programacin de algoritmos, se utiliza una nomenclatura llamada seudocdigo, una
vez realizados los algoritmos en seudocdigo, estos pueden ser traducidos en cualquier
lenguaje de programacin que lo soporte

45

El proceso de programacin consta, tericamente, de tres partes. La primera, que recibe el


Especificacin: consiste en detallar que tiene que hacer el programa o, dicho de otra
forma, concretar qu problema tiene que resolver nuestro programa.
Diseo: Se escribe el algoritmo que es el conjunto de pasos que hay que realizar para
resolver el problema planteado en la fase de especificacin. De algoritmos pueden haber
varios que hagan lo mismo, algunos sern ms rpidos, otros ms lentos, ms simples o
ms complejos.
Implementacin: En la mayora de los casos la implementacin se realizar en un lenguaje
de programacin de alto nivel.
En el caso de los lenguajes de alto nivel, estos son ms cercanos a la sintaxis humana y al
programador mientras que los de bajo nivel son ms cercanos a las rdenes que entiende
la mquina y en general ms alejados del lenguaje natural. A consecuencia de esto los
lenguajes de alto nivel se pueden emplear en ms de un sistema mientras que los de bajo
nivel tienen un mbito ms restringido.
Los programas escritos en lenguajes de alto nivel tienen que ser convertidos a lenguajes
de bajo nivel para poder ser ejecutados en un sistema. Con esta finalidad existen los
compiladores y los intrpretes. El compilador transforma el lenguaje de alto nivel en un
lenguaje de bajo nivel que suele ser cdigo mquina (o sea, directamente ejecutable por el
procesador). Mientras que el intrprete codifica una o ms instrucciones de forma
secuencial, a medida que las va leyendo.
Son lenguajes interpretados el BASIC y el LISP, mientras que el PASCAL, el C/C++ y muchos
otros son compilados. Finalmente existe una opcin hbrida introducida por JAVA que
dispone de compilador e intrprete de los bytecodes que el compilador genera.

2.6.

Metodologa para la solucin de problemas


El proceso de resolver un problema con una computadora conduce a la escritura de un
programa y su ejecucin en la misma. Aunque el proceso de disear programas es
esencialmente un proceso creativo, se pueden considerar una serie de fases o pasos
comunes, que generalmente deben seguir todos los programadores, es aqu donde entran
en juego los lenguajes de programacin.
Lenguaje de programacin, es un idioma artificial diseado para expresar computaciones
que pueden ser llevadas a cabo por mquinas como las computadoras.

46

Secuencia para la solucin de problemas.

2.7.

Fases en la solucin de problemas


Se pueden considerar una serie de fases o pasos comunes, que generalmente deben seguir
todos los programadores.
1. Definicin del problema
2. Anlisis del problema
3. Seleccin de la mejor alternativa
4. Diagramacin
5. Prueba de escritorio
6. Codificacin
7. Trascripcin
8. Compilacin
9. Pruebas de computador
10. Documentacin externa
2.7.1. Definicin del problema
Est dado por el enunciado del problema, el cul debe ser claro y completo. Es importante
que conozcamos exactamente que se desea del computador; mientras qu esto no se
comprenda, no tiene caso pasar a la siguiente etapa.
2.7.2. Anlisis del problema
Entendido el problema (que se desea obtener del computador), para resolverlo es preciso
analizar:
Los datos o resultados que se esperan.
Los datos de entrada que nos suministran.
El proceso al que se requiere someter esos datos a fin de obtener los resultados
esperados.
reas de trabajo, frmulas y otros recursos necesarios.
Una recomendacin muy prctica es el que nos pongamos en el lugar del computador, y
analizar que es necesario que me ordenen y en que secuencia, para poder producir los
47

resultados esperados. Tambin da buenos resultados hacer similitudes con la labor de un


empleado que hace el mismo trabajo que deseamos programarle al computador.
La secuencia que sigue el computador para resolver el problema es la siguiente:

Los datos de entrada

El proceso al que requiere someter esos datos

Los datos o resultados esperados

Entrada

Proceso

Salida

2.7.3. Seleccin de la mejor alternativa:


Analizado el problema, posiblemente tengamos varias formas de resolverlo; lo importante
es determinar cul es la mejor alternativa: la que produce los resultados esperados en el
menor tiempo y al menor costo. Claro que aqu tambin es muy vlido el principio de que
las cosas siempre se podrn hacer de una mejor forma.
Debemos plantearnos las siguientes preguntas:
1. Cul es la alternativa que produce los resultados en el menor tiempo?
2. Cul es la alternativa que produce los resultados con el menor costo?
Un mtodo eficaz para resolver un problema, es dividir este en otros ms pequeos, y
luego ir resolviendo parte por parte hasta encontrar la solucin al problema total.
2.7.4. Diagramacin /Codificar Pseudocdigo:
Una vez que sabemos cmo resolver el problema, pasamos a dibujar grficamente la
lgica de la alternativa seleccionada. Eso es precisamente un Diagrama de Flujo: la
representacin grfica de una secuencia lgica de pasos a cumplir por el computador para
producir un resultado esperado.
La experiencia nos ha demostrado que resulta muy til trasladar esos pasos lgicos
planteados en el diagrama a frases que indiquen lo mismo; es decir, hacer una codificacin
del programa pero utilizando instrucciones en Espaol. Como si le estuviramos hablando
al computador. Esto es lo que denominaremos Algoritmo o Pseudocdigo.
Cuando logremos habilidad para desarrollar programas, es posible que no elaboremos el
diagrama de flujo; en su lugar podremos hacer directamente el pseudocdigo del
programa.
Diagrama de Flujo: Consiste en la representacin grfica de la secuencia lgica de pasos
que debe cumplir el computador para generar el resultado deseado. Tambin es til en
esta fase, trasladar esos pasos lgicos planteados en el diagrama de flujo a frases que
indiquen lo mismo; a este proceso se le llama conversin pseudocdigo.
48

2.7.5. Prueba de escritorio:


Para cerciorarnos de que el diagrama (y/o el pseudocdigo) est bien, y, para garantizar
que el programa que codifiquemos luego tambin funcione correctamente, es
conveniente someterlo a una Prueba de Escritorio. Esta prueba consiste en que damos
diferentes datos de entrada al programa y seguimos la secuencia indicada en el diagrama,
hasta obtener los resultados. El anlisis de estos nos indicar si el diagrama esta correcto o
si hay necesidad de hacer ajustes (volver al paso 4). Se recomienda dar diferentes datos de
entrada y considerar todos los posibles casos, aun los de excepcin o no esperados, para
asegurarnos de que el programa no producir errores en ejecucin cuando se presenten
estos casos.
2.7.6. Codificacin:
Una vez que hayamos verificado el diagrama o pseudocdigo mediante las pruebas de
escritorio, codificamos el programa en el lenguaje de computador seleccionado. Esto es,
colocamos cada paso del diagrama o pseudocdigo en una instruccin o sentencia,
utilizando un lenguaje que el computador reconoce.
Todos los lenguajes de programacin proveen facilidades para incluir lneas de
comentarios en los programas. Estos comentarios aclaran lo que se ordena al computador
y facilitan entender el programa. Puesto que estos comentarios no son tenidos en cuenta
como instrucciones, y aparecen en los listados del programa, resulta muy conveniente
agregar abundantes comentarios a todo programa que codifiquemos. Esto es lo que se
denomina Documentacin Interna.
2.7.7. Transcripcin:
El programa codificado es necesario que lo llevemos a un medio que sea aceptado como
entrada por el computador: lo perforamos en tarjetas, lo grabamos en un disco flexible o
lo grabamos en un disco duro. Este programa es el que se conoce como Programa Fuente
(Source).
Cdigo fuente, el cdigo fuente de un programa informtico (o software) es un conjunto
de lneas de texto que son las instrucciones que debe seguir la computadora para ejecutar
dicho programa. Por tanto, en el cdigo fuente de un programa est descrito por
completo su funcionamiento.
El cdigo fuente de un programa est escrito por un programador en algn lenguaje de
programacin, pero en este primer estado no es directamente ejecutable por la
computadora, sino que debe ser traducido a otro lenguaje (el lenguaje mquina o cdigo
objeto) que s pueda ser ejecutado por el hardware de la computadora. Para esta
traduccin se usan los llamados compiladores, ensambladores, intrpretes y otros
sistemas de traduccin.
El trmino cdigo fuente tambin se usa para hacer referencia al cdigo fuente de otros
elementos del software, como por ejemplo el cdigo fuente de una pgina web que est
49

escrito en el lenguaje de marcado HTML o en Javascript u otros lenguajes de


programacin web y que es posteriormente ejecutado por el navegador web para
visualizar dicha pgina cuando es visitada.
El rea de la informtica que se dedica a la creacin de programas y, por tanto a la
creacin de su cdigo fuente, es la programacin.
Un aspecto interesante a tener en cuenta cuando se habla del cdigo fuente de un
programa informtico es si su licencia permite que dicho cdigo fuente est disponible
para que cualquiera pueda estudiarlo, modificarlo o reutilizarlo. Cuando se cumple este
aspecto se dice que el programa es software de cdigo abierto, en contraposicin al
software de cdigo cerrado al cual no se tiene permiso editar.
2.7.8. Compilacin:
Utilizamos ahora un programa de computador llamado Compilador o Traductor, el cual
analiza todo el programa fuente y detecta errores de sintaxis ocasionados por fallas en la
codificacin o en la transcripcin. Las fallas de lgica que pueda tener nuestro programa
fuente no son detectadas por el compilador. Cuando no hay errores graves en la
compilacin, el compilador traduce cada instruccin del programa fuente a instrucciones
propias de la mquina (Lenguaje de Maquina), creando el Programa Objeto.
Algunos computadores utilizan Interpretadores, (Generalmente para el Lenguaje Basic), en
reemplazo de programas compiladores. La diferencia consiste en que el interpretador
recibe, desde una terminal, slo una instruccin a la vez, la analiza y, si est bien, la
convierte al formato propio de la maquina. Si la instruccin tiene algn error, el
interpretador llama la atencin de la persona para que corrija dicha instruccin.
Como resultado de la corrida del compilador, podemos obtener varios listados:
Listado del programa fuente
Listado de los errores detectados
Listado de campos utilizados, etc.
Los errores los debemos corregir sobre el mismo programa fuente, ya sea reemplazando
las tarjetas mal perforadas o re-grabando en el disco flexible o en el disco duro. Este paso
de la compilacin lo repetimos hasta eliminar todos los errores y obtener el programa
ejecutable.
Cdigo compilado, es un cdigo que previamente fue un cdigo simblico interpretable
por un compilador, y luego ese compilador lo convirti en un cdigo directamente
interpretable por un controlador (Cdigo mquina).
2.7.9. Pruebas de computador:
Cuando tenemos el programa ejecutable (en lenguaje de maquina), ordenamos al
computador que lo ejecute, y suministramos datos de prueba, como lo hicimos en la
prueba de escritorio. Los resultados obtenidos los analizamos, luego de lo cual puede
ocurrir cualquiera de estas situaciones:
50

a. La lgica del programa est bien, pero hay errores sencillos, los cuales los corregimos
modificando algunas instrucciones o incluyendo unas nuevas; el proceso debemos
repetirlo desde el paso 6.
b. Hay errores ocasionados por fallas en la lgica, lo que nos obliga a regresar a los
pasos 4 y 5 para revisin y modificacin del diagrama.
c. Hay errores muy graves y lo ms aconsejable es que regresemos al paso 2 para
analizar nuevamente el problema, y repetir todo el proceso.
d. No hay errores y los resultados son los esperados. En este caso, el programa lo
podemos guardar permanentemente en una librera o biblioteca del computador,
para sacarlo de all cuando necesitemos ejecutarlo nuevamente.
2.7.10. Documentacin externa:
Cuando el programa ya se tiene listo para ejecutar, es conveniente que hagamos su
documentacin externa siguiendo las normas de la instalacin o las recomendaciones
indicadas por el profesor. Una buena documentacin incluye siempre:
Enunciado del problema.
Diagrama de pasada.
Narrativo con la descripcin de la solucin.
Relacin de las variables o campos utilizados en el programa, cada uno con su
respectiva funcin.
Diagrama del programa.
Listado de la ltima compilacin.
Resultados de la ejecucin del programa.

2.8.

Herramientas de programacin
Previo a la elaboracin del programa, existen ciertas tareas, que es necesario tomar en
cuenta.
Usamos algoritmos en la mayor parte de las actividades de nuestra vida diaria, los
algoritmos son una simple descripcin verbal o escrita de secuencias lgicas de accin,
ejemplo de ello son: recetas de cocina, manejo de un automvil, cruzar una calle, lavarse
los dientes, etc.
Algoritmo, en matemticas, ciencias de la computacin y disciplinas relacionadas, un
algoritmo (del griego y latn, dixit algorithmus y ste a su vez del matemtico persa Al
Juarismi) es un conjunto pre-escrito de instrucciones o reglas bien definidas, ordenadas y
finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas
a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los
pasos sucesivos se llega a un estado final y se obtiene una solucin. Los algoritmos son el
objeto de estudio de la algoritmia.
En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas.
Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un
aparato, o las instrucciones que recibe un trabajador por parte de su patrn. Algunos
ejemplos en matemtica son el algoritmo de la divisin para calcular el cociente de dos
51

nmeros, el algoritmo de Euclides para obtener el mximo comn divisor de dos enteros
positivos, o el mtodo de Gauss para resolver un sistema lineal de ecuaciones.
Definicin formal de algoritmo
En general, no existe ningn consenso definitivo en cuanto a la definicin formal de
algoritmo. Muchos autores los sealan como listas de instrucciones para resolver un
problema abstracto, es decir, que un nmero finito de pasos convierten los datos de un
problema (entrada) en una solucin (salida). Sin embargo cabe notar que algunos
algoritmos no necesariamente tienen que terminar o resolver un problema en particular.
Por ejemplo, una versin modificada de la criba de Eratstenes que nunca termine de
calcular nmeros primos no deja de ser un algoritmo.
A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos
utilizando modelos matemticos como mquinas de Turing entre otros. Sin embargo,
estos modelos estn sujetos a un tipo particular de datos como son nmeros, smbolos o
grficas mientras que, en general, los algoritmos funcionan sobre una vasta cantidad de
estructuras de datos. En general, la parte comn en todas las definiciones se puede
resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos
paralelos:

Tiempo secuencial. Un algoritmo funciona en tiempo discretizado paso a paso,


definiendo as una secuencia de estados "computacionales" por cada entrada vlida (la
entrada son los datos que se le suministran al algoritmo antes de comenzar).
Estado abstracto. Cada estado computacional puede ser descrito formalmente
utilizando una estructura de primer orden y cada algoritmo es independiente de su
implementacin (los algoritmos son objetos abstractos) de manera que en un
algoritmo las estructuras de primer orden son invariantes bajo isomorfismo.
Exploracin acotada. La transicin de un estado al siguiente queda completamente
determinada por una descripcin fija y finita; es decir, entre cada estado y el siguiente
solamente se puede tomar en cuenta una cantidad fija y limitada de trminos del
estado actual.

En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se
pueda describir sin ambigedad y sin hacer referencia a una computadora en particular, y
adems tiene un lmite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en
un solo paso. Esta amplia definicin abarca tanto a algoritmos prcticos como aquellos
que solo funcionan en teora, por ejemplo el mtodo de Newton y la eliminacin de GaussJordan funcionan, al menos en principio, con nmeros de precisin infinita; sin embargo
no es posible programar la precisin infinita en una computadora, y no por ello dejan de
ser algoritmos. En particular es posible considerar una cuarta propiedad que puede ser
usada para validar la tesis de Church-Turing de que toda funcin calculable se puede
programar en una mquina de Turing (o equivalentemente, en un lenguaje de
programacin suficientemente general):
Aritmetizabilidad, solamente operaciones innegablemente calculables estn disponibles
en el paso inicial.
Medios de expresin de un algoritmo
52

Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje


natural, pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros. Las
descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocdigo
y diagramas de flujo evita muchas ambigedades del lenguaje natural. Dichas expresiones
son formas ms estructuradas para representar algoritmos; no obstante, se mantienen
independientes de un lenguaje de programacin especfico.
La descripcin de un algoritmo usualmente se hace en tres niveles:
1. Descripcin de alto nivel. Se establece el problema, se selecciona un modelo
matemtico y se explica el algoritmo de manera verbal, posiblemente con
ilustraciones y omitiendo detalles.
2. Descripcin formal. Se usa pseudocdigo para describir la secuencia de pasos que
encuentran la solucin.
3. Implementacin. Se muestra el algoritmo expresado en un lenguaje de programacin
especfico o algn objeto capaz de llevar a cabo instrucciones.
Tambin es posible incluir un teorema que demuestre que el algoritmo es correcto, un
anlisis de complejidad o ambos.
2.8.1. Diagramas de flujo
Un diagrama de flujo es una representacin grfica de un algoritmo o proceso. Se utiliza
en disciplinas como la programacin, la economa, los procesos industriales y la psicologa
cognitiva. Estos diagramas utilizan smbolos con significados bien definidos que
representan los pasos del algoritmo, y representan el flujo de ejecucin mediante flechas
que conectan los puntos de inicio y de trmino.
Los diagramas de flujo son usados para representar algoritmos pequeos, ya que abarcan
mucho espacio y su construccin es laboriosa. Por su facilidad de lectura son usados como
introduccin a los algoritmos, descripcin de un lenguaje y descripcin de procesos a
personas ajenas a la computacin.
Caractersticas
Un diagrama de flujo siempre tiene un nico punto de inicio y un nico punto de trmino.
Adems, todo camino de ejecucin debe permitir llegar desde el inicio hasta el trmino.
Las siguientes son acciones previas a la realizacin del diagrama de flujo:
Identificar las ideas principales a ser incluidas en el diagrama de flujo. Deben estar
presentes el dueo o responsable del proceso, los dueos o responsables del proceso
anterior y posterior y de otros procesos interrelacionados, otras partes interesadas.
Definir qu se espera obtener del diagrama de flujo.
Identificar quin lo emplear y cmo.
Establecer el nivel de detalle requerido.
Determinar los lmites del proceso a describir.

Los pasos a seguir para construir el diagrama de flujo son:

53

Establecer el alcance del proceso a describir. De esta manera quedar fijado el


comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso
previo y el final la entrada al proceso siguiente.
Identificar y listar las principales actividades/subprocesos que estn incluidos en el
proceso a describir y su orden cronolgico.
Si el nivel de detalle definido incluye actividades menores, listarlas tambin.
Identificar y listar los puntos de decisin.
Construir el diagrama respetando la secuencia cronolgica y asignando los
correspondientes smbolos.
Asignar un ttulo al diagrama y verificar que est completo y describa con exactitud el
proceso elegido.

Ventajas de los diagramas de flujo


Favorecen la comprensin del proceso a travs de mostrarlo como un dibujo. El
cerebro humano reconoce fcilmente los dibujos. Un buen diagrama de flujo
reemplaza varias pginas de texto.
Permiten identificar los problemas y las oportunidades de mejora del proceso. Se
identifican los pasos redundantes, los flujos de los re-procesos, los conflictos de
autoridad, las responsabilidades, los cuellos de botella, y los puntos de decisin.
Muestran las interfaces cliente-proveedor y las transacciones que en ellas se realizan,
facilitando a los empleados el anlisis de las mismas.
Son una excelente herramienta para capacitar a los nuevos empleados y tambin a los
que desarrollan la tarea, cuando se realizan mejoras en el proceso.
Tipos de diagramas de flujo
Formato vertical: En l el flujo o la secuencia de las operaciones, va de arriba hacia
abajo. Es una lista ordenada de las operaciones de un proceso con toda la informacin
que se considere necesaria, segn su propsito.
Formato horizontal: En l, el flujo o la secuencia de las operaciones, va de izquierda a
derecha.
Formato panormico: El proceso entero est representado en una sola carta y puede
apreciarse de una sola mirada mucho ms rpido que leyendo el texto, lo que facilita
su comprensin, aun para personas no familiarizadas. Registra no solo en lnea
vertical, sino tambin horizontal, distintas acciones simultneas y la participacin de
ms de un puesto o departamento que el formato vertical no registra.
Formato Arquitectnico: Describe el itinerario de ruta de una forma o persona sobre
el plano arquitectnico del rea de trabajo. El primero de los flujo-gramas es
eminentemente descriptivo, mientras que los utilizados son fundamentalmente
representativos.

54

Simbologa y significado
Los smbolos estndar normalizados por ANSI1 son muy variados y se describen a
continuacin:
Smbolo

Nombre

Descripcin

Terminal

Indica el inicio o la terminacin del flujo, puede ser


accin o lugar; adems se usa para indicar una unidad
administrativa o persona que recibe o proporciona
informacin.

Entrada
/Salida

Indicador de introduccin de datos y/o salida de


datos

Proceso

Un proceso es cualquier tipo de operacin que


origine cambios de valor de alguna informacin
almacenada.

Decisin o
alternativa

Rombo, indica un punto dentro del flujo en que son


posibles varios caminos alternativos (normalmente son
dos).

Decisin
mltiple

Permite comparar diferentes valores.

Salida en
pantalla

Indicador de salida de datos en pantalla

Documento

Representa cualquier tipo de documento que


entra, se utilice, se genere o salga del
procedimiento.
Indicador de salida de datos en impresora.

Direccin

Seala el sentido en que se ejecutan las


secuencias del algoritmo. Tambin se utiliza para
indicar la conexin de dos smbolos.

ANSI, abreviatura de American National Standars Institute, Organismo no lucrativo, dedicado al desarrollo
de normas, diseadas para mejorar la productividad y competitividad internacional de las empresas en los
Estados Unidos.

55

Smbolo

Nombre
Conector

Descripcin
Representa una conexin o enlace de una parte del
diagrama de flujo con otra parte en una misma

pgina.
Conector de
pgina

Representa una conexin o enlace con otra hoja


diferente, en la que contina el diagrama de flujo.

Subprograma

Indicador de llamada a subprograma.

Archivo
definitivo

Representa un archivo comn y corriente de oficina.

Archivo
temporal

Proporciona un tiempo para el almacenamiento


del documento

Disparador

Indica el inicio de un procedimiento, contiene el


nombre de ste o el nombre de la unidad
administrativa donde se da inicio

Nota
aclaratoria

No forma parte del diagrama de flujo, es un elemento


que se adiciona a una operacin o actividad para dar
una explicacin.

Guarda un documento en forma permanente

56

Estos smbolos son utilizados en combinacin con el resto cuando se est elaborando un
diagrama de flujo de un procedimiento en el cual interviene algn equipo de
procesamiento electrnico.
Smbolo
Nombre
Descripcin
Tarjeta

Representa cualquier tipo de tarjeta perforada


que se utilice en el procedimiento

Cinta
perforada

Representa cualquier tipo de cinta perforada que


se utilice en el procedimiento.

Almacenamiento
secuencial

Representa cualquier tipo de cinta magntica que


se utilice en el procedimiento. Indica
almacenamiento secuencial.

Entrada
manual

Teclado en lnea, representa el uso de un


dispositivo en lnea para promocionar
informacin a una computadora electrnica u
obtenerla de ello.

57

2.8.2. Ejemplos de Diagramas de flujo


Ejemplo 1,
Calcular el salario de un empleado y visualizarlo en pantalla. El salario se calcula
multiplicando el nmero de horas por el pago por hora.
Anlisis:
Entrada:
Horas trabajadas
HT
Precio por hora
PH
Proceso:
Calcular el salario multiplicando las horas trabajadas por el precio por hora.
Salario = HT * PH
Salida:
Mostrar en pantalla el salario,
Salario
Diagrama de Flujo

Inicio

HT=0, PH=0,
Salario=0

Horas, HT
PrecioHora, PH
Salario,salario

HT, PH
Fin
Salario=HT*PH

58

Ejemplo 2,
Supongamos que se mantiene una flota de camiones para repartir productos, en cada
viaje, el conductor anota la distancia recorrida en kilmetros, los galones de gasolina
utilizados, el costo de la gasolina, as como otros gastos. Elabore un diagrama que
calcule e imprima los resultados para cada camin, los kilmetros recorridos por galn,
el costo por kilmetro y el costo total del viaje.
Anlisis:
Entrada:
Kilmetros recorridos,
Gasolina utilizada,
Costo del galn de gasolina
Otros gastos

KmRec
GalGas
CGas
OGas

Proceso:
Los kilmetros por galn se calculan dividiendo la cantidad de kilmetros recorridos
entre el nmero de galones de gasolina consumidos.
KmRecGal = KmRec / GalGas
El costo total del viaje se calcula sumando el costo total de gasolina y otros gastos.
CostoGas = GalGas * CGas
CostoTotal = CostoGas + OGas
El costo por kilmetro se calcula dividiendo el costo total del viaje entre kilmetros
recorridos.
CostoKm = CostoTotal / KmRec
Salida:
Imprima en papel:
Los kilmetros recorridos por galn
kmRecGal
El costo por kilmetro
CostoKm
El costo total del viaje
CostoTotal
Diagrama de Flujo
Inicio

KmRec, GalGas, CGas, OG,


KmGal, CostoTotal, CostoKm

Introduzca:
km recorridos
Galones utilizados
Costo por galn
Otros gastos.

KmRecGal = KmRec / GalGas


CostoTotal = CostoGas + OGas
CostoKm = CostoTotal / KmRec

Km por galn:, KmRecGal


Costo Total: ,CostoTotal
Costo por km:, CostoKm

KmRec, GalGas, CGas, OG

59

Ejemplo 3,
Suponga que usted tiene una lmpara, sta no funciona y usted desea saber cul puede
ser la razn y la solucin al problema.
Anlisis:
Entrada:
Usted conoce que la lmpara no funciona
Proceso:

Verificar si la lmpara est enchufada.


Verificar el estado de la bombilla

Salida:

Comprar lmpara o reemplazar bombilla

Diagrama de Flujo

Los diagramas de flujo sirven para representar algoritmos de manera grfica.

60

Ejemplo 4,
Escribir un programa que lea un valor de temperatura, y escriba si sta, es menor o
mayor que cero grados (0o)
Anlisis:
Entrada:
Valor de temperatura
Temp
Proceso:
Verificar:
Si Temp < 0 entonces
Mostrar mensaje Es menor que cero
Sino
Mostrar mensaje Es mayor que cero
Salida:
Escribir en pantalla: Mostrar mensaje
Diagrama de Flujo
Inicio

Temp

Temp

Temp < 0

Temperatura es mayor
que cero

si
Temperatura es menor
que cero

61

Ejemplo 5,
Elaborar un programa que calcule y visualice en pantalla, el factorial de un nmero
entero N.
Anlisis:
El factorial de un nmero entero positivo se define como el producto de todos los
nmeros naturales anteriores o iguales a l. Se escribe n!, y se lee "n factorial". (Por
definicin el factorial de 0 es 1: 0!=1)
As que la regla es:
n! = n (n-1)!
La funcin factorial (smbolo: !) slo quiere decir que se multiplican una serie de
nmeros que descienden.
Ejemplos:
7!
7 * 6 * 5 * 4 * 3 * 2 * 1 = 5040
5!
5 * 4 * 3 * 2 * 1 = 120
4!
4 * 3 * 2 * 1 = 24
1!
1
Lo que significa "el factorial de cualquier nmero es: el nmero por el factorial de
numero menos 1, por tanto 10! = 10 9!, o incluso 125! = 125 124!
El factorial de 5 es:
5!=5(5-1)!
6! =5(4!)
4!=4(4-1)!
4!=4(3!)
3!=3(3-1)!
3! =3(2)
2!=2(2-1)!
2! 2(1)
1!=1(1-1)!
1! =1(0!)
1!
2!
3!
4!
5!
Entrada:
Un nmero entero

1*1 =1
2*1=2
3*2=6
4*6=24
5*24 =120

Proceso:
Calcular el factorial de N
Multiplicar desde Uno hasta N, de manera que se cumpla:
FactN = N*(N-1). Utilizar un contador que se incremente hasta N.
Salida:
Imprimir el factorial de N

62

Diagrama de Flujo

Inicio

fact = 0
Cont=0, N=0
Introduzca valor de,
N

cont < N

si
fact = fact*cont
cont=cont+1

El factorial es: ,
fact

63

2.8.3. Pseudocdigo
El pseudocdigo (o falso lenguaje) es utilizado por programadores para describir
algoritmos en un lenguaje humano simplificado que no es dependiente de ningn lenguaje
de programacin. Por este motivo puede ser implementado en cualquier lenguaje por
cualquier programador que utilice el pseudocdigo.
Caractersticas y partes
Las principales caractersticas de este lenguaje son:
1. Se puede ejecutar en un ordenador
2. Es una forma de representacin sencilla de utilizar y de manipular.
3. Facilita el paso del programa al lenguaje de programacin.
4. Es independiente del lenguaje de programacin que se vaya a utilizar.
5. Es un mtodo que facilita la programacin y solucin al algoritmo del programa.
Todo documento en pseudocdigo debe permitir la descripcin de:
1. Instrucciones primitivas.
2. Instrucciones de proceso.
3. Instrucciones de control.
4. Instrucciones compuestas.
5. Instrucciones de descripcin.
Estructura a seguir en su realizacin:
1. Cabecera.
Programa.
Modulo.
Tipos de datos.
Constantes.
Variables.
2. Cuerpo.
Inicio.
Instrucciones.
Fin.
Definicin de datos del pseudocdigo
La definicin de datos se da por supuesta, sobre todo en las variables sencillas, si se
emplea formaciones: pilas, colas, vectores o registros, se pueden definir en la cabecera del
algoritmo, y naturalmente cuando empleemos el pseudocdigo para definir estructuras de
datos, esta parte la desarrollaremos adecuadamente.
Funciones y operaciones
Cada autor usa su propio pseudocdigo con sus respectivas convenciones. Por ejemplo, la
instruccin "reemplace el valor de la variable x por el valor de la variable y" puede ser
representado como:

64

Asigne a x el valor de y
X Y
X := Y
X = Y
Las operaciones aritmticas se representan de la forma usual en matemticas.
{Esto es un comentario normalmente matemtico}
Volumen r2*h
// Y este es otro comentario normalmente de texto//
Hipotenusa a2 + b2
Resultado sin (a)
Estructuras de control
En la redaccin del pseudocdigo se utiliza tres tipos de estructuras de control: las
secuenciales, las selectivas y las iterativas.
Estructuras secuenciales: Las instrucciones se siguen en una secuencia fija que
normalmente viene dada por el nmero de rengln. Es decir que las instrucciones
se ejecutan de arriba hacia abajo. Las instrucciones se ejecutan dependiendo de la
condicin dada dentro del algoritmo.
Instruccin1
Instruccin2
Instruccin3

Instruccinn
Estructuras selectivas: Las instrucciones selectivas representan instrucciones que
pueden o no ejecutarse, segn el cumplimiento de una condicin.
Si condicin entonces
Instrucciones
Fin Si
La condicin es una expresin booleana. Instrucciones es ejecutada slo si la
condicin es verdadera.
Selectiva doble (alternativa): La instruccin selectiva realiza una instruccin de dos
posibles, segn el cumplimiento de una condicin.
Si condicin entonces
Instrucciones1
Si no entonces
Instrucciones2
Fin si
La condicin es una variable booleana o una funcin reducible a booleana (lgica,
Verdadero/Falso). Si esta condicin es cierta se ejecuta Instrucciones1, si no es as,
entonces se ejecuta Instrucciones2.
65

Selectiva mltiple: Tambin es comn el uso de una seleccin mltiple que


equivaldra a anidar varias funciones de seleccin.
Si condicin1 entonces
Instrucciones1
Si no si condicin2 entonces
Instrucciones2
Si no si condicin3 entonces
Instrucciones3

Si no entonces
Instruccionesn
Fin si
En este caso hay una serie de condiciones que tienen que ser mutuamente
excluyentes, si una de ellas se cumple las dems tienen que ser falsas
necesariamente, hay un caso si no que ser cierto cuando las dems condiciones
sean falsas.
En esta estructura si Condicin1 es cierta, entonces se ejecuta slo Instrucciones1.
En general, si Condicini es verdadera, entonces slo se ejecuta Instruccionesi
Selectiva mltiple-Casos: Una construccin similar a la anterior (equivalente en
algunos casos) es la que se muestra a continuacin.
Seleccionar indicador
Caso Valor1
Instrucciones1
Caso Valor2
Instrucciones2
Caso Valor3
Instrucciones3

En otro cason
Instruccionesn
Fin Seleccionar
En este caso Indicador es una variable o una funcin cuyo valor es comparado en
cada caso con los valores "Valori", si en algn caso coinciden ambos valores,
entonces se ejecutarn las Instruccionesi correspondientes. La seccin en otro caso
es anloga a la seccin si no del ejemplo anterior.
Estructuras iterativas
Las instrucciones iterativas representan la ejecucin de instrucciones en ms de una vez.
Bucle mientras: El bucle se repite mientras la condicin sea cierta, si al llegar por
primera vez al bucle mientras la condicin es falsa, el cuerpo del bucle no se
ejecuta ninguna vez.
Mientras condicin hacer
Instrucciones
Fin mientras
66

Bucle repetir: Existen otras variantes que se derivan a partir de la anterior. La


estructura de control repetir se utiliza cuando es necesario que el cuerpo del bucle
se ejecuten al menos una vez y hasta que se cumpla la condicin:
Repetir
Instrucciones
Hasta que Condicin
La estructura anterior equivaldra a escribir (Bucle Mientras):
Instrucciones
Mientras (condicin) hacer
Instrucciones
Fin mientras
Bucle para: Una estructura de control muy comn es el ciclo para, la cual se usa
cuando se desea iterar un nmero conocido de veces, empleando como ndice una
variable que se incrementa (o decrementa):
Para i x hasta n hacer
Instrucciones
Fin para
La cual se define como (Bucle mientras):
i x
Mientras i <= n hacer
Instrucciones
i i + 1
Fin mientras
Bucle para cada: Por ltimo, tambin es comn usar la estructura de control para
cada. Esta sentencia se usa cuando se tiene una lista o un conjunto L y se quiere
iterar por cada uno de sus elementos:
Para cada X L hacer
Instrucciones
Fin para cada
Si asumimos que los elementos de L son L0, L1,, Ln , entonces esta sentencia
equivaldra a (Bucle para):
Para i 0 hasta n hacer
X Li
Instrucciones
Fin para
Sin embargo, en la prctica existen mejores formas de implementar esta
instruccin dependiendo del problema.
Es importante recalcar que el pseudocdigo no es un lenguaje estandarizado. Eso significa
que diferentes autores podran dar otras estructuras de control o bien usar estas mismas
estructuras, pero con una notacin diferente. Sin embargo, las funciones matemticas y
lgicas toman el significado usual que tienen en matemtica y lgica, con las mismas
expresiones.

67

El anidamiento
Cualquier instruccin puede ser sustituida por una estructura de control. El siguiente
ejemplo muestra el pseudocdigo del ordenamiento de burbuja, que tiene varias
estructuras anidadas. Este algoritmo ordena de menor a mayor los elementos de una lista
L.

En general, las estructuras anidadas se muestran indentadas, para hacer ms sencilla su


identificacin a simple vista. En el ejemplo, adems de la indentacin, se ha conectado con
flechas los pares de delimitadores de cada nivel de anidamiento.
Desarrollo de algoritmos
Con este pseudocdigo se puede desarrollar cualquier algoritmo que:
Tenga un nico punto de inicio.
Tenga un nmero finito de posibles puntos de trmino.
Haya un nmero finito de caminos, entre el punto de inicio y los posibles puntos de
trmino.
Funciones y procedimientos
Muchas personas prefieren distinguir entre funciones y procedimientos. Una funcin, al
igual que una funcin matemtica, recibe uno o varios valores de entrada y regresa una
salida mientras que un procedimiento recibe una entrada y no genera ninguna salida
aunque en algn caso podra devolver resultados a travs de sus parmetros de entrada si
estos se han declarado por referencia (ver formas de pasar argumentos a una funcin o
procedimiento).
En ambos casos es necesario dejar en claro cules son las entradas para el algoritmo, esto
se hace comnmente colocando estos valores entre parntesis al principio o bien
declarndolo explcitamente con un enunciado. En el caso de las funciones, es necesario
colocar una palabra como regresar o devolver para indicar cul es la salida generada por el
algoritmo. Por ejemplo, el pseudocdigo de una funcin que permite calcular an (un
nmero a elevado a potencia n).

68

funcin potencia (a,n)


//esta funcin calcula an con //
//a y n nmeros naturales//
i n
r 1
x a
mientras i > 0 hacer
si i es impar entonces
r r * x
fin si
x x * x
i i / 2
fin mientras
devolver r
fin funcin
Un ejemplo de procedimiento seria el algoritmo de Ordenamiento de burbuja, por el que
partiendo de una lista de valores estos se ordenan, ntese que en un procedimiento, no se
calcula el valor de una funcin, sino que se realiza una accin, en este caso ordenar la lista.
Procedimiento DeLaBurbuja (a0,a1,a2,, a(n-1))
Para i 2 hasta n hacer
Para j 0 hasta n-1 hacer
Si a(j) < a(j+1) entonces
Aux a(j)
A(j) a(j+1)
a(j+1) aux
Fin si
Fin para
Fin para
Fin procedimiento
Ventajas del pseudocdigo sobre los diagramas de flujo
1. Ocupan mucho menos espacio en el desarrollo del problema.
2. Permite representar de forma fcil operaciones repetitivas complejas.
3. Es ms sencilla la tarea de pasar de pseudocdigo a un lenguaje de programacin
formal.
4. Si se siguen las reglas de indentacin se puede observar claramente los niveles en la
estructura del programa.
5. En los procesos de aprendizaje de los alumnos de programacin, stos estn ms cerca
del paso siguiente (codificacin en un lenguaje determinado, que los que se inician en
esto con la modalidad Diagramas de Flujo).
6. Mejora la claridad de la solucin de un problema.

69

Las palabras reservadas ms utilizadas en la escritura de pseudocdigo son:


Palabra Reservada
Descripcin
Inicio
Inicio de un programa
Fin
Fin de un programa
Leer
Captura de datos
Escribir
Salida de datos
Si <Condicin> entonces
< Instruccin >
Fin si
Si <Condicin> entonces
< Instruccin 1>
Sino
< Instruccin 2>
Fin si
Segn <Condicin> hacer
Valor1: <Instruccin1>
Valor2: < Instruccin2>

Valorn: < Instruccinn>


Sino
< Instruccin alternativa>
Fin segn
Mientras <Condicin> hacer
< Instruccin >
Fin mientras
Repetir
<Instruccin>
Hasta que <Condicin>
Para <vi> hasta <vf> hacer
<Instruccin>
Fin para

Decisin simple

Decisin doble

Decisin mltiple, la parte de Si no es


opcional.

Repeticin de una accin mientras se


cumpla una condicin
Indica la repeticin de una accin hasta
que cumpla la condicin
Repeticin de una accin, un nmero
determinado de veces, desde un valor
inicial hasta un valor final.
Asignacin de un valor a una variable

70

2.8.4. Ejemplos de pseudocdigo


Ejemplo 1,
Calcular el salario de un empleado y visualizarlo en pantalla. El salario se calcula
multiplicando el nmero de horas por el pago por hora.
Anlisis:
Entrada:
Horas trabajadas
HT
Precio por hora
PH
Proceso:
Calcular el salario multiplicando las horas trabajadas por el precio por hora.
Salario = HT * PH
Salida:
Mostrar en pantalla el salario,
Salario
Pseudocdigo
Programa CalculoSalario
Variables
HT,
PH,
Salario
Inicio
Escribir(Ingrese horas trabajadas)
Leer(HT)
Escribir (Ingrese precio por hora)
Leer (PH)
Salario HT * PH
Escribir (Horas trabajadas, HT)
Escribir (Precio por hora, PH)
Escribir (Salario es: , Salario)
Fin

71

Ejemplo 2,
Supongamos que se mantiene una flota de camiones para repartir productos, en cada
viaje, el conductor anota la distancia recorrida en kilmetros, los galones de gasolina
utilizados, el costo de la gasolina, as como otros gastos. Elabore un diagrama que calcule e
imprima los resultados para cada camin, los kilmetros recorridos por galn, el costo por
kilmetro y el costo total del viaje.
Anlisis:
Entrada:
Kilmetros recorridos,
Gasolina utilizada,
Costo del galn de gasolina
Otros gastos

KmRec
GalGas
CGas
OGas

Proceso:
Los kilmetros por galn se calculan dividiendo la cantidad de kilmetros recorridos entre
el nmero de galones de gasolina consumidos.
KmRecGal = KmRec / GalGas
El costo total del viaje se calcula sumando el costo total de gasolina y otros gastos.
CostoGas = GalGas * CGas
CostoTotal = CostoGas + OGas
El costo por kilmetro se calcula dividiendo el costo total del viaje entre kilmetros
recorridos.
CostoKm = CostoTotal / KmRec
Salida:
Imprima en papel:
Los kilmetros recorridos por galn
El costo por kilmetro
El costo total del viaje

kmRecGal
CostoKm
CostoTotal

Pseudocdigo
Programa CostoViaje
Variables
KmRec, GalGas, CGas, OGas,
KmRecGal, CostoGas, CostoKm, CostoTotal
Inicio
Escribir (Introduzca los kilmetros recorridos)
Leer(KmRec)
Escribir (Ingrese galones utilizados)
Leer (GalGas)
Escribir (Ingrese costo por galn)
Leer (CostoGas)
72

Escribir (Ingrese otros gastos)


Leer (OGas)
KmRecGal KmRec / GalGas
CostoTotal CostoGas+OGas
CostoKm CostoTotal / KmRec
Escribir (Kilmetros por galn, kmRecGal)
Escribir (Costo total, CostoTotal)
Escribir (Costo por kilmetro, Costokm
Fin

Ejemplo 3,
Suponga que usted tiene una lmpara, sta no funciona y usted desea saber cul puede
serla razn y la solucin al problema.
Anlisis:
Entrada:
Usted conoce que la lmpara no funciona
Proceso:

Verificar si la lmpara est enchufada.


Verificar el estado de la bombilla

Salida:

Comprar lmpara o reemplazar bombilla

Pseudocdigo
Programa Lmpara
Variables
Enchufada
FocoQuemado
Inicio
Escribir (Est enchufada)
Leer (Enchufada)
Si Enchufada = si entonces
Escribir (Est foco quemado?)
Leer (FocoQuemado)
Si no Si FocoQuemado = Si entonces
Escribir (Reemplazar foco)
Sino
Escribir (Comprar lmpara)
Fin si
Fin

73

Ejemplo 4,
Escribir un programa que lea un valor de temperatura, y escriba si sta, es menor o mayor
que cero grados (0o)
Anlisis:
Entrada:
Valor de temperatura
Temp
Proceso:
Verificar:
Si Temp < 0 entonces
Mostrar mensaje Es menor que cero
Sino
Mostrar mensaje Es mayor que cero
Salida:
Escribir en pantalla: Mostrar mensaje
Pseudocdigo
Programa Temperatura
Variables
Temp
Inicio
Escribir (Ingrese temperatura)
Leer (Temp)
Si Temp < 0 entonces
Escribir (Temperatura es menor que cero)
Si no si Temp > 0 entonces
Escribir (Temperatura es mayor que cero)
Si no
Escribir (Temperatura es igual a cero)
Fin si
Fin

74

Ejemplo 5,
Elaborar un programa que calcule y visualice en pantalla, el factorial de un nmero entero
N.
Anlisis:
El factorial de un nmero entero positivo se define como el producto de todos los nmeros
naturales anteriores o iguales a l. Se escribe n!, y se lee "n factorial". (Por definicin el
factorial de 0 es 1: 0!=1)
As que la regla es:
n! = n (n-1)!
La funcin factorial (smbolo: !) slo quiere decir que se multiplican una serie de nmeros
que descienden.
Ejemplos:
7!
7 * 6 * 5 * 4 * 3 * 2 * 1 = 5040
5!
5 * 4 * 3 * 2 * 1 = 120
4!
4 * 3 * 2 * 1 = 24
1!
1
Lo que significa "el factorial de cualquier nmero es: el nmero por el factorial de
numero menos 1, por tanto 10! = 10 9!, o incluso 125! = 125 124!
El factorial de 5 es:
5!=5(5-1)!
6! =5(4!)
4!=4(4-1)!
4!=4(3!)
3!=3(3-1)!
3! =3(2)
2!=2(2-1)!
2! 2(1)
1!=1(1-1)!
1! =1(0!)
1!
2!
3!
4!
5!
Entrada:
Un nmero entero

1*1 =1
2*1=2
3*2=6
4*6=24
5*24 =120

Proceso:
Calcular el factorial de N
Multiplicar desde Uno hasta N, de manera que se cumpla:
FactN = N*(N-1). Utilizar un contador que se incremente hasta N.
Salida:
Imprimir el factorial de N

75

Pseudocdigo
Implementacin 1
Programa Factorial_1
Variables
N, Factl ,Contador
Inicio
Escribir (Introduzca un nmero entero)
Leer (N)
Contador = 0
Factorial = 0
Para contador 1 hasta N hacer
Factorial = factorial * contador
Fin para
Escribir (El factorial de N es: , Factorial)
Fin
Implementacin 2
Programa Factorial_2
Variables
N, fact, Contador
Inicio
Escribir (Introduzca un nmero entero)
Leer (N)
Contador 1
Fact 0
Mientras contador < N hacer
Inicio
Fact fact * contador
Contador = contador + 1
Fin
Escribir (El factorial de N es: , N)
Fin

76

2.9.

Autoevaluacin
2.9.1. Autoevaluacin 1
1. Determine si las siguientes afirmaciones son verdaderas o falsas. Responda
con V (Verdadero) o F (Falso).
a. La abstraccin Entrada-Proceso-Salida puede aplicarse a toda
( )
situacin que puede ser manejada mediante la computadora.
b. El pseudocdigo es un lenguaje de programacin que puede ser
( )
ejecutado en un computador.
c. En un lenguaje de programacin, cundo se usa una palabra
( )
que no es vlida ni reservada, se produce un error de tipo
gramatical
d. La legibilidad de un programa garantiza que lo mnimo que har
( )
un programa es funcionar
e. Segn el proceso de programacin, el primer paso para
( )
elaborar un programa es la codificacin del programa
f. La creacin de un algoritmo se debe realizar en el paso 6
( )
Mantenimiento del programa
g. Es posible usar una variable, antes de declararla.
( )
h. El proceso de lectura de datos presenta los resultados de la
( )
ejecucin de una o varias tareas
2. Escriba las acciones que permitan hacer las siguientes tareas: declare tres
variables, una tipo texto con identificador nombre, una tipo entero con
identificador ao, y la ltima de tipo real con identificador longitud. Luego
agregue las acciones que permitan solicitar y leer valores del usuario.
Finalmente que se impriman como salida las variables.
3. Dado que y = ax3 + 7 cul de las siguientes expresiones es la correcta?
(Suponga que no conoce otras operaciones aritmticas a ms de las bsicas)
e. y = a * x * x * x + 7
f. y = a * x * x * (x + 7)
g. y = (a * x) * x * (x + 7)
h. y = (a * x) * x * x + 7
i. y = a * (x * x * x) + 7
j. y = a * x * (x * x + 7)
4. Convierta las siguientes expresiones aritmticas a sus equivalentes en
pseudocdigo
a.
B.D+2.F
A=
E+2B
b.

Z = 2((A+B)2.C)

77

2.9.2. Ejercicios
1. Escribir un algoritmo que lea un nmero entero, lo multiplique por dos y a
continuacin muestre el resultado en pantalla.
2. Escribir un algoritmo que convierta un nmero de horas en el equivalente en
minutos y segundos.
3. Escribir un programa que convierta un nmero de segundos en el equivalente
en minutos y horas.
4. Escribir un programa que convierta meses en el equivalente en horas.
5. Escribir un programa que calcule el equivalente en grados Fahrenheit de un
valor de temperatura dado en Celsius.
Fahrenheit = 9/5 * (Celsius) +32
Celsius = 5/9 * (F-32)
6. Escribir un programa que calcule el equivalente en pies de una longitud dada
en metros.
1 metro = 39.27 pulgadas; 12 pulgadas = 1 pie.
7. Suponga que un individuo desea invertir su capital en un banco y desea saber
cunto dinero ganar despus de un mes si el Banco paga a razn de 2%
mensual.
8. Escribir un programa que calcule la longitud y el rea de una circunferencia
dado el radio.
Longitud = 2 * PI* radio
rea = PI * radio2
9. Escribir un programa que calcule la hipotenusa de un tringulo rectngulo.
10. Un vendedor recibe un sueldo base ms un 10% extra por comisin de sus
ventas, el vendedor desea saber cunto dinero obtendr por concepto de
comisiones por las tres ventas que realiza en el mes y el total que recibir en
el mes tomando en cuenta su sueldo base y comisiones.
11. Escribir un programa que calcule la velocidad de un proyectil que recorre 2
Km en 5 minutos. Expresar el resultado en metros/segundo
Velocidad = Espacio / tiempo
12. Tres personas deciden invertir su dinero para fundar una empresa. Cada una
de ellas invierte una cantidad distinta. Obtener el porcentaje que cada quien
invierte con respecto a la cantidad total invertida.
13. Un maestro desea saber qu porcentaje de hombres y que porcentaje de
mujeres hay en un grupo de estudiantes.
14. Escribir un programa que calcule el mayor de tres nmeros.
15. Escribir un programa que lea 7 valores de temperatura, y escriba el nmero
de veces que este tuvo un valor inferior a 0o.
16. Calcular los factoriales de los nmeros ubicados entre dos nmeros enteros N
y M.

78

Parte

Parte 2. Aprenda
Pascal
programando

79

80

Captulo 3
Introduccin a Pascal
xxx.

OBJETIVOS
1. Falta objetivos

81

3.1.

Origen de la programacin Pascal


El lenguaje de programacin de alto nivel Pascal fue diseado en 1968 por Niklaus Wirth
con una finalidad eminentemente pedaggica. El 1983, el Pascal fue estandarizado
llamndose ISO Pascal, justo en el mismo ao en qu Borland lanzara el Turbo Pascal 1.0,
que sera el origen de una saga de xitos que const de 7 versiones para el entorno MSDOS. En estas sucesivas versiones, Borland aprovech para corregir algunas deficiencias
del Pascal original, que Niklaus Wirth haba corregido ya en su otro lenguaje MODULA-2,
volvindose un lenguaje de propsito general, fcil de aprender, potente (si bien a un nivel
inferior que C/C++) y que se ha adaptado a los nuevos paradigmas de programacin como
son la programacin orientada a objetos y clases.

3.2.

Caractersticas
Se trata de un lenguaje de propsito general, esto quiere decir que se puede emplear para
construir todo tipo de aplicaciones. En la prctica tambin quiere decir que se trata de un
lenguaje no diseado para desarrollar ningn tipo especfico de aplicaciones. Pero el
PASCAL es especialmente til para algo: para la enseanza de buenos modos de
programacin. El PASCAL es hoy en da el lenguaje ms usado para la enseanza de la
programacin por varios motivos:
Posee unas reglas sencillas de sintaxis.
Es un lenguaje muy estructurado.
Realiza una comprobacin exhaustiva de tipos de datos.
El hecho de que tenga una estructuracin muy marcada permite que los programas sean
fciles de leer e interpretar, y facilita la escritura de programas del modo que hoy en da se
estima correcto.
El compilador de PASCAL es relativamente sencillo de realizar, por lo que se ha extendido a
muchos tipos de plataformas, desde los ordenadores personales a los grandes
ordenadores corporativos. Cuando una aplicacin se escribe en PASCAL estndar puede
compilarse en cualquier mquina en la que exista compilador de PASCAL, que son la
mayora.
Existen varios dialectos locales del PASCAL, entre los que se encuentra el TURBO PASCAL,
que admiten todas las instrucciones del PASCAL estndar ms un subconjunto especfico
de instrucciones normalmente pensadas para aumentar las capacidades del lenguaje en un
ordenador particular.
Aqu se explicar como programar en Pascal y como aprovechar al mximo todas las
posibilidades que el compilador FreePascal brinda al usuario, sin olvidar las que tratan del
entorno Win32.

82

3.3.

Caractersticas nicas de Pascal


A diferencia de lenguajes de programacin descendientes de C, Pascal utiliza el smbolo
":=" para la asignacin en vez de "=". Si bien el segundo es ms conocido, la prctica ha
demostrado que muchos usuarios utilizan el smbolo de igualdad para comparar valores en
lugar del comparador de C que es el smbolo ==. Esta sintaxis conduce a muchos errores o
bugs difciles de rastrear en cdigo C. Dado que Pascal no permite asignaciones dentro de
expresiones y utiliza sintaxis distintas para asignaciones y comparaciones, no sufre estos
errores.
Adems sus programas tienen definidas dos partes: declarativa y ejecutiva. En la primera
debe aparecer todo lo que se usar en la segunda, de lo contrario se detecta como
desconocido y evita ciertas incomprensiones como veremos ms adelante. En la parte
declarativa se enuncian unit existentes, procedimientos, funciones, variables, constantes
y nuevos tipos de datos estructurados.
Otra diferencia importante es que en Pascal, el tipo de una variable se fija en su definicin;
la asignacin a variables de valores de tipo incompatible no est autorizada. Esto previene
errores comunes donde variables son usadas incorrectamente porque el tipo es
desconocido; y tambin evita la necesidad de notacin hngara, que vienen a ser prefijos
que se aaden a los nombres de las variables y que indican su tipo.

3.4.

Implementaciones
Las primeras versiones del compilador de Pascal, entre ellas la ms distribuida fue UCSD
Pascal, traducan el lenguaje en cdigo para una mquina virtual llamada mquina-P. La
gran ventaja de este enfoque es que para tener un compilador de Pascal en una nueva
arquitectura de mquina solo haca falta reimplementar la mquina-P. Como consecuencia
de esto, solo una pequea parte del intrprete tena que ser reescrita hacia muchas
arquitecturas.
En los aos 1980, Anders Hejlsberg escribi el compilador Blue Label Pascal para la
Nascom-2. Ms tarde fue a trabajar para Borland y reescribi su compilador que se
convirti en Turbo Pascal para la IBM PC. Este nuevo compilador se vendi por $49, un
precio orientado a la distribucin masiva.
El econmico compilador de Borland tuvo una larga influencia en la comunidad de Pascal
que comenz a utilizarlo principalmente en el IBM PC. En busca de un lenguaje
estructurado muchos aficionados al PC reemplazaron el BASIC por este producto. Dado
que Turbo Pascal slo estaba disponible para una arquitectura, traduca directamente
hacia el cdigo mquina del Intel 8088, logrando construir programas que se ejecutaban
mucho ms rpidamente que los producidos en los esquemas interpretados.
Durante los aos 1990, estuvo disponible la tecnologa para construir compiladores que
pudieran producir cdigo para diferentes arquitecturas de hardware. Esto permiti que los
compiladores de Pascal tradujeran directamente al cdigo de la arquitectura en que
corrieran.
Con Turbo Pascal versin 5.5, Borland agreg programacin orientada a objetos a Pascal.
83

Sin embargo, Borland despus decidi mejorar esa extensin del lenguaje introduciendo
su producto Delphi, diseado a partir de estndar Object Pascal, propuesto por Apple
como base. Borland tambin lo llam Object Pascal en las primeras versiones, pero cambi
el nombre a 'lenguaje de programacin Delphi' en sus ltimas versiones.

3.5.

Compiladores disponibles pblicamente


Varios compiladores de Pascal estn disponibles para el uso del pblico en general:
Epox
Compilador GNU Pascal (GPC), escrito en C, basado en GNU Compiler Collection (GCC).
Se distribuye bajo licencia GPL.
Free Pascal est escrito en Pascal (el compilador est creado usando Free Pascal), es
un compilador estable y potente. Tambin distribuido libremente bajo la licencia GPL.
Este sistema permite mezclar cdigo Turbo Pascal con cdigo Delphi, y soporta
muchas plataformas y sistemas operativos.
Turbo Pascal fue el compilador Pascal dominante para PC durante los aos 1980 y
hasta principios de los aos 1990, muy popular debido a sus magnficas extensiones y
tiempos de compilacin sumamente cortos. Actualmente, versiones viejas de Turbo
Pascal (hasta la 7.0) estn disponibles para descargarlo gratuito desde el sitio de
Borland (es necesario registrarse).
Delphi es un producto tipo RAD (Rapid Application Development) de Borland. Utiliza el
lenguaje de programacin Delphi, descendiente de Pascal, para crear aplicaciones para
la plataforma Windows. Las ltimas versiones soportan compilacin en la plataforma
.NET.
Kylix es la versin ms nueva de Borland reiterando la rama de Pascal de sus
productos. Es descendiente de Delphi, con soporte para el sistema operativo Linux y
una librera de objetos mejorada (CLX). El compilador y el IDE estn disponibles para
uso no comercial. Actualmente este proyecto est descontinuado.
Lazarus es un clon de Delphi, basado en Free Pascal es software libre.
MidletPascal para la plataforma J2ME.
TMT. Pascal.

3.6.

Compilador FreePascal
El compilador FreePascal naci en julio de 1993 impulsado por su autor Florian Klaempfl. El
1996 fue lanzado a Internet y en julio de 2000, casi 7 aos despus de su inicio, sali la
versin 1.00 del compilador, suficientemente estable como para poder desarrollar
aplicaciones. Se distribuye bajo licencia GNU GPL que permite, bsicamente, su
distribucin gratuita y del cdigo fuente sin ningn coste aunque los autores retienen el
copyright.
El compilador FreePascal existe para plataformas MS-DOS, Windows de 32-bits, Linux,
OS/2 y AmigaOs y recientemente se ha aadido FreeBSD. Est limitado a las arquitecturas
Intel y Motorola. Como caracterstica interesante hay que decir que soporta muchas de las
caractersticas del Pascal de Borland y de ObjectPascal de Delphi y adems incluye nuevas
posibilidades inexistentes en estos compiladores, como es la sobrecarga de operadores,

84

por poner un ejemplo. Tambin aporta una librera estndar que funciona en todas las
plataformas que da soporte el compilador.

3.7.

Crtica a Pascal
A pesar de ser muy extendido el uso de este lenguaje de programacin, sobre todo en los
aos 1980 y principios de los 90, las primeras versiones de Pascal fueron muy criticadas
por no producir cdigo de caractersticas industriales. Brian Wilson Kernighan, co-autor del
libro "El lenguaje de programacin C", en 1981, en el documento "Why Pascal Is Not My
Favorite Programming Language" ("Por qu Pascal no es mi lenguaje de programacin
preferido") hace una crtica sobre el lenguaje Pascal.

85

86

Captulo 4
Identificadores, datos
y operadores en
Pascal
xxx.

OBJETIVOS
1. Falta objetivos

87

4.1.

Elementos de un programa
Un programa PASCAL es un conjunto de instrucciones que siguen la sintaxis y la estructura
del PASCAL. Al igual que una carta comercial o un trabajo escolar escrito deben seguir
siempre un modelo de escritura; as tambin, un programa escrito en Pascal deber seguir
una misma estructura bsica de escritura de las instrucciones que lo conforman. En el
mismo orden de la lista a continuacin, se escriben las partes que conforman la estructura
de un programa en Pascal:
Cabecera

Program nombre;

Unidades o Libreras

Uses
Identificadores

Declaracin
Etiquetas

Label
Etiqueta

Constantes

Const

Tipos definidos

Type

Definicin
Declaracin de tipos
Variables

Var
Identificadores

Procedimientos

Procedure
Declaracin de procedimientos

Funciones

Function
Declaracin de funciones

Cuerpo del programa

Begin
Sentencia1;
Sentencia2;

Sentencian;
End.

4.1.1. Cabecera del programa


En la cabecera del programa se especifica el nombre y los parmetros del programa, esta
es solamente informativa y no tiene ninguna utilidad para el programa en s. Esta seccin
corresponde a la primera lnea del programa, la cual est encabezada por la palabra
reservada PROGRAM, seguida de un nombre cualquiera para el programa definido por el
usuario. La sintaxis para esta seccin es la siguiente:
PROGRAM NombrePrograma;
88

El primer carcter para el nombre debe ser obligatoriamente una letra, y los caracteres
siguientes a la primera letra; pueden letras, nmeros, o el carcter guin bajo [_], no se
permiten usar espacios en blanco, ni tampoco se pueden usar las palabra reservadas como
nombre de programa.
Ejemplo:
PROGRAM Mi_1_Programa;
4.1.2. Unidades o Libreras
Esta seccin sigue despus de la cabecera, y en ella se deben indicar las unidades o
libreras que sern utilizadas por el programa. Las unidades son mdulos de instrucciones
compiladas independientemente en un archivo, las cuales incorporan una serie de
procedimientos y funciones creados para simplificar la programacin de ciertas tareas
dentro de un programa, estos mdulos (libreras) se especifican utilizando la palabra
USES, seguido de los nombres de la libreras que se van a utilizar.
Algunas de las libreras ms utilizadas son las unidades CRT, DOS, GRAPH, PRINTER. Por
ejemplo, para especificarle al programa que utilice las unidades CTR y GRAPH, en la
seccin de unidades se escribe de la siguiente forma:
USES Crt,Graph;
El compilador de Pascal que est utilizando es para DOS, entonces deber utilizar la unidad
CRT, si es para Windows entonces WinCRT.
4.1.3. Declaraciones
En esta seccin es donde se especifican los elementos, tales como las etiquetas,
constantes, variables, procedimientos, y funciones que se necesitarn dentro del
programa principal para que funcione correctamente. Se pueden declarar varios de estos
elementos y en cualquier orden. Lo nico que debemos conocer ahora es que estas
declaraciones se deben ubicar despus de la seccin de unidades. Observe en el siguiente
ejemplo en el que se declaran dos constantes y dos variables:
CONST
Pi = 3.1416;
MiMensaje = 'Hola mundo;
VAR
NombreCliente: string[15];
EdadCliente: Integer;

Etiquetas, la sentencia GOTO es una sentencia utilizada para alterar el flujo del
programa, es decir, para ir a ejecutar una sentencia en un lugar diferente del
programa y no la lnea siguiente.
89

El uso de GOTO no es aconsejable ya que destruye el modelo de la programacin


estructurada que es la que se utiliza en Pascal, adems se cuenta con las estructuras
de datos que hacen casi innecesario su uso.
Para utilizar este tipo de salto es necesario declarar etiquetas, que no son otra cosa
que el identificador que marcar el lugar a donde se dirigir el flujo del programa al
momento de usar el GOTO. La declaracin de etiquetas se hace antes que la de
constantes y variables, la palabra reservada para su declaracin es LABEL. El nombre
de la etiqueta es un nombre de un identificador como cualquier otro, pero al utilizarse
debe terminar con dos puntos ":".
La sintaxis del comando es:
GOTO etiqueta;
Ejemplo:
PROGRAM Uso_del_GOTO;
LABEL Etiqueta;
BEGIN
WriteLn('Esta lnea si se escribir');
GOTO Etiqueta;
WriteLn('Esta lnea no se escribir');
Etiqueta:
Writeln('Se efectu el brinco');
END.

Constante, es un dato cuyo valor no puede cambiar durante la ejecucin del


programa. Recibe un valor en el momento de la compilacin y este permanece
inalterado durante todo el programa.
Como ya se ha comentado en el tema sobre las partes de un programa, las constantes
se declaran en una seccin que comienza con la palabra reservada CONST. Despus de
declarar una constante ya puedes usarla en el cuerpo principal del programa. Tienen
varios usos: ser miembro en una expresin, en una comparacin, asignar su valor a
una variable, etc.
Ejemplo de declaracin de constantes y el uso.
CONST
Pi = 3.1416;
Altura = 10;

Tipos, definicin de tipos de datos definidos por el usuario. Como se ver ms


adelante, Pascal tiene diversos tipos de datos, pero da la opcin al programador de
crear nuevos tipos de datos de lo que ya posee. Para la declaracin de tipos se escribe
el identificador seguido del signo (=) y posteriormente el tipo de dato, cada tipo de
dato va separado por punto y coma (;).

90

Ejemplo de declaracin:
TYPE
Opcion = 1..12;
Color = (Rojo, verde, azul, negro);

Variable, es un nombre asociado a un elemento de datos que est situado en


posiciones contiguas de la memoria principal, y su valor puede cambiar durante la
ejecucin de un programa.
Toda variable pertenece a un tipo de dato concreto. En la declaracin de una variable
se debe indicar el tipo al que pertenece. As tendremos variables enteras, reales,
booleanas, etc. Por otro lado, distinguimos tres partes fundamentales en la vida de
una variable:
1. Declaracin de variable, esta es la primera fase en la vida de cualquier variable. La
declaracin se realiza en la seccin que comienza con la palabra VAR.
Nota: Toda variable que vaya a ser utilizada en Pascal tiene que ser previamente
declarada.
2. Iniciacin de variable, esto no es ms que darle un valor inicial a una variable. As
como lo primero que se hace con una variable es declararla, lo siguiente tiene que
ser iniciarla. Esto se hace para evitar posibles errores en tiempo de ejecucin, pues
una variable tiene un valor indeterminado despus de declararla. Principalmente,
existen dos maneras de otorgar valores inciales a variables:
Mediante una sentencia de asignacin
Mediante uno de los procedimientos de entrada de datos (read o readln)
3. Utilizacin de variables, una vez declarada e iniciada una variable, es el momento
de utilizarla. Esta es la parte que presenta un mayor abanico de posibilidades.
Ejemplo de declaracin:
VAR
Area, volumen:Integer;
Contador, X:integer;

Procedimiento, es un pequeo mdulo de programa que se utiliza para realizar una


tarea especfica y que pueden ser llamados desde cualquier parte del programa. Para
la declaracin de un procedimiento se utiliza la palabra reservada Procedure.
Ejemplo de declaracin:
Procedure Mensaje;
Begin
Writeln (Hola mundo);
End;
Begin {del programa principal}
Mensaje {Llama al procedimiento}
End.

91

Funcin, es un mdulo que realiza un clculo y que devuelve un valor. Se utiliza la


palabra reservada Function.
Ejemplo de declaracin:

Function doble(valor:integer):integer;
begin
doble:= valor*2;
End;
Begin {del programa principal}
valor:=2;
Writeln( doble(valor));
Readln;
End.

4.1.4. Cuerpo principal


El cuerpo del programa es el que contiene las instrucciones o sentencias que sern
ejecutadas cuando el programa est funcionando en el computador. Las instrucciones del
programa principal se encuentran acotadas entre las palabras reservadas BEGIN y END.
En el siguiente modelo de ejemplo se indica la forma como debe escribirse el cuerpo del
programa:
BEGIN
Sentencia1;
Sentencia2;
Sentencia3;
...
SentenciaN;
END.
El cuerpo principal est compuesto por todas las sentencias o expresiones que traducen el
algoritmo que le da solucin al problema. Existen dos tipos de sentencias, simples y
compuestas.
Ejemplo de sentencias simples:
1. Expresiones de asignacin
2. Sentencias para salida de datos
3. Sentencias para entrada de datos
4. Llamadas a procedimientos

a:=3
Write(a)
Read(valor)

Las sentencias compuestas inician con la instruccin Begin y terminan con un End; entre
ellas puede ir cualquier cantidad de instrucciones simples o compuestas.
Ejemplo: las instrucciones siguientes muestran el tradicional Hola mundo.
Program mi_primer_programa;
Uses CRT;
92

Var
Mensaje:string[30];
Begin {Inicio del cuerpo principal}
Crlscr (*Esta instruccin limpia la pantalla*)
Mensaje:=Hola mundo;
Writeln (Mensaje);
Read;
END.

4.2.

Reglas de escritura de un programa en pascal


En un programa en Pascal, casi todas las sentencias terminan con un punto y coma(;) al
final, esto es debido a que es una regla bsica que todas las lneas de cdigo deben
terminar en punto y coma, salvo algunas excepciones que expresan a continuacin. Las
reglas relativas con punto y coma que separan una sentencia de las otras son las
siguientes:
4. Cada sentencia se debe separar una de otras mediante un punto y coma.
5. Se debe omitir el punto y coma si la lnea termina en una palabra reservada.
6. Se puede omitir el punto y coma final si va seguido de las palabras reservadas END o
UNTIL.
7. La palabra reservada END al final del programa debe terminar en punto (.) final.

4.3.

Comentarios
En Pascal, los comentarios se encierran bien entre llaves o parntesis acompaados por un
asterisco. Delphi tambin entiende los comentarios de estilo C++, que se extienden hasta
el final de la lnea:
Ejemplo:
{este es un comentario}
(* este es otro comentario *)
// este es un comentario hasta el final de la lnea (solo para delphi)
La primera forma es ms breve, y es ms comn. La segunda forma a menudo se prefiere
en Europa, porque muchos teclados europeos carecen del smbolo de llaves. La tercera se
tom prestada de C++, y est disponible slo en las versiones de Delphi de 32-bits. Los
comentarios hasta el final de la lnea son muy tiles para comentarios cortos o para evitar
que se ejecute una lnea (temporalmente).

4.4.

Identificadores
En Pascal, a la hora de asignar un nombre a un elemento de un programa, se debe tener
en cuenta que todo indenficador debe cumplir las siguientes reglas de sintaxis:
1. Consta de uno o ms caracteres.

93

2. El primer carcter debe ser una letra, mientras que, todos los dems pueden ser
letras, dgitos o el carcter subrayado (_). Las letras pueden ser minsculas o
maysculas del alfabeto ingls. As pues, no est permitido el uso de las letras '' y ''.
3. No pueden existir dos identificadores iguales, es decir, dos elementos de un programa
no pueden nombrarse de la misma forma. Lo cual no quiere decir que un identificador
no pueda aparecer ms de una vez en un programa.
De la segunda regla se deduce que un identificador no puede contener caracteres
especiales, salvo el carcter subrayado (_) a partir del segundo carcter. Es importante
resaltar que las vocales no pueden llevar tilde ni diresis.
Ejemplo de identificadores vlidos:
Descuento
E_18
_impuesto
Pago_hora
Ejemplo de identificadores NO vlidos:
5_veces
NO+identidad
%Descuento
3.1.1. Palabras reservadas
Estas palabras no pueden ser usadas como identificadores porque poseen un significado
especial para el compilador. En orden alfabtico, algunas de ellas:
PALABRA
RESERVADA
And
Asm
Array
Begin
Case
Const
constructor
destructor
Div
Do
downto
Else

ESPAOL
Y

PALABRA
RESERVADA
mod
nil
not
object
of
or
packed
procedure
program
Read
Record
Repeat

End

Arreglo
Inicio
Caso
Constante
Constructor
Destructor
Divisin entera
Hacer
Decrementar
Caso contrario
Fin

exports

Exportar

Shl

File
For
function
Goto

Archivo
Para
Funcin
Ir a

Shr
String
Then
To

Set

ESPAOL
Mdulo o residuo
nulo
No
Objeto
De
O
Paquete
Procedimiento
Programa
Registro
Repetir
Juego
Desplaza los dgitos binarios
a la izquierda
Desplaza los dgitos binarios
a la derecha

Cadena
Entonces
Hasta
Tipo
94

PALABRA
RESERVADA

ESPAOL

If
implementation
In
Inherited
Inline
Interface
Label
Library

Si
Implementacin
En
Heredado
En lnea
Interface
Etiqueta
Librera

PALABRA
RESERVADA
Type
Unit
Until
Uses
Var
While
With
Xor

ESPAOL
Unidad
Hasta que
Usar
Variable
Mientras
Con
Una cumple, pero no las dos

Agregar
Write
Integer
Real

4.5.

Tipos de datos
A toda variable que se use en un programa, se le debe asociar (generalmente al principio
del programa) un tipo de dato especifico.
Un tipo de dato define todo el posible rango de valores que una variable puede tomar al
momento de ejecucin del programa y a lo largo de toda la vida til del propio programa.
Los tipos de datos ms comunes en pascal son:
Tipos numricos (enteros)
Nombre
(Prefijo de
Rango (desde...hasta)
nombre)
Integer
-32.768 a 32.767
Word
0 a 65535
ShortInt
-127 a 127
Byte
0 a 255
LongInt
-2.147.483.648 a 2.147.483.647

Tamao
(bytes)
2
2
1
1
4

Formato
Entero con signo
Entero sin signo
Entero corto con signo
Entero corto sin signo
Entero largo con signo

Tipos numricos (reales)


Nombre
Real
Single
Double
Extended
Comp

Rango (desde...hasta)
2,9E-39 a 1,7E38
1,5E-45 a 3,4E38
5,0E-307 a 1,7E307
1,9E-4932 a 1,1E493210
-9,2E18 a 9,2E18

Tamao
(bytes)
6
4
8
10
8

Cifras significativas
11-12
6-7
15-16
19-20
18-19

Tipos para texto


Nombre

Rango (desde...hasta)

Tamao
(bytes)

Ejemplo:
95

Char
String

Puede contener un solo carcter


especificado entre apostrofes.
Secuencia de longitud mxima de
255 caracteres.

8
1 a 255

a, M
abcd (longitud 4)

Tipos lgicos
Nombre
Boolean

Rango (desde...hasta)

Tamao
(bytes)

Ejemplo:

Puede tomar valores True o False


(verdadero o falso)

Para el tipo de datos string se podr usar cualquiera de los dos siguientes formatos:
Var
Nombre:string;
Carrera:string[30];
Para el primer caso pascal reserva 255 bytes de memoria, para el caso de carrera pascal
solo reservara 30 bytes, es obvio cual de los dos casos es ms eficiente.
4.5.1. Operador de asignacin
El operador fundamental en Pascal es el de asignacin, cuyo smbolo es :=. Es
(generalmente) la forma como los valores son puestos en variables.
La sintaxis es:
Variable:= constante, variable u operacin
Considere los siguientes ejemplos:
Numero := 7; {de tipo integer}
Decimal := 7.5; {de tipo real}
Letra := a; {de tipo char }
Cadena := Hola; {de tipo string}
Cierto := true; {de tipo boolean}
El operador de asignacin es totalmente diferente al operador de igualdad, ya que ste
ltimo compara dos valores para verificar si estos son iguales.
4.5.2. El primer programa
Para no romper la tradicin con la primera actividad que se hace cuando se inicia en el
estudio de un lenguaje de programacin, las siguientes instrucciones muestran el
tradicional Hola mundo.
Program mi_primer_programa;
Uses CRT;
Var
Mensaje:string[30];
Begin {Inicio del cuerpo principal}
Crlscr (*Esta instruccin limpia la pantalla*)
96

Mensaje:=Hola mundo;
Writeln (Mensaje);
Read;
END.

Instruccin Write / Writeln


Es una instruccin que muestra en pantalla la informacin almacenada en sus
argumentos. La sintaxis es:
Write (argumento1,argumento2:N:M);
El valor de cada argumento se muestra en pantalla segn el orden en que hayan sido
colocados. N,M son valores enteros, donde N indica el nmero de caracteres que se
ocuparn en la impresin y M se utiliza para indicar cuantos decimales sern impresos
(solo se usa para nmeros de tipo decimal).
Ejemplo: si se ejecutaran las siguientes instrucciones:
Instrucciones
Salida en pantalla
Write(345.764:1:1);
3
4 5 .
Write(345.764:1:3);
3
4 5 .
Write(345.764:1:5);
3
4 5 .
Write(345.764:5:1);
3
4 5 .
Write(345.764:7:1);
3 4
Write(345.764:9:1);
Write(-345.764:7:1);
3 4
Write(345.764:7:2);
3 4 5

8
7
7
8
5
3
5
.

6
6

4
4

.
4
.
7

8
5
8
6

Si el formato indicado es mayor que el necesario, se aaden espacios blancos a la


izquierda.
La diferencia entre usar Write o Writeln es que con la primera el cursor queda en
la misma lnea y con el segundo (agregado ln) salta a la siguiente lnea.
Instrucciones
Writeln(Hola mundo);
Write (Hola mundo);

Salida en pantalla
Hola mundo
Hola mundo |

Instruccin Read / Readln


Permiten la lectura de un valor para ser almacenado en una variable. La sintaxis es:
Read(identificador1, identificador2);
El sufijo ln en readln, indica al compilador que salte a la siguiente lnea. Por tanto el
compilador se prepara para leer desde el inicio de la siguiente lnea en pantalla.
Instrucciones
Write(Ingrese nombre);
Read (Nombre);

Salida en pantalla
Ingrese nombre Carlos
Carlos |

Enter

97

Write(Nombre);

4.6.

Operadores aritmticos
Los nmeros se manipulan con los operadores aritmticos, los cuales, junto con las
variables numricas, forman las expresiones. El nico operador que en Pascal no existe, es
el de exponenciacin. La siguiente tabla muestra los operadores aritmticos vlidos en
Pascal.
Se usan para realizar operaciones en pascal:
Operacin
Inversin de signo
Suma
Resta
Multiplicacin
Divisin
Divisin entera
Mdulo o residuo

Operador
+
*
/
Div
Mod

Tipo Operando
Entero, real, byte
Entero, real, byte
Entero, real, byte
Entero, real, byte
Entero, byte
Entero, byte
X := a mod b

Descripcin
Operador unitario (invierte el signo)

Suma a y b
Resta a y b
Multiplica a y b
Divisin de a y b
Divisin entera de a y b
Residuo de la divisin de a y b

Las siguientes son expresiones vlidas en Pascal:


VAR
I,J,K :Integer;
R,S,T :Real;
A,B,C:byte;

I * B
R + J
C + (R*I)
J*(A/S)

{entero multiplicado por byte}


{entero sumado con real}
{etc.}

Los tipos numricos deben observar estas reglas:


1. Cualquier expresin que incluya un nmero real, solamente puede ser asignada a una
variable real.
2. Las expresiones que contengan la divisin de reales (/), pueden ser asignadas a
variables reales.
Si no se siguen estas reglas, el compilador genera el error #44: In concordancia de tipo.

La inversin de signo: el signo de inversin es un operando unario, esto es, toma


solamente un operando. Cambia el signo del operando, haciendo una positiva una
cantidad negativa, y viceversa. Ntese que la inversin de signo no se puede usar con
el tipo byte, pues este es absoluto (sin signo). Un byte nunca es considerado
negativo.
Ejemplo:
X:= -5;

98

El operador div: permite calcular el valor entero (cociente) de una divisin de


nmeros enteros. Ejemplo:
Instrucciones
X:= 14;
Y:= 3;
Z:= X div Y;
Write (Z);

Salida en pantalla
4

El operador mod: muestra el residuo de una divisin entera. Ejemplo:


Instrucciones
Salida en pantalla
2
X:= 14;
Y:= 3;
Z:= X mod Y;
Write (Z);

4.6.1. Jerarqua de los operadores aritmticos


El orden en que se realizan las operaciones en Pascal, depende de la jerarqua de los
operadores aritmticos que est determinado por las siguientes reglas:
1. Se ejecutan las operaciones con smbolos unarios.
2. Se ejecutan las operaciones que involucran multiplicacin y cualquiera de los tipos de
divisiones (*, /, div, mod).
3. Se ejecutan las operaciones que involucran adicin o sustraccin (+, -).
4. Cuando se encuentran dos operando con la misma precedencia, la evaluacin se lleva
a cabo de izquierda a derecha.
4.6.2. El uso de los parntesis
En caso de existir parntesis en la expresin se evaluar primero el contenido de los
parntesis antes que otros operadores.
Si existen dos operadores de igual prioridad se evaluar de izquierda a derecha. Para
observar la importancia de la evaluacin correcta de los operadores se expone el siguiente
ejemplo:
PROGRAM Operadores;
VAR
Resultado_Uno, Resultado_Dos :Real;
BEGIN
Resultado_Uno := 3 + 5 * 7;
Resultado_Dos := (3 + 5) * 7;
WriteLn('Resultado de la operacin1 es: ',Resultado_Uno);
WriteLn('Resultado de la operacin2 es: ',Resultado_Dos);
END.

Como se podr observar en la primera operacin se ejecutar primero la operacin 5*7 y


al resultado se le sumarn 3, en cambio, en la segunda operacin se realizar primero la
suma 3+5 para multiplicarle al resultado 7.
99

4.7.

Ejemplos
Ejemplo 1,
Escribir un programa que calcule el cuadrado de un nmero.
Anlisis: el cuadrado de un nmero es el resultado de multiplicar x por s mismo. Dado
por la frmula X2 = X * X
Entrada:
Nmero entero
X
Proceso:
Cuadrado = X* X
Salida:
Mostrar el valor de:
Cuadrado
Diagrama de Flujo
Inicio

x = 0,
cuadrado = 0

El cuadrado
es, Cuadrado

Introducir X
Fin
Cuadrado: = X * X

Pseudocdigo
Programa CalculaCuadrado;
Variables
X,cuadrado
Inicio
Escribir(Introduzca el valor de X);
Leer (X);
Cuadrado:= X * X;
Escribir (El cuadrado de X es:,cuadrado)
Fin
Cdigo en Pascal
Program CalculaCuadrado;
Uses CRT;
Var
100

X,cuadrado:Integer;
Begin
Clrscr;
Write(Introduzca el valor de X);
Read (X);
Cuadrado:= X * X;
Writeln (El cuadrado de X es:,Cuadrado);
Readln;
Readln;
End.

Ejemplo 2
Escribir un programa que calcule la media aritmtica de cuatro notas (el promedio).
Anlisis: La media aritmtica de un grupo de notas es el resultado de la suma de las
notas y posteriormente divididas entre la cantidad de notas.
Entrada:
Cuatro notas:
Nota1, Nota2, Nota3, Nota4
Proceso:
Promedio=(nota1+nota2+nota3+nota4)/4
Salida:
Mostrar el valor de:

Promedio

Diagrama de Flujo
Inicio

nota1= 0, nota2= 0, nota3=


0, Nota4= 3, Promedio = 0
Introducir los valores
para nota1, nota2,
nota3, nota4

El promedio
es, Promedio

Fin

Promedio =
(nota1+nota2+nota3+nota4) /4
A

101

Pseudocdigo
Programa CalculaPromedio
Variables
Nota1, Nota2, Nota3, Nota4
Promedio
Inicio
Escribir (Introduzca el valor
Leer (Nota1);
Escribir (Introduzca el valor
Leer (Nota2);
Escribir (Introduzca el valor
Leer (Nota3);
Escribir (Introduzca el valor
Leer (Nota4);

de nota 1);
de nota 2);
de nota 3);
de nota 4);

Promedio:= (nota1+nota2+nota3+nota4)/4;
Escribir (El promedio es: , Promedio);
Fin
Cdigo en Pascal
Program CalculaPromedio;
Uses CRT;
Var
Nota1, Nota2, Nota3,
Promedio:Real;
Begin
Clrscr;
Write(Introduzca el
Read (Nota1);
Write(Introduzca el
Read (Nota2);
Write(Introduzca el
Read (Nota3);
Write(Introduzca el
Read (Nota4);

Nota4: Integer;

valor de nota 1);


valor de nota 2);
valor de nota 3);
valor de nota 4);

Promedio:= (nota1+nota2+nota3+nota4)/4;
Writeln (El promedio es: , Promedio);
Readln;
Readln;
End.

102

4.8.

Autoevaluacin
4.8.1. Preguntas
Cul es la estructura de un programa en Pascal?
Cules son las dos formas de hacer comentarios en un programa en Pascal?
Cules son las reglas que se deben seguir para la declaracin de Identificadores en
Pascal?
Qu es una palabra reservada en Pascal?
Cul es el operador de asignacin en Pascal?
4.8.2. Ejercicios
De los siguientes identificadores, cuales son vlidos en Pascal y cules no?
Identificador
Vlido
No vlido
Cant-horas
#empleado
Minutos
1roA
Precio_Hora

Muestre en pantalla los resultados de las siguientes instrucciones.


Instrucciones
Salida en pantalla
X:=546.8567
Y:=-X;
Writeln(X:1:1);
Writeln(X:1:3);
Writeln(X:1:5);
Writeln(X:5:1);
Writeln(X:7:1);
Writeln(X:9:1);
Writeln(X, X:7:1);
Writeln(Y,Y:7:2);

Dadas las siguientes instrucciones, cules son vlidas?


Instrucciones
Vlido
Var
X,Y:integer;
R,S:real
Begin
X:=6.5;
X:=X*2;
Y:=X;
R:=Y;
S:=R+S;

No vlido

103

Muestre en pantalla el resultado de las siguientes expresiones.


Instrucciones
Salida en pantalla
X:=28
Y:=3;
Writeln(X mod Y);
Writeln(X div Y);
Writeln(X / Y);
Writeln(X * Y);
Writeln(X - Y);
Writeln(X + Y);
Writeln(X * 2 + 8 div Y;

Resuelva los siguientes ejercicios:


1. Escribir un programa en Pascal que sume dos nmeros:
a=4b=3
2. Escribir un programa en Pascal que sume, reste, multiplique y divida dos nmeros:
x = 10 y = 2
3. Escribir un programa en Pascal que calcule el rea de un rectngulo:
lado1 = 3
lado2 = 4
rea del rectngulo= lado1 * lado2
4. Escribir un programa en Pascal que calcule el rea de un tringulo:
Base = 7
Altura = 4
rea del tringulo = (base * altura)/2
5. Escribir un programa que calcule la longitud y el rea de una circunferencia:
Radio = 4
Longitud de la circunferencia = 2 * PI * radio
rea de la circunferencia = PI * radio2
6. Escribir un programa en Pascal que calcule la velocidad de un proyectil que recorre
2 Km en 5 minutos. Expresar el resultado en metros/segundo.
Velocidad = espacio/tiempo
7. Escribir un programa en Pascal que calcule el volumen de una esfera:
Radio = 3
Volumen de la esfera = 4/3 * PI * radio3
8. Escribir un programa en Pascal que evale la siguiente expresin:
(a+7*c) / (b+2-a)+2*b
a=3
b=6
c=4
104

9. Escribir un programa en Pascal que evale la siguiente expresin:


(a+5) * 3 / 2 * b - b
a = 3,
b=6
10. Escribir un programa en Pascal que calcule el rea y el volumen de un cilindro:
A = (2 * (PI * r2)) + ((2 * PI * r) * h)
V = (PI * r2) * h
11. Escribir un programa en Pascal que calcule la hipotenusa de un tringulo
rectngulo:
Cateto 1 = 5
Cateto 2 = 5
12. Escribir un programa en Pascal que calcule el equivalente en grados Fahrenheit o
Celsius de las siguientes temperaturas.
Temperatura 1 = 32 Fahrenheit
Temperatura 2 = 10 Celsius
13. Escribir un programa que lea dos nmeros enteros A y B, y obtenga los valores:
A div B,
A mod B.
14. Escribir un programa en Pascal que calcule el nmero de horas, minutos y
segundos que hay en 3700 segundos.
15. Escribir un programa en Pascal que calcule el inters producido por un capital de
de lempiras, al cabo de un ao depositado a un inters del 2%.
16. Escribir un programa en Pascal que calcule el equivalente en pies de una longitud
de 10 metros.
1 metro
39.27 pulgadas
12 pulgadas
1 pie
17. Escribir un programa en Pascal que calcule el rea de un rectngulo a partir de sus
coordenadas:
x1 = 10 x2 = 20
y1 = 10 y2 = 20

105

106

Captulo 5
Expresiones lgicas y
Estructuras de control
xxx.

5.1.

Objetivos
Objetivos

107

5.2.

Operadores lgicos
Los operadores lgicos que proporciona el PASCAL son de dos tipos:
Operadores que actuando sobre datos no-Boolean proporcionan un dato Boolean.
Operadores que actuando sobre datos Boolean proporcionan un dato Boolean.
5.2.1. Operadores relacionales o de comparacin
El primero de estos tipos es muy til para tomar decisiones como resultado de la
comparacin de variables. La forma general en la que aparecen estos operadores es:

=
>
<
>=
<=
<>

Donde a y b pueden ser nmeros reales, enteros o caracteres, mientras que el resultado
de la operacin es un dato Boolean (FALSE o TRUE ). La restriccin obvia es que a y b han
de ser constantes o variables del mismo tipo.
El resultado de la operacin ser TRUE en los siguientes casos:
a=5
b=2
Operador
Condicin
Descripcin
=
a=b
a es igual a b
>
a>b
a es mayor que b
<
a<b
a es menor que b
>=
ab
a es mayor o igual que b
<=
ab
a es menor o igual que b
<>
a b
A es distinto de b

Resultado
False
True
False
True
False
True

En el caso de que de que a y b sean caracteres, las operaciones de comparacin se realizan


sobre el valor entero del carcter ASCII2 correspondiente.
Ejemplos de utilizacin de estos operadores son:

ASCII (acrnimo ingls de American Standard Code for Information Interchange Cdigo Estadounidense
Estndar para el Intercambio de Informacin), pronunciado generalmente [ski], es un cdigo de caracteres
basado en el alfabeto latino, tal como se usa en ingls moderno y en otras lenguas occidentales. Fue creado
en 1963 por el Comit Estadounidense de Estndares (ASA, conocido desde 1969 como el Instituto
Estadounidense de Estndares Nacionales, o ANSI) como una refundicin o evolucin de los conjuntos de
cdigos utilizados entonces en telegrafa. Ms tarde, en 1967, se incluyeron las minsculas, y se redefinieron
algunos cdigos de control para formar el cdigo conocido como US-ASCII.

108

Program Cinco;
Var
quizas : Boolean;
letra : Char;
i,j : Integer;
a,x : Real;
Begin
{1} i := -11; j := 6; letra := 'h'; x:= 1.3;
{2} quizas := i > j;
{3} Writeln(quizas);
(* FALSE *)
{4} quizas := 'k' <= letra ;
{5} Writeln(quizas);
(* FALSE *)
end.
5.2.2. Operadores lgicos
Con el segundo tipo de operadores lgicos se pueden combinar datos Boolean para
realizar operaciones lgicas complejas. Uno de ellos es unario y se utiliza segn la forma
general:
Not operando, donde tanto operando como el resultado de la operacin son
datos del tipo Boolean. El resultado, es la negacin del operando:
a
True
False

Not a
False
True

Sintaxis: Not operando


El resto de los operadores se utilizan segn la forma:
a

AND
OR
XOR

Donde A y B son variables Boolean.

AND, produce un resultado con valor de verdad TRUE cuando ambos operandos
tienen valor de verdad TRUE; en cualquier otro caso el resultado tendr un valor de
verdad FALSE
Sintaxis: operando1 AND operando2
La tabla de verdad es la siguiente:
A
B
A AND B
True
False
False
False
True
False
False
False
False
True
True
True
109

OR, Produce un resultado con valor de verdad FALSE cuando ambos operadores
tienen valores de verdad FALSE; en cualquier otro caso el resultado tendr un valor
de verdad TRUE.
Sintaxis: operando1 OR operando2
La tabla de verdad es la siguiente:
A
B
A OR B
True
False
True
False
True
True
True
True
True
False
False
False

XOR, Un operando debe tener valor de verdad TRUE y el otro FALSE para que el
resultado tenga valor de verdad TRUE.
Sintaxis: operando1 XOR operando2
La tabla de verdad es la siguiente:
A
B
A XOR B
True
False
True
False
True
True
True
True
False
False
False
False

Ejemplo:
a = 5>2
b=2
Operador
AND

Ejemplo
2 < 5 AND 5 < 10

OR

2 < 5 OR

XOR

2 < 5 XOR 3 = 4

NOT

A = FALSE
NOT A

> 10

Resultado
Descripcin
TRUE
Devuelve TRUE nicamente si las
dos son true
TRUE
Devuelve TRUE si una de las dos es
TRUE
TRUE
Un operando debe tener valor de
verdad TRUE y el otro FALSE para
que el resultado tenga valor de
verdad TRUE
TRUE
Niega una sentencia.

5.2.3. Prioridad entre operadores


Cuando hay varias operaciones en una misma expresin, cada parte de la misma se evala
y se resuelve en un orden predeterminado, segn la prioridad de los operadores.

110

Cuando hay expresiones que contienen operadores de ms de una categora (aritmticos,


de comparacin y lgicos), se resuelven antes las que tienen operadores aritmticos, a
continuacin las que tienen operadores de computacin y por ltimo las de operadores
lgicos.
Todos los operadores de comparacin tienen la misma prioridad; es decir, se evalan de
izquierda a derecha, en el orden en que aparecen. Los operadores lgicos y aritmticos se
evalan en el siguiente orden de prioridad:
Aritmticos
Negacin
Multiplicacin y Divisin
Divisin enteros
Residuo de la divisin
Adicin y sustraccin

*, /
Div
Mod
+, -

Comparacin
=
Igualdad
<>
Desigualdad
<
Menor que
>
Mayor que
<=
Menor o igual que

Lgicos
Not
AND
OR
XOR

Cuando existen parntesis, las expresiones en su interior se evalan primero. Los


parntesis ocupan la ms alta jerarqua.

5.3.

Sentencias de Control
La mayora de los procedimientos que podemos disear para resolver problemas incluyen
la eleccin de uno entre los casos posibles en funcin del valor particular de alguno de los
datos. Las sentencias de control en PASCAL son la condicional simple If y la condicional
mltiple Case.
5.3.1. Sentencia de control simple
La sentencia de control simple tiene la siguiente sintaxis:
Sintaxis 1
If condicion Then
accion1;
Sintaxis 2
If condicion Then
accion1
Else
accion2;
Donde condicin es una variable de tipo Boolean o una operacin cuyo resultado es
un dato Boolean, accion1 y accion2 son instrucciones PASCAL que pueden ser tanto
simples como compuestas.
El efecto de esta sentencia de control es el siguiente: si condicin es TRUE se procede
a realizar la instruccin accion1; en el caso de que sea FALSE y est presente la parte
Else, se procede a realizar la instruccin accion2.

111

El diagrama de flujo es el siguiente:


Para la sintaxis 1

Para la sintaxis 2

Expresion_Lgica

Expresion_Lgica

Accin1

Accin1
F
Accin2

Instruccin_siguiente
Instruccin_siguiente

Ejemplo sitaxis1,
Escribir un programa que dado un valor para la edad, determine si es menor de edad o
es mayor de edad.
Anlisis: Una persona es menor de edad cuando estas es menor que 18, y es mayor de
edad cuando esta es 18 o ms.
Cdigo en Pascal
Program Decision_simple;
Uses CRT;
Var
Edad:Integer;
Mensaje:string;
Begin
Clrscr;
Write(Introduzca la edad: );
Read (Edad);
If edad < 18 then
Mensaje:= menor de edad;
If edad >= 18 then
Mensaje:= mayor de edad;
Writeln (Usted es: ,mensaje);
Readln;
Readln;
End.

112

Ejemplo sintaxis2
Escribir un programa que dado un valor para la edad, determine si es menor de edad o
es mayor de edad.
Anlisis: Una persona es menor de edad cuando estas es menor que 18, y es mayor de
edad cuando esta es 18 o ms.
Cdigo en Pascal
Program Decision_simple;
Uses CRT;
Var
Edad:Integer;
Mensaje:string;
Begin
Clrscr;
Write(Introduzca la edad: );
Read (Edad);
If edad < 18 then
Mensaje:= menor de edad;
Else
Mensaje:= mayor de edad;
Writeln (Usted es: ,mensaje);
Readln;
Readln;
End.
La sentencia Else tiene el significado de lo contrario.
5.3.2. Decisiones mltiples
En ocasiones es necesario enlazar varias condiciones para seleccionar una opcin de entre
varias posibles; para ello se utiliza el elemento Else If, que acta como Else pero
habilita un nuevo bloque If. El uso de Else If obliga a la definicin de una condicin
nueva a evaluar; el uso de Else simple, implica solamente que la ltima condicin
evaluada fue Falsa.
La sintaxis de la instruccin es la siguiente:
Sintaxis
If condicion then
Instrucciones
[Else If condicin1 Then
Instrucciones

[Else
Instrucciones]]

113

El diagrama de flujo es el siguiente:


Para la sintaxis

Expresion_Lgica

Expresion_Lgica

Instrucciones
V
Instrucciones
Instrucciones

Instruccin_siguiente

Ejemplo
Escribir un programa que dado un valor para la nota de un alumno, determine segn
una escala lo siguiente:
Si nota es menor que 70 que muestre un mensaje que diga Reprobado.
Si nota es mayor o igual que 70 y menor que 90, que muestre un mensaje que diga
Aprobado
Si nota es mayor o igual que 90, que muestre un mensaje que diga Aprobado con
honores
Anlisis: Es necesario evaluar la nota con relacin a la escala y asignar un mensaje
segn el rango en el que se encuentre.
Cdigo en Pascal
Program PromedioFinal;
Uses CRT;
Var
Nota:Integer;
Mensaje:string;
Begin
Clrscr;
Write(Introduzca el valor de Nota: );
Read (Nota);
If nota >= 90 then
Mensaje:= Aprobado con honores
Else If Nota >= 70 then
Mensaje:= Aprobado
Else
Mensaje:= Reprobado;
114

Writeln (Promedio Final: ,nota, mensaje);


Readln;
Readln;
End.
5.3.3. La sentencia case
En algunos casos las bifurcaciones mltiples pueden llegar a ser difcil de estructurar y de
leer (para el programador). El PASCAL proporciona una estructura ms legible para
aquellos casos en los que la bifurcacin mltiple se realiza mediante comparacin de datos
sencillos ordinales (por tanto ni Real, ni String).
Esta instruccin consta de una expresin (llamada selector ) y una lista de sentencias
etiquetadas por una o varias constantes del mismo tipo que el selector; al ejecutarse esta
instruccin se evala el valor actual del selector y se ejecuta la instruccin que tenga
esa etiqueta, si no existe ninguna instruccin con esa etiqueta se produce un error.
El selector debe ser de tipo ordinal (integer, char, boolean o enumerado3).
Todas las constantes involucradas en los criterios de seleccin deben de ser nico y de un
tipo ordinal compatible con el tipo de selector. Cada sentencia debe ir separada de las
otras con punto y coma (;), excepto la ltima (instruccin anterior al end;)
La expresin Else es opcional y se ejecuta nicamente si el valor de selector no se
encuentra en ninguno de los criterios.
Si no existiera la expresin else y el valor de selector no se encuentra en ninguno de
los criterios, no sucede nada y contina el flujo normal del programa.
La sintaxis de la instruccin es la siguiente:
Sintaxis 1
Case Selector Of
caso1 : accion1
caso2 : accion2
. . .
End;
Sintaxis 2
Case Selector Of
caso1 : accion1
caso2 : accion2
. . .
Else
Accion_n
End;

Tipo de dato definido por el programador que se describir en los prximos captulos.

115

Para la sintaxis

Ejemplo
Un ejemplo de esta seleccin en lenguaje natural podra ser el siguiente: men
semanal": segn sea el da de la semana, hacer lo siguiente: lunes, mircoles o viernes
comer pescado; martes, jueves o sbado comer carne; el domingo comer fuera de casa.
Anlisis: Considerar el nmero del da con respecto a la comida de ese da, 1 para lunes,
2 para martes...
Cdigo en Pascal
Program Menus_semana;
Uses crt;
Var
dia:integer;
mensaje:string;
Begin
clrscr;
Write ('Ingrese un numero de la semana: ');
Read (dia);
Case dia of
1,3,5: mensaje:=' pescado';
2,4,6: mensaje:=' carne';
7
: mensaje:=' fuera de casa';
Else
mensaje:= 'No es dia de la semana';
End;
116

Writeln('Este dia usted debe comer: ',mensaje);


Readln;
Readln;
End.

Ejemplo
Como ejemplo de aplicacin de la instruccin Case considrese el siguiente segmento
de cdigo que asigna la calificacin literal segn el valor almacenado en la variable nota
de tipo integer:
Anlisis: Considerar el valor de la nota y mostrar un mensaje segn la escala.
Cdigo en Pascal
Program Promedio;
Uses CRT;
var
nota: real;
Begin
Clrscr;
Write (Ingrese el valor de la nota);
Read(nota);
case Round(nota) of
0..4 : Write
5,6
: Write
7,8
: Write
9
: Write
10
: Write
End; {case}
Readln;
Readln;

{Redondea la parte decimal}


('SUSPENSO');
('APROBADO');
('NOTABLE');
('SOBRESALIENTE');
('CON HONOR HONOR')

End.

5.4.

Instrucciones de Repeticin
Un bucle o ciclo (iteracin), en programacin, es una sentencia que se realiza repetidas
veces a un trozo aislado de cdigo, hasta que la condicin asignada ha dicho bucle deje de
cumplirse.
Generalmente, un bucle es utilizado para hacer una accin repetida sin tener que escribir
varias veces el mismo cdigo, lo que ahorra tiempo, deja el cdigo ms claro y facilita su
modificacin en el futuro.
El bucle y los condicionales representan la base de la programacin estructurada. Es una
evolucin del cdigo ensamblador, donde la nica posibilidad de iterar un cdigo era
establecer una sentencia jump (que en los lenguajes de programacin fue sustituida por el
"ir a" o GOTO).
Los tres bucles ms utilizados en programacin son el bucle while (Mientras), el bucle for
(Para) y el bucle repeat (Repetir).
117

5.4.1. Instruccin For


La instruccin de repeticin for se utiliza para crear bucles con un nmero
predeterminado de repeticiones.
Un ejemplo sencillo en lenguaje natural podra ser para los bloques desde el A hasta el K
hacer la inspeccin del ascensor, segn el cual se especifica una tarea repetitiva (la
inspeccin) que ha de realizarse exactamente en 11 ocasiones (para los bloques A,. . . , K).
La sentencia for admite dos variantes: la for-to-do (instruccin for ascendente) y la
for-downto-do (instruccin for descendente).
La sintaxis de la instruccin es la siguiente:
Sintaxis
Pseudocdigo
For v := vi (to|downto) vf do
Para contador=valorinicial hasta valorfinal hacer
Instruccin;
Instruccin
Fin para
Si la sentencia a repetir es compuesta, la sintaxis tiene el siguiente formato:
Sintaxis
Pseudocdigo
For i:= Vinicial (to|downto) Vfinal do Para contador=valor inicial hasta valor final hacer
begin
Instruccin1;
Instruccin1;
Instruccin2;
Instruccin2;
Instruccin3;
Instruccin3;

Instruccinn;
Instruccinn;
Fin para
End;
Cuanto una estructura de control utilice una instruccin o sentencia compuesta, esta debe
comenzar con un begin y terminar con un end;
El funcionamiento del bucle for es el siguiente: primero se comprueba si el ndice rebasa
el limite final, con lo que es posible que el cuerpo del bucle no llegue a ejecutarse ninguna
vez, en caso positivo se le asigna el valor inicial a la variable de control, se ejecuta la
instruccin interior una vez y se incrementa (o decrementa, segn se trate de to o
downto respectivamente) una unidad el valor de variable de control, si este nuevo valor
est comprendido entre el valor inicial y el valor final, entonces se vuelve a ejecutar la
instruccin interior, y as sucesivamente hasta que la variable de control alcanza el valor
final.
En particular, si en una instruccin for-to-do el valor inicial de la variable es posterior
al valor final entonces no se ejecutan las instrucciones interiores y se sale del bucle. La
instruccin for-downto-do tiene un comportamiento anlogo cuando el valor inicial de
la variable es anterior al valor final.

118

En teora, nada impide que en el cuerpo de un bucle for se modifique el valor de la


variable de control o las expresiones inicial y final del bucle; sin embargo, debe ponerse el
mayor cuidado en evitar que esto ocurra. En particular, conviene recordar que la variable
de control se actualiza automticamente. El siguiente fragmento de cdigo es un ejemplo
sintcticamente correcto.
for i:=1 to 5 do
begin
writeln (i);
i:=i +1
end;
El ejemplo anterior genera un bucle infinito dando como resultado una sucesin infinita de
unos4.
Elementos del bucle
Variable de control: prcticamente un mandato impuesto por el uso habitual es
utilizar la letra i Iterador como variable de control, o bien sus sucesoras en caso de
bucles anidados. El uso de esta letra crptica quizs a primera vista es sin embargo una
excelente forma de aportar agilidad de lectura al cdigo por su uso tan extensivo.
Como raras veces los bucles anidados superan las tres dimensiones (por una sencilla
cuestin de explosin exponencial), las letras i, j y k suelen ser las nicas relacionadas
con este uso.
Inicializacin de la variable de control: en pseudocdigo se pide explicitarlo (es la
seccin:= ValorInicial). La prctica de utilizar variables de control que no se inicializan
en el bucle no es recomendada para la legibilidad del cdigo.
Condicin de control: en pseudocdigo se ve representado por el valor final que
puede tomar la variable de control (la seccin A ValorFinal).
Incremento: Se toma por defecto el valor 1. Aunque tambin se puede utilizar la
sentencia Downto para decremento.
Cuerpo: es lo que se har en cada iteracin, pueden ser una o ms instrucciones. En
pseudocdigo pesa la restriccin de no poder alterar el valor de la variable de control.
Usos: Su uso principal se orienta a los vectores, pudiendo modificar, agregar, eliminar o
consultar datos que se encuentren segn el ndice. Por esto ltimo, una condicin mnima
del vector es que debe ser ordenado, porque si se intenta leer un dato inexistente, esto
genera un error de programacin.

Ese es el comportamiento de Turbo Pascal, en FreePascal genera error.

119

El diagrama de flujo es el siguiente:

Sentencias

Desde inicio
hasta fin

Ejemplo
Como ejemplo de aplicacin de la instruccin for podemos considerar, una vez ms, la
suma de los primeros nmeros naturales 1; 2; : : : ; n.
Anlisis: El usuario debe ingresar un nmero natural (n) y el programa debe sumar los
nmeros desde 1 hasta n.
Cdigo en Pascal
Program suma_naturales
Uses crt;
var
n, i, suma: integer;
Begin
Write(Ingrese el valor de n);
Read(n);
suma:= 0;
for i:= 1 to n do
suma:=suma + i;
WriteLn(suma)
Readln;
End.

120

Ejemplo
Escribir un programa que imprima los nmeros del 1 al 4.
Anlisis: Como resultado de la ejecucin del programa, debe mostrar en pantalla los
nmeros del 1 hasta el 4.
Cdigo en Pascal
Program Ejemplo1;
Uses winCrt;
Var
i:integer;
Begin
Clrscr;
For i:=1 to 4 do
Writeln (i);
Readln;
End.
Ejemplo
Escribir un programa que imprima los nmeros de 4 al 1.
Anlisis: Como resultado de la ejecucin del programa, debe mostrar en pantalla los
nmeros del 4 al 1.
Cdigo en Pascal
Program Ejemplo3;
Uses winCrt;
Var
i:integer;
Begin
Clrscr;
For i:=4 downto 1 do
Writeln (i);
Readln;
End.

121

Ejemplo
Escribir un programa que imprima los cuadrados y los cubos de los nmeros de 1 al 4.
Anlisis: El cuadrado y el cubo de x se expresa:
Cuadrado= x * x
Cubo = x * x *
Cdigo en Pascal
Program Ejemplo2;
Uses winCrt;
Var
i,cuadrado,cubo:integer;
Begin
Clrscr;
For i:=1 to 4 do
Begin
Cuadrado:= i * i;
Cubo:=i*i*i;
Writeln(Cuadrado,' ',Cubo);
End;
Readln;
Raedln;
End.
Es conveniente recordar que la variable de control puede ser de cualquier tipo ordinal; por
ejemplo, la siguiente instruccin imprime, en una lnea, los caracteres desde la 'A' a la 'Z':
For car:= 'A' to 'Z' do
Write(car);
Las siguientes caractersticas de la instruccin for merecen ser recordadas:
Las expresiones que definen los lmites inicial y final se evalan una sola vez antes de
la primera iteracin.
El bucle se repite un nmero predeterminado de veces (si se respeta el valor del ndice
en el cuerpo del bucle).
El valor de la variable de control se comprueba antes de ejecutar el bucle.
El incremento (o decremento) del ndice del bucle es automtico, por lo que no se
debe incluir una instruccin para efectuarlo.
El bucle termina cuando el valor de la variable de control sale fuera del intervalo de
valores establecido.

122

5.4.2. Instruccin While


El Bucle while o bucle mientras es una estructura de la mayora de los lenguajes de
programacin estructurados cuyo propsito es repetir un bloque de cdigo mientras una
condicin se mantenga verdadera.
En algunas ocasiones es necesario especificar una accin que se repite siempre que se
cumpla una determinada condicin; una frase en lenguaje natural tal como mientras haga
calor usar manga corta es un ejemplo de este tipo de construcciones.
La sintaxis de la instruccin es la siguiente:
Sintaxis
Pseudocdigo
While condicin do
Mientras condicin hacer
begin
Instruccin
Instruccin;
Fin Mientras
end;
La interpretacin es: mientras que la condicin (expresin booleana) sea cierta se
ejecutar la instruccin, que se suele llamar cuerpo del bucle, indicada tras el do.
En Pascal esta construccin se hace mediante la instruccin while. Su diagrama
sintctico es el siguiente:
El diagrama de flujo es el siguiente:

Condicin

Sentencias

Condicin: La condicin ha de ser una sentencia que devuelva un valor booleano, y esta
puede ser el valor booleano en s, verdadero (true) si la condicin se cumple, o falso si esta
no se cumple (false). Tambin puede contener el nombre de una variable booleana, y el
valor de la expresin depender de su contenido.

123

Sentencias Comparativas: La forma ms obvia tal vez, y la ms usada sin duda, son las
sentencias comparativas, que usan los operandos igual, diferente, menor o igual que,
mayor o igual que, menor que y mayor que. Se utilizan los siguientes smbolos para
representar las comparaciones anteriores: =, <>, <=, >=, <, >.
El ciclo While debe cumplir las siguientes reglas:
La condicin debe ser una expresin lgica y se evala antes y despus de cada ciclo.
Si el resultado de la evaluacin de la condicin en la primera vez, resulta falsa, el
cuerpo del ciclo no se ejecutar.
Mientras la condicin sea verdadera, el ciclo se ejecutar. Esto significa, que si no
existe un mecanismo (en el interior del ciclo) que haga cambiar el valor de la condicin
(de verdadero a falso), el ciclo se ejecutar indefinidamente.
Cualquier variable que aparezca en la condicin del While debe haber recibido un valor
inicial antes de entrar en el ciclo, esto es necesario ya que la variable debe tener un valor
para poder evaluar la condicin, a esto se le conoce como inicializacin.
La condicin del ciclo es el mecanismo de control, ya sea para entrar a ejecutar el cuerpo
del ciclo o bien para dar trmino a las iteraciones del mismo.
A continuacin tenemos un fragmento de programa que calcula la suma de los n primeros
nmeros naturales:
ReadLn(n);
suma:= 0;
contador:= 1;
while contador <= n do
begin
suma:= suma + contador;
contador:= contador + 1
end; {while}
WriteLn(suma)
La ejecucin de una instruccin while comienza con la comprobacin de la condicin
(por esto a los bucles while se les llama bucles preprobados); si esta es falsa entonces se
finaliza la ejecucin, esto es, se salta la sentencia que aparece tras el do; si la condicin es
verdadera entonces se ejecuta la instruccin, se vuelve a comprobar la condicin y as
sucesivamente.
Para una correcta utilizacin de la instruccin while es necesario que la instruccin
modifique las variables que aparecen en la condicin, ya que en caso contrario, si la
condicin es verdadera siempre permanecer as y el bucle no terminar nunca.
Una situacin en que se puede producir este error surge cuando el cuerpo del bucle es una
secuencia de instrucciones y se olvida utilizar los delimitadores begin y end. Por
ejemplo, el siguiente segmento de cdigo no calcula la suma de los enteros desde el 1
hasta n:

124

ReadLn(n);
suma:= 0;
contador:= 0;
while contador <= n do
suma:= suma + contador; {OJO: Fin de while}
contador:= contador + 1;
WriteLn(suma);

Al olvidar delimitar el cuerpo del bucle, la instruccin por iterar termina antes de actualizar
el valor del contador, con lo cual el bucle se repite sin cesar y el programa se \cuelga". La
correccin de tal error se reduce al incluir un par begin-end para delimitar la sentencia
interior del bucle.
La instruccin while admite slo una instruccin tras el do, con lo que para iterar una
accin mltiple se ha de emplear la composicin de instrucciones con su correspondiente
par begin-end.
La sintaxis de Pascal permite escribir un punto y coma inmediatamente despus del do. Sin
embargo, cuando se entre en el bucle, esta construccin dara lugar a un bucle infinito,
puesto que se interpreta que el interior del bucle es la instruccin vaca que, obviamente,
no modifica los parmetros de la condicin del bucle. Por lo tanto, a efectos prcticos no se
debe escribir un punto y coma detrs del do.
Las instrucciones while se pueden anidar y obtener instrucciones del siguiente tipo:
while condicion 1 do
begin
Instrucciones
while condicion 2 do
Instruccion;
Instrucciones;
end {while}

Simplemente escribiendo el while interior como una instruccin ms dentro del cuerpo
de otro bucle while. Si el bucle while exterior no llega a ejecutarse, por ser falsa su
condicin, tampoco lo har el while interior. Si, por el contrario, el while exterior se
ejecutar por ser su condicin verdadera, entonces se evaluar la condicin del while
interior y, si tambin es verdadera, se ejecutarn sus instrucciones interiores hasta que su
condicin se vuelva falsa, tras lo cual el control vuelve al while exterior.
Las propiedades principales de la instruccin while que se deben recordar son las
siguientes:
La condicin se comprueba al principio del bucle, antes de ejecutar la instruccin; por
eso se le llama bucle preprobado.
El bucle termina cuando la condicin deja de cumplirse.
Como consecuencia de los puntos anteriores la instruccin se ejecuta cero o ms
veces; por lo tanto puede no ejecutarse.

125

Existen tres formar de controlar la ejecucin del While.


While controlado por contador
Es un bucle cuyas iteraciones estn determinadas por una variable cuyo valor se
representa por un contador. Esta variable se ir incrementando constantemente cada
vez que se repite el cuerpo del ciclo.
Cuando se utiliza el ciclo While controlado por contador, debe considerarse lo
siguiente:
a. La iniciacin de la variable de control.
b. La comprobacin del valor de la variable de control.
c. El incremento de la variable de control.
Ejemplo
Escribir un programa que calcule y muestre los cuadrados y los cubos de los nmeros
del 1 al 4.
Anlisis: El cuadrado y el cubo de x se expresa:
Cuadrado= x * x
Cubo = x * x *
Cdigo en Pascal
program cuadrado_cubo;
uses wincrt;
var
i,cuadrado,cubo:integer;
begin
clrscr;
i:=1;
while i <= 4 do
begin
cuadrado:= i * i;
cubo:=i*i*i;
writeln(i,' ',cuadrado,' ',cubo);
i:=i+1
end; {while}
readln;
raedln;
end.

While controlado por centinela


Se utiliza cuando se desconoce la cantidad de iteraciones que deber ejecutarse el
ciclo. Centinela es el valor especial (generalmente booleano) que seala e indica un
suceso especfico.

126

Cuando se utiliza el ciclo While controlado por centinela, debe considerarse lo


siguiente:
a. La iniciacin de la variable de que servir como centinela.
b. Cambiar el valor de la variable dentro del cuerpo del ciclo.
Ejemplo
Escribir un programa que permita realizar una suma indefinida de nmeros:
Anlisis: El programa debe permitir el ingreso de varios nmeros, mientras sean
diferentes que 0.
Cdigo en Pascal
program sumatoria;
uses wincrt;
var
suma, numero:integer;
begin
clrscr;
suma:=0;
write (ingrese un nmero <> de 0);
read(numero);
while numero <> 0 do
begin
suma:=suma+numero;
write (ingrese un nmero <> de 0);
readln(numero);
end; {while}
readln;
raedln;
end.

While controlado por tarea


Se puede utilizar el ciclo While una condicin que determine el cumplimiento de
una actividad.
Cuando se utiliza el ciclo While controlado por tarea, debe considerarse lo siguiente:
a. La iniciacin de la condicin.
b. El valor de la condicin deber ser alterado en cada ejecucin del cuerpo del ciclo.
Ejemplo
Escribir un programa que permita realizar una suma indefinida de nmeros mientras el
total sea menor o igual que 50.
Anlisis: El programa debe permitir el ingreso de varios nmeros, mientras que la suma
sea menor o igual que 50.

127

Cdigo en Pascal
program sumatoria_50;
uses wincrt;
var
suma, numero:integer;
begin
clrscr;
suma:=0;
while suma <= 50 do
begin
write (ingrese un nmero: );
readln(numero);
suma:=suma+numero;
end; {while}
readln;
raedln;
end.
5.4.3. Instruccin Repeat
El bucle repetir comprueba la condicin de finalizacin al final del cuerpo del bucle, y si
sta es cierta continua con el resto del programa, a veces esto resulta ms adecuado.
Comenzamos este apartado retomando el ejemplo en lenguaje natural con el que se
present la instruccin while: mientras haga calor usar manga corta. La caracterstica de
preprobado de while hace que este consejo solo sea vlido para gente previsora que
comprueba el tiempo que hace antes de salir de casa.
Cmo se podra modificar el ejemplo anterior para que fuera vlido tambien para quien
no sabe qu tiempo hace fuera hasta que ya es demasiado tarde? Una forma sera llevar
un jersey puesto hasta que haga calor; de este modo se evitaran bastantes enfriamientos
indeseados.
La instruccin repeat permite la construccin de bucles similares al de este ltimo
ejemplo, con caractersticas ligeramente distintas a la del bucle while.
La sintaxis de la instruccin es la siguiente:
Sintaxis
Pseudocdigo
Repeat
Repetir
Instruccin1;
Instruccin1;
Instruccin2;
Instruccin2;
Instruccin3;
Instruccin3;

Instruccinn;
Instruccinn;
Until condicin;
Fin repetir

128

La interpretacin de una instruccin repeat es: repetir las instrucciones indicadas en el


cuerpo del bucle hasta que se verifique la condicin que aparece tras until.
En este tipo de bucles las palabras reservadas repeat y until funcionan como
delimitadores, no siendo necesario usar begin-end para delimitar la lista de
instrucciones.
El diagrama de flujo es el siguiente:

Sentencias

Condicin

En la ejecucin de una instruccin repeat se comienza ejecutando la lista de


instrucciones y despus se comprueba si se cumple la condicin (por eso el bucle es
postprobado); si la condicin aun no se cumple entonces se repite el bucle, ejecutando la
lista de instrucciones y comprobando la condicin. La iteracin termina cuando la
condicin se hace verdadera, en cuyo caso se pasa a la siguiente instruccin externa al
bucle.
Las propiedades principales de la instruccin repeat son las siguientes:
La instruccin repeat admite una lista de instrucciones interiores, no siendo
necesario utilizar los delimitadores begin-end.
Este bucle se llama postprobado; es decir, la condicin se comprueba despus de
ejecutar la lista de instrucciones, por lo que sta se ejecuta al menos una vez.
El bucle termina cuando se cumple la condicin.
Como consecuencia de los puntos anteriores la lista de instrucciones siempre se
ejecuta una o ms veces.

129

Ejemplo: Escribir un programa que permita la suma de los n primeros nmeros naturales.
Anlisis: El programa debe permitir el ingreso de nmeros y realizar la sumatoria.
Cdigo en Pascal
program sumatoria1;
uses crt;
var
i, suma: integer;
begin
write(ingrese el valor de n);
readln(n); {supuesto que n >= 1}
suma:= 0;
i:= 0;
repeat
contador:= contador + 1;
suma:= suma + i
until contador = n
readln;
end.
Obsrvese que la condicin n >= 1 es imprescindible para que el resultado final sea el
esperado. En general, siempre es conveniente comprobar el comportamiento del bucle en
valores extremos; en este ejemplo, para n = 0 se generara un bucle infinito, lo cual se
evitara sustituyendo la condicin contador = n por contador >= n. En este caso, dada la
caracterstica de postprobado del bucle repeat, las instrucciones interiores se
ejecutaran al menos una vez, por lo que la suma valdra al menos 1 y el resultado arrojado
sera incorrecto para n <= 0.
Ejemplo
Escribir un programa que imprima los nmeros del 1 al 4
Anlisis: El programa debe mostrar en pantalla los nmeros del 1 al 4.
Cdigo en Pascal
program ejemplo1;
uses wincrt;
var
numero:integer;
begin
numero:=1;
repeat
writeln(numero);
numero:=numero+1;
until numero=5;
end.

130

Al igual que el ciclo While, el control de la iteracin en el ciclo Repeat puede ser controlada
por contador, centinela o tarea.
5.4.4. Ciclo Infinito
Bucle infinito en programacin es aquel ciclo que se repite de forma indefinida ya que su
condicin para finalizar nunca se cumple.
Por definicin un bucle debe contener condiciones que establezcan cundo empieza y
cundo acaba, de manera que, mientras las condiciones se cumplan, ejecute una
secuencia de cdigo de manera repetitiva. En el caso de ciclo infinito, como la condicin
de finalizacin no se alcanza, el bucle sigue ejecutando el segmento de cdigo
indefinidamente.
Ejemplo: Escribir un programa que utilice un ciclo infinito con For.
Cdigo en Pascal
program infinito;
uses wincrt;

{vlido solamente en Turbo Pascal}

var i:integer;
begin
clrscr;
for i:=1 to 10 do
begin
writeln(i);
i:=i-1;
end;
readln;
end.
Ejemplo: Escribir un programa que utilice un ciclo infinito con While.
Cdigo en Pascal
program infinito;
uses wincrt;
var i:integer;
begin
clrscr;
numero:=1;
while i > 0 do
begin
writeln(i);
i:=i+1;
end;
readln;
end.
131

Ejemplo: Escribir un programa que utilice un ciclo infinito con Repeat.


Cdigo en Pascal
program infinito;
uses wincrt;
var
numero:integer;
begin
clrscr;
numero:=1;
repeat
writeln(numero);
numero:=numero+2;
until numero=6;
readln;
end.
5.4.5. Anidamiento en los ciclos
El cuerpo de un ciclo, ya sea For, While, Repeat, puede contener cualquier tipo de
secuencias (simples o compuestas), de decisin o iterativas. Cuanto un bucle est
contenido en otro bucle, se dice que los bucles estn anidados.
Ejemplo: Escribir un programa que imprima las tablas de multiplicar del 1 al 3, utilizando
bucles anidados.
Cdigo en Pascal
program anidamiento;
uses crt;
var
i,j,total:integer;
begin
for i:=1 to 3 do
begin
for j:=1 to 10 do
begin
total:=i*j;
writeln(i, , x, ,j,=,total)
end;
end;
readln;
end.

132

5.4.6. Diferencias entre las instrucciones de repeticin


Existen dos diferencias bsicas entre el ciclo while y el ciclo repeat until.
En el ciclo While la condicin se evala en el inicio del ciclo; en cambio en el ciclo
Repeat la condicin se evala al final.
En el ciclo While, si la condicin es verdadera se ejecuta el cuerpo del ciclo; en el
ciclo Repeat, si la condicin es verdadera finaliza el ciclo.
5.4.7. Eleccin de instrucciones iterativas
Para poder elegir la instruccin iterativa que mejor se adapta a una situacin particular es
imprescindible conocer las caractersticas ms importantes de cada instruccin iterativa,
as como las similitudes y diferencias entre ellas.
El primero de todos los criterios para elegir una u otra instruccin iterativa es la claridad:
se ha de elegir aquella instruccin que exprese las acciones por repetir con la mayor
naturalidad.
Adems, la eleccin de la instruccin adecuada depende de las caractersticas del
problema. En el caso en que se conozca previamente el nmero de repeticiones que van a
ser necesarias, es recomendable usar la instruccin for.
Ejemplo: El siguiente fragmento de cdigo calcula la media aritmtica (promedio) de 5
nmeros.
Cdigo en Pascal
program media5 (input, output);
{calcula la media de cinco nmeros}
var
entrada, total, media: real;
begin
total:= 0;
{entrada de datos y clculo de la suma total}
for i:= 1 to 5 do
begin
readln(entrada);
total:= total + entrada
end; {for}
{calculo de la media}
media:= total / 5;
{salida de datos}
writeln('la media es ', media:10:4)
readln;
end. {media5}

133

Si no se conoce previamente cuntas repeticiones se necesitarn entonces se usara bien


while o bien repeat; para saber cuando conviene usar una u otra sera conveniente
recordar sus similitudes y diferencias.
Si no se sabe si se ha de ejecutar el cuerpo del bucle al menos una vez entonces el
bucle ha de ser preprobado, con lo cual se usara la instruccin while.
Si, por el contrario, el cuerpo del bucle se ha de ejecutar al menos una vez entonces se
usara repeat, pues nos basta con un bucle postprobado.

Ejemplo: supngase que estamos desarrollando un programa de gestin de un cajero


automtico, la primera tarea que se necesita es la de identificar al usuario mediante su
nmero personal; si tenemos en cuenta la posibilidad de error al teclear el nmero lo
mejor sera colocar este fragmento de cdigo dentro de un bucle. Puesto que, obviamente,
es necesario que el usuario teclee su nmero de identificacin al menos una vez, se usara
la instruccin repeat.
Cdigo en Pascal
Var
codigo, intentos: integer;
...
intentos:= 0;
repeat
Read(codigo);
intentos:= intentos + 1
until cdigo_correcto or (intentos > 3)

En caso de duda, si no se sabe muy bien si el cuerpo del bucle se ha de repetir al menos
una vez o no, se ha de usar while, pero debemos asegurarnos de que la condicin est
definida en la primera comprobacin.
El siguiente ejemplo muestra un caso en el que esto no ocurre: supongamos que dada una
lnea de caracteres se desea averiguar el primer carcter que es una letra minscula, el
siguiente fragmento de programa es errneo:
Cdigo en Pascal
var
car: char;
...
while not (('a' <= car) and (car <= 'z')) do
Read(car)

En el supuesto de que a car no se le haya dado un valor inicial, ya que entonces el valor de
car es desconocido en la primera comprobacin.

134

5.5.

Ejemplos
Faltan ejemplos condicionales

135

Faltan ejemplos con ciclos

136

137

5.6.

Autoevaluacin
5.6.1. Preguntas
Faltan preguntas

138

5.6.2. Ejercicios
Para los siguientes ejercicios elaborar el anlisis del problema, el diagrama de flujo y el
pseudocdigo.
Problemas secuenciales
1. Escriba un programa que calcule el recproco de un nmero (El recproco de un
nmero est dado por la frmula: reciproco5 de x = 1/x

Problemas condicionales
2. Escriba un programa que solicite la introduccin de 2 nmeros y deduzca si estn en
orden ascendente o descendente.
3. Escribir un programa que escriba un mensaje correspondiente a la calificacin de un
alumno de acuerdo con los siguientes criterios:
0 35
Insuficiente
36 69
Necesita Mejorar
70 80
Satisfactorio
81 89
Muy Satisfactorio
90 100 Avanzado

Problemas con la sentencia Case


4. Escribir un programa que dado un nmero de un mes y el ao, calcule el nmero de
das de ese mes. Se sabe que febrero tiene 28 o 29 das cuando es ao bisiesto. Enero,
marzo, mayo, julio, agosto, octubre y diciembre tienen 31. El resto de meses tiene 30.
5. Se quiere escribir un programa que: solicite por teclado el nmero (dato entero) de un da de la
semana muestre por pantalla el nombre (dato cadena) correspondiente a dicho da.
Nota: Si el nmero de da introducido es menor que 1 mayor que 7, se mostrar el mensaje:
"ERROR: Da incorrecto.".
6.

Construya un programa de gestin de una biblioteca. Tal programa proporcionar en pantalla


un men con las siguientes acciones:
B. Bsqueda.
P. Peticin prstamo.
D. Devolucin prstamo.
S. Salir.

7. Utilizando la estructura selectiva mltiple (case) realizar un programa que solicite al


usuario una vocal, y presente por pantalla un mensaje indicando el orden de la vocal y
la vocal pulsada. Si pulsamos a, deber indicar que es la primera vocal, e la segunda, i
la tercera, etc.
El resultado debe ser similar a esto:
Introduzca una letra: e
Ha pulsado la segunda vocal, e

Recproco, es el inverso multiplicativo, es decir, dos nmeros son recprocos cuando multiplicados dan la
unidad (neutro del producto) Ejemplo: 2*1/2=1, 4*1/4=1. El nico nmero que no tiene recproco o inverso
multiplicativo es el 0, ya que ningn nmero multiplicado por cero da 1

139

8. Realizar un programa que calcule un valor de tipo numrico que nos indicar el ndice
de masa corporal (IMC) de una persona. El programa solicitar al usuario sus datos
personales (nombre y edad), su altura y su masa (peso) (el IMC se calcula dividiendo
la masa entre el cuadrado de la altura.
El resultado debe ser similar a esto:
Introduzca su nombre: pepe
Introduzca su edad: 19
Introduzca su altura en m: 1.70
Introduzca su peso en kg: 80
Hola pepe.
Tu edad es 19, tu peso 80 y tu altura 1.70.
Tu peso relativo es: 27.68.
Peso por encima de lo recomendado
El peso de un ser humano
Por trmino medio, un recin nacido tiene una masa de 3 a 4 kilogramos
(coloquialmente se dice que pesa de 3 a 4 kilos), y a los doce meses tiene una masa de
9 a 12 kilogramos. El ndice de masa corporal (IMC) establece la relacin entre la masa
y la talla de la persona.
La frmula para calcular el IMC es: masa corporal ("peso", expresada en kilogramos)
dividida entre el cuadrado de la estatura (expresada en metros).
IMC menor que 18.5 se considera en riesgo
IMC de 18.5-24.9 se considera un peso saludable.
IMC de 25.0-29.9 se considera sobrepeso.
IMC de 30.0-39.9 se considera obesidad.
IMC de 40.0 o ms se considera obesidad severa u obesidad mrbida).
9. Se propone modificar el ejercicio anterior. El programa deber solicitar al usuario si
desea repetir todo el proceso de peticin de datos y clculo de resultados.
El resultado debe ser similar a esto:
Introduzca su nombre: Arturo
Introduzca su edad: 26
Introduzca su peso en Kg.: 66
Introduzca su altura en m: 1.70
Hola Arturo
Tu edad es 26, tu peso 66.00 y tu altura 1.70
Tu peso relativo es 22.84
Peso correcto.
Desea continuar (S/N): S
Introduzca su nombre: Alice
Introduzca su edad: 24
Introduzca su peso en Kg.: 54
140

Introduzca su altura en m: 1.6


Hola Alice
Tu edad es 24, tu peso 54.00 y tu altura 1.60
Tu peso relativo es 21.09
Peso correcto.
Desea continuar (S/N): n
Problemas con ciclos
10. Escribir un programa que imprima el alfabeto.
11. Leer una serie de nmeros desde el teclado y calcular su media. Para finalizar se debe
introducir el nmero -100
12. Escribir un programa que calcule el mximo comn divisor (usar el algoritmo de
Euclides6).
13. Escribir un programa que calcule Xn (elevado a la potencia n) , donde X puede ser
cualquier nmero real positivo distinto de cero y n puede ser cualquier entero
positivo, negativo o cero. El programa debe permitir calcular varios valores y presentar
una opcin para terminar.
14. Realizar un programa que utilizando una estructura repetitiva (bucle) presente por
pantalla los nmeros del 1 al 10 separados por un guin.
El resultado debe ser similar a esto:
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 -

15. Modifique el programa previo para que solicite al usuario desde y hasta que nmero
quiere presentar por pantalla.
El resultado debe ser similar a esto:
Introduzca valor inicial: 6
Introduzca valor final: 14
6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 16. Suponga que desea saber que "perfil" tienen sus llamadas telefnicas. Para ello
realizar un programa que solicite la duracin de las llamadas y calcule:
La duracin total de sus llamadas
El valor medio
El nmero total de llamadas.
El resultado debe ser similar a esto:
Duracin de la llamada (0 para terminar): 5
6

Algoritmo de Euclides, utiliza el algoritmo de la divisin junto al hecho que el mcd de dos nmeros tambin
divide al resto de dividir el mayor entre el ms pequeo: se divide 60 entre 48 dando un cociente de 1 y un
resto de 12. El MCD ser por tanto divisor de 12. Despus se divide 48 entre 12 dando un resto de 0, lo que
significa que 12 es el mcd. Formalmente puede describirse como:

141

Duracin de la llamada (0 para terminar): 10


Duracin de la llamada (0 para terminar): 15
Duracin de la llamada (0 para terminar): 20
Duracin de la llamada (0 para terminar): 0
> Numero de llamadas: 4
> Duracin total: 50.0
> Duracin media: 12.5
17. Aadir al programa anterior lo necesario para que clasifique las llamadas en
Nacionales (N), Provinciales (P) y Locales (L) y realizar los mismo clculos que antes
para cada tipo de llamada (duracin y nmero de llamadas Nacionales, duracin y
nmero de llamadas Provinciales y duracin y nmero de llamadas Locales). El
programa tambin debe solicitar, despus de presentar los resultados, si se desea
realizar de nuevo todo el proceso anterior.
El resultado debe ser similar a esto:
Introduzca la duracin de la llamada en minutos (0 para terminar): 5
Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: p
Introduzca la duracin de la llamada en minutos (0 para terminar): 1
Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: n
Introduzca la duracin de la llamada en minutos (0 para terminar): 2
Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: l
Introduzca la duracin de la llamada en minutos (0 para terminar): 40
Introduzca el tipo de llamada. N:Nacional, P:Provincial, L:Local: p
Introduzca la duracin de la llamada en minutos (0 para terminar): 0
-Especificacin llamadas Nacionales, Provinciales y LocalesEl nmero de llamadas nacionales ha sido: 1 y su duracin: 15.00 minutos.
El nmero de llamadas provinciales a sido: 2 y su duracin: 45.00 minutos.
El nmero de llamadas locales a sido: 1 y su duracin: 20.00 minutos.
-Totales Nmero de llamadas: 4
Duracin total: 80.00 minutos
Duracin media: 20.00 minutos.
Desea continuar para realizar otra lista de llamadas? S/N: n

142

Parte

Parte 3.
Programacin
modular

143

144

Captulo 6 Funciones
y Procedimientos
Para la construccin de programas de tamao no medio o grande es necesario disponer de
herramientas que permitan organizar el cdigo. Por una parte, las tcnicas de la
programacin estructurada hacen posible relacionar las acciones por realizar mediante
constructores de secuencia, seleccin e iteracin, tal y como se vio en los captulos
anteriores. Por otra parte, la programacin con subprogramas permite al programador
separar partes de cdigo con un cometido bien determinado, los subprogramas, que
pueden ser invocados desde diferentes puntos del programa principal. As se extiende el
juego de instrucciones bsicas con otras nuevas a la medida del problema que se est
resolviendo. Una eleccin adecuada de subprogramas, entre otras ventajas, hace que los
programas sean ms legibles y que su cdigo sea ms fcilmente reutilizable. De esta
forma se facilita en gran medida el paso de los algoritmos a los programas, especialmente
cuando se sigue un mtodo de diseo descendente.

6.1.

Objetivos
Objetivos

145

6.2.

Programacin modular
Uno de los mtodos ms conocidos para resolver un problema es dividirlo en problemas
ms pequeos, llamados sub-problemas. De esta manera, en lugar de resolver una tarea
compleja y tediosa, resolvemos otras ms sencillas y a partir de ellas llegamos a la
solucin. Esta tcnica se usa mucho en programacin ya que programar no es ms que
resolver problemas, y se le suele llamar diseo descendente, metodologa del divide y
vencers o programacin top-down.
Es evidente que si esta metodologa nos lleva a tratar con sub-problemas, entonces
tambin tengamos la necesidad de poder crear y trabajar con subprogramas para
resolverlos. A estos subprogramas se les suele llamar mdulos, de ah viene el nombre de
programacin modular. En Pascal disponemos de dos tipos de mdulos: los
procedimientos y las funciones.
Veamos un ejemplo de cmo emplear el diseo descendente para resolver un problema.
Supongamos que un profesor quiere crear un programa para gestionar las notas de sus
alumnos. Quiere que dicho programa le permita realizar tareas tales como asignar notas,
cambiar notas, ver las notas segn distintas calificaciones, etc. A continuacin tienes un
esquema que representa una de las posibles divisiones del problema en mdulos.

6.3.

Procedimientos
Un procedimiento es un subprograma que realiza una tarea especfica. Para invocarlo, es
decir, para hacer que se ejecute, basta con escribir su nombre en el cuerpo de otro
procedimiento o en el programa principal. Pero, hay que tener muy en cuenta que su
declaracin debe hacerse antes de que sea llamado por otro mdulo.
Una vez que has construido varios programillas en Pascal, crear un procedimiento no es
nada complicado, pues tiene prcticamente la misma estructura que un programa.
146

Veamos las secciones que comparten y no comparten un procedimiento y un programa


principal:

Mientras que en el programa la cabecera consta de la palabra reservada program


seguida del nombre del programa, en un procedimiento se compone de la palabra
procedure seguida del nombre del procedimiento y una lista de parmetros que es
opcional.
Las secciones de declaracin de constantes (const), de tipos (type) y de variables
(var) tambin pueden aparecer en la estructura de cualquier procedimiento.
Respecto al cuerpo del procedimiento, decir que al igual que el de un programa se
delimita por las palabras reservadas begin y end, y en su interior puede contener
sentencias simples o estructuradas.
Por ltimo, comentar que ambos difieren en el signo de puntuacin que marca su
final, ya que en un programa es el punto (.) y en un procedimiento es el punto y coma
(;).

En la seccin de declaracin en un programa en Pascal, se debern declarar los


procedimientos:

Declaracin
Procedimientos
Funciones

Procedure
Declaracin de procedimientos
Function
Declaracin de funciones

A continuacin se muestra un diagrama de la estructura de un procedimiento:


Seccin de encabezado
Procedure Identificador(parmetros formales);
Seccin de declaracin
Constantes

Const
Definicin

Tipos definidos

Type

Variables

Var

Declaracin de tipos
Identificadores
Subprogramas
Declaracin de otros subprogramas
Cuerpo del subprograma

Begin
Sentencia1;
Sentencia2;

Sentencian;
End;

147

Cuando se ejecuta un programa que incluye procedimientos, la computadora empieza la


ejecucin por el cuerpo del programa principal del programa. El procedimiento se invoca
desde algn lugar que convenga al programador, desde el cuerpo principal del programa o
bien desde otro subprograma. La llamada de un procedimiento se hace escribiendo el
identificador del mismo seguido de la lista de argumentos encerrados entre parntesis y
separados por comas. Ejemplo:
Identificador (a1, a2, a3);
Ejemplo: El siguiente programa muestra el rtulo Hola Mundo en pantalla haciendo uso de
un procedimiento.
Cdigo en Pascal
program procedimiento;
uses crt;
procedure mensaje;
begin {del procedimiento}
writeln(hola mundo);
end;
begin
writeln (ejemplo de procedimiento);
writeln; {muestra una lnea en blanco}
mensaje; {llama al procedimiento}
writeln;
mensaje; {llama al procedimiento}
readln;
end.

6.4.

Las variables globales y locales


Una variable local es una variable que est declarada dentro de un subprograma, y se dice
que es local al subprograma. Y lo que la caracteriza es que su valor slo est disponible
mientras se ejecuta el subprograma. Dicho de otra manera, el programa principal no tiene
conocimiento alguno de las variables locales de sus procedimientos y funciones.
Las variables declaradas en la seccin correspondiente a esta labor en el programa
principal se denominan variables globales. Y a diferencia de las locales, su valor est
disponible tanto en el cuerpo del programa principal como en el de cualquiera de los
subprogramas declarados.

148

Ejemplo: El siguiente programa muestra el alcance de las variables.


Cdigo en Pascal
program varGlobalesLocales;
var
vGlobal : integer;
procedure nombreProc(param : integer);
var
vLocal : integer;
begin
vLocal := 2 * param;
vGlobal := vLocal
end;
(*cuerpo principal del programa*)
begin
vGlobal := 1;
nombreProc(4);
writeln('vGlobal vale: ',vGlobal)
end.
En el ejemplo anterior se declara una variable local llamada vLocal, y si se intentase
usarla en el cuerpo del programa principal, por ejemplo para asignarle un valor,
recibiramos un error del compilador. Tambin se declara una variable global (vGlobal),
cuyo valor se cambia en el cuerpo del procedimiento, y este cambio permanece despus
de ejecutarlo, pues el resultado que se mostrara en pantalla sera: vGlobal vale: 8.
Aunque en el ejemplo se hace, no es una buena prctica en programacin tratar con
variables globales en los subprogramas, porque pueden aparecer errores debidos a algn
cambio no previsto en una de estas variables. Este tipo de errores son conocidos como
efectos laterales y se evitan usando los parmetros en la comunicacin de un programa
con sus procedimientos.

6.5.

Subprogramas con parmetros (argumentos)


Como habrs observado, con los procedimientos nos llega un concepto nuevo, el de los
parmetros. A los parmetros tambin se les conoce como argumentos y tienen la misin
de comunicar al procedimiento con el programa que lo llama. Por ejemplo, si quieres
hacer un subprograma que multiplique dos nmeros, lo ms cmodo es que al llamar al
procedimiento le pases los valores que participarn en la operacin. Podra ser algo como:
procedure producto (a,b : integer; var producto : integer)
(* resto del procedimiento *)
En el ejemplo anterior se observan las dos clases de argumentos que existen en Pascal:
Los parmetros por valor.
Los parmetros por referencia.

149

6.5.1. Parmetros por valor


Los parmetros por valor tienen dicho nombre porque lo que recibe el subprograma no es
ms que copias de los valores de los datos que el programa invocador le pasa. Por tanto si
en el procedimiento modificamos alguno de estos valores, los datos originales
permanecern inalterados. En el ejemplo, son a y b.
Ejemplo: El siguiente programa muestra el uso de procedimientos con parmetros por
valor.
Cdigo en Pascal
{este programa realiza la sumatoria de dos nmeros}
program sumatoria;
uses crt;
var
a,b,c:ingeger;
procedure suma(a,b,c:integer);
begin
c:=a+b;
end;
begin {cuerpo del programa}
clrscr;
write (ingrese el valor de a: );
read (a);
write (ingrese el valor de b: );
read (b);
write (ingrese el valor de c: );
read (c);
suma(a,b,c); {llama al procedimiento suma}
writeln (el valor de a es: ,a);
writeln (el valor de b es: ,b);
writeln (el valor de c es: ,c);
readln;
end.
6.5.2. Parmetros por variable o referencia
En los parmetros por referencia lo que se pasa al procedimiento son los datos en s. Y si
ste los modifica, los cambios permanecern una vez que la ejecucin vuelva al mdulo
que invoc al procedimiento. Se utilizan para obtener valores de los clculos que haga un
subprograma, y en el anterior ejemplo es producto.
Cmo se especifica que un parmetro es por valor o por referencia?

150

Pues es tan sencillo como anteponer la palabra reservada var cuando quieres que un
argumento sea considerado como referencia. Esto se observa claramente con el
parmetro producto del ejemplo.
Si no tienes muy clara la diferencia entre parmetros por valor y por referencia, te
aconsejo que vayas al ejemplo sobre procedimientos del que dispones en este tema, estoy
seguro que te ayudar.
Ejemplo: El siguiente programa muestra el uso de procedimientos con parmetros por
variable o referencia.
Cdigo en Pascal
{este programa realiza la sumatoria de dos nmeros}
program sumatoria;
uses crt;
var
a,b,c:ingeger;
procedure suma(a,b:integer; var c:integer);
begin
c:=a+b;
end;
begin {cuerpo del programa}
clrscr;
write ('ingrese el valor de a: ');
read (a);
write ('ingrese el valor de b: ');
read (b);
write ('ingrese el valor de c: ');
read (c);
suma(a,b,c); {llama al procedimiento suma}
writeln ('el valor de a es: ',a);
writeln ('el valor de b es: ',b);
writeln ('el valor de c es: ',c);
readln;
end.

151

Los parmetros que se utilizan en la llamada o invocacin a subprograma proporcionan


informacin necesaria para la ejecucin de la tarea, al momento de la invocacin, se
denominan parmetros actuales, reales o argumentos. Ejemplo:
nombreProc(4);
Los parmetros que se colocan en el encabezado del procedimiento son los que reciben la
informacin y se denominan parmetros formales o ficticios. Ejemplo:
procedure nombreProc(param : integer);

6.6.

Funciones
Este tema trata de la programacin modular, y como ya hemos dicho, Pascal nos ofrece
dos tipos de mdulos. Uno son los procedimientos, y el otro son las funciones. La divisin a
ms alto nivel que se suele hacer con las funciones, es la que las divide segn quien sea el
autor de las mismas. As tenemos funciones predifinidas o estndar, y funciones de
usuario. Las de usuario las trataremos ms adelante. Ahora nos centraremos en las
predefinidas.
6.6.1. Funciones predefinidas
Las funciones predefinidas, tambin llamadas estndar, son las que el propio lenguaje
Pascal pone a disposicin del programador. Por ejemplo, si necesitas calcular el valor
absoluto de un nmero, no es necesario que construyas la funcin, pues ya se dispone de
una que lo hace.
Dependiendo del tipo de compilador de Pascal que uses, dispondrs de ms o menos
funciones estndar, pero siempre tendrs un grupo bsico que comparten todos. A
continuacin se citan unas cuantas funciones de las bsicas:
6.6.2. Funciones de truncamiento y redondeo

Funcin:
Descripcin:

Round

Sintaxis:
Ejemplo:

Round(x:real)
Writeln(round(3.5));

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Trunc
Trunca la parte decimal de un argumento.

Redondea un nmero real al entero ms cercano y devuelve el resultado


como un nmero real.

Trunc(x:real);
Writeln(trunc(-3.56));

Salida:

Salida:

-3

152

Ejemplo: cdigo en Pascal


PROGRAM Redondeo;
USES
crt;
VAR
Entero :Integer;
ValorReal1, ValorReal2 : Real;
BEGIN
ValorReal1 := 123.435;
ValorReal2 := Round(ValorReal1);
Entero := Trunc (ValorReal1);
WriteLn('El resultado
WriteLn(ValorReal1, '
WriteLn('El resultado
WriteLn(ValorReal1, '

de la funcin Round sobre el valor');


es: ','ValorReal2, ' (Nmero real)');
de la funcin Trunc sobre el valor');
es: ', Entero, ' (Nmero entero)');

END.

6.6.3. Funciones exponenciales y logartmicas


Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Sqr
Calcula el cuadrado de un nmero.
Sqr(x:real)
Writeln(sqr(2));

Salida:

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Sqrt
Calcula la raz cuadrada de una expresin.
Sqrt(x:real)
Writeln(sqrt(9));
Salida:

Ejemplo: cdigo en Pascal


PROGRAM Exponentes;
USES crt;
VAR
Dato, Cuadrado : Integer;
Raiz : Real;
BEGIN
Dato := 45;
Cuadrado := Sqr(Dato);
Raiz := Sqrt(Dato);
WriteLn(' El cuadrado de ',Dato, ' es: ',Cuadrado);
WriteLn(' La raz cuadrada de ',Dato,' es: ',Raiz);
END.

153

Funcin:
Descripcin:

Exp
7
X
Devuelve la funcin exponencial e^x, nos regresa e es decir el antilogaritmo

de un numero.
Sintaxis:
Ejemplo:

Exp(x:real)
Writeln(Exp(2));

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Ln

Salida:

7.38905

Devuelve el logaritmo natural8 de x. El resultado siempre es del tipo real.


ln(x:real)
Writeln(ln(7.38905));

Salida:

Es posible crear una funcin con base en estas dos para calcular el resultado de un nmero
x elevado a una potencia n, la cual nos quedara as:
FUNCTION Potencia(x,n:Real):Real;
BEGIN
Potencia := Exp(n *Ln(x))
END;
El uso de esta funcin en un programa podra ser:
Ejemplo: cdigo en Pascal
PROGRAM Potenciacion;
USES crt;
FUNCTION Potencia(x, n : Real) : Real;
BEGIN
Potencia := Exp(n * Ln(x))
END;
BEGIN
WriteLn('5 elevado a 3 es: ',Potencia(5,3));
END.
7

La funcin exponencial, es conocida formalmente como la funcin real ex, donde e es el nmero
de Euler, aproximadamente 2.71828.... Esta funcin tiene por dominio de definicin el conjunto de
los nmeros reales, y tiene la particularidad de que su derivada es la misma funcin. Se denota
equivalentemente como f(x)=ex o exp(x), donde e es la base de los logaritmos naturales y
corresponde a la funcin inversa del logaritmo natural.
El antilogaritmo natural de un nmero x es entonces la base e con exponente a para obtener x.
Por ejemplo, el antilogaritmo de 2 es 7.389005.
8

En matemticas se denomina logaritmo natural o informalmente logaritmo neperiano al


logaritmo cuya base es el nmero e, un nmero irracional cuyo valor aproximado es 2,718281... El
logaritmo natural se le suele denominar como ln(x) o a veces como loge(x) , porque para ese
nmero se cumple la propiedad de que el logaritmo vale 1.
El logaritmo natural de un nmero x es entonces el exponente a al que debe ser elevado el
nmero e para obtener x. Por ejemplo, el logaritmo de 7,38905... es 2, ya que e2=7,38905... El
logaritmo de e es 1, ya que e1=e.

154

6.6.4. Funciones aritmticas


Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Abs
Retorna el valor absoluto de un argumento.
Abs(x:real)
Writeln(abs(-2.3):0:2);
Salida:

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

frac
Regresa la parte decimal de un valor real, tambin como valor real.
frac(x:real)
Writeln(frac(3.1416):0:4);
0.1416
Salida:

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Int
Devuelve la parte entera de x
int(x:real)
Writeln(int(3.1416):0:4);

Salida:

3.0000

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

odd
Devuelve TRUE si x es impar y FALSE si x
es par.
odd(x:integer)
Writeln(3);

Salida:

TRUE

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

pred
Devuelve el predecesor de x
pred(x:tipo ordinal)
Writeln(pred(2));

Salida:

Funcin:
Descripcin:

Succ
Devuelve el sucesor de x
ordinal)

Sintaxis:
Ejemplo:

Succ(x:tipo ordinal)
Writeln(succ(5));

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Pi
Devuelve el valor de la constante pi
pi (*no args.*)
Writeln(pi:0:8);

2.30

(x es
6

Salida:

3.14159265

155

6.6.5. Funciones trigonomtricas


Las funciones trigonomtricas definidas en Pascal son: Sin(valor), Cos(valor) y
Arctan(valor), todas las dems pueden definirse desde estas:
Funcin:
Tan(x)
Cot(x)
Sec(x)
Csc(x)

=
=
=
=

Sin(x) / Cos(x)
Cos(x) / Sin(x)
1 / Cos(x)
1 / Sin(x)

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Sin

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Cos
Retorna el coseno de un argumento (el argumento es un ngulo)
cos(x:real)
Writeln(cos(pi):0:2);
-1.0
Salida:

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Arctang
Retorna el arco tangente de un argumento
Arctan(real)
Writeln(arctan(pi));
Salida:

Retorna el seno de un argumento (el argumento es un ngulo).


Sin(x:real)
Writeln(sin(90));

Salida:

0.8940

1.26

Ejemplo: para calcular funciones trigonomtricas.


FUNCTION Tan(x : Real) : Real;
BEGIN
Tan := Sin(x) / Cos(x)
END;
FUNCTION Cot(x : Real) : Real;
BEGIN
Cot := Cos(x) / Sin(x)
END;
FUNCTION Sec(x : Real) : Real;
BEGIN
Sec := 1 / Cos(x)
END;
FUNCTION Csc(x : Real) : Real;
BEGIN
Csc := 1 / Sin(x)
END;

156

6.6.6. Funciones para nmeros aleatorios


Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Random
Genera un nmero aleatorio de tipo real comprendido entre 0 y 1

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Random(x)
Genera un nmero aleatorio de tipo real comprendido entre 0 y x.

Funcin:
Descripcin:

Randomise
El uso de la funcin Random es en ocasiones insuficiente por si sola para
la generacin de valores aleatorios ya que los nmeros son realmente
pseudoaleatorios, y cada vez que se ejecute el programa se obtendran
los mismos valores. Para evitar esto debemos utilizar en todo programa
que utilice valores aleatorios el procedimiento Randomize, que inicializa
el generador de nmeros aleatorios, en otras palabras, asegura que los
nmeros que obtendr sern diferentes cada vez que se ejecute el
programa.

Sintaxis:
Ejemplo:

randomize(*no args.*)
Randomize;
Writeln(random(5));

random(*no args.*)
Writeln(random:0:0)

Random(x:natural)
Writeln(random(5));

Salida:

Salida:

Salida:

0 o 1

Valor entre 0 y 5

Valor entre 0 y 5

Ejemplo: un programa generador de nmeros aleatorios.


PROGRAM Nums_Aleatorios;
USES crt;
VAR
x : Integer;
BEGIN
Randomize;
WriteLn('Lista de nmeros aleatorios');
For x := 1 to 20 do
WriteLn(Random);
END.
6.6.7. Funciones para caracteres
Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Chr
Retorna el carcter ASCII correspondiente al nmero ordinal.
Chr(x:integer)
Write(chr(160));

Salida:

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Ord
Devuelve el valor numrico de un carcter ASCII.
Ord(x:char)
Writeln (ord(B));
Salida:

66

157

6.6.8. Funciones para archivos


Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Eof
Verifica si es fin de archivo

Funcin:
Descripcin:
Sintaxis:
Ejemplo:

Eoln
Verifica si es fin de lnea

While not Eof(F) do

While not eoln(f) do

Salida:

Salida:

Existen 3 clases usuales de funciones.


Las primeras son de tipo computacional que son diseadas para realizar operaciones
con los argumentos y regresan un valor basado en el resultado de esa operacin.
Las segundas funciones son aquellas que manipulan informacin y regresan un valor
que indican la terminacin o la falla de esa manipulacin.
Las terceras son aquellas que no regresan ningn valor, es decir son estrictamente
procedurales.
Esto quiere decir que en general toda operacin o clculo en un programa deber
convertirse a una o muchas funciones y el resto debern ser procedimientos.
6.6.9. Funciones definidas por el usuario
Una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y puede
retornar un valor. Las funciones pueden tomar parmetros que modifiquen su
funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en
tareas simples y para implementar operaciones que son comnmente utilizadas durante
un programa y de esta manera reducir la cantidad de cdigo. Cuando una funcin es
invocada se le pasa el control a la misma, una vez que esta finaliz con su tarea el control
es devuelto al punto desde el cual la funcin fue llamada.
En Pascal, una funcin definida por el usuario es un modulo de programa separado del
cuerpo principal, que realiza una tarea especfica y que puede regresar un valor a la parte
principal del programa u otra funcin o procedimiento que la invoque.
La sintaxis de la instruccin es:
Function NombreFuncion(parametros): tipodatoregresa;
Begin
Instrucciones;
End;

158

Donde tipodato especifica el tipo de dato que regresara la funcin. Y el


NombreFuncion tiene dos papeles en pascal:
Es el nombre que se invocara dentro del principal o de algn procedimiento u otra
funcin.
Es tambin una variable que deber cargarse dentro del cuerpo de instrucciones
(begin...end) para que pueda regresar el dato o resultado al principal o
procedimiento o funcin que la este invocando.
La lista de parmetros formales es una lista de variables separadas por punto y coma (;)
que almacenaran los valores que reciba la funcin, estas variables actan como locales
dentro del cuerpo de la funcin. Recordar adems que cuando se llame una funcin
deber haber una variable que reciba el valor que regresar la funcin, es decir
generalmente se llama una funcin mediante una sentencia de asignacin, por ejemplo:
Resultado = NombreFuncion(5, 3.1416);
Para la declaracin de funciones, se sigue el siguiente esquema:
Seccin de encabezado
Function Identificador(parmetrosformales): tipodato;
Seccin de declaracin
Const
Constantes
Definicin
Type
Tipos definidos
Declaracin de tipos
Var
Variables
Identificadores
Subprogramas
Declaracin de otros subprogramas
Cuerpo del subprograma

Begin
Sentencia1;
Sentencia2;

Sentencian;
End;

159

Ejemplo: El siguiente programa muestra el uso de procedimientos con parmetros por


variable o referencia.
Cdigo en Pascal
{muestra el uso de funciones}
program uso_de_funciones;
uses crt;
var
dolar,lempiras,tasa_cambio:real;
function total_dolares(mo_nacional,tasa:real):real;
begin {de la funcion}
total_dolares:= lempiras /tasa_cambio;
end;
begin {cuerpo principal}
clrscr;
writeln ('convierte un valor en lempiras a dolares');
write ('ingrese el valor en lempiras: ');
read (lempiras);
write('ingrese la tasa de cambio, L por $ ');
read (tasa_cambio);
(* llama a la funcin*)
dolar := total_dolares(lempiras, tasa_cambio);
writeln('los dolares son: ',dolar:0:2);
readln;
readln;
end.

6.7.

Que usar Funciones o Procedimientos?


Para seleccionar el uso de una funcin de de un procedimiento, puede tomar en
consideracin los siguientes criterios:
Hacer uso de una funcin cuando se necesite que el subprograma devuelva un solo
valor.
Si el valor devuelto por el subprograma ser usado posteriormente se recomienda
hacer uso de funciones.
Hacer uso de procedimientos cuando se necesite la devolucin de varios valores.
Si no est seguro de que estructura utilizar, haga uso de un procedimiento.

160

6.8.

Ejemplos
Ejemplo: El siguiente programa permite calcular el cubo de un nmero mediante una
funcin cubo.
Cdigo en Pascal
program potencia;
uses crt;
var

num, pot:integer;
function cubo(pnum:integer):integer;
begin
cubo:=pnum*pnum*pnum;
end;

begin {programa principal}


write(ingrese un nmero);
readln(num);
pot:=cubo(num);
writeln (num, al cubo es , pot);
readkey;
end.

161

6.9.

Autoevaluacin
6.9.1. Preguntas
Faltan preguntas

162

6.9.2. Ejercicios
Para los siguientes ejercicios elaborar el anlisis del problema, el diagrama de flujo y el
pseudocdigo.
Ejercicios con funciones:
1. Escriba una funcin mayscula, que recibe un argumento de tipo carcter; si es una
letra minscula, devuelve su correspondiente letra mayscula, en caso contrario
devuelve su argumento.
2. Disee un programa que lea un nmero y mediante una funcin regrese el valor de 1
si es positivo y -1 si es negativo.
3. Codificar un conversor de Lempiras a Euros, y de euros a Lempiras. Para ello se exige
programar dos funciones que se llamarn Funcin calcula_euros y Funcin
calcula_lempiras.
El resultado ser similar a esto:
Para convertir:
1. Pasar de Lempiras a euros.
2. Pasar de euros a Lempiras.
Opcin: 2
Introduzca cantidad en euros: 30
Son 720 Lempiras.
Ejercicios con procedimientos:
4. Intercambiar el valor de dos variables con un procedimiento.
5. Disee un programa que lea dos nmero y determine (Disee un procedimiento para
cada inciso)
La suma y el producto de ambos,
La resta y la divisin en ambas direcciones.
6. Utilizando un procedimiento, calcular y mostrar la tabla de multiplicar de un nmero
cualquiera.
7. Codificar un programa, que solicite dos nmeros y presente por pantalla la suma de
ambos. El clculo de la suma deber realizarse dentro de un procedimiento de nombre
calculo, y los resultados se debern presentar invocando a otro procedimiento de
nombre presenta_resultados (este ltimo procedimiento no debe recibir como
parmetros ni el primer, ni el segundo nmero.)
El resultado ser similar a esto:
Introduzca el primer nmero: 3
Introduzca el segundo nmero: 6
El resultado de la suma es: 9.00
8. A partir del programa anterior cree otro, que presente adems del resultado de la
suma tambin el de la resta, multiplicacin y divisin. Deber modificar los
procedimientos calculo y presenta_resultados como sea necesario, pero sin introducir
ningn procedimiento ni funcin adicional. Recuerde que la impresin de los
resultados hay que hacerla en el procedimiento presenta_resultados, y que este no
debe recibir como parmetros ni el primer nmero, ni el segundo nmero).
El resultado ser similar a esto:
163

Introduzca el primer nmero: 6


Introduzca el segundo numero: 3
El resultado de la suma es: 9.00
El resultado de la resta es: 3.00
El resultado de la multiplicacin es: 18.00
El resultado de la divisin es: 2.00
9. Cree un programa con un procedimiento que imprima una lnea de una cierta longitud
compuesta por un determinado carcter.
Para ello el procedimiento, de nombre lnea, recibir dos parmetros: el carcter a
imprimir y la longitud.
El resultado ser similar a esto:
Introduzca longitud de la lnea: 20
Introduzca carcter: *
********************
10. Crear un programa que imprima un tringulo.
El resultado ser similar a esto:
Introduzca altura del triangulo: 7
Introduzca carcter: +
+
++
+++
++++
+++++
++++++
+++++++
Ejercicios con funciones y procedimientos:
11. Capturar 3 calificaciones y nombre en un procedimiento, calcular promedio en una
funcin, desplegar en otro procedimiento.
12. Crear una tabla de multiplicar, captura y control de ciclo en el cuerpo principal,
operaciones en una funcin, despliegue en el principal.

164

165