You are on page 1of 28

Unidad 1: algoritmos y programas

1 de ASI - Curso 2006-07


Esta obra est bajo una licencia de Creative Commons. Autor: Jorge Snchez Asenjo (ao 2005) http://www.jorgesanchez.net email:info@jorgesanchez.net Esta obra est bajo una licencia de Reconocimiento-NoComercialCompartirIgual de CreativeCommons. Para ver una copia de esta licencia, visite: http://creativecommons.org/licenses/by-nc-sa/2.0/es/ o enve una carta a: Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

[1]

Reconocimiento-NoComercial-CompartirIgual 2.0 Espaa Usted es libre de:

copiar, distribuir y comunicar pblicamente la obra hacer obras derivadas

Bajo las condiciones siguientes:

Reconocimiento. Debe reconocer y citar al autor original.

No comercial. No puede utilizar esta obra para fines comerciales.

Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera una obra derivada, slo puede distribuir la obra generada bajo una licencia idntica a sta.

Al reutilizar o distribuir la obra, tiene que dejar bien claro los trminos de la licencia de esta obra.

Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor

Los derechos derivados de usos legtimos u otras limitaciones no se ven afectados por lo anterior. Esto es un resumen legible por humanos del texto legal (la licencia completa) disponible en la siguiente direccin de Internet: http://creativecommons.org/licenses/by-nc-sa/2.0/es/legalcode.es

[3]

[1.1] computadora y sistema operativo


[1.1.1] computadora
Segn la RAE (Real Academia de la lengua espaola), una computadora es una mquina electrnica, analgica o digital, dotada de una memoria de gran capacidad y de mtodos de tratamiento de la informacin, capaz de resolver problemas matemticos y lgicos mediante la utilizacin automtica de programas informticos. Sin duda esta mquina es la responsable de toda una revolucin que est cambiando el panorama econmico, social e incluso cultural. Debido a la importancia y al difcil manejo de estas mquinas, aparece la informtica como la ciencia orientada al proceso de informacin mediante el uso de computadoras. Una computadora consta de diversos componentes entre los que sobresale el procesador, el componente que es capaz de realizar las tareas que se requieren al ordenador o computadora. En realidad un procesador slo es capaz de realizar tareas sencillas como: Operaciones aritmticas simples: suma, resta, multiplicacin y divisin Operaciones de comparacin entre valores Almacenamiento de datos Algunos de los componentes destacables de un ordenador son:
Unidades de almacenamiento

Perifricos de entrada

(Unidad central de proceso)

CPU

Perifricos de salida

Otros dispositivos

Ilustracin 1, componentes de un ordenador desde un punto de vista lgico

Este desglose de los componentes del ordenador es el que interesa a los programadores. Pero desde un punto de vista ms fsico, hay otros componentes a sealar: Procesador. Ncleo digital en el que reside la CPU del ordenador. Es la parte fundamental del ordenador, la encargada de realizar todas las tareas. [5]

[Fundamentos de programacin]

Conocimientos bsicos Placa base. Circuito interno al que se conectan todos los componentes del ordenador, incluido el procesador. Memoria RAM. Memoria interna formada por un circuito digital que est conectado mediante tarjetas a la placa base. Su contenido se evapora cuando se desconecta al ordenador. Lo que se almacena no es permanente. Memoria cach. Memoria ultrarrpida de caractersticas similares a la RAM, pero de velocidad mucho ms elevada por lo que se utiliza para almacenar los ltimos datos utilizados. Perifricos. Aparatos conectados al ordenador mediante tarjetas o ranuras de expansin (tambin llamados puertos). Los hay de entrada (introducen datos en el ordenador: teclado, ratn, escner,...), de salida (muestran datos desde el ordenador: pantalla, impresora, altavoces,...) e incluso de entrada/salida (mdem, tarjeta de red). Unidades de almacenamiento. En realidad son perifricos, pero que sirven para almacenar de forma permanente los datos que se deseen del ordenador. Los principales son el disco duro (unidad de gran tamao interna al ordenador), la disquetera (unidad de baja capacidad y muy lenta, ya en desuso), el CDROM y el DVD.

[1.1.2] hardware y software


hardware
Se trata de todos los componentes fsicos que forman parte de un ordenador: procesador, RAM, impresora, teclado, ratn,...

software
Se trata de la parte conceptual del ordenador. Es decir los datos y aplicaciones que maneja y que permiten un grado de abstraccin mayor. Cualquier cosa que se pueda almacenar en una unidad de almacenamiento es software (la propia unidad sera hardware).

[1.1.3] Sistema Operativo


Se trata del software (programa) encargado de gestionar el ordenador. Es la aplicacin que oculta la fsica real del ordenador para mostrarnos un interfaz que permita al usuario un mejor y ms fcil manejo de la computadora.

funciones del Sistema Operativo


Las principales funciones que desempea un Sistema Operativo son: Permitir al usuario comunicarse con el ordenador. A travs de comandos o a travs de una interfaz grfica. Coordinar y manipular el hardware de la computadora: memoria, impresoras, unidades de disco, el teclado,... [6]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

Proporcionar herramientas para organizar los datos de manera lgica (carpetas, archivos,...) Proporcionar herramientas para organizar las aplicaciones instaladas. Gestionar el acceso a redes Gestionar los errores de hardware y la prdida de datos. Servir de base para la creacin de aplicaciones, proporcionando funciones que faciliten la tarea a los programadores. Administrar la configuracin de los usuarios. Proporcionar herramientas para controlar la seguridad del sistema.

algunos sistemas operativos


Windows. A da de hoy el Sistema Operativo ms popular (instalado en el 95% de computadoras del mundo). Es un software propiedad de Microsoft por el que hay que pagar por cada licencia de uso.

Ilustracin 2, Versiones actuales de Windows

[7]

[Fundamentos de programacin]

