Download los lenguajes de programación son como un
Document related concepts
Transcript
1. QUE ES UN LENGUAJE DE PROGRAMACIÓN. Un lenguaje de programación es un lenguaje inventado para controlar una máquina, (normalmente, un ordenador). Hay muchísimos, de toda clase de tipos y características, inventados para facilitar el abordaje de distintos problemas, el mantenimiento del software, su reutilización, mejorar la productividad, etc. los lenguajes de programación son como un lenguaje cualquiera, pero simplificado y con ciertas normas, para poder transmitir nuestros deseos a la computadora. Para que un conjunto de circuitos desempeñen una tarea determinada y nos dé el resultado que nosotros esperamos, nuestro lenguaje deberá ser traducido en lenguaje binario cuyo alfabeto es el 0 y el 1, mediante las herramientas desarrolladas para llevar para llevar a cabo esta tarea, las cuales reciben el nombre de traductores. 2. CLASIFICACION DE LOS LENGUAJES DE PROGRAMACION Los lenguajes de programación se pueden clasificar según varios criterios. Se han encontrado doce en total: 1. Nivel de abstracción. 2. Propósito. 3. Evolución histórica. 4. Manera de ejecutarse. 5. Manera de abordar la tarea a realizar 6. Paradigma de programación. 7. Lugar de ejecución. 8. Concurrencia. 9. Interactividad. 10. Realización visual. 11. Determinismo y productividad. Hay que tener en cuenta también, que en la práctica, la mayoría de lenguajes no pueden ser puramente clasificados en una categoría, pues surgen incorporando ideas de otros lenguajes y de otras filosofías de programación, pero no importa al establecer las clasificaciones, pues el auténtico objetivo de las mismas es mostrar los rangos, las posibilidades y tipos de lenguajes que hay. 1. Nivel de abstracción. Según el nivel de abstracción, o sea, según el grado de cercanía a la máquina: LENGUAJES DE MAQUINA BAJO NIVEL NIVEL MEDIO ALTO NIVEL LENGUAJE MAQUINA: Es el único que entiende directamente la computadora, utiliza el alfabeto binario que consta de los dos únicos símbolos 0 y 1, denominados bits (abreviatura inglesa de dígitos binarios). Fue el primer lenguaje utilizado en la programación de computadoras, pero dejó de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes más fáciles de aprender y utilizar, que además reducen la posibilidad de cometer errores. EJEMPLO 0000 0001 1010 0001 01 A1 1000 1001 1001 1010 89 9A 0011 1010 1001 1100 3A 9C 0111 0100 0111 0000 74 70 1110 1001 0010 0000 E9 20 LENGUAJES DE BAJO NIVEL: Los lenguajes de bajo nivel son mas fáciles de utilizar que los lenguajes máquina, pero, al igual que ellos, dependen de la máquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotécnicos. Por ejemplo, nemotécnicos típicos de operaciones aritméticas son: en inglés, ADD, SUB, DIV, etc.; en español, SUM,RES,DIV,etc. Una instrucción típica de suma sería: ADD M, N, P Esta instrucción podría significar “sumar el número contenido en la posición de memoria M al número almacenado en la posición de memoria N y situar el resultado en la posición de memoria P”. Evidentemente es mucho más sencillo recordar la instrucción anterior con un nemotécnico que su equivalente en código máquina”. 0110 1001 1010 1011 Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la computadora en esto se diferencia esencialmente del lenguaje máquina, sino que requiere una fase de traducción al lenguaje máquina. El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje máquina se conoce como programa objeto, ya directamente entendible por la computadora. El traductor de programas fuente a objeto es un programa llamado ensamblador, existente en casi todos los computadores. Programa fuente en Programa Ensamblador Programa objeto ensamblador (assembly) (assembler) código máquina. en No se debe confundir el programa ensamblador, encargado de efectuar la traducción del programa fuente escrito a lenguaje máquina, con el lenguaje ensamblador, lenguaje de programación con una estructura y gramática definidas. Ventajas del lenguaje ensamblador. Los lenguajes ensambladores presentan la ventaja frente a los lenguajes máquina de su mayor facilidad de codificación y, en general, su velocidad de cálculo. Desventajas del lenguaje ensamblador. Los inconvenientes más notables de los lenguajes ensambladores son: Dependencia total de la máquina lo que impide la transportabilidad de los programas. El lenguaje ensamblador del PC es distinto del lenguaje ensamblador del Apple Macintosh. La formación de los programadores es más compleja que la correspondiente a los programadores de alto nivel, ya que no sólo las técnicas de programación, sino también el conocimiento del interior de la máquina. Hoy día los lenguajes ensambladores tienen sus aplicaciones mas reducidas en la programación de aplicaciones y se centran en aplicaciones de tiempo real, control de procesos y de dispositivos electrónicos, etc. LENGUAJES DE NIVEL MEDIO: Un lenguaje de programación de medio nivel se los lenguajes de alto nivel y los lenguajes de bajo nivel. encuentra entre Suelen ser clasificados de alto nivel, pero permiten ciertos manejos de bajo nivel. Son precisos para ciertas aplicaciones como la creación de sistemas operativos, ya que permiten un manejo abstracto (independiente de la máquina, a diferencia del lenguaje ensamblador), pero sin perder mucho del poder y eficiencia que tienen los lenguajes de bajo nivel. Una característica distintiva, por ejemplo, que convierte al lenguaje de programación C en un lenguaje de medio nivel y al lenguaje de programación Pascal en un lenguaje de alto nivel, es que en el primero es posible manejar las letras como si fueran números (en Pascal no), por el contrario, en Pascal es posible concatenar las cadenas de caracteres con el operador suma y copiarlas con la asignación (en C es el usuario el responsable de llamar a las funciones correspondientes). Una de las características más peculiares del lenguaje de programación C es el uso de apuntadores, los cuales son muy útiles en la implementación de algoritmos como listas enlazadas, tablas hash y algoritmos de búsqueda y ordenamiento que para otros lenguajes de programación (como en el lenguaje de programación Java, por ejemplo) suelen ser un poco más complicados de implementar. Lenguajes de alto nivel: Un lenguaje de alto nivel permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintácticas muy similares al inglés. Por ejemplo, en C se pueden usar palabras tales como: case, if, for, while, etc. para construir con ellas instrucciones como: if( numero > 0 ) printf( "El número es positivo" ) que traducido al castellano viene a decir que: si numero es mayor que cero, entonces, escribir por pantalla el mensaje: "El número es positivo". Ésta es la razón por la que a estos lenguajes se les considera de alto nivel, porque se pueden utilizar palabras de muy fácil comprensión para el programador. En contraposición, los lenguajes de bajo nivel son aquellos que están más cerca del "entendimiento" de la máquina. Otros lenguajes de alto nivel son: Ada, BASIC, COBOL, FORTRAN, Pascal, etc. Otra carácterística importante de los lenguajes de alto nivel es que, para la mayoría de las instrucciones de estos lenguajes, se necesitarían varias instrucciones en un lenguaje ensamblador para indicar lo mismo. De igual forma que, la mayoría de las instrucciones de un lenguaje ensamblador, también agrupa a varias instrucciones de un lenguaje máquina. 2 .Propósito. Según el propósito, es decir, el tipo de problemas a tratar con ellos: Lenguajes de propósito general: Aptos para todo tipo de tareas: Ejemplo: C. Lenguajes de propósito específico: Hechos para un objetivo muy concreto. Ejemplo: Csound (para crear ficheros de audio). Lenguajes de programación de sistemas: Diseñados para realizar sistemas operativos o drivers. Ejemplo: C. Lenguajes de script: Para realizar tareas varias de control y auxiliares. Antiguamente eran los llamados lenguajes de procesamiento por lotes (batch) o JCL (“Job Control Languages”). Se subdividen en varias clases (de shell, de GUI, de programación web, etc.). Ejemplos: bash (shell), mIRC script, JavaScript (programación web). 3 Evolución histórica. Con el paso del tiempo, se va incrementando el nivel de abstracción, pero en la práctica, los de una generación no terminan de sustituir a los de la anterior: Lenguajes de primera generación (1GL): Código máquina. Lenguajes de segunda generación (2GL): Lenguajes ensamblador. Lenguajes de tercera generación (3GL): La mayoría de los lenguajes modernos, diseñados para facilitar la programación a los humanos. Ejemplos: C, Java. Lenguajes de cuarta generación (4GL): Diseñados con un propósito concreto, o sea, para abordar un tipo concreto de problemas. Ejemplos:NATURAL, Mathematica. Lenguajes de quinta generación (5GL): La intención es que el programador establezca el qué problema ha de ser resuelto y las condiciones a reunir, y la máquina lo resuelve. Se usan en inteligencia artificial. Ejemplo: Prolog. 4. Manera de ejecutarse. Según la manera de ejecutarse: Lenguajes compilados: Un programa traductor traduce el código del programa (código fuente) en código máquina (código objeto). Otro programa, el enlazador, unirá los ficheros de código objeto del programa principal con los de las librerías para producir el programa ejecutable. Ejemplo: C. Lenguajes interpretados: Un programa (intérprete), ejecuta las instrucciones del programa de manera directa. Ejemplo: Lisp. También los hay mixtos, como Java, que primero pasan por una fase de compilación en la que el código fuente se transforma en “bytecode”, y este “bytecode” puede ser ejecutado luego (interpretado) en ordenadores con distintas arquitecturas (procesadores) que tengan todos instalados la misma“máquina virtual” Java. 5. Manera de abordar la tarea a realizar. Según la manera de abordar la tarea a realizar, pueden ser: Lenguajes imperativos: Indican cómo hay que hacer la tarea, es decir, expresan los pasos a realizar. Ejemplo: C. Lenguajes declarativos: Indican qué hay que hacer. Ejemplos: Lisp, Prolog. Otros ejemplos de lenguajes declarativos, pero que no son lenguajes de programación, son HTML (para describir páginas web) oSQL (para consultar bases de datos). 6. Paradigma de programación. El paradigma de programación es el estilo de programación empleado. Algunos lenguajes soportan varios paradigmas, y otros sólo uno. Se puede decir que históricamente han ido apareciendo para facilitar la tarea de programar según el tipo de problema a abordar, o para facilitar el mantenimiento del software, o por otra cuestión similar, por lo que todos corresponden a lenguajes de alto nivel (o nivel medio), estando los lenguajes ensambladores “atados” a la arquitectura de su procesador correspondiente. Los principales son: Lenguajes de programación procedural: Divide el problema en partes más pequeñas, que serán realizadas por subprogramas (subrutinas, funciones, procedimientos), que se llaman unas a otras para ser ejecutadas. Ejemplos: C, Pascal. Lenguajes de programación orientada a objetos: Crean un sistema de clases y objetos siguiendo el ejemplo del mundo real, en el que unos objetos realizan acciones y se comunican con otros objetos. Ejemplos:C++, Java. Lenguajes de programación funcional: La tarea se realiza evaluando funciones, (como en Matemáticas), de manera recursiva. Ejemplo: Lisp. Lenguajes de programación lógica: La tarea a realizar se expresa empleando lógica formal matemática. Expresa qué computar. Ejemplo: Prolog. Hay muchos paradigmas de programación: Programación programación reflexiva, programación orientada a procesos, etc. genérica, 7. Lugar de ejecución. En sistemas distribuidos, según dónde se ejecute: Lenguajes de servidor: Se ejecutan en el servidor. Ejemplo: PHP es el más utilizado en servidores web. Lenguajes de cliente: Se ejecutan en el cliente. Ejemplo: JavaScript en navegadores web. 8. Concurrencia. Según admitan o no concurrencia de procesos, esto es, la ejecución simultánea de varios procesos lanzados por el programa: Lenguajes concurrentes. Ejemplo: Ada. Lenguajes no concurrentes. Ejemplo: C 9. Interactividad. Según la interactividad del programa con el usuario u otros programas: Lenguajes orientados a sucesos: El flujo del programa es controlado por la interacción con el usuario o por mensajes de otros programas/sistema operativo, como editores de texto, interfaces gráficos de usuario (GUI) o kernels. Ejemplo: VisualBasic, lenguajes de programación declarativos. Lenguajes no orientados a sucesos: El flujo del programa no depende de sucesos exteriores, sino que se conoce de antemano, siendo los procesos batch el ejemplo más claro (actualizaciones de bases de datos, colas de impresión de documentos, etc.). Ejemplos: Lenguajes de programación imperativos. 10. Realización visual. Según la realización visual o no del programa: Lenguajes de programación visual: El programa se realiza moviendo bloques de construcción de programas (objetos visuales) en un interfaz adecuado para ello. No confundir con entornos de programación visual, como Microsoft Visual Studio y sus lenguajes de programación textuales (como Visual C#). Ejemplo: Mindscript. Lenguajes de programación textual: El código del programa se realiza escribiéndolo. Ejemplos: C, Java, Lisp. 11. Determinismo. Según se pueda predecir o no el siguiente estado del programa a partir del estado actual: Lenguajes deterministas. Ejemplos: Todos los anteriores. Lenguajes probabilísticos o no deterministas: Sirven para explorar grandes espacios de búsqueda, (como gramáticas), y en la investigación teórica de hipercomputación. Ejemplo: mutt (generador de texto aleatorio). 12. Productividad. Según se caractericen por tener virtudes útiles o productivas, u oscuras y enrevesadas: Lenguajes útiles o productivos: Sus virtudes en cuanto a eficiencia, sencillez, claridad, productividad, etc., motiva que sean utilizados en empresas, administraciones públicas y/o en la enseñanza. Ejemplos: Cualquier lenguaje de uso habitual (C, Java, C++, Lisp, Python, Ruby,). Lenguajes esotéricos o exóticos: Inventados con la intención de ser los más raros, oscuros, difíciles, simples y/o retorcidos de los lenguajes, para diversión y entretenimiento de frikis programadores. A veces exploran nuevas ideas en programación. Ejemplo: Brainfuck. 3. QUE ES EL LENGUAJE C + + C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido. Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma. Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT. Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear nuevos tipos que se comporten como tipos fundamentales. El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C. 4. CARACTERÍSTICAS DEL LENGUAJE C++ Las principales características del Lenguaje C son: Tiene un conjunto completo de instrucciones de control Permite la agrupación de instrucciones. Incluye el concepto de puntero (variable que contiene la dirección de otra variable). Los argumentos de las funciones se transfieren por su valor. E/S no forma parte del lenguaje, sino que se proporciona a través de una biblioteca de funciones. Permite la separación de un programa en módulos que admiten compilación independiente. Originalmente el Lenguaje C estuvo muy ligado al sistema operativo UNIX como se había mencionado antes que, en su mayor parte, está escrito en C. Más adelante se comenzó a utilizar en otros sistemas operativos para programar editores, compiladores, etc. Aunque se le conoce como un lenguaje de programación de sistemas, no se adapta mal al resto de aplicaciones. De hecho, hoy en día un alto porcentaje de software para ordenadores personales está escrito en Lenguaje C. Por ejemplo, el sistema operativo MSDOS. Algunas de las características más importantes que definen el lenguaje y que han permitido que sea tan popular, como lenguaje de programación son: Tamaño pequeño. Uso extensivo de llamadas a funciones. Comandos breves (poco tecleo). Lenguaje estructurado. Programación de bajo nivel (nivel bit) Implementación de apuntadores uso extensivo de apuntadores para la memoria, arreglos, estructuras y funciones Las diversas razones por la cual se ha convertido en un lenguaje de uso profesional son: El uso de constructores de alto nivel El poder manejar actividades de bajo-nivel. El generar programas eficientes. La posibilidad de poder ser compilado en una variedad de computadoras, con pocos cambios (portabilidad). Un punto en contra es que tiene una detección pobre de errores, lo cual en ocasiones es problemático para los principiantes 5. TIPOS DE DATOS C++ tiene los siguientes tipos fundamentales: Caracteres: char (también es un entero), wchar_t Enteros: short, int, long, long long Números en coma flotante: float, double, long double Booleanos: bool Vacío: void El modificador unsigned se puede aplicar a enteros para obtener números sin signo (por omisión los enteros contienen signo), con lo que se consigue un rango mayor de números naturales. Tamaños asociados Tamaños de tipos primitivos bajo i386 (GCC) Según la máquina y el compilador que se utilice los tipos primitivos pueden ocupar un determinado tamaño en memoria. La siguiente lista ilustra el número de bits que ocupan los distintos tipos primitivos en la arquitectura x86. Tipo Número de Bits char 8 short 16 int 32 float 32 64 Otras arquitecturas pueden double requerir distintos tamaños de tipos de datos primitivos. C++ no dice nada acerca de cuál es el número de bits en un byte, ni del tamaño de estos tipos; más bien, ofrece solamente las siguientes "garantías de tipos": Un tipo char tiene el tamaño mínimo en bytes asignable por la máquina, y todos los bits de este espacio deben ser "accesibles". El tamaño reconocido de char es de 1. Es decir, sizeof(char) siempre devuelve 1. Un tipo short tiene al menos el mismo tamaño que un tipo char. Un tipo long tiene al menos el doble tamaño en bytes que un tipo short. Un tipo int tiene un tamaño entre el de short y el de long, ambos inclusive, preferentemente el tamaño de un apuntador de memoria de la máquina. Un tipo unsigned tiene el mismo tamaño que su versión signed. Wchar_t Para la versión del estándar que se publicó en 1998, se decidió añadir el tipo de dato wchar_t, que permite el uso de caracteres UNICODE, a diferencia del tradicional char, que contempla simplemente al código de caracteres ASCII extendido. A su vez, se ha definido para la mayoría de las funciones y clases, tanto de C como de C++, una versión para trabajar con wchar_t, donde usualmente se prefija el carácter w al nombre de la función (en ocasiones el carácter es un infijo). Por ejemplo: strcpy - wstrcpy std::string - std::wstring std::cout - std::wcout Cabe resaltar que en C se define wchar_t como: typedef unsigned short wchar_t; Mientras que en C++ es en sí mismo un tipo de dato. La palabra reservada "void" La palabra reservada void define en C++ el concepto de no existencia o no atribución de un tipo en una variable o declaración. Como tal, puede ser usada para destacar que una función no recibe parámetros, como en: int funcion (void); Aunque la tendencia actual es la de no colocar la palabra "void". Además se utiliza para determinar que una función no retorna un valor, como en: void funcion (int parametro); Cabe destacar que void no es un tipo. Una función como la declarada anteriormente no puede retornar un valor por medio de return: la palabra clave va sola. No es posible una declaración del tipo: void t; //Está mal En este sentido, void se comporta de forma ligeramente diferente a como lo hace en C, especialmente en cuanto a su significado en declaraciones y prototipos de funciones. Sin embargo, la forma especial void * indica que el tipo de datos es un puntero. Por ejemplo: void *memoria; Indica que memoria es un puntero a alguna parte, donde se guarda información de algún tipo. El programador es responsable de definir estos "algún", eliminando toda ambigüedad. Una ventaja de la declaración "void *" es que puede representar a la vez varios tipos de datos, dependiendo de la operación de cast escogida. La memoria que hemos apuntado en alguna parte, en el ejemplo anterior, bien podría almacenar un entero, un flotante, una cadena de texto o un programa, o combinaciones de éstos. Es responsabilidad del programador recordar qué tipo de datos hay y garantizar el acceso adecuado. 6. ESTRUCTURA DE UN PROGRAMA EN C + +. Mediante el siguiente ejemplo de explicara la estructura base de cualquier programa en C++. 1 2 3 4 5 6 7 8 9 10 / / Mi primer programa en C + + # Include usando espacio de nombres std; int main () { cout << "Hello World!" ; vuelta 0; } A la izquierda, los números grises representan los números de línea - no son parte del programa, y se muestran aquí solo con fines informativos. / / Mi primer programa en C + + Se trata de una línea de comentario. Todas las líneas que comienzan con dos signos de barra ( / / ) se consideran comentarios y no tienen ningún efecto sobre el comportamiento del programa. El programador puede utilizar para incluir breves explicaciones u observaciones en el propio código fuente. En este caso, la línea es una breve descripción de lo que nuestro programa es. # Include Las líneas que comienzan con una almohadilla ( # ) son directivas para el preprocesador. No son líneas regulares de código con las expresiones, pero las indicaciones de preprocesador del compilador. En este caso la directiva # include indica al preprocesador para incluir el archivo iostream estándar. Este archivo específico (iostream) incluye las declaraciones de la norma básica de la biblioteca de entrada-salida en C + +, y se ha incluido debido a que su funcionalidad va a ser utilizado más adelante en el programa. using namespace std; Todos los elementos de la norma biblioteca de C + + se declaran dentro de lo que se llama un espacio de nombres. Así que para acceder a su funcionalidad declaramos con esta expresión que va a utilizar estas entidades. Esta línea es muy frecuente en C + + los programas que utilizan la biblioteca estándar. int main () Esta línea corresponde al comienzo de la definición de la función principal. La función principal es el punto por donde todos los programas C + + comienzan su ejecución, independientemente de su ubicación dentro del código fuente. No importa si hay otras funciones con otros nombres definidos antes o después de ella-las instrucciones contenidas en la definición de esta función serán siempre los primeros en ser ejecutados en cualquier programa C + +. Por esa misma razón, es esencial que todos los programas C + + tiene un principal de la función. La palabra principal es seguido en el código por un par de paréntesis ( () ). Esto es así porque se trata de una declaración de la función: en C + +, lo que diferencia a una declaración de la función de otros tipos de expresiones son estos paréntesis que siguen a su nombre. Opcionalmente, estos paréntesis, podrá adjuntar una lista de parámetros dentro de ellos. Inmediatamente después de estos paréntesis se encuentra el cuerpo de la función principal entre llaves ( {} ). Lo que está contenida dentro de estas llaves es lo que hace la función cuando se ejecuta. cout << "Hello World!"; Esta línea es una instrucción C + +. Una declaración es una expresión simple o compuesto que en realidad puede producir algún efecto. De hecho, esta instrucción realiza la única acción que genera un efecto visible en nuestro primer programa. cout es el nombre de la secuencia de salida estándar en C + +, y el significado de toda la declaración es insertar una secuencia de caracteres (en este caso el Hola Mundo) en el flujo de salida estándar ( cout , que usualmente corresponde a la pantalla). cout se declara en el iostream estándar de archivos en el estándar de espacio de nombres, así que por eso teníamos que incluir ese archivo específico y para declarar que íbamos para utilizar este espacio de nombres específico a principios de nuestro código. Observe que la sentencia termina con un punto y coma (; ). Este carácter se utiliza para marcar el final de la declaración y, de hecho, debe incluirse al final de todas las declaraciones de expresión en todos los programas C + + (uno de los errores de sintaxis más comunes es el hecho que se olvide de incluir un punto y coma después de una declaración). return 0; La sentencia return hace que la función principal a fin. retorno puede ser seguido por un código de retorno (en nuestro ejemplo es seguido por el código de retorno con un valor de cero). Un código de retorno de 0para el principal de la función se interpreta generalmente como el programa funcionó como se esperaba sin ningún error durante su ejecución. Esta es la forma más habitual para poner fin a un programa en C + + de la consola. El programa se ha estructurado en diferentes líneas con el fin de ser más legible, pero en C + +, no tenemos reglas estrictas sobre la manera de separar las instrucciones en diferentes líneas Despues de colocar main ( ) es decir nuestro indicador que comienza el programa, ya podemos comenzar con la programacion, ya que la programacion va en el cuerpo del programa, se debe indicar cual es el cuerpo, osea los limites. En un programa los limites son marcados por el simbolo “las llaves “, es decir { } { .... ....... } Por último tenemos las sentencias, es decir nuestra programación, lo que vayamos realizando en el cuerpo del programa, lo que va a hacer el programa al compilarlo y ejecutarlo. Todo eso va a ir en el cuerpo es decir DENTRO de los limites que establecimos ( las llaves principales del programa Variables y constantes DECLARACIÓN DE VARIABLES Y CONSTANTES Una variable, como su nombre lo indica, es un determinado objeto cuyo valor puede cambiar durante el proceso de una tarea específica. Contrario a una variable, una constante es un determinado objeto cuyo valor no puede ser alterado durante el proceso de una tarea específica. En C, C++ para declarar variables no existe una palabra especial, es decir, las variables se declarán escribiendo el tipo seguido de uno o más identificadores o nombres de variables. Por otro lado, para declarar constantes existe la palabra reservada const, así como la directiva #define. A continuación se muestran ejemplos de declaración de variables y constantes. Variables Constantes Constantes int a; const int a = 100; #define a 100 float b; const float b = 100; #define b 100 Nota: A diferencia de las constantes declaradas con la palabra const los símbolos definidos con #define no ocupan espacio en la memoria del código ejecutable resultante. El tipo de la variable o constante puede ser cualquiera de los listados en Tipos primitivos, o bien de un tipo definido por el usuario. Las constantes son usadas a menudo con un doble propósito, el primero es con el fin de hacer más legible el código del programa, es decir, si se tiene (por ejemplo) la constante numerica 3.1416 y esta representa al número pi, entonces podemos hacer declaraciones tales como: #define pi En este caso podremos usar la palabra pi en cualquier parte del 3.1416 programa y el compilador se encargará de cambiar dicho simbolo por 3.1416. o bien, const pi = 3.1416; En este otro caso podremos usar la palabra pi en cualquier parte del programa y el compilador se encargará de cambiar dicho símbolo por una referencia a la constante pi guardada en la memoria. 7. QUE ES UNA LIBRERÍA,CUALES ON LAS MASCOMUNES C++ no llega al nivel de simplicidad de su antecesor C, pero al igual que aquél, tampoco dispone de utilidades o funciones para entrada o salida implementadas en el propio lenguaje, de modo que estas y otras muchas, como manejo de cadenas de caracteres (strings), manejo de ficheros, funciones matemáticas Etc. son implementadas en forma de librerías externas. Una librería es un conjunto de recursos (algoritmos) prefabricados, que pueden ser utilizados por el programador para realizar determinadas operaciones. Las declaraciones de las funciones utilizadas en estas librerías, junto con algunas macros y constantes predefinidas que facilitan su utilización, se agrupan en ficheros de nombres conocidos que suelen encontrarse en sitios predefinidos. Por ejemplo, en los sistemas UNIX, en /usr/include. Estos ficheros se suelen llamar "de cabecera", porque es tradición utilizar las primeras líneas del programa para poner las directivas#include que los incluirá en el fuente durante la fase de preprocesado . Clases de librerías Los compiladores C++ incluyen un amplio repertorio de clases, funciones y macros que permiten realizar una amplia variedad de tareas, incluyendo entradas/salidas de bajo y alto nivel; manipulación de cadenas alfanuméricas y ficheros; control de procesos (incluyendo multiproceso); manejo de memoria; cálculos matemáticos y un largo etcétera. Este repertorio de recursos es denominado colectivamente como "Rutinas de librería"; "Librerías de ejecución" RTL ("Runtime Librarys") o simplemente "Librerías". Puede decirse que el lenguaje aislado (tal cual) no tiene prácticamente ninguna utilidad sin la concurrencia de estas utilidades. El Estándar C++ las clasifica según su utilidad: Soporte del lenguaje Diagnóstico Utilidades generales Cadenas alfanuméricas ("Strings") Localización Contenedores Iteradores Algoritmos Cálculo numérico Entrada/Salida Librería Estándar C++ Para poner un poco de orden, el Estándar C++ define la denominada Librería Estándar que debe acompañar a cada implementación del compilador que se adhiera al estándar. Es decir: la norma determina cuales son, como se llaman y como se utiliza este conjunto de algoritmos que deben acompañar (como mínimo) a cada implementación del compilador que quiera llamarse "Estándar". La última versión, ISO/IEC 14882 del año 1998, especifica que se compone de 32 ficheros de cabecera de nombres fijos y conocidos agrupados según la funcionalidad de los algoritmos. Son los siguientes: Ficheros Funcionalidad/funciones <algorithm> Parte de la STL que describe los algoritmos. <bitset> Parte de la STL relativa a contenedores tipo bitset . Set de valores booleanos. <complex> Parte de la librería numérica de la STL relativa a los complejos. <deque> Parte de la STL relativa a contenedores tipo deque; un tipo de colas: "Double-ended-queue". <exception> Parte de la librería de diagnóstico relativa al manejo de excepciones. <fstream> Flujos hacia/desde ficheros. <functional> Parte de la STL relativa a Objetos-función. <iomanip> Manipuladores. <ios> Supreclases para manejo de flujos de E/S. <iosfwd> Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estándar. Por ejemplo ostream. <iostream> Parte del a STL que contiene los algoritmos estándar de E/S. <istream> Algoritmos estándar de flujos de entrada. <iterator> Parte de la STL relacionada con iteradores , un tipo de puntero que permite utilizar los algoritmos de la Librería con las estructuras de datos representadas por los contenedores. <limits> Descripción de propiedades dependientes de la implementación que afectan a los tipos fundamentales. <list> Parte de la STL relativa a contenedores tipo list ; doblemente enlazadas <locale> Parte de la STL relativa a la internacionalización. <map> Parte de la STL relativa a contenedores tipo map. <memory> Utilidades relativas a la gestión de memoria, incluyendo asignadores y punteros inteligentes. <new> Manejo de memoria dinámica <numeric> Parte de la librería numérica de la STL relativa a operaciones numéricas. <ostream> Algoritmos estándar para los flujos de salida. <queue> Parte de la STL relativa a contenedores tipo queue; colas de objetos. <set> Parte de la STL relativa a contenedores tipo set. <sstream> Flujos hacia/desde cadenas alfanuméricas. <stack> Parte de la STL relativa a contenedores tipo stack; pilas de objetos. <stdexcept> Parte de la STL relativa a las clases de las que derivan los objetos lanzados por las excepciones ocasionadas en los algoritmos de la propia STL y otras expresiones. Estas clases son utilizadas para reportar errores detectados durante runtime. Los usuarios también pueden utilizar excepciones para reportar errores en sus propios programas. listas <streambuf> Parte de la STL relativa al Almacenamiento de flujos de E/S ("Stream buffers"). Define los tipos que controlan la capa de transporte. <string> Parte de la STL relativa a contenedores tipo string ; una generalización de las cadenas alfanuméricas para albergar cadenas de objetos. <typeinfo> Mecanismo de identificación de tipos en tiempo de ejecución. <utility> Parte de la STL que contiene elementos auxiliares como operadores y pares (pairs). <valarray> Parte de la librería numérica de la STL relativa a manejo de matrices numéricas () <vector> Parte de la STL relativa a los contenedores tipo vector; una generalización de las matrices unidimensionales C/C++. Es digno de mención que aunque generalmente las librerías no aportan ninguna característica al lenguaje (se supone que son utilidades auxiliares que no forman parte del lenguaje propiamente dicho), una pequeña porción de la Librería Estándar C++ sí aporta características que se consideran pertenecientes a este, de forma que deben estar presentes los ficheros de cabecera correspondientes si se desea usarlas. En concreto se refieren a los siguientes elementos: Operadores new, new, delete y delete. Clase type_info que corresponde al mecanismo RTTI de identificación de tipos en tiempo de ejecución representado por el operador typeid. Rutinas de inicio y terminación. Las excepciones estándar lanzadas por los algoritmos anteriores. 8. EJEMLPO DE CÓMO LEER, ESCRIBIR Y ASIGNAR DATOS EN C++ El siguiente ejemplo de cómo sumar tres números, se darán a conocer como se escribe, lee y asigna datos en c++. include<iostream.h> int main() { int uno; int dos; se declaran variables con su respectivo tipo de dato int tres; int s; cout<<"Numero 1"<<endl; cin>>uno; cout<<"Numero 2"<<endl; cin>>dos; cout<<"Numero 3"<<endl; cin>>tres; s=uno+dos+tres; cout<<"La suma es"<<s; return s; } Las instrucciones subrayadas con rojo “Muestran un mensaje al usuario (en pseudocódigo escribir)” Las instrucciones subrayadas con azul “Muestras como una variable guarda un valor digitado por el usuario (en pseudocódigo Lea)” Las instrucción subrayada con morado “Muestra como se le asigna a una variable en este S, la suma de los tres números Por último muestra el resultado Programa que calcula el mayor de 3 números enteros, mediante una función que devuelve un entero. //El mayor de 3 números. #include using std::cout; using std::cin; using std::endl; int mayor ( int,int,int); //prototipo de función int main() { int num1 = 0,num2 = 0,num3 = 0; cout << "*ENCUENTRA EL MAYOR DE 3 NUMEROS ENTEROS*" << endl; cout << "Ingrese el primero: " << endl; cin >> num1; cout << "Ingrese el segundo: " << endl; cin >> num2; cout << "Ingrese el tercero: " << endl; cin >> num3; cout << "El mayor es " << mayor(num1,num2,num3) << endl; //llamada de funcion con los argumentos. } int mayor ( int a , int b, int c) //función mayor { int may = a; if (b > may) may = b; if (c > may) may = c; return may; } Programa en c++ que al digitar el 12 lo muestre en letras. 1 2 3 4 5 6 7 8 9 10 11 12 # Include usando espacio de nombres std; int N; int main () { cout << "Digite el numero 12 " ; cin >> N cout << "el numero es el doce " ; retorno 0; } Ingresar 3 valores reales y: a) Si los dos primeros son mayores al tercero informar "MAYORES AL TERCERO". b)Si los tres son iguales informar "TRES IGUALES" c) Si alguno de los dos primeros es mejor al tercero informar "ALGUNO ES MENOR" #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int a, b, c; cout << "Introduzca el primer numero: " << endl; cin >> a; cout << "Introduzca el segundo numero: " << endl; cin >> b; cout << "Introduzca el tercer numero: " << endl; cin >> c; cout << " " << endl; if (a & b > c) { cout << a << " y " << b << " son mayores que " << c << endl; } else if (a == b && a == c) { cout << "Los tres numeros son iguales." << endl; } else if (a | b < c) { cout << a << " y/o " << b << " es/son menor que " << c << endl; } system("PAUSE>nul"); Algoritmo que dado un valor obtenga el 50% del mismo include<iostream.h> int main() { int n; int P cout<<"Cual es el numero "<<endl; cin>>n; P=n *0.50 cout<<"El 50 % es "<<P; return P; } 9. OPERADORES LÒGICOS ARITMETICOSY RELACIONALES C++ también incluye los operadores de conversión de tipos const_cast, static_cast, dynamic_cast y reinterpret_cast, que no están listados en la tabla por brevedad. El formato de estos operadores significa que su nivel de precedencia no es importante. La mayoría de los operadores presentes en C y C++ (con la excepción del operador coma y el operador flecha) también se encuentran disponibles en los lenguajes de programación Java, Perl, C# y PHP con la misma precedencia, asociatividad y semántica. Operadores Aritméticos Más unitario Suma Sintaxis +a a + b Preincremento ++a Postincremento a++ Asignación con suma Menos unitario (negación) Resta Asignación con resta Multiplicación Asignación con multiplicación División Asignación con división Módulo (Resto) a += b -a a - b a -= b a * b a *= b a / b a /= b a % b Asignación con módulo a %= b Operadores Lógicos Menor que Menor o igual que Mayor que Sintaxis a < b a <= b a > b Mayor o igual que a >= b No igual que a != b Igual que a == b Negación lógica !a AND lógico a && b OR lógico a || b Operadores Relacionales Desplazamiento a la izquierda Sintaxis a << b Asignación con desplazamiento a <<= b a la izquierda Desplazamiento a la derecha a >> b Asignación con desplazamiento a >>= b a la derecha AND binario Asignación con AND binario OR binario Asignación con OR binario XOR binario Asignación con XOR binario a & b a &= b a | b a |= b a ^ b a ^= b PRECEDENCIA DE OPERADORES La tabla siguiente es una lista que muestra el orden de precedencia y la asociatividad de todos los operadores del lenguaje de programación C++. Están listados de arriba a abajo por orden de precedencia descendente y con la misma descendencia en la misma celda (puede haber varias filas de operadores en la misma celda). Operador Descripción :: Resolución de ámbito (solo C++) ++ -- Post- incremento y decremento Llamada a función Elemento de vector Selección de elemento por referencia Selección de elemento con puntero Información de tipo en tiempo de ejecución (solo C++) () [] . -> typeid() const_cast dynamic_cast reinterpret_cast static_cast ++ -- Conversión de tipo (solo C++) Conversión de tipo (solo C++) Conversión de tipo (solo C++) Conversión de tipo (solo C++) delete delete[] Pre- incremento y decremento Suma y resta unitaria NOT lógico y NOT binario Conversión de tipo Indirección Dirección de Tamaño de Asignación dinámica de memoria (solo C++) Desasignación dinámica de memoria (solo C++) .* ->* Puntero a miembro (solo C++) */% Multiplicación, división y módulo +!~ (type) * & sizeof new new[] +- Suma y resta << >> Operaciones binarias de desplazamiento < <= > >= Operadores relaciones "menor que", "menor o igual que", "mayor que" y "mayor o igual que" == != Operadores relaciones "igual a" y "distinto de" & AND binario ^ XOR binario | OR binario && AND lógico || OR lógico c?t:f Operador ternario = += -= *= /= %= Asignaciones <<= >>= &= ^= |= throw Operador Throw (lanzamiento de excepciones, solo C++) , Coma