1.- ¿En que se basa el modelo de John Von Neumann?
Observo que la torpeza de la aritmética decimal utilizadas en la computadora ENIAC podia remplazarse utilizando la aritmatica binaria.
Realizo un diseño básico llamado la máquina de Von Newman y se utilizo en la computadora EDVAC que fue la primera computadora que almacenaba el programa.
La máquina de Von Newman tenía 5 partes principales y son las siguientes:
LA MEMORIA: Constaba de 4096 palabras cada una de 40 bits cada palabra podía contener 2 instrucciones de 20 bits cada una o un número entero de 39 bits y su signo.
UNIDAD DE CONTROL: Es la que supervisaba la transferencia de información y la indicaba a la unidad aritmética lógica cual operación debía ejecutar.
UNIDAD DE ARITMATICA LÓGICA: Es aquella que se encarga de realizar las operaciones aritméticas y lógicas necesarias para la ejecución de una instrucción.
ENTRADA: Es cualquier dispositivo por el que se introduce información a la computadora.
SALIDA: Es cualquier dispositivo que recibe información de la máquina para ser utilizadas por el usuario. 
2.- ¿Cuales son los lenguajes formales y sus características principales?
En matemáticas, lógica, y ciencias de la computación, un lenguaje formal es un lenguaje cuyos símbolos primitivos y reglas para unir esos símbolos están formalmente especificados. Al conjunto de los símbolos primitivos se le llama el alfabeto (o vocabulario) del lenguaje, y al conjunto de las reglas se lo llama la gramática formal (o sintaxis). A una cadena de símbolos formada de acuerdo a la gramática se la llama una fórmula bien formada (o palabra) del lenguaje. Estrictamente hablando, un lenguaje formal es idéntico al conjunto de todas sus fórmulas bien formadas. A diferencia de lo que ocurre con el alfabeto (que debe ser un conjunto finito) y con cada fórmula bien formada (que debe tener una longitud también finita), un lenguaje formal puede estar compuesto por un número infinito de fórmulas bien formadas.
Por ejemplo, un alfabeto podría ser el conjunto {a,b}, y una gramática podría definir a las fórmulas bien formadas como aquellas que tienen el mismo número de símbolos a que b. Entonces, algunas fórmulas bien formadas del lenguaje serían: ab, ba, abab, ababba, etc.; y el lenguaje formal sería el conjunto de todas esas fórmulas bien formadas.
Para algunos lenguajes formales existe una semántica formal que puede interpretar y dar significado a las fórmulas bien formadas del lenguaje. Sin embargo, una semántica formal no es condición necesaria para definir un lenguaje formal, y eso es una diferencia esencial con los lenguajes naturales.
3.- ¿Qué son los editores y para que sirven?
Un editor de texto es un programa que permite crear y modificar archivos digitales compuestos únicamente por texto sin formato, conocidos comúnmente como archivos de texto o texto plano. El programa lee el archivo e interpreta los bytes leídos según el código de caracteres que usa el editor. Hoy en día es comúnmente de 7- ó 8-bits en ASCII o UTF-8, rara vez EBCDIC.
Por ejemplo, un editor ASCII de 8 bits que lee el número binario 0110 0001 (decimal 97 ó hexadecimal 61) en el archivo lo representará en la pantalla por la figura a, que el usuario reconoce como la letra "a" y ofrecerá al usuario las funciones necesarias para cambiar el número binario en el archivo.
Los editores de texto son incluidos en el sistema operativo o en algún paquete de software instalado y se usan cuando se deben crear o modificar archivos de texto como archivos de configuración, scripts o el código fuente de algún programa.
El archivo creado por un editor de texto incluye por convención en DOS y Microsoft Windows la extensión .txt, aunque pueda ser cambiada a cualquier otra con posterioridad. Tanto Unix como Linux dan al usuario total libertad en la denominación de sus archivos.
Al trasladar archivos de texto de un sistema operativo a otro se debe considerar que existen al menos dos convenciones diferentes para señalar el término de una línea: Unix y Linux usan sólo retorno de carro en cambio Microsoft Windows usa al término de cada línea retorno de carro y salto de línea.
4.- ¿Que son los editores de carácter?
Editor de Caracteres Privados
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)
En el tipo de letra se selecciona Todas las Fuentes (caracteres privados) y aparecerán sus adiciones. Las podrá copiar y pegar en cualquier documento.
El editor para caracteres es A[w], siendo w el ancho del campo medido en caracteres. Si omitimos w, la longitud de los datos se tomará como el ancho del campo.
En la entrada, sea long la longitud de los datos que leemos. Si w es mayor que long, los caracteres después de la posición long también son leídos. Si w es menor que long, a la entrada le añadiremos espacios en blanco por la derecha.
En la salida, si w es mayor que long, se añaden espacios en blanco por la izquierda. Si w es menor que long, los caracteres antes de la posición w aparecerán en la salida.
5.- ¿Qué son los editores de línea?
El editor de líneas se usa para crear o editar la Tabla de Definición de Campos y la Tabla de Selección de Campos Estas tablas están formadas por una o más líneas, cada una de las cuales representa un elemento descriptivo. Aunque cada tabla tiene una estructura propia de sus elementos, los comandos del editor de líneas en ambos casos es idéntico. Para cada nuevo elemento de la tabla creado, el editor de líneas presenta un renglón en el que se muestra la posición y longitud de cada campo con líneas de subrayado (en coincidencia con el encabezado de la tabla presentado en la parte de arriba de la pantalla, y que contiene los nombres correspondientes a cada campo), y posiciona el cursor en el primer campo donde se van a teclear los datos.
Para campos de un sólo carácter, simplemente debe teclearse el carácter relevante, el cursor pasará automáticamente al campo siguiente.
Antes que existieran los editores de texto, los datos y el código fuente de los programas debía ser entregado a la máquina por medio de tarjetas perforadas. El programa, un fajo de tarjetas, era leído por un lector de tarjetas perforadas. Cada carácter era representado por una o más perforaciones en una columna de 8 o 10 posibles perforaciones. No más de 80 caracteres podían ser representados en una tarjeta.
Con los Teletipos aparecieron también los primeros editores de texto que en un comienzo solo mostraban una línea del texto. Mandatos especiales movían el "cursor" en la cuatro direcciones.
El siguiente paso se dio con la aparición del monitor de tubo de rayos catódicos que permitió la edición a "pantalla completa" es decir mostrando varias líneas a la vez. El aumento de productividad fue enorme, por la rapidez y simplicidad del mecanismo. Uno de los primeros editores de texto fue el O26 escrito para la consola del operador de la serie de computadores CDC 6000 a mediados de la década de los 1960'. Otro precursor es el vi, escrito en los 1970' que aún es el estándar para los sistemas operativos Unix y Linux.
6.- ¿Qué son los editores de pantalla?
Editor de pantalla completa vi
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 inciar 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.
Si el archivo no existe vi lo crea. De igual manera, podemos simplemente invocar a vi, comenzar a escribir y despúes nombrar el archivo al momento de salvarlo.
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.
Tiene tres modos de trabajo. El modo de inserción, el de edición y el de comandos.
En el modo de inserción, toda la entrada que demos en el teclado se inserta en el archivo en el punto donde se encuentre el cursor. En el modo de edición daremos instrucciones que alteran el contenido, como por ejemplo para posicionarse en determinado punto, hacer reemplazos de texto, copiar o mover bloques de texto, etc. En el modo comandos se dan instrucciones para salvar el archivo, traer a edición otro, insertar otro archivo en el punto donde se está, terminar la edición, etc.
7.- ¿Qué son los lenguajes de programación?
Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana. Está formado de un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación.
También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:
El desarrollo lógico del programa para resolver un problema en particular.
Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa)
Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
Prueba y depuración del programa.
Desarrollo de la documentación.
Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo el HTML. (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación sino un conjunto de instrucciones que permiten diseñar el contenido y el texto de los documentos)
Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción del programa de forma colaborativa.
8.- ¿Cuáles son los lenguajes de alto nivel?
Los lenguajes de programación de alto nivel se caracterizan por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas.
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 muy alto nivel se crearon para que el usuario común pudiese solucionar tal 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".
9.- ¿Cuales son los lenguajes de medio o intermedio nivel?
Lenguaje de medio nivel es un lenguaje de programación informática como el lenguaje C, que se encuentran entre los lenguajes de alto nivel y los lenguajes de bajo nivel.
Suelen ser 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).
Una de las características mas peculiares del lenguaje de programación C; es el uso de “apuntadores”, los cuales son muy útiles en la implementación de algoritmos como Listas ligadas, Tablas Hash y algoritmos de búsqueda y ordenamiento que para otros lenguajes de programación (como Java por ejemplo) les suele ser un poco más complicado implementar.
10.- ¿Cuáles son los lenguajes de bajo nivel?
Un lenguaje de programación de bajo nivel es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. Consecuentemente es fácilmente trasladado a lenguaje de máquina.
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.
Algunos lenguajes de bajo nivel son el lenguaje de maquina , el lenguaje simbolico y el de programacion. El lenguaje de programacion tiene ciertas ventajas:
Mayor adaptación al equipo.
Posibilidad de obtener la máxima velocidad con mínimo uso de memoria.
Pero también tiene importantes inconvenientes:
Imposibilidad de escribir código independiente de la máquina.
Mayor dificultad en la programación y en la comprensión de los programas.
El programador debe conocer más de un centenar de instrucciones.
Es necesario conocer en detalle la arquitectura de la máquina.
Características
Se trabaja a nivel de instrucciones, es decir, su programación es al más fino detalle.
Está orientado a la máquina.
Primera generación
El lenguaje de programación de primera generación (por sus siglas en inglés, 1GL), es el lenguaje de código máquina. Es el único lenguaje que un microprocesador entiende de forma nativa. El lenguaje máquina no puede ser escrito o leído usando un editor de texto, y por lo tanto es raro que una persona lo use directamente.
Segunda generación
El lenguaje de programación de segunda generación (por sus siglas en inglés, 2GL), es el lenguaje ensamblador. Se considera de segunda generación porque, aunque no es lenguaje nativo del microprocesador, un programador de lenguaje ensamblador debe conocer la arquitectura del microprocesador (como por ejemplo las particularidades de sus registros o su conjunto de instrucciones).
11.- ¿Menciona los tipos de compiladores?
Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser simplemente texto. Este proceso de traducción se conoce como compilación.
Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.
Tipos de compiladores
Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías:
Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
Pauta de creación de un compilador: En las primeras épocas de la informática, el software de los compiladores era considerado como uno de los más complejos existentes.
Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador.
Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del lenguaje de partida, especificada normalmente mediante una gramática formal y barata, dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas.
Proceso de compilación
Es el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje de programación a lenguaje maquina. Además de un traductor, se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir en módulos almacenados en archivos distintos. La tarea de reunir el programa fuente a menudo se confía a un programa distinto, llamado preprocesador. El preprocesador también puede expandir abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente.
Normalmente la creación de un programa ejecutable (un típico.exe para Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se llama enlazado en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el código objeto a código máquina, y generando un módulo ejecutable.
12.- ¿Menciona los tipos de intérpretes?
Un intérprete es un programa que toma un programa fuente escrito en un lenguaje de alto nivel, lo analiza y lo ejecuta instrucción a instrucción bajo su control.
No se genera un programa equivalente en otro lenguaje de menor nivel, así que si se desea repetir la ejecución del programa es preciso volver a traducirlo.
Un intérprete realizaría el siguiente ciclo:
Repetir, leer instrucción, ejecutar instrucción, hasta el fin.
En un intérprete sólo hay que distinguir dos lenguajes diferentes, el de los programas de partida (LA), y el lenguaje en que está escrito el intérprete (LC).
Un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito 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.
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.
Tipos de intérpretes de órdenes
Como se ha comentado antes, es un sistema operativo multitarea y multiusuario. La multitarea es muy útil, y una vez la haya comprendido, la usará todo el tiempo. Dentro de poco ejecutará programas en segundo plano, cambiará entre tareas y redirigirá programas junto a resultados complicados con una sencilla orden.
Muchas de las características que se verán en esta sección son características suministradas por el intérprete de órdenes. Se debe tener cuidado en no confundir (el actual sistema operativo) con el intérprete de órdenes. Un intérprete de órdenes es tan sólo un interfaz con el sistema operativo que hay debajo. El intérprete de órdenes proporciona funcionalidad añadida a .
Un intérprete de órdenes no es sólo un intérprete de las órdenes interactivas que se teclean en el indicador de órdenes, sino también un potente lenguaje de programación. Permite escribir guiones (shell scripts), juntando varias órdenes en un fichero. Si se conoce MS-DOS, se reconocerá la similitud con los ficheros de procesamiento por lotes. Los guiones del intérprete de órdenes son una herramienta muy potente, que le permitirá automatizar y extender el uso de. Mire la página para más información.
13.- ¿Cual es la diferencia entre un intérprete y un compilador?
Intérpretes y Compiladores
Principios de la interpretación.
En lugar de producir un programa objeto como resultado de una traducción, un intérprete realiza las operaciones que implica el programa fuente. Por ejemplo un intérprete podría construir un árbol, y después efectuar las operaciones de los nodos conforme recorre el árbol.
Muchas veces los intérpretes se utilizan para ejecutar lenguajes de órdenes, pues cada operador que se ejecuta en un lenguaje de este tipo suele ser una invocación de una rutina, como un editor o un compilador. Del mismo modo algunos lenguajes de alto nivel son interpretados, porque hay muchas cosas sobre los datos, como el tamaño y la forma de las matrices que no se pueden deducir en el momento de la compilación.
Intérprete: Es un traductor que realiza la operación de compilación paso a paso. Para cada sentencia que compone el texto de entrada, se realiza una traducción, ejecuta dicha sentencia y vuelve a iniciar el proceso con la sentencia siguiente.
La principal ventaja del proceso de compilación frente al de interpretación es que los programas se ejecutan mucho más rápidamente una vez compilados; por el contrario, es más cómodo desarrollar un programa mediante un intérprete que mediante un compilador puesto que en el intérprete las fases de edición y ejecución están más integradas. La depuración de los programas suele ser más fácil en los intérpretes que en los compiladores puesto que el código fuente está presente durante la ejecución. Estas ventajas pueden incorporarse al compilador mediante la utilización de entornos de desarrollo y depuradores simbólicos en tiempo de ejecución.
Diferencia entre un intérprete y compilador
INTERPRETE: Es un programa que lee línea a línea un programa escrito en un lenguaje; en lenguaje fuente y lo va traduciendo a un código intermedio, para ejecutarlo.
COMPILADOR: Es un programa que lee totalmente un programa escrito en un lenguaje; el lenguaje fuente, y lo traduce a un programa equivalente a otro lenguaje, lenguaje objeto.
A grandes rasgos un compilador es un programa que lee un programa escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente.
Comparación Intérpretes 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.
En un compilador hay que distinguir tres lenguajes diferentes:
• El de los programas de partida (LA)
• El de los programas equivalentes traducidos (LB), normalmente el lenguaje de máquina
• 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: En el caso de que el lenguaje fuente sea un lenguaje de programación de alto nivel y el objeto sea un lenguaje de bajo nivel (ensamblador o código de máquina), a dicho traductor se le denomina compilador. Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje ensamblador. Un intérprete no genera un programa equivalente, sino que toma una sentencia del programa fuente en un lenguaje de alto nivel y la traduce al código equivalente y al mismo tiempo lo ejecuta. Históricamente, con la escasez de memoria de los primeros ordenadores, se puso de moda el uso de intérpretes frente a los compiladores, pues el programa fuente sin traducir y el intérprete juntos daban una ocupación de memoria menor que la resultante de los compiladores. Por ello los primeros ordenadores personales iban siempre acompañados de un intérprete de BASIC (Spectrum, Commodore VIC-20, PC XT de IBM, etc.). La mejor información sobre los errores por parte del compilador así como una mayor velocidad de ejecución del código resultante hizo que poco a poco se impusieran los compiladores. Hoy en día, y con el problema de la memoria prácticamente resuelto, se puede hablar de un gran predominio de los compiladores frente a los intérpretes, aunque intérpretes como los incluidos en los navegadores de Internet para interpretar el código JVM de Java son la gran excepción.