2.27.2014

1.3 Interpretes y compiladores

1.3.1 Definición de Interpretes y Compiladores, ambiente integral del Lenguaje C

Este tema, de gran forma se enlaza con el pasado, ya que C estaba en 1er lugar del top 20 de lenguajes de programación (ademas de ser el lenguaje al cual esta enfocado este blog) y por otro lado ya tratamos lo que es un lenguaje interprete y uno compilado... Ahora vamos a ver la otra cara de la moneda.


Definición de Interprete

El funcionamiento de un intérprete se caracteriza por traducir y ejecutar, de una en una, las intrucciones del código fuente de un programa, pero, sin generar como salida código objeto. El proceso que realiza un intérprete es el siguiente: lee la primera instrucción del código fuente, la traduce a código objeto y la ejecuta; a continuación, hace lo mismo con la segunda instrucción; y así sucesivamente, hasta llegar a la última instrucción del programa, siempre y cuando, no se produzca ningún error que detenga el proceso.


Definicion de Compilador

Un compilador es un programa informático, que se encarga de traducir el código fuente de una aplicación que este en desarrollo, es decir convierte un programa hecho en lenguaje de programación de alto nivel a un lenguaje de máquina , el cual es conocido como de bajo nivel, de tal forma que sea  más entendible y mucho más fácil de procesar en el equipo en el que se esta ejecutando.

De igual manera un traductor es el que toma como entrada un texto escrito y da como salida otro texto en un lenguaje llamado objeto.

Ambiente integral del Lenguaje C

Antes de empezar con la historia del lenguaje C definiré ¿Que es el lenguaje C? El C es un lenguaje de programación de nivel medio ya que combina los elementos del lenguaje de alto nivel con la funcionalidad del ensamblador. Una  vez aclarado este punto pasaremos a conocer su historia.
 En 1967 Martin Richard creo el lenguaje BCPL que fue la base para la creacion del lenguaje B escrito por Ken Thompson en 1970 con la intención de recodificar el UNIX, que en su face de arranque estaba codificado en lenguaje ensamblador.

El lenguaje c fue creado por Dennis Ritchie en los laboratorios Bell Telephone en 1972, el c fue creado con un fin específico: el diseño del sistema operativo UNIX. Este lenguaje solo es una modificación del lenguaje B. El lenguaje C se llama de esta forma debido a que su predecesor fue llamado B.
 La novedad que proporcionó el lenguaje C sobre el B fué el diseño de tipos y estructuras de datos. Los tipos estructurados básicos de C son las estructuras, las uniónes, y los arrays. Estos permiten la definición y declaración de tipos de mayor complejidad.

Los tipos básicos de datos en el lenguaje C eran "CHAR" (carácter), "INT" (enteros), "FLOAT" (Reales en simple presición), y "DOUBLE" (Reales en doble Presición). Posteriormente se añadieron los tipos "SHORT" (Enteros de longitud<=longitud de un int), "LONG" (Enteros de longitud >= longitud de un entero), "UNSIGNED" (Enteros sin signo), y "ENUMERACIONES".
 Como el  C es un lenguaje muy poderoso y flexible su uso se difundió muy rápidamente mas allá de los laboratorios Bell. Los programadores de todo el mundo comenzaron a usarlo para escribir todo tipo de programas. Sin embargo, diferentes organizaciones comenzaron a utilizar muy pronto sus propias versiones del C,  las pequeñas diferencias entre las implementaciones comenzaron a dar problemas a los programadores. Para resolver este problema, el American National Stándards (ANSI) formo un comité en 1983 para establecer una definición estándar del C, que llego a ser conocida como C estándar  ANSI. Con unas cuantas excepciones, todos los compiladores del C modernos de adhieren a este estándar.

El lenguaje C inicialmente fué creado para la programación de
 -Sistemas operativos
-Intérpretes
-Editores
-Ensambladores
-Compiladores
-Administradores de bases de datos.

Aqui abajo muestro en un .doc los tipos de datos mas usados en el lenguaje c.



CONCLUSIONES
Para finalizar, podemos decir que un interprete es el que se encarga de ejecutar un programa linea por linea, mientras que un compilador revisa que no hayan errores y compila todo el programa de una sola vez. El lenguaje C (que es el que estaremos usando) fue creado en 1972 gracias a su predesor, el lenguaje B y actualmente es el lenguaje mas usado para la programacion basica en casi cualquiera de los sistemas operativos.