Conocimientos bsicos Linux. Sistema operativo de cdigo abierto. Posee numerosas distribuciones (muchas de ellas gratuitas) y software adaptado para l (aunque slo el 15% de ordenadores tiene instalado algn sistema Linux). Fundamentalmente su xito est en grandes mquinas o servidores. Actualmente las distribuciones Linux ms conocidas son: Red Hat, Fedora (versin gratuita de Red Hat), Debian, Ubuntu (variante de Debian de libre distribucin), Mandriva y SUSE. MacOs. Sistema operativo de los ordenadores MacIntosh. Unix. Sistema operativo muy robusto para gestionar redes de todos los tamaos. Actualmente en desuso debido al uso de Linux (que est basado en Unix), aunque sigue siendo muy utilizado para gestionar grandes redes (el soporte sigue siendo una de las razones para que se siga utilizando) Solaris. Versin de Unix para sistemas Sun.

[1.2] codificacin de la informacin


[1.2.1] introduccin
Sin duda una de las informaciones que ms a menudo un ordenador tiene que manipular son los nmeros. Pero tambin el ordenador necesita codificar otro tipo de informacin, como por ejemplo caracteres, imgenes, sonidos,... EL problema es que para el ordenador toda la informacin debe estar en formato binario (unos y ceros). Por ello se necesita traducir todos los datos a ese formato.

[1.2.2] sistemas numricos


En general, a lo largo de la historia han existido numerosos sistemas de numeracin. Cada cultura o civilizacin se ha servido en la antigedad de los sistemas que ha considerado ms pertinentes. Para simplificar, dividiremos a todos los sistemas en dos tipos: Sistemas no posicionales. En ellos se utilizan smbolos cuyo valor numrico es siempre el mismo independientemente de donde se siten. Es lo que ocurre con la numeracin romana. En esta numeracin el smbolo I significa siempre uno independientemente de su posicin. Sistemas posicionales. En ellos los smbolos numricos cambian de valor en funcin de la posicin que ocupen. Es el caso de nuestra numeracin, el smbolo 2, en la cifra 12 vale 2; mientras que en la cifra 21 vale veinte. La historia ha demostrado que los sistemas posicionales son mucho mejores para los clculos matemticos por lo que han retirado a los no posicionales. La razn: las operaciones matemticas son ms sencillas utilizando sistemas posicionales.

[8]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

Todos los sistemas posicionales tienen una base, que es el nmero total de smbolos que utiliza el sistema. En el caso de la numeracin decimal la base es 10; en el sistema binario es 2. El Teorema Fundamental de la Numeracin permite saber el valor decimal que tiene cualquier nmero en cualquier base. Dicho teorema utiliza la frmula: ...+ X3B3 + X2B2 + X1B1 + X0B0 + X-1B-1 + X-2B-2+... Donde: Xi Es el smbolo que se encuentra en la posicin nmero i del nmero que se est convirtiendo. Teniendo en cuenta que la posicin de las unidades es la posicin 0 (la posicin -1 sera la del primer decimal) B Es la base del sistemas que se utiliza para representar al nmero Por ejemplo si tenemos el nmero 153,6 utilizando e sistema octal (base ocho), el paso a decimal se hara: 182 + 581 + 380 + 68-1 = 64 + 40 + 3 + 6/8 = 107,75

[1.2.3] sistema binario


introduccin
Los nmeros binarios son los que utilizan las computadoras para almacenar informacin. Debido a ello hay trminos informticos que se refieren al sistema binario y que se utilizan continuamente. Son: BIT (de Binary diGIT). Se trata de un dgito binario, el nmero binario 1001 tiene cuatro BITS. Byte. Es el conjunto de 8 BITS. Kilobyte. Son 1024 bytes. Megabyte. Son 1024 Kilobytes. Gigabyte. Son 1024 Megabytes. Terabyte. Son 1024 Gigabytes. Petabyte. Son 1024 Terabytes.

conversin binario a decimal


Utilizando el teorema fundamental de la numeracin, por ejemplo para el nmero binario 10011011011 el paso sera (los ceros se han ignorado): 1210 + 127 + 126 + 124 + 123+ 121+ 120 = 1243

[9]

[Fundamentos de programacin]

Conocimientos bsicos

conversin decimal a binario


El mtodo ms utilizado es ir haciendo divisiones sucesivas entre dos. Los restos son las cifras binarias. Por ejemplo para pasar el 39: 39:2 = 19 resto 1 19:2 = 9 resto 1 9:2 = 4 resto 1 4:2 = 2 resto 0 2:2 = 1 resto 0 1:2 = 0 resto 1 Ahora las cifras binarias se toman al revs. Con lo cual, el nmero 100111 es el equivalente en binario de 39.

operaciones aritmticas binarias suma


Se efecta igual que las sumas decimales, slo que cuando se suma un uno y otro uno, ese dice que tenemos un acarreo de uno y se suma a la siguiente cifra. Ejemplo (suma de 31, en binario 10011, y 28, en binario, 11100) Acarreo 1 1 1 1 1 1 1 1

1 1 0

1 0 1

1 0 1

El resultado es 111011, 59 en decimal.

resta
El concepto es parecido slo que en el caso de la resta es importante tener en cuenta el signo. No se explica en el presente manual ya que se pretende slo una introduccin a los nmeros binarios. En la actualidad la resta se hace sumando nmeros en complemento a 21.

operaciones lgicas
Se trata de operaciones que manipulan BITS de forma lgica, son muy utilizadas en la informtica. Se basan en una interpretacin muy utilizada con los nmeros binarios en la cual el dgito 1 se interpreta como verdadero y el dgito 0 se interpreta como falso.

Se trata de una forma avanzada de codificar nmeros que utiliza el primer BIT como signo y utiliza el resto de forma normal para los nmeros positivos y cambiando los unos por los ceros para los nmeros negativos.

[10]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

