Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Módulo A:
Algoritmia y Lenguajes de Programación
Capítulo 1: Preliminares
Figura 1.2
1
Las primeras PC XT (que aparecieron en 1983) disponían de 1 MB de RAM, de los cuales para los cálculos quedaban sólo
640 KB. La PC AT (ó 286, que aparecieron en 1984), y posteriormente las 386 y 486 disponían hasta 4 MB de RAM, que
podían ampliarse hasta 8 MB o incluso hasta 16 MB.
2
La supercomputadora CRAY XT6 de CPTEC/INPE, adquirida en oct-2010, y que entrará en funcionamiento en ene-2011,
tendría 40 TB de memoria principal; disco primario de 866 TB y almacenamiento secundario de 3.84 PB (Petabytes).
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1-3
Maestría en Ingeniería Hidráulica
En general, cualquier entero β > 1 puede utilizar como base para un sistema numérico.
Los números representados en base β incluirán los dígitos 0, 1, 2, 3, 4, … β − 1 . Si el
contexto no aclara cuál es la base numérica que se utiliza para el número N, se puede
utilizar la notación (N ) β . Así tenemos que, de lo anterior, (1001.11101) 2 = (9.90625)10
De las operaciones efectuadas líneas arriba, el valor decimal de un número de base
β , por ejemplo: (abcdef ⋅ hij ) β , se calcula como:
( N )10 = a × β 5 + b × β 4 + c × β 3 + d × β 2 + e × β 1 + f × β 0 + h × β −1 + i × β −2 + j × β −3
3
KINCAID (1994, p, 29).
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1-4
Maestría en Ingeniería Hidráulica
Entonces, para guardar, por ejemplo, el entero decimal -173 en una palabra de 16 bits,
primero se convierte el número del sistema decimal al sistema binario, luego se guarda
éste tal como muestra el siguiente esquema:
− 173 = −(10101101) 2
1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1
↑signo
En general, en el sistema de numeración binario, la expresión matemática de un número
entero es
4
La conversión de números fraccionarios del sistema decimal a un sistema de base β ; y conversión de un número fraccio-
nario en sistema binario a sistema decimal; ver, por ejemplo, en ÑIEVES & DOMÍNGUEZ (1996, pp, 7-8).
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1-5
Maestría en Ingeniería Hidráulica
± a k a k −1 a k − 2 K a 2 a1 a 0
donde a i es un bit con valor 0 ó 1. Su valor decimal de este número, tal como se
presentado en la sección 1.2.1, es
I = ±[a k 2 k + a k −1 2 k −1 + L a 2 2 2 + a1 21 + a 0 2 0 ]
Por ejemplo, el número binario dado por: ± 110101 , es igual a
I = ±[1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 21 + 1 × 2 0 ]
= ±[32 + 16 + 0 + 4 + 0 + 1] = ±53
De acuerdo a la figura 1.3, el máximo entero positivo que se puede almacenar en una
palabra de 16 bits será
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
↑signo
es decir, (111111111111111) 2 cuyo valor decimal es:
1 × 214 + 1 × 213 + 1 × 1212 + K + 1 × 2 2 + 1 × 21 + 1 × 2 0 = 32,767
Por lo tanto, como se muestra en la figura, los 15 bits restantes de una palabra de 16
bits pueden contener los números binarios de 0 á (111111111111111) 2 ; que en sistema
decimal equivale de 0 á 32,767.
Una forma de almacenar un número entero negativo es utilizar los mismos dígitos que el
número positivo de la misma magnitud, excepto que el primer bit se pone en 15. Así, el
entero negativo de menor magnitud que se puede almacenar en una palabra de 16
bits será
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
↑signo
o sea, − (111111111111111) 2 cuyo valor decimal es
− [1 × 214 + 1 × 213 + 1 × 1212 + K + 1 × 2 2 + 1 × 21 + 1 × 2 0 ] = −32,767
Así, una palabra de 16 bits puede guardar un entero de sistema decimal en el rango de
-32,767 á 32,767. Además, debido a que el cero (0) está ya definido como
0000000000000000, sería redundante usar el número 1000000000000000 para definir
“menos cero”. Por lo tanto, es usualmente empleado para representar un número
negativo adicional: − 32,768 , y e rango va de [−32 768 á + 32767] . (CHAPRA &CANALE,
2003, p, 61).
Ejemplos adicionales: (ver ÑIEVES & DOMÍNGUEZ, 1996, pp, 9-10)
1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0
↑signo
b) Representar el número 525 en una palabra de 16 bits
(525)10 = (1000001101) 2
5
Sin embargo, muchas computadoras usan el “complemento a dos” para almacenar números negativos; ver por ejemplo
NAKAMURA (1992), p, 8.
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1-6
Maestría en Ingeniería Hidráulica
0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1
↑signo
Así, el número mayor que puede guardarse en una palabra de 16 bits usando la
notación de punto flotante es:
6
En algunas computadoras el exponente se almacena en base 8 (octal) o base 16 (hexadecimal) en lugar de base 2 (ÑIEVES
& DOMÍNGUEZ, 1996, p, 10).
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1-7
Maestría en Ingeniería Hidráulica
1.4.2 COMPILADORES
Son programas que traducen instrucciones escritas en un lenguaje de alto nivel (como
FORTRAN) a un conjunto de instrucciones en lenguaje de máquina, específico para la
computadora que se esté utilizando.
El compilador juega un papel importante en el proceso de traducción de un código
escrito en un lenguaje de alto nivel a lenguaje de máquina. Entre sus funciones están:
1).- Traducir el código fuente (programa fuente) en código de máquina (código, o
programa objeto).
2).- Incluir en el programa objeto pequeños programas o rutinas con los que ejecutará
operaciones especiales, como la raíz cuadrada, cálculo de logaritmo, etc.
3).- Reservar ciertas áreas de memoria principal que son necesarias para la ejecución
posterior del programa.
4).- Producir el programa objeto y dejarlo almacenado en un medio físico.
5).- A petición del programador, hacer un informe o listado, tanto del código fuente
como del objeto.
6).- Hacer un listado con todos los errores que el programador haya podido cometer a la
hora de codificar su algoritmo con los mensajes de diagnóstico.
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1-9
Maestría en Ingeniería Hidráulica
SISTEMA ENSAMBLADOR
LENGUAJE ENSAMBLADOR CÓDIGO A NIVEL DE
SIMBÓLICO
(Lenguaje de Bajo Nivel) MÁQUINA
(Ensamblador)
Puesto que las instrucciones a nivel de máquina difieren entre las distintas series de
computadoras, debe existir un compilador para cada serie de computadoras.
Existen dos importantes ventajas de los lenguajes de alto nivel respecto a los lenguajes
simbólicos de ensamblador: son independientes de la máquina en el sentido de que los
programas escritos en un lenguaje de alto nivel pueden compilarse y correrse en
cualquier computadora (para la cual exista un compilador) con pocos o ningunos
cambios, que son relativamente fáciles de aprender. También es relativamente fácil
estandarizar los métodos de programación con lenguajes de alto nivel.
Los lenguajes de alto nivel más comunes adecuados para la computación científica y de
ingeniería son: FORTRAN, BASIC, PASCAL, C, C++, JAVA, etc. Estos lenguajes podrían
encuadrarse en la categoría de los lenguajes de programación tradicionales.
7
Por lo cual se puede obtener velocidades de proceso muy similares al bajo nivel, control total del equipo y además facilidad
de programación.
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1 - 14
Maestría en Ingeniería Hidráulica
calidad: programa que sea fácil de entender (y de modificar en caso necesario) y que
emplee en forma eficiente los recursos del computador.
Validación de datos de Realiza la validación de los datos de entrada para detectar errores u
entrada omisiones.
PROGRAM BINARIO
!
!**************** BLOQUE DE IDENTIFICACION DEL PROGRAMA ***********************
! Este programa convierte un numero decimal positivo menor de 1.0E+38 a un *
! numero binario en formato de punto flotante normalizado, con una mantisa de *
! 24 bits. Es decir, el numero real se almacena en una palabra de 32 bits. *
! El programa trabaja de manera interactiva. Al ejecutarlo, pide un valor deci- *
! mal que después se convierte en binario. *
! Nakamura (1992, p, 18); Revisado el O9/10/08 por B. S. Rojas *
!***************************************************************************************************
!*************************** IDENTIFICACION DE VARIABLES ***************************
! A(k) : bit k-ésimo en la mantisa normalizada *
! B : 2^I *
! I : parâmetro *
! L : mantisa *
!************************** DATOS DE ENTRADA/SALIDA ********************
! X : numero real (base decimal) de entrada. *
! MANTISA : mantisa normalizada de 24 bits. *
! EXPONENTE: exponente o "caracteristica" (en base decimal) *
! del numero binario normalizado. *
!***************************************************************************************************
!********************* BLOQUE DE DECLARACION DE TIPO ******************
IMPLICIT NONE
INTEGER :: A(255), I, K, L, M
REAL :: B, X
!
!***************************************************************************************************
!*********************** BLOQUE DE ENCABEZAMIENTO ******************
PRINT*, ' CONVERSION DE DECIMAL A BINARIO'
PRINT*
PRINT*, 'PROGRAMA DE PRUEBA, CORRIDO EL 11/10/08'
PRINT*
!
!***************************************************************************************************
!********************** BLOQUE DE LECTURA DE DATOS ********************
10 PRINT*, 'Introduzca el valor decimal, positivo menor de 1.0E+38:'
PRINT*
READ*, X
!
!****************************************************************************************************
!****************** BLOQUE DE INICIALIZACION ******************
L=0
K=1
!
!****************************************************************************************************
!*********************** BLOQUE DE CALCULO ***********************
I=LOG(X)/LOG(2.0)+2
70 I=I-1
IF (I.LT.-200) STOP
B=2.0**FLOAT(I-1)
IF (X.GE.B)THEN
A(K)=1
X=X-B
IF (L.EQ.0) M=I
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1 - 17
Maestría en Ingeniería Hidráulica
IF (L.EQ.0) L=1
ELSE
IF (K.GT.1) A(K)=0
END IF
IF (L.GT.0) K=K+1
IF (K.LT.25) GOTO 70
!
!****************************************************************************************************
!*********************** BLOQUE DE SALIDA Y FINALIZACION ***************
PRINT*,'-------------------------------------------------------'
PRINT*, 'NUMERO BINARIO NORMALIZADO CON MANTISA DE 24 BITS:'
PRINT*
PRINT 30, (A(K), K=1,24)
30 FORMAT(1X,' MANTISA= ', 10(4I1,1X))
PRINT 40, M
40 FORMAT(' EXPONENTE=', I3)
PRINT*,'-------------------------------------------------------'
PRINT*
PRINT*, 'Digite 1 para continuar, o 0 para terminar'
READ*, K
IF (K.EQ.1) GOTO 10
END PROGRAM BINARIO
Programa 1.1: Programa para convertir decimal a binario
En este caso sencillo, cada línea de PDL da como resultado una línea de FORTRAN, pero
en otros casos una sola línea de PDL puede requerir de muchas líneas en FORTRAN.
PDL es bastante útil en la planeación del flujo general de un programa.
No existen reglas estándar para un PDL; el objetivo principal es obtener una descripción
inteligible de la lógica del programa. Se debe caracterizar por ser:
• “Oraciones” simples, muy claras y bien definidas,
• Cercana al lenguaje natural pero sin ambigüedad,
• Más próximo a un lenguaje de programación que al lenguaje natural.
Operación A
Operación B
compuesto por bloque falso; en caso contrario (ELSE), se ejecutará el bloque falso
ignorándose el primero. En ambos casos la ejecución continúa en la instrucción
siguiente a la END IF.
Puede observarse que la estructura IF/THEN es un caso particular de la estructura de
decisión ante dos alternativas en el que falta la segunda secuencia de sentencias, así
como la sentencia ELSE que le precede.
Verdadera
Condición ?
(THEN)
Ejecución Bloque
Verdadero Falsa
(END IF)
Ejecución
Siguiente Sentencia
Verdadera Falsa
Condición ?
(THEN) (ELSE)
Ejecución Ejecución
Bloque Verdadero Bloque Falso
(END IF)
Sentencia Común
Falsa Verdadera
Condición 1?
Sentencia Común
DO
Sentencias Bloque 1
IF (condición) EXIT
Sentencias Bloque 2
END DO
Al caso general, en el que se incluyen los dos bloques, se le llama loop de prueba
intermedia (midtest). Sin embargo, en esta estructura no es necesario tener dos
bloques:
Cuando se omite el primer bloque, a la estructura se le suele llamar loop de preprueba
porque la prueba lógica se realiza antes de que ocurra algo. En caso de que la
condición sea cierta, el bucle ni siquiera se realiza. El pseudocódigo de este caso es
DO
IF (condición lógica) EXIT
Sentencias Bloque 2
END DO
En todos los casos estudiados, y como puede observarse, la instrucción simple EXIT,
cuya ejecución obedece a que se cumpla una condición, permite salir del bucle en el
momento adecuado.
Es preciso notar que se puede cambiar los valores de las variables valor inicial, valor
final e incremento dentro del cuerpo del DO, y esos cambios no afectarán al proceso de
variación de la variable índice cuyo valor quedó establecido al principio de la
construcción. Por ejemplo, estaría permitido escribir:
DO i= n, j, 5
.
n = n+2
j = j*3
.
.
END DO
En este código en el que se modifican los valores de n y j dentro del cuerpo del bucle,
no afectará ni al valor que ya tuviera ni a su plan de variación, es decir, al total de
i
o bien
La utilización del DO con nombre resulta muy útil cuando e trata de varios bucles Do en
el nido. El ejemplo anterior de la construcción de una tabla con la suma de los
elementos de los vectores M y N, también se podría escribir como sigue:
Nível_1: DO M= 1, 8
Nível_2 DO N=1, 3
Suma = M + N
Print*, ‘La suma es: ‘, Suma
END DO Nivel_2
END DO Nivel_1
Como ya de dijo, uno de los objetivos al emplear las tres estructuras básicas (secuencia
simple, selección y repetición), es realizar programas más fáciles de entender para
aquellos preocupados por el diseño, revisión y mantenimiento.
Sin embargo, es posible combinar las tres estructuras simples para producir una
codificación más compleja conservando, al mismo tiempo, la simplicidad inherente a los
tres patrones. Por ejemplo, la lógica del programa puede involucrar una selección entre
dos rutas del programa. Si se selecciona una ruta, deberá realizarse un ciclo de
repetición; si se selecciona la otra, existe una secuencia simple a realizar. La
combinación de las estructuras se ilustra en la figura 1.13. Obsérvese que sigue
existiendo una sola entrada/salida para toda la estructura.
Esta corta explicación acerca de las tres estructuras proporciona cierta profundización
acerca de su valor en un enfoque disciplinado de programación. Las estructuras son
útiles debido a que:
• El programa se simplifica. Solamente se emplean los tres bloques constructivos.
Existe un solo punto de entrada a cada estructura, así como un solo punto de
salida.
• Las tres estructuras de codificación permiten leer de arriba hacia abajo un
programa, haciendo más visible la lógica del programa para verificación y
mantenimiento.
UNMSM – UNIDAD DE POSTGRADO FCF Hidráulica Computacional I 1 - 29
Maestría en Ingeniería Hidráulica