- Resumen
- Bosquejo
histórico - Computadoras analógicas
y digitales - Microelectrónica y
sistemas de cómputo - Estructura de los sistemas
de cómputo - Solución de problemas
empleando sistemas de cómputo - El ambiente
WINDOWS - Inteligencia
Artificial - Redes de
computadoras - Seguridad
Informática - Anexos
Una característica fundamental de toda sociedad es su
desarrollo
tecnológico, marcado, incluso algunos de ellos,
períodos concretos, como el caso del uso del vapor en el
siglo XIX.
En el caso de la sociedad contemporánea uno de
los elementos que forma parte indisoluble de la misma, a partir
de su acelerada introducción en la práctica social
desde la primera mitad de los años 80, lo constituyen las
técnicas digitales, que hoy día se encuentran
presentes, de una u otra forma en todas las actividades y esferas
de nuestra vida.
Por otra parte, la propia rapidez de este proceso
incrementa la cantidad de publicaciones especializadas sobre el
tema, pero éstas, por razones obvias, cada vez dedican
menos espacio a los aspectos básicos y caen de lleno en lo
novedoso que las ocupa, dejando un vació para el lector no
especializado.
Tomando en cuenta los aspectos mencionados se
elaboró el presente trabajo donde,
el autor a partir de una recopilación
bibliográfica, que incluye trabajos propios anteriores,
expone los elementos básicos asociados a la evolución de las técnicas digitales
y sus aplicaciones, con lo cual facilita la comprensión de
temas más avanzados a los interesados.
La evolución histórica de los sistemas
informativos y, por supuesto, de las técnicas de
desarrollo de estos sistemas, puede rastrearse a través de
la historia de la
humanidad.
Desde la época primitiva el hombre
sintió la necesidad de contar y realizar cálculos
numéricos, los cuales con el transcurso del tiempo
resultaban cada vez más complejos y en cuya
realización empleó los más diversos métodos.
La forma más elemental consistió en contar
con los dedos de las manos, que tiene el inconveniente de no
poder enumerar
conjuntos de
más de diez elementos. Como «solución»
existía la posibilidad de utilizar a otras
personas!!!.
El siguiente paso lo realizaron las antiguas
civilizaciones de Egipto y de
los valles asiáticos, que consistió en representar
los números por grupos de
guijarros en montones de diez. Este método con
el tiempo derivó en el ábaco,
que más evolucionado ha llegado a nuestros
días.
Hasta el momento, los documentos
más antiguos que se conocen fueron descubiertos en los
años 3000 – 2800 ADNE, cerca del antiguo estuario
del Eufrates, en Mesopotamia,
pudiendo afirmarse que representaban el soporte físico del
primer sistema para el
control
económico de que se tiene noticia: se trata de libros de
cuentas y de
inventarios
redactados en escritura
cuneiforme arcadiana en tablillas de arcilla. Paralelamente,
aparece en Egipto la escritura jeroglífica, destinada
originalmente a inscripciones en monumentos y
edificios.
Ya en los años 79 – 78 ADNE, se construye
en Roma el
Tabularium, adoptándose los rollos de papiro empleados por
griegos y egipcios, que pueden considerarse como uno de los
primeros archivos
centrales de un estado.
En el 868 ya se imprimían libros en China,
existiendo como prueba de tal aseveración el Sutra del
Diamante, versión china de un texto budista
sánscrito.
Los diseñadores de sistemas informativos en cada
época histórica se vieron favorecidos por la alta
estima y consideración de los gobernantes que valoraban
significativamente sus servicios.
Así, el diseñador de sistemas
utilizó para almacenar información piedras (India y
Tibet), monumentos (Egipto, Mesoamérica), cuerdas
(Europa, Tibet,
Imperio Inca), madera
(Europa) e incluso el cuerpo humano
mediante tatuajes (Benin), utilizando siempre en su trabajo la
técnica disponible en su tiempo, reflejando el desarrollo
de la ciencia en
la época que les tocó vivir.
Del ábaco a la primera calculadora mecánica pasaron varios siglos,
atribuyéndose este hecho al físico y
matemático Blaise Pascal (1623-62)
quien dijo al respecto: "Ofrezco al público una
pequeña máquina de mi iniciativa, con la cual,
usted sólo, podrá realizar todas las operaciones
aritméticas sin esfuerzo y se sentirá aliviado del
trabajo que con harta frecuencia ha fatigado su espíritu
cuando trabajaba con el ábaco y la pluma".
El siguiente paso lo dio el matemático
alemán Liebnitz (1646-1716), quien introdujo a la
máquina de Pascal la multiplicación de forma
directa con la rueda dentada escalonada y no mediante sumas
reiteradas como su predecesora.
Un nuevo avance se logró con los trabajos de
Charles Babbage (1792-1817) quien estableció los conceptos
básicos de las estructuras de
las computadoras
digitales y en 1812 propuso la idea de una máquina para
tabular funciones
matemáticas tales como logaritmos, etc.,
mediante aproximaciones de polinomios. En 1822 terminó un
modelo que
podía calcular diferencias con seis dígitos de
precisión y posteriormente propuso construir una que
utilizaba diferencias de 6to orden con 20
dígitos de precisión, pero perdió el
interés
en ésta cuando concibió su máquina
analítica, conceptualmente más avanzada, pero
recibida con escepticismo por sus contemporáneos y que a
su muerte
pasó al olvido.
La continuación de los trabajos de Babbage lo
realizó su colaboradora Augusta Ada (1815-52) -condesa de
Lovelace e hija de Lord Byron- la cual desarrolló varios
programas para
resolver problemas
matemáticos avanzados, lo que la convierte en la primera
programadora en la Historia de la Computación. Igualmente contribuyó a
exponer, incluso con más claridad, las ideas de Babbage
entre las que pueden señalarse las siguientes:
La Máquina Analítica no pretende, en
absoluto, crear nada. Puede realizar lo que nosotros le
mandamos.
En relación con el empleo de
ciclos repetitivos y las instrucciones de salto expresó:
"La máquina es capaz de hacer un examen, en ciertas
circunstancias, para averiguar si se ha producido una
contingencia posible, dos o más, y seguir después
el rumbo que convenga.
En 1888 tiene lugar otro avance significativo, cuando el
estadístico norteamericano Herman Hollerith inventó
una máquina que contaba automáticamente los huecos
perforados en una tarjeta de papel, lo que permitió
utilizar este soporte para introducir información a los
sistemas, que estuvo vigente hasta la década de los 70-80
del siglo XX.
A partir del desarrollo de la electricidad a
mediados del siglo XIX y los avances en la electrónica en el siglo XX, la Mecánica comienza a ceder terreno en este
tipo de aplicaciones y surgen computadoras que emplean
dispositivos electrónicos (diodos de
vacío constituidos por dos electrodos encapsulados en una
ampolla de vidrio al
vacío entre los cuales circula una corriente y las
más evolucionadas válvulas
de vacío que disponen de rejillas colocadas entre los
electrodos para regular la magnitud de la corriente), las cuales
aventajan en velocidad,
tamaño y fiabilidad a las mecánicas.
Posteriormente, el inglés
George Boole desarrolló un sistema algebraico para la
representación de operaciones lógicas, que
constituyó el germen para el diseño
de los circuitos
lógicos y de cálculo en
las computadoras, y la base matemática
en que se apoyan algunos métodos actuales de diseño de
sistemas informáticos y de bases de
datos.
En la década del 40, von Newman culmina la
configuración de la arquitectura
básica de las computadoras, al combinar los conceptos de
programa
almacenado y ruptura de la secuencia del programa mediante la
toma de decisiones, en tanto en los 50 los trabajos empleando
semiconductores condujeron al descubrimiento del
transistor,
base del desarrollo de los circuitos
integrados, lo que permitió el tránsito de las
computadoras de válvulas a las basadas en microprocesadores, cuyo surgimiento en los 70
originó una profunda transformación, tanto desde el
punto de vista de la arquitectura de los sistemas de
cómputo como de las técnicas de cómputo y la
informática en su conjunto.
A partir de los finales de la tercera década del
siglo XX comienza el desarrollo de la primera generación,
diferentes colectivos de científicos trabajaban
fuertemente en el desarrollo de dispositivos de cálculo
automático. Los más significativos fueron Howard
Haiken y Grace Hopper en Harvards, con los Mark I, II, III y IV;
J.P. Eckert y J.W. Mauchly en Pennylvania con el ENAC (y
posteriormente con la UNIVAC I, primera computadora
electrónica comercializada en el mundo que podía
almacenar programas y datos); John von
Newman en Pennsylvania y Cambridge con los EDVAC y EDSAC
respectivamente, computadoras que tenían programas
almacenados (conjuntos de instrucciones codificados y
precableados) que se ejecutaban secuencialmente.
Los primeros equipos computacionales estaban orientados
al llamado cálculo científico y los lenguajes se
vinculaban directamente a la máquina en cuestión,
asociados fundamentalmente al código
que ésta empleaba. Fue la etapa heroica, donde
paralelamente al empleo de los medios de
cómputo, a la elaboración de los programas,
surgía toda una teoría
sobre la programación.
En estos primeros métodos se insistía
mucho en la
organización del flujo informativo entre los elementos
del sistema, diseño óptimo de la información
de entrada a la
computadora, la cual, en su gran mayoría, se soportaba
sobre tarjetas
perforadas; el diseño de las tablas de salidas.
En este momento, Herbert Simón desarrolla en 1956
los primeros programas heurísticos, con lo que comenzaba a
tomar cuerpo una disciplina que
ya cuenta con gran difusión en el mundo: la inteligencia
artificial y se desarrollan y difunden superlenguajes o lenguajes
de alto nivel para su utilización en cálculo
científico: el FORTRAN y el ALGOL.
Con el surgimiento del transistor, al final de la
década de los cincuenta, surge la segunda
generación de computadoras, en la que los tubos al
vacío son sustituidos por transistores, se
dispone de sistemas magnéticos de memoria central,
de memoria
virtual, dispositivos de micro y
multiprogramación.
Quizás el logro más importante de la
segunda generación de métodos de diseño fue
la concepción sistemática de las aplicaciones con
la introducción del SOP (Study Organization Plan), que
partía de concebir a la entidad como un sistema y
dividía el trabajo de
confección de un sistema en tres etapas y seis
fases.
Dos aspectos interesantes y novedosos del SOP lo
fueron:
- La utilización de documentos diseñados
ergonómicamente para la concepción de diagramas,
ficheros, programas y tablas de salida. - El cálculo de la eficiencia
económica del nuevo sistema, como elemento a valorar
para determinar la prioridad de desarrollo de las tareas a
automatizar.
La tercera generación, denominada empirismo
desarrollado, se caracteriza por la introducción de los
métodos estructurados, el formalismo y la automatización del diseño, que
tienen como punto de partida, los hechos siguientes:
1961: se comercializa el primer circuito
integrado que sale al mercado.
1964: con máquinas
caracterizadas por la integración en gran escala de
circuitos híbridos y monolíticos, la capacidad de
manejar multiprocesadores, la multiprogramación de
tareas, el aumento de la velocidad de procesamiento y de la
capacidad de memoria, el procesamiento en tiempo compartido y
el almacenamiento de volúmenes
significativos de información en dispositivos de acceso
directo a un costo
razonable.
Otro logro muy significativo de la tercera
generación de computadoras fue el desarrollo del software, tanto
básico (sistemas operativos, compiladores,
etc), como utilitario (generadores de programas, programas
parametrizados de amplia utilización, etc), surgiendo la
industria del
software, elaboradora de productos de
amplia difusión, convirtiéndose la
informática en una de las ramas de punta del
desarrollo.
En el campo metodológico se produce una
proliferación de enfoques en los métodos empleados
cuya utilización conduce a la elaboración de
sistemas metodológicos, llamados genéricamente
métodos estructurados de análisis y
diseño de sistemas informáticos, entre los que
se encuentran:
Jackson: Abarca el análisis y la programación,
orientado tanto al análisis por lotes como en tiempo
real. No se apoya en ningún lenguaje en
particular, aunque tiene una aplicación casi directa en
PL/1.
Constantine. Diseñado
especialmente para el trabajo en tiempo real.
Bertini: Prácticamente resulta
una estructuración del lenguaje COBOL.
Warnier: Abarca el análisis y la
programación (Leyes de
Construcción de Sistemas y Programas),
que orienta su trabajo fundamentalmente a los datos y a las
relaciones entre ellos principalmente a las aplicaciones
aisladas. Estas relaciones se apoyan en los principios de
la Lógica
Matemática y la Teoría de
Conjuntos.
En general, los métodos estructurados tuvieron
mucha efectividad en la programación, al aumentar de
manera significativa la productividad de
los programadores y reducir la complejidad y el diseño
incorrecto de los programas.
No puede decirse lo mismo de la concepción del
sistema, de su diseño. La mayoría de estos
métodos reduce el proceso de proyección a un
conjunto de pasos y de decisiones simples, los cuales, si bien
son apropiados para especialistas de poca experiencia, con
frecuencia entorpecen el trabajo de especialistas de mayor
destreza.
Otro enfoque fue el de los sistemas metodológicos
basados en documentación normalizada. Uno de los
sistemas más conocidos es el de NCC-Systems Documentation
Standards. El mismo abarca todas las etapas de elaboración
del sistema, y su rasgo distintivo es la formalización del
sistema mediante documentos, que deben ser cumplimentados en
determinado orden por los especialistas.
El principal inconveniente de estos sistemas
metodológicos fue la tendencia (inconsciente e
involuntaria, pero real) a documentar el sistema y no a
elaborarlo realmente: una tendencia burocrática que ha
lastrado la eficiencia de muchos buenos especialistas.
Dentro de la línea de la formalización,
deben mencionarse los intentos por representar algebraicamente
los procesos
informativos.
Paralelamente, el desarrollo electrónico no se
detiene. Aumenta la densidad de los
circuitos integrados. En 1970, se produce el primer RAM de 1024
bytes. Ello prepara la escena para la aparición, en 1971,
del primer microprocesador
comercial, el INTEL 4004, y la primera microcomputadora
.
Los pequeños cambios cuantitativos se suceden uno
tras otro hasta que su acumulación genera el cambio
cualitativo revolucionario: Steve, Wozniak y Jobs, diseñan
la Apple II y el mundo de la informática se conmociona,
surgiendo la cuarta generación. El impacto del Apple II
fue considerable. Por primera vez, la informática
salía de los centros de cálculo (técnicos
altamente especializados, cristales, jerga incomprensible, etc.)
para invadir las oficinas, los talleres, el aula y el
hogar.
Comenzaba, según muchos, la primera gran revolución
informativa desde Gutenberg. La potencia de
cálculo, la capacidad de memorización, pero sobre
todo la sencillez de manejo, el bajo consumo
energético, las posibilidades de trabajo en condiciones
ambientales normales y el bajo precio;
pusieron la computación al alcance de grandes masas no
especializadas en esas técnicas.
En este momento la electrónica ejecuta el segundo
paso, esta vez sobre seguro, pero a su
vez de muchas mayores dimensiones: IBM entra en el negocio de las
microcomputadoras con su serie IBM PC (en sus versiones PC, XT,
AT y posteriormente con el PS/2, éste último un
fracaso comercial). El mérito principal de esta serie ha
sido su capacidad de estandarizar la actividad del software: el
sistema operativo
MS-DOS se
convierte en norma internacional por la fuerza de la
transnacional gigante, lo cual crea el entorno de trabajo
necesario para el desarrollo de software utilitario a una escala
inmensa.
Esta enorme difusión ha propiciado varias
tendencias:
Grandes firmas de software concentran los mejores
especialistas y elaboran programas de alta complejidad
(utilitarios de diversos tipos, generadores de programas, etc.)
pero altamente amistosos, para propiciar su utilización
por personal no
informático.
Lo anterior hace que cada vez se difundan y resulte
más fácil la difusión de las
técnicas informáticas a personal no
especializado.
El empleo de estas técnicas por este tipo de
personas, ha motivado una alta utilización de las
computadoras en todas las esferas de la vida, así como el
diseño de sistemas caracterizados por:
- Espontaneidad e ineficiencia.
- Resultados rápidos pero
incompletos. - Participación mayoritaria de especialistas en
aplicaciones concretas y minoritaria de especialistas en
informática.
En este sentido, se están difundiendo algunos
sistemas que combinan las características y enfoques de
los métodos estructurados con las ventajas indudables de
la automatización.
Uno de los sistemas más conocidos es el
EXCELERATOR, paquete basado en las técnicas y símbolos que han propuesto Gane y Sarson en
su método estructurado, el cual permite automatizar un
volumen
considerable de tareas en el proceso de creación de un
sistema automatizado.
Este acelerado desarrollo técnico permitió
el acceso masivo al empleo de las técnicas digitales,
quedando a los especialistas el desarrollo de nuevos programas y
sistemas que faciliten y amplíen su utilización por
el creciente número de usuarios.
II. Computadoras analógicas y
digitales
El bosquejo histórico realizado evidencia que el
punto de partida de los sistemas de cómputo ha estado
asociado al procesamiento de números (sin importar su
procedencia), de ahí la importancia de una adecuada
selección de la notación
(representación de los números mediante conjuntos
de símbolos, entre las que pueden señalarse la
romana que utiliza símbolos alfabéticos
(I,V,X,L,C,D,M); la decimal que utiliza para la
representación caracteres numéricos
(0,1,2,3,4,5,6,7,8,9) y la binaria que caracteriza sus resultados
por dos estados (verdadero y falso).
Por otra parte es necesario señalar que los
números reflejan el comportamiento
del mundo físico, en el cual los fenómenos se
manifiestan de dos formas: continua (la transición de un
estado a otro del sistema se realiza de forma progresiva) y
discreta (la transición se realiza a saltos), lo que
motiva a pensar en dos tipos de sistemas computacionales
diferentes, cuya forma de trabajo se encuentre lo más
cercana posible a la realidad que refleja: analógico para
procesos continuos y digital para discretos, que brevemente se
describen a continuación.
La utilización progresiva de los tubos de
vacío en conjunción con otros dispositivos
permitió obtener circuitos que representan con buena
aproximación de forma continua la derivada o la integral
de una función
representada por las variaciones de voltaje a la entrada del
circuito. Este procedimiento
permitió la «solución» de ecuaciones
diferenciales, dando lugar a las computadoras
analógicas, en las cuales modificando adecuadamente
determinadas conexiones electrónicas o valores de
componentes discretos (resistencias y
condensadores)
es posible evaluar la influencia de una o varias magnitudes en el
sistema físico caracterizado por la ecuación
diferencial simulada.
La otra vertiente de los sistemas de cómputo, las
computadoras digitales, utilizan la notación en base
binaria, atendiendo a que cada dígito (denominado bit y
que se utiliza como unidad de información binaria),
dispone de dos estados (verdadero y falso) lo que facilita el
tratamiento de la información a través de elementos
electrónicos, pues cada estado puede asociarse con la
presencia o no de voltaje en un determinado
dispositivo.
La Matemática Binaria opera de la misma forma que
la decimal, excepto que el valor de cada
término (bit) sólo puede ser sólo 0 ó
1. En la tabla 1 se muestra la
correspondencia entre los valores
decimales y binario.
Tabla 1. Ejemplo de empleo de la notación
binaria
decimal | binario | decimal | binario | decimal | binario |
0 | 0 | 4 | 100 | 8 | 1000 |
1 | 1 | 5 | 101 | 9 | 1001 |
2 | 10 | 6 | 110 | 10 | 1010 |
3 | 11 | 7 | 111 | 11 | 1011 |
La forma más sencilla para comprender la
Matemática Binaria, es a través de la
realización de la una operación en ambos sistemas.
Sea la suma de los números 452 y 751:
452
+ 751
—–
1203
El procedimiento para sumar los dos números es el
conocido por todos: se comienza desde la derecha. 2 + 1 = 3. Sin
problemas. 5 + 5 = 10, se coloca el 0 y lleva 1. 4 + 7 + 1
(porque llevaba 1) = 12. Se coloca el 2 y lleva 1. 0 + 0 + 1 = 1.
Así que la respuesta es 1203.
La Matemática binaria funciona exactamente igual.
Sea la suma de los números binarios 010 (dos en decimal) y
111 (siete en decimal).
010
+ 111
—–
1001
Comenzando desde la derecha, 0 + 1 = 1 para el primer
dígito. No se lleva nada. 1 + 1 = 10 para el segundo
dígito, así que colocamos el 0 y se lleva 1. 0 + 1
+ 1 = 10 para el tercer dígito, así que colocamos
el 0 y llevamos 1. 0 + 1 + 1 = 10 para el tercer dígito.
Así que colocamos el 0 y llevamos 1. 0 + 0 + 0 + 1 = 1.
Por tanto, la respuesta es 1001. Si convierte todo esto a
decimales podrá ver que es correcto: 2 + 7 = 9.
Sin embargo, la notación binaria hace muy extensa
la representación de los números lo que dificulta
la operatoria a nivel de un usuario humano no experto como se
aprecia en los ejemplos siguientes: el número 16 se
representa como 1000 y el 255 como 11111111.
Los bits son raramente vistos en las computadoras. Estos
casi siempre se agrupan en colecciones de 8-bits, y esas
colecciones son llamadas bytes.
Por tanto se hace necesario compactar esta
representación, lo que dio lugar a dos bases derivadas: octal
(en desuso) y hexadecimal (empleada en la actualidad), que como
su nombre indica tienen como base el 8 y el 16 respectivamente.
En la tabla 2 se ilustra la representación de
números empleando estas bases.
Tabla 2. Ejemplo de empleo de la notación octal y
hexadecimal
decimal | octal | hexadecimal | decimal | octal | hexadecimal |
0 | 0 | 0 | 10 | 12 | A |
1 | 1 | 1 | 11 | 13 | B |
8 | 10 | 8 | 15 | 17 | F |
9 | 11 | 9 | 16 | 20 | 10 |
Aprovechando su capacidad de almacenamiento, los
caracteres alfanuméricos se asocian al valor de un byte,
lo que se conoce como código
ASCII, en el cual cada valor binario entre 0 y 127
está asociado un carácter específico. La
mayoría de las computadoras extienden los caracteres
ASCII para usar
un rango amplio de los 256 caracteres disponibles en un byte. Los
caracteres después del 128 ejecutan tareas especiales como
acentos para ciertos lenguajes. En el Anexo B de este trabajo se
muestran los 127 códigos ASCII estándar y los del
ASCII, extendido.
Cuando se habla de muchos bytes, se utilizan prefijos
tales como kilo, mega y giga, (kilobyte, megabyte y gigabyte
también abreviados a k, m y g o KB, MB y GB). La siguiente
tabla recoge la forma de cálculo de las cantidades de bits
y el prefijo correspondiente.
Tabla 3. Unidades binarias
prefijo | abreviatura | cantidad de bits | |
forma de cálculo | cantidad exacta | ||
Kilo | K | 1,024 | |
Mega | M | 1,048,576 | |
Giga | G | 1,073,741,824 | |
Tera | T | 1,099,511,627,776 | |
Peta | P | 1,125,899,906,842,624 |
Estos sistemas se desarrollaron de forma acelerada hasta
las actuales microcomputadoras, a partir de las posibilidades de
la microelectrónica, que a finales de los 70
permitió la fabricación de circuitos complejos
capaces de agrupar en un mismo dado semiconductor (circuitos
integrados) diversas estructuras requeridas por los sistemas de
cómputo, lo que redundó en un incremento de la
fiabilidad y reducción de las dimensiones, al mismo tiempo
que posibilitó la creación de una unidad central de
control estándar, lo que reporta beneficios en
términos de programación y una reducción en
los costos que
facilita el acceso masivo a esta técnica.
Como consecuencia de este desarrollo, tuvo lugar una
evolución y significativos avances en las técnicas
digitales (en la actualidad se emplean a gran escala en todas las
actividades de la ciencia y la
técnica como las comunicaciones, control de proceso industriales,
etc.) las cuales han permitido la asimilación progresiva
de los problemas solubles mediante las computadoras
analógicas reduciendo drásticamente la presencia de
éstas hasta su casi total desaparición.
III. Microelectrónica y sistemas de
cómputo
Considerando el impacto de la microelectrónica en
el rápido y sostenido desarrollo de las técnicas
digitales y lo frecuente del empleo de términos como
capacidad de memoria, microprocesador, etc. es conveniente
establecer el alcance real de éstos y su
vinculación con los dispositivos que componen el sistema
de cómputo.
En primer lugar es necesario diferenciar los
términos de microcomputadora de
microprocesador.
El microprocesador es un circuito integrado que agrupa
todos o casi todos los elementos que constituyen la Unidad
Central del Proceso (UCP), y es capaz de interpretar y ejecutar
una serie de operaciones (aritméticas, lógicas,
transferencia de control durante la ejecución de un
programa, entrada / salida de información de datos) en
código binario (0 y 1), así como dirigir al resto
de los componentes que constituyen el sistema; para lo cual
cuenta con la Unidad Aritmética – Lógica
y la Unidad de Control, en tanto el término
microcomputadora designa al sistema de cómputo en su
conjunto: teclado,
monitor, etc.,
que en la actualidad por la potencialidad de que disponen son
denominadas Estaciones de Trabajo.
Desde la aparición de estos sistemas se han ido
desarrollando diversos dispositivos que integran en mismo dado
semiconductor (chip) diversas funciones (no sólo para el
desarrollo de sistemas de cómputo), los cuales
independientemente del fabricante de procedencia exhiben dos
tendencias comunes: incrementar la velocidad en las operaciones
internas mediante la incorporación de técnicas de
microelectrónica avanzadas y el procesamiento
simultáneo (en paralelo) de mayor cantidad de bits, que se
conoce como palabra, de la cual la más conocida el es byte
(conjunto de ocho bits).
Otro tipo de dispositivo de gran impacto en la
ampliación de las posibilidades de los sistemas de
cómputo son las memorias
semiconductoras, las cuales se clasifican en dos grandes grupos:
permanentes y volátiles.
Las memorias semiconductoras permanentes, como su nombre
lo indica tienen la propiedad de
retener la información en ellas almacenada por tiempo
indefinido, o que permite utilizarla para el almacenamiento de
los programas o rutinas de control de un equipo o sistema. En la
práctica existen cuatro tipos atendiendo a las opciones de
grabación de la información:
- ROM (Read Only Memory; Memorias de lectura
solamente). Vienen programadas por el fabricante y no es
posible variar la información contenida. Se emplean para
almacenar códigos estándar como el utilizado para
la generación de caracteres
alfanuméricos. - PROM (Programmable ROM; Memorias programables de
lectura solamente). Pueden ser programadas en una oportunidad
por el usuario, pero resultan inservibles si se desea modificar
la información almacenada. Una de sus aplicaciones es la
sustitución de varios circuitos que generan una
combinación de salida a partir de una determinada
entrada. - EPROM (Erasable PROM; Memorias programables de
lectura solamente borrables). Pueden ser programadas en
reiteradas ocasiones, debido a que la información puede
ser borrada mediante el empleo de luz
ultravioleta. Generalmente se utilizan para almacenar el
programa conocido como BIOS de la
máquina, que es utilizado por el microprocesador para
administrar y controlar los recursos de que
dispone el sistema. - E2PROM (Electrically EPROM; Memorias
programables de lectura solamente borrables
eléctricamente). Tiene un funcionamiento semejante a las
EPROM, pero se diferencia de éstas en que el borrado de
la información almacenada se realiza aplicando un nivel
de voltaje determinado al dispositivo.
El otro tipo de memoria, las volátiles,
denominadas RAM (Random Access
Memory), a diferencia de las anteriores, permite al usuario
variar su contenido. Este tipo de componente se emplea en los
sistemas
digitales para almacenar los programas que se están
ejecutando y sus datos, ya que el acceso a la información
contenida en ellas es cerca de un millón de veces
más rápida que en un disco duro.
Desde el punto de vista del usuario es este tipo de memoria la
que limita las dimensiones del programa y la cantidad de datos
que pueden procesarse.
Finalmente, debe mencionarse otro tipo de dispositivo de
gran impacto en el desarrollo de los sistemas de cómputo:
los controladores. Estos componentes agrupan en un mismo
dispositivo los elementos electrónicos necesarios para
establecer los protocolos
requeridos para transferencia de datos entre los elementos de
entrada / salida (memorias RAM, disco duro, teclado, mouse, etc.) y
el microprocesador, incrementando la velocidad de
operación y fiabilidad del
sistema.
IV. Estructura de
los sistemas de cómputo
La organización interna de un sistema de
cómputo digital puede variar en dependencia de la
destinación o fabricante, no obstante lo cual existen
regularidades que son aplicadas casi sin
excepción.
Sin embargo, su complejidad hace necesario recurrir a
las analogías existentes entre éstos y otros
sistemas más conocidos los cuales facilitan la
comprensión del funcionamiento de las
microcomputadoras.
Para este propósito se seleccionó el ser
humano, atendiendo a que ha sido utilizado exitosamente con fines
similares en otros casos, entre los que puede señalarse
los vehículos automotores, donde incluso condujo a la
popularización de cambios en la denominación de
órganos como el de corazón
por «bomba» en franca alusión al dispositivo
de este tipo que existe en los automóviles y tiene
semejante función a la del corazón.
Por tanto, el primer paso para alcanzar este objetivo es la
división funcional del sistema analizado, el cual consta
de dos bloques fundamentales: equipos periféricos que permiten el intercambio de
información hombre /
máquina y la Unidad Central de Procesamiento (UCP) que se
encarga del control, administración de los recursos internos y
ejecución de las acciones
solicitadas por el usuario.
Los equipos periféricos pueden asociarse con
los sentidos
humanos, ya que conforman un sistema de recolección de
información (datos, solicitud de ejecución de
acciones, etc.) como se ilustra a continuación: un sistema
de multimedia (con
micrófono incluido) emula la recepción de
información a través del sentido de la
audición y la comunicación oral a partir de la
emisión de sonidos a través de las bocinas; las
cámaras digitales de video y el
escáner
pueden considerarse como los «ojos» de la
máquina pues permiten introducir información
gráfica o de texto directamente al sistema; una impresora es
equivalente al acto de escribir, en tanto el teclado y el mouse
pueden asociarse con el sentido del tacto pues reciben
información a partir «del contacto
físico» con el medio.
En la práctica, existe un elemento intermedio
llamado BUS a través del cual
se intercambia información entre la UCP y los dispositivos
de control
interno y los administradores de los sistemas
periféricos, que son conjuntos de señales
eléctricas (datos y comandos) que en
cada caso particular tienen una o varias funciones
específicas. En la analogía con el cuerpo humano,
los buses (existen gran cantidad de ellos) que permiten la
transferencia de información y energía dentro del
sistema de cómputo pueden homologarse con las vías
linfática y circulatoria, por donde circulan dos fluidos
corporales imprescindibles para la vida (linfa y sangre) pero que
no se mezclan, y cuando sucede es debido a una enfermedad que en
la máquina se traduce en una falla, en tanto los buses que
manejan los protocolos para el manejo e intercambio de
información y comandos con los periféricos tienen
su similar humano en los nervios y músculos del cuerpo
humano.
En cuanto a la información, una vez que llega a
la UCP se desencadenan diversos procesos, cuya complejidad hace
conveniente una nueva separación de actividades atendiendo
a sus dos funciones fundamentales: administración y control de los recursos
internos y ejecución de las acciones requeridas o
solicitadas a través de la interacción hombre /
máquina.
La administración de los recursos internos se
realiza por el microprocesador a partir de la estrategia
establecida en un programa llamado BIOS, que se encuentra
almacenado en la memoria
semiconductora permanente de la máquina y cuya finalidad
es resolver los conflictos
(cuando la máquina se vuelve inoperante es debido a la
ocurrencia de un conflicto no
resuelto) sin participación del usuario.
Por tanto, estas acciones resultan transparentes al
usuario, que percibe su existencia a través de las
«demoras» en la ejecución de acciones
solicitadas, de manera análoga al sistema
parasimpático de nuestro cuerpo que se encarga de las
funciones vegetativas (digestión, respiración, circulación etc.) y del
cual tenemos conciencia cuando
alguna de estas funciones se afecta a causa de una
enfermedad.
En cuanto a la función de intercambio de
información con el exterior y la ejecución de
acciones solicitadas, se realiza de la forma
siguiente:
Sé «copia» en la memoria RAM
el programa que contiene las acciones solicitadas, para
incrementar la velocidad de ejecución.
Ejecución por parte del microprocesador de la
secuencia de acciones previstas en el programa
«cargado». Durante este proceso se solicita la
información requerida si procede y se emiten los
reportes previstos al alcanzar determinados objetivos.
En cuanto a la ejecución de los programas es
conveniente señalar que en la actualidad se utiliza un
recurso electrónico con manejo estadístico: la
memoria caché. Esta memoria se manipula de forma
diferenciada por el microprocesador y en ella se encuentran
almacenadas las acciones que estadísticamente tienen mayor
probabilidad
de volver a ejecutarse, lo que contribuye a disminuir el tiempo
de acceso a la información por parte del procesador.
Continuando con la analogía de la computadora con el ser
humano, la memoria cache
es un enfoque semejante a la preparación de argumentos
para defender una tesis previa a
una discusión de la misma. En este caso cuando surgen
«imprevistos», entonces es necesario
«cargar» otros argumentos para enfrentarlos (nuevas
acciones en el caso de la máquina) lo que provoca en ambos
casos una demora mayor en la respuesta.
Como se ha visto, las computadoras digitales basan su
trabajo en señales eléctricas que transitan entre
dos niveles de voltaje, a los cuales se les asocian dos estados
lógicos (0: ausencia de voltaje; 1: presencia de un
determinado nivel de voltaje).
Sin embargo, este procedimiento para desarrollar
aplicaciones tiene varias desventajas:
La programación de sistemas voluminosos es
engorrosa y dificulta la puesta a punto y detección de
errores.
Resulta difícil de analizar, incluso por
quienes los elaboran cuando ha pasado un cierto período,
cuando es necesario realizar alguna modificación para
incorporar una nueva facilidad o corregir un error no detectado
durante su prueba.
Adicionalmente, es necesario una interfaz que administre
los recursos de la máquina y armonice las peticiones del
usuario al sistema, por lo cual en los sistemas de cómputo
existe una plataforma para este propósito: el Sistema
Operativo, el cual fundamenta su trabajo en el manejo y
utilización de archivos (ficheros) y la ejecución
de comandos.
En la actualidad se ha desarrollado para las
microcomputadoras un medio
ambiente, WINDOWS, que
pone a disposición del usuario los recursos de una manera
nemotécnica sencilla: iconos (rectángulos que
emulan teclas), que al ser seleccionados desencadenan la
operación o comando asociado al mismo.
En cuanto al otro elemento fundamental, los ficheros,
éstos pueden clasificarse en dos grandes
grupos:
Ficheros ejecutables. Están constituidos por
conjuntos ordenados de bits que contienen secuencias de
operaciones que pueden ser interpretados directamente por el
Sistema Operativo (código de máquina) y que el
usuario NO puede modificar. Su función es permitir al
usuario establecer y modificar los datos necesarios, así
como seleccionar entre los procedimientos
alternativos para resolver un problema o realizar directamente
una función específica para la cual fue
desarrollado. En esta categoría se incluyen los
lenguajes de computación (FORTRAN, PASCAL, BASIC, C),
procesadores de
texto (Word
Perfect, WORD), hojas de
cálculo (LOTUS, EXCEL),
sistemas para el manejo de bases de datos (DBASE, FOXPRO,
ACCESS),
archivos que conforman el Sistema Operativo, etc.
Ficheros de datos. Son aquellos ficheros que contienen
la información requerida por un programa para realizar
determinadas operaciones o brindar un resultado. Estos archivos
son creados por el usuario para almacenar información
mediante programas de propósito general (bases de datos,
hojas de cálculo, documentos de texto) o
específicos (programas de aplicaciones) que sólo
pueden ser modificados con el programa que los
creó.
Por su importancia merecen un tratamiento particular los
archivos ejecutables correspondientes a los lenguajes de
programación, los cuales permiten al usuario
establecer una estrategia para la ejecución de operaciones
y procesamiento de
datos (un plan de trabajo para la máquina) a partir de
la combinación de operaciones lógicas,
aritméticas y ruptura de secuencias condicionalmente y
cuyo resultado es un archivo
ejecutable (NO MODIFICABLE) que con iguales condiciones de
entrada conduce siempre al mismo resultado y que puede repetirse
«tantas veces como se quiera». Para alcanzar este
objetivo, cada lenguaje establece un conjunto de reglas
particulares para utilizar letras, números y
símbolos en la programación.
En cuanto al desarrollo de programas, es necesario
significar que al comienzo de la vida de una entidad se
desarrollan programas que parecen ser definitivos e inalterables,
pero poco a poco la realidad se hace sentir en forma de
modificaciones y reformas que van socavando su estructura
inicial. Esto conduce a que un programa incapaz o difícil
de ser modificado, hace que caiga en desuso y se abandona al cabo
de algún tiempo.
Bajo este punto de vista comenzó poco a poco un
marcado énfasis en las tareas de mantenimiento
de programas, es decir, su adaptación a los cambios tales
como: aumento de volumen en los datos y ficheros, cambios en la
organización de los ficheros y los reportes de resultados
finales o de operaciones intermedias, modificaciones en el
procesamiento de datos, etc.
Finalmente, es necesario significar que los archivos se
denotan mediante un nombre (hasta ocho letras en el Sistema
Operativo MS-DOS y prácticamente ilimitado en ambiente
WINDOWS) que se escoge de forma que permita identificar
fácilmente su contenido o destino y una extensión
(tres letras máximo) que permite identificar la
función o procedencia de un archivo y que constituye
«un sello de familia».
Así pueden señalarse diversas extensiones
predeterminadas, algunas de las cuales se muestran en la
siguiente tabla.
Tabla 4. Ejemplos de extensiones
predeterminadas
extensión | características |
DOC | Documento Word. |
XLS | Hojas de cálculo EXCEL. |
MDB | Base de Datos de ACCESS. |
DBF | Base de Datos de DBASE y FOXPRO. |
BMP | Es el formato que se utiliza para mostrar imágenes en el WINDOWS y debe |
GIF | Es un formato desarrollado para permitir la |
Nótese, que estas extensiones predeterminadas NO
deben utilizarse para denotar ficheros con otras funciones, pues
confunden a otras personas y ocasionan errores de
ejecución cuando se trata de trabajar con éstos
empleando programas específicos que manipulan este tipo de
información.
V. Solución de problemas empleando sistemas
de cómputo
Como se ha expresado, los sistemas de cómputo se
utilizan ampliamente hoy día en la solución de los
más diversos problemas de la ciencia, la ingeniería, la economía, etc.,
atendiendo a su versatilidad, facilidades de manipulación,
posibilidad de estas máquinas para trabajar a muy alta
velocidad, almacenar grandes volúmenes de
información y realizar con éstos largas y complejas
operaciones para «brindar soluciones
exactas».
Sin embargo, es importante resaltar que la computadora
«no resuelve el problema
planteado» sino que ayuda a explorar las
diferentes alternativas que el problema en cuestión
plantea al especialista, es decir, no podemos pensar en la
computadora brindando respuesta a preguntas como las siguientes:
¿Cómo construiré este nuevo equipo?,
¿Cómo trabajaría el sistema bajo una serie
de condiciones si se construye de esta forma?, ya que existen
diversas maneras de construir un equipo, hay varias condiciones
de operación a tener en cuenta y pueden obtenerse
resultados diferentes en dependencia de la valoración y de
las facilidades con que se pretenda dotar al equipo, algunas de
las cuales constituyen un compromiso para el
diseñador.
Por tanto, la computadora no puede enumerar las
consideraciones de diseño, especificar las condiciones de
operación que deben investigarse, determinar cuáles
son los resultados o plantear nuevas alternativas cuando existe
un compromiso entre ellas. La computadora puede ser útil
para predecir las consecuencias de nuestras decisiones en este
aspecto del problema, por lo cual antes de acometer el desarrollo
de un programa o evaluar la concurrencia de proveedores
deben evaluarse los aspectos siguientes:
¿Qué necesito?. La respuesta debe
incluir tipos y volumen de datos que deben procesarse y
almacenarse, qué se propone medir y qué tipos de
resultados se esperan y en qué forma resultan adecuados
para su interpretación, gráficos, tablas, etc. Es importante
señalar que esta evaluación no sólo debe responder
a las necesidades actuales, sino contemplar la
proyección futura.
¿Cómo se manipulan los datos?. El
formato utilizado para el almacenamiento de los datos tiene
especial importancia pues el empleo de variantes propias de un
fabricante limita o imposibilita según sea el caso, el
intercambio de información con otras aplicaciones
existentes. Otro aspecto de interés es la posibilidad de
conectar al sistema, a través de manipuladores
estándar como el puerto serie y PSB diversos
periféricos.
¿Cuán fácil de configurar y
utilizar es el programa de análisis?. El proveedor debe
suministrar un programa demostrativo que permita evaluar la
complejidad de configurar y utilizar el programa, antes de su
adquisición. Este demo debe disponer de datos, sino
reales, al menos lógicos que permitan evaluar en primera
instancia sus resultados.
¿Cómo se puede probar el programa?. Los
programas demostrativos no son muy útiles para este
propósito, pues tienen el énfasis en las
facilidades usuario y generalmente no tienen opciones que
permitan probar la fortaleza de operación. Es importante
determinar como el programa maneja los problemas de overflow,
divisiones entre cero y otras condiciones extremas, así
como el manejo simultáneo de gráficos de
distintos tipos, importación de datos y algoritmos
de procesamiento.
¿Qué características tiene la
documentación y el soporte técnico?. La
documentación debe disponer de un Manual de
Usuario y de una detallada descripción de las opciones del
menú. En cuanto al soporte técnico, éste
debe estar garantizado aún cuando se sustituye por una
nueva versión.
¿Puede programarse el sistema?. Un aspecto que
debe evaluarse es la disponibilidad de facilidades que permitan
conformar macro instrucciones para las tareas
periódicas.
¿Cuánto necesito conocer acerca del
análisis de datos?. En cualquier caso, deben estar
definido los elementos de procesamiento que se requieren, en
particular los algoritmos específicos de la actividad
que generalmente no se encuentran incorporados de oficio por
los proveedores en las aplicaciones, tales como tales como
Transformada de Fourier o Laplace,
solución de Sistemas de Ecuaciones
Diferenciales, etc.
¿Cuán flexibles son las salidas gráficas?. La presentación
gráfica de resultados es una manera ventajosa y por
tanto debe brindar las opciones que resulten sencillas para su
análisis.
¿Qué garantía de
devolución de pagos por rechazo ofrece el proveedor?.
Otro factor que reviste importancia cuando se va a determinar
la adquisición de un programa es la oferta de
alternativas de compensación o reembolso que establece
el proveedor en los casos de no-aceptación. Otra
variante que generalmente se presenta combinada con la anterior
es el tiempo de prueba de aceptación por parte del
usuario.
¿Qué beneficios obtengo por el empleo
del programa?. Habitualmente se analiza el costo de la inversión en términos de los
resultados esperados, pero en el caso de las aplicaciones
informáticas existen dos aspectos adicionales que deben
considerarse: seguridad y
costo de la adquisición de las versiones mejoradas y si
existe la seguridad de que éstas se realizarán,
así como el costo del total que representan las opciones
que existen en el programa y que no son útiles para la
aplicación.
Antes de concluir este aspecto, debe señalarse
que como parte de la etapa de concepción inicial de
cualquier programa, es necesario establecer las vías para
garantizar ka protección ante los errores en que puede
incurrir el operador del programa. LOS PROGRAMAS SON PARA
SER UTILIZADOS POR SERES HUMANOS QUE TIENEN PROBLEMAS Y SE
EQUIVOCAN.
El primer paso en el blindaje a los errores es
determinar cuáles son los posibles y cuáles son los
que se van a proteger, para lo cual es conveniente tomar en
consideración los siguientes factores:
- Errores que interrumpen la ejecución del
programa, como son las divisiones por cero, el cálculo
de logaritmos de números negativos, raíces
cuadradas de números negativos, etc. Este tipo de error
puede ser detectado, brindando opciones de recuperación
al usuario. - Los que conducen a resultados erróneos, que
son los que se cometen por falta de atención o insuficiente conocimiento
de los datos requeridos por el programa. El blindaje a estos
errores está casi exclusivamente en el sentido
común del usuario al evaluar los resultados y en
la revisión de los datos de partida que nunca
está de más. - Complejidad que reviste el blindaje. Una
detección de errores puede hacerse tan compleja como se
desee, pero no debe convertirse en el centro del programa.
Cuando un programa requiere de muchas protecciones generalmente
es que la interacción con el usuario no es la más
conveniente. En este caso debe evaluarse otro
método. - Errores que conllevan a la pérdida de
información, que tienen que ser implementados
siempre.
Entonces, ¿para qué sirve la
microcomputadora?. Para responder a esto es necesario aclarar que
«Resolver un problema» con una
computadora es un proceso mucho más complejo que el
trabajo que ejecuta la máquina y que en líneas
generales requiere de los pasos siguientes:
- Primer paso: Identificación del
problema y definición de objetivos. Consiste en
seleccionar un método general para la solución,
decidir qué combinaciones de objetivos cumplir y
especificar las condiciones que debe satisfacer. Igualmente
es imprescindible definir concretamente cuál resultado
se considera solución del problema. En este paso se
requiere de un conocimiento completo del problema y puede
resultar de poca ayuda la computadora. - Segundo paso: Modelación del
problema. Generalmente existen varias maneras de modelar un
problema entre las cuales debe escogerse una o desarrollar una
nueva cuando ninguna de las existentes satisface los objetivos
planteados. - Tercer paso: Análisis
numérico. La formulación matemática del
problema no es directamente traducible a la computadora, ya que
ésta sólo puede ejecutar operaciones
aritméticas y ejecutar decisiones simples. Esto implica
que las integrales,
ecuaciones de todo tipo deben ser expresadas en forma de
operaciones simples y es necesario evaluar los errores
inherentes a los datos y los introducidos por la máquina
con vistas a evitar que sean inútiles los
resultados. - Cuarto paso: Programación de la
computadora. Los procedimientos numéricos deben
establecerse como una serie de operaciones bien definidas, que
generalmente se realizan en dos pasos: concepción del
programa en un diagrama de
bloques funcionales, es decir, se establece la estrategia de
solución que permite expresar de forma más clara
lo que se quiere hacer, pero que no puede ser entendido por la
computadora. Una vez concluido este trabajo, se traduce a un
lenguaje de computación que si puede ser entendido por
la máquina que se conoce como programa en el cual se
define la secuencia de operaciones y las decisiones
condicionadas por el valor que tengan en ese momento
determinadas magnitudes del problema objeto de
solución. - Quinto paso: Verificación del
programa. Después de traducir el problema a un programa
debe verificarse con datos cuyos resultados sean conocidos o
permitan fácilmente determinar su veracidad y de esta
forma evaluar si el programa satisface los objetivos y
exigencias previstas. - Sexto paso: Utilización del
programa. La utilización del programa es el momento
donde se realizan combinaciones de datos
«coherentes» para obtener resultados
que permitan tomar decisiones certeras al enfrentar el problema
que resuelve el programa.
Como se aprecia, las computadoras digitales están
restringidas en sus operaciones a aquello que el hombre es capaz
de «decirle», por lo cual su principal ventaja radica
en la realización de estas operaciones a muy alta
velocidad y a procesar grandes volúmenes de
información «sin sufrir cansancio ni cometer
errores».
V.2 Soluciones
numéricas a problemas
Las respuestas numéricas a problemas es una de
las aplicaciones de gran difusión e importancia por la
cual merecen un tratamiento independiente.
En estas aplicaciones el aspecto de mayor importancia
radica en que los datos generalmente contienen errores y que se
originan en las cuatro áreas fundamentales siguientes y
que deben ser considerados al interpretar los resultados
obtenidos:
Errores por parte del operador durante el proceso de
incorporación de los datos al sistema. Este tipo de
error no puede ser ignorado. Si existen errores en los datos,
las soluciones o resultados que proporciona el sistema
serán inútiles en su totalidad o de manera
parcial, en dependencia de la magnitud del error. Esta
posibilidad hace que los resultados obtenidos deben ser
analizados críticamente y no confiar ciegamente en los
mismos. La revisión de los datos utilizados es una forma
de minimizar la presencia de este tipo de error.
Inherentes a la formulación del problema. El
procedimiento para reducir este tipo de error es mejorar el
modelo utilizado en la formulación del problema hasta
que el error a que conduce permita trabajar con los datos de
que se dispone y obtener resultados válidos.
Generalmente la precisión del modelo está
estrechamente relacionada con el
conocimiento existente del problema cuya solución se
acomete. Es importante señalar que este tipo de error
condiciona la validez de los resultados sin importar cuan
exactos sean los cálculos numéricos realizados
por la máquina.
Las relacionadas con la incertidumbre en la
determinación de los datos. Este problema es causado por
el error en los instrumentos de
medición utilizados, y su reducción se logra
empleando instrumentos de una calidad que
esté en correspondencia con la precisión
deseada.
Aquellas en que se incurre durante la
determinación numérica de la solución y
que se encuentran asociados a la representación
necesariamente aproximada en la computadora mediante un
número finito de dígitos de los números
reales tales como el resultado de la división de 2 entre
3, los números e y p , etc. y pueden ser de dos tipos:
Errores por truncamiento. Son los errores que
provienen del cálculo numérico de una
expresión cuando se desprecian a partir de un
término los restantes dígitos.
Errores por redondeo. Es el conocido por el hecho de
que los cálculos aritméticos casi nunca pueden
llevarse a cabo con una completa exactitud, ya que muchos
números que tienen una representación decimal
infinita deben ser expresados de forma finita.
Desde el punto de vista computacional, para reducir
estos errores, se emplean entre otras las siguientes
recomendaciones:
Cuando se van a sumar o restar números,
trabajar siempre con los números más
pequeños PRIMERO siempre que sea posible,
evitando la sustracción de dos números
aproximadamente iguales.
Una expresión a(b-c) puede escribirse como
ab-ac y (a-b)/c como a/c-b/c. Si hay números muy
cercanos entre paréntesis ejecutar la resta antes de la
multiplicación y la división.
Utilizar números de doble precisión
(utilizan mayor cantidad de bytes para representar los
números reales). Tiene el inconveniente de que requiere
de más capacidad de memoria RAM en el
sistema.
Para evaluar el impacto en los resultados del acarreo de
errores en una expresión o cálculos sucesivos, se
emplea el procedimiento de la propagación de
errores:
- Error absoluto. Es la diferencia existente entre el
valor "verdadero" de una magnitud y el obtenido de la
práctica, que matemáticamente se representa
mediante la expresión.
donde:
x : valor medido.
xr : valor verdadero.
d x :
error absoluto.
- Error relativo. Es el cociente obtenido de la
división del error absoluto y el valor verdadero, dado
mediante la expresión
A partir de la definición puede calcularse la
propagación del error en las operaciones
aritméticas que se muestran en la tabla 5.
Tabla 5. Propagación del error en las operaciones
fundamentales
Operación: | Magnitudes: | Error: |
suma / resta | x ± y | ± (d x + d y) |
multiplicación | xy | yd x + xd y |
división | x/y | » () |
V.3 Elementos de
programación secuencial
V.3.1 Recursos
generales disponibles
El desarrollo de cualquier lenguaje de
programación consta de varias etapas que abarcan desde
la definición de las características del lenguaje
hasta la implementación de una interfase que genera el
código de máquina a partir del programa elaborado
por el programador.
Existen tres tipos diferentes de interfaces destinadas a
este fin que son:
Ensambladores, que permiten programar directamente en
lenguaje de máquina y generan un programa en
código de máquina.
Intérpretes, que permiten desarrollar un
programa, creando un código intermedio. La ventaja de
estas interfaces es que hacen al intérprete
independiente de la máquina, pero no generan
directamente un código ejecutable, sino que debe ser
pasado por un traductor para su ejecución.
Compiladores, generan directamente un programa en
código de máquina a partir de las instrucciones
programadas.
No obstante estas diferencias, en todos los casos para
la elaboración de programas existen el conjunto de
regularidades siguientes:
Disponen de un conjunto de caracteres y
símbolos que en cada caso tienen una
interpretación diferente, algunos de los más
comunes se muestran en la tabla 6.
Tabla 6. Símbolos permitidos
Símbolo | Representación | Símbolo | Representación |
letras | A..Z, a..z | agrupación | ( ) [ ] |
dígitos | 0..9 |
|
|
Otro aspecto de importancia para la programación
empleando cualquiera de las interfaces antes descritos, es el
significado especial de algunas palabras (palabras reservadas),
las cuales NO PUEDEN SER UTILIZADAS PARA OTROS FINES QUE LOS
ASIGNADOS POR EL FABRICANTE y que suelen denominarse palabras
reservadas del lenguaje, un ejemplo de las cuales se relacionan
en la tabla 7.
Tabla 7. Ejemplos de palabras reservadas y su
significado.
Palabra reservada: | Significado: |
and | Expresa la operación lógica |
div | Indica la división entera de dos |
goto | Establece un salto en la secuencia de |
V.3.2 Estructuras para
la evaluación de alternativas
Esta estructura está concebida para permitir
seleccionar entre dos conjuntos de instrucciones cuál de
ellas ejecutar en dependencia de una condición
lógica preestablecida, como se muestra en los siguientes
ejemplos:
IF * profesor
escribe THEN ** los alumnos toman notas
ELSE ** los alumnos atienden
IF * pizarra llena THEN ** borrar
parcialmente
ELSE ** continuar escribiendo.
IF * terminó la clase THEN
** borrar la pizarra.
* : condición
** : secuencia de instrucciones.
Gráficamente, esta estructura puede ser
representada como se ilustra en la figura 1:
Es una generalización de la anterior, en el
sentido de que permite escoger entre un conjunto "infinito" de
caminos en dependencia de una condición que devuelve una
constante, a diferencia de la estructura IF…THEN…ELSE que
utiliza una sola condición lógica, como se aprecia
en los siguientes ejemplos:
CASE *alumno OF
** presente *** salida1
** ausente *** salida2
** llegó tarde *** salida3
** tiene trabajo fuera *** salida4
CASE * color
OF
** amarillo *** salida1
** morado *** salida2
** rojo *** salida3
ELSE ***salida4
* condición
** constante que devuelve el selector
*** secuencia de instrucciones que se ejecuta en cada
caso
En la figura 2 se muestra esquemáticamente el
modo de operación de esta estructura.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
V.3.3 Estructuras para
la ejecución reiterada de
acciones
Son diversos los ejemplos de problemas en los cuales se
requiere de repetir una cierta cantidad de veces determinadas
acciones, para lo cual en los lenguajes de programación
disponen básicamente de las tres estructuras que se
detallan a continuación.
Esta estructura se utiliza cuando un conjunto de
instrucciones debe repetirse un cierto número de veces que
se establece durante la ejecución del programa. El control
del número de ejecuciones puede efectuarse en forma
ascendente (TO) o descendente (DOWNTO) de uno en uno, como se
ilustra en los ejemplos siguientes:
FOR * primer alumno TO ** último alumno
DO
*** mostrar las notas de alumnos, una a una con pausa
para efectuar su lectura.
FOR * primer alumno TO ** último alumno
DO
*** sumar las notas de alumnos para calcular el promedio
de las calificaciones.
* condición de comienzo
** condición de terminación
*** secuencia de instrucciones
Desde el punto de vista gráfico esta estructura
puede representarse mediante la figura 3.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Esta sentencia es otra forma de repetir la
ejecución de un conjunto de instrucciones un número
de veces, pero que a diferencia del FOR…TO(DOWNTO)…DO se
ejecuta mientras se cumpla una condición preestablecida la
cual tiene que cumplirse en alguna ocasión, ya que en caso
contrario el programa cae en un lazo infinito. La
modificación de la condición se realiza como parte
de los resultados obtenidos en el conjunto de instrucciones que
se ejecutan repetitivamente, como en los ejemplos que se muestran
a continuación.
WHILE *no sea hora de receso DO ** desarrollo de la
clase
WHILE * receso DO **conversar con los
compañeros
* condición
** conjunto de instrucciones
Desde el punto de vista gráfico esta estructura
puede representarse mediante la figura 4.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
ES IMPORTANTE SEÑALAR QUE ESTA ESTRUCTURA
PREGUNTA SI SE CUMPLE O NO LA CONDICION ANTES DE EJECUTAR POR
PRIMERA VEZ EL CONJUNTO DE INSTRUCCIONES REPETITIVAS,
por tanto, es posible que la secuencia de instrucciones que
abarca nunca se ejecute.
Al igual que las dos últimas estructuras
descritas, permite realizar ciclos cuya cantidad de veces se
determina no por un número sino por una condición,
pero a diferencia del WHILE…DO esta estructura ejecuta el
conjunto de instrucciones una vez al menos y después
pregunta por la condición. A modo de ejemplos pueden
señalarse los siguientes:
REPEAT
* conversar con los compañeros
UNTIL ** termine el receso
REPEAT
* contar el número de bicicletas
UNTIL hora prefijada
* condición
** conjunto de instrucciones
Desde el punto de vista gráfico esta estructura
puede representarse mediante la figura 5.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Los lenguajes de programación disponen de
operadores, ya que durante la programación en cualquier
tipo de lenguaje es necesario realizar operaciones de tipo
aritméticas y lógicas y en dependencia del lenguaje
la representación de estos operadores varía. De
forma general puede decirse que existen los tres tipos de
operadores siguientes.
Una de las principales aplicaciones de los lenguajes de
programación es la solución de problemas
numéricos, los cuales llevan implícitamente la
realización de operaciones aritméticas las cuales
requieren de la definición de operadores de este tipo, tal
es el caso de los mostrados en la tabla 8.
Tabla 8. Operadores aritméticos
Operador | Función | Ejemplo |
+ | suma | a + b |
– | resta | a – b |
* | multiplicación | a * b |
/ | división real | a / b |
div | división de números | a div b |
mod | resto de una división entera | a mod b |
Otro tipo de operador de amplia utilización
durante la elaboración de un programa son los operadores
de relación, que nos permiten comparar dos o más
magnitudes, una variante de los cuales se muestran en la tabla
9.
Tabla 9. Operadores de relación
Para ver la tabla seleccione la
opción "Descargar" del menú superior
Son los que permiten durante la programación
escoger la realización de diversos conjuntos de sentencias
o instrucciones en dependencia del resultado de determinadas
proposiciones lógicas, que se basan en la Lógica
Preposicional, la cual se hace corresponder a cada átomo un
elemento del conjunto {V (verdadero),F (falso)}de acuerdo a las
siguientes funciones lógicas, que se recogen en la Tabla
10.
Tabla 10. Operadores lógicos
fundamentales.
Para ver la tabla seleccione la
opción "Descargar" del menú superior
* niega el resultado que existe al ser aplicado el
operador: si el valor es falso devuelve, verdadero y
viceversa.
** devuelve verdadero cuando alguna magnitud
lógica es verdadera.
*** devuelve verdadero cuando todas las magnitudes
lógicas involucradas en la operación son
verdaderas.
**** devuelve verdadero cuando una cualquiera de las
magnitudes lógicas difiere del valor de las restantes
operaciones y falso en alguna otra condición.
En la tabla 11 se muestran ejemplos de operadores
lógicos
Tabla 11. Operadores lógicos
Operador | Función | Ejemplo |
NO | negación | NO A |
O | "O" lógico | A O B |
Y | "Y" lógico | A Y B |
En la práctica, para llevar a cabo la
programación se requiere de otras facilidades, entre las
que pueden enumerarse las siguientes.
Constantes. Son magnitudes de tipo
numérico (fundamentalmente) que permiten manejar una
magnitud no con su valor sino con una representación
simbólica que facilita la comprensión del
programa. Por ejemplo puede definirse: pi=3.1415…; e=2.71…,
etc.
Tipos. Permite definir tipos de
estructuras de datos a partir de los estándares del
lenguaje, los cuales facilitan el manejo, almacenamiento y
acceso a la información. Por ejemplo puede definirse
que: la magnitud color, a la que pueda exhibir los valores,
rojo, verde, azul, magenta y cian; la magnitud animal puede
adoptar los valores gato, león, pantera, etc.
Variables. Constituyen las magnitudes
dinámicas de un programa y son las que reciben valores
durante la ejecución de éste, en dependencia de
los cuales se toman decisiones o se realizan nuevas
operaciones. Por ejemplo, puede definirse suma para almacenar
la suma de diversos números.
Funciones. Es una facilidad para
unificar un conjunto de instrucciones que se ejecuta en
diferentes partes del programa las cuales a partir de un
grupo de
datos realiza un conjunto de operaciones cuyo fin es obtener un
resultado que debe ser asignado a UNA VARIABLE para su
posterior uso en el programa.
V.3.6 Lenguajes de
programación de alto
nivel
Con el desarrollo de la computación han surgido
diversos lenguajes de programación los cuales responden en
algunos casos a necesidades específicas de determinadas
aplicaciones en tanto otros se corresponden con nuevas
técnicas de programación. Veamos algunos
ejemplos:
- Desarrollo de un nuevo concepto o una
nueva área de aplicación que demande su propio
lenguaje: cálculo numérico, FORTRAN y
aplicaciones aeroespaciales, FORTH. - A partir de las experiencias con un lenguaje y el
conocimiento de sus deficiencias como el COBOL a partir del
FLOWMATIC. - Es más fácil introducir nuevas
capacidades y cambiar de estilo con un nuevo lenguaje que
extender o modificar uno existente.
Definición de lenguaje de programación. Se
acostumbra denominar «lenguajes de programación o
lenguajes de alto nivel» independiente de la
máquina, a los lenguajes que disponen de un conjunto de
caracteres (finito) y reglas para combinar a éstos cuyas
características fundamentales son:
Se pueden escribir programas en él, lo que
lleva implícito que potencialmente se pueda instrumentar
un programa (compilador, traductor, intérprete) que haga
factible la ejecución de estos programas en una
computadora.
No es necesario el conocimiento del código de
máquina para programar en este lenguaje.
Existe facilidad para pasar de un programa escrito en
un lenguaje a otro lenguaje.
Existe una «explosión» de
instrucciones, es decir, a una instrucción en el lenguaje
le corresponden en general varias instrucciones de
máquina.
Su notación es más cercana al problema
original en que se quiere aplicar, en relación con el
código de máquina o ensamblador.
Se incorporan facilidades de diferentes lenguajes
combinados en uno más simple.
Es más fácil introducir nuevas
capacidades y cambiar el estilo con un nuevo lenguaje que
extender o modificar uno existente.
Hay preferencias personales y prejuicios con los
lenguajes que existen en cuanto a que puedan servir para el
propósito, por lo cual se diseña una
nuevo.
En la práctica se han desarrollado diversos
lenguaje de alto nivel como son los siguientes:
FORTRAN (FORmula TRANslator). Diseñado para el
cálculo numérico científico, es el primer
lenguaje de alto nivel, que abre las puertas de la
computación a muchos científicos e ingenieros
debido a:
Es el primer lenguaje de programación que
aprende mucha gente y eso crea hábitos.
Cualquier configuración de cómputo
tiene un compilador de FORTRAN.
Permite obtener un código de máquina
muy eficiente.
La existencia de una versión estándar
ha permitido un amplio uso de las bibliotecas.
COBOL (COmmon Business Oriented Languaje). Está
destinado al procesamiento de datos, fundamentalmente
económicos y es ampliamente utilizado. Existe
también una versión estándar y presenta la
posibilidad de segmentación de programas.
ALGOL (ALGOrithmic Languaje). Se desarrollaron dos
versiones ALGOL-60 y ALGOL-68 y constituye uno de los primeros
intentos de disponer de un lenguaje de propósito
universal.
LISP (LISt Processing). Desarrollado por John Mac
Carthy y el grupo de Inteligencia
Artificial del MIT a finales de los años 50 y
principios de los 60, que ha sido mal llamado lenguaje para el
procesamiento de lista, ya que su objetivo no es el de procesar
listas sino que la forma de representar los datos e
instrucciones y de procesar éstos es a través de
listas. Es el primer lenguaje que da una formalización a
su semántica.
PASCAL. El nombre de este lenguaje rinde homenaje a
uno de los fundadores de la computación, el
físico y matemático francés Blaise Pascal
(1623-62), y su característica fundamental es disponer
de potentes estructuras.
En la práctica las causas de la popularidad de un
lenguaje están generalmente asociadas a que el lenguaje es
conveniente para una clase significativa de problemas, existen
buenos compiladores desarrollados para ese lenguaje, el "snob" de
algunos de utilizar un nuevo lenguaje, la importancia de nuevos
conceptos introducidos con el lenguaje y el prestigio personal de
quienes participan en el desarrollo del lenguaje.
Por tanto, los criterios para seleccionar un lenguaje
deben ser lo más objetivos posibles ya que en general
todos los lenguajes tienen sus posibilidades y sus insuficiencias
y pueden emplearse muchos criterios para seleccionar un lenguaje
de programación para una aplicación
determinada:
Claridad, sencillez y consistencia de los aspectos del
lenguaje.
Claridad en su estructura (facilidad para comprender
el programa y modificarlo).
naturalidad de las instrucciones (con relación
al tipo de tareas en que se desea utilizar).
facilidades de extensión.
aseguramiento externo. Estar en un Sistema Operativo y
régimen de trabajo, tener la posibilidad de trabajar
interactivamente o con ficheros, tener una buena
documentación y un buen editor. Estos elementos pueden
convertir a un lenguaje débil en poderoso.
Efectividad en: compilación, que incluye
velocidad de compilación, tamaño del compilador,
etc.; en la ejecución del programa, que evalúa la
velocidad y tamaño del programa ejecutable y en el uso
de bibliotecas.
conocer una amplia gama de lenguajes para poder
escoger adecuadamente.
No obstante, debe tenerse en cuenta el siguiente
principio: «Con un lenguaje poderoso se pueden hacer muy
malos programas».
V.3.7 Elementos de
programación estructurada.
A partir de la década del 70 cobró
especial importancia alcanzar incrementos en la productividad de
la programación, debido a las reducciones en costo de este
tipo de instalación y el surgimiento y desarrollo
explosivo de las computadoras personales.
En primer término debe señalarse que las
primeras versiones de los programas inicialmente parecen ser
definitivas e inalterables, pero poco a poco la realidad se hace
sentir en forma de modificaciones y reformas (en muchos casos
verdaderos «parches») que van socavando la estructura
inicial de los programas.
El iniciador de la línea de investigación de programación
estructurada fué el profesor Edeser W. Dijkstra de la
Universidad de
Eindhoven, existiendo en la actualidad otros métodos como
el de Bertini Jackson y las Leyes de Construcción de
Programas de Jean Dominique Warnier.
Si un programa brinda pocas facilidades para sufrir
modificaciones, entonces su poca flexibilidad hace que caiga en
desuso al cabo de poco tiempo. Bajo este punto de vista se
acentúa cada vez más la importancia del
mantenimiento de un programa, es decir, su adaptación
continua a los cambios tales como: aumento de la cantidad y
extensión de los datos, cambios en la organización
de los ficheros; pasar los ficheros a bases de datos; cambios en
los formatos de los reportes de resultados y cambios en el
equipamiento.
Las modificaciones hay que esperarlas y, sino desearlas
por o menos ser capaz de vivir con ellas. CON EL PASO DEL
TIEMPO PUEDE RESULTAR NECESARIO TODO EL PERSONAL PARA EL
MANTENIMIENTO DE PROGRAMAS LO CUAL CREA SIN DUDAS UNA SITUACION
LIMITE.
En este sentido G. Winnberg planteó que es
importante leer programas, aunque existen otros tipos de lecturas
más amenas, se puede aprender mucho de esta
lectura.
Como consecuencia de todo lo antes expresado un programa
no debe escribirse en la creencia de que sólo lo va leer
el compilador, sino también una persona (incluso
uno mismo), ya sea con el fin altruista de aprender, o con el
más preciso de modificar o adaptar el programa a una nueva
necesidad, por tanto evite las sentencias complejas.
Para el mantenimiento de un programa resulta esencial
que éste se pueda leer y comprender con facilidad, con el
fin de que sea fácil introducir cambios, sin tener que
comenzar nuevamente una puesta a punto de igual o mayor
importancia que la realizada al programa original.
Con el inicio de la década del 70 el campo de la
programación ha sido objeto de constantes estudios para
mejorar los resultados de la programación modular que
condujeron a la Programación Estructurada cuyo iniciador
fué el profesor Edeser W. Dijkstra de la Universidad de
Eindhoven.
De la Programación Estructurada es difícil
dar una definición exacta, ya que no existe una
universalmente aceptada, no obstante lo cual si hay acuerdo en
que la programación estructurada es todo diseño de
programa que cumpla con los aspectos siguientes:
- Estructuras básicas:
- Secuencias. Conjunto ordenado de instrucciones que se
repiten un mismo número de veces en el mismo lugar del
programa. Cada secuencia termina en una bifurcación o va
seguida de un enlace. - Alternativas. Conjunto ordenado de instrucciones que
se ejecuta en dependencia de que se cumpla o no determinada
condición. Cada alternativa puede tener un solo camino
en dependencia del valor que tomó la condición,
el resto de los caminos quedan excluidos. - Repetitivas. Conjunto ordenado de instrucciones que
se repiten mientras o hasta que se cumpla determinada
condición.
Recursos abstractos. Es la descomposición en
niveles de un problema ajeno a la computadora y sus
instrucciones. Esta descomposición en niveles debe
hacerse conforme a esquemas suficientemente simples y bien
comprendida.
Razonamiento deductivo de arriba hacia abajo. Es una
marcha analítica reflejada en niveles o pasos
consecutivos que poseen sus propios recursos abstractos y que
permiten resolver el problema por completo.
En la práctica son de utilidad las
siguientes recomendaciones: utilizar nombre con significado
claro, estándar; emplear paréntesis para evitar
ambigüedades; evitar los trucos con el lenguaje; buscar la
eficiencia donde sea necesaria; en los sistemas complejos los
algoritmos más simples son los mejores; comentar para
responder a las preguntas de los lectores, y si es necesario el
significado de TODAS LAS VARIABLES;
no utilizar una variable para más de un
propósito; el empleo del salto incondicional no
está prohibido, lo que no debe utilizarse para sustituir
el empleo de las estructuras del lenguaje; los ficheros
lógicos se diseñan siguiendo una
organización jerárquica que permite ir del
conjunto al elemento, de lo general a lo particular.
El PASCAL surge como una herramienta para la enseñanza de prácticas de "buena
programación", es un lenguaje de propósito general,
estructurado de forma clara y sencilla. La primera versión
del PASCAL aparece en 1968 desarrollada por Niklaus Wirth,
profesor del Instituto Tecnológico de Zurich, Suiza. Sus
objetivos eran obtener una herramienta que mantuviera un
pequeño número de conceptos fundamentales de la
programación útiles para enseñar la
programación como una disciplina lógica y
eficiente.
Es realmente numerosa la cantidad de implementaciones
del PASCAL que se reportan, por lo cual mencionaremos sólo
algunas:
PASCAL/Z, creado por la Ithaca Intersystem.
PASCAL/M, creado por la sorcim.
PASCAL 6000, implementado para utilizarse en el
sistema operativo CDC 6000.
PASCAL 80, para el sistema TRS-80 modelos del
I al III.
MP/PASCAL de la "Data General" para su Sistema
MICRONOVA.
NBS PASCAL, para la mini computadoras
PDP-11.
ATARI PASCAL. para ATARI 800.
RSI y Mototrola PASCAL, para procesadores
68000.
Cllor PASCAL de la "Dinisot".
UCSD PASCAL. Este sistema en sus inicios fué
diseñado para correr en mini micromputadoras,
suministrado por la Softech Microsystem Inc. y comprende un
sistema Operativo completo que puede correr sobre una variedad
de procesadores e incluye un manipulador de ficheros, un editor
orientado a caracteres, un compilador de una pasada que genera
código P, un macro ensamblador condicional, un enlazador
y una biblioteca
de utilitarios.
PASCAL MT+. Este sistema fué desarrollado por
la Digital Research, diseñado tanto para las
aplicaciones de procesamiento de datos como para control en
tiempo real. Este sistema incluye un compilador, un enlazador,
un macro ensamblador, un monitor de puesta apunto y una
biblioteca.
TURBO PASCAL, desarrollada por la Borland
International.
Borland Delphy, es la versión de
programación en Pascal en Objeto.
V.3.8 Elementos de
programación orientada a
objetos
Es una forma de programación, en la cual el
desarrollo del programa se realiza a partir del trabajo de
estructuras llamadas objetos, las cuales están disponibles
en el lenguaje de programación.
Esta forma de trabajo se fundamenta en las ventajas de
que una vez creado el objeto, este puede ser utilizado en
reiteradas ocasiones con lo cual se gana tiempo y
estandarización en los programas, lo cual se traduce en
incremento en la productividad..
VII. Inteligencia Artificial
(*)
VII.2 Formas de
Representación del conocimiento
VII.2.1
Representación del conocimiento por vías
tradicionales
VII.2.2
Representación del conocimiento por vías no
tradicionales
VII.2.3 Pasos en la
construcción de Sistemas de
Aplicación
VII.2 Lógica y
Programación Lógica
VII.3.3
Características del desarrollo de
SE
VII.3.4
Clasificación de los Sistemas
Expertos
VII.4 Redes
Neuronales
VIII. Redes de computadoras
(*)
VIII.2 Razones para
utilizar una red local
VIII.3 Topología de la red
Anexo A.
Términos y definiciones.
(*)Para ver el texto completo
seleccione la opción "Descargar" del menú
superior
Autor:
Lic. Jesús de la Caridad Mesa
Oramas