PLE:Unidad21

En esta unidad introducimos los elementos necesarios para la programación mediante el lenguaje C++. En primer lugar estudiaremos los tipos de datos elementales del lenguaje y elementos sintácticos que nos permitan la elaboración de programas sencillos.

En esta unidad veremos:


 * Tipos de datos.
 * Elementos del lenguaje C/C++: características, tipo de datos, nombres de tipo, constantes, identificadores, operadores, comentarios y palabras clave.
 * Entrada y salida por pantalla.
 * Sentencias de control de programa.
 * Sentencias de asignación.
 * Entrada y salida de flujo en C++
 * Funciones de C/C++

=Elementos sintácticos del lenguaje= Todo lenguaje de programación cuenta con una serie de elementos y de reglas de sintaxis que deben cumplir los programas. El inclumplimiento de algunas de las reglas de sintaxis conlleva mensajes de error del compilador.

Comentarios
Los comentarios son anotaciones llevadas a cabo por el programador, que son ignoradas por el compilaros. En C++ existen dos tipos de comentarios:

// Comentario de linea /* Comentario de bloque */

El comentario de linea abarca desde donde aparecen el símbolo barra duplicado (//) hasta el final de la linea. El comentario de bloque sin embargo puede abarcar varias lineas y viene delimitado por el inicio de comentario "/*" y el final del comentario "*/".

Palabras clave (keywords)
Las palabras clave reservadas por el compilador por que les otorga un significado y tiene un uso determinado en la sintaxis del programa fuente. En Cpp al igual que en otros lenguajes de programación no se permiten crear identificadores cuyo nombre coincida con una palabra clave. Las palabras clave de C++ son:

asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while

Identificadores
Los identificadores se emplean para nombrar variables, funciones y constantes. Un identificador esta formado por una secuencia de letras, digitos y el caracter subrayado o underscore '_'. No se permite el uso de ningún otro simbolo. Además los identificadores deben comenzar con una letra o un subrayado, bajo ningún concepto puede domenzar con un dígito. No se permiten espacios en blando ni otro tipo de simbolos. Debemos además tener en cuenta que C++ es sensible a mayúsculas y minúsculas, por tando los identificadores "Total" y "total" son distintos.

Tipos de datos
C++ dispone de un conjunto de datos elementales con los que puede trabajar. El compilador necesita conocer el tipo de datos con los que va a trabajar, por que dependiendo del tipo de dato se asignará el espacio de memoria necesario y se permitiran llevar a cabo operciones compatibles con el mismo. Los datos elementales de C++ son:

El valor del tamaño y rango depende de la arquitectura del sistema en el que trabajamos, por lo que se recomienda consultar la documentación del compilador con el que vamos a trabajar yaque puede presentar algunas variaciones.

Variables
La declaración de variables e C++ requiere especificar en primer lugar el tipo de dato seguido del indentificador empleado.

int a; float b;  char c;

Es posible declarar varias variables de un mismo tipo declarando los identificadores separados mediante coma.

int a, b, c;

Los tipos enteros (char, int) puede se declarados con signo o sin signo (signed, unsigned).

Alcance de las variables
Las variables en C++ pueden ser globales o locales. Se consideran variables globales, aquellas declaradas fuera del cuerpo de la función main y locales aquellas declaradas dentro del cuerpo de una función, incluída la función main. Las variables globales son visibles en todo el programa, incluyendo las funciones del mismo. Sin embargo las funciones locales solo son visibles desde dentro de la función en la que han sido declaradas.

Inicialización de variables
Cuando declaramos una variable, es possible asignarle un valor unicial mediante el uso del operador de asignación. En caso de que una variable no sea inicializada, su valor será indeterminado.

Ejemplo:

int a = 0;

Literales
Los valores literales se usan para expresar valores constantes, tales como números, caracteres o cadenas que serán asignados a variables o constantes o empleados dentro de una expresión.

pi = 3,1416;

Literales enteros
Un literal numérico entero se expresa tal como lo hacemos habitualmente, como un número formado por una secuencia de dígitos sin delimitador alguno.

486 11 -8

C++ nos permite expresar fácilmente litareles enteros en formato octal y hexadecimal. En el primer caso basta con añadir un 0 al inicio del literal correpondiente. Para expresar un entero en formato hexadecimal debemos agregar 0x (cero y x), en cuyo caso el valor viene expresado en hexadecimal.

115      // decimal 043      // octal 0x4a     // hexadecimal

Adicionalmente se puede agregar al literal en cuestión la letra 'u' y/o la letra 'l' para indicar respectivamente que el literal es un entero sin signo y/o un entero largo.

75        // int 75u       // unsigned int 75l       // long 75ul      // unsigned long

Literales reales
Para expresar valores reales basta utilizar el punto como separados de decimales y(o adicionalmente la letra 'e' para emplear notación científica.

3.14159   // 3.14159 1.6e-19    // 1.6 x 10^-19 5.0       // 5.0

Tal como ocurre con los literales enteros, podemos agregar las letras 'f' o 'l' para denotar que se trata de números representados en formato flotante, o largo o indistintamente. Por defecto la representación se hará como real de doble precisión (double).

3.14159L  // long double 6.02e23f  // float

Literales de tipo caracter y cadena
Para expresar caracteres se emplea la comilla simple ', que debe aparecer antes y despues del caracter. En el caso de las cadenas se emplea la comilla doble:

'a' "Hola"

Códigos de escape
Existe una serie de caracters especiales que son representados mediante la barra invertida '\' seguida de un caracter. se trata de caracteres no representable gráficamente que tiene un significado especial.

\n	Salto de línea \r	retorno de carro \t	tabulador \v	tabulador vertical \b	retroceso \f	salto de página \a	sonido de alerta \'	comilla simple (') \"	comilla doble(") \\	barra invertida (\) \0	caracter nulo \000	caracter cuyo código expresado en octal es 000 \x000	caracter cuyo código expresado en hexadecimal es 000

