Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
full-exif=true
5. Fundamentos de programacin
II. SOFTWARE
Introduccin a la Informtica
Curso de Acceso a la Universidad para Mayores de 25 y 45 (CAM 25-45) Coromoto Len Hernndez Gara Miranda Valladares Carlos Segura Gonzlez Curso 2012/2013
Contenido
1. Algoritmos. .......................................................................................................................... 2 1.1. 1.1.1. 1.1.2. 1.1.3. 1.1.4. 1.2. 1.3. 1.4. 2. 3. Componentes de un algoritmo.................................................................................... 3 Variable. ................................................................................................................... 4 Constante. ................................................................................................................ 4 Expresin.................................................................................................................. 4 Sentencias. ............................................................................................................... 4 Mtodos de representacin de algoritmos. ................................................................ 5 Fases del proceso de resolucin de un problema. ...................................................... 8 Qu es un programa? ................................................................................................ 8
Lenguajes de programacin. ............................................................................................... 9 Tipos de lenguajes de programacin. ............................................................................... 11 3.1. 3.1.1. 3.1.2. 3.2. 3.2.1. 3.2.2. 3.3. 3.3.1. 3.3.2. 3.3.3. Nivel de abstraccin .................................................................................................. 11 Lenguajes de bajo nivel .......................................................................................... 11 Lenguajes de alto nivel........................................................................................... 11 Forma de ejecucin ................................................................................................... 12 Lenguajes compilados ............................................................................................ 12 Lenguajes interpretados ........................................................................................ 12 Paradigmas de programacin .................................................................................... 13 Imperativo .............................................................................................................. 13 Declarativo ............................................................................................................. 13 Orientado a Objetos............................................................................................... 14
4. 5.
1.
Algoritmos.
En el Diccionario de la Real Academia Espaola se define algoritmo como: 1. Conjunto ordenado y finito de operaciones que permite hallar la solucin de un problema. 2. Mtodo y notacin en las distintas formas del clculo. Teniendo en cuenta estas definiciones, podramos decir que un algoritmo es una sucesin de pasos que se deben realizar para resolver un determinado problema. Partiendo de esta definicin podemos concluir que el concepto no es slo informtico, sino que es un concepto mucho ms amplio, pues se trata de un mtodo de resolucin de problemas general. Quizs no seamos consciente de ello pero en la en la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas comunes: Manuales de usuario o instrucciones de uso que muestran los algoritmos para usar un determinado aparato, dispositivo o software: o Instrucciones de uso de una televisin. o Instrucciones de uso de un microondas. Instrucciones o pasos para la realizacin de tareas comunes: o Pasos necesarios para hacer una tarta de galletas y chocolate. o Pasos necesarios para hacer una cama. o Pasos necesarios para hacer el nudo de una corbata. Procedimientos matemticos: o Algoritmo de la divisin para calcular el cociente de dos nmeros. o Algoritmo de Euclides para obtener el mximo comn divisor de dos enteros positivos El algoritmo nos da la solucin genrica a un problema y lo podremos emplear todas las veces que se nos presente ese mismo problema. Por ejemplo, el algoritmo de la divisin es genrico e independiente de los nmeros que tengamos que dividir. Por otro lado, una vez descubierto un algoritmo para efectuar una tarea, la realizacin de sta ya no requiere entender los principios en que se basa el algoritmo, pues el proceso se reduce a seguir las instrucciones o los pasos determinados por el mismo. Esto implica, por ejemplo, que podemos hacer una divisin siguiendo el algoritmo sin entender por qu funciona el procedimiento.
Introduccin a la Informtica
Gracias a la capacidad para comunicar nuestros pensamientos mediante algoritmos, podemos construir mquinas cuyo comportamiento simula inteligencia. En cualquier caso, el nivel de inteligencia que simula la mquina estar limitado por la inteligencia que podamos comunicarle por medio de algoritmos. Por lo tanto, si queremos que un ordenador efecte una tarea determinada, lo primero que debemos hacer es definir un algoritmo para llevar a cabo la tarea. Lo siguiente que deberamos hacer es programar el algoritmo en la mquina. Esto es, se debe transformar el algoritmo (pasos o indicaciones conceptuales) en un conjunto de instrucciones entendibles por la mquina. Para ello, se programan las instrucciones en un lenguaje de programacin, entendible por la mquina y sin introducir ningn tipo de ambigedad. Los principales atributos de un algoritmo son que ha de ser finito, definido, preciso e independiente de lenguaje de programacin. Que sea finito significa que debe tener un nmero finito de pasos as su tiempo de realizacin esta limitado y tambin el nmero de operaciones que realiza. Ser definido implica que ante los mismos datos de entrada se obtienen los mismos datos de salida. La precisin de un algoritmo se refiere a que es necesario que se indique de una forma inequvoca el orden de realizacin de cada paso. Finalmente, la independencia del lenguaje de programacin significa que debe ser de propsito general, y no contener ningn paso que dependa de un lenguaje particular de manera que permita su implementacin en cualquier lenguaje de programacin, y por tanto, en cualquier tipo de mquina algortmica. El atributo de independencia es el que marca la diferencia entre lo que es un algoritmo y lo que es programa de ordenador. Un algoritmo siempre ha de existir antes que el programa de ordenador. Es decir, un algoritmo se puede codificar mediante diversos lenguajes de programacin, dando lugar a diferentes programas de ordenador.
Introduccin a la Informtica
1.1.1. Variable. Elemento del algoritmo que posee un valor y que es conocido unvocamente por un determinado nombre o identificador. Las variables llevan asociadas un determinado tipo de datos, generalmente definido al comienzo del algoritmo, y que especifica el tipo de valores que pueden ser almacenados en la variable. Algunos ejemplos de tipos de datos son: Nmeros enteros. Por ejemplo, la edad de una persona. Nmeros reales. Por ejemplo, el saldo de una cuenta corriente. Cadenas de caracteres. Por ejemplo, el nombre o apellidos de una persona. Booleano. Slo puede tener dos posibles valores, verdadero o falso. Por ejemplo, para cada uno de los alumnos de una asignatura podramos querer almacenar la informacin de si son repetidores o no, con lo cual podramos tener una variable denominada repetidor, cuyos posibles valores fueran verdadero o falso. 1.1.2. Constante. Elemento del algoritmo similar a una variable, pero cuyo valor no cambia a lo largo del algoritmo. Por ejemplo, supongamos que queremos hacer un algoritmo para calcular el rea A de un crculo. Sabiendo que el rea A viene dado por la expresin A = r2, donde r es el radio del crculo, vemos que el radio es una variable, cuyo valor depender del crculo para el cual estemos calculando el rea. Sin embargo, para cualquiera de los crculos que definamos, tendr el mismo valor (3.14159) y, por tanto, se dice que es una constante. 1.1.3. Expresin. Combinacin de variables, constantes, valores constantes, operadores y funciones que al evaluarla en el orden correcto tiene un valor concreto. Por ejemplo, la frmula anterior para el clculo del rea de un crculo es una expresin. 1.1.4. Sentencias. Son los elementos que describen lo que debe hacer el algoritmo. Podemos decir que existen tres tipos diferentes de sentencias: Sentencias de asignacin: las sentencias de asignacin almacenan un valor en una variable o constante, la operacin de asignacin se muestra en los algoritmos con el smbolo o con el smbolo =, denotando que el valor situado a su derecha se almacena en la variable o constante situada a su izquierda. Esta operacin es destructiva, es decir, implica un movimiento de datos hacia el elemento situado a la izquierda, perdindose el valor que pudiera tener asignado anteriormente ese elemento.
Introduccin a la Informtica
Sentencias de entrada/salida: la operacin de lectura o de entrada permite introducir los datos desde dispositivos externos (teclado) o desde ficheros externos (unidad de disco). Este mtodo es el ms adecuado si se pretende realizar un programa que permita, cuando se codifique el algoritmo, manipular diferentes datos cada vez que se ejecute el programa. Por otro lado, la sentencia de salida o de escritura, permite que los resultados que se obtienen de un algoritmo puedan visualizarse mediante algn dispositivo externo (impresora, pantalla) o puedan almacenarse en algn fichero externo. o en un puerto de E/S (tarjeta de adquisicin de datos). Sentencias de control del flujo: todo algoritmo puede ser escrito usando tres estructuras de control bsicas: secuenciales, selectivas y repetitivas o cclicas. Las estructuras de control secuenciales son aquellas en las que todas las instrucciones o sentencias se ejecutan una despus de la otra. Empezando por el principio o inicio del algoritmo y terminando por su final. Las estructuras de control selectivas, tambin denominadas de decisin o alternativas, se utilizan para tomar decisiones lgicas. En este tipo de estructuras se evala una expresin lgica o relacional, y en funcin de su resultado se selecciona cul de las posibles opciones se toma. Esta estructura permite codificar bifurcaciones en el cuerpo del algoritmo as como salidas mltiples, segn los datos que tengamos en cada caso. Por ltimo, las estructuras de control repetitivas, tambin llamadas cclicas, bucles o lazos, se utilizan para realizar varias veces el mismo conjunto de operaciones. Entre ellas se encuentran aquellas en las que el nmero de repeticiones depende de una condicin lgica o relacional (bucles controlados por bandera) y las que se manejan mediante una variable contador. Es importante notar que en un mismo algoritmo pueden aparecer las tres estructuras (secuenciales, secuenciales y/o repetitivas) combinadas de distintas formas y en distintas partes del mismo.
Introduccin a la Informtica
adecuado para la descripcin de operaciones matemticas, siendo una descripcin imprecisa que no garantiza la correcta definicin del algoritmo, pues puede incurrir en ambigedades. Los mtodos formales disponen de la sintaxis y elementos gramaticales adecuados para describir la implementacin del algoritmo de resolucin de un problema en un ordenador. Existen dos tipos de mtodos formales, una representacin textual (pseudocdigo) o una representacin grfica (diagramas de flujo).
A modo de ejemplo, podramos analizar la forma en la que expresaramos un algoritmo para determinar si una persona es mayor de edad, o no: 1. Si utilizramos un mtodo informal podramos expresar el algoritmo de la forma siguiente: En primer lugar, tendramos que dirigirnos a la persona y preguntarle qu edad tiene. Cuando la persona nos responda, si la edad que nos ha dicho es 18 o un nmero mayor a 18 entonces sabremos que la persona es mayor de edad, pero si la edad que nos ha dicho es un nmero menor que 18 entonces sabremos que la persona no es mayor de edad. 2. Si utilizramos un mtodo formal con representacin textual (pseudocdigo) podramos expresar el algoritmo de la forma siguiente: Algoritmo MayoraEdad Variables enteras: edad Inicio Escribir (Cul es tu edad?) Leer (edad) Si edad >= 18 entonces Escribir (Eres mayor de edad) En otro caso Escribir (No eres mayor de edad) Fin-Si Fin 3. Si utilizramos un mtodo formal con representacin grfica (diagramas de flujo) podramos expresar el algoritmo de la forma siguiente:
Introduccin a la Informtica
Hay que tener en cuenta que para la definicin de algoritmos mediante diagramas de flujo, se utilizan smbolos estandarizados que permiten reflejar cada uno de los pasos (generales o especficos) del algoritmo. Algunos de los smbolos ms utilizados en este tipo de diagramas son los que se muestran en la tabla siguiente: Smbolo Nombre Lneas de flujo Descripcin Muestran la direccin y sentido del flujo del programa. Interconectan los distintos smbolos. Dentro situamos informacin o acciones para comenzar el proceso o para mostrar el resultado final del mismo.
Introduccin a la Informtica
Smbolo
Descripcin Tarea o actividad llevada a cabo durante el algoritmo. Puede tener muchas entradas pero slo una salida. Nombramos un proceso independiente que en algn momento est relacionado con el proceso principal. En su interior situamos la informacin necesaria para alimentar una actividad.
Conector
Datos Entrada/Salida
Decisin o bifurcacin
1.4. Qu es un programa?
Los programas son una serie o secuencia de instrucciones entendibles por los ordenadores que permiten la realizacin de las acciones o tareas para las que han sido creadas. Para escribir un programa se utilizan distintos lenguajes, denominados lenguajes de programacin.
Introduccin a la Informtica
Los programas se escriben en lo que se denomina lenguaje fuente, en el que se especifican las instrucciones que el programador desea que se ejecuten con el fin de realizar las acciones para las que se ha diseado el algoritmo. Sin embargo, este cdigo no lo puede entender directamente el ordenador y debe ser traducido al nico lenguaje que el ordenador puede interpretar: el lenguaje mquina o cdigo binario. Para realizar esta transformacin del cdigo se utilizan unos traductores, denominado compiladores e intrpretes, que convierten las instrucciones dadas por el programador en instrucciones comprensibles por un ordenador y generan el llamado cdigo objeto, que es el archivo fuente traducido a lenguaje mquina.
2.
Lenguajes de programacin.
La programacin, en trminos informticos, es la parte de la informtica que se dedica a la creacin de programas. Un lenguaje de programacin es un conjunto de smbolos y palabras (instrucciones y sentencias) que el usuario tiene a su disposicin para elaborar un programa. Formalmente, un lenguaje de programacin se define como un conjunto de smbolos, reglas sintcticas y reglas semnticas que se utiliza para controlar el comportamiento fsico y lgico de un ordenador. Las reglas sintcticas definen la estructura del lenguaje y las reglas semnticas definen el significado de sus elementos y expresiones. Aunque muchas veces se usan los trminos 'lenguaje de programacin' y 'lenguaje informtico' como si fuesen sinnimos, no es del todo correcto, ya que los lenguajes informticos engloban a los lenguajes de programacin y a otro tipo de lenguajes, como por ejemplo HTML que es un lenguaje de marcas. Un lenguaje de programacin permite especificar de manera precisa sobre qu datos debe trabajar un ordenador, cmo se deben almacenar o transmitir dichos datos y qu acciones deben tomar bajo un amplio conjunto de circunstancias. Todo esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o natural. Para definir un lenguaje de programacin es necesario especificar: Conjunto de smbolos y palabras clave utilizables. Reglas gramaticales para construir sentencias (instrucciones, rdenes) sintctica y semnticamente correctas. Se entiende por sintaxis el conjunto de normas que determinan cmo escribir las sentencias del lenguaje. Se denomina semntica al significado de las sentencias.
Introduccin a la Informtica
Esto implica que, para implementar un mismo algoritmo en distintos lenguajes de programacin, tendremos que utilizar en cada caso el conjunto de smbolos y palabras reservadas, as como el conjunto de reglas gramaticales correspondientes al lenguaje de programacin en cuestin. Por ejemplo, a continuacin incluimos el cdigo de tres programas que hacen lo mismo (mostrar por pantalla el texto Hola mundo) pero que se han implementado utilizando distintos lenguajes de programacin:
Pascal
program HolaMundo; begin writeln ('Hola mundo') end.
C
#include <stdio.h> int main() { printf ("Hola mundo"); return 0; }
Java
public class HolaMundo { public static void main(String[] args) { System.out.println("Hola mundo"); } }
Ntese que si se siguen las reglas de identacin se puede observar claramente los niveles en la estructura del programa utilizados en cada caso.
Introduccin a la Informtica
10
3.
Los lenguajes de programacin se pueden clasificar atendiendo a varios criterios: segn el nivel de abstraccin, la forma de ejecucin o el paradigma de programacin que utiliza cada uno de ellos.
Introduccin a la Informtica
11
Cdigo fuente
Cdigo objeto
3.2.2. Lenguajes interpretados Cada vez que se usa el programa debe invocarse a un traductor llamado intrprete que se encarga de traducir (interpretar) las instrucciones del programa original (cdigo fuente) a cdigo mquina segn van siendo utilizadas. Para el funcionamiento del programa siempre es necesario disponer del cdigo original y del intrprete. Intrprete
Cdigo Fuente
Las principales diferencias entre los lenguajes compilados e interpretados son: Los programas escritos en lenguajes compilados se compilan una vez y se utilizan cuantas veces se desee sin necesidad de volver a utilizar el compilador. Los lenguajes interpretados son interpretados, valga la redundancia, cada vez que se ejecutan y necesitan siempre del intrprete. Los compiladores analizan todo el programa y no generan resultados si no es correcto todo el cdigo. Los intrpretes analizan las instrucciones segn las necesitan y pueden iniciar la ejecucin de un programa con errores e incluso terminar
Introduccin a la Informtica
12
correctamente una ejecucin de un programa con errores siempre que no haya sido necesario el uso de las instrucciones que contienen dichos errores. Un compilador traduce cada instruccin una sola vez. Un intrprete debe traducir una instruccin cada vez que la encuentra. Los cdigos objeto son compilados para una arquitectura especfica y no se pueden utilizar en otras arquitecturas no compatibles (aunque pueden existir distintos compiladores para generar cdigos objeto para diferentes arquitecturas). Un lenguaje interpretado puede ser utilizado en cualquier arquitectura que disponga de un intrprete sin necesidad de cambios. Los lenguajes compilados son ms eficientes que los interpretados y adems permiten distribuir el programa en forma confidencial mediante cdigo binario.
Introduccin a la Informtica
13
Lgico. El mecanismo de inferencia genrico se basa en los procedimientos de deduccin de formulas vlidas en un sistema axiomtico. Funcional. El mecanismo de inferencia genrico se basa en la reduccin de una expresin funcional a otra equivalente simplificada. 3.3.3. Orientado a objetos. Se utiliza cada vez ms, sobre todo en combinacin con el modelo imperativo. De hecho los lenguajes orientados a objetos permiten la programacin imperativa. Usa objetos y sus interacciones para disear aplicaciones y programas. Est basado en varias tcnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento.
4.
En los apartados anteriores se ha visto que el lenguaje que entiende la mquina directamente se denomina lenguaje mquina. Cualquier programa escrito en un lenguaje diferente a ese se ha de traducir antes de que el ordenador pueda ejecutarlo. Un traductor es un programa que toma como entrada un programa escrito en un lenguaje fuente y lo transforma en un programa escrito en un lenguaje objeto. A proceso de conversin se le denomina traduccin y el mismo puede realizarse de dos maneras diferentes, por interpretacin o por compilacin. Un intrprete es un programa que toma como entrada un programa escrito en lenguaje fuente y lo va traduciendo y ejecutando instruccin por instruccin, una detrs de la otra, de una en una. Un compilador es un programa que toma como entrada un programa escrito en un lenguaje fuente de alto nivel y genera un programa equivalente, denominado programa objeto, escrito en un lenguaje de bajo nivel. El proceso de traduccin se divide generalmente en dos fases: una de anlisis y otra de sntesis. La fase de anlisis es ms cercana al lenguaje fuente y consiste en comprobar la sintaxis y la semntica de los programas fuente. Durante la fase de anlisis se realizan principalmente, tres tipos de comprobaciones: 1. Anlisis lxico: elimina del programa fuente toda la informacin innecesaria (espacios y lneas en blanco, comentarios, etc.) y comprueba que los smbolos del lenguaje (palabras clave, operadores, etc.) se han escrito correctamente.
Introduccin a la Informtica
14
2. Anlisis sintctico: comprueba si lo obtenido en el anlisis lxico es sintcticamente correcto, es decir, si est escrito conforme a la gramtica del lenguaje. 3. Anlisis semntico: comprueba que el significado de las sentencias del programa es correcto. La fase de sntesis es ms cercana al lenguaje de bajo nivel y se encarga de generar el cdigo ms eficiente para la mquina destino de la traduccin. Slo se genera cdigo objeto cuando el programa fuente est libre de errores de anlisis, lo cual no quiere decir que el programa se ejecute correctamente, ya que un programa puede tener errores de concepto o expresiones mal calculadas.
5.
Tecnologa de la Informacin y la Comunicacin, A. Gmez Gilaberte, E. Parramn Ponz, T. Antnez Izquierdo, Editorial Donostiarra, 2009. Fundamentos de Informtica y Programacin Cientfica, Resolucin en C y Matlab. J.M. Zamarreo. M.T. lvarez, L. Felipe, M. Garca, F. Taedo, Junta de Castilla y Len, 2000. Definicin de Programacin - Wikipedia: http://es.wikipedia.org/wiki/Programaci%C3%B3n Fundamentos de Informtica y Programacin Cientfica: http://www.isa.cie.uva.es/~jesusm/libro/libro_pc.html
Introduccin a la Informtica
15