CUESTIONARIO
1.-¿Que es un interprete?
2.-¿Que es un compilador?
3.-¿Cual fue el predesesor del Lenguaje C?
4.-¿Cuando y por quien fue creado el lenguaje C?
5.-¿Para que fue creado originalmente el lenguaje C?
6.-Nombre 3 tipos de datos basicos de C y para que sirve cada uno



JUEGOS (2X1!)
Como al final de cada entrada, algo de entretenimiento.
Primero, podras esquivar todos los trolls que te quieren hacer enojar? Intentalo y comenta tu mejor puntuacion.


Y el segundo, si alguna vez has jugado ping-pong, esta version 3D no deja nada que desear.

1.2 Evolucion de los lenguajes de programacion

1.2.1 Definicion, caracteristicas y funciones de los lenguajes de programacion

¿Que es un lenguaje de programacion?
Un lenguaje de programación es un lenguaje que puede ser utilizado para controlar el comportamiento de una máquina, particularmente una computadora. Consiste en un conjunto de reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos, respectivamente. Aunque muchas veces se usa lenguaje de programación y lenguaje informático como si fuesen sinónimos, no tiene por qué ser así, ya que los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como, por ejemplo, el HTML.

Según la forma de ejecución, se dividen en dos tipos diferentes

-Lenguajes compilados

Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se requiere una corrida de compilación antes de procesar los datos de un problema.
Los compiladores son aquellos cuya función es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con código binario).
Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de haber compilado el programa, ya no aparecen errores en el código.

-Lenguajes interpretados

Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la corrida de compilación para utilizarlo en una corrida de producción futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente.

La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una corrida de compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de producción.

Caracteristicas:
Tenemos muchas características, pero en general las más deseables son que el lenguaje sea expresivo, legible y eficiente. Otras las enumeramos a continuación.

Simplicidad : 
Aumenta la legibilidad y la facilidad de escritura, aunque demasiada simplicidad tiene el efecto contrario sobre la legibilidad. Aumenta la confiabilidad del software ya que al ser más sencillo, la verificación y detección de errores es más sencilla.

Estructuras de control: 
Controlan el flujo de ejecución de los programas. Influyen en la legibilidad y en la facilidad de escritura. Aumentan el control que el programador tiene sobre un programa, y por lo tanto aumenta la confiabilidad. Ejemplos son las estructuras IF-THEN-ELSE, WHILE, FOR, etc.

Tipos y estructuras de datos: 
son muy útiles ya que organizan la información de acuerdo a su tipo y en estructuras de datos convenientes. Los tipos y estructuras de datos aumentan la confiabilidad ya que es posible el chequeo de tipos.

Diseño de sintaxis: 
Determina la manera en que se combinan los símbolos y elementos de un lenguaje. Influye en la legibilidad y facilidad de escritura, en la confiabilidad y en los costos.

Soporte para abstracción: 
minimiza la complejidad de los problemas a resolver agrupandolos de acuerdo a ciertas características. Está comprobado que esta característica aumenta la legibilidad y facilidad de escritura así como la confiabilidad.


Expresividad: 
Se refiere a la naturalidad con la que un lenguaje expresa sus sentencias. Aumenta la legibilidad y la confiabilidad, y en general disminuye la facilidad de escritura y el costo de aprendizaje.

Funciones de los lenguajes de programacion
Los  lenguajes pueden ser usados para varios propósitos, acceso a bases de datos, comunicación entre computadoras, comunicación entre dispositivos, captura de datos, cálculos matemáticos, diseño de imágenes o páginas.
En forma más general algunos lenguajes de programación, pueden usarse para crear sistemas operativos, manejadores de bases de datos, compiladores, etc.., puede usarse para cualquier desarrollo, aplicado en la mayoría de las actividades que desarrolla el hombre.

Para ciertas tareas más comunes, existen bibliotecas para facilitar la programación que permiten la reutilización de código.

Aqui un top 20 de los lenguajes mas utilizados (hasta Enero del 2014)