operacin AND
La operacin AND (en espaol Y), sirve para unir expresiones lgicas, se entiende que el resultado de la operacin es verdadero si alguna de las dos expresiones es verdadero (por ejemplo la expresin ahora llueve y hace sol slo es verdadera si ocurren ambas cosas). En el caso de los dgitos binarios, la operacin AND opera con dos BITS de modo que el resultado ser uno si ambos bits valen uno. AND 0 1 0 0 0 1 0 1

La tabla superior se llama tabla de la verdad y sirve para mostrar resultados de operaciones lgicas, el resultado est en la parte blanca, en la otra parte se representan los operadores . El resultado ser 1 si ambos operadores valen 1

operacin OR
OR (O en espaol) devuelve verdadero si cualquiera de los operandos es verdadero (es decir, si valen 1). La tabla es esta: OR 0 1 0 1 0 1 1 1

operacin NOT
Esta operacin acta sobre un solo BIT y lo que hace es invertirle; es decir, si vale uno valdr cero, y si vale cero valdr uno. NOT 0 1 1 0

codificacin de otros tipos de datos a binario texto


Puesto que una computadora no slo maneja nmeros, habr dgitos binarios que contengan informacin que no es traducible a decimal. Todo depende de cmo se interprete esa traduccin. Por ejemplo en el caso del texto, lo que se hace es codificar cada carcter en una serie de nmeros binarios. El cdigo ASCII ha sido durante mucho tiempo el ms utilizado. Inicialmente era un cdigo que utilizaba 7 bits para representar texto, lo que significaba que era capaz de codificar 127 caracteres. Por ejemplo el nmero 65 (1000001 en binario) se utiliza para la A mayscula. Poco despus apareci un problema: este cdigo es suficiente para los caracteres del ingls, pero no para otras lenguas. Entonces se aadi el octavo bit para representar otros 128 caracteres que son distintos segn idiomas (Europa Occidental usa unos cdigos que no utiliza Europa Oriental). [11]

[Fundamentos de programacin]

Conocimientos bsicos Eso provoca que un cdigo como el 190 signifique cosas diferentes si cambiamos de pas. Por ello cuando un ordenador necesita mostrar texto, tiene que saber qu juego de cdigos debe de utilizar (lo cual supone un tremendo problema). Una ampliacin de este mtodo de codificacin es el cdigo Unicode que puede utilizar hasta 4 bytes (32 bits) con lo que es capaz de codificar cualquier carcter en cualquier lengua del planeta utilizando el mismo conjunto de cdigos. Poco a poco es el cdigo que se va extendiendo; pero la preponderancia histrica que ha tenido el cdigo ASCII, complica su popularidad. otros datos En el caso de datos ms complejos (imgenes, vdeo, audio) se necesita una codificacin ms compleja. Adems en estos datos no hay estndares, por lo que hay decenas de formas de codificar. En el caso, por ejemplo, de las imgenes, una forma bsica de codificarlas en binario es la que graba cada pxel (cada punto distinguible en la imagen) mediante tres bytes: el primero graba el nivel de rojo, el segundo el nivel de azul y el tercero el nivel de verde. Y as por cada pxel.

[1.2.4] sistema hexadecimal


Es un sistema que se utiliza mucho para representar nmeros binarios. Un problema (entre otros) de los nmeros binarios es que ocupan mucho espacio para representar informacin. El sistema hexadecimal es la forma de representar nmeros en base 16. de modo que en los dgitos del 0 al 9 se utilizan los mismos smbolos que en el sistema decimal y a partir del 10 se utiliza la letra A y as hasta la letra F que simboliza el 15. As el nmero hexadecimal CA3 sera: C162 + A161 + 3160 = 12256 + 1016 + 3 = 3235 Como se observa pasar de hexadecimal a decimal es complejo. La razn del uso de este sistema es porque tiene una equivalencia directa con el sistema binario. De hecho en una cifra hexadecimal caben exactamente 4 bits. Por ello la traduccin de hexadecimal a binario se basa en esta tabla: Hexadecimal 0 1 2 3 4 5 6 7 8 9 A [12] Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

Hexadecimal B C D E F

Binario 1011 1100 1101 1110 1111

As el nmero hexadecimal C3D4 sera el binario 1100 0011 1101 0100. Y el binario 0111 1011 1100 0011 sera el hexadecimal 7BC3

[1.3] algoritmos
[1.3.1] nocin de algoritmo
Segn la RAE: conjunto ordenado y finito de operaciones que permite hallar la solucin de un problema. Los algoritmos, como indica su definicin oficial, son una serie de pasos que permiten obtener la solucin a un problema. La palabra algoritmo procede del matemtico rabe Mohamed Ibn Al Kow Rizmi, el cual escribi sobre los aos 800 y 825 su obra Quitad Al Mugabala, donde se recoga el sistema de numeracin hind y el concepto del cero. Fibonacci, tradujo la obra al latn y la llam: Algoritmi Dicit. El lenguaje algortmico es aquel que implementa una solucin terica a un problema indicando las operaciones a realizar y el orden en el que se deben efectuarse. Por ejemplo en el caso de que nos encontremos en casa con una bombilla fundida en una lmpara, un posible algoritmo sera:

[1] Comprobar si hay bombillas de repuesto [2] En el caso de que las haya, sustituir la bombilla anterior por la nueva [3] Si no hay bombillas de repuesto, bajar a comprar una nueva a la tienda y
sustituir la vieja por la nueva Los algoritmos son la base de la programacin de ordenadores, ya que los programas de ordenador se puede entender que son algoritmos escritos en un cdigo especial entendible por un ordenador. Lo malo del diseo de algoritmos est en que no podemos escribir lo que deseemos, el lenguaje ha utilizar no debe dejar posibilidad de duda, debe recoger todas las posibilidades.

[13]

[Fundamentos de programacin]

