Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 1
Tema 1
programa
ENTRADA datos
ORDENADOR
SALIDA resultado
Ilustracin 1: Tratamiento automtico de la informacin mediante el ordenador Es decir, para realizar el tratamiento de la informacin, el ordenador acepta unos datos denominados entrada (los datos), que mediante un programa transforma para proporcionar una salida (el resultado). Es precisamente en la determinacin del programa que el ordenador debe ejecutar donde el ser humano interviene de forma decisiva. La Ilustracin 1 esquematiza este proceso para el tratamiento automtico de la informacin mediante el ordenador. En general, la secuencia de operaciones necesarias para resolver un problema se denomina algoritmo, que puede considerarse como una frmula o receta para la resolucin de un problema . Cuando se pretende que el problema sea resuelto por un ordenador, dicho algoritmo debe expresarse de una forma adecuada: el programa. Un programa est formado por una serie de instrucciones que se corresponden con los distintos pasos del algoritmo que representa. Adems, las instrucciones del programa deben ajustarse a las normas que dicte el lenguaje de programacin utilizado. Finalmente, el conjunto de actividades que llevan al desarrollo de un programa informtico se denomina programacin. En la Ilustracin 2 se representan todos estos conceptos. Por ltimo, cabe distinguir dos conceptos importantes en el entorno de la informtica: hardware y software. Aunque la races hard (del ingls, rgido o inamovible) y soft (blando o flexible) de sendos trminos puedan considerarse contradictorias, en la informtica estos conceptos son complementarios, ya que el uno requiere del otro para poder ser utilizado. As, el hardware puede definirse como el conjunto de elementos fsicos que constituyen el ordenador (circuitos integrados, cableado, etc.), as como sus dispositivos perifricos (monitor, impresora, etc.), mientras que el software es el conjunto de programas que determinan el comportamiento del ordenador.
paridad BLOCK escribir ('Un n:') leer (n) n mod 2 = 0 if then else escribir ('Es par') escribir ('Es impar')
Lenguaje de programacin
program paridad(input,output); var n:integer; begin write('Introduzca un nmero entero: '); readln(n); if n mod 2 = 0 then writeln('El nmero es PAR') else writeln('El nmero es IMPAR') end.
ALGORITMO
Ilustracin 2: Relacin entre algoritmo y programa
PROGRAMA
ALU
BUS
Perifrico 1
Perifrico 2
Perifrico n
Unidades de Entrada/Salida
Ilustracin 4: Unidades de E/S habituales en un ordenador Mediante las unidades de salida se obtienen los resultados de los programas ejecutados en el ordenador. Transforman seales elctricas procedentes del ordenador en informacin perceptible por el ser humano. Ejemplos son el monitor, la impresora, el plotter, los altavoces, etc.
1.2.2 MEMORIA
En ella se almacena la informacin de manera temporal o permanente. La memoria es compartida tanto por los datos como por las instrucciones.
MEMORIA PRINCIPAL
Consiste en varios millones de circuitos elementales biestables capaces cada uno de encontrarse en uno de dos posibles estados que representan los dgitos binarios 0 o 1. La unidad mnima de informacin que se transfiere a o desde la memoria principal recibe el nombre de palabra y est compuesta por un nmero fijo de bits que suele ser mltiplo del byte. Distinguimos dos valores asociados a cada elemento de la memoria: Su contenido, que ser el dato o la instruccin que almacene. Su direccin, que nos permite acceder a su posicin en memoria para leer o escribir su contenido. Destacamos dos tipos de memoria principal: Memoria ROM (Read Only Memory): En esta memoria slo puede leerse, no escribirse y es permanente, de modo que su contenido no se pierde al desconectar el ordenador. En un PC, un chip especial llamado BIOS almacena el programa de arranque del ordenador en una memoria de tipo ROM. Memoria RAM (Random Access Memory): En esta memoria puede tanto leerse como escribirse. Por contra, es voltil, es decir, pierde su contenido al desconectar el ordenador. El tiempo de acceso a cualquier elemento de memoria es independiente de la posicin que ocupe, lo que la hace ms rpida que la memoria ROM.
MEMORIA SECUNDARIA
De los dos tipos de memoria principal, slo la memoria RAM permite la operacin de escritura. Sin embargo, esta memoria es voltil, por lo que no es posible el almacenamiento permanente de informacin en ella a menos que el ordenador se mantenga encendido continuamente. La memoria secundaria cubre esta deficiencia, permitiendo al usuario el almacenamiento de informacin de forma permanente. Los dispositivos de memoria secundaria se caracterizan adems por su bajo coste en relacin con la memoria principal, lo que permite disponer de grandes capacidades de almacenamiento. Se trata de diferentes elementos tales como dispositivos magnticos (disquetes, discos duros, discos ZIP, cintas), dispositivos pticos (CD-ROMs, CD-RWs, DVDs, etc.) o memorias flash. El inconveniente de los dispositivos de memoria secundaria es su baja velocidad de acceso. Por ello, la informacin deber llevarse desde memoria secundaria a memoria principal (RAM) antes de ser procesada por la CPU.
La tarea de resolucin de problemas se divide en tres fases: Anlisis del problema: consiste en definir y comprender el problema en toda su extensin, analizando todo aquello que es relevante para su resolucin. Diseo del algoritmo: determinar y representar genricamente el mtodo de resolucin del problema (algoritmo). Resolucin del problema mediante el ordenador: traducir el algoritmo a un lenguaje de programacin y comprobar que se ha hecho correctamente.
entrada (en el caso de datos procedentes de teclado) o durante la generacin de los nmeros aleatorios (en el caso de datos aleatorios). Un dato de salida es aqul que proporciona toda o parte de la solucin del problema y deber poder obtenerse a partir de los datos de entrada especificados en el apartado anterior. Para cada dato de salida se proporcionar: Identificador del dato, que permita referenciarlo durante la fase de anlisis. Descripcin del dato: en qu consiste el dato? Destino: deber indicarse el dispositivo de salida hacia el que se dirigir el dato (monitor, impresora, etc.). Una ltima seccin de la fase de anlisis estar reservada a la inclusin de aquellos comentarios que el programador considere oportunos para clarificar an ms el problema a resolver.
EJEMPLO 1.1. Se desea realizar un programa que determine el precio de una llamada telefnica entre telfonos fijos. El precio de la llamada lo constituye el coste por establecimiento de llamada (0.10 euros) y un coste por paso (0.03 euros/paso). La duracin de un paso depende del tramo horario en el que se efecte la llamada, segn la siguiente tabla: Tramo 1 60 seg. Tramo 2 20 seg. Tramo 3 40 seg.
El usuario indicar la duracin de la llamada y el tramo horario en el que se efectu. ANLISIS: a) Datos de entrada: EST_LLAM=0.10. Coste del establecimiento de llamada (en euros). Dato fijo. PASO=0.03. Coste de un paso (en euros). Dato fijo. DUR1=60. Duracin de un paso en el primer tramo horario (en segundos). Dato fijo. DUR2=20. Duracin de un paso en el segundo tramo horario (en segundos). Dato fijo. DUR3=40. Duracin de un paso en el tercer tramo horario (en segundos). Dato fijo. duracion: Duracin de la llamada (valor entero, en segundos). Teclado. ( duracion > 0). tramo: Tramo en el que se efectu la llamada (valor entero). Teclado. (tramo {1,2,3}). b) Datos de salida: precio: Coste de la llamada (en euros). Monitor. c) Comentarios: Las fracciones de pasos se computarn como pasos completos. Emplearemos una variable intermedia para calcular el nmero de pasos.
algoritmo determinar el mtodo de resolucin del problema, y si dicho mtodo se ha desarrollado adecuadamente su traduccin a un lenguaje de programacin u otro es una cuestin menor. Igualmente, el conocimiento de las particularidades internas de un tipo de ordenador u otro tampoco ser crucial para el diseo del algoritmo. Esto se debe a que el algoritmo es independiente tanto del lenguaje de programacin que vaya a emplearse como del ordenador donde finalmente se ejecute el programa que lo represente: de ah su gran importancia. Para la descripcin de un algoritmo pueden utilizarse representaciones grficas (diagramas) o textuales (pseudocdigo, lenguaje natural). Adems, el diseo de algoritmos requiere conocer de qu herramientas se dispone para describir los pasos de resolucin de un problema y cmo debemos utilizarlas. Esto depender de la metodologa de programacin que vayamos a emplear. En este curso nos centraremos en la metodologa de la programacin denominada programacin estructurada y emplearemos diagramas estructurados para la representacin de los algoritmos, los cuales sern estudiados en el siguiente captulo. La fase de diseo se descompone en dos subfases: a) Parte declarativa: en ella se incluir la definicin de constantes y la declaracin de variables que se estudiarn en el Captulo 2, en este orden. b) Representacin algortmica: descripcin del algoritmo empleando alguno de los mtodos de representacin mencionados.
EJEMPLO 1.2. La fase de diseo del problema planteado en el Ejemplo 1, empleando pseudocdigo para la representacin algortmica, sera la siguiente: a) Parte declarativa: CONSTANTES EST_LLAM=0.10 PASO=0.03 DUR1=60 DUR2=20 DUR3=40 VARIABLES duracion,tramo,numPasos: entero precio: real b) Representacin algortmica:
inicio leer desde teclado duracion mientras duracion 0 hacer escribir mensaje de error leer desde teclado duracion leer desde teclado tramo mientras tramo < 1 o tramo > 3 hacer escribir mensaje de error leer desde teclado tramo si tramo=1 entonces almacenar en numPasos el valor techo(duracion/DUR1) sino (es tramo=1) si tramo=2 entonces almacenar en numPasos el valor techo(duracion/DUR2) sino (es tramo=2) almacenar en numPasos el valor techo(duracion/DUR3) almacenar en precio el valor EST_LLAM+numPasosPASO escribir precio fin
en un hipottico lenguaje mquina como multiplicacin 0110 4 0100 3 0011 direccin 0001
suma 5 direccin 0101 0101 0001 donde puede observarse que tanto los cdigos de operacin como las direcciones de memoria y los valores se representan mediante cdigo binario. Obsrvese que la equivalencia real en instrucciones mquina sera exclusivamente la cadena binaria 0110010000110001010101010001, difcilmente comprensible de forma directa por el programador. LENGUAJES DE BAJO NIVEL (ENSAMBLADORES) Si bien en los primeros tiempos el programador utilizaba lenguaje mquina para describir sus programas, pronto se extendi la costumbre de emplear, durante el diseo de los algoritmos, mnemotcnicos para representar sus pasos (es decir, abreviaturas en ingls de las instrucciones de cdigo mquina a las que equivalen). Esto permita a los programadores abstraerse de las particularidades de la representacin interna de las instrucciones durante el desarrollo del mtodo de resolucin del problema y propici el siguiente paso en la evolucin de los lenguajes de programacin, los lenguajes ensambladores, donde las instrucciones se expresaban utilizando un lenguaje simblico (no binario) que aument la legibilidad de los programas. Sin embargo, estos lenguajes mantienen su dependencia de la mquina, siendo por tanto cada lenguaje ensamblador especfico de una familia de microprocesadores. Adems, cada instruccin en lenguaje ensamblador equivale a una nica instruccin en cdigo mquina. Por ejemplo, la operacin aritmtica anterior tendra en un hipottico lenguaje ensamblador un aspecto parecido al siguiente: MUL 4,3,A SUM 5,A Debido a lo todava complejo y poco intuitivo de su programacin, actualmente los ensambladores se utilizan en reas muy reducidas donde las exigencias en velocidad de ejecucin o aprovechamiento de recursos son elevadas. LENGUAJES DE ALTO NIVEL Aunque la introduccin de los lenguajes ensambladores supuso un importante paso hacia adelante en la evolucin de los lenguajes de programacin, an existan inconvenientes importantes que salvar, tales como la dependencia respecto al hardware y la obligacin de describir los mtodos de resolucin como una secuencia de los pequeos pasos que podan realizarse en lenguaje mquina. Se advirti la necesidad de proporcionar instrucciones de ms alto nivel que permitieran describir acciones de mayor envergadura, las cuales equivaldran luego a un conjunto de instrucciones en cdigo mquina. De esta idea surgieron los lenguajes de alto nivel, ms cercanos al modo de expresarse del ser humano y, por tanto, ms fciles de aprender y de utilizar. Igualmente, debido a su fcil comprensin, los programas escritos en un lenguaje de alto nivel son ms fciles de actualizar y corregir. El lenguaje C, que se trata en este curso, es un lenguaje de alto nivel. El ejemplo anterior se expresara en C con una nica instruccin: A = 43+5 10
fcilmente entendible. Obsrvese que esta nica instruccin en un lenguaje de alto nivel equivale a varias instrucciones en el cdigo mquina y el ensamblador del ejemplo anterior. Adems de su mayor legibilidad, otra de las caractersticas esenciales de los lenguajes de alto nivel es que son transportables. Esto significa que, a diferencia de los lenguajes de ms bajo nivel, el mismo programa puede ser vlido con pocos o ningn cambio en distintas plataformas, esto es, en ordenadores con distintos microprocesadores. Por tanto, los lenguajes de alto nivel son independientes del hardware. Sus inconvenientes se corresponden con las ventajas de los lenguajes mquina y ensambladores, ya que tanto en ocupacin de memoria como en tiempo de ejecucin los lenguajes de alto nivel presentan un consumo mayor que aqullos.
11
bibliotecas
ENSAMBLADOR O COMPILADOR
programa objeto
ENLAZADOR
programa ejecutable
ENSAMBLADOR O COMPILADOR
otros mdulos
Ilustracin 5: Esquema de funcionamiento de compiladores y ensambladores dibujar un crculo, cambiar el color del texto), matemticas (logartmicas, trigonomtricas), etc. Por otro lado, un programa puede hacer referencia a otros programas desarrollados por el propio programador que resuelven tareas no incluidas en la biblioteca de funciones (por ejemplo, C no incorpora una funcin para calcular el factorial de un nmero). Por ello, despus de traducir el programa principal mediante un ensamblador o un compilador, ser necesario unir el programa objeto generado con el resto de mdulos donde existan tareas a las que se haga referencia desde dicho programa principal. Para conseguir el programa ejecutable resultado de esta operacin de unin se debe utilizar una herramienta denominada montador, enlazador o linkador. De este modo, cuando estamos empleando un compilador o un ensamblador, el esquema de funcionamiento es el que se muestra en la Ilustracin 5.
12