La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tema 6: Elementos de programación adicionales

Presentaciones similares


Presentación del tema: "Tema 6: Elementos de programación adicionales"— Transcripción de la presentación:

1 Tema 6: Elementos de programación adicionales
Introducción Representación interna de los datos Conversiones entre tipos de datos Operadores de incremento y decremento Operadores lógicos Operadores de asignación El operador condicional Sentencia switch Sentencia do Sentencia for Sentencias break y continue Escuela Superior de Informática. UCLM

2 Escuela Superior de Informática. UCLM
Introducción En este capítulo veremos algunos conceptos adicionales de programación y constructores El capítulo 6 se centrará en: representación interna de los datos conversiones entre tipos de datos más operadores más sentencias de selección más sentencias de repetición Escuela Superior de Informática. UCLM

3 Representación interna de los datos
Ya hemos comentado anteriormente que cada trozo de información almacenado en un computador se representa como valores binarios ¿Qué se representa con la siguiente cadena binaria? No se puede contestar simplemente mirando la cadena de bits Debemos coger los valores binarios específicos y darles una interpretación Escuela Superior de Informática. UCLM

4 Representación de Enteros
Hay cuatro tipos de enteros en Java. Cada uno utiliza un número distinto de bits para almacenar el valor Cada uno de ellos tiene un bit para el signo. Si es 1, el número es negativo; si es 0, el número es positivo byte short int long s 7 bits s 15 bits s 31 bits s 63 bits Escuela Superior de Informática. UCLM

5 Escuela Superior de Informática. UCLM
Complemento a dos Los enteros se almacenan en formato complemento a dos con signo Un valor positivo es un número binario directamente Un valor negativo se representa invirtiendo todos los bits del correspondiente valor positivo y añadiendole 1 Para “descodificar” un valor negativo, se invierten todos los bits y se añade 1 Usando el complemento a dos el proceso de aritmética interna es más fácil Escuela Superior de Informática. UCLM

6 Escuela Superior de Informática. UCLM
Complemento a dos El número 25 se representa en8 bits (byte) como Para representar -25, primero se invierten todos los bits después se añade 1 Note que el bit del signo se invierte, indicando que el número es negativo Escuela Superior de Informática. UCLM

7 Escuela Superior de Informática. UCLM
Overflow y Underflow El almacenamiento de valores numéricos en un tamaño fijo puede conducir a problemas overflow y underflow Overflow ocurre cuando un número se hace demasiado grande para entrar en su espacio asignado Underflow ocurre cuando un número se hace demasiado pequeño para entrar en su espacio asignado Ver Overflow.java Escuela Superior de Informática. UCLM

8 Representación de valores en Punto Flotante
Un valor decimal (base 10) en punto flotante se puede definir con la siguiente ecuación: signo * mantisa * 10 exponente donde signo es 1 ó -1 mantisa es un valor positivo que representa los dígitos significativos del número exponente es un valor que indica cómo se coloca el punto decimal con respecto a la mantisa Escuela Superior de Informática. UCLM

9 Representación de valores en Punto Flotante
Por ejemplo, el número -843,977 se puede representar como -1 * * 10 -3 Los números en punto flotante se pueden representar en binario de la misma manera, excepto que la mantisa es un número binario y la base es 2 en vez de 10 signo * mantisa * 2 exponente Los valores en punto flotante se almacenan guardando cada uno de estos componentes en el espacio asignado Escuela Superior de Informática. UCLM

10 Representación de Caracteres
Como ya se vio anteriormente, los caracteres se representan de acuerdo al conjunto de caracteres Unicode El conjunto de caracteres asigna un único número a cada carácter representado Almacenar el carácter es simplemente almacenar la versión binaria del número que lo representa. Por ejemplo, el carácter 'z' tiene el valor Unicode 122, el cuál se representa con 16 bits como, Escuela Superior de Informática. UCLM

11 Representación de Caracteres
Al almacenarse como números, Java nos permite realizar algún procesamiento aritmético sobre los caracteres Por ejemplo, como 'A' se almacena con el valor Unicode 65, la sentencia char ch = 'A' + 5; almacenará el carácter 'F' en ch (valor Unicode 70) Esta relación puede ser útil a veces Escuela Superior de Informática. UCLM

