lenguajes de programación_editado

42
INTRODUCCION A LA PROGRAMACIÓN Presentación el dominio de un lenguaje de programación, implica el manejo de ciertas técnicas comunes, como son la programación estructurada, orientada a objetos y/u orientada a eventos; así como también el uso de variables, distintos tipos de datos, eventos, clases, objetos, métodos, y propiedades que son prerrequisito para poder adentrarse con cierta solidez en las características especiales de cada lenguaje de programación. La utilización de la orientación a objetos permite el desarrollo de aplicaciones que cada día se hace más común, debido a las facilidades que esta proporciona, sin embargo la elección de la herramienta (lenguaje) que se utilizará es un punto que debe ser tomado en cuenta ya que si no permite aplicar los conceptos de la orientación a objetos, todo el trabajo de análisis y diseño no habrá servido. Objetivos Identificara los aspectos fundamentales de la programación orientada a objetos y desarrollará programas de propósito, para poner en práctica los conceptos, técnicas y metodologías aprendidas.

Upload: ritsu-yared-hernandez

Post on 25-Apr-2015

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lenguajes de programación_EDITADO

INTRODUCCION A LA PROGRAMACIÓN

Presentación

el dominio de un lenguaje de programación, implica el manejo de ciertas técnicas comunes, como son la programación estructurada, orientada a objetos y/u orientada a eventos; así como también el uso de variables, distintos tipos de datos, eventos, clases, objetos, métodos, y propiedades que son prerrequisito para poder adentrarse con cierta solidez en las características especiales de cada lenguaje de programación.

La utilización de la orientación a objetos permite el desarrollo de aplicaciones que cada día se hace más común, debido a las facilidades que esta proporciona, sin embargo la elección de la herramienta (lenguaje) que se utilizará es un punto que debe ser tomado en cuenta ya que si no permite aplicar los conceptos de la orientación a objetos, todo el trabajo de análisis y diseño no habrá servido.

Objetivos

Identificara los aspectos fundamentales de la programación orientada a objetos y desarrollará programas de propósito, para poner en práctica los conceptos, técnicas y metodologías aprendidas.

Page 2: Lenguajes de programación_EDITADO

Temario

1. Lenguajes de programación

1. Definición de lenguaje de programación

2. Definición de programa

3. Paradigmas de la programación

4. Programación funcional y estructurada

5. Programación orientada a objetos

6. Programación lógica

7. Programación orientada a datos

8. Traductores

9. Código fuente, objeto y ejecutable

10. Entornos de desarrollo integrado

2. Elementos básicos de la programación estructurada

1. Tipos de datos primitivos

2. Palabras reservadas

3. Variables

4. Constantes

5. Expresiones

6. Jerarquía de operadores

7. Operadores aritméticos

8. Operadores relacionales

9. Operadores lógicos y booleanos (and, or, not, xor)

3. Control de flujo de sentencias

1. Sentencias incondicionales

2. Sentencias condicionales

Page 3: Lenguajes de programación_EDITADO

4. Variable con subíndice o arreglos

1. Definición

2. Arreglos unidimensionales

3. Arreglos bidimensionales

5. Funciones

1. Concepto de función en programación

2. Llamada o invocación a una función

3. Parámetros

4. Valor de retorno

6. Elementos básicos de la programación orientada a objetos

1. Concepto de objeto

2. Anatomía de un objeto

3. Beneficios de la programación orientada a objetos

7. Clases y objetos

1. definición de una clase

2. miembros de una clase

8. Encapsulamiento

1. Modularidad

2. Ocultamiento de la implementación

3. Protección de variables y métodos

9. Herencia

1. Jerarquía de clases

2. Tipos de herencia

10. Interfaz Gráfica

1. Definición de GUI

Page 4: Lenguajes de programación_EDITADO

2. Formularios

3. Contenedores

4. Componentes

5. Eventos

Page 5: Lenguajes de programación_EDITADO

TEMA 1.

Objetivos:

El participante:

Identificará los elementos básicos de la programación estructurada. Utilizará diferentes tipos de datos. Identificará la jerarquía de operadores Utilizará distintos tipos de operadores.

1. Lenguajes de programación

DefiniciónUn lenguaje de programación es un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Es utilizado para controlar el comportamiento físico y lógico de una máquina.

Los primeros lenguajes de programación empezaron a crearse en la década de los 50’s gracias al adelanto importante en el diseño de las computadoras, cuando el científico John Von Neumann tuvo la idea de que la computadora no debería ser “cableada” para ejecutar algo en particular, sino que podría lograrse con una serie de códigos almacenados como datos que determinaran las acciones ejecutadas por una unidad de procesamiento central.Sin embargo, las computadoras sólo “entienden” mediante 0’s y 1’s por lo que las instrucciones dadas a una computadora tienen que ser de esta forma, por ejemplo, una instrucción sería la siguiente:

101010101001101111

Esta forma de dar instrucciones a la computadora es demasiado complicada por lo que pronto se asignaron “símbolos” a estas instrucciones, de forma que fuese más sencilla dar instrucciones a la computadora, es así como surgió el lenguaje ensamblador.

Por lo tanto el lenguaje ensamblador es un lenguaje de programación que traduce el lenguaje maquina a un lenguaje más natural para el ser humano, por ejemplo, en lugar de 0’s y 1’s podemos tener lo siguiente:

.model small

.stack

.dataCadena1 DB 'Hola Mundo.$'

Page 6: Lenguajes de programación_EDITADO

.codeprograma:mov ax, @datamov ds, axmov dx, offset Cadena1mov ah, 9int 21hend programa

Sin embargo, a pesar de que este lenguaje es “más comprensible” para el ser humano, depende directamente del hardware de la maquina, es decir, tenemos que conocer el tipo de procesador que utiliza, la cantidad de memoria, etc. para poder dar las instrucciones requeridas a la maquina en cuestión.

A los lenguajes de programación que tienen poco o ningún nivel de abstracción, es decir, que su sintaxis es más parecida a la de la de computadora se les llama lenguajes de bajo nivel.

De la misma forma que pasaron de los 0’s y 1’s a los símbolos que facilitaron “la comunicación” con la computadora se crearon lenguajes de programación independientes de la arquitectura de la maquina, es decir, lenguajes en los cuales no es necesario conocer el hardware de la computadora para darle una serie de instrucciones, y además, las instrucciones utilizadas en estos lenguajes se realizan a través de palabras de lenguajes humanos, generalmente inglés, lo que facilita la escritura y comprensión de las instrucciones asignadas a la computadoras. A este tipo de lenguajes se les conoce como lenguajes de alto nivel.ProgramaPrograma

