operadores, expresiones y finf/t3.pdf · Índice 1. Ámbito de las variables 2. expresiones y...

Download OPERADORES, EXPRESIONES Y finf/T3.pdf · Índice 1. Ámbito de las variables 2. Expresiones y sentencias

Post on 01-Mar-2019

213 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Fundamentos de Informtica

Departamento de Ingeniera de Sistemas y Automtica. EII.

Universidad de Valladolid

T3 OPERADORES, EXPRESIONES

Y SENTENCIAS

ndice 1. mbito de las variables

2. Expresiones y sentencias

3. Operadores aritmticos

4. Operador de asignacin

5. Operador de inicializacin

6. Operadores relacionales de comparacin

7. Sentencias de inicializacin y asignacin

8. Sentencias de Control de Flujo Condicional (1)

9. Operadores relacionales lgicos

10. Sentencias de Control de Flujo Condicional (2)

11. Sentencias de Control de Flujo Iterativo (1)

12. Operadores incremento y decremento

13. Sentencias de Control de Flujo Iterativo (2)

14. Saltos incondicionales

15. Ejemplos

2

mbito de las variables El mbito o alcance en un programa de una variable es la parte del

programa donde la variable es accesible.

Bsicamente podemos dividir a las variables en funcin del mbito como

locales o globales.

Variables globales

Las variables globales son accesibles por todas las funciones desde su

declaracin hasta el final del fichero.

El uso de variables globales no es aconsejable a pesar de que parezca til:

Disminuye la legibilidad

Su uso puede producir efectos colaterales, al producirse alteraciones no

previstas de su valor en una parte del programa que afectan a su uso en

otra zona.

Dificultan la modularidad del cdigo.

Las variables y/o funciones globales se justifican cuando se necesitan en casi todas las funciones del programa (cin y cout, por ejemplo). Veremos ms adelante una

solucin de compromiso, los espacios de nombres o namespaces.

En este curso no se permitir el uso de variables globales. 3

mbito de las variables Ejemplo de uso de variables globales

Los mdulos de este programa (recuadros en verde) son interdependientes.

#include using namespace std; double z=1.; //se declara z como global. void funcion(); //Estudiaremos las funciones mas adelante int main() { cout

mbito de las variables

Variables locales

Las variables locales son accesibles desde su declaracin hasta el final

del bloque del fichero en el que han sido declaradas. Un bloque de cdigo viene determinado por una pareja de llaves {}.

Si el bloque donde se ha declarado la variable local contiene a su vez

otros bloques, tambin es accesible dentro de ellos.

En caso de que una variable aparezca declarada en varios niveles de

anidamiento dentro de un bloque, prevalece la declaracin del bloque ms

interno.

En cualquier caso, dada su escasa legibilidad, es una situacin que nunca

debera ocurrir en un programa bien diseado.

Las variables locales se destruyen cuando la ejecucin del programa

abandona el bloque donde han sido declaradas.

5

mbito de las variables

Ejemplo de uso de variables locales

#include using namespace std; int main() { double z=0.; cout

Expresiones y Sentencias

Las expresiones permiten combinar datos (variables o constantes) y operadores para calcular otros datos.

Ej:

y=a + b * 2 - 5.6;

variables

constantes literales

operadores

Un operador es un smbolo que realiza una determinada operacin sobre los datos (operandos) a los que afecta.

Expresiones y Sentencias

Una sentencia es un conjunto de lneas de cdigo

que permiten realizar una determinada accin.

(x+3)*2 // expresion

a>b && c

Operadores aritmticos

Realizan las conocidas operaciones aritmticas sobre sus operandos.

+ suma

- resta

/ divisin

* producto

% resto de la divisin entera (slo aplicable a datos enteros)

Por ejemplo: 23%5 es 3: equivale a 23-(23/5)*5

Operadores aritmticos

Cada operador genera un valor de determinado tipo a partir de los valores y tipos de los operandos.

El valor de la expresin se calcula aplicando reglas de precedencia a los operadores. Para la mayora de los operadores se asocia de izquierda a derecha.

y=a + b * 2 - 5.6;

*

+ - de izquierda a derecha

Por ltimo =

Operadores aritmticos

La precedencia por defecto puede ser alterada mediante el uso de parntesis, con la interpretacin habitual.

y=a + b * (2 x); Subexpresin () se evala primero

Se pueden anidar parntesis tanto como se necesite.

y=a * (((b +2)+3)+z);

Operadores aritmticos

C++ permite mezclar operandos de diferente tipo. Para evaluar la expresin, el lenguaje convierte automticamente todos los datos al tipo de mayor capacidad de almacenamiento presente en la expresin:

