Professional Documents
Culture Documents
Licenciatura en Informática
Unidad 1
Introducción
Modelo Von Newman
Su diseño básico, ahora conocido como el Modelo o Máquina de Von Neumann, arquitectura que
no fu la primera en aparecer, sí lo hizo prácticamente desde el comienzo de los ordenadores y se
sigue desarrollando actualmente.
El modelo de von Newman es la base de las arquitecturas de los ordenadores actuales.
Los ordenadores con esta arquitectura constan de cinco partes: La unidad aritmético-lógica
o ALU, la unidad de control, la memoria, un dispositivo de entrada/salida y el bus de datos
que proporciona un medio de transporte de los datos entre las distintas partes.
Un ordenador con esta arquitectura realiza o emula los siguientes pasos secuencialmente:
Tabla de contenidos
Las siguientes son las etapas que se deben cumplir para resolver con éxito un problema de
programación:
Está dada por el enunciado del problema, el cuál debe ser claro y completo. Es importante que
conozcamos exactamente que se desea del computador; mientras qué esto no se comprenda, no
tiene caso pasar a la siguiente etapa.
Entendido el problema (que se desea obtener del computador), para resolverlo es preciso analizar:
Los datos o resultados que se esperan.
Los datos de entrada que nos suministran.
El proceso al que se requiere someter esos datos a fin de obtener los resultados esperados.
Áreas de trabajo, fórmulas y otros recursos necesarios.
4.- DIAGRAMACIÓN
Una vez que sabemos cómo resolver el problema, pasamos a dibujar gráficamente la lógica de la
alternativa seleccionada. Eso es precisamente un Diagrama de Flujo: la representación gráfica de
una secuencia lógica de pasos a cumplir por el computador para producir un resultado esperado.
La experiencia nos ha demostrado que resulta muy útil trasladar esos pasos lógicos planteados en
el diagrama a frases que indiquen lo mismo; es decir, hacer una codificación del programa pero
utilizando instrucciones en Español. Como si le estuviéramos hablando al computador. Esto es lo
que denominaremos Algoritmo o Pseudocódigo.
Cuando logremos habilidad para desarrollar programas, es posible que no elaboremos el diagrama
de flujo; en su lugar podremos hacer directamente el pseudocódigo del programa.
Para cerciorarnos de que el diagrama (y/o el pseudocódigo) esta bien, y, para garantizar que el
programa que codifiquemos luego también funcione correctamente, es conveniente someterlo a
una Prueba de Escritorio. Esta prueba consiste en que damos diferentes datos de entrada al
programa y seguimos la secuencia indicada en el diagrama, hasta obtener los resultados. El análisis
de estos nos indicará si el diagrama esta correcto o si hay necesidad de hacer ajustes (volver al
paso 4). Se recomienda dar diferentes datos de entrada y considerar todos los posibles casos, aun
los de excepción o no esperados, para asegurarnos de que el programa no producirá errores en
ejecución cuando se presenten estos casos.
6.- CODIFICACIÓN
Una vez que hayamos verificado el diagrama mediante las pruebas de escritorio, codificamos el
programa en el lenguaje de computador seleccionado. Esto es, colocamos cada paso del diagrama
en una instrucción o sentencia, utilizando un lenguaje que el computador reconoce.
Todos los lenguajes de programación proveen facilidades para incluir líneas de comentarios en los
programas. Estos comentarios aclaran lo que se ordena al computador y facilitan entender el
programa. Puesto que estos comentarios no son tenidos en cuenta como instrucciones, y
aparecen en los listados del programa, resulta muy conveniente agregar abundantes comentarios
a todo programa que codifiquemos. Esto es lo que se denomina Documentación Interna.
El programa codificado es necesario que lo llevemos a un medio que sea aceptado como entrada
por el computador: lo perforamos en tarjetas, lo grabamos en un disco flexíble o lo grabamos en
un disco duro. Este programa es el que se conoce como Programa Fuente (Source).
8.- COMPILACIÓN
1.4 Editores
Situación
El uso de logos u otros ítems para ser usados en cualquier documento se puede volver engorroso
con los métodos tradicionales.
Recomendación
Windows XP tiene una característica que permite personalizar logos o cualquier otro ítem para ser
utilizado en cualquier documento. El Editor de Caracteres Privados (Private Character Editor) se
puede acceder en digitando “Eudcedit” sin las comillas en la ruta Inicio/Ejecutar
Una vez haya construido y guardado el diseño de su selección, puede accederlo a través del Mapa
de Caracteres, al cual se llega por la ruta
Inicio/Todos los programas/Accesorios/Mapa de caracteres
El editor más frecuente en Unix es vi. Es un editor que trabaja línea a línea y que muestra
una pantalla de texto a la vez.
Para iniciar una sesión de edición, se ejecuta el programa vi seguido del nombre del archivo
a editar, y dado el caso también la trayectoria. Por ejemplo, para editar el arvhivo
/tmp/borrame, basta con dar vi /tmp/borrame, o para editar un archivo en el directorio
actual: vi borrame.
Al ser ejecutado vi, presenta una pantalla con el texto del archivo, y las líneas después del
final del archivo aparecen con el carácter ~ para indicar que a partir de ahí el archivo está
vacio. Obviamente, si comenzamos a editar un archivo nuevo, todas las líneas aparecerán
con éste carácter.
En el modo edición, las instrucciones para mover el cursor en del texto son:
comando se desplaza:
l un espacio a la derecha
h un espacio a la izquierda
j una línea hacia abajo
k una línea hacia arriba
$ al final de la línea
^ al principio de la línea
w a la siguiente palabra
e al final de la palabra
b al principio de la palabra
) al final de la frase
( al inicio de la frase
{ al inicio del párrafo
} al final del párrafo
n| a la columna n-ésima
H a la primera columna de la primera línea de la ventana
L a la primera columna de la última línea de la ventana
nG a la primera columna de la n-ésima línea del archivo Para el control de la parte
del texto que se despliega en la pantalla:
instrucción acción:
Cuando vi esta en modo de edición, para cambiarse a modo inserción se hace con el
carácter i y se posiciona antes del cursor y con a después de éste. Con Esc se cambia a
modo edición de nuevo.
Existen además de vi otros editores para Unix, incluso más poderosos que él, pero esto
depende de cada implementación de Unix. vi y ex (que por ser algo más limitado, no
trataremos aquí) son los únicos que se garantiza que se pueden encontrar en cualquier
instalación de Unix. Entre los editores más populares se encuentra Emacs, pero cuenta con
un conjunto de instrucciones realmente complejo, lo cual forma parte de su tradición de ser
para usuarios avanzados.
ahora la pantalla se limpia y aparecen varios renglones con tildes en el márgen izquierdo y
en la parte inferior izquierda aparece el mensaje ¨cordero.txt¨ [New file], que indica que se
esta creando un archivo nuevo.
En este momento nos encontramos en el modo de edición con el cual podemos iniciar la
captura del texto. Para esto damos la instrucción i y nos pasamos a modo inserción. Ahora
podemos escribir cualquier texto que necesitemos.
Cuando se tengan un par o más párrafos podemos ejercitar algunas de las instrucciones para
movernos por el texto y para realizar búsquedas e incluso reemplazos.
En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área
específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como
lenguajes procedimentales.
Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de
programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de alto
nivel se crearon para que el usuario común pudiese solucionar un problema de
procesamiento de datos de una manera más fácil y rápida.
Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de
programación que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas.
Estos lenguajes se llaman de tercera generación o de alto nivel, en contraposición a los de
bajo nivel o de nivel próximo a la máquina.
Ventajas e inconvenientes
Ventajas
Inconvenientes
Se dice del lenguajes de programación como C, que se encuentran entre los lenguajes de
alto nivel y los lenguajes de bajo nivel. Estos lenguajes son clasificados muchas veces de
alto nivel, pero permiten ciertos manejos de bajo nivel. Son precisos para ciertas
aplicaciones como la creación de sistemas operativos, ya que permiten un manejo abstracto
(independiente de la máquina, a diferencia del ensamblador), pero sin perder mucho del
poder y eficiencia que tienen los lenguajes de bajo nivel.
Una característica distintiva, por ejemplo, que convierte a C en un lenguaje de medio nivel
y al Pascal en un lenguaje de alto nivel es que en el primero es posible manejar las letras
como si fueran números (en Pascal no), y por el contrario en Pascal es posible concatenar
las cadenas de caracteres con el operador suma y copiarlas con la asignación (en C es el
usuario el responsable de llamar a las funciones correspondientes).
La palabra “bajo” no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se
refiere a la reducida abstracción entre el lenguaje y el hardware. Uso: ventajas e
inconvenientes.
Primera generación
Segunda generación
Compilador:
Es un programa que traduce los programas escritos en lenguajes de alto nivel a lenguaje
máquina.
C
C++
Pascal
FORTRAN
COBOL
y compiladores.
Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a otro
lenguaje, generando un programa equivalente independiente, que puede ejecutarse tantas
veces como se quiera.
• El lenguaje en que está escrito el propio compilador (LC), que puede ser igual o diferente
a uno de los otros dos.
Los programas interpretados suelen ser más lentos que los compilados, pero los intérpretes
son más flexibles como entornos de programación y depuración. Comparando su actuación
con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de
un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete
corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar
constancia por escrito.
¿Qué es un compilador?
Un traductor es cualquier programa que toma como entrada un texto escrito en un lenguaje,
llamado fuente y da como salida otro texto en un lenguaje, denominado objeto.
Compilador
El compilador tiene una visión global del programa, por lo que la información de mensajes
de error es mas detallada. Ventajas del intérprete frente al compilador:
Clasificación de Compiladores
• una sola pasada: examina el código fuente una vez, generando el código o programa
objeto.
• Pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje,
y una pasada final para producir y optimizar el código producido durante los pasos
anteriores.
• Optimación: lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el
programa.
• Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez
de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro
tipo de compiladores requiere que todos los enunciados o instrucciones se compilen
conjuntamente.
• Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de
la que se está utilizando para compilar. Es perfectamente normal construir un compilador
de Pascal que genere código para MS-DOS y que el compilador funcione en Linux y se
haya escrito en C++.
Funciones de un compilador
Una clasificación muy importante de los lenguajes es la de hacer dos grupos en base a su
funcionamiento, esto es considerarlos como intérpretes y compiladores, según se describe
seguidamente.
Un lenguaje se dice que es un intérprete, por ejemplo los BASIC, cuando para ejecutar un
programa el lenguaje ha de leer y traducir al lenguaje de la máquina las instrucciones una
Por contra un lenguaje se dice que es compilado, cuando el programa entero se traduce
mediante el compilador de dicho lenguaje al lenguaje máquina correspondiente y el
resultado se almacena de manera permanente en un archivo. De esta forma el programa se
ejecutará de forma mucho más rápida que con un intérprete, sobre todo si hay estructuras
que se repiten, caso de los ciclos. La principal desventaja es cuando se produce un error,
que muchas veces se detecta en el momento de la ejecución , y la corrección no se puede
hacer de inmediato, sino que hay que realizar todo el proceso de compilado desde el
principio. Un ejemplo típico de lenguaje de este tipo el C ++, ampliamente usado en el
desarrollo de programas.
2. Este programa fuente es invocado por la primera etapa del compilador, que efectúa un
análisis léxico, se puede considerar como una interpretación del programa fuente
preparándolo para un tratamiento posterior con detalle. En esta etapa se ejecutan los tres
procesos indicados seguidamente:
Tratar las palabras clave y los símbolos para su paso a símbolos clave, conocido como
“tokens”
4. El paso siguiente es la generación de código, conocido como objeto Para ello se recorre
el código intermedio generado y se busca cada uno de los “tokens” en el diccionario, lo que
permite insertar las direcciones en el código máquina que se está generando.
6. Normalmente hay una etapa posterior conocida como “linkado “ en la que el o los
módulos objetos generados previamente se unen entre sí y/o con otros módulos disponibles
en librerías, para formar un fichero que contiene un programa ejecutable directamente
desde el sistema operativo, sin necesidad de disponer del compilador correspondiente.
Incluso se pueden unir programas escritos en lenguajes distintos si los módulos objeto
creado se han estructurado de forma adecuada. En cualquier fase del proceso pueden
detectarse errores que se podrán de manifiesto, implicando el volver hasta el programa
fuente, efectuar las correcciones pertinentes y repetir todo el proceso, lo cual suele ser algo
laborioso.
repetir
leer instrucción
ejecutar instrucción
hasta el fin
Así, mientras un intérprete toma las instrucciones del programa fuente y las traduce y
ejecuta a lenguaje máquina una a una, un compilador realiza la traducción completa del
programa fuente a código máquina, sin ejecutarlo, siendo posteriormente cuando se ejecute
el programa una vez compilado.
• La ejecución es más lenta, pues cada instrucción debe ser traducida a código máquina
tantas veces como sea ejecutada.
No obstante, los intérpretes comparten muchas de sus operaciones con los compiladores, y
ahí pueden incluso ser traductores híbridos, de manera que quedan en alguna parte entre los
intérpretes y los compiladores. Existen lenguajes cuyos traductores se idearon como
intérpretes y otros como compiladores. No obstante, para un lenguaje dado, pueden existir
tanto compiladores como interpretes.