Fandom

Scratchpad

PLE:Unidad2

215,760pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

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 compilador. 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 comenzar con un dígito. No se permiten espacios en blanco 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:

NombreDescripción TamañoRango
charCaracter (entero).1bytesigned: -128 to 127 unsigned: 0 to 255
short (int)Entero corto.2bytessigned: -32768 to 32767 unsigned: 0 to 65535
intEntero.4bytessigned: -2147483648 to 2147483647 unsigned: 0 to 4294967295
long (int)Entero largo.4bytessigned: -2147483648 to 2147483647 unsigned: 0 to 4294967295
boolBooleano. Puede tomar dos valores.1bytetrue or false
floatReal simple precisión.4bytes3.4e +/- 38 (7 digits)
doubleReal doble precisión.8bytes1.7e +/- 308 (15 digits)
long doubleReal doble precisión largo.8bytes1.7e +/- 308 (15 digits)
wchar_tCaracter 2 bytes.2bytes1 caracter

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 ya que 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 variables 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:

#define PI 3.14159265
#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:

+suma
-resta
*multiplicación
/división
 %modulo

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:

expresiónequivalencia
x += y;x = x + y;
x -= y;x = x - y;
x /= y;x = x / y;
x *= y;x = x * y;

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 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 relacional es de tipo lógico (booleano), tomando los valores true o false. La lista de operadores relacionales se muestra a continuación:

== Igual
!= Distinto (no igual)
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que

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.

aba && b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

El operados or (||) es al igual que el anterior 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.

aba ||b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

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 toma el valor true, entonces devuelve el valor result1, en caso contrario devuelve result2.


Operadores a nivel de bits ( &, |, ^, ~ )

Estos operadores actuan a nivel de bits. En el operando resultado obtenemos el de la aplicación de la operación lógica sobre cada uno de los bits individuales

operadordescripción
&AND a nivel de bits
|OR a nivel de bits
^OR exclusivo a nivel de bits
~NOT a nivel de bits

Ejemplo:

#include <iostream>
using namespace std; 
int main() 
{
	unsigned short a = 0xFFFF; // = 1111 ... 
	unsigned short b = 0xAAAA; // = 1010 ... 
	cout << hex << ( a & b ) << endl; // muestra "aaaa", patrón 1010 ... 
}

Operadores de desplazamiento de bits

Las operaciones de desplazamiento provocan un desplazamiento a izquierda o derecha de los bits del primer operando tantas veces como la especificada en el segundo operando.

operadordescripción
<<Desplazamiento a Izquierda
>>Desplazamiento a derecha

Ejemplo:

#include <iostream>
using namespace std; 
int main() 
{
	cout << "5 por 2 es " << (5 << 1) << endl 
		<< "20 dividido por 4 es " << (20 >> 2) << endl; 
}

operador sizeof()

Este operador nos indica el número de bytes ocupados en memoria de un tipo o variable que le pasamos entre paréntesisss.

Ejemplo:

int a,b;
a = sizeof(char);
b = sizeof(a);

operador de conversión (casting)

El operador de conversión nos permite transformar un tipo de dato en otro de forma explícita. En C++ existen varios operadores de conversión que veremos mas adelante, pero la forma más sencilla es emplear el operador de conversión heredado del lenguaje C. La sintaxis consiste en anteponer el nombre del tipo al que queremos convertir entre parénteis delante de una expresión.

int n;
const float pi = 3.14;
n = (int) pi;

Otra forma de hacer esto mismo es mediante la notación funcional, como se muestra en el siguiente ejemplo:

i = int ( f );

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 precedencia de los operadores se fija para evitar ambigüedades en las expresiones. En cualquier caso siempre podemos recurrir al uso de paréntesis para cambiar el orden de evaluación, o simplemente para mayor claridad.

Supongamos 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 antes 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:

