Algoritmos y Lenguajes de Programaci+¦n

download Algoritmos y Lenguajes de Programaci+¦n

of 90

Transcript of Algoritmos y Lenguajes de Programaci+¦n

Algoritmos y Lenguajes de Programacin

1. Introduccin a la computacin Los computadores se han convertido en una herramienta indispensable para la vida actual. La mayor parte de los aparatos electrnicos estn dotados de algn elemento de computacin (lavadoras, celulares, televisores, etc.). Las primeras maquinas de calculo fueron los bacos. Luego los cientficos estaban interesados en crear una maquina calculadora que pudiera realizar clculos matemticos. En 1642 el filsofo y cientfico francs Blaise Pascal invento la primera mquina calculadora, ella poda sumar y restar. En 1843 apareci la maquina analtica diseada por Charles Babbage. Esta mquina era mecnica, luego en 1940 aparecieron las primeras computadoras electrnicas. Colossus en Inglaterra y el ENIAC en estados unidos. Eran mquinas calculadoras enormes, ni comparadas con los Computadores actuales, denominados PC. LA COMPUTACION La computacin es una Ciencia que estudia los computadores. Y la informtica es una Rama de la computacin que estudia el proceso automtico de la informacin de ah su nombre, Informtica (Informacin Automtica). Computador: El Computador es una maquina electrnica que procesa gran cantidad de datos en forma rpida y segura.

ORGANIZACIN FSICA DE UN COMPUTADOR

Dispositivos de Entrada: Sirve para introducir datos en el computador parasu proceso (teclado, Mouse, micrfono, WebCam). Dispositivos de Salida: Son los que permiten la salida de informacin Monitor, Parlantes) al usuario (Impresora,

(Procesador) C.P.U: Unidad Central de Proceso: es un dispositivo que se encuentra al interior del computador y que ejecuta las instrucciones del programa. El procesador manipula la informacin almacenada en la memoria; puede recuperar informacin desde la memoria. Tambin almacena los resultados de los procesos en memoria para su uso posterior. El procesador consta de dos componentes: (U.C) Unidad de Control (A.L.U.) Unidad de Aritmtica - Lgica

Unidad de Control: Coordina las actividades del computador y determina que operaciones se deben realizar y en qu orden. Unidad Aritmtica Lgica: Realiza operaciones aritmticas y lgicas, tales como. Suma - Resta - Divisin Multiplicacin Comparaciones Memoria RAM Memoria ROM

La Memoria RAM (Random Access Memory): Esta memoria es de tipo voltil o aleatoria, porque la informacin que contiene solo permanece en ella mientras el computador esta encendido. La memoria ROM (Read Only Memory): Memoria solo de lectura, contiene instrucciones fundamentales que no se pueden modificar. El computador puede leer los datos almacenados en la memoria ROM, pero no puede introducir datos en ella.

Los datos son introducidos por el fabricante. (Instrucciones que carga el computador cuando enciende) Memoria Auxiliar o Externa (Almacenamiento): En donde se almacenan todos los programas o datos que el usuario desee. Los ms comnmente utilizados son: Discos: Discos magnticos o Discos Duros, Discos Duros Virtuales, Disquete. Discos pticos: Cd-Rom, Cd-Rw, DVD. Discos Flash: Los ya conocidos PenDrives. Cintas: DAT (Digital Audio Tape) capacidad de varios GigaByte (GB). CONCEPTOS IMPORTANTES Hardware: El hardware del computador est compuesto por toda la parte fsica y tangible de l. Por ejemplo: Discos Duros, CPU, Memorias RAM, Impresora, Monitor, etc. O sea todo lo que podemos ver y tocar. Software: Este trmino se utiliza para denominar a la parte lgica del computador, es decir a todos los programas computacionales que conocemos hoy en da. Dentro de la clasificacin del software estn: a) Los Sistemas Operativos: Conjunto de programas que permiten administrar y controlar los recursos del computador. Son ejemplo de ellos Windows, Linux, Unix, Solaris, Novell, etc. b) Programas de Uso General: Todos aquellos programas de los cuales podemos realizar alguna tarea o trabajo especfico. Son ejemplo de ellos Word, Excel, Acess, Acrobat Reader, etc. c) Lenguajes de Programacin: Todos aquellos programas que permiten realizar algn programa de aplicacin, o sea son programas que permiten hacer o desarrollar programas. Ejemplo de ellos Visual Basic y el Famoso JAVA. d) Programas de Aplicaciones: Programas que son realizados en un lenguaje de programacin. Por ejemplo Sistemas de facturacin para una empresa, Sistemas de contabilidad, Sistemas de Bodega.

1.1. Nuevas Tecnologas de la Informacin. Nuevas tecnologas de la informacin y comunicacin (NTIC) y cultura El INTERNET es la principal NTIC a la que estamos expuestos. Pero hay muchas otras que poco ha poco nos van invadiendo, gracias al poder de las telecomunicaciones y la electrnica. Cundo fue que perdimos perder nuestra intimidad y nuestro espacio personal en pos de la informacin instantnea? Ahora le toma

unos pocos segundos a nuestros jefes o compaeros de trabajo encontrarnos, ya sea en la oficina, nuestro hogar o nuestras vacaciones. Casi no hay escondite al que no tenga alcance el espectro electromagntico. Y con los gadgets tecnolgicos modernos y porttiles, podemos intercambiar imgenes, video y sonido en tiempo real con quien sea, donde sea y cuando sea. El profesor, el prroco o el cinfilo pueden dar fe de lo molesto que es ser interrumpidos (en la clase, el sermn o la pelcula, respectivamente) por un telfono sonando o brillando, y un individuo que le da lo mismo contestar en voz alta, que salirse a contestar su mensaje urgente. Lo urgente se ha vuelto instantneo, y no hace distinciones con lo banal y lo cotidiano. Ante la necesidad de ms informacin, ms rpida, ms instantnea, el cibernauta actual se aburre ante un libro, le pierde inters a la educacin formal y no encuentra que hacer cuando las bateras se han agotado. Es esta una manifestacin cultural, de la misma manera en que el cubismo, el mestizaje o el rock-androll lo han sido en distintas pocas? Por lo regular, dentro de la mayora de las sociedades, asociamos a la cultura con aspectos histricos, literarios, artsticos e incluso deportivos. Muy pocas veces consideramos al desarrollo tecnolgico y cientfico como una manifestacin de la cultura. La ciencia no es cultura, haban llegado a aseverar los editores de algunas publicaciones culturales de habla hispana; lo mismo se poda aplicar para la tcnica. Sin embargo, es interesante notar como hoy en da, con el auge de las NTIC y su entrada en prcticamente todos los aspectos de nuestra vida cotidiana, muchos de dichos espacios impresos y electrnicos de difusin de la cultura han incorporado en alguna seccin o columna, a la ciencia y la tecnologa, ya sea en su forma ms aplicada o en sus aspectos ms bsicos. Incluso las modas se han modificado y no es raro hallar ropas que incorporan espacios para los distintos dispositivos electrnicos, mochilas que incluyen reproductores de audio y video-juegos e incluso electrodomsticos capaces de conectarse a la red cuando algn producto escasea y pedirlo en nuestro lugar, para que nunca falte nada. Algunos libros se han digitalizado y pueden ser llevados como e-book en una PDA, copiando aquellas partes que nos interesan y avanzando rpido con el mousepad en aquellas partes que no. Se publica en medios electrnicos la nueva informacin antes que en los medios impresos (libros o peridicos). Libros y revistas electrnicas (e-zines) se estn convirtiendo en artculos de uso comn entre todos los usuarios, aunque aun sin convertirse en una amenaza real para la industria editorial tradicional, que aparentemente seguir acompaando a la humanidad por otros siglos ms. Por eso, y aun cuando podemos seguir considerando a los libros y materiales impresos como el principal vehculo de transmisin del conocimiento y la informacin (Cox, 1997), las tendencias marcan el uso y comercializacin de materiales mixtos (libros acompaados de un CD-ROM o DVD que extiende los alcances y sobrepasa las limitaciones propias de un material impreso; sitios web conteniendo informacin complementaria, entre varias posibilidades). La generacin del INTERNET es joven, y esto es entendible ya que la tecnologa naci en la dcada de 1970. Esta generacin ha convivido con computadoras desde su infancia y les es muy natural el uso de la red. Conocen los atajos en la supercarretera de la informacin y muchos de ellos no emplean los motores de bsqueda ms populares (LYCOS, YAHOO, Google). Muchos iniciaron su aventura informtica al principio por pura curiosidad, mientras que otros por la