12 Escuela Superior de Informática. UCLM
Conversiones Cada valor de datos y cada variable se asocia con un tipo de datos particular Algunas veces es necesario convertir un valor de un tipo determinado a otro No todas las conversiones son posibles. Por ejemplo, valores lógicos (booleanos) no se pueden convertir a cualquier otro tipo de dato y viceversa Incluso aunque una conversión sea posible, debemos tener cuidado de que no se pierda información en el proceso Escuela Superior de Informática. UCLM

13 Conversiones por promoción
Las conversiones por promoción (o ensanchamiento) son generalmente seguras porque van de un tipo de dato más pequeño a uno mayor Las conversiones por promoción son: Desde byte short char int long float A short, int, long, float, or double int, long, float, or double long, float, or double float or double double Escuela Superior de Informática. UCLM

14 Conversiones de estrechamiento
Las conversiones de estrechamiento son más peligrosas porque van normalmente de un espacio asignado al dato menor a uno mayor Las conversiones de contracción son: Desde byte short char int long float double A byte o char byte o short byte, short, o char byte, short, char, o int byte, short, char, int o long byte, short, char, int, long, o float Escuela Superior de Informática. UCLM

15 Realizando Conversiones
En Java, la conversión entre un tipo de dato a otro puede ocurrir de tres maneras: Conversión por asignación - cuando un valor de un tipo determinado se asigna a una variable de otro tipo Promoción aritmética - ocurre automáticamente cuando los operadores modifican los tipos de sus operandos para realizar correctamente la operación Moldes (Casting) - un operador fuerza a un valor a ser de otro tipo Escuela Superior de Informática. UCLM

16 Conversión por asignación
Por ejemplo, si dinero es una variable de tipo float y euros es una variable de tipo int (que almacena 82), entonces: dinero = euros; convierte el valor 82 a 82.0 cuando se almacena El valor en euros no se cambia realmente A través de la asignación sólo se permiten conversiones de ampliación La conversión por asignación se puede dar también cuando se pasan parámetros (lo cual es una forma de asignación) Escuela Superior de Informática. UCLM

17 Escuela Superior de Informática. UCLM
Promoción Aritmética Ciertos operadores requieren tipos consistentes para sus operandos Por ejemplo, si suma es una variable de tipo float y contador es una variable de tipo int , la sentencia resultado = suma / contador; convierte internamente el valor en contador a un float y después hace la división, produciendo un resultado en punto flotante El valor en contador no se cambia Escuela Superior de Informática. UCLM

18 Escuela Superior de Informática. UCLM
Moldeado (Casting) Un molde es un operador que se especifica por un nombre de tipo colocado entre paréntesis Se coloca al lado del valor a convertir En el siguiente ejemplo se trunca la parte fraccionaria de un valor en punto flotante en dinero y se almacena la porción entera en euros euros = (int) dinero; El valor en dinero no cambia Si una conversión es posible, puede hacerse a través de un molde (cast) Escuela Superior de Informática. UCLM

19 Escuela Superior de Informática. UCLM
Más Operadores Hemos visto algunos operadores de varios tipos: aritméticos y relacionales Hay muchos más operadores en Java que pueden usarse: operadores de incremento y de decremento operadores lógicos operadores de asignación el operador condicional Escuela Superior de Informática. UCLM

20 Operadores de incremento y decremento
El operador de incremento (++) añade uno a su operando entero o en punto flotante El operador de decremento (--) substrae uno La sentencia contador++; es equivalente a contador = contador + 1; Escuela Superior de Informática. UCLM

21 Operadores de incremento y decremento
Los operadores de incremento y de decremento se pueden aplicar como prefijos (antes de la variable) o como sufijos (después de la variable) Cuando se usan solos en una sentencia las formas prefijas y las sufijas son básicamente equivalentes: contador++; es equivalente a ++contador; Escuela Superior de Informática. UCLM

22 Operadores de incremento y decremento
Cuando se usan en una expresión más larga, las formas prefijas y sufijas tienen un efecto diferente En ambos casos la variable se incrementa (o decrementa) Pero el valor usado en la expresión larga depende de la forma Expresión contador++ ++contador contador-- --contador Operación añade 1 substrae 1 Valor de la expresión valor antiguo nuevo valor Escuela Superior de Informática. UCLM

23 Operadores de incremento y decremento
Si contador actualmente contiene 45, entonces total = contador++; asigna 45 a total y 46 a contador total = ++contador; asigna el valor 46 a total y a contador Escuela Superior de Informática. UCLM