Ejemplos:

'\n' "Nombre\tApellidos\tDirección"

Literales booleanos
Solo se admiten dos literales de tipo booleano que son "true" y "false·.

Constantes (#define)
Una forma de definir variables es mediante la directiva "define", que nos permite crear constantes sin necesidad de almacenar el valor en memoria. Las constantes definidas de esta forma se sustituyen por el valor indicado por el preprocesador, antes de comenzar el proceso de compilación.

Ejemplo:


 * 1) define PI 3.14159265
 * 2) define SALTOLINEA '\n'

Constantes (const)
C++ nos permite definir constantes mediante el uso de la palabra reservada "const", que indica al compilador que el identificador que aparece a continuación es una constante.

const int ANCHO = 50; const char SALTOLINEA = '\t'; const int CODIGO = 21005;

Operadores
Los operadores como indican su nombre sirven para llevar a cabo operaciones con operandos (variables, constantes y literales) obteniendose como resultado expresiones. Las expresiones son evaluadas por el compilador obteniendose un resultado que dependerá de los operadores utilizados.

Asignación (=)
El operador de asignación permite asignar valores a una variable. En el lado de la izquierda aparece la variable y a la derecha una expresión cuyo resultados se asignará a la variable.

n = 1; x = n + 5;

Tambien es posible llevar a cabo una asignación multiple, en la que se asigna a varias variables un mismo valor empleando la siguiente sintaxis:

a = b = c = 20;

Operadores aritméticos
C++ soporta los operadores aritméticos que se muestran en la siguiente tabla:

El operador módulo nos devuelve el resto de la división entera.

n = 9 % 2;

En este caso el el valor asignado a la variable n es 1