Conocimientos bsicos Por lo que los tres pasos anteriores pueden ser mucho ms largos: [1] Comprobar si hay bombillas de repuesto [1.1] Abrir el cajn de las bombillas [1.2] Observar si hay bombillas [2] Si hay bombillas: [2.1] Coger la bombilla [2.2] Coger una silla [2.3] Subirse a la silla [2.4] Poner la bombilla en la lmpara [3] Si no hay bombillas [3.1] Abrir la puerta [3.2] Bajar las escaleras.... Cmo se observa en un algoritmo las instrucciones pueden ser ms largas de lo que parecen, por lo que hay que determinar qu instrucciones se pueden utilizar y qu instrucciones no se pueden utilizar. En el caso de los algoritmos preparados para el ordenador, se pueden utilizar slo instrucciones muy concretas.

[1.3.2] caractersticas de los algoritmos


caractersticas que deben de cumplir los algoritmos obligatoriamente
Un algoritmo debe resolver el problema para el que fue formulado. Lgicamente no sirve un algoritmo que no resuelve ese problema. En el caso de los programadores, a veces crean algoritmos que resuelven problemas diferentes al planteado. Los algoritmos son independientes del ordenador. Los algoritmos se escriben para poder ser utilizados en cualquier mquina. Los algoritmos deben de ser precisos. Los resultados de los clculos deben de ser exactos, de manera rigurosa. No es vlido un algoritmo que slo aproxime la solucin. Los algoritmos deben de ser finitos. Deben de finalizar en algn momento. No es un algoritmo vlido aquel que produce situaciones en las que el algoritmo no termina. Los algoritmos deben de poder repetirse. Deben de permitir su ejecucin las veces que haga falta. No son vlidos los que tras ejecutarse una vez ya no pueden volver a hacerlo por la razn que sea.

caractersticas aconsejables para los algoritmos


Validez. Un algoritmo es vlido si carece de errores. Un algoritmo puede resolver el problema para el que se plante y sin embargo no ser vlido debido a que posee errores [14]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

Eficiencia. Un algoritmo es eficiente si obtiene la solucin al problema en poco tiempo. No lo es si es lento en obtener el resultado. ptimo. Un algoritmo es ptimo si es el ms eficiente posible y no contiene errores. La bsqueda de este algoritmo es el objetivo prioritario del programador. No siempre podemos garantizar que el algoritmo hallado es el ptimo, a veces s.

[1.3.3] elementos que conforman un algoritmo


Entrada. Los datos iniciales que posee el algoritmo antes de ejecutarse. Proceso. Acciones que lleva a cabo el algoritmo. Salida. Datos que obtiene finalmente el algoritmo.

[1.3.4] fases en la creacin de algoritmos


Hay tres fases en la elaboracin de un algoritmo:

[1] Anlisis. En esta se determina cul es exactamente el problema a resolver. Qu


datos forman la entrada del algoritmo y cules debern obtenerse como salida.

[2] Diseo. Elaboracin del algoritmo. [3] Prueba. Comprobacin del resultado. Se observa si el algoritmo obtiene la
salida esperada para todas las entradas.

[1.4] aplicaciones
[1.4.1] programas y aplicaciones
Programa. La definicin de la RAE es: Conjunto unitario de instrucciones que permite a un ordenador realizar funciones diversas, como el tratamiento de textos, el diseo de grficos, la resolucin de problemas matemticos, el manejo de bancos de datos, etc. Pero normalmente se entiende por programa un conjunto de instrucciones ejecutables por un ordenador. Un programa estructurado es un programa que cumple las condiciones de un algoritmo (finitud, precisin, repeticin, resolucin del problema,...) Aplicacin. Software formado por uno o ms programas, la documentacin de los mismos y los archivos necesarios para su funcionamiento, de modo que el conjunto completo de archivos forman una herramienta de trabajo en un ordenador.

[15]

[Fundamentos de programacin]

Conocimientos bsicos Normalmente en el lenguaje cotidiano no se distingue entre aplicacin y programa; en nuestro caso entenderemos que la aplicacin es un software completo que cumple la funcin completa para la que fue diseado, mientras que un programa es el resultado de ejecutar un cierto cdigo entendible por el ordenador.

[1.4.2] historia del software. La crisis del software


Los primeros ordenadores cumplan una nica programacin que estaba definida en los componentes elctricos que formaban el ordenador. La idea de que el ordenador hiciera varias tareas (ordenador programable o multipropsito) hizo que se idearan las tarjetas perforadas. En ellas se utilizaba cdigo binario, de modo que se hacan agujeros en ellas para indicar el cdigo 1 o el cero. Estos primeros programas lgicamente servan para hacer tareas muy concretas. La llegada de ordenadores electrnicos ms potentes hizo que los ordenadores se convirtieran en verdaderas mquinas digitales que seguan utilizando el 1 y el 0 del cdigo binario pero que eran capaces de leer miles de unos y ceros. Empezaron a aparecer los primeros lenguajes de programacin que escriban cdigo ms entendible por los humanos que posteriormente era convertido al cdigo entendible por la mquina. Inicialmente la creacin de aplicaciones requera escribir pocas lneas de cdigo en el ordenador, por lo que no haba una tcnica especificar a la hora de crear programas. Cada programador se defenda como poda generando el cdigo a medida que se le ocurra. Poco a poco las funciones que se requeran a los programas fueron aumentando produciendo miles de lneas de cdigo que al estar desorganizada hacan casi imposible su mantenimiento. Slo el programador que haba escrito el cdigo era capaz de entenderlo y eso no era en absoluto prctico. La llamada crisis del software ocurri cuando se percibi que se gastaba ms tiempo en hacer las modificaciones a los programas que en volver a crear el software. La razn era que ya se haban codificado millones de lneas de cdigo antes de que se definiera un buen mtodo para crear los programas. La solucin a esta crisis ha sido la definicin de la ingeniera del software como un oficio que requera un mtodo de trabajo similar al del resto de ingenieras. La bsqueda de una metodologa de trabajo que elimine esta crisis parece que an no est resuelta, de hecho los mtodos de trabajo siguen redefinindose una y otra vez.