Un programa es un conjunto de sentencias o instrucciones escritas en algún lenguaje de programación que le indican a la computadora lo que debe hacer.ParadParadigmas de la programación la ProgramaciónPor paradigma se entiende una de tantas formas en que se pueden hacer las cosas. Por lo tanto una computadora puede programarse siguiendo algunos de los paradigmas siguientes.

Programación Funcional y Estructurada FuEl paradigma funcional parte de la descripción de las computadoras al evaluar sus funciones o en la aplicación de dichas funciones con valores conocidos. Por esta razón, los lenguajes funcionales se conocen en ocasiones como lenguajes aplicativos.

Page 7: Lenguajes de programación_EDITADO

Los algoritmos, son una serie de pasos para obtener un resultado determinado y; se implementan como procedimientos o funciones dentro de los programas.

Con la programación funcional y estructurada los programas se organizan en un conjunto de funciones jerarquizadas como un árbol, y generalmente al programa principal se le conoce como nodo raíz (vea la Figura 1). Estos programas dependen de las funciones o procedimientos que implementan los algoritmos en los que se basa el programa, frecuentemente las partes más cercanas al nodo raíz contienen descripciones abstractas de los algoritmos empleados, y a medida que nos alejamos del nodo raíz, se van desglosando estas descripciones en otras cada vez menos abstractas, hasta llegar al nivel máximo de detalle en las capas inferiores.

La representación de datos está determinada por los algoritmos que se vayan a emplear y refleja la estructura interna del algoritmo, más que la semántica del mismo. Además, los datos son entidades pasivas, meras zonas de memoria y aun cuando se pueda definir una cierta estructura jerárquica de los mismos, ésta puede, en muchos casos, reflejar más los detalles de implementación del algoritmo que el significado del tipo de datos así definido. Este modelo conceptual, reflejado en la siguiente figura, es el que motivó el nombre del libro clásico de Niklaus Wirth: “Algoritmos + Estructuras de datos = Programas”.

Figura 1. Árbol de funciones o procedimientos en la programación funcional y sus estructuras de datos

Las metodologías destinadas a escribir programas basados en el modelo conceptual anteriormente explicado reciben, en su conjunto, el nombre de programación estructurada.

La programación estructurada produjo en su momento una mejora considerable en la calidad de código con respecto a enfoques anteriores, pero no ha logrado resolver del todo problemas como la poca mantenibilidad del código y, sobre todo, la dificultad de construir componentes de software reutilizables de una aplicación a otra, es decir, módulos autocontenidos, con entradas y salidas bien definidas, y que sirvan como bloques prefabricados en la construcción de una amplia gama de sistemas con propósitos diversos.

La sintaxis de los lenguajes funcionales refleja fielmente las ideas de la programación estructurada. La unidad básica de un programa es el procedimiento

Page 8: Lenguajes de programación_EDITADO

o función, y los datos son bloques de memoria que esperan pasivamente a ser modificados por los algoritmos. Solo con las reglas de ámbitos de acceso contempladas en estos lenguajes no es posible conseguir mecanismos efectivos para ligar de una forma lógica y coherente los datos y el código necesario para manejarlos.

Programación orientada a objetos

Si nos ponemos a pensar en cuál es el modo natural para la mente de organizar la información que nos llega a través de los sentidos, concluiremos fácilmente que no se apega con el modelo propuesto por el paradigma funcional y estructurado.

Las personas no ven el mundo dividido en dos grandes mitades, una compuesta por todos los datos del estado del mundo y otra por todas las posibles acciones que se ejercen sobre ellos. Al contrario, percibimos el mundo como divido en cosas u objetos, cada uno de los cuales tiene asociado un estado y un conjunto de operaciones y que producen cambios en éstos.

Así por ejemplo, cuando conducimos un coche, vemos como una unidad su estado y las acciones que son posibles realizar para modificar ese estado. El estado está compuesto por la velocidad, la aceleración, la velocidad de giro del motor (RPM) y otras medidas similares. Las acciones que se pueden realizar para modificar ese estado son pisar el acelerador, frenar, cambiar de marcha, etc. El único modo de cambiar el estado del coche es ejercer sobre él una o varias de las posibles acciones. Por otro lado, el estado actual del coche puede influir en el resultado de las acciones: obviamente, no se produce el mismo efecto al pisar el freno cuando la velocidad es baja que cuando ésta es alta, o cuando el coche circula en una recta o una curva. De este modo; estado y acciones están indisolublemente ligados en cualquier objeto de la vida real.

La programación orientada a objetos trata de reflejar estas características de los objetos reales, haciendo que un programa se divida en entidades que mantienen juntos los datos y el código que los manipula. Dichas entidades reciben, como sus contrapartidas del mundo real, el nombre de objetos. Un objeto consta de unas variables, que contienen su estado actual, y de unos métodos, que no son otra cosa que funciones ligadas al objeto y que permiten actuar sobre el estado. El único modo de acceder a las variables del objeto es a través de los métodos asociados a esas variables privadas del objeto. A este modo de disponer código y datos se le llama encapsulación. La encapsulación permite modificar la manera en que un objeto implementa sus métodos sin afectar a ningún otro objeto del sistema – modularidad -. Los servicios que proporciona el objeto pueden ser utilizados sin saber cuáles son los detalles de su implementación – ocultamiento de la información -.

La definición de los datos a través de las operaciones que es posible realizar con ellos, en lugar de por su representación en memoria, recibe el nombre de abstracción de datos.

Page 9: Lenguajes de programación_EDITADO

Los objetos se comunican entre sí enviando y recibiendo mensajes, que piden al objeto larealización de una acción (Ver la Figura 2). Un mensaje no es más que la invocación a unmétodo del objeto con los parámetros contenidos en el mensaje.En la siguiente figura se representa el modelo simplificado de la interacción entre coche yconductor que se emplearía para preparar un programa de simulación en un lenguaje orientado a objetos.

Figura 2. Envío de mensajes entre objetos.

Tanto los sentidos relevantes del conductor – vista, oído, y tacto – como los mandos del coche – volante, acelerador, freno, etc. – se corresponden en el modelo con otros tantos métodos, los cuales reciben como entrada los datos enviados por medio de mensajes desde el otro objeto.

