Luis Joyanes Aguilar
March 27, 2017 | Author: delducam | Category: N/A
Short Description
Download Luis Joyanes Aguilar...
Description
~~ -110· ~
C.L. TruiiUO
A mi hija Victoria 1 su iniciación a los estudi, escolares de Informática
(
METODOLOGÍA DE LA PROGRAMACiÓN
Diagramas de flujo, algoritmos y programación estructurada Prohibida la reproducción total o parcial de esta obra,
por cualquier medio, sin autorización escrita del editor.
DERECHOS RESERVADOS © 1988, respecto a la primera edición en español por McGRAW-HILL/INTERAMERICANA [)f MEXICO, S.A. DE C.V. Atlacomulco 499-501, Frace. Industrial San Andrés Atoto 53500. Naucalpan de Juárez, Edo. de México Miembro de le Cámara Nacional de la Industria Editorial, Reg. Núm. 1890
ISBN 968-422·192·4 5678901234
( CAL·87
Impreso en México
Esta obra se terminó de imprimir en marzo de 1990 en Editorial Calypso, SA Oculistas No. 43 Col. Sifón Delegación Iztapalapa 09400 México, D.F. Se tiraron 1000 ejemplares
9123456780 Printed in Mexico
f/ 'f
{
I I ¡ !
CONTENIDO
PROLOGO.............................................
xi
1. ALGORITMOS Y PROGRAMAS ...... :.......................
1
1.1. Concepto y descripción de un proceso 1.2. Algoritmos "......... 1.2.1. Características de los algoritmos. . . . . . . . . . .. . . . . . . . . . . . 1.3. Datos, tipos de datos y operaciones primitivas 1.3.1. Datos numéricos 1.3.2. Datos no numéricos 1.4. Constantes, variables y expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1. Constantes 1.4.2. Variables........................................... ;.................... 1.4.3. Expresiones 1.5. Los programas '. . . . . . . . . . . . . .. . .
1 .2 3 3 4 5 6 6 7 7 9
2. DIAGRAMAS DE FLUJO .. . .. .. .. .. .. .. .. .. .. .. . . .. .. . .. .. . ..
11
2.1. Introducción ,. 'l' • • • • • • • 2.2. Diagramas de flujo \.:....... 2.3. Símbolos utilizados en los diagramas :......... 2.3.1. Diagramas de flujo de sistema 2.3.2. Diagramas de flujo de detalles/ordinogramas . . . . . . . . . . . . 2.3.3. Plantillas y hojas de codificación 2.4. Diagramas de flujo estructurados. . . . . . . . . . . . . . . . . . . . . . . . . . . .
11 14 15 15 20 29 31 vii
PROLOGO
xii
xlii
PROLOGO
ya se ha comentado, a los estudiantes o estudiosos que comienzan la programación. Persigue como objetivo fundamental el aprendizaje en las técnicas de programación clásicas y modernas; pretende servir a personas sin conocimientos previos de programación o que bien poseyendo conocimientos de algún lenguaje deseen afianzarlos con técnicas de programación y diferencias esenciales con otros lenguajes. El libro está concebido para el estudio independientemente de cualquier lenguaje de programación; sin embargo, nuestra experiencia nos dice que el alumno/lector se siente más motivado si se le muestran las técnicas básicas y sus herramientas equivalentes en lenguajes de alto nivel, de modo simultáneo. Esa es la razón por la cual, a lo largo del libro, se explican las estructuras fundamentales junto con su codificación en los lenguajes de programación más populares: BASIC, Pascal y COBOL. Esta obra sigue el programa oficial de la asignatura "Metodología de la Programación" de los Cursos de Informática de la Facultad de Ciencias Políticas y Sociología "León XIII" de la UPS (Universidad Pontificia de Salamanca), pero creemos será válida para cualquier curso de introducción a la programación en nivel bachiller, formación profesional, universitario o simplemente cursos de formación, siempre que se tomen de su contenido las partes que más puedan afectar al nivel educativo del alumno. Esta consideración la realizamos en base a su contenido, dado que se parte de conceptos elementales hasta llegar a los temas fundamentáles de la programación estructurada y modular, base de los lenguajes de programación clásicos y modernos. Conceptos como diagramas de flujo, algoritmos, estructuras de datos, tablas de decisión y las mencionadas técnicas de programación estructurada y modular constituyen el soporte sobre el que se asienta el libro. Niklaus Wirth, padre del lenguaje Pascal, tituló a una de sus obras más famosas -por otra parte, imprescindible como texto u obra de consulta en cualquier nivel de pro'gramación, esencialmente universitario- Algoritmos + Estructuras de datos = Programas (título de la traducción española), tal vez, pensamos, queriéndonos indicar a sus lectores y alumnos, la importancia de los conceptos algoritmo y estructura de datos, sin cuya existencia sería imposible construir un programa. Por ello, siguiendo las directrices del profesor Wirth, hemos concebido la obra pensando en algoritmos y estructuras de datos junto con su soporte en pseudocódigo, pero, sin olvidar las técnicas clásicas como son los diagramas de flujo y tablas de decisión, a las que se le han dedicado capítulos completos que facilitan su comprensión.
CONTENIDO La obra está estructurada en siete capítulos, que siguen un nivel creciente de dificultad, pero utilizando la técnica pedagógica de repetición de los conceptos fundamentales a lo largo de todo el texto, de modo que se puedan asimilar en el tiempo más breve posible, a la par que permitir el estudio de cualquier capítulo sin necesidad estricta de lectura del capítulo anterior y así facititar, especialmente
al profesor, seguir el método pedagógico que considere más oportuno -algunos· compañeros del Area de Lenguajes de la Facultad, me han sugerido que según el tipo de alumnos, conocimientos o lenguaje próximo a estudiar, podría ser más provechoso no seguir en algunos puntos el contenido por capítulos del libro; evidentemente estoy de acuerdo con ellos, siempre que se trate de alumnos o lectores que ya posean conocimientos de algún lenguaje o de programación en sí. El tiempo estimado de duración para un máximo aprovechamiento en cursos escolares sería un cuatrimestre. En los casos de cursos intensivos, pensamos podría impartirse en períodos de 20 ó 30 horas lectivas, siempre que se iniciase inmediatamente después del estudio del lenguaje. El Capítulo 1 introduce al lector en el concepto de algoritmos y programas, resaltando los términos elementales de acción, proceso, datos y expresiones. El Capítulo 2 se dedica a las herramientas clásicas de programación: diagramas de flujo, pseudocódigos y diagramas N-S, dedicando especial atención a los diagramas de flujo, herramienta que todos los estudiantes hemos estudiado y utilizado. Así como los Capítulos 1 y 2 son introductorios y sus conceptos básicos se repetirán y ampliarán en el resto de la obra, el Capítulo 3 describe la estructura general de un programa, y con el Capítulo 4 se comienza, en realidad, a profundizar en la programación. Los conceptos de programa, lenguajes de programación: alto nivel/bajo nivel, compiladores/intérpretes, instrucciones, operadores, tipos. de programa, etc., se describen en este capítulo. El Capítulo 4 se dedica a fijar las ideas fundamentales de las técnicas de programación, volcando todo lo aprendido en los Capítulos 1 a 3. Las técnicas esenciales de bucles, iteraciones, contadores, interruptores, totalizadores, bifurcaciones, subrutinas, subprogramas, funciones, procedimientos... se analizan con detalle y gran número de ejemplos y aplicaciones. Basado en el teorema de la estructura de Jacopini, se establecen las estructuras básicas: secuencial, selectiva, iterativa junto con los pseudocódigos en inglés y español. El lector aprenderá las estructuras fundamentales IF-THEN-ELSE-ENDIF, DOWHILE, DOUNTIL (o sus equivalentes WHILE, REPEAT, UNTIL), CASE, etc. El Capítulo 5, tras el estudio de diagramas de flujo y algoritmos, se dedica a la estructura de datos, parte básica en el tratamiento de la información: listas, tablas, matrices, pilas, colas, árboles, etc. El Capítulo 6 estudia las Tablas de Decisión, herramienta clásica en programación, que si bien en algunos campos puede haber perdido influencia, sigue siendo una herramienta válida sobre todo en la fase de definición y análisis del problema y como paso previo a la codificación del programa. El Capítulo 7 recoge las nociones de programación estructurada y modular que si bien los conceptos elementales ya han sido tratados en los capítulos anteriores, en éste se recogerán las reglas específicas para la construcción de programas estructurados y modularizados que permitirán una fácil puesta a punto y sobre todo un mantenimiento eficaz durante la vida útil de dichos programas. -.'
.,
xiv
PROLOGO
AGRADECIMIENTOS Muchas personas me han alentado a escribir esta obra y citarlas a todas me llevaría con toda seguridad a un olvido imperdonable. Sin embargo, es justo reconocer el apoyo y aliento que me han prestado todos mis compañeros del Area de Lenguajes de la Facultad de Ciencias Políticas y Sociología "León XIII" de Madrid, junto con sus críticas y consejos. Aunque como antes dije la lista de agradecimientos sería larga y no querría arriesgarme a olvidos que serían para mí muy lamentables, quiero hacer una excepción con tres compañeros que han leído toda la obra, me han corregido erorres y erratas y me han dado sabios consejos. Son los profesores del Area de Lenguajes: Herácleo Hurtado Muñoz, Juan Corrochano del Pino y Juan Martínez Pirla. Deseo expresar mi reconocimiento a los órganos institucionales de la Facultad que apoyaron desde su concepción la obra y principalmente la asignatura: Ordenación, Academia, Gerencia y Jefatura de Estudios y cómo no la ya mencionada Area de Lenguajes,.que, además, pondrá en marcha la obra y confio criticará constructivamente la obra para mayor beneficio de los alumnos.
-;~
CAPITULO 1
ALGORITMOS Y PROGRAMAS
EPILOGO El objetivo fundamental de la obra es facilitar la introducción a la programación y a sus técnicas a los alumnos y lectores que sigan y me honren con su lectura; si lo conseguimos -al menos en alguna medida- las numerosas horas de estudio y trabajo a lo largo de todo el verano del 86 y el comienzo del curso escolar 86/87 estarán sobradamente compensadas.
El autor. Madrid, noviembre de 1986.
1.1. CONCEPTO Y DESCRIPCION DE UN PROCESO Una acción es un suceso o acontecimiento producido por un actor (ejecutante). Tiene la característica de una duración limitada y produce un resultado bien definido y previsto. El tener una duración limitada en el tiempo implica la existencia de un instante inicial de la acción (t) y un instante final (t). Para poder reconocer el resultado del sistema debe estar provisto de indicadores que tomen valores diferentes. El valor de estos indicadores se denomina iriformación. El conjunto de los valores de los distintos indicadores en un instante dado (t) del desarrollO del acontecimiento se denomina estado en el instante t del sistema observado. El resultado es el estado del sistema en el instante (n' El estado del sistema ert t o define los datos de la acción. .
, Proceso es una acción que se puede descomponer en otras más simples, o
también conjunto de fenómenos organizados en el tiempo y concebidos como activos. Se puede ~nsiderar un proceso como un conjunto de acciones elementales que forman un acontecimiento. Procesador es el elemento capaz de ejecutar un determinado proceso de trabajo. Los procesos pueden ser: secuenciales y paralelos.· Un proceso es secuencial si una acción del mismo no puede empezar antes que la acción en curso esté completamente terminada; en otras palabras: dos acciones no se ejecutan simultáneamente, sino en un orden secuencial. Un proceso es paralelo si se ejecutan simultáneamente dos o más acciones. 1
2
METODOLOGIA DE LA PROGRAMACION
A lo largo del libro sólo trataremos los procesos secuenciales que en un instante dado tan solo pueden ejecutar una única acción. Un ejemplo típico de proceso es: Un cocinero elabora un plato de cocina (por ejemplo, un estofado de carne para 6 personas): Las acciones a seguir son: calentar el aceite, freír la carne, poner condimentos, etc. U n ejemplo de proceso secuencial es: Un estudiante calcula el producto de los números naturales m=25 y n=36.
La descripción del proceso necesitará: 1. La lista de datos. 2. El conjunto de acciones, orden de éstas y condiciones que determinan la ejecución de una u otra acción. Los procesos en los que estamos interesados son aquellos que se pueden repetir y en los cuales el resultado no depende del ejecutor (siempre que éste se atenga perfectamente al punto 2 anterior). El proceso nos ha de servir para resolver todos los problemas de cierto tipo (todos los que resultan de tomar m y n como números naturales).
1.2. ALGORITMOS U n algoritmo es una serie de operaciones detalladas y no ambiguas, a ejecutar paso a paso, y que conducen a la resolución de un problema. En otras palabras,
;un algoritmo es un conjunto de reglas para resolver una cierta clase de problema una forma de describir la solución de un problema)Una receta de cocina para
¡o
hacer «cordero asado» es un algoritmo. Un algoritmo es el medio por el que se explica cómo puede resolverse un problema, mediante aproximaciones paso a paso. Se puede formular de muchas formas, siempre y cuando se realice de modo no ambiguo. Para describir algoritmos de computadoras se han diseñado lenguajes de programación. Cada una de las acciones de las que consta un algoritmo se llamará sentencia y éstas deben ser escritas en términos de cierto lenguaje comprensible para el ejecutor (máquina), que es el lenguaje de programacion. El conjunto formado por la representación de datos utilizada y el algoritmo en sí, se conoce usualmente con el nombre de programa. En esencia, un programa es la descripción del proceso en un cierto lenguaje, o dicho de otra manera: la secuencia de acciones entendibles por la computadora conducen a realizar una tarea determinada y el correcto tratamiento de unos datos. Recordemos la d~finición de algoritmo dada por el profesor Niklaus Wirth, padre del lenguaje Pascal: Un algoritmo o programa de computadora consiste en dos partes esenciales: una descripción de acciones que deben ser ejecutadas y una descripción de los datos que son manipulados por esas acciones. Las acciones se describen mediante las llamadas sentencias y los datos mediante declara-
,.
ALGÓRITMOS y PROGRAMAS
3
ciones y definiciones (PASCAL. User Manual And Report. Springer-Verlang. New York Inc., 1975). Los programas constan de una serie de sentencias (líneas de información con unas determinadas reglas de sintaxis). Estas partes elementales de un programa que son las sentencias se componen a su vez de instrucciones que son las acciones concretas que debe realizar la máquina. Con frecuencia las palabras sentencia e instrucciones se confunden o consideran sinónimas. Nosotros preferimos utilizar sentencia para lenguajes de alto nivel -próximos al usuario- e instrucciones para lenguajes de bajo nivel y máquina -próximos a la máquina.
1.2.1. Características de los algoritmos Se observa, normalmente, que el número de operaciones que realiza un algoritmo (o programa) no se conocen de antemano, aunque serájinito siempre que los datos sean adecuados. Por consiguiente, el número de operaciones que es preciso realizar al ejecutar un algoritmo dependerá de los datus del problema y solamente se conocerá al ejecutar éste. Las característicasfundamentales de un algoritmo o proceso algorítmico son: a) Un algoritmo debe ser preciso e indicar el orden de realización de cada paso. , b) Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. . c) Un algoritmo debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento. La definición de un algoritmo debería describir tres partes: entrada, proceso y salida. Un algoritmo implica generalmente alguna entrada (algo que existe y es utilizado por el algoritmo); en un algoritmo de receta de cocina, la entrada está constituida por los ingredientes y los utensilios empleados. Un algoritmo produce también resultados denominados salida. La salida de la receta será la terminación del plato (cordero asado). Un algoritmo describe la transformación
de la entrada en la salida. 1.3. DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS El primer objetivo de toda máquina (procesador) es el manejo de información o datos. La representación de los datos utilizada determina la forma del algoritmo; realmel1te, éstos dependen del tipo de información sobr:e la que actúa. En consecuencia, la identificación de los objetos (datos) que manipula el algoritmo debe realizarse sin ninguna ambigüedad para que la máquina sepa en cada momento qué tipo de datps manipula y cómo debe operar con ellos. El sistema de identificación de los datos que llamaremos definición de la estructura de datos, es, al menos, tan importante como los a1~oritmos que los transfdrman. Ji~~,~~,t,1:~;~,;;;~.,:);,'x- .,,;;¿:' .'
".;" ~ ; i¿ÚrAi:~¡Njj*~*gf' 'OM
r..
.,",~. ~
..,-..,·,~,',;~¡¡,B.
4
ALGORITMOS Y PROGRAMAS
METOOOlOGIA DE LA PROGRAMACION
El lenguaje de programación no es más que una notació n que describe las
un prograestructuras de datos y los algoritmos. Los datos con los cuales trabaja de un objetos los todos que igual Al es. ma se sitúan en objetos llamad os variabl para sirve que cador identifi o llamad e programa, las variables llevan un nombr o menud a tan ado examin ser puede valor referenciar su valor o contenido. Este un r atribui en e consist que acción La o. como sea necesario, borrad o o reescrit s por valor a una variable se llama asignación. Los datos y sus valores tratado El etc.). res, caracte os, (númer eza natural te un progra ma pueden ser de diferen tomar. puede que valores de to conjun tipo de una variable es el del distint os La mayor ía de las compu tadora s son capace s de trabaja r con res alfacaracte de s cadena o (series cos numéri no y tipos de datos: numéricos ~ béticos).
1.3.1 . Datos numé ricos y númeLbsdat os numéri cos se representan en dos formas: números enteros . formas ros rea/es. La compu tadora maneja de modo diferente ambas deciLos enteros corresponden a número s completos; no tienen compo nente malo fraccionario y pueden ser negativos o positivos. Ejemplos de enteros
-3245 4672 35
son:
45 -321
-5
. El rango normal de los número s enteros suele ir de -32768 a +32767 en nan almace se nes fraccio las l; decima punto un e siempr Los reales tienen almade la compu tadora como número s decimales porque no existe otra forma enteros que cenar numera dores u denom inadore s separados. Al contrar io de los pueden reales s suelen tomar valores en un rango determinado, los número os o positiv ser y tomar, teóricamente, cualqu ier valor de la recta numéri ca real negativos. Los siguientes ejemplos son número s reales:
34.6 231,51 2 -8,31
n:mx bte
I
1
n=mx~
m es la mantisa. e exponente, igual a un entero.
base del sistema de numera ción (norma lmente 10). 1 símbolo de la operación exponenciación En el sistema decimal el formato resulta ser: b
[ n = m x 1Ole
I
[
n=mx 10e
I
os tiene aunque el rango se dijo antes es indefinido, lógicamente a efectos práctic dígjtos dos e limitaciones. Norma lmente m puede conten er de 4 a 6 u 8 dígitos y positivos o negativos. Ejemplos típicos de número s reales en coma flotante son:
0.3456 7 34.567 0.386 3.4567
x x x x
10123 10115 101-7 10114
(i es el símbolo de la exponenciación): se sustituye normal mente por la letra e y entonces resultará: 0.3456 7 e23 34.567 e15 0.386 e-7 3.4567 e14 es La ocupación en memor ia de los número s enteros y los número s reales os aceptad s número de distinta. Así en el caso de los micros IBM pe, los tipos son:
enteros: rango -32768 a +32767 (ocupan 2 bytes de memoria). reales: simple precisión (7 dígitos de precisión). doble precisión (15 dígitos de precisión).
4567, 34 313,2 16 8,74
1.3.2 . Datos no numé ricos
sustituiEn notación de compu tadora la coma decimal no existe y es siempre da por un punto. os Al objeto de poder representar número s reales muy grandes o muy pequeñ inada denom n notació (3463.227.314 ó 0.000ססoo0003845) se ha diseñado una cient(fica o de coma. punto flotante que tiene el siguiente formato:
I
5
1
Existen fundam entalm ente dos tipos: datos alfanwnéricos y datos lógicos. eLos datos alfanuméricos se agfupan en series o cadenas de caracteres (caract 9; 8, oo., 2, 1, O, dígitos 10$ z; y, x, .." b, a, Z, Y, res alfabéticos A, B, .... X, ~aracteres especiales #, $, -, etc.). dero» y . Los datos lógicos son aquellos que pueden tomar dos valores «verda
Menor que Igual
Mayor que
Menor o igual que
Mayor o igual que
Diferente (menor o mayor que)
No menor que (mayor o igual)
No igual que (diferente~
No mayor que (menor o igual)
Símbolo de comparación
Si el valor de X es mayor que 5 seguir el camino rotulado Sí, en caso contrario el camino No. Si el valor de X es igual a Y seguir el camino rotulado Sí. en c,!so contrario el camino No.
, No suelen utilizarse normalmente. .
...-. el.,••
"'_o- '~¡'éÍ.V' ¡¡,
:t,
..
;-
..
,
-Ú;'.~', ,,~~#¿étm¡_.
.24
B
No
/
Subrutina B
Subrutina A
1I
U
~
I
fA
T I I
I
Retorno
Sí
________ ~
S=X·y
Z=K+L
Ejemplo 3.
Inicio Subrutina B
Inicio Subrutina A
No
Sí
Cuando el valor de Z sea igual a la suma de los valores de K y L, se ejecuta la función F2 y a continuación se retorna al primer punto conector A, o sea, realización de la operación Z=K+L.
25
DIAGRAMAS DE FLUJO
METODOLOGIA DE LA PROGRAMACION
I
I
fB
1
, I I
Retorno
S contiene el valor del producto X por Y.
Diagrama de flujo de macroprocesos o bloques.
No
Emisión de las facturas del ejemplo 1
Función F1
Función F2
El problema se subdivide en módulos de menor entidad (entrada de datos por teclado, lectura de datos del fichero de clientes, visualización en pantalla, validez de los datos, impresión de facturas, etc.) El diagrama de flujo de detalle podría ser el siguiente:
mm)ri"
L
.. ,.-,. • . •
.1'
,¡,\íj.d~iEq~
DIAGRAMAS DE FLUJO
27
Supongamos que la aplicación de los ejemplos 1 y 4 fuese el modelo siguiente: Introducción de los datos de cada factura
Entrada de datos
Cabecera (Datos sociedad o empresa)
Extracción de los datos de los ficheros de clientes A y B
Leer datos
del
cliente
Unidades
Artículo
Precio
Total parcial
Presentación en pantalla de la factura
TOTAL Petición de validez de los datos
No
Fecha
Pie (datos diversos)
Validación
de
datos
Proceso de cálculo factura
Impresión de la factura del cliente
No
Pregunta sobre la emisión de una nueva factura
Una vez que se ha confirmado por el operador la impresión de la factura y suponiendo que se han introducido ya los datos del cliente y el pedido efectuado, el ordinograma para la emisión de las facturas constituiría normalmente una subrutina o al menos un subprograma de entidad propia y constante. Las opera ciones a realizar serían: l. 2. 3. 4. 5. 6. 7.
Impresión de cabecera. Cálculo de sumas parciales (unidades x precios del artículo). Escritura de cada línea de la factura. Cálculo del total actual de la factura. Preguntar si es el último artículo. Imprimir TOTAL de la factura. Imprimir fecha expedición de la,factura (al principio del programa princi pal se habrá introducido Ía fecha). 8. Impresión del pie de la factura. El ordinograma podría ser:
Ejemplo 4.
Ordinograma para la expedición de una factura.
26 ~.Lbk\j!..¡';;'
.;;,._\
_"'~"'i..ó.,;rl~¡éa»f'r;;,j¡
DIAGRAMAS DE FLUJO
Inicio
29
2.3.3. Plantillas y hojas de codificación Cabecera constante • nombre empresa • dirección • teléfono
TOTAL
Variable TOTAL valor inicial = O
=O
'f' Cálculo de las sumas parciales de cada Ifnea.
SP = U x Precio
En el comercio existen a la venta plantillas para la realización de diagramas de flujo. Generalmente son piezas rectangulares planas y transparentes, en las cuales figuran recortados los símbolos vistos en los párrafos anteriores. El uso de las plantillas es similar al de cualquier otra plantilla de dibujo, es decir, basta con deslizar el lápiz o rotulador por el contorno del símbolo correspondiente para dibujar dicho símbolo.
l'
.
!21'1.1!1.ll!'!'I~r
1"1"'.''"'.'
.,.,,,,:1' r "'('·'·PI "·'·'1' !.I#I..
''''"\.'''''"!' [.'.'i!' ''''I'.!.,., ,,-,.. ~.
!.... I.I.,.I~. 1=I:n,:::r'~'
~
¡
.if
~
h
., .,
_'~""1II.
f-L-~.'Ull?"
t+
...
~
-,
f:l:I:
,. ,.,., .,.,
".'."3',.. ,.. ,.,....'".'.'J
~
w 'Li:!t
¡:¡.
.A
_le'"
W'
::r. ,+
~
Off." I
j-I+',,~
..
.,
un'.; I 1 Expresión
D
Una regla sintáctica se compone de una cabecera o encabezamiento con el nombre del elemento que define y a continuación el gráfico o diagrama. Los diagramas se leen siguiendo las flechas desde la entrada hasta la salida, o lo que es igual, comenzando por la izquierda y siguiendo la dirección de la flecha. En los puntos de bifurcación puede ir por cualquier camino. Identificador
expresión simple
~
E( 9)' 9 ? Y
~
r
"pre.oo ,;m."
r
(a)
o bien ~ expresión simple
<
--! Diagrama 3.1 a.
>
I
I
=
IN
I
I
I
I (b)
Diagrama 3.2.
Identificador. .• "¿j",":..~-,-J¡h;t··:C/;'t>-·_ ,~ •.
I
•
Expresión.
expresión simple
•
52
ESTRUCTURA GENERAL DE uN PROGRAMA
METODOLOGIA DE LA PROGRAMACION
Variables numéricas válidas son:
Expresión simple
demo 5
nombres 17
SEVILLA
Variable alfanumérica (en lenguaje BASIC)
término
----'1
11
letra,
i
¡
r0
·
término
o bien o bien
---8-
¡
-----Ietra
término
i
l'
+
-
~
OR
térmíno~
-
)-0----
'''''
C d f o i t o ...-",- - '
nombres de variables alfanumérica o de cadenas válidas son: demo 5 $
AB$
Nombre$
Sentencia REM (en lenguaje BASIC) Expresiones válidas son:
x
x-V+Z
-(
x + V * (x - V) / (Z - W)
REM
rl
Cadena de caractereJ
o bien
Variable numérica (en lenguaje BASIC)
REM
• Cadena de caracteres
•
Sentencias REM válidas son:
l/M.!...
A ) í3
REM esto es una prueba REM adelante mis valientes
''/4 (
fJ J J) l ¡te" " .!.,-Aa'"" '{
I
Variable (en lenguaje PASCAL) o bien
_
L
letra-C=-
dlgito
•
letra
~
~
~.
~
~&
'-:¿ : c.no---(
-
\
53
54
METODOLOGIA DE LA PROGRAMACION
ESTRUCTURA GENERAL DE UN PROGRAMA
o bien -----'VAR
["":1
-----+ _tipo
~
oeclaraciones válidas de variables son: V AR
CONTADOR: REAL; CADENA: CHAR;
FORTRAN (ALTO NIVEL)
Ejercicio de aplicación:
Dados los diagramas sintácticos correspondientes a hipotéticas expresiones "PRUEBA", "DEMO", "SALUDO" de un lenguaje de programación, averigüe nombres válidos de expresiones.
PRUEBA
DEMa 1
~
t
DEMO
~'.::----l.
L.C'~
Nota:
trucciones necesarias para realizar una tarea específica. Los lenguajes de progra mación se clasifican como bajo nivel y alto nivel. El nivel de un lenguaje de programación es indirectamente proporcional al número de instrucciones necesarias para realizar una tarea específica; esto es, un programa destinado a calcular e imprimir la media de las calificaciones de las asignaturas de un estudiante, necesita 'muchas más instrucciones en un len guaje de bajo nivel que en uno de alto nivel (Figura 3.2). Los lenguajes de bajo nivel están más próximos a la máquina que los lenguajes de alto nivel próximo al usuario. PROGRAMAS EQUIVALENTES EN DIFERENTES LENGUAJES (UNIVAC 1100)
A. B : INTEGER :
t t
55
>SALUOO?T
SALUDO
---C=:::---l.
3.2.2. Clasificación de los lenguajes: bajo nivel y alto nivel Existen centenares de lenguajes de programación para computadoras y cada uno tiene diferentes versiones. Cada lenguaje tiene sus ventajas e inconvenientes junto con sus defensores y detractores. Algunos lenguajes son ideales para la programación de un tipo de problemas (gestión, científicos ...) y otros han sido diseñados para resolver otros problemas diferentes (educación, investi gación, etc.). Los lenguajes se suelen clasificar en términos de niveles que constituyen una jerarquía de los lenguajes de programación, relacionada con el número de ins-
ASSEMBLER(ASSEMBLY)
TEST = O
7413 1300 O000000 0003 000000 00 O000000
LMJ +
Xll,NINTRS
0000,0
OUTPUT = 1
05000000 O000000 0000 10000000 O000004 0000 01000000 O00000 1 0000
SZ LA SA
TEST AO,(1.000000+ O) AO,OUTPUT
TEST = TEST+ 1
1000 00 00 O000004 0000 76000000 O000000 0000
ILLA FA
AO,{l.000000+ O) AO,TEST
OUTPUT = OUTPUT*TEST 0100 00 00 O000000 0000 7602 00 00 O00000 1 0000
SA FM
AO.TEST
AO,OUTPUT
IF (TEST.LT.100) GOTO 1
0100 00 00 O000001 0000 1000 02 00 Ó 000000 0000 76010200 O000005 0000 74020200 O000016 0001
SA LA FAN JP
AO,OUTPUT A2.TEST A2.(1.000000+ 2) A2,$+2
PRINT 2,OUTPUT
7401 0200 O0000050001 74131300 O000000 0004 0000 04 00 O000002 ססoo 0000 04 10 O000000 0000 02 00 O00000 1 0000 7201 00 00 O000000 0005 7413 1300 O000000 0006
JNZ LMJ + + + SU LMJ
A2,lL
Xll,NPRT$
0100,2F
0110.0
0040.0UTPUT
Nl02$
Xll,NSTOP$
0000 00 00 O000006 0000
+
(005050!i050505)
C'7'~
Los símbolos 'A', 'B', ... equivalen a A, B, es decir son símbolos terminales.
OCTAL (MAQUINA)
2 FORMAT(F15.0) END
BASIC (ALTO NIVEL) 10 T=O 20 K=l 30 T=T+l 40 K=K*T 50 IF 1.< 100 THEN 30 60 PRINT K 70 END
PASCAL (ALTO NIVEL)
PROGRAM DEMOS (OUTPUT);
VAR TEST, OUTPUT:REAL;
BEGIN
OUTPUT:=1.0; TEST:=O.O;
DO TEST:=TEST+ 1.0; OUTPUT:=OUTPUT*TEST UNTIL
TEST>=100;
WRITELN(OUTPUT: 15;0)
END.
Fuente: Actividades escolares y Guía de Referencia para usar con el Computer Parts Kit. Cambridge, MN: Educational Computer Shoppe, 1978.
Figura 3.2.
Programas en diferentes lenguajes.
56
ESTRUCTURA GENERAL DE UN PROGRAMA
METODOLOGIA DE LA PROGRAMACION
3.2.2. 1. Lenguajes BAJO NIVEL
57
series de 1 y O, el lenguaje ensamblador utiliza símbolos reconocibles, llamados nemotécnicos para representar las instrucciones (Figura 3.3.).
El procesador (unidad central de proceso) de la computadora no puede ejecu tar directamente sentencias escritas en un lenguaje simbólico (alto nivel), basado en símbolos; el procesador solamente puede ejecutar instrucciones más simples, llamadas instrucciones de máquina. Una instrucción máquina es un conjunto de ceros y unos, es decir el procesador sólo entiende el lenguaje binario. Cada procesador tiene sujllego o conjunto de instrucciones que dependerá de la estruc tura física o electrónica de la computadora, o lo que es igual cada computadora tiene solo un lenguaje de programación que puede ser ejecutado: el lenguaje má quina.
0000005A 5C 60
62 66 6A
LR
1850 5C40 1A47 "5A64 5064 B7A8
C16E
Figura 3.3,
5,0 4,=F'4'
4.7 0000 0000 C04E Programa objeto
Direcciones de memoria
M
6,0(4) 6,0(4) 10,8, LOOP Programa ensamblador
Programa ensamblador y objeto.
EL LENGUAJE MAQUINA Un programa máquina (o escrito en lenguaje o código máquina) es un con junto de instrucciones de máquina escritas con ciertas reglas sintácticas que constituyen el lenguaje máquina. El programa escrito en lenguaje máquina es el único que entiende la computadora. Evidentemente los programas escritos en lenguaje máquina son complicados, largos y difíciles de escribir. Imagínese ins trucciones máquinas como: 100011 00001 10001
0110001100111110
El programador debe hacer un gran esfuerzo para recordar tales instruccio ;nes, si es que llega a recordarlas. Los programas escritos en lenguaje máquina, aunque fueron los que primero aparecieron y por ello se denominan lenguajes de la primera generación, son difíciles de interpretar o corregir. A estos inconve nientes es preciso añadir que, como se ha comentado, estos lenguajes sólo sirven para un determinado procesador y generalmente una sota máquina (aunque dos computadoras estén basadas en el mismo procesador -microprocesador en el caso de las computadoras personales- no tienen por qué coincidir su estructura y por consiguiente su programación). Así resultará que el lenguaje máquina sólo servirá para una sola máquina que, junto con los inconvenientes citados, hacen que este lenguaje, entendible por la máquina, no lo sea por el programador. Para solucionar este problema en un nivel superior se diseñaron los lenguajes ensambladores basados en codificación de las instrucciones mediante nemotécni cos (o nemónicos) que son un conjunto de letras y números más simples de utilizar que el código máquina. EL LENGUAJE ENS..:\MBLADOR (Assembler) Los lenguajes máquina como los ensambladores son únicos para un procesa dor particular (en el caso de los microprocesadores, Z-80. 6502, 8088, 68000, etc.). La gran diferencia entre los dos tipos reside en el medio en el que se representan las instrucciones por el programador. En IUI!;¡r el.. 1,,,, n .. .,.,~~-
Los lenguajes ensambladores constituyen para muchos historiadores !fe soft ware, la segunda generación de los lenguajes de programación. En las décadas de los años 60 y 70 los lenguajes ensambladores se utilizaron mucho para desarrollo de programas de aplicación y siempre para desarrollo de software del sistema (sistemas operativos, utilidades, etc.). Aunque los programas eran muy largos, muchos programadores preferían la programación en ensam blador por considerar que utilizaban las características del sistema de computa dora de un modo más eficaz. En la década de los 80 se han popularizado los lenguajes en ensamblador de los microprocesadores más populares Z-80, 6502 y 8085 en 8 bits; 8086/8088, 68000, 80286 en 16 bits, y 80386 en 32 bits. El desarrollo de los lenguajes de programación de alto nivel de la cuarta generación de lenguajes (C, esencialmente) está comenzando a sustituir a los lenguajes ensambladores en el desarrollo de software del sistema. En cualquier forma, hoy día, el porcentaje más alto de la programación -en general- se realiza en lenguajes de alto nivel. 3.2.2.2. Lenguajes de ALTO NIVEL De lo expuesto en el apartado anterior se deduce el interés por otros lenguajes de programación generales (y que a ser posible no dependan de la miquina utilizada) con los cuales se puedan describir algoritmos para ser ejecutados en el mayor número de computadoras. Tales lenguajes, denominados lenguajes de alto nivel, permiten programar sin necesidad de conocer el funcionamiento interno de la máquina. Los lenguajes de alto nivel poseen una potencia considerable en sus instruc ciones, de modo que una instmcción en lenguaje de alto nivel equivale a varias en lenguaje máquina. Así por ejemplo: M
= A + B (1, J) + e • LOG (X)
Puede suponer muchas instrucciones (posiblemente centenares); sin embargo la instrucción es fácilmente entendible por ~I programador.
'"
re
,o
58
ESTRUCTURA GENERAL DE UN PROGRAMA
METODOLOGIA DE LA PROGRAMACION
En esencia las diferencias con el lenguaje ensamblador, residen en que los lenguajes de alto nivel utilizan instrucciones muy potentes (normalmente enten dibles en idioma inglés -no nemotécnicas, IF, THEN, WHILE, FOR, DO, PRINT, etc.), independientes de la máquina sobre la que operan. Un esquema sintetizador del funcionamiento en bloques de los lenguajes se muestra en la Figura 3.4.
59
LENGUAJES ORIENTADOS A LOS PROCEDIMIENTOS Son los más utilizados y se subdividen a su vez según su aplicación en: Lenguajes Lenguajes Lenguajes Lenguajes Lenguajes
cient(/icos: FORTRAN, APL. de gestión: COBOL, RPG. de aplicaciones múltiples: BASIC, Pascal, Ada, C. educativos: Lago, Pilot y Prolog. de la inteligencia artificial: Lisp.
Máquina
(Hardware)
Programador
3.2.3. Intérpretes y compiladores
Lenguaje máquina
Lenguaje
Ensamblador
Usuario/
Programador
Máquina (Hardware)
SOFTWARE (Nemotécnico)
Lenguaje Alto
Nivel
Máquina (Hardware)
!~,
Usuario/ Programador
SOFTWARE
Figura 3.4.
Relación usuario/programador con la máquina.
Los lenguajes de alto nivel se pueden dividir en diferentes grupos: • • • •
Lenguajes Lenguajes Lenguajes Lenguajes
orientados a los procedimientos. orientados a los problemas. de consulta. generadores de aplicaciones.
En cualquier lenguaje de alto nivel en que se escriba un programa, éste debe ser traducido a lenguaje máquina antes de que pueda ser ejecutado. Esta conver sión de instrucciones de alto-nivel a instrucciones a nivel de máquina se hace por programas de software del sistema, denominados compiladores e intérpretes. Estos programas especiales se denominan en general traductores. Cuando se prepara un programa, el programador lo escribe en un lenguaje de computadora de los citados en el párrafo 3.2.2. Normalmente, el programa se introduce en la computadora utilizando un editor (un programa procesador de palabras, propio del sistema operativo de la máquina -caso de EDLIN en el sistema operativo MS-DOS de las computadoras IBM PC y compatibles- b ajeno al sistema, Personal Editor, por ejemplo, en el mismo caso de MS-DOS. Un editor permite al programador teclear el programa línea a línea, para introdu cirlo en RAM y guardar o grabar una copia en disco. La versión del programa escrita en un lenguaje de computadora es el programa o código fuente del progra ma general. Antes de que el programa se pueda ejecutar, se debe traducir desde el código fuente al lenguaje máquina llamándose al programa traducido progra ma o código objeto. El proceso de traducción y su conversión en programa objeto difiere según que el programa sea compilador o intérprete.
COMPILADORES Un compilador es un programa que traduce el programa fuente (conjunto de instrucciones de un lenguaje de alto nivel, por ejemplo COBOL o Pascal) a 1!rograma objeto (instrucciones en lenguaje máquina que la computadora pueda IOterpretar y ejecutar). Un compilador independiente (o un intérprete, como se verá en la siguiente sección) se requiere para cada lenguaje de programación; esto es, para ejecutar programas en COBOL o Pascal, necesitará un compilador COBOL o un compilador Pascal. El compilador efectúa sólo la traducción. no ejecuta el programa. El proceso de compilación en Pascal se muestra en la Figura 3.5. Una vez compilado el programa, el resultado en forma de programa objeto directamente ejecutable. )tra asentar las ideas sobre la compilación co'nsideremos un segundo ejem
kt;ii~~:~<
60
ESTRUCTURA GENERAL DE UN PROGRAMA
METODOLOGIA DE LA PROGRAMACION
COMPILADOR
Pascal
~
Programa" fuente en Pascal
• Figura 3.5.
,
Computadora
, )
•
Programa objeto (máquina)
Sin embargo, a veces le ocurrirá que la compilación termina sin errores y sin embargo no se obtienen los resultados apetecidos; en este caso será debido a errores lógicos de programación como por ejemplo el intento de división por cero (lógicamente imposible en la máquina) que produce error. 4. El compilador COBOL ha traducido el programa fuente en un programa máquina llamado programa objeto. El programa objeto es la salida del proceso de compilación. En este momento, el programa objeto reside en memoria y se puede ejecutar con el nombre que se le haya dado, o bien
Compilación de un programa en Pascal.
.¡ •-i
Programa objeto (máquina)
Datos neceSafios para programa Pascal
Computadora
"
• .... -----.i'~ ... .t~--
Resultados del programa Pascal
Compilador
+
Progr. fuente
Programa fuente
~m.!:;·,;¡.
Progr. objeto
Ejecución de un programa.
plo, en este caso, con un programa en COBOL. Los pasos a seguir en el proceso de compilación son: l. Introducir el programa en COBOL con ayuda de un editor. 2. Llamar al programa COBOL, normalmente situado en disco y cargarlo en la memoria principal junto con el programa fuente COBOL. Comenzar la compilación. 3. Si el programa fuente contiene un error de sintaxis en una instrucción (una instrucción con formato no válido, por ejemplo en COBOL la ins trucción DISPLy «ALELUYA» tiene un error de sintaxis, ya que DISPLy se ha escrito mal, su verdadero nombre es DISPLAY), el compi lador al intentar traducir esa instrucción produce un mensaje de error. Algunos compiladores detienen la traducción con el primer error mientras otros continúan la traducción para encontrar otros errores. El programador debe encontrar, entonces, el error en el código fuente, comenzando de nuevo la compilación y continuar una y otra vez hasta que el programa se compila felizmente. Normalmente es necesario compi lar (ejecutar) el programa varias veces, antes de que el programa haya sido traducido correctamente..
y
programa objeto
Desarrollo programa COBOL (edición)
Figura 3.6.
COmPilador COBOL
"
/ ./
~
61
Errores
""
/
Programa objeto
Programa fue-nte
y
programa objeto
Ejecución programa objeto
=/
.¡I~
I __
\.
-----'1
._=-
Progr. fuente + Modificaciones
"CD
Programa fuente
y
Pro. ejecutable
programa objeto Modificaciones del programa fuente
Figura 3.7.
Proceso de compilación de un programa.
ESTRUCTURA GENERAL DE UN PROGRAMA 62
63
METODOLOGIA DE LA PROGRAMACION
grabarlo en un disco para poder utilizarlo directamente en otra sesión de trabajo, pero ya no será necesario el proceso de compilación. Por consi guiente, para poder ejecutar el programa en otra sesión de trabajo, deberá almacenar el programa objeto en un almacenamiento secundario -disco o disquete- para su recuperación posterior. En la mayoria de los sistemas
de computadoras grandes, esta operación se suele hacer automática-
mente. Por consiguiente cada vez que necesite ejecutar su programa COBOL, no necesitará realizar el proceso de compilación; bastará simplemente con llamar el programa objeto almacenado en el dispositivo de memoria auxiliar, cargarlo en la memoria principal y después ejecutarlo. El programa objeto está ya en código máquina y no se requiere compi- ' lación. El programa objeto sin errores se suele denominar ejecutable. El proceso anterior se muestra gráficamente en la Figura 3.7. Algunos compiladores traducen sólo programas completos, mientras otros traducen secciones de un programa. Esta caracteristica es especialmente útil en diseño de grandes programas. Los programadores pueden romper el programa en secciones o módulos y compilar/verificar cada sección independientemente. Cuando esto se realiza, es necesario utilizar un enlazador o encadenador ( (B - 5) (A - 3) < (B - 5)
Las reglas de prioridad se aplican también en este caso. Todos los operadores de relación tienen menor prioridad que los operadores aritméticos. REGLAS DE PRIORIDAD en PascaljBASIC
(Pasca.!)
A=B+1
(BASIC)
significa que se han de ejecutar las operaciones del lado derecho y asignar el valor obtenido a la variable de la izquierda. El lado derecho de la sentencia puede ser cualquier expresión legal y el lado izquierdo debe ser un nombre de variable. En general, la expresión de la derecha debe tener un valor del mismo tipo que la variable de la izquierda. Si se dan varias sentencias de asignación se sUpone que se ejecutan en el orden en que están escritas. No se puede tener una expresión en el lado izquierdo. La sentencia de asignación no debe confundirse con una ecuación matemática o la igualdad aritmética. Por consiguiente:
A+5:=B-6 no es un formato correcto, aunque la ecuación matemática
Como ejemplo hemos elegido Pascal y BASIC para da~ las reglas de prioridad, aunque en los restantes lenguajes suelen ser siJ?1ilares.
View more...
Comments