[1.4.3] el ciclo de vida de una aplicacin


Una de las cosas que se han definido tras el nacimiento de la ingeniera del software ha sido el ciclo de vida de una aplicacin. El ciclo de vida define los pasos que sigue el proceso de creacin de una aplicacin desde que se propone hasta que finaliza su construccin. Los pasos son:

[16]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

Anlisis

Diseo

Codificacin

Pruebas

Mantenimiento
Ilustracin 3, Ciclo de vida de una aplicacin [1] Anlisis. En esta fase se determinan los requisitos que tiene que cumplir la aplicacin. Se anota todo aquello que afecta al futuro funcionamiento de la aplicacin. Este paso le realiza un analista [4] Diseo. Se especifican los esquemas de diseo de la aplicacin. Estos esquemas forman los planos del programador, los realiza el analista y representan todos los aspectos que requiere la creacin de la aplicacin. [5] Codificacin. En esta fase se pasa el diseo a cdigo escrito en algn lenguaje de programacin. Esta es la primera labor que realiza el programador [6] Pruebas. Se trata de comprobar que el funcionamiento de la aplicacin es la adecuada. Se realiza en varias fases: [1.1] Prueba del cdigo. Las realizan programadores. Normalmente programadores distintos a los que crearon el cdigo, de ese modo la prueba es ms independiente y generar resultados ms ptimos. [1.2] Versin alfa. Es una primera versin terminada que se revisa a fin de encontrar errores. Estas pruebas conviene que sean hechas por personal no informtico. [1.3] Versin beta. Versin casi definitiva del software en la que no se estiman fallos, pero que se distribuye a los clientes para que encuentren posibles problemas. A veces est versin acaba siendo la definitiva (como ocurre con muchos de los programas distribuidos libremente por Internet). [7] Mantenimiento. Tiene lugar una vez que la aplicacin ha sido ya distribuida, en esta fase se asegura que el sistema siga funcionando aunque cambien los requisitos o el sistema para el que fue diseado el software. Antes esos cambios [17]

[Fundamentos de programacin]

Conocimientos bsicos se hacen los arreglos pertinentes, por lo que habr que retroceder a fases anteriores del ciclo de vida.

[1.5] errores
Cuando un programa obtiene una salida que no es la esperada, se dice que posee errores. Los errores son uno de los caballos de batalla de los programadores ya que a veces son muy difciles de encontrar (de ah que hoy en da en muchas aplicaciones se distribuyan parches para subsanar errores no encontrados en la creacin de la aplicacin).

tipos de errores
Error del usuario. Errores que se producen cuando el usuario realiza algo inesperado y el programa no reacciona apropiadamente. Error del programador. Son errores que ha cometido el programador al generar el cdigo. La mayora de errores son de este tipo. Errores de documentacin. Ocurren cuando la documentacin del programa no es correcta y provoca fallos en el manejo Error de interfaz. Ocurre si la interfaz de usuario de la aplicacin es enrevesada para el usuario impidiendo su manejo normal. Tambin se llaman as los errores de protocolo entre dispositivos. Error de entrada / salida o de comunicaciones. Ocurre cuando falla la comunicacin entre el programa y un dispositivo (se desea imprimir y no hay papel, falla el teclado,...) Error fatal. Ocurre cuando el hardware produce una situacin inesperado que el software no puede controlar (el ordenador se cuelga, errores en la grabacin de datos,...) Error de ejecucin. Ocurren cuando la ejecucin del programa es ms lenta de lo previsto. La labor del programador es predecir, encontrar y subsanar (si es posible) o al menos controlar los errores. Una mala gestin de errores causa experiencias poco gratas al usuario de la aplicacin.

[18]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

[1.6] lenguajes de programacin


[1.6.1] introduccin
breve historia de los lenguajes de programacin inicios de la programacin
Charles Babbage defini a mediados del siglo XIX lo que l llam la mquina analtica. Se considera a esta mquina el diseo del primer ordenador. La realidad es que no se pudo construir hasta el siglo siguiente. El caso es que su colaboradora Ada Lovelace escribi en tarjetas perforadas una serie de instrucciones que la mquina iba a ser capaz de ejecutar. Se dice que eso signific el inicio de la ciencia de la programacin de ordenadores. En la segunda guerra mundial debido a las necesidades militares, la ciencia de la computacin prospera y con ella aparece el famoso ENIAC (Electronic Numerical Integrator And Calculator), que se programaba cambiando su circuitera. Esa es la primera forma de programar (que an se usa en numerosas mquinas) que slo vale para mquinas de nico propsito. Si se cambia el propsito, hay que modificar la mquina.

primeros lenguajes
No mucho ms tarde apareci la idea de que las mquinas fueran capaces de realizar ms de una aplicacin. Para lo cual se ide el hecho de que hubiera una memoria donde se almacenaban esas instrucciones. Esa memoria se poda rellenar con datos procedentes del exterior. Inicialmente se utilizaron tarjetas perforadas para introducir las instrucciones. Durante mucho tiempo esa fue la forma de programar, que teniendo en cuenta que las mquinas ya entendan slo cdigo binario, consista en introducir la programacin de la mquina mediante unos y ceros. El llamado cdigo mquina. Todava los ordenadores es el nico cdigo que entienden, por lo Que cualquier forma de programar debe de ser convertida a cdigo mquina. En los aos 40 se intent concebir un lenguaje ms simblico. Poco ms tarde se ide el lenguaje ensamblador, que es la traduccin del cdigo mquina a una forma ms textual. Cada tipo de instruccin se asocia a una palabra mnemnica (como SUM para sumar por ejemplo), de forma que esas palabras tienen traduccin directa en el cdigo mquina. Despus habr que traducir el cdigo ensamblador a cdigo mquina, tarea que la realiza un software especial llamado tambin ensamblador. La idea es la siguiente: si en el cdigo mquina, el nmero binario 0000 significa sumar, y el nmero 0001 significa restar. Una instruccin mquina que sumara el nmero 8 (00001000 en binario) al nmero 16 (00010000 en binario) sera: 0000 00001000 00010000 Realmente no habra espacios en blanco, el ordenador entendera que los primeros cuatro BITS representan la instruccin y los 8 siguientes el primer nmero y los ocho [19]

