Académique Documents
Professionnel Documents
Culture Documents
GUÍA 1
Teórica-Práctica
Pp
Guía 1 Página 1 de 21
COMPUTACIÓN Guía 1
Teórica
Algoritmo
En términos generales, la Computación, o también llamada Informática, es la disciplina que busca establecer
una base científica para resolver problemas mediante computadoras.
Un algoritmo es un conjunto finito de instrucciones ejecutables, no ambiguas, que dirige a una actividad que
termina o resuelve un problema en tiempo limitado. Por ejemplo, hay algoritmos para construir aeroplanos a
escala (expresados en forma de hojas de instrucciones), para tocar música (en forma de partituras) para
preparar platos de cocina (en forma de recetas), etc. En el ámbito de los equipos de computación, los
algoritmos se representan como programas dentro de las computadoras, que reciben colectivamente el
nombre de software (a diferencia del equipo en sí, que constituye el hardware). Para que una máquina
efectúe una tarea, primero debemos diseñar un algoritmo para llevarla a cabo y luego programarlo en la
máquina.
Una de las principales labores en el campo de la Computación consiste en el desarrollo de algoritmos, por lo
que una parte importante de esta ciencia se ocupa de cuestiones relacionadas con esta tarea. El estudio de los
algoritmos comenzó como un tema de matemáticas, mucho antes de que se inventaran las computadoras
actuales, y su principal objetivo era descubrir un conjunto único de instrucciones para resolver cualquier
problema de un cierto tipo; así, una vez descubierto un algoritmo para efectuar una tarea, la realización de
ésta ya no requeriría entender los principios en que se basa el algoritmo, sino tan sólo seguir las
instrucciones. En cierto sentido, la inteligencia requerida para llevar a cabo la tarea está codificada en el
algoritmo.
Por ejemplo, uno de los primeros algoritmos formalizados es el de Euclides, para obtener el máximo común
divisor de dos enteros positivos:
Considerar los nombres M, N y R para designar valores enteros positivos (los valores asociados a estos
nombres cambiarán durante la ejecución del algoritmo), y seguir los siguientes pasos:
Obtener el número mayor y llamarlo M.
Obtener el número menor y llamarlo N.
Dividir M entre N y asignar el valor del resto a R.
Si R es 0 seguir por el paso 8.
Asignar a M el valor de N.
Asignar a N el valor de R.
Seguir por el paso 3.
El máximo común divisor de los valores originales de M y N es el actual valor de N.
Terminar
Como puede verse en el algoritmo precedente, no hace falta comprender por qué el procedimiento produce el
resultado deseado, sino que basta con seguirlo. Pero para crear un algoritmo básicamente hay que:
• Plantear bien el problema a resolver, establecer los recursos que se necesitarán para resolverlo (en este
caso, nombres para designar valores numéricos, verificando cuáles de ellos estarán asociados a valores
que deben ingresar al algoritmo, cuáles a valores intermedios o de procesamiento, y cuáles a valores
resultantes)
• Seguir alguna estrategia para encontrar y desarrollar la solución (como por ejemplo individualizar,
aislar y ordenar las distintas actividades para conseguir una solución)
• Comprobar que la solución obtenida es buena (para este ejemplo, seguir el algoritmo con varios pares
de números para los que se conoce o infiere fácilmente cuál es su máximo común divisor).
Lic. Servetto – Ing. Jiménez Rey 75.01 Computación
Guía 1 Página 2 de 21
Alcance de la Computación
Se puede apreciar el alcance de la computación o informática, considerando algunos de sus objetos de
estudio desde el punto de vista de los algoritmos:
Descubrimiento de algoritmos (descubrir un algoritmo para resolver un problema equivale, en lo esencial, a
descubrir una solución para ese problema). Los estudios de esta rama de la informática, denominada
Algoritmia, se apoyan en áreas como la psicología humana de la resolución de problemas y las teorías de la
educación.
Una vez descubierto un algoritmo para resolver un problema, se debe representar de manera que se lo pueda
comunicar a una máquina o a otras personas. Se debe transformar el algoritmo conceptual en un conjunto
claro de instrucciones y representar estas últimas sin ambigüedad. Los estudios que se ocupan de esto se
basan en conocimientos del lenguaje y la gramática, y han dado lugar a un gran número de esquemas para
representar algoritmos, llamados lenguajes de programación, fundados en diversos enfoques del proceso de
programación, llamados paradigmas de programación (v.g. programación imperativa, programación
funcional, programación lógica, programación orientada a objetos).
En general, la estructura algorítmica de los grandes sistemas automatizados se debe guiar por un proceso de
ingeniería similar al de las máquinas mismas. Por otra parte, en muchos casos, como en los entornos
comerciales, en el desarrollo y elaboración de programas no hace falta descubrir algoritmos radicalmente
nuevos; más bien, el problema principal consiste en identificar qué sistemas automatizados se necesitan y
cómo estos nuevos sistemas van a interactuar con los ya existentes. La combinación de estas dos
problemáticas ha dado origen a la rama de la informática conocida como Ingeniería de Software.
Otra rama importante de la informática se ocupa del diseño y la construcción de máquinas, pero no con el
objetivo de dominar los detalles de la realización de las máquinas actuales con circuitos electrónicos, puesto
que esto es responsabilidad de la ingeniería electrónica, sino para comprender lo suficiente la tecnología de
hoy de manera de apreciar sus ramificaciones y su influencia sobre el desarrollo de la informática. De esto se
ocupa una rama de la informática conocida generalmente bajo la denominación de Arquitectura de
Computadoras.
Algo íntimamente relacionado con el diseño del equipo de cómputo es el diseño de la interfaz entre una
máquina y el mundo exterior: la forma en que se insertan los algoritmos en una máquina, la forma en que se
le indica a la máquina qué algoritmo debe ejecutar, etc. La resolución de tales problemas en un entorno en el
que se espera que la máquina suministre muy diversos servicios implica la coordinación de actividades y la
asignación de recursos, temas que se estudian en la rama de la informática dedicada a los Sistemas
Operativos. La comunicación entre máquinas y los problemas inherentes se estudian en una rama a menudo
considerada en conjunto con la anterior, denominada Redes de Teleprocesamiento y Comunicación de
Datos.
Un tema de singular importancia en el campo de la informática tiene que ver con el almacenamiento y
recuperación de los datos en los sistemas de cómputo, y la combinación de técnicas para obtener sistemas de
almacenamiento masivos centralizados que puedan dar la apariencia de tener una gran cantidad de
organizaciones apropiadas para varias aplicaciones. Este tipo de problemas se estudian en la rama de la
informática que se ha dado en llamar Bases de Datos.
Las tareas que se exigen a las máquinas requieren cada vez más inteligencia, y es por ello que la informática
ha recurrido al estudio de la inteligencia humana como guía. La rama de la informática, conocida como
Inteligencia Artificial, se basa en gran medida en investigaciones de campos como la psicología, la biología
y la lingüística para diseñar algoritmos que imiten el razonamiento y la percepción de la mente humana.
Programación de Computadoras
Como un programa es un algoritmo representado para que pueda ejecutarlo una computadora, desarrollar un
programa implica descubrir la solución al problema que debe resolver el programa, es decir, descubrir el
algoritmo, y luego representarlo en forma de programa. La actividad más importante y difícil en el proceso
de creación de software es descubrir los algoritmos, por lo que la algoritmia debe basarse necesariamente en
el proceso de resolución de problemas, un proceso imaginativo y artístico cuyas fases, definidas a grandes
rasgos por el matemático G. Polya a fines de los años cuarenta siguen siendo los principios en que se basan
los métodos actuales para resolver problemas.
La estrategia más común para desarrollar algoritmos es la denominada “divide y vencerás”, que consiste en
descomponer el problema principal en una lista de problemas más simples, que a su vez se siguen
descomponiendo hasta llegar a un nivel en que los problemas sean resolubles por acciones simples de la
computadora. Este proceso se denomina de refinamientos sucesivos, y es similar al que se emplea para
escribir artículos o libros partiendo de borradores; para la programación, también se lo llama de diseño
descendente, porque parte de ideas generales y desciende hasta los detalles.
El resultado de los refinamientos sucesivos es un conjunto de instrucciones paso a paso que, al completarse,
resuelve el problema original, o sea, es un algoritmo, expresado en términos de acciones esenciales llamadas
primitivas de programación no ejecutables, en un lenguaje híbrido entre un lenguaje de programación y un
lenguaje natural llamado pseudocódigo, o código de documentación interna de programas.
Los enunciados de problemas a resolver, en cualquier nivel de refinamiento, deben observar la definición de
algoritmo: deben ser ejecutables por una computadora, y ser no ambiguos. Respecto a las capacidades de las
computadoras, se analizan enseguida, y en cuanto a la no ambigüedad, para que se cumpla este precepto es
imprescindible que los enunciados sean libres de contexto, es decir, que sean autocontenidos
(independientes de cualquier otro enunciado) y que se interpreten de una única manera posible.
Por lo tanto, para que los enunciados de la solución de un problema se puedan convertir en un programa, sólo
pueden referirse a alguna de estas actividades. Cada una de estas actividades se asocia a dispositivos de
hardware específicos de la computadora.
Los dispositivos de entrada aceptan entradas del exterior de la computadora. El dispositivo más común es el
teclado QWERTY (llamado así por la primera fila de teclas de letras), aunque las computadoras pueden
aceptar señales de entrada de muchos otros dispositivos como los dispositivos apuntadores: ratones (mice),
bolas rastreadoras (trackballs), palancas de mando (joysticks), o dispositivos de lectura: lectoras ópticas de
códigos de barra o de caracteres, para leer códigos universales de productos (UPC: universal product codes)
o efectuar reconocimiento óptico de caracteres (OCR: optical character recognition) respectivamente.
La memoria central y los dispositivos de almacenamiento sirven para almacenar la información y los
programas o conjunto de órdenes para que la computadora mueva, almacene, produzca, acepte o proporcione
información. Se emplean diferentes tipos de memoria para tareas de almacenamiento a corto o largo plazo;
así, en la memoria central se almacenan o “cargan” los programas que la computadora deba ejecutar de
inmediato y la información necesaria para ejecutar cada orden o instrucción del programa en su oportunidad;
y en la memoria auxiliar o masiva, representada por los dispositivos de almacenamiento (los dispositivos de
almacenamiento más comunes son los discos rígidos, los disquetes, los discos compactos y las cintas), se
almacenan programas e información en forma permanente para su libre disponibilidad en cualquier
momento. Metafóricamente, se podría decir que la memoria central es el “escritorio de trabajo” de la
computadora, y que los dispositivos de almacenamiento son sus ”bibliotecas” o repositorios de programas e
información.
Un procesador o unidad central de procesamiento (UCP) (en inglés CPU), es el dispositivo que procesa
información, llevando a cabo todos los cálculos aritméticos y tomando decisiones básicas con base en los
valores de la información y conforme a las órdenes de un programa. La UCP es, de hecho, el “cerebro” de la
computadora.
Los dispositivos de salida envían información al exterior de la computadora. Los dispositivos más comunes
son monitores e impresoras. Los monitores, también llamados monitores de vídeo o pantallas de vídeo
(VDT: video display terminal) no sólo sirven para que la computadora exhiba información al mundo exterior
sino también para que el usuario vea los caracteres que está ingresando a la computadora al momento de
teclearlos; en ambos casos, se dice que la información presentada es de “copia efímera” (soft copy), puesto
que sólo puede visualizarse mientras se encuentre representada en la pantalla, y se los clasifica como
dispositivos de copia efímera. Los monitores pueden ser de tubos de rayos catódicos (CRT: cathode ray tube)
o de pantalla plana de cristal líquido (LCD: liquid crystal display). Las impresoras permiten obtener copias
físicas en papel de cualquier información, por lo que la información que producen es de “copia permanente”
(hard copy); así es que desde el punto de vista de la información que presentan, las impresoras se clasifican
como dispositivos de “copia permanente”. Hay muchas variedades de impresoras, pero todas corresponden a
dos grupos básicos: de impacto (de líneas o caracteres, y de matriz de puntos) y de no impacto (láser y de
inyección de tinta).
{SECCIÓN DECLARATIVA}
{Definición del Objetivo}
{Definición de Recursos}
{SECCIÓN ALGORÍTMICA}
{Desarrollo de la Solución}
{Prólogo}
{Resolución}
{Epílogo}
Cuando se escribe un programa en Pascal o en cualquier otro lenguaje de programación, nunca se piensa para
qué computadora se está escribiendo ni en detalles arquitectónicos, porque el programa podría ejecutarse en
cualquier computadora que tenga el ambiente de desarrollo Pascal. Los programas escritos en lenguajes de
programación de alto nivel tienen la apreciable característica de ser portables de una máquina a otra, porque
los ambientes de desarrollo de los lenguajes tienen un traductor de programas, que traduce programas
escritos en el lenguaje (archivos con extensión PAS, en el caso de Pascal) a programas con órdenes propias
de la computadora en la que está el ambiente (archivos con extensión EXE, en cualquier caso). Por eso, las
empresas que venden los ambientes de desarrollo (como Borland, que desarrolló al IDE Turbo Pascal),
tienen versiones de los mismos ambientes para distintas máquinas, de manera que cualquier programa
funcione de igual manera en cualquier máquina.
Instrucciones Comentarios
LR 1,S1 Cargar en el registro 1 el contenido de la celda en donde se
encuentra el primer sumando (LR: load record)
LR 2,S2 Cargar en el registro 2 el contenido de la celda en donde se encuentra el
segundo sumando
LI 0,00 Cargar en el registro 0 el valor 00 (LI: load inmediate)
BR 1,EQ2 Si el contenido del primer registro es igual al del registro 0, seguir
por la instrucción 9 (BR: branch)
BR 2,EQ1 Si el contenido del segundo registro es igual al del registro 0,
seguir por la instrucción 11
AI 3,1,2 Sumar los contenidos de los registros 1 y 2 y dejar el resultado en
el registro 3 (AI: add integers)
ST 3,RS Almacenar el contenido del registro 3 en la celda destinada para el
resultado de la suma
BR 0,FIN Seguir por la instrucción 12
EQ2 ST 2,RS Almacenar el contenido del registro 2 en la celda destinada para el
resultado de la suma
BR 0,FIN Seguir por la instrucción 12
EQ1 ST 1,RS Almacenar el contenido del registro 1 en la celda destinada para el
resultado de la suma
FIN END Parar
S1 15 Celda con el primer sumando en complemento a dos (p.e. 15, que
en el programa se especifica en decimal)
S2 -7 Celda con el segundo sumando en complemento a dos (p.e. -7,
igual que antes)
RS 8 Celda para el resultado de la suma en complemento a dos
(suponiendo que ya se ejecutó el programa)
Lic. Servetto – Ing. Jiménez Rey 75.01 Computación
Guía 1 Página 10 de 21
El programa en lenguaje ensamblador es el que figura en las columnas “Instrucciones”. En la primera
columna de Instrucciones se designan con nombres alusivos a las direcciones de celdas de instrucciones y
datos con el objeto de referenciarlas desde las instrucciones propiamente dichas. En la segunda columna se
especifican las instrucciones con un código mnemotécnico.
La programación en lenguajes ensambladores se considera de bajo nivel; es decir, requiere que los
programadores piensen a nivel de la máquina para la cual programan e incluyan gran cantidad de detalles en
cada programa. La programación en lenguajes ensambladores es un proceso repetitivo, tedioso y propenso a
errores. Peor aún, cada lenguaje de máquina distinto tiene lenguajes ensambladores que le corresponden, por
lo que si un programa escrito en lenguaje ensamblador se quiere ejecutar en una máquina de otra marca, debe
rescribirse totalmente en el lenguaje ensamblador de la otra máquina. Muchos programadores todavía usan
lenguaje ensamblador para escribir parte de los juegos de vídeo y otras aplicaciones en las cuales son
fundamentales el tiempo de respuesta de los programas y la comunicación directa con el hardware. No
obstante, en la actualidad la mayoría de los programadores piensa y escribe en un nivel más alto.
Los lenguajes de alto nivel, que están en un punto intermedio entre los lenguajes humanos y los precisos y
acotadísimos lenguajes de máquina, se crearon a principios de la década del 50 para simplificar y optimizar
el proceso de programación. Con los lenguajes como FORTRAN (FORmula TRANslation – diseñado para
el cálculo matemático) y COBOL (COmmon Bussiness Oriented Language – diseñado para aplicaciones de
tipo comercial y administrativas) es posible que los científicos, ingenieros y empresarios escriban programas
con terminología y notación familiares, en lugar de las tan elementales instrucciones de máquina. Los
programadores de hoy disponen de cientos de lenguajes de alto nivel para elegir.
Los lenguajes de alto nivel ocultan al programador las características arquitectónicas y los detalles de
funcionamiento de las máquinas, posibilitándoles que se abstraigan de usar registros y referenciar
direcciones de memoria. Así es más fácil que el programador se concentre en los problemas a resolver
exclusivamente, cuando desarrolla las soluciones en pseudocódigo, y ya no debe resolver el problema
adicional de traducir su solución en términos de las instrucciones que la máquina es capaz de ejecutar: para
codificar sus programas apenas hace un refinamiento más del pseudocódigo, escribiendo directamente en el
lenguaje de programación de alto nivel.
Los programas codificados en lenguajes de alto nivel tienen la ventaja de ser transportables entre máquinas.
Un programa escrito en Pascal puede traducirse y ejecutarse en cualquier computadora que tenga el
programa traductor de Pascal. Como hay traductores de Pascal para todo tipo de computadoras, un programa
en Pascal puede traducirse y ejecutarse sin modificaciones casi en cualquier máquina.
Traducción e Interpretación
Para traducir un programa escrito en un lenguaje de alto nivel a lenguaje de máquina se requiere un
programa de traducción, que puede funcionar:
▪ como intérprete, traduciendo y haciendo ejecutar cada enunciado en forma individual, así como un
intérprete en un congreso internacional traduce un discurso del inglés al español, o
▪ como un compilador, traduciendo todo el programa al lenguaje de máquina de manera que pueda
ejecutarse directamente en la máquina cuantas veces se desee.
La mayoría de los traductores son compiladores, ya que los programas compilados tienden a ejecutarse con
mayor rapidez que los programas interpretados: los compilados ya están traducidos al lenguaje de máquina y
los interpretados requieren que se traduzca cada orden o enunciado cada vez que se interprete el programa.
Los paquetes de software de compilación son mucho más que compiladores: son ambientes de
programación integrados (IDE: Integrated Development Environments) que cuentan con un editor de
textos, un compilador, un depurador (debugger) para simplificar el proceso de localización y corrección de
errores y varias funciones utilitarias más.
El proceso de compilación de un programa se divide en tres etapas: análisis léxico, análisis sintáctico y
generación de código. El compilador toma como fuente de datos un archivo de texto en el que se encuentra
escrito el programa en lenguaje de alto nivel, usualmente llamado programa o módulo fuente, y antes de
convertirlo a instrucciones de máquina en ceros y unos le efectúa dos controles sucesivos: el análisis léxico,
para reconocer y reducir en la sucesión de símbolos que es el programa fuente los componentes léxicos
(nombres de sentencias, nombres de variables y constantes, nombres de subprogramas, valores literales, etc.),
y el análisis sintáctico, para validar la construcción de enunciados admitidos por el lenguaje; luego de
superadas satisfactoriamente estas dos etapas, entonces sí produce como resultado un archivo con las
instrucciones de máquina correspondientes al programa fuente, llamado programa o módulo objeto.
Lic. Servetto – Ing. Jiménez Rey 75.01 Computación
Guía 1 Página 11 de 21
Los programas complejos se suelen descomponer en muchos subprogramas, y cuando el número de éstos es
muy grande no resulta práctico que estén todos en un mismo archivo o programa fuente sino en varios
archivos que se traducen por separado. También es común emplear subprogramas estándares que vienen ya
traducidos por los paquetes de software de programación, por ejemplo para cálculos matemáticos. Entonces,
un programa puede comprender varios módulos fuente traducidos por separado en sendos módulos objeto.
Para que pueda ejecutarse un programa de tales características es necesario que todos sus objetos estén
enlazados adecuadamente, así es que el proceso de traducción debe completarse mediante el empleo de un
programa hermano al de compilación llamado enlazador o linker, que tomando como datos de entrada los
archivos o módulos objeto de un programa, produce un archivo único ejecutable denominado módulo o
programa de carga. En Pascal, el tipo o extensión de los programas o módulos fuente es PAS, y para
cualquier lenguaje los tipos o extensiones de los programas objeto y de carga son OBJ y EXE
respectivamente.
Paradigmas de Programación
Se ha visto que existen diversas formas de representación de algoritmos, basadas fundamentalmente en quién
o qué será el ejecutor del algoritmo y en la naturaleza de las acciones a ejecutar. Como es interés de la
informática el desarrollo de algoritmos para que los ejecute una computadora, la representación debe ser en
forma de programas.
Existen distintas convenciones para especificar programas, las cuales se distinguen por la forma de
especificación en primer lugar, y luego por el lenguaje. Las formas de especificar programas o paradigmas
de programación hasta la actualidad, con algunos de sus lenguajes, han sido:
▪ La programación imperativa (como enunciación de órdenes): FORTRAN, COBOL, Algol, Ada, Pascal
▪ La programación funcional (como composición de funciones): LISP
▪ La programación lógica (como cálculo de predicados lógicos): PROLOG
▪ La programación orientada a objetos (como interacción entre subprogramas denominados objetos, que
encierran datos y algoritmos para manipularlos, a través de mensajes): SMALLTALK, EIFFEL
▪ La programación visual u orientada a eventos (basada normalmente en la programación orientada a
objetos pero especificando las acciones o interacciones entre objetos en términos del diseño gráfico de
interfaces con el usuario y asociándolas con eventos en general relacionados con la digitación de teclas o
movimientos del ratón): VISUAL BASIC, DELPHI, VISUAL C++, JAVA.
COMPUTACIÓN Guía Nº 1
Práctica
La sección declarativa de un programa en Pascal comienza con la palabra clave program, seguida del nombre
de fantasía con que se quiera designar al programa.
{SECCIÓN DECLARATIVA}
{Definición del Objetivo}
program <nombre del programa>* ;
*se usarán los paréntesis angulares para denotar que en ese punto del programa, el programador debe escribir un
identificador elegido por él.
Los recursos en la sección declarativa del programa deben definirse agrupados por clase. En general, primero
se declaran las constantes, precedidas por la palabra clave const, y luego las variables, precedidas por la
palabra clave var. En principio, se usarán constantes y variables con dominios enteros, reales y de caracteres,
que en lenguaje Pascal se denominan Integer, Real y Char, respectivamente.
Para definir constantes, se debe especificar nombre y valor separados por el signo igual (=), y para definir
variables, se debe especificar nombre y dominio separados por dos puntos (:).
{SECCIÓN DECLARATIVA}
{Definición del Objetivo}
Program <nombre del programa> ;
{Definición de Recursos}
Const
<nombre de la constante> = <valor> ;
Var
<nombre de la variable> : <dominio> ; {comentario}**
** es necesario incluir comentarios entre llaves que describan el significado de cada una de las variables utilizadas en el
programa
Si se debe definir más de una variable con el mismo dominio, se pueden especificar todos sus nombres
separados por una coma. Por ejemplo:
Var
radio, superficie: Real ;
{representan el radio y la superficie del círculo, respectivamente}
Para escribir valores reales, se debe separar con un punto la parte entera de la parte fraccionaria. Por ejemplo:
Const
Pi = 3.141592653589 ;
Para que la máquina pueda distinguir el valor de un carácter de un nombre de constante o variable, los
valores constantes de caracteres se deben delimitar con una comilla simple; así, por ejemplo, en un programa
el carácter e (como valor de una constante), se distingue del nombre de una constante llamada de igual
forma, denotándolo ‘e’.
Const
<nombre de la constante> = ‘e’ ;
e = <valor> ;
Los nombres de programas, constantes y variables (en general, de cualquier recurso) denominados
identificadores, deben comenzar indefectiblemente con una letra, y pueden incluir letras (excepto ñ y
vocales acentuadas), dígitos y el carácter de subrayado. Los identificadores utilizados en un programa deben
Estructuras de Secuenciación
La sección algorítmica de un programa Pascal constituye el cuerpo principal del programa y comienza con la
palabra clave begin y termina con la palabra clave end y el punto final (.).
Lic. Servetto – Ing. Jiménez Rey 75.01 Computación
Guía 1 Página 14 de 21
Para desarrollar la solución de un problema mediante la escritura de un programa, en la sección algorítmica
del programa, comúnmente se emplean:
• enunciados o sentencias de asignación, o
• enunciados o sentencias de obtención de datos desde el teclado (operación de entrada o de lectura),
para instanciar (darle valor a) una variable, y
• enunciados o sentencias para la exhibición de resultados en pantalla (operación de salida o de
escritura).
Estos enunciados se clasifican como enunciados, sentencias o estructuras de control de secuenciación
porque cuando aparecen uno después del otro en la sección algorítmica del programa deben ejecutarse
siempre una vez en el orden de secuencia en que se presenten.
Enunciados de Asignación
Para asignar (almacenar) directamente un valor o el resultado de una expresión aritmética a una variable, se
utiliza una sentencia o enunciado de asignación y se escribe el nombre de la variable y el valor o expresión,
separados por los caracteres correspondientes a dos puntos e igual consecutivos (:=).
Por ejemplo:
superficie := Pi * radio * radio;
Esta sentencia de asignación permite almacenar en la posición de memoria correspondiente a la variable
denominada superficie (a la izquierda del símbolo de asignación) el valor obtenido como resultado del
cálculo de la expresión aritmética a la derecha del símbolo de asignación. Tanto la variable superficie como
el resultado de la evaluación de la expresión aritmética deben pertenecer al mismo dominio de valores.
Enunciados de Lectura
Para hacerle corresponder a una variable un valor que se obtiene desde el teclado, se emplean los enunciados
Read (leer) y ReadLn (leer línea), con el nombre de la variable encerrado entre paréntesis como argumento.
Por ejemplo:
Read ( radio );
ReadLn ( radio );
La diferencia entre ambos es que el primero, al ejecutarse, no detiene la ejecución del programa ni requiere la
pulsación de la tecla Enter (↵) para formalizar el ingreso de un valor, mientras que el segundo sí. Cuando se
ingresa uno o más valores desde el teclado en respuesta a la ejecución de un enunciado ReadLn (que puede
incluir uno o más enunciados Read diferidos), sus representaciones aparecen reproducidas en la pantalla y
posteriormente el cursor (indicador de posición actual en pantalla, o en inglés: current position indicator) se
ubica al comienzo de la próxima línea de la pantalla. Por ejemplo:
A solicitud del programa, el usuario ingresa como valor del radio 7.5 y el valor tipeado se visualiza en
pantalla
7. 5
Cuando el usuario pulsa la tecla Enter, el efecto de la ejecución del siguiente enunciado del programa,
ReadLn ( radio ) ; es que a la variable radio se le asocia el valor 7.5 tipeado y el cursor se ubica al principio
de la siguiente línea de la pantalla, visualizándose
7. 5
_
Se puede ingresar valores para más de una variable usando un mismo enunciado, tan sólo separando los
nombres de las variables con una coma, y los valores a ingresar por teclado con uno o más blancos (barra
espaciadora).
Por ejemplo:
Si se desea obtener desde el teclado una serie de valores reales mediante las sentencias
ReadLn(valor1, valor2);
ReadLn(valor3);
Y el usuario tipea
Lic. Servetto – Ing. Jiménez Rey 75.01 Computación
Guía 1 Página 15 de 21
7.5 4.3 6.8 9.3 ↵
3.7 ↵
La computadora lee el valor 7.5 y lo almacena en la posición de memoria asociada a la variable valor1, luego
lee el valor 4.3 y lo almacena en la posición de memoria asociada a la variable valor2; como se trata de una
sentencia ReadLn ignora los siguientes valores de la línea , es decir, 6.8 y 9.3 y avanza a la siguiente línea,
ejecuta la siguiente sentencia y almacena el valor 3.7 en la posición de memoria asociada a la variable
valor3. Por lo tanto, el resultado es:
Valor1 = 7.5
Valor2 = 4.3
Valor3 = 3.7
Pero si se desea obtener desde el teclado la misma serie de valores reales mediante las sentencias
Read(valor1, valor2);
ReadLn(valor3);
la computadora lee el valor 7.5 y lo almacena en la posición de memoria asociada a la variable valor1, luego
lee el valor 4.3 y lo almacena en la posición de memoria asociada a la variable valor2; como se trata de una
sentencia Read no avanza a la siguiente línea y ejecuta la siguiente sentencia, por lo cual se almacena el valor
6.8 en la posición de memoria asociada a la variable valor3. Por lo tanto, el resultado es:
Valor1 = 7.5
Valor2 = 4.3
Valor3 = 6.8
Se puede comprender mediante el análisis anterior la diferencia fundamental entre las sentencias Read y
ReadLn.
Si se desea diferir el ingreso de varios valores hasta un punto del programa en el que no se requiere el
ingreso de ningún valor adicional, se puede usar el enunciado ReadLn sin ningún argumento, es decir,
ReadLn ;
para detener la ejecución del programa, es decir, para provocar una interrupción o generar una pausa en la
ejecución del programa.
Enunciados de Escritura
Para exhibir valores o resultados de expresiones aritméticas en la pantalla, se emplean los enunciados Write
(escribir) y WriteLn (escribir línea), con el valor constante, nombre de constante o variable, o expresión
aritmética encerrado entre paréntesis como argumento.
Por ejemplo:
Write (Pi),
WriteLn(superficie);
WriteLn(Pi * radio * radio);
La diferencia entre ambos enunciados, Write y WriteLn, es que si se usa el primero, luego de exhibido el
valor o valores involucrados, el cursor queda al final del último carácter exhibido; en cambio, si se usa el
segundo, el cursor se ubica al comienzo de la siguiente línea de la pantalla de salida o ventana de impresión.
Por ejemplo, si el valor de la variable superficie fuera:
Superficie = 24
Y se ejecuta Write (superficie), se visualizaría en pantalla
24_
En cambio, si se ejecuta WriteLn (superficie), se visualizaría en pantalla
24
_
Si se desea que el cursor se desplace al comienzo de la próxima línea de la pantalla o ventana, se puede usar
el enunciado WriteLn sin ningún argumento. El efecto de la ejecución de este enunciado es dejar una línea en
blanco en la pantalla de salida.
Un inconveniente o peculiaridad de los enunciados de exhibición de valores, es que en caso de que los
valores sean reales, su representación en pantalla resultará en notación científica; por ejemplo, el valor
2079.45 se exhibiría aproximadamente como 2.07945e003. Para evitar esto y editar la escritura de valores
reales, a continuación del nombre de constante o variable cuyo valor se desea exhibir, o a continuación del
valor constante o expresión encerrado entre paréntesis a exhibir, se puede especificar la cantidad de
caracteres con que representar el valor y la cantidad de dígitos decimales a emplear delimitadas por dos
puntos.
Así, para que el valor de una variable llamada radio resulte exhibido con diez caracteres y cinco decimales
debería escribirse Write ( radio:10:5 ) y si el radio resultara igual a 12.45673976 se visualizaría por pantalla
--12.45673
donde los guiones (--) representan espacios en blanco.
Si los valores a exhibir no completaren la cantidad de espacios especificada, quedarían justificados a derecha
(con blancos a la izquierda hasta completar la cantidad de caracteres estipulada).
Y para que la superficie de un círculo con radio representado por la misma variable se exhiba de la misma
forma debería escribirse Write ( (radio*radio*Pi):10:5 ).
Como los enunciados de ingreso de valores desde teclado no tienen otro efecto que tomar propiamente los
datos, es necesario advertir al usuario lo que el programa espera antes de usar uno de estos enunciados. Por
tanto, es norma que los enunciados de lectura siempre estén precedidos por otros de escritura, especificando
al usuario qué dato o datos debe ingresar.
Por ejemplo:
Write ( ‘Ingrese el radio del círculo: ’ );
ReadLn ( radio );
{SECCIÓN DECLARATIVA}
{Definición del Objetivo}
Program SuperficieCirculo;
{notar que el identificador elegido como nombre del programa no contiene vocales acentuadas}
{Programa que calcula la superficie de un círculo}
{notar que los comentarios pueden contener palabras acentuadas}
{Autores: Lic. Servetto - Ing. Jiménez Rey}
{Versión: 1.0. Marzo de 2007.}
{Definición de Recursos}
Uses
Crt;
Const
Pi = 3.1415926589 ;
Var
radio, superficie: Real;
{representan el radio y la superficie del círculo, respectivamente}
{SECCIÓN ALGORÍTMICA}
{Desarrollo de la Solución}
Begin
{Prólogo}
{Limpieza de Pantalla}
ClrScr;
{Presentación del programa}
WriteLn ( ‘CÁLCULO DE LA SUPERFICIE DE UN CÍRCULO’ );
{al ejecutarse esta sentencia se escribe en la primera línea de la pantalla de salida la
secuencia de caracteres delimitada por las comillas simples y el cursor se posiciona al
principio de la siguiente línea}
WriteLn; {el cursor salta una línea en la pantalla de salida}
{Obtención de valores desde el teclado}
{Solicitud ingreso del valor del radio por pantalla}
Write ( ‘Ingrese el radio del círculo: ’ );
{se reproduce en pantalla la secuencia de caracteres delimitada por las comillas
simples y el valor tipeado por el usuario}
{Asignación del valor ingresado por teclado a la variable radio}
ReadLn ( radio );
{se asocia a la variable radio el valor tipeado por el usuario y el cursor se
posiciona al principio de la siguiente línea de la pantalla de salida}
{Resolución}
{Cálculo de la superficie del círculo}
superficie := Pi * radio * radio;
{se asigna a la variable superficie (a la izquierda del símbolo de asignación) el valor
calculado a través de la expresión aritmética (a la derecha del símbolo de asignación}
Resultado de la Ejecución del Programa (Visualización en la pantalla de salida de Pascal para una
ejecución del programa para valor del radio = 7.50)
CÁLCULO DE LA SUPERFICIE DE UN CÍRCULO
{línea en blanco}
Ingrese el radio del círculo: 7.50
{línea en blanco}
La superficie es 23.56194
{línea en blanco}
Fin del Programa.
_
{el cursor queda titilando en la pantalla de salida en espera que el usuario pulse la tecla Enter ; este efecto permite al
usuario leer el resultado que devuelve el programa antes de que Pascal vuelva a presentarle la pantalla de edición}
Anexos
Relacionales o de Comparación
La precisión de los números depende en cada máquina de la longitud en bits de sus celdas de memoria.
Como los lenguajes de programación no pueden estar condicionados por la arquitectura de las máquinas
donde se ejecuten sus programas, proveen representaciones propias y múltiples para cada tipo de dato
numérico.
Tipos Ordinales
Con excepción de los tipos reales, todos los tipos simples o básicos de Pascal son ordinales. Los valores de
tipos ordinales son contables y ordenados, es decir, se pueden contar uno por uno en un orden específico.
Los tipos ordinales son:
El tipo Boolean merece una mención especial, ya que admite sólo dos valores: 0 y 1, que en Pascal se
representan por las constantes predefinidas False y True, respectivamente.
Los tipos reales en Pascal se basan en la representación con punto flotante, y son:
63
El tipo Comp es un entero de 64 bits. Soporta sólo valores enteros en el rango (-2 + 1) .. (2 63 - 1).