24 Operadores de incremento y decremento
Si suma contiene 25, entonces la sentencia System.out.println (suma++ + " " + ++suma + " " + suma + " " + suma--); imprimirá: y suma contendrá 26 después de que se complete la línea Escuela Superior de Informática. UCLM

25 Escuela Superior de Informática. UCLM
Operadores lógicos Hay tres operadores lógicos en Java: Todos ellos se aplican sobre operandos lógicos produciendo resultados lógicos (booleanos) El NO es monario (un operando), pero el Y y el O lógicos son binarios (dos operandos) Operador ! && || Operación NO lógico Y lógico O lógico Escuela Superior de Informática. UCLM

26 Escuela Superior de Informática. UCLM
NO lógico El NO lógico se llama también negación lógica o complemento lógico Si a es verdadero, !a es falso; si a es falso, entonces !a es verdadero Las expresiones lógicas se pueden mostrar usando tablas de verdad a falso verdadero !a Escuela Superior de Informática. UCLM

27 Escuela Superior de Informática. UCLM
Y lógico La expresión a && b es verdadera si ambos, a y b, son verdaderos y falsa en cualquier otro caso Las tablas de verdad muestran todas las combinaciones posibles de todos los términos a falso verdadero b a && b Escuela Superior de Informática. UCLM

28 Escuela Superior de Informática. UCLM
O lógico La expresión a || b es verdadera si a o b o ambos son verdaderos y falsa en cualquier otro caso a falso verdadero b a || b Escuela Superior de Informática. UCLM

29 Escuela Superior de Informática. UCLM
Operadores lógicos Las condiciones en las sentencias de selección y bucles pueden usar operadores lógicos para formar expresiones más complejas if (total < MAX && !found) System.out.println ("Procesando..."); Los operadores lógicos tienen relaciones de precedencia entre ellos y con otros operadores Escuela Superior de Informática. UCLM

30 Escuela Superior de Informática. UCLM
Operadores lógicos Las expresiones completas se pueden evaluar usando tablas de verdad total < MAX falso verdadero found !found && !found Escuela Superior de Informática. UCLM

31 Operadores de asignación
A menudo hacemos una operación sobre una variable y almacenamos el resultado en esa misma variable Java tiene operadores de asignación que simplifican el proceso Por ejemplo, la sentencia num += contador; es equivalente a num = num + contador; Escuela Superior de Informática. UCLM

32 Operadores de asignación
Hay varios operadores de asignación, escritos como op=, tales como Operador += -= *= /= %= Ejemplo x += y x -= y x *= y x /= y x %= y Equivalente a x = x + y x = x - y x = x * y x = x / y x = x % y Escuela Superior de Informática. UCLM

33 Operadores de asignación
El lado derecho de un operador de asignación puede ser una expresión completa Toda la expresión del lado derecho se evalúa primero y después se combina con la operación adicional Por tanto, result /= (total-MIN) % num; es equivalente result = result / ((total-MIN) % num); Escuela Superior de Informática. UCLM

34 El operador condicional
Java tiene un operador condicional que evalúa una condición booleana (lógica) que determina cual de las dos expresiones se evaluará El resultado de la expresión elegida es el resultado del operador relacional completo Su sintaxis es: condición ? expresión1 : expresión2 Si la condición es verdadera, se evalúa expresión1; si es falsa, se evalúa expresión2 Escuela Superior de Informática. UCLM

35 El operador condicional
Esto es similar a una sentencia if-else, excepto que esto es una expresión que devuelve un valor Por ejemplo: Masgrande = (num1 > num2) ? num1 : num2; Si num1 es mayor que num2, entonces se asigna num1 Masgrande; en otro caso, se asigna num2 Masgrande El operador condicional es ternario, es decir, que requiere tres operandos Escuela Superior de Informática. UCLM