[Fundamentos de programacin]

Conocimientos bsicos siguientes el segundo nmero (suponiendo que los nmeros ocupan 8 bits). Lgicamente trabajar de esta forma es muy complicado. Por eso se podra utilizar la siguiente traduccin en ensamblador: SUM 8 16

Que ya se entiende mucho mejor.


Fortran
1954

Algol
1958

Lisp
1958

Cobol
1960

Basic
1964

CPL
1963

Simula
1964

PL/I
1963

Pascal
1970

B
1969

Logo
1968

C
1971

Sh SmallTalk
1973 1971

Modula
1975

Awk
1978

C++ Quick Basic


1984 1983

Perl
1987

Turbo Pascal
1988

Visual Basic
1991

Python
1991

Oak
1991

VBScript
1993

Delphi
1995

JavaScript
1995

Java
1995

PHP
1995

ASP
1996

Java 2
1998

C#
2000

Ilustracin 4, Evolucin de algunos lenguajes de programacin

[20]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

La cuestin es que este cdigo (todava de bajo nivel) se escribir en un editor de texto y despus un software especial (que tambin se le llama ensamblador) lo traducir al cdigo mquina equivalente. La ventaja es que la traduccin es literal, tenemos toda la potencia de la mquina ya que podemos utilizar cualquier instruccin de la misma. La desventaja es que tenemos que conocer muy bien la mquina y que el cdigo slo vale para mquinas totalmente compatibles El problema es que como el ensamblador es traduccin absoluta del cdigo mquina, slo vale para mquinas compatibles. No vale para cualquiera. Adems de lo pesado y lento que es programar en ensamblador.

lenguajes de alto nivel


Aunque el ensamblador signific una notable mejora sobre el cdigo mquina, segua siendo excesivamente crptico. De hecho para hacer un programa sencillo requiere miles y miles de lneas de cdigo. Para evitar los problemas del ensamblador apareci la tercera generacin de lenguajes de programacin, la de los lenguajes de alto nivel. En este caso el cdigo vale para cualquier mquina pero deber ser traducido mediante software especial que adaptar el cdigo de alto nivel al cdigo mquina correspondiente. Esta traduccin es necesaria ya que el cdigo en un lenguaje de alto nivel no se parece en absoluto al cdigo mquina. Tras varios intentos de representar lenguajes, en 1957 aparece el que se considera el primer lenguaje de alto nivel, el FORTRAN (FORmula TRANslation), lenguaje orientado a resolver frmulas matemticos. Poco a poco fueron evolucionando los lenguajes formando lenguajes cada vez mejores (ver ). As en 1958 se crea LISP como lenguaje declarativo para expresiones matemticas. En 1960 la conferencia CODASYL se creo el COBOL como lenguaje de gestin en 1960. En 1963 se creo PL/I el primer lenguaje que admita la multitarea y la programacin modular. BASIC se creo en el ao 1964 como lenguaje de programacin sencillo de aprender en 1964 y ha sido, y es, uno de los lenguajes ms populares. En 1968 se crea LOGO para ensear a programar a los nios. Pascal se creo con la misma idea acadmica pero siendo ejemplo de lenguaje estructurado para programadores avanzados. El creador del Pascal (Niklaus Wirdth) creo Modula en 1977 siendo un lenguaje estructurado para la programacin de sistemas (intentando sustituir al C).

lenguajes orientados a objetos


En los 80 llegan los lenguajes preparados para la programacin orientada a objetos todos procedentes de Simula (1964) considerado el primer lenguaje con facilidades de uso de objetos. De estos destac inmediatamente C++. A partir de C++ aparecieron numerosos lenguajes que convirtieron los lenguajes clsicos en lenguajes orientados a objetos (y adems con mejoras en el entorno de programacin, son los llamados lenguajes visuales): Visual Basic, Delphi (versin orientada a objetos de Pascal), Visual C++,... En 1995 aparece Java como lenguaje totalmente orientado a objetos y en el ao 200 aparece C# un lenguaje que procede de C++ y del propio Java.

[21]

[Fundamentos de programacin]

Conocimientos bsicos

lenguajes para la web


La popularidad de Internet ha producido lenguajes hbridos que se mezclan con el cdigo HTML con el que se crean las pginas web. Todos ellos son de finales de los aos 90. Son lenguajes interpretados como JavaScript o VB Script, o lenguajes especiales para uso en servidores como ASP, JSP o PHP. Todos ellos permiten crear pginas web usando cdigo mezcla de pgina web y lenguajes de programacin sencillos.

