B3T3 Lenguajes Programacion Past Paper PDF 2015-2016
Document Details
Uploaded by JesusDR89
null
2015
Pablo Arellano
Tags
Related
- Prelims Reviewer - Computer Programming PDF
- CCS102 Computer Programming 1 Course Material PDF
- Computer Programming Languages and Language Translators PDF
- Paradigms & Computer Programming Foundation Exam Paper - 2024 - PDF
- Sheet 1 Programming Languages PDF
- Computer Programming 3 - Discussion 2 (1) PDF
Summary
This document is a past paper from 2015-2016 covering programming languages including topics like representation of data types, operators, conditional statements, loops, recursion, procedures and functions. The document also focuses on the structure of a program.
Full Transcript
2015-2016 Bloque 3 - Tema 3 LENGUAJES DE PROGRAMACIÓN. REPRESENTACIÓN DE TIPOS DE DATOS. OPERADORES. INSTRUCCIONES CONDICIONALES. BUCLES Y RECURSIVIDAD. PROCEDIMIENTOS, FUNCIONES Y PARÁMETROS. VECTORES Y REGISTROS. ESTRUCTURA DE UN PROGRAMA PREPARACIÓN OPOSICIONES TÉCNICOS AUXIL...
2015-2016 Bloque 3 - Tema 3 LENGUAJES DE PROGRAMACIÓN. REPRESENTACIÓN DE TIPOS DE DATOS. OPERADORES. INSTRUCCIONES CONDICIONALES. BUCLES Y RECURSIVIDAD. PROCEDIMIENTOS, FUNCIONES Y PARÁMETROS. VECTORES Y REGISTROS. ESTRUCTURA DE UN PROGRAMA PREPARACIÓN OPOSICIONES TÉCNICOS AUXILIARES DE INFORMÁTICA B3T3 LENGUAJES DE PROGRAMACIÓN TAI ÍNDICE ÍNDICE............................................................................................................................................................ 2 1. LENGUAJES DE PROGRAMACIÓN.............................................................................................................. 3 1. Definiciones básicas............................................................................................................................. 3 2. Compiladores....................................................................................................................................... 4 3. Intérpretes............................................................................................................................................ 6 4. Clasificación de los lenguajes de programación................................................................................... 6 5. Principales lenguajes de programación.............................................................................................. 17 2. REPRESENTACIÓN DE TIPOS DE DATOS................................................................................................... 19 3. OPERADORES.......................................................................................................................................... 22 4. INSTRUCCIONES CONDICIONALES........................................................................................................... 27 5. BUCLES.................................................................................................................................................... 30 6. PROCEDIMIENTOS, FUNCIONES Y PARÁMETROS.................................................................................... 35 7. VECTORES Y REGISTROS.......................................................................................................................... 38 8. ESTRUCTURA DE UN PROGRAMA............................................................................................................ 40 PABLO ARELLANO www.theglobeformacion.com Página 2 B3T3 LENGUAJES DE PROGRAMACIÓN TAI 1. LENGUAJES DE PROGRAMACIÓN 1. Definiciones básicas Algoritmo: es un conjunto de acciones o secuencia de operaciones que ejecutadas en un determinado orden resuelven un problema concreto. Existen n algoritmos para resolver un mismo problema, escoger el más eficiente. Representa una secuencia ordenada de pasos -sin ambigüedades-, repetible, que da solución a un determinado problema. Las características fundamentales que debe cumplir todo algoritmo son: - Debe ser preciso e indicar el orden de realización de cada paso. - Debe estar definido (si se repiten n veces los pasos se debe obtener siempre el mismo resultado). - Debe ser finito (debe tener un número finito de pasos). - Es independiente del lenguaje de programación que se utilice. - La definición de un algoritmo debe describir tres partes: Entrada, Proceso, Salida. - La programación es adaptar el algoritmo al ordenador. - El algoritmo es independiente de donde se implemente (hardware o software). Instrucción: cada una de las tareas elementales a realizar por un elemento de computación. Programa: es un conjunto de instrucciones que al ser ejecutadas resuelven un problema. Un programa tiene tres partes: 1. Entrada de datos: normalmente se va a ejecutar a través de instrucciones de lectura, y en lo que se le pide al usuario la información que el programa va a necesitar para ejecutarse, o bien se leen los datos desde un sistema de almacenamiento secundario. 2. Acciones de un algoritmo: parte en la que se resuelve el problema usando los datos de entrada. En la parte de las acciones a ejecutar se distinguirán dos partes: o Declaración de variables. o Instrucciones del programa. 3. Salida: mostrar en un dispositivo de salida los resultados de las acciones anteriormente realizadas o grabarlos en un sistema de almacenamiento secundario. Son acciones de escritura. Lenguaje de programación: conjunto de normas «lingüísticas» que permiten escribir un programa y que éste sea entendido por el ordenador y pueda ser trasladado a ordenadores «similares» para su funcionamiento en otros sistemas. PABLO ARELLANO www.theglobeformacion.com Página 3 B3T3 LENGUAJES DE PROGRAMACIÓN TAI Subprograma: fragmento de programa que resuelve un subproblema con entidad propia. Los subprogramas dividen las tareas grandes de computación en varias más pequeñas y especializadas: - Permiten la reusabilidad. - Distribuyen la programación: en distintos niveles de abstracción o en el desarrollo por un equipo de personas. Función: subprograma que se caracteriza por disponer de «n» entradas, pero únicamente de una salida (siempre una). Procedimiento: subprograma que se caracteriza por disponer de «n» entradas y «n» salidas, siendo n = {0, 2,... n}. Un traductor es un programa que procesa un texto fuente y genera un texto objeto. Según la forma de la traducción, los traductores se pueden clasificar en compiladores e intérpretes. 2. Compiladores Un COMPILADOR es un programa informático que traduce o transforma un programa escrito en un lenguaje de programación (código fuente) a su equivalente en otro lenguaje de programación de más bajo nivel (código objeto), que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto. - Análisis: se trata de la comprobación de la corrección del programa fuente, e incluye las fases: o Análisis léxico (scanner): consiste en la descomposición del programa fuente en componentes léxicos (tokens = secuencia de caracteres con significado propio). o Análisis sintáctico (parser): agrupación jerárquica de los componentes léxicos en frases gramaticales en un árbol para comprobar si es sintácticamente correcto. o Análisis semántico: comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico (operandos permitidos para un operador, variables usadas y no definidas, llamadas a procedimientos con número y/o tipo de parámetros incorrectos). PABLO ARELLANO www.theglobeformacion.com Página 4 B3T3 LENGUAJES DE PROGRAMACIÓN TAI - Síntesis: su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de: o Generación de código: normalmente se trata de generar código intermedio o de código objeto y o Optimización de código: en las que se busca obtener un código lo más eficiente posible. El proceso de compilación involucra cuatro etapas sucesivas: preprocesamiento, compilación, ensamblado y enlazado. Para pasar de un programa fuente escrito por un humano a un archivo ejecutable es necesario realizar estas cuatro etapas en forma sucesiva: (1) Preprocesado: en esta etapa se interpretan las directivas. Entre otras cosas, las variables inicializadas con #define son sustituidas en el código por su valor en todos los lugares donde aparece su nombre. (2) Compilación: la compilación transforma el código en el lenguaje ensamblador propio del procesador de nuestra máquina. (3) Ensamblado: el ensamblado transforma el programa escrito en lenguaje ensamblador a código objeto, un archivo binario en lenguaje de máquina ejecutable por el procesador. (4) Enlazado: para hacer referencia a las funciones incluidas en nuestro código que se encuentran ya compiladas y ensambladas en bibliotecas existentes en el sistema. Es preciso incorporar de algún modo el código binario de estas funciones a nuestro ejecutable. En esto consiste la etapa de enlace, donde se reúnen uno o más módulos en código objeto con el código existente en las bibliotecas. Existen dos modos de realizar el enlace: o Estático: los binarios de las funciones se incorporan al código binario de nuestro ejecutable. o Dinámico: el código de las funciones permanece en la biblioteca; nuestro ejecutable cargará en memoria la biblioteca y ejecutará la parte de código correspondiente en el momento de correr el programa. El enlazado dinámico permite crear un ejecutable de menor tamaño, pero requiere tener disponible el acceso a las bibliotecas cuando el programa esté en ejecución. El enlazado estático crea un programa autónomo, pero al precio de aumentar el tamaño del ejecutable binario. Variante: un compilador cruzado (cross compiler) es un compilador capaz de crear código ejecutable para otra plataforma distinta a aquélla en la que se ejecuta. Variante: un transpilador es un compilador que traduce un código en un lenguaje fuente a otro lenguaje fuente (distinto del primero, pero al mismo nivel de abstracción). PABLO ARELLANO www.theglobeformacion.com Página 5 B3T3 LENGUAJES DE PROGRAMACIÓN TAI 3. Intérpretes Un INTÉRPRETE es un programa informático que ejecuta las instrucciones escritas en un lenguaje de programación dado (código fuente), sin necesidad de generar un programa objeto. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los intérpretes sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción. La interpretación de código es más lenta que la ejecución de código compilado porque el intérprete debe analizar cada sentencia en el programa cada vez que es ejecutada y entonces realizar la acción deseada, mientras que el código compilado solo realiza la acción dentro de un determinado contexto fijo por la compilación. Este análisis en tiempo de ejecución se conoce como "sobrecarga interpretativa". 4. Clasificación de los lenguajes de programación Los lenguajes de programación se pueden clasificar según varios criterios, entre los que se encuentran: nivel de abstracción, propósito, evolución histórica, manera de ejecutarse, manera de abordar la tarea a realizar, paradigma de programación, lugar de ejecución, concurrencia, interactividad, realización visual, determinismo, grado de tipado, clase de tipado y utilidad. Hay que tener en cuenta también que, en la práctica, la mayoría de los lenguajes no pueden ser puramente clasificados en una categoría, pues surgen incorporando ideas de otros lenguajes y de otras filosofías de programación, pero no importa al establecer las clasificaciones, pues el auténtico objetivo de las mismas es mostrar los rangos, las posibilidades y tipos de lenguajes que hay. (1) Según el nivel de ABSTRACCIÓN Según el nivel de abstracción, o sea, según el grado de cercanía a la máquina tenemos: - Lenguaje MÁQUINA: las instrucciones se representan mediante combinaciones de ceros y unos (código binario). Por lo tanto, es directamente ejecutable por el microprocesador de un computador. Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones al ser tomadas por la máquina. - Lenguajes de BAJO nivel: son lenguajes que asignan a cada instrucción del lenguaje máquina un nombre nemotécnico con el fin de facilitar su uso y significado: lenguajes simbólicos. Apenas existe abstracción del microprocesador. El lenguaje ensamblador es el propio de este nivel. PABLO ARELLANO www.theglobeformacion.com Página 6 B3T3 LENGUAJES DE PROGRAMACIÓN TAI - Lenguajes de MEDIO nivel: tienen ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel. - Lenguajes de ALTO nivel: se trata de lenguajes próximos al lenguaje natural que proporcionan instrucciones para representar la lógica del programa y de estructuras de datos independientes de la arquitectura hardware subyacente. Las ventajas de este tipo de lenguajes son la transportabilidad entre plataformas, la independencia de la arquitectura hardware concreta y la facilidad de programación y mantenimiento. Entre los inconvenientes destacan el no aprovechamiento de la arquitectura interna y el aumento del tiempo de compilación y ejecución. (2) Según el PROPÓSITO Según el propósito, es decir, el tipo de problemas a resolver para el que se crearon los lenguajes, tenemos: - Lenguajes de propósito GENERAL: Aptos para todo tipo de tareas. Lenguajes: C, C++, C#, Java, Visual Basic. - Lenguajes de propósito ESPECÍFICO: Desarrollados para un objetivo muy concreto. o Gestión de empresas: COBOL. o Cálculo científico: Fortran, M. o Educación: Scratch, Python, Processing, Java, Lua, JavaScript, Racket, Raptor, Pascal, Oz, Etoys, ABC, Grace, Logo. o Gestión de bases de datos: SQL, ABAP. o Inteligencia artificial: Prolog, Lisp, Haskell, R, F#. o Web: PHP, Perl, Python, Javascript, Java. - Lenguajes de programación de SISTEMAS: Diseñados para realizar sistemas operativos o drivers. Lenguajes: C. - Lenguajes de SCRIPT: Para realizar tareas varias de control y auxiliares. Antiguamente eran los llamados lenguajes de procesamiento por lotes (batch) o JCL ("Job Control Languages"). Lenguajes: Bourne Shell (sh), Bourne-Again bash (bash), Debian Almquist Shell (dash), Korn Shell (ksh), Z Shell (zsh), C Shell (csh), TENEX C Shell (tcsh). PABLO ARELLANO www.theglobeformacion.com Página 7 B3T3 LENGUAJES DE PROGRAMACIÓN TAI (3) Según el PARADIGMA de programación Un paradigma de programación indica un método de realizar cómputos y la manera en que se deben estructurar y organizar las tareas que debe llevar a cabo un programa. El paradigma de programación es el estilo de programación empleado. Algunos lenguajes soportan varios paradigmas, y otros sólo uno. Los paradigmas fundamentales están basados en diferentes modelos de cómputo y por lo tanto afectan a las construcciones más básicas de un programa. Notar que algunos lenguajes de programación pueden soportar múltiples paradigmas de programación. Por ejemplo, C++ puede ser empleado para desarrollar software utilizando para ello un modelo de programación puramente orientado a objetos o bien puramente estructurado. En casos como el de C++, somos los programadores los que decidimos que utilizar. A este tipo de lenguajes se les conoce como multiparadigma. Por otro lado, algunos lenguajes han sido diseñados para soportar un único paradigma de programación, ese es el caso de Smalltalk que soporta únicamente la programación orientada a objetos o Haskell que solo soporta la programación funcional. Se puede decir que históricamente han ido apareciendo para facilitar la tarea de programar según el tipo de problema a abordar, o para facilitar el mantenimiento del software, o por otra cuestión similar, por lo que todos corresponden a lenguajes de alto nivel, estando los lenguajes ensambladores “atados” a la arquitectura de su procesador correspondiente. Los principales son: - Paradigma IMPERATIVO o por procedimientos: describe cómo debe realizarse el cálculo, no el por qué. Un cómputo consiste en una serie de sentencias, ejecutadas según un control de flujo explícito, que modifican el estado del programa, es decir, divide el problema en partes más pequeñas, que serán realizadas por subprogramas (subrutinas, funciones, procedimientos), que se llaman unas a otras para ser ejecutadas. Los programas escritos bajo este paradigma son secuenciales, es decir, se indican los pasos o tareas que deben realizar siguiendo estas reglas: o El programa tiene un diseño modular. o Los módulos son diseñados de manera que un problema complejo se divide en problemas más simples. o Cada módulo se codifica utilizando las tres estructuras de control básicas: secuencia, selección y repetición. Lenguajes: C, Pascal, BASIC, ADA, COBOL, FORTRAN. PABLO ARELLANO www.theglobeformacion.com Página 8 B3T3 LENGUAJES DE PROGRAMACIÓN TAI - Programación ORIENTADOS A OBJETOS: también denominada POO, usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Así, este paradigma se base en el concepto de objeto y de clases de objetos. Un objeto es una variable equipada con un conjunto de operaciones que le pertenecen o están definidas para ellos. Las clases son las "plantillas" desde las que se pueden crear o instanciar múltiples objetos del mismo tipo. O lo que es lo mismo, representan la abstracción de las características comunes de un tipo determinado de objetos. Los componentes de las clases son: o Atributos: elementos que mantienen el estado del objeto. o Métodos: mensaje para realizar alguna acción en un objeto. Los objetos son entidades que tienen un determinado estado, comportamiento (método) e identidad: o El estado está compuesto de datos o informaciones. o El comportamiento está definido por los métodos o mensajes a los que sabe responder. o La identidad es una propiedad de un objeto que lo diferencia del resto. Las características más importantes de la programación orientada a objetos son las siguientes: o Abstracción: denota las características esenciales de un objeto, donde se captura su comportamiento. o Encapsulamiento: hace referencia a la reunión de todos los elementos que pueden considerarse pertenecientes a una misma entidad. Ello supone el aumento de la cohesión de los componentes. No confundir con el principio de ocultación. o Principio de ocultación: la estructura interna permanece oculta, tanto para el usuario como para otros objetos diferentes. La información contenida en el objeto será accesible sólo a través de la ejecución de los métodos adecuados creándose una interfaz para la comunicación con el mundo exterior. o Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre; al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. Dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en “tiempo de ejecución”, se llama “asignación tardía” o “asignación dinámica”. Algunos lenguajes proporcionan medios más estáticos (en “tiempo de compilación”) de polimorfismo. PABLO ARELLANO www.theglobeformacion.com Página 9 B3T3 LENGUAJES DE PROGRAMACIÓN TAI o Herencia: la herencia es la propiedad por la cual una clase asume como propios todos los atributos y métodos definidos por otra. La que hereda se denomina «subclase» o «clase derivada». La que transmite la herencia recibe el nombre de «superclase» o «clase base». La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y, en segundo lugar, en las estructuras de datos que esos procedimientos manejan. En la programación estructurada solo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos. Lenguajes: Smalltalk, C++, C#, Java, Python, Eiffel, Ruby, Scala, Swift, VB.NET, PHP, D, R, Object Pascal, Gambas, JavaScript, Oz, Perl, Processing, ActionScript. - Programación FUNCIONAL: La programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. En la práctica, la diferencia entre una función matemática y la noción de una "función" utilizada en la programación imperativa es que las funciones imperativas pueden tener efectos secundarios, al cambiar el valor de cálculos realizados previamente. Por esta razón carecen de transparencia referencial, es decir, la misma expresión sintáctica puede resultar en valores diferentes en diferentes momentos dependiendo del estado del programa siendo ejecutado. Con código funcional, en contraste, el valor generado por una función depende exclusivamente de los argumentos alimentados a la función. Al eliminar los efectos secundarios se puede entender y predecir el comportamiento de un programa mucho más fácilmente, y esta es una de las principales motivaciones para utilizar la programación funcional. Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos colaterales. Se denominan funciones puras. Un tipo especial de funciones son las funciones de orden superior, que pueden tomar otras funciones como argumentos o devolverlos como resultados. Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración, lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas. PABLO ARELLANO www.theglobeformacion.com Página 10 B3T3 LENGUAJES DE PROGRAMACIÓN TAI En definitiva, un programa dentro del paradigma funcional es una función o un grupo de funciones compuestas por funciones más simples estableciéndose que una función puede llamar a otra, o el resultado de una función puede ser usado como argumento de otra función. Podemos distinguir dos tipos de programación funcional según el modelo de cómputo en el que están basados: o Cálculo lambda: sus características son que están basado en s-expresiones, son de tipado débil y admite la metaprogramación. Lenguajes: familia Lisp, Scheme. o Lógica combinatoria: mantienen un sistema estricto de tipos, implementan la transparencia referencial y la evaluación perezosa. Lenguajes: familia ML, Haskell. Lenguajes: o Puros: Haskell, Miranda. o Híbridos: Lisp, Scheme, Scala, familia ML, F# (Microsoft). Ejemplo: resolución de un sudoku en Haskell fila tablero fil = [ w | (x,y,z,w) Desplazamiento de bits a la derecha > 2)); Operador de asignación OPERADOR SIGNIFICADO = Asignación += Incremento y asignación -= Decremento y asignación %= Módulo y asignación *= Multiplicación y asignación /= División y asignación PABLO ARELLANO www.theglobeformacion.com Página 24 B3T3 LENGUAJES DE PROGRAMACIÓN TAI ^= XOR a nivel de bits y asignación >>= Desplazar bits a derecha y asignación =,