36 El operador condicional
Otro ejemplo: System.out.println (”Tu cambio es " + count + (count == 1) ? ”euro" : ”euros"); Si count es igual a 1, se imprime”euro”, en cualquier otro caso se imprimirá ”euros" Escuela Superior de Informática. UCLM

37 Otra sentencia de selección
Las sentencias if y the if-else son sentencias de selección, que permiten seleccionar que sentencia se realizará a continuación en función de una condición booleana Otro constructor de selección, llamado sentencia switch, ofrece otra forma de elegir la próxima acción La sentencia switch evalúa una expresión y compara el resultado con una serie de valores La ejecución se transfiera a la lista de sentencias asociada con el primer valor que coincide Escuela Superior de Informática. UCLM

38 Escuela Superior de Informática. UCLM
La sentencia switch La sintaxis de la sentencia switch es : switch (expresión) { case valor1: sentencia-lista1 case valor2: sentencia-lista2 case … } Escuela Superior de Informática. UCLM

39 Escuela Superior de Informática. UCLM
La sentencia switch La expresión se debe evaluar para dar un valor entero o carácter La sentencia break se usa normalmente para terminar la lista de sentencias de cada caso, lo que causa que el control salte a la siguiente sentencia después de la sentencia switch y continúe Se puede añadir un caso default al final de la lista de casos y se ejecutará si no se ha realizado ningún otro caso Véase Vowels.java Escuela Superior de Informática. UCLM

40 Más constructores de repetición
Además de los bucles while en Java hay otros dos constructores usados para realizar repeticiones la sentencia do la sentencia for Cada tipo de bucle tiene sus propias características particulares Se debe escoger que tipo de bucle usar en cada situación Escuela Superior de Informática. UCLM

41 Escuela Superior de Informática. UCLM
La sentencia do La sentencia do tiene la siguiente sintaxis: do sentencia while (condición); La sentencia se ejecutará hasta que la condición sea falsa Es similar a la sentencia while, excepto que su condición de terminación se evalúa después del cuerpo del bucle Escuela Superior de Informática. UCLM

42 Escuela Superior de Informática. UCLM
La sentencia do sentencia condición false true Escuela Superior de Informática. UCLM

43 Escuela Superior de Informática. UCLM
La sentencia do Ver Dice.java La diferencia clave entre un bucle do y un bucle while es que el cuerpo del bucle do se ejecuta al menos una vez Si la condición de un bucle while es falsa inicialmente, el cuerpo del bucle nunca se ejecuta Otra forma de decir esto es que un bucle while se ejecuta cero o más veces y un bucle do se ejecuta una o más veces Escuela Superior de Informática. UCLM

44 Escuela Superior de Informática. UCLM
La sentencia for La sintaxis de un bucle for es for (inicialización; condición; incremento) sentencia; lo que es equivalente a inicialización; while (condición) { incremento; } Escuela Superior de Informática. UCLM

45 Escuela Superior de Informática. UCLM
La sentencia for Al igual que en un bucle while, la condición de una sentencia for se comprueba antes de ejecutarse el cuerpo del bucle Por tanto, un bucle for se ejecuta cero o más veces Es apropiado para ser ejecutado un número específico de veces, conocido a priori La parte de inicialización sólo se realiza una vez, pero la parte de incremento se ejecuta en cada iteración Escuela Superior de Informática. UCLM

46 Escuela Superior de Informática. UCLM
La sentencia for sentencia condición false true inicialización incremento Escuela Superior de Informática. UCLM

47 Escuela Superior de Informática. UCLM
La sentencia for Ejemplos: for (int count=1; count < 75; count++) System.out.println (count); for (int num=5; num <= total; num *= 2) { sum += num; System.out.println (sum); } Ver Dice2.java Escuela Superior de Informática. UCLM

48 Escuela Superior de Informática. UCLM
La sentencia for Las tres expresiones de la cabecera de un bucle for son opcionales Si no se incluye la expresión de inicialización, la variable no se inicializa en ese punto y debe inicializarse en otro punto del programa Si no se incluye la condición, se considera siempre verdadera, y por tanto, estamos ante un bucle infinito Si no se incluye el incremento, no se realiza ninguna operación de incremento Siempre deben incluirse ambos puntos y comas (;) Escuela Superior de Informática. UCLM

49 Las sentencias break y continue
La sentencia break, la cual se usa con las sentencias switch, también puede usarse dentro de un bucle Cuando se ejecuta una sentencia break, el control salta a la sentencia después del bucle (la condición no se evalúa otra vez) Un constructor similar, la sentencia continue, puede ejecutarse también en un bucle Cuando se ejecuta la sentencia continue, el control salta al final del cuerpo del bucle y se evalúa la condición Escuela Superior de Informática. UCLM

50 Las sentencias break y continue
Éstas también se pueden usar para saltar a una línea determinada del programa usando una etiqueta Saltar de un punto a otro en un programa de manera no estructurada no es una buena práctica Por tanto, como regla, se debe evitar usar la sentencia break excepto cuando se necesite en sentencias switch, así como la sentencia continue Escuela Superior de Informática. UCLM


Descargar ppt "Tema 6: Elementos de programación adicionales"

Presentaciones similares


Anuncios Google