tipos de lenguajes
Segn el estilo de programacin se puede hacer esta divisin: Lenguajes imperativos. Son lenguajes donde las instrucciones se ejecutan secuencialmente y van modificando la memoria del ordenador para producir las salidas requeridas. La mayora de lenguajes (C, Pascal, Basic, Cobol, ...son de este tipo. Dentro de estos lenguajes estn tambin los lenguajes orientados a objetos (C++, Java, C#,...) Lenguajes declarativos. Son lenguajes que se concentran ms en el qu, que en el cmo (cmo resolver el problema es la pregunta a realizarse cuando se usan lenguajes imperativos). Los lenguajes que se programan usando la pregunta qu queremos? son los declarativos. El ms conocido de ellos es el lenguaje de consulta de Bases de datos, SQL. Lenguajes funcionales. Definen funciones, expresiones que nos responden a travs de una serie de argumentos. Son lenguajes que usan expresiones matemticas, absolutamente diferentes del lenguaje usado por las mquinas. El ms conocido de ellos es el LISP. Lenguajes lgicos. Lenguajes utilizados para resolver expresiones lgicas. Utilizan la lgica para producir resultados. El ms conocido es el PROLOG.

intrpretes
A la hora de convertir un programa en cdigo mquina, se pueden utilizar dos tipos de software: intrpretes y compiladores. En el caso de los intrpretes se convierte cada lnea a cdigo mquina y se ejecuta ese cdigo mquina antes de convertir la siguiente lnea. De esa forma si las dos primeras lneas son correctas y la tercera tiene un fallo de sintaxis, veramos el resultado de las dos primeras lneas y al llegar a la tercera se nos notificara el fallo y finalizara la ejecucin. El intrprete hace una simulacin de modo que parece que la mquina entiende directamente las instrucciones del lenguaje, pareciendo que ejecuta cada instruccin (como si fuese cdigo mquina directo). El BASIC era un lenguaje interpretado, se traduca lnea a lnea. Hoy en da la mayora de los lenguajes integrados en pginas web son interpretados, la razn es que como la descarga de Internet es lenta, es mejor que las instrucciones se vayan traduciendo segn van llegando en lugar de cargar todas en el ordenador. Por eso lenguajes como JavaScript (o incluso, en parte, Java) son interpretados.

[22]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

proceso
Un programa que se convierte a cdigo mquina mediante un intrprete sigue estos pasos:

[1] Lee la primera instruccin [2] Comprueba si es correcta [3] Convierte esa instruccin al cdigo mquina equivalente [4] Lee la siguiente instruccin [5] Vuelve al paso 2 hasta terminar con todas las instrucciones ventajas
Se tarda menos en crear el primer cdigo mquina. El programa se ejecuta antes. No hace falta cargar todas las lneas para empezar a ver resultados (lo que hace que sea una tcnica idnea para programas que se cargan desde Internet)

desventajas
El cdigo mquina producido es peor ya que no se optimiza al valorar una sola lnea cada vez. El cdigo optimizado permite estudiar varias lneas a la vez para producir el mejor cdigo mquina posible, por ello no es posible mediante el uso de intrpretes. Todos los errores son errores en tiempo de ejecucin, no se pueden detectar antes de lanzar el programa. Esto hace que la depuracin de los errores sea ms compleja. El cdigo mquina resultante gasta ms espacio. Hay errores difcilmente detectables, ya que para que los errores se produzcan, las lneas de errores hay que ejecutarlas. Si la lnea es condicional hasta que no probemos todas las posibilidades del programa, no sabremos todos los errores de sintaxis cometidos.

compiladores
Se trata de software que traduce las instrucciones de un lenguaje de programacin de alto nivel a cdigo mquina. La diferencia con los intrpretes reside en que se analizan todas las lneas antes de empezar la traduccin. Durante muchos aos, los lenguajes potentes han sido compilados. El uso masivo de Internet ha propiciado que esta tcnica a veces no sea adecuada y haya lenguajes modernos interpretados o semi interpretados, mitad se compila hacia un cdigo intermedio y luego se interpreta lnea a lnea (esta tcnica la siguen Java y los lenguajes de la plataforma .NET de Microsoft).

ventajas
Se detectan errores antes de ejecutar el programa (errores de compilacin) El cdigo mquina generado es ms rpido (ya que se optimiza) [23]

[Fundamentos de programacin]

Conocimientos bsicos Es ms fcil hacer procesos de depuracin de cdigo

desventajas
El proceso de compilacin del cdigo es lento. No es til para ejecutar programas desde Internet ya que hay que descargar todo el programa antes de traducirle, lo que ralentiza mucho su uso.

[1.7] programacin
[1.7.1] introduccin
La programacin consiste en pasar algoritmos a algn lenguaje de ordenador a fin de que pueda ser entendido por el ordenador. La programacin de ordenadores comienza en los aos 50 y su evolucin a pasado por diversos pasos. La programacin se puede realizar empleando diversas tcnicas o mtodos. Esas tcnicas definen los distintos tipos de programaciones.

[1.7.2] programacin desordenada


Se llama as a la programacin que se realizaba en los albores de la informtica (aunque desgraciadamente en la actualidad muchos programadores siguen emplendola). En este estilo de programacin, predomina el instinto del programador por encima del uso de cualquier mtodo lo que provoca que la correccin y entendimiento de este tipo de programas sea casi ininteligible. Ejemplo de uso de esta programacin (listado en Basic clsico): 10 20 30 40 50 60 X=RANDOM()*100+1; PRINT escribe el nmero que crees que guardo INPUT N IF N>X THEN PRINT mi numero es menor GOTO 20 IF N<X THEN PRINT mi numero es mayor GOTO 20 PRINT Acertaste!

El cdigo anterior crea un pequeo juego que permite intentar adivinar un nmero del 1 al 100.

[24]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

[1.7.3] programacin estructurada


En esta programacin se utiliza una tcnica que genera programas que slo permiten utilizar tres estructuras de control: Secuencias (instrucciones que se generan secuencialmente) Alternativas (sentencias if) Iterativas (bucles condicionales) El listado anterior en un lenguaje estructurado sera (listado en Pascal): PROGRAM ADIVINANUM; USES CRT; VAR x,n:INTEGER; BEGIN X=RANDOM()*100+1; REPEAT WRITE(Escribe el nmero que crees que guardo); READ(n); IF (n>x) THEN WRITE(Mi nmero es menor); IF (n>x) THEN WRITE(Mi nmero es mayor); UNTIL n=x; WRITE(Acertaste); La ventaja de esta programacin est en que es ms legible (aunque en este caso el cdigo es casi ms sencillo en su versin desordenada). Todo programador debera escribir cdigo de forma estructurada.

[1.7.4] programacin modular


Completa la programacin anterior permitiendo la definicin de mdulos independientes cada uno de los cuales se encargar de una tarea del programa. De este forma el programador se concentra en la codificacin de cada mdulo haciendo ms sencilla esta tarea. Al final se deben integrar los mdulos para dar lugar a la aplicacin final. El cdigo de los mdulos puede ser invocado en cualquier parte del cdigo. Realmente cada mdulo se comporta como un subprograma que, partir de unas determinadas entradas obtienen unas salidas concretas. Su funcionamiento no depende del resto del programa por lo que es ms fcil encontrar los errores y realizar el mantenimiento.

[25]

[Fundamentos de programacin]

Conocimientos bsicos

[1.7.5] programacin orientada a objetos


Es la ms novedosa, se basa en intentar que el cdigo de los programas se parezca lo ms posible a la forma de pensar de las personas. Las aplicaciones se representan en esta programacin como una serie de objetos independientes que se comunican entre s. Cada objeto posee datos y mtodos propios, por lo que los programadores se concentran en programar independientemente cada objeto y luego generar el cdigo que inicia la comunicacin entre ellos. Es la programacin que ha revolucionado las tcnicas ltimas de programacin ya que han resultado un importante xito gracias a la facilidad que poseen de encontrar fallos, de reutilizar el cdigo y de documentar fcilmente el cdigo.

[1.7.6] lenguajes de programacin


introduccin
Los lenguajes de programacin permiten codificar algoritmos en el ordenador. Son una serie de smbolos e instrucciones de acuerdo con una sintaxis que facilita su posterior traduccin a cdigo entendible por el ordenador, En realidad los ordenadores slo reconocen un lenguaje formado por los unos y ceros del cdigo binario. Segn la disposicin de esos unos y ceros entender unas instrucciones u otras. De esa forma hay lenguajes ms prximos al lenguaje de las computadores (lenguajes de bajo nivel) y lenguajes ms prximos al lenguaje humando (lenguajes de alto nivel)

cdigo mquina (lenguaje de primera generacin)


Est formado por una sucesin de unos y ceros que el procesador del ordenador reconoce como instrucciones. Es el lenguaje que reconoce directamente el ordenador por lo tanto es el que est a ms bajo nivel. Slo se ha utilizado por los programadores en los inicios de la informtica. Su incomodidad de trabajo hace que sea impensable para ser utilizado. Pero cualquier programa de ordenador debe, finalmente, ser convertido a este cdigo para que un ordenador puede ejecutar las instrucciones de dicho programa. Un detalle a tener en cuente es que el cdigo mquina es distinto para cada tipo de procesador. Lo que hace que los programas en cdigo mquina no sean portables entre distintas mquinas.

[26]

[1 de Administracin de Sistemas Informticos] Copyleft - Jorge Snchez

ensamblador (lenguajes de segunda generacin)


Se trata de un lenguaje que representa el cdigo mquina pero escrito con una serie de trminos mnemotcnicos que facilitan su escritura. Despus un software especial se encargar de traducir las instrucciones a cdigo mquina. Ejemplo2 (programa que saca el texto Hola mundo por pantalla): DATOS SEGMENT saludo db "Hola mundo!!!","$" DATOS ENDS CODE SEGMENT assume cs:code,ds:datos START PROC mov ax,datos mov ds,ax mov dx,offset saludo mov ah,9 int 21h mov ax,4C00h int 21h START ENDP CODE ENDS END START Este lenguaje tiene traduccin exacta al cdigo mquina, por lo que es un lenguaje diferente para cada procesador; es decir, no es portable. La ventaja de este lenguaje es que se puede controlar absolutamente el funcionamiento de la mquina, lo que permite crear programas muy eficientes. Lo malo es precisamente que hay que conocer muy bien el funcionamiento de la computadora para crear programas en estos lenguajes. Adems las lneas requeridas para realizar una tarea se disparan ya que las instrucciones de la mquina son excesivamente simples.

lenguajes de alto nivel (lenguajes de tercera generacin)


Se aproximan ms al lenguaje de los humanos. Los programas se disean en un lenguaje estricto pero independiente de la mquina, lo que permite que la escritura del cdigo cree programas ejecutables en cualquier mquina. Hace falta software que transforme el cdigo en el lenguaje de alto nivel en cdigo entendible por el ordenador en un proceso conocido como interpretacin o compilacin (dependiendo del lenguaje). El cdigo es menos eficiente que en el caso anterior, pero es ms entendible y mucho ms fcilmente corregible. Hoy en da casi todos los lenguajes son de alto nivel (C, Basic, Cobol, Fortran, Pascal,...).

Ejemplo tomado de la pgina http://www.victorsanchez2.net

[27]

[Fundamentos de programacin]

Conocimientos bsicos Ejemplo (cdigo Java): /** *Calcula los primos del 1 al 1000 */ public class primos { /** Funcin principal */ public static void main(String args[]){ int nPrimos=10000; boolean primo[]=new boolean[nPrimos+1]; short i; for (i=1;i<=nPrimos;i++) primo[i]=true; for (i=2;i<=nPrimos;i++){ if (primo[i]){ for (int j=2*i;j<=nPrimos;j+=i){ primo[j]=false; } } for (i=1;i<=nPrimos;i++) { System.out.print(" "+i); } } }

A veces se habla de lenguajes de medio nivel para referirse a lenguajes que utilizan una codificacin que est entre el ensamblador y el lenguaje de alto nivel. El C se considera a menudo un lenguaje de nivel medio ya que su codificacin puede resultar tan crptica como un cdigo en ensamblador. De hecho las posibilidades del C son similares a las del ensamblador, pero su estructura es la de un lenguaje de alto nivel.

lenguajes de cuarta generacin o 4GL (fourth generation languages)


Son lenguajes en los que apenas hay cdigo y en su lugar aparecen indicaciones sobre qu es lo que el programa debe de obtener. En estos lenguajes hay herramientas de tipo ms visual mediante las que se disea el funcionamiento del programa. Los lenguajes de consulta de datos, creacin de formularios, informes,... son lenguajes de cuarto nivel. Aparecieron con los sistemas de base de datos.

[28]

You might also like