Conclusión
En conclusión:
-Un lenguaje de programación es un lenguaje con reglas semánticas y sintácticas que sirve para controlar el comportamiento de una maquina
-Se dividen en "Compilados" (lenguaje de alto nivel, no se ejecuta mientras existan errores) y en "Interpretados" (ejecuta linea por linea, es mas lento la ejecución, pero mas rapido en diseño)
-Caracteristicas: Simples, expresivos, abstractos y estructurados

Cuestionario
1.-Nombra 5 características de un lenguaje de programación
2.-¿Como se dividen los lenguajes de programación, según su forma de ejecución?
3.-Cuantos de los lenguajes del Top 20 conoces?
4.-En lista 5 usos de un lenguaje de programación
5.-¿Que es un lenguaje compilado?
6.-¿Que es un lenguaje interpretado?


Juego (Extra)
En esta ocasion, pongo a prueba su habilidad de coordinacion, ¿Cuanto tiempo aguantan en este juego?

1.1 Sistemas operativos


1.1.1 Definiciones, Caracteristicas y funciones de un sistema operativo

¿Que es un Sistema Operativo (S.O.)?
El sistema operativo es el programa (o software) más importante de un ordenador. Para que funcionen los otros programas, cada ordenador de uso general debe tener un sistema operativo. Los sistemas operativos realizan tareas básicas, tales como reconocimiento de la conexión del teclado, enviar la información a la pantalla, no perder de vista archivos y directorios en el disco, y controlar los dispositivos periféricos tales como impresoras, escáner, etc. En sistemas grandes, el sistema operativo tiene incluso mayor responsabilidad y poder, es como un policía de tráfico, se asegura de que los programas y usuarios que están funcionando al mismo tiempo no interfieran entre ellos. El sistema operativo también es responsable de la seguridad, asegurándose de que los usuarios no autorizados no tengan acceso al sistema.

Caracteristicas de un S.O.
En general, se puede decir que un Sistema Operativo tiene las siguientes características:
-Conveniencia. 
Un Sistema Operativo hace más conveniente el uso de una computadora.
Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen de la manera más eficiente posible.
-Habilidad para evolucionar. 
Un Sistema Operativo deberá construirse de manera que permita el desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.
-Encargado de administrar el hardware. 
El Sistema Operativo se encarga de manejar de una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos.
-Relacionar dispositivos (gestionar a través del kernel). 
El Sistema Operativo se debe encargar de comunicar a los dispositivos periféricos, cuando el usuario así lo requiera.
-Organizar datos para acceso rápido y seguro.
-Manejar las comunicaciones en red. 
El Sistema Operativo permite al usuario manejar con alta facilidad todo lo referente a la instalación y uso de las redes de computadoras.
-Procesamiento por bytes de flujo a través del bus de datos.
-Facilitar las entradas y salidas. 
Un Sistema Operativo debe hacerle fácil al usuario el acceso y manejo de los dispositivos de Entrada/Salida de la computadora.
-Técnicas de recuperación de errores.
-Evita que otros usuarios interfieran. 
El Sistema Operativo evita que los usuarios se bloqueen entre ellos, informándoles si esa aplicación esta siendo ocupada por otro usuario.
-Generación de estadísticas.
-Permite que se puedan compartir el hardware y los datos entre los usuarios.
-El software de aplicación son programas que se utilizan para diseñar, tal como el procesador de palabras, lenguajes de programación, hojas de cálculo, etc.

El software de base sirve para interactuar el usuario con la máquina, son un conjunto de programas que facilitan el ambiente plataforma, y permite el diseño del mismo.

El Software de base está compuesto por :
-Cargadores.
-Compiladores.
-Ensambladores.
-Macros.

1.1.2 Analisis del comparativo de sistemas operativos (MS-DOS, Linux y Windows)

Para este analisis, inclui las ventajas y deventajas en una presentacion que se muestra abajo.


S.O.




Conclusion
Puedo mencionar que para esta entrada, trate mas de enfocarme en mostrar los aspectos generales, positivos y negativos y que el lector elija por su propia voluntad el que crea mas conveniente para usar. Yo, por lo pronto, usare windows debido a que es el que mas se me facilita ademas de que estoy mas acostumbrado.

Cuestionario
1.-En tus propias palabras, ¿Que entiendes por S.O.?
2.-¿Cual de los S.O. tiene la mejor seguridad?
3.-¿Cual es el que usa menos memoria?
4.-¿Por que crees que Windows es el mas caro?
5.-Con base en estas diferencias, ¿Que S.O. usarias?
6.-Nombra 4 caracteristicas de un S.O.