int b=2;

float y,x=2.1;

y=2*x + b;

Las conversiones de tipo se realizan siguiendo orden de precedencia de los operadores:

2*x Constante entera 2 promovida a float (valor 2*x 4.2) 2*x+b Variable b (entera) promovida a float (valor 2*x+b 6.2)

Operadores de asignacin El operador = es un operador sobrecargado: dependiendo del contexto acomete distintas operaciones. En la asignacin se utiliza para modificar el valor de las variables.

y = y+1.5;

Antes la variable y tiene un

valor (Ej: 2.0) 20000:

20008:

y 2.0

20000:

20008:

y 3.5 Inmediatamente despus

de la asignacin y tiene un

valor 3.5.

El operador de asignacin NO es equivalente a la igualdad matemtica: una sentencia como la anterior, y = y+1.5;, no tiene sentido en matemticas!!!

Operadores de asignacin

A la izquierda de la asignacin siempre tiene que haber una variable.

A la izquierda siempre tiene que haber una variable

y = (2+3.5)/3.1+a;

y = x;

y = 5.6;

A la derecha cualquier expresin vlida

2=5;

2=i+4; Error!!!

Operadores de asignacin

Produce un efecto colateral (la modificacin del valor de la variable a su izquierda).

Como cualquier otro operador, devuelve un valor (el del operando a su derecha).

x = a = 2; Sera correcto?

S, equivale a:

La asignacin es de los pocos operadores que se evalan de derecha a izquierda

Al final x y a contendrn el

valor 2.

(x = (a = 2));

Vale 2

Operadores de asignacin En C y C++ son muy utilizados los operadores de asignacin compuestos.

a = a OP b; puede escribirse abreviadamente como:

a OP= b ;

a += b; /* equivale : a = a + b */

a -= b; /* equivale : a = a - b */

a *= b; /* equivale : a = a * b */

a /= b; /* equivale : a = a / b */

a %= b; /* equivale : a = a % b */

Ntese que OP= debe escribirse con los dos smbolos seguidos:

+ = +=

Operador de inicializacin El smbolo = tambin se usa para inicializar las variables: int num=5;

No debemos confundir el operador = de asignacin con el de inicializacin: !hacen operaciones distintas!

int num=5; // Inicializacin por copia

es distinto que

int num; // Variable sin inicializar

num=5; // Asignacin del valor 5 a num

Para el caso de los tipos de datos bsicos (int, double, etc.), ambas secuencias de sentencias producen el mismo resultado, pero veremos ms adelante que en otros tipos de datos esto no es as.

De momento quedaros con la siguiente idea:

Se inicializa una nica vez; se asigna cuantas veces sea necesario.

Operador de inicializacin Para ilustrar la diferencia supongamos un problema en el cual tenemos un contenedor (disco duro) con cubos de color blanco y negro (un cubo es un bit).

Pedimos a una persona (la CPU) que construya una torre con cierto nmero de cubos (el tipo de dato) sobre una mesa (la memoria).

Las nicas operaciones permitidas son coger un cubo y depositarlo sobre la torre o coger el cubo superior de la torre y dejarlo en el contenedor.

Arranca el programa. La mesa est vaca. Tenemos 3 sentencias.

1 sentencia: inicializacin Formar una torre con 3 cubos blancos. El proceso consiste en buscar un cubo blanco, cogerlo, dejarlo sobre la mesa e ir formando la torre.

2 sentencia: asignacin Modificar la torre de tal forma que el cubo intermedio sea negro. El proceso en este caso consiste en quitar sucesivamente dos cubos blancos, coger un cubo negro del contenedor y dejarlo sobre la torre y coger un cubo blanco del contenedor y dejarlo sobre la torre.

3 sentencia: inicializacin Pedimos a la persona que forme una nueva torre idntica a la existente a su lado.

Las 2 torres actualmente sobre la mesa (memoria) son iguales, pero la CPU ha realizado operaciones diferentes para realizarlas debido a que la primera se form por asignacin (ya exista una torre ah) y la segunda por inicializacin.

Operadores relacionales de comparacin

Sirven para comparar dos variables o expresiones. La expresin compuesta puede resultar cierta o falsa.

> mayor que

>= mayor o igual que

< menor que

y; //z tomar el valor false

z=x!=y; //z tomar el valor true

Sentencias de inicializacin y asignacin

Las sentencias de declaracin introducen nuevas variables

en el mbito en que son declaradas. {

int x=0;

}

Las sentencias de a

Recommended

View more >