necesidad que el trabajo o la escuela les imponan. Lo cierto es que ahora consideran a las tecnologas de la informacin importantes en sus vidas pues hace la bsqueda de informacin fcil y econmica, hacen mucho ms eficientes y sencillos sus trabajos y facilitan las telecomunicaciones. Muy pocos han aceptado que el INTERNET puede hacerlos ms flojos, irritables o que ha afectado en alguna medida su capacidad de interaccin social. No todo el INTERNET es miel sobre hojuelas. La absoluta libertad existente en cuanto al contenido de pginas crea situaciones que pueden ser (y son) empleadas para fines criminales, pornografa, bsqueda de informacin confidencial por parte de hackers, entre otros problemas que hemos mencionado anteriormente. Algunos individuos han desarrollado trastornos de personalidad que hacen pensar a psiclogos y socilogos en un problema de adiccin informtica, con sintomatologas y problemticas similares a la drogadiccin. Adems, la brecha que esta nueva tecnologa de la informacin est abriendo entre aquellos con acceso a sta y quienes no lo tienen, genera un abismo cultural ms grande entre pases desarrollados y no desarrollados. El control de la informacin por parte de solo unos cuntos, crea un nuevo tipo de discriminacin y desigualdad social. La tendencia actual indica que la informacin ser el vehculo de intercambio en los distintos mercados globales de este siglo, tendencia que la sociedad est adoptando de diversas formas (Mndez y Ramrez, 1996; Saunders, 1997). La moneda de intercambio para la generacin cyberpunk es la informacin. Information must be free proclaman, y por eso la distribuyen libremente. En estas pocas, la sociedad de la informacin (SI) vive un auge que hubiera sido difcil de predecir varios aos antes. Simultaneo a la creacin diaria (por miles) de sitios de Internet con contenidos variados, millones de nuevos usuarios en todo el mundo han ido incorporando a sus hbitos cotidianos la consulta (navegacin) de informacin, al alcance de un simple clickeo en sus teclados. Y ya que la mayora de la informacin est en ingls, se estn creando nuevos logismos, nuevas expresiones, nuevos lenguajes. Perspectivas futuras El sentimiento general de la gente es que las bibliotecas de papel no desaparecern, sino que se modernizarn; aun cuando la informacin pueda ser digitalizada, la memoria en papel es ms confiable y sencilla de preservar por ms tiempo que la memoria magntica (discos compactos, discos duros, cintas magnticas, discos pticos). Pero las facilidades econmicas y de espacio de estos ltimos, generan una cierta desconfianza entre algunos usuarios, que ven en ello el cumplimiento de un destino oscuro, sin libros, sin informacin impresa, escenario que varios escritores de ciencia-ficcin han imaginado y diseado en historias diversas. Pero un futuro al estilo de Fahrenheit 451 se antoja complicado de ocurrir (aunque el temor que ocurra siempre es latente, en especial en todo pas donde la libertad de prensa y expresin sigue siendo vulnerada da a da); por tanto, el futuro de los libros impresos est asegurado, al menos en el corazn y la conciencia de las personas que aun disfrutan ms de leer un libro que de mirar al monitor de una computadora. Sin embargo, debemos estar preparados para las sorpresas.