Los métodos deciden cuál va a ser el nuevo estado a partir de los datos de entrada y del estado actual.Por ejemplo, si el objeto que representa al conductor decide que hay que aumentar la velocidad, envía un mensaje acelerar, el cual hace que se invoque el método acelerador con los parámetros proporcionados en el mensaje. Si el estado actual lo permite, es decir, el motor está en funcionamiento, la caja de cambios no está en punto muerto y se cumplen otras condiciones parecidas, aumentará la velocidad de giro del motor y, en consecuencia, la velocidad del coche.

Este cambio en la velocidad del coche provoca a su vez movimientos en las agujas del velocímetro, del tacómetro y del contador de revoluciones, que son vistas por el conductor, y que en el modelo se representan mediante mensajes. Estos mensajes llegan al objeto conductor y producen llamadas al método que representa la vista. A través de él, cambian las variables internas que representan el estado mental del conductor.

Siguiendo este ejemplo automovilístico, nosotros no nos conformamos con ver coches u objetos individuales. También observamos similitudes entre ellos, y podemos abstraer características comunes que nos sirven para clasificarlos. Así existe un diseño llamado Tsuru GS1, del cual son casos particulares los coches de este modelo que vemos por las carreteras. A partir de ese diseño o plantilla se producen objetos individuales del mismo tipo, y a esto se le llama clase, en

Page 10: Lenguajes de programación_EDITADO

programación orientada a objetos. La creación de un objeto a partir de una clase se le denomina instanciación, y es posible referirse al objeto como una instancia de esa clase, ver la Figura 3:

Figura 3. Instancias de objetos creados a partir de la clase.

Además de objetos y clases, la programación orientada a objetos posee mecanismos de abstracción y reutilización de código como la herencia. La herencia es una relación entre clases donde una clase nueva puede heredar los atributos y métodos de una clase existente. La clase existente se le conoce como superclase y la clase nueva subclase.

Gracias a la herencia los lenguajes de programación orientada a objetos poseen una propiedad conocida como polimorfismo. El polimorfismo nos permite reutilizar el código de los métodos de las superclases para darles una nueva forma de comportamiento en las subclases, así el programador aprovecha lo que ya existe en la superclase y puede programar la nueva forma en que hará las cosas el nuevo método en la subclase.

Programación LógicaEste paradigma de lenguajes de programación se basa en la lógica simbólica. En un lenguaje lógico, un programa está formado por un conjunto de enunciados o proposiciones lógicas que describen lo que es verdad con respecto a un resultado deseado, en oposición a dar una secuencia particular de enunciados que deben ser ejecutados en un orden establecido para producir un resultado. Un lenguaje de programación lógico puro no tiene necesidad de sentencias de control de flujo como ciclos o selección. El control es suministrado por el sistema subyacente. Todo lo que se necesita en un programa lógico es el enunciado de propiedades del cómputo. Por esta razón a la programación lógica algunas veces se le conoce como programación declarativa (recordar que también por razones similares la programación funcional se le conoce como declarativa), dado que las propiedades se declaran, pero no se especifica una secuencia de ejecución.

Como ejemplos de lenguajes de programación lógica tenemos el Prolog y el Lisp. Uno de los más utilizados en el campo de la IA (Inteligencia Artificial) es el Prolog ya que este lenguaje esta diseñando para manejar problemas lógicos – es decir, problemas en los que se necesita tomar decisiones de una forma ordenada - Prolog2 intenta hacer que la computadora “razone” la forma de encontrar la solución. Es particularmente adecuado para diferentes tipos de la IA, los dos más

Page 11: Lenguajes de programación_EDITADO

significativos de estos son los sistemas expertos y el procesamiento del lenguaje natural.

Programación Orientada a Datos a Datos.La programación con lenguajes orientados a datos se refiere al manejo de instrucciones o sentencias de consulta basados en el modelo entidad – relación o modelo de datos relacional. El modelo relacional3 se basa en un conjunto de tablas. El usuario del sistema de bases de datos puede consultar estas tablas, insertar nuevas tuplas o registros, borrar, actualizar y modificar las tuplas. Hay varios lenguajes para expresar estas operaciones. El álgebra relacional define las operaciones fundamentales utilizadas en los lenguajes de consultas relacionales.

El álgebra relacional y los cálculos relacionales son lenguajes rígidos, formales, que no resultan adecuados para los usuarios ocasionales de los sistemas de bases de datos. Los sistemas comerciales de bases de datos, por lo tanto, utilizan lenguajes con menor rigidez. Los lenguajes de bases de datos comerciales incluyen el SQL (Structured Query Lenguaje, Lenguaje Estructurado de Consultas) . Aunque el lenguaje SQL se considera un lenguaje de consultas este contiene muchas otras capacidades además de las consultas a la base de datos, por ejemplo, incluye características para definir la estructura de los datos, para la modificación de los datos de la base de datos y para la especificación de ligaduras de seguridad para la integridad referencial.

2 Prolog. Phillip, R. Robinson., Aplique Turbo Prolog, Editorial Osborne McGraw-Hill, 1991, p. xxii, xxiii 3 Modelo relacional. Silberschatz, Abraham., Fundamentos de Bases de Datos, Editorial McGraw Hill, p.76.

Lenguajes de programación (conceptos básicos)

Traductores

Para que un lenguaje de programación sea útil debe tener un traductor, esto es, un programa que acepte otros programas escritos en el lenguaje en cuestión y que, los ejecute directamente o los transforme en una forma adecuada para su ejecución.

Un traductor que ejecuta un programa directamente se conoce como intérprete. Un traductor que produce un programa equivalente en una forma adecuada para su ejecución se conoce como compilador.Los traductores son programas que traducen los programas en código fuente, escritos en lenguajes de alto nivel, a programas escritos en lenguaje máquina.

Page 12: Lenguajes de programación_EDITADO

Figura 1. Traductores

Intérpretes Los intérpretes realizan el proceso que consta de un paso, en donde tanto el programa como la entrada le son dados al intérprete, y se obtiene una salida.Un intérprete lee el código como está escrito e inmediatamente lo convierte en acciones; es decir, lo ejecuta en ese instante.Existen lenguajes que utilizan un intérprete (como por ejemplo JAVA) que traduce en el instante mismo de lectura el código en lenguaje máquina para que pueda ser ejecutado.

Figura 2. Figura 4. Proceso de traducción con un intérprete.

CompiladoresUn compilador es un programa que hace un proceso de traducción que consta de dos pasos: Primero, el programa original (programa fuente) es la entrada al compilador, y la salida del compilador que es un nuevo programa (programa objetivo). Segundo, este programa objetivo puede ser entonces ejecutado, siempre y cuando este en una forma adecuada para una ejecución directa esto es, en lenguaje de máquina (Ver la Figura 5).