Juego (Extra)
Aprovechando el hecho de que empezamos con la computadora, el siguiente juego trata de "destruir" una, disfruten

Programa de estudios

UNIDADES

UNIDAD I "INTRODUCCION A LA PROGRAMACION"
1.1.Sistemas Operativos

     1.1.1.      Definición, Características y Función de un Sistema Operativo.
     1.1.2.      Análisis comparativo de Sistemas Operativos (MS- DOS, LINUX, WINDOWS)
1.2.Evolución de los lenguajes de programación.
     1.2.1.  Definición, Características y   Funciones de los Lenguajes de Programación.
1.3.Interpretes, Compiladores.
     1.3.1.      Definición de Intérpretes y Compiladores, Ambiente integral del Lenguaje C            

UNIDAD II  "FUNDAMENTOS DE PROGRAMACION ESTRUCTURADA"
2.1. Estructura general de un programa.

2.2. Tipos de datos y Operadores
     2.2.1.      Tamaños, Declaración, Modificadores
     2.2.2.      Operadores Lógicos, Aritméticos y de Asignación
2.3. Funciones de biblioteca.
     2.3.1.      Funciones de Entrada y Salida.
     2.3.2.      Funciones Matemáticas
2.4. Funciones generadas por el usuario.
     2.4.1.      Argumentos y Parámetros Formales
     2.4.2.      Funciones con y sin Argumentos
     2.4.3.      Funciones que Regresan Valores

UNIDAD III "ESTRUCTURA DE FLUJO PROGRAMATICO"
3.1. Estructuras de decisión

    3.1.1.      Simple
    3.1.2.      Ramificada
3.2. Estructuras de iteración
    3.2.1.   Pre y Post Condicional, Contador y Acumuladores
3.3. Estructuras de control
    3.3.1. Ruptura de un Lazo

UNIDAD IV "ESTRUCTURA DE DATOS"
4.1. Arreglos unidimensionales
      4.1.1.       Concepto y Forma General
      4.1.2.       Arreglos Numéricos y de Caracteres
4.2. Arreglos bidimensionales
      4.2.1.       Concepto y Forma General
      4.2.2.       Arreglos Numéricos y de Caracteres   
4.3. Apuntadores
   4.3.1.     Concepto
   4.3.2.     Tipos de Apuntadores
   4.3.3.     Operaciones con Apuntadores
   4.3.4.     Relación de Apuntadores con Arreglos

UNIDAD V "APLICACIONES"
5.1. Análisis del problema y elaboración del algoritmo

5.2. Codificación e Implementación
5.3. Pruebas modulares e integrales
5.4. Mantenimiento


BIBLIOGRAFIA
--BRONSON, Gary, J., C++ para ingeniería y ciencias.
      International Thomson Editores, Impreso en México, 2000, 862 pp, ISBN: 752987-3
      --CEBALLOS, Francisco Javier, Enciclopedia del Lenguaje C.
      Computec-Rama. México, 1994. 
      --COHOON, James P. y Davidson, Jack W., Programación y diseño en C++.
      2a edición, 2000, Impreso en España, 1022 pp, ISBN: 84-481-2682-3
      --DEITEL, H.M.; Deitel, P.J. Cómo programar en C/C++,
      Prentice- Hall, Hispanoamericana, México, 1995. 
      --JAMSA, Kris, Aprenda y practique C++,
      3a edición, 1999, Oxford University Press, Impreso en México, 377 pp, ISBN: 970-613-460-3 
      --KERNIGHAN, B. W.; D.M. Ritchie, Lenguaje de Programación CPrentice-Hall. 
      --PITTS, David, La Biblia de Red Hat Linux,
      Anaya Multimedia, Madrid 
      --SCHILDT, Herbert, Turbo C/C++ Manual de Referencia.
      McGraw HillImpreso en México, 1990, 874 pp, ISBN: 84-7615-738-X 
      --TACKER, Arlen B., Lenguajes de programación.
McGraw-Hill                                                                                
--TANEMBAUM, A.S., Sistemas Operativos, análisis v diseño. Prentice-Hall

FORMA DE EVALUACIÓN

Juego (extra)
Atrapa al ninja... si puedes.