El INTERNET es un mundo nuevo, si reglas ni fronteras. Cunto puede hacer cambiar el comportamiento de la sociedad, se podr ver en los siguientes aos, no muchos, porque la red evoluciona y crece rpido, muy rpido. Hoy en da una cultura subterrnea se encuentra peleando por ms libertad, mayores espacios y acceso a mejores tecnologas en el ciberespacio. Los ciberpunks, hackers, crackers y otros adictos a la informacin son los primeros frutos del impacto del INTERNET en la sociedad actual. El futuro no es claro. Tal vez el eslogan de los grupos ciberpunk es la nica respuesta clara: No hay futuro. 1.2. Elementos de un Sistema Computacional. En base a la funcin que realiza un sistema de cmputo tiene cuatro componentes: entrada, procesamiento, salida y almacenamiento. ENTRADA: Es la operacin de lectura que hace la computadora de los datos. PROCESAMIENTO: Son las operaciones de clculo ( suma, resta, multiplicacin, divisin, exponenciacin ) y lgicas (menor, maryor, igual o Programa Fuente (lenguaje de programacin). Despus > Programa ejecutable (lenguaje de maquina).

4. Prueba y depuracin: Se realizan pruebas para verificar el funcionamiento del programa, se prueba con valores vlidos y con no vlidos para ver como se comporta y corregir si es necesario.

5. Documentacin y Mantenimiento: Se basa en la instalacin, funcionamiento y caractersticas del programa. Permite corregir errores o modificar el programa (estos cambios son el mantenimiento del programa). Hay dos tipos de documentacin, estas son: Interna > viene dentro del programa (Ej. Readme, caractersticas operativas) Externa > Viene fuera del programa, diagramas de flujo, manuales de usuario, consejos de uso, etc.

2.2. Metodologa para el diseo de software: Top down, Botton up, modular y programacin estructurada El Diseo de Sistemas se define el proceso de aplicar ciertas tcnicas y principios con el propsito de definir un dispositivo, un proceso o un Sistema, con suficientes detalles como para permitir su interpretacin y realizacin fsica. La etapa del Diseo del Sistema encierra cuatro etapas: El diseo de los datos. Trasforma el modelo de dominio de la informacin, creado durante el anlisis, en las estructuras de datos necesarios para implementar el Software. El Diseo Arquitectnico. Define la relacin entre cada uno de los elementos estructurales del programa. El Diseo de la Interfaz. Describe como se comunica el Software consigo mismo, con los sistemas que operan junto con el y con los operadores y usuarios que lo emplean. El Diseo de procedimientos. Transforma elementos estructurales de la arquitectura del programa. La importancia del Diseo del Software se puede definir en una sola palabra Calidad, dentro del diseo es donde se fomenta la calidad del Proyecto. El Diseo es la nica manera de materializar con precisin los requerimientos del cliente. El Diseo del Software es un proceso y un modelado a la vez. El proceso de Diseo es un conjunto de pasos repetitivos que permiten al diseador describir todos los aspectos del Sistema a construir.

A lo largo del diseo se evala la calidad del desarrollo del proyecto con un conjunto de revisiones tcnicas: El diseo debe implementar todos los requisitos explcitos contenidos en el modelo de anlisis y debe acumular todos los requisitos implcitos que desea el cliente. Debe ser una gua que puedan leer y entender los que construyan el cdigo y los que prueban y mantienen el Software. El Diseo debe proporcionar una completa idea de lo que es el Software, enfocando los dominios de datos, funcional y comportamiento desde el punto de vista de la Implementacin. Para evaluar la calidad de una presentacin del diseo, se deben establecer criterios tcnicos para un buen diseo como son: Un diseo debe presentar una organizacin jerrquica que haga un uso inteligente del control entre los componentes del software. El diseo debe ser modular, es decir, se debe hacer una particin lgica del Software en elementos que realicen funciones y subfunciones especficas. Un diseo debe contener abstracciones de datos y procedimientos. Debe producir mdulos que presenten caractersticas de funcionamiento independiente. Debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los mdulos y el entorno exterior. Debe producir un diseo usando un mtodo que pudiera repetirse segn la informacin obtenida durante el anlisis de requisitos de Software. Estos criterios no se consiguen por casualidad. El proceso de Diseo del Software exige buena calidad a travs de la aplicacin de principios fundamentales de Diseo, Metodologa sistemtica y una revisin exhaustiva. Cuando se va a disear un Sistema de Computadoras se debe tener presente que el proceso de un diseo incluye, concebir y planear algo en la mente, as como hacer un dibujo o modelo o croquis. Top-down Top-down y Bottom-up son estrategias de procesamiento de informacin caractersticas de las ciencias de la informacin, especialmente en lo relativo al software. Por extensin se aplican tambin a otras ciencias sociales y exactas. En el modelo Top-down se formula un resumen del sistema, sin especificar detalles. Cada parte del sistema se refina diseando con mayor detalle. Cada parte nueva es entonces redefinida, cada vez

con mayor detalle, hasta que la especificacin completa es lo suficientemente detallada para validar el modelo. El modelo "Top-down" se disea con frecuencia con la ayuda de "cajas negras" que hacen ms fcil cumplir requerimientos aunque estas cajas negras no expliquen en detalle los componentes individuales. Botton-up En contraste, en el diseo Bottom-up las partes individuales se disean con detalle y luego se enlazan para formar componentes ms grandes, que a su vez se enlazan hasta que se forma el sistema completo. Las estrategias basadas en el flujo de informacin "bottom-up" se antojan potencialmente necesarias y suficientes porque se basan en el conocimiento de todas las variables que pueden afectar los elementos del sistema.

2.3. Definicin de lenguajes algortmicos Definicin Es un Mtodo para resolver un problema mediante una serie de pasos precisos, definidos y finitos. Un algoritmo es una serie de operaciones detalladas, en otras palabras un algoritmo es un conjunto de reglas para resolver una cierta clase de problemas y se puede formular de muchas formas con el cuidado de que no exista ambigedad. Caractersticas Preciso (debe indicar el orden de realizacin en cada paso y no puede tener ambigedad). Definido (si se sigue dos veces, obtiene el mismo resultado cada vez) Finito (tiene fin; un nmero determinado de pasos). Debe ser Sencillo, Legible. Modular. Eficiente y Efectivo. 2.3.1.Elementos y reglas de la representacin grfica y manuscrita de los algoritmos (diagrama de flujo, diagrama N-S, diagrama estructurado y pseudocdigo) Elementos de los algoritmos En programacin se debe separar la diferencia entre el diseo del algoritmo y su implementacin en un lenguaje especfico. Por ello, se debe distinguir claramente entre los conceptos de programacin y el medio en que ellos se implementan en un lenguaje especfico. Sin embargo, una vez que se comprendan los conceptos de programacin, como utilizarlos, la enseanza de un nuevo lenguaje es relativamente fcil.

Los lenguajes de programacin como los restantes lenguajes- tienen elementos bsicos que se utilizan como bloques constructivos, as como reglas para las que esos elementos se combinan. Estas reglas se denominan sintaxis del lenguaje. Solamente las instrucciones sintcticamente correctas pueden ser interpretadas por la computadora y los programas que contengan errores de sintaxis con rechazados por la mquina. Los elementos bsicos constitutivos de un programa o algoritmo son: Palabras reservadas (inicio, fin, si entonces..., etc), Identificadores (nombres de variables esencialmente), Caracteres especiales (coma, apstrofe, etc.), Constantes Variables Expresiones Instrucciones

Diagrama de flujo Un diagrama de flujo es una representacin grfica de un algoritmo o proceso. Se utiliza en disciplinas como la programacin, la economa, los procesos industriales y la psicologa cognitiva. Estos diagramas utilizan smbolos con significados bien definidos que representan los pasos del algoritmo, y representan el flujo de ejecucin mediante flechas que conectan los puntos de inicio y de trmino. Caractersticas Un diagrama de flujo siempre tiene un nico punto de inicio y un nico punto de trmino. Adems, todo camino de ejecucin debe permitir llegar desde el inicio hasta el trmino. Las siguientes son acciones previas a la realizacin del diagrama de flujo: Identificar las ideas principales a ser incluidas en el diagrama de flujo. Deben estar presentes el dueo o responsable del proceso, los dueos o responsables del proceso anterior y posterior y de otros procesos interrelacionados, otras partes interesadas. Definir qu se espera obtener del diagrama de flujo. Identificar quin lo emplear y cmo. Establecer el nivel de detalle requerido. Determinar los lmites del proceso a describir.

Los pasos a seguir para construir el diagrama de flujo son: Establecer el alcance del proceso a describir. De esta manera quedar fijado el comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente. Identificar y listar las principales actividades/subprocesos que estn incluidos en el proceso a describir y su orden cronolgico. Si el nivel de detalle definido incluye actividades menores, listarlas tambin. Identificar y listar los puntos de decisin. Construir el diagrama respetando la secuencia cronolgica y asignando los correspondientes smbolos. Asignar un ttulo al diagrama y verificar que est completo y describa con exactitud el proceso elegido.

Diagramas de Nassi Schneiderman El diagrama N-S o tambin conocido como diagrama de Chapin es una tcnica de especificacin de algoritmos que combina la descripcin textual, propia del pseudocdigo, con la representacin grfica del diagrama de flujo. El diagrama N-S cuenta con un conjunto limitado de smbolos para representar los pasos del algoritmo, por ello se apoya en expresiones del lenguaje natural; sin embargo, dado que el lenguaje natural es muy extenso y se presta para la ambigedad, solo se utiliza un conjunto de palabras, a las que se denomina palabras reservadas. Las palabras reservadas ms utilizadas son: Inicio Fin Leer Escribir Mientras Repita Hasta Para Incrementar Decrementar Hacer Funcin Entero Real Caracter Cadena Lgico Retornar

Los smbolos utilizados en el diagrama de Chapin son corresponden a cada tipo de estructura. Dado que se tienen tres tipos de estructuras, se utilizan tres smbolos. Esto hace que los procesos del algoritmo sean ms fciles de representar y de interpretar.

Diagrama estructurado La Estructura del algoritmo es la siguiente: Accin (nombre de la accin) es - Ambiente

(Declaracin de variables) (Declaracin de constantes) - Algoritmo (Sentencias del programa) Fin Accin Dentro del algoritmo hay dos secciones, estas son: 1. Ambiente > Seccin declarativa. Se declaran todas las estructuras de datos que utilizaremos en el algoritmo. 2. Algoritmo > Incluiremos aqu todas las acciones tendientes a resolver problemas. Solamente se usaran aqu las estructuras de datos DECLARADAS en el ambiente. Teorema de la Programacin Estructurada Todo algoritmo estructurado puede ser escrito por tres tipos de estructuras de control Estructuras de Control Secuencial > Las acciones se suceden una a continuacin de la siguiente. Tiene una entrada y una salida. Nunca se ejecuta ms de una accin por vez. Condicional > Se evala una condicin y en funcin del resultado de la misma se realiza una operacin u otra Simples (SI-Entonces) > Ejecuta una accin cuando se cumple la condicin. Alternativas (Si- Entonces-sino) > Ejecuta una/s accin/es cuando se cumple la condicin. Caso contrario (condicin falsa) ejecuta otra/s accin/es. Mltiples (SEGN) > Permite ejecutar una sentencia segn el valor de una variable.

Repetitivas > Repiten una secuencia un Nmero de veces (Bucles) y al hecho de repetir la ejecucin de una secuencia de acciones (Iteracin). Estas son: Estructura MIENTRAS > Permite ejecutar una sentencia mientras se cumpla la condicin (booleana o lgica). Es importante que la condicin sea falsa en algn momento para que no se genere un ciclo infinito. Estructura REPETIR > Permite ejecutar la sentencia hasta que cumpla la condicin (booleana o lgica). Es importante que la condicin sea verdadera en algn momento para que no se genere un ciclo infinito.

Estructura PARA > Permite ejecutar una sentencia un nmero especfico de veces. Las sentencias se ejecutan dentro del bucle. Comienza con un Valor inicial hasta llegar a un valor final. 2.3.2.Implementacin de algoritmos secuenciales (utilizando notacin algebraica)

Un algoritmo puede adoptar una de las estructuras siguientes o combinaciones de ellas: lineal o secuencial, alternativa o selectiva y repetitiva o cclica. La ms sencilla de las tres es la lineal, tambin llamada secuencial que se caracteriza porque todos los pasos del algoritmo se realizan en secuencia, es decir, se suceden uso a otros. Un ejemplo de esta estructura es el algoritmo para calcular la densidad de un cuerpo a partir de los datos de masa y volumen, mostrada a continuacin a travs de un diagrama de flujo:

Diseo algortmico de las funciones

El diseo algortmico de cualquier funcin implica como se hace o realiza la tarea (problema) solicitado a resolver. En el diseo, en la resolucin de un problema complejo, se divide en varios sub- problemas y seguidamente se vuelven a dividir los sub-problemas en otros ms sencillos, hasta que puedan implementarse en la computadora.

Esta caracterstica define lo que se entiende como diseo descendente o diseo modular. Cada problema se resuelve mediante un mdulo (subprograma) y tiene un solo punto de entrada y un solo punto de salida. Un programa bien diseado consta de un programa principal (mdulo de nivel ms alto) que llama a subprogramas (mdulos de nivel ms bajo), que a su vez pueden llamar otros sub-programas. Los programas que se estructuran de esta forma, se dicen que tienen diseo modular y el mtodo de romper el programa en modos pequeos se llama programacin modular.

2.4. Pruebas y depuracin La depuracin es el proceso de encontrar los errores del programa y corregir o eliminar dichos errores. Cuando se ejecuta un programa se pueden producir tres tipos de errores: Errores de compilacin. Se producen normalmente por un uso incorrecto de las reglas del lenguaje de programacin y suelen ser errores de sintaxis. Si existe un error de sintaxis, la computadora ni puede comprender la instruccin, no se obtendr el programa objeto y el compilador imprimir una lista de todos los errores encontrados durante la compilacin

Errores de ejecucin. Estos errores se producen por instrucciones que la computadora puede comprender pero no ejecutar. Ejemplos tpicos son: divisin entre cero y races cuadradas de nmeros negativos. En estos casos se detiene la ejecucin del programa y se imprime un mensaje de error. Errores de lgica. Se producen en la lgica del programa y la fuente del error suele ser el diseo del algoritmo. Estos errores son los ms difciles de detectar, ya que el programa puede funcionar y no producir errores de compilacin ni de ejecucin, y slo puede advertir el error por la obtencin de resultados incorrectos. En este caso se debe volver a la fase de diseo del algoritmo, modificar el algoritmo, cambiar el programa fuente y compilar y ejecutar una vez ms.

3. Conocimiento de programacin y un lenguaje estructurado 3.1. Introduccin a la programacin Se llama Programacin a la implementacin de un algoritmo en un determinado lenguaje de programacin, para realizar un programa. Algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Programa (Software en ingls) es una secuencia de instrucciones que una computadora puede interpretar y ejecutar. El proceso de creacin de software es materia de la ingeniera del software, una de las ramas propias de la Ingeniera Informtica.

Segn Niklaus Wirth un programa est formado por algoritmos y estructura de datos. Se han propuesto diversas tcnicas de programacin, cuyo objetivo es mejorar tanto el proceso de creacin de software como su mantenimiento. Entre ellas se pueden mencionar las programaciones lineales, estructurada, modular y orientada a objetos. Lenguaje de programacin es el idioma utilizado para controlar el comportamiento de una mquina, particularmente una computadora. Consiste en un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Hay muchos lenguajes de programacin, pero para programar no es necesario conocer todos los lenguajes, es igual que cuando hablamos, podemos comunicarnos en espaol aunque no sepamos alemn. Aunque la palabra debera ser idioma ya que lenguaje realmente abarca todos los idiomas pero en computacin equivocadamente se usa el trmino lenguaje cuando el trmino correcto es idiomas de programacin. En la actualidad los lenguajes de programacin estn escritos para ser compresibles por el ser humano, a este cdigo se le llama cdigo fuente, pero no es comprendido por la mquina ya que esta solo maneja el lenguaje binario. La compilacin es el proceso de traducir un programa en cdigo fuente a programa en cdigo objeto (que usa el lenguaje binario), el programa encargado de compilar se llama compilador. La mayora de software de programacin trae su propio compilador. Entorno de Desarrollo Integrado (en ingls Integrated Development Environment 'IDE'): Es un programa compuesto por un conjunto de herramientas para un programador. Estos IDE son programas que sirven para programar, ya sea en un lenguaje de programacin o en varios lenguajes. Los IDE que permiten crear programas en muchos lenguajes de programacin permiten usar un solo programa para trabajar en varios lenguajes de programacin, es decir no limitan al programador. 3.1.1.Definicin de programa Un programa es un conjunto de instrucciones u rdenes basadas en un lenguaje de programacin que una computadora interpreta para resolver un problema o una funcin especifica. 1. Es la relacin ordenada de actividades, en informtica se le conoce como la serie codificada de instrucciones. 2. Redaccin de un algoritmo en un lenguaje de programacin. 3. Conjunto de instrucciones ordenadas correctamente que permiten realizar una tarea o trabajo especfico. 4. Toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas, directa o indirectamente, en un sistema informtico para realizar una funcin o una terea o para obtener un resultado determinado, cualquiera que fuere su forma de expresin y fijacin. 5. Conjunto secuenciado de instrucciones que quedan escritas en un lenguaje determinado con unos fines especficos. Aunque en el lenguaje comn con frecuencia se denomina programa al sistema operativo, la diferencia estriba, precisamente, en la especificidad de aqul frente al carcter de gestin global de ste. La palabra software engloba ambos.

3.1.2.Definicin de programacin Lenguaje de programacin es un conjunto de sintaxis y reglas semnticas que definen los programas del computador. Lenguaje que los programadores usan para comunicar instrucciones a una computadora y poder ejecutar un programa. Cdigo utilizado para la creacin de programas. Lo utilizan los programadores (generalmente especializados en un lenguaje en particular) para la creacin de diversas aplicaciones. En informtica, es cualquier forma de escritura (lenguaje) que posee determinadas instrucciones que combinadas y modificadas correctamente (dependiendo del resultado que se desee), podrn ser interpretadas y as resultar en un programa, pgina web, etc. Sistema de escritura para la descripcin precisa de algoritmos o programas informticos. Lenguaje que se utiliza para redactar programas de computacin. Conjunto de sentencias utilizadas para escribir secuencias de instrucciones que para que ejecute una computadora. Un lenguaje de programacin es aquel elemento dentro de la informtica que nos permite crear programas mediante un conjunto de instrucciones, operadores y reglas de sintaxis; que pone a disposicin del programador para que este pueda comunicarse con los dispositivos hardware y software existentes.

3.1.3.Definicin de lenguaje de programacin Un lenguaje de programacin es aquel elemento dentro de la informtica que nos permite crear programas mediante un conjunto de instrucciones, operadores y reglas de sintaxis; que pone a disposicin del programador para que este pueda comunicarse con los dispositivos hardware y software existentes. Otra definicin es: Definicin de Lenguaje de programacin Lenguaje artificial que puede ser usado para controlar el comportamiento de una mquina, especialmente una computadora. Estos se componen de un conjunto de reglas sintcticas y semnticas que permiten expresar instrucciones que luego sern interpretadas.

Debe distinguirse de lenguaje informtico, que es una definicin ms amplia, puesto estos incluyen otros lenguajes como son el HTML o PDF que dan formato a un texto y no es programacin en s misma. El programador es el encargado de utilizar un lenguaje de programacin para crear un conjunto de instrucciones que, al final, constituir un programa o subprograma informtico. Los lenguajes de programacin pueden clasificarse segn el paradigma que usan en: procedimentales, orientados a objetos, funcionales, lgicos, hbridos, etc. Son ejemplos de lenguajes de programacin: php, prolog, ASP, Action Script, ada, python, pascal, C, basic, JAVA, Java Script, etc.

3.2. Introduccin y orgenes del lenguaje Lenguaje C es un lenguaje de programacin de propsito general que ofrece economa sintctica, control de flujo y estructuras sencillas y un buen conjunto de operadores. No es un lenguaje de muy alto nivel y ms bien un lenguaje pequeo, sencillo y no est especializado en ningn tipo de aplicacin. Esto lo hace un lenguaje potente, con un campo de aplicacin ilimitado y sobre todo, se aprende rpidamente. En poco tiempo, un programador puede utilizar la totalidad del lenguaje. Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje no est ligado a ningn sistema operativo ni a ninguna mquina concreta. Se le suele llamar lenguaje de programacin de sistemas debido a su utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se puede desarrollar cualquier tipo de aplicacin. La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en 1970 para el primer sistema UNIX en un DEC PDP7. 3.3. Estructura bsica de un programa Estructura bsica de un programa en C La mejor forma de aprender un lenguaje es programando con l. El programa ms sencillo que se puede escribir en C es el siguiente: main( ) { .. } Como nos podemos imaginar, este programa no hace nada, pero contiene la parte ms importante de cualquier programa C y adems, es el ms pequeo que se puede escribir y que se compile correctamente. En el se define la funcin main, que es la que ejecuta el sistema operativo al llamar a un programa C. El nombre de una funcin C siempre va seguida de parntesis, tanto si tiene

argumentos como si no. La definicin de la funcin est formada por un bloque de sentencias, que est encerrado entre llaves { }. Un programa algo ms complicado es el siguiente: include main( ) { printf(Hola amigos!\n); } Con el visualizamos el mensaje Hola amigos! en el terminal. En la primera lnea indica que se tengan en cuenta las funciones y tipos definidos en la librera stdio (standard input/output). Estas definiciones se encuentran en el fichero header stdio.h. Ahora, en la funcin main se incluye una nica sentencia que llama a la funcin printf. Esta toma como argumento una cadena de caracteres, que se imprimen van encerradas entre dobles comillas . El smbolo \n indica un cambio de lnea. Hay un grupo de smbolos, que son tratados como caracteres individuales, que especifican algunos caracteres especiales del cdigo ASCII. Los ms importantes son: import.java.oi.*; inclusion de archivos { inicio del main y fin de la clase \a Alerta \b Espacio atrs \f Salto de pgina \n Salto de lnea \r Retorno de carro \t Tabulacin horizontal \v Tabulacin vertical \\ Barra invertida \ Comilla simple \ Comillas dobles \OOO Visualiza un carcter cuyo cdigo ASCII es OOO en octal \xHHH Visualiza un carcter cuyo cdigo ASCII es HHH en hexadecimal

Un programa C puede estar formado por diferentes mdulos o fuentes. Es conveniente mantener los fuentes de un tamao no muy grande, para que la compilacin sea rpida. Tambin, al dividirse un programa en partes, puede facilitar la legibilidad del programa y su estructuracin. Los diferentes fuentes son compilados de forma separada, nicamente los fuentes que han sido modificados desde la ltima compilacin, y despus combinados con las libreras necesarias para formar el programa en su versin ejecutable. Como los lenguajes han cambiado de C a Java (que es un derivado de C y C++) para aquellos que apenas empezamos en java un primer programa seria: import java.io.*; public static void main{ { system.out.println(este es mi primer programa en java); system.out.println(pero no es el ltimo que hare); } } 3.4. Datos El dato es una representacin simblica (numrica, alfabtica, algortmica etc.), un atributo o una caracterstica de una entidad. El dato no tiene valor semntico (sentido) en s mismo, pero si recibe un tratamiento (procesamiento) apropiado, se puede utilizar en la realizacin de clculos o toma de decisiones. Es de empleo muy comn en el mbito informtico y, en general, prcticamente en cualquier disciplina cientfica. En programacin, un dato es la expresin general que describe las caractersticas de las entidades sobre las cuales opera un algoritmo. En Estructura de datos, es la parte mnima de la informacin.

3.4.1.Tipos de datos En los lenguajes de programacin un tipo de dato es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qu valores pueden tomar y qu

operaciones se pueden realizar. Tipos de datos comunes son: enteros, nmeros de coma flotante (decimales), cadenas alfanumricas, fechas, horas, colores, coches o cualquier cosa que se nos ocurra. Por ejemplo, en Java, el tipo "int" representa un conjunto de enteros de 32 bits cuyo rango va desde el -2.147.483.648 al 2.147.483.647, as como las operaciones que se pueden realizar con los enteros, como la suma, resta y multiplicacin. Los colores, por otra parte, se representan como tres bytes denotando la cantidad de rojo, verde y azul, y una cadena de caracteres representando el nombre del color; las operaciones permitidas incluyen la adicin y sustraccin, pero no la multiplicacin. ste es un concepto propio de la informtica, ms especficamente de los lenguajes de programacin, aunque tambin se encuentra relacionado con nociones similares de las matemticas y la lgica. En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos 1 valores. Casi todos los lenguajes de programacin explcitamente incluyen la notacin del tipo de datos, aunque lenguajes diferentes pueden usar terminologa diferente. La mayor parte de los lenguajes de programacin permiten al programador definir tipos de datos adicionales, normalmente combinando mltiples elementos de otros tipos y definiendo las operaciones del nuevo tipo de dato. Por ejemplo, un programador puede crear un nuevo tipo de dato llamado "Persona" que especifica que el dato interpretado como Persona incluir un nombre y una fecha de nacimiento. Un tipo de dato puede ser tambin visto como una limitacin impuesta en la interpretacin de los datos en un sistema de tipificacin, describiendo la representacin, interpretacin y la estructura de los valores u objetos almacenados en la memoria del ordenador. El sistema de tipificacin usa informacin de los tipos de datos para comprobar la verificacin de los programas que acceden o manipulan los datos. Tipos de datos mquina Todos los datos en los ordenadores basados en la electrnica digital se representan como bits (valores 0 y 1) en el nivel ms bajo. La ms pequea unidad direccionarle de datos es un grupo de bits llamado un byte (normalmente un octeto, que son 8 bits). La unidad procesada por las instrucciones del cdigo mquina se le llama una palabra (en 2006, normalmente 32 o 64 bits). La mayor parte de las instrucciones interpretan la palabra como un nmero binario, como por 32 ejemplo una palabra de 32 bits puede representar valores enteros sin signo desde el 0 al 2 1 o 31 31 valores enteros con signo desde 2 al 2 1. Por medio del complemento a dos, la mayor parte del tiempo, el lenguaje mquina y la propia mquina no necesitan distinguir entre tipos de datos con o sin signo. Existe un especfico conjunto de instrucciones aritmticas que usa una diferente interpretacin de los bits de una palabra como nmero en coma flotante. Tipos de datos primitivos Los tipos de datos hacen referencia al tipo de informacin que se trabaja, donde la unidad mnima de almacenamiento es el dato, tambin se puede considerar como el rango de valores que puede tomar una variable durante la ejecucin del programa.

DATOS PRIMITIVOS:

CARACTER NUMERICO LOGICOS(BOOLEANOS)

CARCTER El tipo de dato carcter es un digito individual el cual se puede representar como numricos (0 al 9), letras (a-z) y smbolo ($,_). NOTA: En lenguaje java la codificacin Unicode permite trabajar con todos los caracteres de distintos idiomas.

Tipo de dato char

Rango

Tamao de bits 16 bits

0 a 65536

NUMERICOS Este tipo de dato puede ser real o entero, dependiendo del tipo de dato que se vaya a utilizar. Enteros: Son los valores que no tienen punto decimal, pueden ser positivos o negativos y el cero.

tipo de dato: byte tipo de dato: short tipo de dato: int tipo de dato: long

tamao= 8 bits tamao= 16 bits tamao= 32 bits tamao= 64 bits

Reales: Estos caracteres almacenan numeros muy grandes que poseen parte entera y parte decimal.tipo de dato: float= 32 bits tipo de dato: double= 64 bits

BOOLEANOS Este tipo de dato se emplea para valores lgicos, los podemos definir como datos comparativos dicha comparacin devuelve resultados lgicos.tipo de dato: boolean Rango= true - false

3.4.2.Identificadores Es el nombre utilizado para referenciar variables, constantes, tipos, funciones y otros objetos definidos por el usuario. Un identificador puede tener uno o ms caracteres (letras, dgitos y carcter de subrayado), siendo significativos los primeros 32. El primer carcter debe ser una letra o un smbolo de _. Se consideran caracteres distintos las maysculas y las minsculas. Se recomienda poner identificadores representativos. Cuando un identificador se asocia a una entidad concreta entonces es el nombre de dicha entidad, y en adelante la representa en el programa. Por supuesto puede ocurrir que varios identificadores se refieran a una misma entidad (polimorfismo). Sintaxis general: tipo nombre_identificador;

3.4.3.Almacenamiento, direccionamiento y representacin en memoria Almacenamiento La computadora posee determinada cantidad de almacenamiento interno denominado memoria principal, memoria RAM o memoria voltil. Esta memoria se activa al encender la computadora y se desactiva al apagarla. Para que un programa se ejecute, debe cargarse en la memoria principal, as como los datos necesarios. Como es ms costosa, es un recurso escaso donde slo se almacenan los datos que se requieren de inmediato, y los dems se relegan a los dispositivos de almacenamiento externo, donde la capacidad de almacenamiento es mayor, pero tambin el tiempo de recuperacin. Por otra parte, el costo del almacenamiento externo es ms bajo. Direccionamiento La memoria principal de la computadora se divide en pequeas unidades de tamao uniforme denominadas palabras, que tienen una direccin nica. Cada una de stas palabras es capaz de almacenar una unidad de informacin (como, por ejemplo, resultados numricos), y determina el nmero ms grande y el ms pequeo que puede almacenar. El tamao de la palabra depende de la computadora, pero siempre se especifica en mltiplos de 8 bits. As, existen computadoras con tamaos de palabra de 8, 16, 32 y 64 bits. Cada palabra de la memoria principal tiene una direccin fija que va de cero hasta el nmero total de palabras - 1. Las direcciones de memoria sirven para identificar cada palabra individualmente, de tal manera que pueda accederse al dato contenido en ella. A fin de simplificar su comprensin, las memorias se consideran como una hilera de palabras.

Representacin en memoria La representacin en memoria de los caracteres no reviste mayor complicacin, debido a que los cdigos utilizados, como el ASCII (American Standard Code for Information Interchange), les asignan valores enteros positivos. En el caso de los datos numricos hay que considerar la distincin entre nmeros negativos y positivos, y la que hay entre nmeros de punto flotante y enteros. Los signos se manejan normalmente mediante el bit ms significativo de la palabra (el situado a la extrema izquierda), y se le denomina bit de signo. Cuando el bit de signo almacena un cero, el nmero se considera positivo; cuando almacena un uno el nmero es negativo. Es por esto que, si el tamao de la palabra es de m bits, quedan m-1 bits para representar la magnitud del nmero almacenado. Los nmeros de punto flotante se manejan en formato logartmico, con un nmero fijo de bits para la base y otro para la mantisa. El estndar para los nmeros de punto flotante lo fija el IEEE. Debido al formato logartmico, los clculos que se hacen con tipos de punto flotante no son tan precisos como los que se hacen con tipos enteros.

3.4.4.Proposicin de asignacin La forma de una proposicin de asignacin es: a=b, donde b es una expresin permitida, y a es el valor donde se dejar el valor resultante de evaluar b. El signo igual, =, de a=b tiene el sentido de asignar a la variable a el valor que resulte de evaluar la expresin permitida b. Es decir, a=b tiene el sentido a b, que no es la misma definicin usada en matemticas para =. Ejemplo: A=2.5, TO=1+XT, I=I+1 (correctos) A+B=C, 20=16.2+3.8 (son incorrectos) La forma de una proposicin de asignacin es: a = b donde b es una expresin permitida, y a es el nombre de la variable donde se dejar el valor resultante de evaluar b. Por expresin permitida se entiende a aquella expresin matemtica que ocupa las operaciones y funciones nombradas como existentes, y escritas de la forma que para ellas se seala, respetando as la sintaxis en cada instruccin. El signo igual, = , de a = b tiene el sentido de asignar a la variable a el valor que resulte de evaluar la expresin permitida b. Es decir, a = b tiene el sentido: que no es la misma definicin usada en matemticas para el signo: = .

El computador, al ejecutar una proposicin de asignacin evala la expresin del lado derecho del signo igual con los valores que en ese momento tengan las variables ah ocupadas. As, la expresin entregar valores probablemente distintos en las diversas ocasiones que por programa se evale esa expresin. Las siguientes son proposiciones de asignacin correctas, A = 2.5 TO = 1 + XT I = I + 1 Y no son correctas las siguientes: A + B = C 20 = 16.2 + 3.8 AL = (AT+3.4) / 110.302

3.5. Operaciones, operandos y expresiones Los operadores son un tipo de tokens ( 3.2) que pueden aparecer en las expresiones, e indican al compilador la realizacin de determinadas operaciones matemticas, lgicas ( 4.9.8) y numricas (4.9.1). Se aplican a variables u otros objetos denominados operandos y su efecto es una combinacin de las siguientes acciones: Producir un resultado-valor Alterar un operando Designar un objeto o funcin. Ejemplos: 1a y = a + b; En esta sentencia, el operador suma + ( 4.9.1) produce un valor nuevo, pero no altera ninguno de los operandos (a y b); a su vez este valor es asignado a la variable y mediante el operador de asignacin = ( 4.9.2). En este caso el operando de la izquierda si se ve alterado. 1b x++; Aqu el operador post-incremento ++ ( 4.9.1) produce un nuevo valor que es aplicado sobre el propio operando, de forma que queda alterado. Cuando un operador altera un operando se dice que tiene efectos laterales. Nota: Por lo general los operadores aparecen a la derecha de expresiones de asignacin (por ejemplo: y = 2 * y + x), pero en ocasiones estos efectos laterales se utilizan para conseguir expresiones muy compactas y de un cierto nivel de sofisticacin, que incluso no necesitan del operador de asignacin para producir el resultado. En estos casos su lgica es un poco ms dificil de seguir que cuando estos efectos no se utilizan directamente (Ver ejemplo: 4.9.6). 1c z = (*fptr)(x, y);

En este ejemplo, el operador de indireccin * es aplicado sobre el operando fptr que es un punteroa-funcin. El resultado es un designador de funcin al que se aplica el operador ( ) de invocacin de funcin con dos operandos x e y que actan como argumentos. A su vez el resultado de este operador (invocacin de funcin) es utilizado como argumento derecho del operador de asignacin = que finalmente modifica uno de sus operandos (el operando izquierdo z). 2 Clasificacin C++ dispone de un conjunto muy rico de operadores que se pueden clasificar en unitarios, binarios y ternarios, segn que necesiten uno, dos o tres operandos. Los operadores unitarios (denominados tambin unarios) se clasifican en dos tipos segn la posicin del operador (representado por @) respecto del operando (representado por n): @n: Operador prefijo. Ejemplo: ++x n@: Operador posfijo. Ejemplo: x++ Antes de seguir refirindonos a ellos, tal vez sean procedentes un par observaciones que ms adelante nos ayudarn a comprender mejor algunos conceptos: Los operadores pueden (en cierta forma) considerarse como funciones que tienen un lgebra un tanto especial. De hecho, al tratar la sobrecarga de operadores, veremos que precisamente la forma en que se definen es mediante una funcin, la funcin-operador ( 4.9.18). En este sentido podramos imaginar que la expresin y = a + b es otra forma de representar algo como: y = suma (a, b). Del mismo modo, la asignacin x = y sera algo as: asigna(x, y). Siguiendo con nuestra analoga podramos suponer que los operadores unitarios, binarios y ternarios seran funciones que aceptaran unos, dos o tres argumentos respectivamente y que la sobrecarga de operadores no es sino una forma encubierta de sobrecarga de funciones. Aunque las funciones C++ se designan con identificadores (nombres) que siguen las reglas generales ya sealadas ( 3.2.2), estas seudo-funciones se identifican con smbolos ( +, =, ::, *, , etc) [3]. Muchos de ellos estn compuesto de un solo token (que puede estar repetido + y ++ ) aunque los hay de dos. Estos ltimos son: new[], delete[], () y []. Antes de realizar la operacin encomendada, los operadores pueden modificar el tipo de los operandos para que sean homogneos, de forma que la operacin pueda realizarse. Por ejemplo, al indicar i + f donde i sea un entero y f un float. Estas promociones se denominan conversiones estndar ( 2.2.5) y son realizadas automticamente por el compilador, pero deben ser tenidas en cuenta para evitar sorpresas. 3 En general los operadores aceptan un tipo de operando determinado y especfico, produciendo y/o modificando un valor de acuerdo con ciertas reglas, pero C++ permite redefinir la mayora de ellos . Es decir, permite que puedan aceptar otro tipo de operandos y seguir otro comportamiento sin que pierdan el sentido y comportamiento originales cuando se usan con los operandos normales (los tipos bsicos pre-construidos en el lenguaje). Esta circunstancia recibe el nombre de sobrecarga ( 4.9.18) del operador [1]. No son sobrecargables los siguientes: . Operador de seleccin de miembros ( 4.9.16c) .* Operador de dereferencia ( 4.9.11) Operador de acceso a mbito ( 4.9.19)

?: Operador conditional ( 4.9.6) Directiva de pre-procesado ( 4.9.10) 4 Polimorfismo en los operadores Debe tener en cuenta que an sin estar sobrecargado, dependiendo del contexto (nmero y tipo de operandos), un operador C++ puede tener ms de un significado [2]. Veamos dos ejemplos: El smbolo mpersand & puede ser interpretado como: AND entre bits A & B ( 4.9.3) Operador de referencia y = &x ( 4.9.11b) Declarador de referencia int& y = x ( 4.2.3) El asterisco * puede ser interpretado como: Declaracin de un tipo puntero-a tipo* ptr ( 4.2.1a) Operador de indireccin x = *ptr ( 4.9.11a) Operador de multiplicacin x * y ( 4.9.1) 5 Precedencia La precedencia es una regla de orden que se asocia con los operadores para establecer cual se aplicar primero en caso de aparecer varios en una misma expresin (una especie de orden de importancia de los operadores). Por ejemplo: x = 2 + 3 * 4; Cual ser el resultado, 20 o 14? La primera regla en este sentido es que las expresiones se evalan de izquierda a derecha, aunque no siempre. Por ejemplo, la regla izquierda derecha nos conducira a que en la expresin anterior, el valor de x es 20, lo cual no es cierto, ya que en C++ la multiplicacin tiene mayor precedencia que la suma, as que el resultado es 14. En C++ existen 16 niveles de precedencia, de modo que la regla izquierda derecha solo se aplica en caso de operadores del mismo nivel ( 4.9.0a). El operador de jerarqua ms alta es el parntesis, lo que aclara y justificada la tradicional costumbre algabraica de utilizar parntesis para forzar el orden de las operaciones. Por ejemplo, si queremos que en la expresin anterior se ejecute primero el operador suma: x = (2 + 3) * 4; // el resultado es 20 Aunque las reglas de precedencia se suponen conocidas por los programadores C++, aconsejamos generosidad a la hora de utilizar parntesis en las expresiones. Adems de facilitar la legibilidad evitan posibles errores. As, aunque las dos sentencias que siguen son equivalentes, la segunda es de lectura ms relajante.

x = 2 + 3 * 4; x = 2 + (3 * 4);

3.5.1.Prioridad de operadores, evaluacin de expresiones Prioridad de operadores Los operadores se muestran en orden decreciente de prioridad de arriba a abajo. Los operadores del mismo grupo tienen la misma prioridad (precedencia) y se ejecutan de izquierda a derecha (asociatividad)

3.6. Proceso de creacin de un ejecutable Escribir un programa es establecer el comportamiento de una mquina mediante una serie de algoritmos que definirn su funcionamiento . En el estado actual de la ciencia, este algoritmo se plasma por escrito utilizando un lenguaje artificial comprensible por el humanoprogramador. Generalmente estas instrucciones, que aqu se denominan cdigo fuente, vienen acompaadas de algunos datos en forma de texto o imgenes, contenidas en uno o varios ficheros denominados ficheros de recursos ("resources"). Sin embargo, las instrucciones y recursos solo pueden ser utilizadas por la mquina despus de un proceso de traduccin que es realizado por la propia mquina (puede ser distinta de la que ejecuta el programa). El proceso exige que el cdigo fuente sea transformado en una nueva secuencia de instrucciones segn un nuevo sistema de codificacin (el lenguaje mquina), y que los recursos adopten una disposicin particular. Este conjunto de instrucciones y datos, que constituyen el denominado ejecutable.

Presentacin del problema Hay bastante literatura sobre programacin en general; a los acadmicos les gusta hablar de "Teora de la Programacin", y mucha gente se ha dedicado a especular sobre el tema. Incluso hay modas al respecto. Es posible confeccionar una lista de las caractersticas que "debe" y "no debe" tener un buen programa. El propio Stroustrup ( TC++PL) compara las condiciones para escribir un buen programa con las de escribir buena prosa. Segn l, existen dos respuestas: Saber que se quiere decir" y "Prctica. Imitar buenos escritores". A continuacin se comentan brevemente los pasos imprescindibles en la creacin de un programa C++. Disear los ficheros y mdulos Si el programa debe utilizar ficheros que no vengan impuestos (ya existentes), y suponiendo que todo lo anterior est suficientemente claro, este es el momento de hacerlo. Ponga por escrito la especificacin de tales ficheros, incluyendo el nombre que dar a las variables y, en su caso, el que tendrn en el disco o almacenamiento externo. Esto puede concretarse quizs a la definicin de algunas estructuras. En esta fase es posible que tenga que repreguntar alguna cosa que se pas por alto. Teniendo ya una imagen ms o menos clara de lo que har su programa, si ste es mediano o grande, es posible que todava tenga que realizar una labor previa antes de ponerse a escribir el cdigo: disear a grandes rasgos cules sern los mdulos del programa; mdulos que se correspondern aproximadamente con la distribucin del cdigo en ficheros fuente independientes. Quizs tenga que decidir tambin si algunas partes aparecern como libreras. Recuerde lo indicado al respecto al tratar de los Subespacios de Nombres. Esta fase es especialmente importante en el caso de programas muy grandes, cuyo desarrollo se reparte entre varios programadores que se encargan de uno o varios de estos mdulos. En estos casos, el anlisis, la especificacin, la subdivisin en partes (con sus especificaciones particulares), y la asignacin de estas como tareas a los programadores, lo habr realizado el jefe de programacin y desarrollo. Escribir el cdigo Suponiendo cumplimentados los pasos anteriores, el programador est en condiciones de construir una imagen mental clara de cmo ser esa conexin entre la informacin de entrada y la salida, es lo que se denomina "espacio" de la solucin ("'How' domain"); su forma concreta es justamente el fuente del programa que se pretende. La codificacin consiste justamente trasportar a papel (en el lenguaje de programacin elegido) la imagen mental de esa conexin. Para escribir el cdigo fuente de un programa C++ solo se puede utilizar un subconjunto de 96 caracteres del juego total de caracteres US-ASCII. Son los siguientes:

Durante la fase de escritura no desdee dos puntos: Incluir la mayor cantidad de comentarios y aclaraciones posibles. Cuando se est muy "metido" en el programa todo parece evidente, pero piense que tiene que retocarlo dentro de unos aos, quizs entonces le parezca "Chino" y agradecer haber dejado la mayor cantidad de documentacin y aclaraciones al respecto. Incluso si es seguro que no volver a verlo, piense en el sufrido programador que le seguir si tiene que habrselas con su cdigo. En este sentido C++ no es precisamente COBOL, aunque afortunadamente permite incluir en el fuente comentarios todo lo extensos que se desee. No caiga tampoco en el error de pensar que esa informacin ya est en la documentacin escrita que le han obligado a entregar junto con los fuentes; posiblemente dentro de unos aos Usted mismo no encuentre esos documentos. Incluir la mayor cantidad posible de rutinas y condiciones de comprobacin de errores. Piense que el operador es un "manazas" o que los datos pueden venir con alguna corrupcin, error de transmisin, etc. Verifique constantemente que las condiciones son las esperadas.

Una vez que se tiene el cdigo fuente (en uno o varios mdulos), el proceso de traducirlo a instrucciones comprensibles por el procesador (lenguaje mquina) puede hacerse siguiendo dos modelos: los intrpretes y los compiladores. En el caso de lenguajes compilados como C++, el

fichero de texto plano que contiene la fuente del programador (con la terminacin .C .CPP), es sometido a un proceso de varias fases que terminan en la obtencin del ejecutable. De forma genrica, todo este proceso se denomina "compilacin", aunque es una generalizacin un tanto incorrecta, ya que la compilacin propiamente dicha es solo una de las etapas intermedias. Sera ms correcto decir "construccin" del ejecutable, aunque por la extensin y generalizacin de su uso seguiremos utilizando el trmino genrico "compilacin" para referirnos a l. Los procesos de construccin del ejecutable se esquematizan en la figura que comentamos a continuacin:

Pre-proceso En la primera fase de la compilacin; un programa especial, denominado make, es encargado de iniciar el proceso llamando a los diversos mdulos que se encargan de la construccin del ejecutable se amplan detalles sobre esta parte del proceso). El primero de estos mdulos es el preprocesador. El preprocesador estudia el texto buscando directivas de pre-procesado, por ejemplo sentencias que pueden ser suprimidas, incluye los ficheros correspondientes a las directivas #include, sustituye los #define, elimina los comentarios y expande las macros encontradas en el fuente y en los propios ficheros incluidos. El resultado obtenido es lo que se denomina unidad de compilacin. Anlisis sintctico Puesto que el fichero fuente est escrito en un "lenguaje" (C++ en este caso) que tiene sus propias reglas de sintaxis (como los lenguajes naturales), el compilador debe comprobar que estas reglas se han respetado. Este anlisis ("Parsing") es realizado por el analizador sintctico. En esta fase se realizan comprobaciones como que los parntesis estn cerrados, que no aparecen expresiones incompletas, etc. Para realizar esta labor, el "parser" debe identificar los tokens, de forma que el fuente es tokenizado, esto es, reducido a tokens y separadores. El fuente es escaneado, el analizador sintctico (parser) extrae los tokens, seleccionando el que coincida con la secuencia de caracteres ms larga posible dentro de la secuencia analizada. Por ejemplo, la palabra clave external es reconocida como un solo token (identificador de clase de almacenamiento) en vez de seleccionar extern (una palabra reservada) y al (que sera un identificador). Los separadores (whitespaces) es el nombre genrico dado a los espacios (32), tabulaciones verticales VT (11), horizontales TAB (9) nueva linea NL (10) y retorno de carro CR (13). Los separadores sirven para indicar donde empiezan y terminan las palabras, pero despus de esto cualquier separador redundante es descartado. Por ejemplo, las dos secuencias: int i; float f; int i; float f; Son lxicamente equivalentes y el resultado del anlisis son las seis palabras siguientes: int

i ; float f ; El carcter ASCII espacio puede formar parte de cadenas literales (alfanumricas), en cuyo caso es protegido del proceso de anlisis, permaneciendo como parte de la cadena. Por ejemplo: char name[] = "Playa Victoria"; es reducido a siete tokens, incluyendo una cadena literal "Playa Victoria" char name [ ] = "Playa Victoria" ; Anlisis semntico En lenguajes como el Ensamblador la comprobacin se limita al anlisis anteriormente sealado; con esto se garantiza que la fuente original es correcta (sintcticamente), es decir, es un escrito correcto desde el punto de vista del lenguaje, otra cosa es que tenga un sentido computacional correcto, o diga tonteras, incongruencias o sinsentidos. Por supuesto la meta del compilador es conseguir descubrir con anticipacin (al runtime) el mximo de errores posibles. En los lenguajes de alto nivel, esto se consigue con una cierta comprobacin del "sentido" o "significado" del escrito, es el denominado anlisis semntico (anlisis del significado). La mejor baza de que dispone C++ para esta segunda comprobacin es la comprobacin esttica de tipos. Es decir, que las variables y las operaciones entre ellas se usan correctamente; esto supone verificar que las llamadas a funciones, los valores devueltos por estas y los operandos de las expresiones corresponden con el tipo que se les supone en cada caso. Por ejemplo: int x; char func(); .... x = func(); En este caso, la primera lnea declara que la variable x es tipo int (entero); la segunda declara que la funcin fun devuelve un carcter (char); si una lneas ms adelante se pretende igualar la variable x con el valor devuelto por la funcin, el analizador semntico estara en condiciones de asegurar que existe una incongruencia en las pretensiones del programador, generando el correspondiente mensaje de advertencia o error Generador de cdigo Todos estos tokens identificados por el analizador sintctico, son organizados en una estructura como las hojas de un rbol. A continuacin, el generador de cdigo recorre este rbol traduciendo sus hojas directamente en cdigo de la mquina para la que se compila. .

Si se solicita, el compilador tambin puede en esta fase generar un fichero en lenguaje macro ensamblador para su posible inspeccin por el programador (este cdigo es tambin dependiente de la mquina para la que se compila y fcilmente entendible por el humano; puede contener incluso comentarios para facilitar su lectura). A veces, despus del generador de cdigo puede ejecutarse un optimizador (peephole optmizer). Este generador de cdigo sera propiamente el compilador, es decir, el encargado de traducir algo entendible por el humano en cdigo mquina. En cualquier caso, el resultado es un fichero "objeto", generalmente con la terminacin .obj o .o. Tambin puede ordenarse al compilador que incluya en el "objeto", determinada informacin adicional que ser utilizada ms tarde por el depurador , por ejemplo los nmeros de lnea de las sentencias. Cuando se hace as, se habla de una compilacin "provisional" o de "depuracin"; distinta de la que se realiza para la versin definitiva (de campo) del programa en la que no se incluyen este tipo de informacin que ya no es necesaria. Enlazado El ltimo paso en construir un ejecutable es el enlazado. Recibe este nombre el proceso de aglutinar todos los recursos en un solo fichero ejecutable. Estos recursos son desde luego los ficheros-objeto obtenidos en la compilacin de los diversos mdulos (ficheros .c) que componen el programa. Adems, si se han utilizado funciones o clases de librera (como es casi seguro), el enlazador ("Linker") es el programa encargado de incluir los mdulos adecuados en el fichero ejecutable final. As pues, la funcin primordial del enlazador es resolver todas las referencias que puedan existir en el programa, es decir: que cada invocacin a un valor o a una funcin corresponda una direccin donde se encuentra el recurso correspondiente, y que estn todos contenidos en un solo fichero que pueda ser cargado y ejecutado por el Sistema Operativo. Eventualmente algunos recursos pueden estar en otros ficheros distintos del ejecutable, libreras de enlazado dinmico (en Windows se denominan DLLs). En cuyo caso el enlazador tambin incluir las direcciones y convenciones de llamada adecuadas para que puedan ser trados a ejecucin desde el programa principal. Por ltimo, el enlazador se encarga de insertar en el ejecutable un trozo de cdigo especial: el mdulo inicial, que es el encargado de iniciar la ejecucin. Hay que tener en cuenta que generalmente el enlazador puede producir diversos tipos de resultados: Versin de depuracin Se trata de una versin en la que dentro del propio ejecutable, se incluye informacin adicional no estrictamente necesaria para la ejecucin sino para la depuracin (por ejemplo los nmeros de lnea del cdigo fuente que corresponde a cada sentencia). Estos ejecutables permiten la ejecucin en un modo especial, en la que por ejemplo, pueden ejecutarse las sentencias paso a paso, o que el programa se detenga al llegar a diversos puntos establecidos de antemano; ver el contenido de las variables, el estado de la pila y otros aspectos internos muy tiles cuando se intentan depurar errores de tiempo de

ejecucin. Esto se consigue porque el programa corre bajo control de otro programa que acta de controlador de la ejecucin, es el depurador ("Debugger"). Versin de publicacin Es la versin definitiva que saldr al pblico (se entregar al usuario). Se distingue de las versiones internas en que no incluye informacin para depuracin. Es buena prctica incluir en cada versin publicada informacin sobre el nmero de versin del programa y de compilacin (esto suele venir indicado en la siguiente forma: Versin xx.yy.zz build nnn). Librera En las pginas siguientes veremos que como resultado de la "compilacin", no siempre se desea conseguir un ejecutable; al menos no en el sentido tradicional del trmino, sino una librera (de las que existen varios tipos), o un fichero objeto. En lo que respecta al lenguaje C++, existen dos tipos fundamentales: Estticas y Dinmicas. Las primeras son colecciones de ficheros precompilados, cuyo cdigo puede ser aadido a un ejecutable en el proceso de enlazado (los ficheros de la Librera Estndar que acompaan a los compiladores C++ son de este tipo). Las segundas son autnticos ejecutables externos que son invocados desde otro ejecutable y devuelven el control a este cuando terminan su ejecucin. Ms detalles al respecto en.

Errores La verdadera prueba de fuego del programador se presenta cuando lanza la orden de compilar y enlazar su programa. Todos los mdulos involucrados en los pasos anteriores, compilador, analizador sintctico y enlazador pueden detectar errores en nuestro cdigo y mostrar los mensajes correspondientes.

Tipos de errores

En cuanto al momento en que se producen, son bsicamente de tres tipos: De tiempo de compilacin. Se engloban aqu los errores detectados por preprocesador, el analizador sintctico y el propio compilador. Los hay meramente sintcticos, por ejemplo un parntesis no cerrado; tambin de tipo lgico, por ejemplo la referencia a una variable no declarada previamente, etc. etc. De tiempo de enlazado. Son detectados por el enlazador. Por ejemplo una llamada a funcin cuya definicin no aparece por ninguna parte (el enlazador no es capaz de encontrarla en los directorios que tiene asignados como "normales" para buscar); tambin la inversa: dos funciones del mismo nombre situadas en dos mdulos (fuentes) distintos (la referencia aparece duplicada). De tiempo de ejecucin (runtime). Existe finalmente una ltima clase de errores: los que se producen cuando se ejecuta el programa; son precisamente los ms difciles de diagnosticar y verificar, sobre todo en aplicaciones grandes (los relativos a "prdidas misteriosas" de memoria y punteros descontrolados son especialmente temibles).

Gravedad de los errores

Los errores producidos durante la compilacin son de dos tipos, segn su gravedad: Errores fatales ("Errors"): Son errores graves, el proceso no puede continuar y es detenido despus de mostrar la informacin pertinente. Advertencias ("Warnings"): No son errores graves pero si circunstancias sospechosas o inusuales de las que el compilador entiende que merecen una advertencia por si es algo que se nos ha escapado inadvertidamente (por ejemplo: Una variable declarada que no se utiliza para nada ms). En estos casos, el proceso continua y si no hay errores graves se construye un ejecutable.

En todos los casos el aviso incluye indicacin del fichero ("fuente" .C/.CPP), el nmero de lnea, y el nombre de la funcin donde se produce el error, as como una explicacin ms o menos clara de su motivo. En principio pueden ser cuestiones banales, como haber olvidado poner un punto y coma ; al final de una sentencia (muy corriente en los que estamos acostumbrados a programar en otros lenguajes). En otros casos los mensajes son especialmente crpticos, sobre todo para el profano, pero poco a poco los entendemos mejor y podemos aprender mucho de ellos si prestamos la debida atencin y entendemos su "porqu". Recordar que todos los compiladores disponen de opciones para modificar el nmero y tipo de los errores y advertencias ("Warnings") que aparecen. Respecto a los primeros, puede instruirse al compilador para que suspenda la actividad al aparecer el primer error, o que contine hasta que aparezca un nmero determinado de ellos. Respecto a los avisos, puede ordenarse que no muestre ninguno, o que sea ms o menos benevolente en determinados aspectos. Por ejemplo, puede indicarse que la comprobacin siga estrictamente el estndar C++ y que avise de cualquier desviacin al respecto (los compiladores suelen permitir ciertas "peculiaridades" que no son estndar). 4. Funciones 4.1. Funciones 4.1.1.Definicin de funciones Una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y puede retornar un valor. Las funciones pueden tomar parmetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comnmente utilizadas durante un programa y de esta manera reducir la cantidad de cdigo. Cuando una funcin es invocada se le pasa el control a la misma, una vez que esta finaliz con su tarea el control es devuelto al punto desde el cual la funcin fue llamada.

[clase::] ( [Parmetros] ) { cuerpo;

} Ejemplo de una funcin Para comenzar, vamos a considerar el caso en el cual se desea crear la funcin cuadrado (), misma que deber volver el cuadrado de un nmero real (de punto flotante), es decir, cuadrado () aceptar nmeros de punto flotante y regresar una respuesta como nmero flotante. Nota: aunque para la funcin que veremos el tipo de retorno coincide con el tipo de parmetro pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio que una funcin reciba un parmetro de un tipo y que tenga que regresar una respuesta de dicho tipo. // regresar el cuadrado de un nmero double cuadrado(double n) { return n*n; }

4.1.2.Funciones estndar Las funciones estndar de C (tambin conocida como libc) es una recopilacin de ficheros cabecera y bibliotecas con rutinas, estandarizadas por un comit de la Organizacin Internacional para la Estandarizacin (ISO), que implementan operaciones comunes, tales como las de entrada y salida o el manejo de cadenas. A diferencia de otros lenguajes como COBOL, FORTRAN, o PL/I, C no incluye palabras clave para estas tareas, por lo que prcticamente todo programa implementado en C se basa en la biblioteca estndar para funcionar. Aqu se hacen mencin de algunas de las funciones estndar: Incluye algunas funciones tiles para la clasificacin y el mapeado de cdigos. Cada funcin acepta un argumento de tipo "int" cuyo valor puede ser el valor de la macro "EOF" o cualquier valor representable por el tipo "unsigned char". Esto es, el argumento puede ser el valor devuelto por "fgetc", "fputc", "getc", "getchar", "putc", "putchar", "tolower", "toupper" o "ungetc" (declaradas en ""). isalnum int isalnum (int c); Devuelve un valor distinto de cero si "c" es una letra minscula "a-z" o mayscula "A-Z", uno de los dgitos decimales "0-9" o cualquier otro carcter alfabtico local. isalpha int isalpha (int c);

Devuelve un valor distinto de cero si "c" es una letra minscula "a-z" o mayscula "A-Z", o cualquier otro carcter alfabtico local. iscntrl int iscntrl (int c); Devuelve un valor distinto de cero si "c" es cualquier carcter de control (como FF, HT, NL). isdigit int isdigit (int c); Devuelve un valor distinto de cero si "c" es cualquiera de los dgitos decimales (0-9). isgraph int isgraph (int c); Devuelve un valor distinto de cero si "c" es cualquier carcter de impresin excepto "espacio". islower int islower (int c); Devuelve un valor distinto de cero si "c" es cualquiera de las letras minsculas "a-z" u otra minscula local. isprint int isprint (int c); Devuelve un valor distinto de cero si "c" es cualquier carcter imprimible, incluyendo el "espacio". ispunct int ispunct (int c); Devuelve un valor distinto de cero si "c" es cualquier carcter imprimible excepto "espacio", o si "isalnum(c)" es distinto de cero. isspace int isspace (int c); Devuelve un valor distinto de cero si "c" es "CR", "FF", "HT", "NL", "VT", "espacio" o cualquier otro carcter de separacin local. 4.2. Entrada y salida de datos Cuando nos referimos a entrada/salida estndar (E/S estndar) queremos decir que los datos o bien se estn leyendo del teclado, o bien se estn escribiendo en el monitor de video. Como se utilizan muy frecuentemente se consideran como los dispositivos de E/S por default y no necesitan ser nombrados en las instrucciones de E/S.

En el lenguaje C++ tenemos varias alternativas para ingresar y/o mostrar datos, dependiendo de la librera que vamos a utilizar para desarrollar el programa, entre estas estn: iostream.h y sodio.h. < IOSTREAM.H> Las operaciones de entrada y salida no forman parte del conjunto de sentencias de C++, sino que pertenecen al conjunto de funciones y clases de la biblioteca estndar de C++. Ellas se incluyen en los archivos de cabecera iostream.h por lo que siempre que queramos utilizarlas deberemos introducir la lnea de cdigo #include Esta biblioteca es una implementacin orientada a objetos y est basada en el concepto de flujos. A nivel abstracto un flujo es un medio de describir la secuencia de datos de una fuente a un destino o sumidero. As, por ejemplo, cuando se introducen caracteres desde el teclado, se puede pensar en caracteres que fluyen o se trasladan desde el teclado a las estructuras de datos del programa. Los objetos de flujo que vienen predefinidos sern: 1. cin, que toma caracteres de la entrada estndar (teclado); 2. cout, pone caracteres en la salida estndar (pantalla); 3. cerr y clog ponen mensajes de error en la salida estndar. Estos objetos se utilizan mediante los operadores >. El operador