Usualmente el lenguaje objetivo es un lenguaje ensamblador, y el programa objetivo deberá ser traducido por un ensamblador en un programa objeto, y posteriormente ligado con otros programas objeto, y cargado en localidades de memoria apropiadas antes de que pueda ser ejecutado. A veces el lenguaje objetivo es, incluso otro lenguaje de programación, y en tal caso deberá utilizarse un compilador para que dicho lenguaje pueda obtener un programa objeto ejecutable.

Figura 3. Figura 5. Proceso de traducción con un compilador.

Ensambladores Un ensamblador es un traductor para el lenguaje ensamblador de una computadora en particular. Como se mencionó, el lenguaje ensamblador es una forma simbólica del lenguaje de máquina de la computadora y esta caracterizado por el uso de mnemónicos que representan operaciones de máquina y quizás direcciones simbólicas de la memoria de la computadora. El lenguaje ensamblador es particularmente fácil de traducir debido a su bajo nivel de abstracción a código objeto de máquina de ceros y unos (código binario). En ocasiones el compilador

Page 13: Lenguajes de programación_EDITADO

generará lenguaje ensamblador como su lenguaje objetivo y dependerá entonces de un ensamblador para terminar la traducción a código objeto.

LigadoresTanto los compiladores como los ensambladores a menudo dependen de un programa conocido como ligador, el cual recopila el código que se compila o ensambla por separado en diferentes archivos objeto, a un archivo que es directamente ejecutable. En este sentido, puede hacerse una distinción entre código objeto (código de máquina que todavía no se ha ligado) y el código de máquina ejecutable. Un ligador también conecta un programa objeto con el código de funciones de librerías estándar, así como con recursos suministrados por el sistema operativo de la computadora, tales como asignadores de memoria y dispositivos de entrada y salida.

CargadoresFrecuentemente un compilador, ensamblador o ligador producirá un código que todavía no está completamente organizado y listo para ejecutarse, pero cuyas principales referencias de memoria se hacen relativas a una localidad de arranque indeterminada que puede estar en cualquier sitio de la memoria. Se dice que tal código es relocalizable y un cargador resolverá todas las direcciones relocalizables relativas a una dirección base, o de inicio, dada. El uso de un cargador hace más flexible el código ejecutable, pero el proceso de carga con frecuencia ocurre en segundo plano (como parte del entorno operacional) o conjuntamente con el ligado. Rara vez un cargador es en realidad un programa por separado.

Código fuente, objeto y ejecutable.El código fuente es la entrada en el proceso de traducción (ya sea compilación o interpretación) y consiste en conjuntos de instrucciones o sentencias escritas en un lenguaje de programación.Estas sentencias se guardan en un archivo de texto ANSI o ASCII al cual se le denomina archivo fuente. Para crear los archivos fuentes y capturar estas sentencias, se utiliza generalmente un editor que es un programa que nos permite editar el código fuente desde el teclado, esto es, escribirlo, borrarlo, copiarlo, moverlo, insertarlo, guardarlo, etc.

EditoresLos compiladores e intérpretes por lo regular aceptan archivos fuente escritos utilizando cualquier editor que pueda producir un archivo estándar, tal como un archivo ASCII. Más recientemente, los compiladores han sido integrados junto con editores y otros programas en un ambiente de desarrollo integrado o entorno de desarrollo integrado (IDE). En un caso así, un editor, puede ser orientado hacia el formato o estructura del lenguaje de programación en cuestión. Tales editores se denominan basados en estructura y ya incluyen algunas de las operaciones del compilador, de manera que, por ejemplo, pueda informarse al programador de los errores a medida que el programa se vaya escribiendo en lugar de hacerlo cuando está compilado. El compilador y sus programas acompañantes también pueden

Page 14: Lenguajes de programación_EDITADO

llamarse desde el editor, de modo que el programador pueda ejecutar el programa sin tener que abandonar el editor.

Código objetoEl código objeto es la salida en el proceso de compilación, donde la entrada es el código fuente que es traducido por el compilador para convertirlo en código objeto, es decir, instrucciones en código de máquina. Un archivo que contiene código objeto se le denomina archivo objeto.

Código de máquinaEl código de máquina - código de máquina objetivo - es generalmente código en forma delenguaje ensamblador, pero en su estado de menor abstracción es código binario de ceros y unos.

Page 15: Lenguajes de programación_EDITADO

LENGUAJES DE PROGRAMACIÓN (IDE)

ENTORNOS DE DESARROLLO INTEGRADO

Un entorno de desarrollo integrado (IDE, Integrated Development Environment) es una interfaz gráfica de usuario (GUI, Graphics User Interface) un conjunto de herramientas de desarrollo de programación de software, para que el programador o el equipo de programadores, trabajen conjuntamente y de forma interactiva para así aumentar su productividad.

Las herramientas que suelen incluir los IDE , generalmente son: un Editor, Un compilador, un intérprete, un depurador, y un administrador de proyecto, entre otros. El editor es un programa que permite editar código fuente del programa en un lenguaje de programación. El compilador y el intérprete son traductores de un lenguaje de programación para trasladarlo a una forma adecuada para su ejecución en la máquina. El depurador nos permite detectar los errores de los programas y corregirlos.

Depurador

Un depurador es un programa que se utiliza para determinar los errores de ejecución de un programa compilado. Regularmente esta integrado con un compilador en un IDE. La ejecución de un programa con un depurador se diferencia de la ejecución directa en que el depurador se mantiene al tanto de la mayoría o la totalidad de la información sobre el código fuente, tal como los números de línea y os nombres de las variables y procedimientos.

También en el proceso de depuración se pueden realizar trazas que es la interpretación de las sentencias una por una, como si estuviéramos revisando una cinta en cámara lenta. También podemos colocar puntos de ruptura que es un punto en el código fuente que marcamos y en donde queremos que la ejecución del programa se pare, para asi poder analizar el posible origen del error, además de proporcionar información de cuales funciones se han invocado y cuales son los valores actuales de las variables.

Tanto las trazas o trace como los puntos de ruptura o break points, nos es posible utilizarlos en casi todos los lenguajes de programación modernos como el Delphi, Java, Lenguaje C/C++, Visual Basic, etc., debido a que los recientes IDE para estos lenguajes de programación vienen provistos de estas herramientas de depuración.

Page 16: Lenguajes de programación_EDITADO

Administradores de proyecto