Asignación compuesta(+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
C++ cuenta con un grupo de operadores de asignación que nos permite llevar a cabo una operación sobre una varible y asignarle el valor obtenido.

El operador += es equivalente a una suma seguida por una asignación:

Incremento y decremento (++, --)
Los operadores de incremento y decremento son operadores unarios que permiten incrementar o decrementar el valor de una variable en una unidad.

Las siguientes expresiones son equivalentes:

n++; n+=1; n=n+1;

Ambos operadores pueden cuentan con dos versiones pudiendo aparecer delante o detras de una variable, por lo que hablamos de preincremento o predecremento y de postincremento o postdecremento:

++a Preincremento --a Predecremento a++ Postincremento a-- Postdecremento

En el caso de los operadores de preincremento y predecremento, la operación de incremento o decremento se lleva a cabo antes de evaluar el resto de la expresión.

Ejemplo:

a = 1; b = ++a; //Incrementa a y asigna el valor 2 c = 2; d = --c; //Decrementa c y asigna el valor 1

Cuando empleamos lo orperadores de postincremento y postdecremento, la operación de incremento o decremento se aplican despues de evaluar el resto de la expresión.

Ejemplo:

a = 1; b = a++; //Asigna el valor 1 e incrementa a. c = 2; d = c--; //Asigna el valor 2 y decrementa c.

Operadores relacionales (
, !=, >, <, >=, <= )=== Los operadores relacionales se utilizan para llevar a cabo comparaciones entre expresiones de un mismo tipo. El resultado de aplicar un operador relaciones es de tipo lógico (booleano), tomando los valores true o false. La lista de operadores relacionales se muestra a continuación:

Ejemplos:

a > b c == d 4 != 3

Operadores lógicos ( !, &&, || )
Los operadores lógicos actuan sobre valores lógicos, como los obtenidos en una expresión relacional. El operador no (!) tiene como efecto devolver el valor contrario de una expresión. Si la expresión toma el valor true el operador devuelve false y viceversa

Ejemplo:

!(6 == 2) // devuelve true

El operador and (&&) permite combinar dos expresiones lógicas, devolviendo el valor true si ambas expresiones son ciertas, y false en el resto de los casos.

El operados or (||) es al igual que el anterior es un operador binario, pero devuelve como resultado el valor true si al menos una de las expresiones es cierta, y falso solo en el caso de que ambas sean falsas.

Ejemplo:

edad = 14; (edad >= 12) && (edad <= 16) // devuelve true ( true && true ). (edad <= 5) || (edad >= 65) // devuelve false ( false || false ).

Operador condicional ( ? )
El operador condicional es un operador terciario, que recibe tres operandos, el primero de los cuales es una expresión booleana que al ser evaluada como true provoca que el operador devuelva como valor el segundo operando, y si es evaluada como false entonces devuelve como valor el tercer operando.

La sintaxis es:

condición ? result1 : result2

Si la condición tome el valor true, entonces devuelve el valor result1, en caso contrario devuelve result2.

Precedencia de los operadores
Los operadores tienen un orden de precedencia, que nos indica el orden en el que deben ser evaluados. El orden de precedenca de los operadores se fija para evitar ambigüedades en la expresiones. En cualquier cado siempre podemos recurrir al uso de paréntesis para cambiar el orden de evaluación, o simplemente para mayor claridad.

Supngamos la expresión:

x = 3 + 2 * 4

¿Cómo debe ser evaluada?:

a = 3 + (2 * 4)   // resultado 11 a = (3 + 2) * 4   // resultado 20

En este caso, se interpreta el operador producto (*) debe aplicarse enates que la suma, por tanto la correcta es la primera.

El orden de precedencia de los operadores de C++ se muestra en la siguiente tabla:

La asociación nos indica el orden en el que se evaluan los operadores que tienen una misma prioridad.

por ejemplo:

2 - 2 - 2;

En esta caso se pueden evaluar como:

(2 - 2) - 2 // Dando como resultado -2, o 2 - (2 - 2)  // En este caso el resultado es 2

Según la tabla adjunta el operador '-' se evalua de izquierda a derecha, luego la correcta sería la primera solución mostrada.

=Ejercicios propuestos=


 * 1) Indicar qué identificador de variable es incorrecto y el motivo
 * 2) )	Cantidad Total
 * 3) )	cant_total
 * 4) )	cant/3
 * 5) )	cajas3
 * 6) . Indicar qué constante real es incorrecta y el motivo.
 * 7) )	-8.7e-2
 * 8) )	27.5
 * 9) )	8/2
 * 10) )	0.57
 * 11) .Indicar qué constante de carácter o cadena de caracteres es incorrecta y el motivo.
 * 12) )	'1'
 * 13) )	"5"
 * 14) )	' 10’
 * 15) )	3
 * 16) . Construir las expresiones algorítmicas correctas de las siguientes expresiones algebraicas, empleando el mínimo de paréntesis.
 * 17) $$\frac{a + b - 4}{2c}$$
 * 18) $$\frac{(a+b)}{c}-\frac {3t}{h+j}-7k$$
 * 19) $$\frac{3a + b}{c - \frac {d + 5e}{f + \frac {g}{2h}}}$$
 * 20) $$2\le(a+b)\le35$$
 * 21) .Calcular el valor de las siguientes expresiones aritméticas
 * 22) )	27 % 4 + 15 /4
 * 23) )	37 / 4 * 4 - 2
 * 24) )	 9 * 2 / 3 * 2 + 5 * 3
 * 25) )	(7 * 3 - 4 * 4)*2 / 4 * 2
 * 26) .Calcular el resultado de las siguientes expresiones lógicas:
 * 27) )	25 >= 7 && ! (7 <= 2)
 * 28) )	24 > 5 && 10 <= 10 || 10 <= 5
 * 29) )	(10 >= 15 || 23 == 13) && ! (8 == 8)
 * 30) )	(! (6 / 3 > 3) || 7 > 7) && (3 <= 9 / 2 || 2 + 3 <= 7 / 2)
 * 31) . Expresar el resultado de las siguientes expresiones (suponemos que se aplica concatenación con el operador '+':
 * 32) ) "López " + " Pérez"
 * 33) ) "Juan " + "  Rodríguez"
 * 34) ) 'H' < 'F' || '9' == '7'
 * 35) Escribir la expresión algorítmica de las siguientes expresiones:
 * 36) Evaluar si el contenido de la variable cantidad es par o impar.
 * 37) Evaluar si el contenido de la variable precio es igual o superior a 500 euros pero igual o  inferior a 1700
 * 38) Realiza los ejercicios de C++ con Clase (Tema 4)