NivelOperadorDescripciónAsociación
1::ambitoIzq-a-Der
2() [] . -> ++ -- dynamic_cast static_cast reinterpret_cast const_cast typeid agrupamiento, acceso array, acceso miembros, postincremento, postdecremento, cast)Izq-a-Der
3++ -- ~ ! sizeof new delete preincremento, predecremento, complemento, negaciónDer-a-Izq
* &indirección y referencia (punteros)Der-a-Izq
+ -operador signo unarioDer-a-Izq
4(type)conversión tipoDer-a-Izq
5.* ->*acceso amiembrosIzq-a-Der
6* / %multiplicaciónIzq-a-Der
7+ -suma y restaIzq-a-Der
8<< >>desplazamientoIzq-a-Der
9< > <= >=relacionalIzq-a-Der
10== !=egualdadIzq-a-Der
11&bit ANDIzq-a-Der
12^bit XORIzq-a-Der
13|bit ORIzq-a-Der
14&&AND lógicoIzq-a-Der
15 || OR lógicoIzq-a-Der
16?:condicionalDer-a-Izq
17= *= /= %= += -= >>= <<= &= ^= !=asignaciónDer-a-Izq
18,comaIzq-a-Der


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
    1. ) Cantidad Total
    2. ) cant_total
    3. ) cant/3
    4. ) cajas3
  2. . Indicar qué constante real es incorrecta y el motivo.
    1. ) -8.7e-2
    2. ) 27.5
    3. ) 8/2
    4. ) 0.57
  3. .Indicar qué constante de carácter o cadena de caracteres es incorrecta y el motivo.
    1. ) '1'
    2. ) "5"
    3. ) ' 10’
    4. ) 3
  4. . Construir las expresiones algorítmicas correctas de las siguientes expresiones algebraicas, empleando el mínimo de paréntesis.
    1. \frac{a + b - 4}{2c}
    2. \frac{(a+b)}{c}-\frac {3t}{h+j}-7k
    3. \frac{3a + b}{c - \frac {d + 5e}{f + \frac {g}{2h}}}
    4. 2\le(a+b)\le35
  5. .Calcular el valor de las siguientes expresiones aritméticas
    1. ) 27 % 4 + 15 /4
    2. ) 37 / 4 * 4 - 2
    3. ) 9 * 2 / 3 * 2 + 5 * 3
    4. ) (7 * 3 - 4 * 4)*2 / 4 * 2
  6. .Calcular el resultado de las siguientes expresiones lógicas:
    1. ) 25 >= 7 &&  ! (7 <= 2)
    2. ) 24 > 5 && 10 <= 10 || 10 <= 5
    3. ) (10 >= 15 || 23 == 13) && ! (8 == 8)
    4. ) (! (6 / 3 > 3) || 7 > 7) && (3 <= 9 / 2 || 2 + 3 <= 7 / 2)
  7. . Muestra el resultado de evaluar las siguientes expresiones, considerando que los operandos asocian de I-D y de D-I. Contrasta los resultados.
    1. ) 2 + (-2) + (-2)
    2. ) 2 ^ 3 ^ 2 //Supongamos que ^ representa la potencia.
  8. Escribir las siguientes expresiones:
    1. Evaluar si el contenido de la variable cantidad es par o impar.
    2. Evaluar si el contenido de la variable precio es igual o superior a 500 euros pero igual o inferior a 1700
  9. Realiza los ejercicios de C++ con Clase (Tema 4)
  10. Lee dos numeros enteros y muestra la suma en pantalla
  11. Almacena en una variable de tipo char el valor más alto posible y en otra el mas bajo posible. A continuación le sumas 1 a ambas. Mostrar el valor de la variable antes y despues de la operqación de suma.
  12. Repite el ejercicio anterior para los tipos: short (int), unsigned int y long int.
  13. Lee una variable y muestra el resultado de multiplicar por 2, 4 y 8 usando desplazamiento de bits. Solución.
  14. Lee una variable y muestra el resultado de dividir por 2, 4 y 8 usando desplazamiento de bits. Solución.
  15. Lee dos numeros y muestra el resultado de de las operaciones &, | y ^ en formato decimal y hexadecimal.
  16. Lee un número y muestra su complemento en decimal y hexadecimal


Also on Fandom

Random wikia