Los modernos proyectos de software por lo general son tan grandes que tienen que ser emprendidos por grupos de programadores en lugar de un solo programador. En tales casos es importante que los archivos que se están trabajando por personas distintas se encuentren coordinados, y este es el trabajo de un programa de administración de proyectos. Por ejemplo, un administrador de proyecto debería coordinar la mezcla de diferentes versiones del mismo archivo producido por programadores diferentes. También debería mantener una historia de las modificaciones para cada uno de los grupos de archivos, de modo que puedan mantenerse versiones coherentes de un programa en desarrollo (esto es algo que también puede ser útil en un proyecto que lleva a cabo un solo programador).

Ayudas

También en los IDES modernos generalmente se integran programas asistentes y de ayuda para el programador, asi como tutoriales. Estos programas dan información al usuario programador para familiarizarse con el ambiente y para realizar tareas complejas. Actualmente los modernos IDE tienen lo que se conoce como ayuda en línea, hipertexto, tecnología de punto, plantillas y demos.

Diseños

Los IDE modernos integran herramientas de diseño de software como el lenguaje unificado de modelado (UML Unified Modeling Lenguaje) y también para el diseño de interfaces gráficas de usuario (GUI Graphics User Interface), entre otras más. Estas herramientas del IDE nos permiten desarrollar sistemas no solo en la fase de programación o codificación de los programas, sino también desde la fase de análisis y diseño. Con las herramientas de diseño de GUI se pueden desarrollar rápidamente prototipos de vistas con interfaces graficas para mostrárselas al cliente para su aprobación, además de facilitarnos la tarea de creación de interfaces gráficas para nuestros programas ya que su programación suele ser compleja y laboriosa.

Otros recursos

Adicionalmente a todo lo anterior los actuales IDE además de permitirnos administrar proyectos a gran escala donde intervienen equipos de programadores, nos permiten integrar recursos tales como: orígenes de datos hacia bases de datos de diferentes proveedores, orígenes de datos a archivos planos, archivos de imágenes, de video, conexiones de red a servidores de aplicaciones,

Page 17: Lenguajes de programación_EDITADO

navegadores, servidores Web, etc., ya que todos estos recursos podrían formar parte del desarrollo de la aplicación.

C++

La práctica hace al maestro, y recordando esta frase a lo largo del curso se ejemplificarán todos los conceptos que serán revisados, para ejemplificarlos se necesita un lenguaje de programación para esto se utilizara el lenguaje C++.

El lenguaje C++ fue creado en los años 80´s, C++ es una extensión del popular lenguaje de programación C, la intención era añadir nuevas características que no soportaba C, principalmente el paradigma de la programación orientada a objetos.

Por lo tanto se puede decir que C++ es un lenguaje hibrido, es decir, es posible programar tanto en estilo C como orientado a objetos.

También, dado que C++ proviene de C, tenemos que C++ es un lenguaje de programación de bajo nivel y de alto nivel.

Para programar en C++ y en general en cualquier lenguaje de programación solo se necesita un editor de textos, generalmente el bloc de notas; ya que después basta con guardar el archivo con la extensión requerida por el lenguaje de programación para después solo compilarlo.

Sin embargo, no se realizará de esta manera, desde el principio se utilizará un IDE para realizar todos los ejemplos que se revisarán durante el periodo establecido.

Qt Creator

Qt Creator es un Entorno de desarrollo integrado para C++, tiene versiones para los sistemas operativos del tipo Windows, Linux y Mac.

Este IDE fue diseñado para crear aplicaciones con la biblioteca Qt, sin embargo, para las aplicaciones que se realizaran a lo largo del curso funcionará sin ningún tipo de problema.

Aunque hasta el último tema se utilizará y detallará lo que es la biblioteca Qt, en este momento sólo se dirá que esta es una biblioteca plataforma para crear interfaces gráficas de usuario. Esta biblioteca fue desarrollada por la compañía noruega Trolltech, actualmente renombrada a Qt Software, y que desde junio de 2008 es propiedad de Nokia.

Este IDE también es propiedad de la compañía finlandesa Nokia, lo puede bajar directamente de la pagina: http://qt.nokia.com/downloads

Page 18: Lenguajes de programación_EDITADO

2. Elementos básicos de la programación estructurada (expresiones)

Tipos de datos primitivos

Se les llama datos primitivos o atómicos a los diversos conjuntos de valores que proporciona un lenguaje de programación.

Numéricos (enteros y de punto flotante o reales)Los datos de tipo numérico son aquellos en que se pueden representar un conjunto finito de valores ya sean enteros o reales, además de poder realizar operaciones aritméticas sobre ellos.

En la siguiente tabla se muestran los tipos de datos numéricos que proporciona C.

Tipo de dato Tamaño en bits Rango de valores Máscara

short 16 -32768 a 32767 %hdint 32 -2,147, 483,648 a 2,147,483,647 %dfloat 32 3.4 x 10-38 a 3.4 x 103 %fdouble 64 1.7 x 10-308 a 1.7 x 10308 %f

Además se pueden cambiar los rangos de valores que puede alcanzar un tipo de datos mediante el modificador unsigned que significa que es entero sin signo (No aplica para números reales).

Ejemplo.unsigned tipo_de_dato;

También se pueden hacer combinaciones como en los siguientes ejemplos:long double total;unsigned int contador;unsigned short int tipo;

El siguiente ejemplo lee diferentes tipos de datos numéricos y los despliega en pantalla.1. // datosNumericos.cpp2. #include <stdio.h>3. #include <conio.h>4. int main(void){5. int dato1;6. float dato2;7. printf(“Dame un valor entero = ”);8. scanf(“%d”,& dato1);9. printf(“Dame un valor real = ”);10. scanf(“%f”,& dato2);11. printf(“Los valores que tecleaste son:\n”);12. printf(“Entero: %d\nReal: %.2f ”, dato1, dato2);

Page 19: Lenguajes de programación_EDITADO

13. getch();14. return 0;15. }En las líneas 5 y 6 se declaran variables de diferentes tipos de datos, la variable dato1 es de tipo entero y dato2 es de tipo real. En las líneas 8 y 10 se utiliza la función scanf y como se puede apreciar las máscaras dependen del tipo de dato de la variable.

En la línea 12 se despliegan los valores de las variables, nótese que la función printf maneja 3 argumentos los cuales están separados por comas, el primero es la cadena que se encuentra entre comillas dobles y que se desplegará en pantalla, los otros dos argumentos restantes son las variables que queremos que se impriman.

Dentro de la cadena se encuentran las máscaras correspondientes al tipo de dato de la variable, en la siguiente imagen se muestra la forma en que se relacionan las máscaras con las variables.

Figura 1.

En el caso de la segunda mascara, entre el signo de % y la f aparece un .2, esto indica que el valor será desplegado con dos decimales, si yo quisiera 4 decimales escribiría %.4f.

Figura 2. Ejecución del código 3

Carácter y CadenaLos datos de tipo carácter son aquellos en donde se puede almacenar ya sea una letra, unnúmero, un símbolo o algún carácter de tipo especial, por ejemplo un espacio. Los datos de tipo cadena son un conjunto de variables de tipo carácter.

En la siguiente tabla se muestran los datos de tipo carácter que proporciona C.

Tipo de dato Tamaño en bits Rango de valores Máscara

char 8 -128 a 127 %cunsigned char 8 256 %c

El lenguaje C no proporciona datos primitivos de tipo cadena, sin embargo es posibleimplementarlos mediante arreglos, esto se verá más adelante.

El siguiente ejemplo lee un carácter desde el teclado y lo despliega en pantalla.1. // datoCaracter.cpp2. #include <stdio.h>

Page 20: Lenguajes de programación_EDITADO

3. #include <conio.h>4. int main(void){5. char letra;6. printf(“Dame una letra = ”);7. scanf(“%c”,&letra);8. printf(“La letra que tecleaste es: %c”,letra);9. getch();10. return 0;}

En las líneas 5 se declara una variable de tipo carácter.En la línea 7 se utiliza la función scanf para leer desde el teclado ya sea una letras, un número o algún otro símbolo especial.

Finalmente en la línea 8 se despliega en pantalla el contenido de la variable letra.

Lógicos o Booleanos (Falso, Verdadero)

Los datos de tipo lógicos son aquellos en donde se representa un estado de verdad, ya sea verdadero (true) o falso (false). En programación se utiliza mucho este tipo de datos, dado que estos nos permite saber si algún proceso realizó su función correctamente, por ejemplo, si el proceso x tuvo algún problema por el cual no pudo cumplir su cometido, este regresa un false, en caso contrario regresa un true. También se utilizan de forma implícita en operaciones relacionales, por ejemplo, 5<6, nos regresaría un true.

El lenguaje C no proporciona datos primitivos de tipo lógicos, sin embargo es posible implementarlos mediante datos de tipo entero, podemos manejar un cero como un false ycualquier valor diferente de cero como un true. Es común utilizar 0 para el falso y 1 para verdadero.

Especiales

Existe un tipo de dato especial llamado void, el cual se utiliza para indicar vacío. Este tipo de datos lo ocupamos para indicar que una función no regresa ningún valor.

2. Palabras reservadas

IntroducciónComo ya se vio anteriormente, la programación estructurada es un paradigma, el cual establece mediante el Teorema de la Programación estructurada que “para hacer cualquier programa sólo se necesitan tres estructuras: estructuras de bifurcación, estructuras de repetición (ciclos) y proceso”.

En este capítulo se va a estudiar la Programación estructurada, para ello utilizaremos el

Page 21: Lenguajes de programación_EDITADO

Lenguaje de programación C.

¿Qué es C?, C es un lenguaje de programación de alto nivel, esto quiere decir que utilizamos una sintaxis más fácil de comprender para las personas; su paradigma es estructurado y su propósito principal es el desarrollo de Sistemas Operativos, sin embargo, por sus características también se utiliza para el desarrollo de servidores, como por ejemplo, servidores web, servidores de bases de datos, servidores de correo o aplicaciones en general.

¿Por qué utilizar C?, C es el precursor de varios lenguajes de programación modernos dado que C les hereda mucha de su sintaxis, si usted aprende a programar en C/C++ le será más sencillo aprender otros lenguajes de programación.

Palabras reservadasSe les llama palabras reservadas al conjunto de palabras que tienen un significado especial para el compilador de C, estas sólo deben de ser usadas dentro del código según su función y no como identificadores como puede ser nombres de variables o funciones.

auto continue enum if short switch volatile break default extern int signed typedef

whilecase do float long sizeof unionchar double for register static unsignedconst else goto return struct void

3. Variables

Una variable es un espacio en memoria en cual se puede almacenar un dato, dependiendo del tipo de dato de la variable, será el tamaño en memoria de la variable y el rango de valores que podrá contener.

La forma de declarar una variable en C es la siguiente:

Tipo_de_dato identificador;

Donde Tipo_de_dato es el conjunto de valores que puede almacenar la variable e identificador es el nombre de la variable. En el tema Tipos de datos primitivos se verán a detalle todos los tipos de datos.

Para declarar un identificador válido se debe de tomar en cuenta lo siguiente:

Sólo se pueden usar caracteres del alfabeto inglés, por lo que la ñ y letras acentuadas no son permitidas.

Se pueden usar números siempre y cuando no empiece con uno, por ejemplo, x1 es unidentificador válido, 1x es un identificador no válido.

Page 22: Lenguajes de programación_EDITADO

No usar alguna palabra reservada del lenguaje C.No se permite usar espacios, pero se puede usar el guión (-) o el guión bajo (_).No se permite usar símbolos especiales como $, %,*/, etc.C es considerado un lenguaje sensible, esto quiere decir que C distingue entre mayúsculas y minúsculas, por lo que no es lo mismo A1 que a1.

Si se desea declarar varias variables de un solo tipo, se pueden separar con comas como se muestra a continuación.

Tipo_de_dato identificador1, identificador2,…, identificador_n;

Por ejemplo:

int a;float total;char texto, respuesta;

4. Constantes

Una constante a diferencia de una variable, es un valor que nunca cambia durante la ejecución de un programa. La forma de declarar una constante en C es mediante la palabra reservada const.

const tipo_dato identificador = valor;

Ejemplos:

const float PI=3.1416;const float IVA=0.15;

En donde float es el tipo de datos, PI es el identificador y 3.1416 es el valor que se asigna.

Entrada y salidaUn programa lo podemos visualizar como una caja negra, es decir, un modelo abstracto que está conformado por entradas, procesos y salidas.

Figura 1. Caja negra.

Donde la entrada es la información que entra para ser procesada y de este modo obtener una salida, en otras palabras, según la entrada es la salida que

Page 23: Lenguajes de programación_EDITADO

se obtiene. Un proceso puede tener varias entradas y varias salidas, además el proceso puede estar conformado por otras cajas negras.

A continuación se muestran 2 ejemplos sencillos para desplegar información en la pantalla (Salida) y leer información proporcionada a través del teclado (Entrada).

El siguiente ejemplo muestra el código para desplegar un mensaje en pantalla.

1. // mensaje.cpp2. #include <stdio.h>3. #include <conio.h>4. int main(void){5. printf(“Este es mi primer programa en C”);6. getch();7. return 0;8. }

Como se puede ver, para desplegar un mensaje en pantalla son necesarias varias líneas de código, cabe resaltar que la numeración del código no debe escribirse y se muestra sólo por cuestiones didácticas, con el fin de hacer referencias a las líneas del mismo.

La línea 1 es un comentario que no afecta al programa, esto lo sabemos por los dos slash(barras diagonales //), en este caso el mensaje es el nombre del programa.

La línea 2 y 3 son las librerías que vamos a utilizar en nuestro programa; una librería es un conjunto de funciones que alguien más ya programó y que pone a nuestra disposición, en nuestro caso estamos utilizando las librerías stdio.h y conio.h.

Para indicar que queremos utilizar una determinada librería tenemos que escribir:

#include <nombre_de_la_librería.h>

La línea 5 es la función main, a partir de esta línea empieza la ejecución de nuestro programa, todo lo que se encuentre dentro de las llaves { }, se le llama cuerpo de la función main; por el momento no hablaremos a detalle de la función main hasta llegar al tema de funciones.

En la línea 6 se utiliza la función printf para desplegar en pantalla el mensaje Este es mi primer programa en C, note que el mensaje se encuentra entre comillas dobles (“”). La función printf forma parte de la librería stdio.h.

En la línea 7 se utiliza la función getch para detener la ejecución del programa, esto lo hacemos debido a que al ejecutar nuestro programa se abre una ventana de MS-DOS, en la cual se despliega nuestro mensaje y después se cierra, es por eso que detenemos la ejecución del programa para poder

Page 24: Lenguajes de programación_EDITADO

visualizar la información. La función getch se encuentra declarada dentro de la librería conio.h.

En la línea 7 se utiliza return 0 para indicar que la función se ejecutó correctamente. Por el momento no detallaremos esto hasta llegar al tema de funciones.

Finalmente en la línea 8 cerramos la función main con la llave}.El resultado es:

Figura 2. Ejecución del código 1

Para cerrar la ventana presione la tecla ENTER.

El siguiente ejemplo muestra el código para leer un valor entero y desplegarlo en pantalla.

1. // leerValor.cpp2. #include <stdio.h>3. #include <conio.h>4. int main(void){5. int valor;6. printf(“Dame un valor entero = ”);7. scanf(“%d”,&valor);8. printf(“El valor entero que tecleaste es el %d ”,valor);9. getch();10. return 0;11. }

Como se puede ver, la mayor parte del código es similar al del ejemplo 1, menos las líneas que están sombreadas.

En la línea 5 se declara una variable de tipo entero (int) con el nombre valor y en dicha variable se almacenará el número dado por el usuario.

En la línea 7 se utiliza la función scanf para leer un dato recibido desde el teclado; entre las comillas dobles se encuentra un %d, el cual se llama máscara y le indica a la función scanf que el dato leído será interpretado como un número entero.

Después de cerrar las comillas dobles se pone una coma para separar los argumentos que

Page 25: Lenguajes de programación_EDITADO

recibe la función, en este caso dos: la máscara y la variable donde se almacenará el dato;después de la coma se pone la variable valor antecedida por un ampersand (&). La finalidad del ampersand es indicarle a la función scanf en que posición de memoria se encuentra la variable para que pueda almacenar el número que teclee el usuario.

En la línea 8 se vuelve a utilizar la función printf para desplegar el valor leído por la función scanf, sin embargo, como se puede ver, la función recibe dos argumentos: el primero es la cadena “El valor entero que tecleaste es el %d”, en donde %d es la máscara que está relacionada con el segundo argumento, la variable valor e indica que el número que está almacenado, será mostrado como un valor entero.

Cuando se despliega el mensaje en pantalla, %d es sustituido por el dato que estaba almacenado en la variable valor.

Figura 3. Ejecución del código 2

Secuencias de escapeUna secuencia de escape son caracteres especiales que son interpretados de cierta manera.

Para desplegar información en pantalla utilizamos la función printf y lo que se ponga entre las comillas dobles de su primer argumento es lo que se muestra, sin embargo, tal vez quisiéramos insertar un salto de línea o una diagonal o unas comillas, para lo cual lo cual se tendría que ocupar una secuencia de escape.

Secuencia de escape Descripción\a Alerta (timbre)\b Retroceso\n Nueva línea\r Retorno de carro\t Tabulador horizontal\v Tabulador vertical\0 Nulo\' Comilla sencilla\" Comilla doble\\ Diagonal invertida

5. Expresiones

Una expresión es aquella que al ser evaluada de acuerdo con las reglas de precedencia y asociación del lenguaje devuelve un valor ya sea numérico o lógico. Esta puede estar conformada por constantes, variables o funciones.

Page 26: Lenguajes de programación_EDITADO

Operadores y Operandos

Al igual que en matemáticas un operador es una operación que actúa sobre operandos (valores), por ejemplo, la adición (+), la resta (-), la multiplicación (*) y la división (/) son operadores; un operando es el argumento de un operador, el cual funge como entrada de este.

En programación se manejan 3 tipos de operadores: unarios, binarios y ternarios.

Operadores unarios

Los operadores unarios son llamados de esta forma dado que sólo operan con un operando.Algunos de los operadores más comunes son los que menciona la tabla siguiente.

Expresión Significadox++ Primero se usa el valor de x en una expresión y después incrementa

el valor de x en una unidad.++x Primero incrementa el valor de x en una unidad y después se usa el

valor de x en una expresión.x-- Primero se usa el valor de x en una expresión y después decrementa

el valor de x en una unidad.--x Primero decrementa el valor de x en una unidad y después se usa el

valor de x en una expresión.-x Invierte el signo del valor de x.! (expresión booleana) Invierte el valor booleano de la expresión.

Donde x es una variable de tipo numérico.

Ejemplo:

Valor de entrada Expresión Valor de salidam=1; printf(“El valor de m = %d\n”,++m); m=2primero lo incrementa y luego lo imprime

Operadores binarios

Los operadores binarios son los que operan con dos operandos, por ejemplo, la suma es un operador binario.

Operadores especiales

En C se implementa un operador ternario ya que opera con tres operandos, este también es conocido como operador condicional, su sintaxis es la siguiente:

Expresión_a_evaluar? expresión1 : expresión2

Page 27: Lenguajes de programación_EDITADO

Donde Expresión_a_evaluar será evaluada para obtener un valor booleano, si este es true ejecuta la expresión1, en caso de ser false, ejecuta la expresión2.

Ejemplo.

1. // operadorTernario.cpp2. #include <stdio.h>3. #include <conio.h>4. int main(void){5. printf(“El mayor es = %d”,5>6?5:6);6. getch();7. return 0;}

En la línea 5 se despliega en pantalla el mayor de 2 números, para esto se evalúa la expresión 5>6 y dado que 5 no es mayor que 6 el resultado que arroja es false, por lo que el 6 será el que sustituya la máscara %d.

En ejemplos anteriores se habían utilizado variables para las máscaras, pero puede ver también que es válido usar constantes e incluso expresiones.

Operadores aritméticos

Al igual que en aritmética en programación se tienen las operaciones elementales como la suma, resta, multiplicación y división, además de otras operaciones.

Suma

En programación se utiliza el símbolo + para representar la adición.

Ejemplo.

1. // suma.cpp2. #include <stdio.h>3. #include <conio.h>4. int main(void){5. printf(“La suma de 9+1 es = %d”,9+1);6. getch();7. return 0;}

Resta

En programación se utiliza el símbolo - para representar la operación de resta.

Ejemplo.

1. // resta.cpp

Page 28: Lenguajes de programación_EDITADO

2. #include <stdio.h>3. #include <conio.h>4. int main(void){5. printf(“La resta de 5-9 es = %d”,5-9);6. getch();7. return 0;}

Multiplicación

En programación se utiliza el símbolo * para representar la multiplicación.

Ejemplo.

1. // multiplicación.cpp2. #include <stdio.h>3. #include <conio.h>4. int main(void){5. printf(“La multiplicacion de 25*5 es = %d”,25*5);6. getch();7. return 0;}

División

En programación se utiliza el símbolo / para representar la división.

Ejemplo.

1. // division.cpp2. #include <stdio.h>3. #include <conio.h>4. int main(void){5. printf(“La division de 1/2 es = %.2f”,1.0/2);6. getch();7. return 0;}

Módulo

En programación se utiliza el símbolo % para representar el módulo. La operación del módulo es aquella en donde se obtiene como resultado el residuo de la división, para esto la división no genera decimales, a esto se le conoce como división entera.

Ejemplo.

1. // modulo.cpp2. #include <stdio.h>3. #include <conio.h>

Page 29: Lenguajes de programación_EDITADO

4. int main(void){5. printf(“El módulo de 5 mod 2 = %d”,5%2);6. getch();7. return 0;}

Potencia

En algunos lenguajes de programación se utiliza el símbolo de ^ para realizar la operación de potencia, sin embargo, C no proporciona esta operación, pero se puede construir o usar la función pow() que se encuentra declarada en la librería math.h.

Operadores relacionales

Los operadores relacionales son importantes en programación ya que nos permiten saber la relación que existe entre cierto valor y otro, si al saber que cierto número es mayor, menor, igual o diferente que otro número entonces podemos tomar “decisiones” de tal forma que nos permita controlar el control de flujo de un programa.

Mayor que

En programación se utiliza el símbolo > para representar la operación relacional mayor que.

Ejemplos.

x>y x>9 -1>y 5>15 x>y*2

Menor que

En programación se utiliza el símbolo < para representar la operación relacional menor que.

Ejemplos.

x<y x<9 -1<y 5<15 x<y*2

Mayor o igual que

En programación se utiliza el símbolo >= para representar la operación relacional mayor o igual que.

Ejemplos.

x>=y x>=9 -1>=y 5>=15 x>=y*2

Page 30: Lenguajes de programación_EDITADO

Menor o igual que

En programación se utiliza el símbolo <= para representar la operación relacional menor o igual que.

Ejemplos.

x<=y x<=9 -1<=y 5<=15 x<=y*2

Igual a

En programación se utiliza el símbolo == para representar la operación relacional igual que.

Ejemplos.

x==y x==9 -1==y 5==15 x==y*2c==’a’

Diferente de

En programación se utiliza el símbolo != para representar la operación relacional diferente de.

Ejemplos.

x!=y x!=9 -1!=y 5!=15 x!=y*2c!=’a’

Operadores lógicos o booleanos (AND, OR, NOT y XOR)

Los operadores lógicos son operaciones que se encuentran definidas en el álgebra relacional y son utilizados en programación para determinar el control de flujo de un programa mediante la combinación de valores lógicos para obtener un nuevo valor lógico, para ello se dispone de varios operadores, según la operación que se ocupe, es el resultado que se obtiene.

Tablas de verdad

Una tabla de verdad establece las diferentes combinaciones de valores y determina el resultado de cada combinación. En este caso se presentan las combinaciones de p y q con los diferentes operadores lógicos (AND, OR, NOT y XOR)

Operador AND (Y) Operador OR (O)

Page 31: Lenguajes de programación_EDITADO

p q p AND qV V VV F FF V FF F Fp q p OR qV V VV F VF V VF F F

Operador NOT (negación) Operador XOR (O exclusiva)p NOT pV FF Vp q p OR qV V FV F VF V VF F F

En C los operadores lógicos se representan de la siguiente manera:

Operador Lógico Símbolo en CAND &&OR ||NOT !

En el caso del operador XOR, el lenguaje C no lo implementa, pero se puede construir a partir de los básicos.

XOR = NOT(p AND q) AND (p OR q)XOR = ! (p && q) && (p || q)

La demostración sería la siguiente:p q p && q !( p && q) p||q !( p && q)&&(p||q) V V V F V FV F F V V VF V F V V VF F F V F FJerarquía de OperadoresLa jerarquía de operadores son las reglas que indican que operación se resuelve primero con la finalidad de evitar ambigüedades, como es el típico caso de x=5*4+1, no es lo mismo multiplicar 5 por 4 que nos da 20 y sumarle 1 que da como resultado 21, que a 4 sumarle 1 y después multiplicarlo por 5 que da como resultado 25.

Page 32: Lenguajes de programación_EDITADO

Precedencia de operadores

En la siguiente tabla se muestra la precedencia de los operadores, en donde los de arriba tienen una mayor precedencia con respecto a los de abajo.

Operador() []++ -- ! +-* / %+ -< <= >>=== !=&&||?:=

Reglas de evaluación de expresiones.

La forma en que se evalúan las expresiones es la misma que en matemáticas, es decir, de izquierda a derecha respetando las reglas de precedencia.

Ejemplo:

Tomando los siguientes valores:

x=5y=2z=8

Calcular: a=x+y*4/2-z

Tomando los siguientes valores:

x=5y=2

Determinar si la condición es verdadera o falsa: y*2>x-y&&x>y+3