Tipos de Datos Básicos 1.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Introducción al lenguaje C
PROGRAMACIÓN EN C.
Abstracción de Datos Arrays.
CLASE 3 SOFTWARE DEL MICROPROCESADOR
El lenguaje C Introducción.
Repaso para la construcción del intérprete 2012
Programación I Teoría I
Direcciones, Arreglos y Argumentos de Funciones
INFORMATICA I Arreglos 1 CLASE 17.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
Introducción al Lenguaje C (ANSI)
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Objetos de un programa Datos: Se denomina dato a toda aquella información característica de una entidad y que es susceptible de tratamiento en un programa.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Ingeniero Anyelo Quintero
27/07/14 Catedra de Programacion I 1 Programación I Operadores y Expresiones.
Herramientas para el acceso directo a memoria en C++
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Vectores en java.
Conceptos Básicos de Java
Programación.
Funciones en lenguaje C
Funciones: conceptos básicos
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.

POO Java Módulo 3 Elementos de programas Identificadores
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Estructuras de control
Programación en C para electrónica
UNIVERSIDAD DE MANAGUA I CUATRIMESTRE INTRODUCCION A LA PROGRAMACION
LENGUAJE “C” Programación.
Semana 5 Subprogramas..
Unidad III Elementos del lenguaje C++
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Tema 2: Los tipos de datos
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial
Clase 10: Estructuras de datos y arreglos.
Programa Vespertino de Automatización Equipos y Sistemas de Control Digital Lenguaje C Profesor: Felipe Páez Mejías D e p a r t a m e n t o d e I n g e.
COMPUTACIÓN I TEMA 6. Pasaje de parámetros por Referencia. Uso de apuntadores Prof. Mireya Morales.
Tipo de Datos Básicos.
© AutoresV1.1 Informática Ingeniería en Electrónica y Automática Industrial Datos en lenguaje C.
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Aplicación de estructuras de datos
Elementos básicos del lenguaje
Unidad II Introducción a la programación en C++
Informática Ingeniería en Electrónica y Automática Industrial
Programación en C para electrónicos
Programación orientada a objetos. El método main es el comportamiento por el cual comienzan todos los programas en Java, de la misma forma en la que C,
Elementos básicos del lenguaje
PROGRAMACIÓN MULTIMEDIA
IDENTIFICADORES Un identificador es un "nombre" que nos permite dirigirnos específicamente a una de las entidades propias del lenguaje, es decir, son los.
FUNDAMENTOS DE PROGRAMACIÓN
Términos algoritmo diseñar algoritmo implementar algoritmo
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
PRINCIPIOS DE PROGRAMACIÓN

Presente un cuestionario con los aspectos mas importantes sobre los
1.  En el Lenguaje C, los nombres usados para referirse a las variables, las constantes, las funciones y otros objetos definidos por el usuario se conocen.
Fundamentos de Programación
UNIDAD 4: Introducción a la Lógica Computacional Objetivo : Interpretar y aplicar adecuadamente los fundamentos básicos de la estructura y funcionamiento.
Lic. Carla Aguirre Montalvo
Programación de Computadores
Lenguaje de programación c
EL TIPO DE DATO LOGICO y constantes.
Informática Ingeniería en Electrónica y Automática Industrial
MEMORIA DINÁMICA.
Transcripción de la presentación:

Tipos de Datos Básicos 1

Tipos de Datos Básicos MODIFICADORES DE TIPO 2

unsigned int unsigned etc. Tipos de Datos Básicos Tratándose de enteros, se pueden utilizar las palabras unsigned, short o long sin el identificador int, p.e.: unsigned int unsigned etc. Se pueden mezclar caracteres y enteros en expresiones aritméticas: int n; char c; n = 10 * n + c - ‘0’; Todos estos tipos de datos son llamados colectivamente “tipos aritméticos” Los tipos enteros y el tipo char se denominan “tipos integrales”. 3

Tipos de Datos Básicos Se dispone de un operador sizeof que devuelve en bytes el tamaño del tipo de datos o expresión que se le pasa como parámetro. Su sintaxis es: sizeof( nombre_de_tipo ) sizeof expresión Ejemplo: main() { printf( “El tamaño de short es %d bytes\n”, sizeof(short) ); } 4

Variables Una variable se corresponde con una cierta región de memoria que puede almacenar cualquier valor de entre un cierto conjunto de valores denominado rango. La región de memoria que representa una variable se asocia a un identificador al que se hace referencia en el programa. El rango de valores de una variable depende del tipo de la variable. 5

Variables: Declaración y Definición La declaración de una variable especifica su nombre y tipo, pero no reserva necesariamente espacio de almacenamiento. La definición de una variable especifica su nombre y tipo y reserva espacio para su almacenamiento. Sintaxis de las variables. tipo lista variables clase de almacenamiento Todas las variables deben ser declaradas antes de que aparezcan en sentencias ejecutables. 6

Variables: Declaración y Definición Sintaxis del tipo modificador modificador tipo modo de tipo base acceso El tipo especifica el tipo de datos de cada una de las variables de la lista subsiguiente. En caso de no especificar nada se considera que el tipo es int. 7

Variables: Declaración y Definición La lista de variables consiste en la secuencia de los correspondientes identificadores (y opcionalmente inicializaciones) separados por comas. identificador variable inicialización lista variables , 8

Variables: Declaración y Definición En la definición de una variable se puede especificar un valor inicial en forma de una expresión. = expresión inicializar variable 9

Variables: Modos de Acceso Se definen dos modificadores de acceso para controlar la forma en que se accede a las variables const: una variable así declarada no se puede modificar durante la ejecución del programa; únicamente puede dársele un valor inicial en su definición. const unsigned int y = 3; volatile: Se utiliza para indicar al compilador que el valor de una variable puede cambiar por medios no especificados explícitamente en el programa. 10

Variables: Clases de Almacenamiento En “C” hay dos formas de caracterizar las variables: tipo de datos y clase de almacenamiento. El tipo de datos se refiere a la información representada por una variable. 12

Variables: Clases de Almacenamiento La clase de almacenamiento se refiere al ámbito (reglas de alcance) y permanencia de la variable dentro del programa. La clase de almacenamiento especifica la forma en que se deben almacenar las variables, siendo los posibles especificadores: extern, static, auto, register 13

Variables: Reglas de Alcance El lugar donde se declaran las variables condiciona la forma en que pueden ser utilizadas por otras partes del programa.

Variables: Reglas de Alcance Existen tres partes donde se puede declarar una variable: Fuera de todas las funciones incluida la función main(); este tipo de variable es global y se puede utilizar en cualquier parte del programa. Dentro de las funciones; estas variables se denominan locales y sólo se pueden utilizar dentro del bloque en que se declaran. Como parámetros formales de funciones; se utilizan para recibir argumentos cuando se invoca a una función. 15

Variables: clase de almacenamiento extern El lenguaje permite que se enlacen distintos módulos de un programa después de haber sido compilados independientemente. Como consecuencia de lo anterior tiene que existir alguna forma de indicar cuáles son las variables globales de un programa para que exista una sola copia de las mismas. La solución es el especificador extern, que indica que las variables a las que acompaña se definen en algún otro lugar. 17

Variables: clase de almacenamiento extern En lo que se refiere a las variables que se pueden compartir entre ficheros (variables externas), hay que distinguir entre una declaración que es también definición y una declaración externa. Una variable externa es una variable global, que se define con una declaración normal que aparece fuera, y normalmente antes, de las funciones que la utilizan.

Variables: clase de almacenamiento extern La definición de una variable externa es una declaración, cuyo ámbito (como declaración) se limita al fichero en que aparece, que indica al compilador que tiene que reservar espacio de almacenamiento Debe existir una sola definición de cada variable externa entre todos los ficheros que constituyen el programa.

Variables: clase de almacenamiento extern La declaración externa de una variable externa es una declaración, cuyo ámbito se limita al bloque o al fichero en que se incluye, que indica al compilador que no tiene que reservar espacio de almacenamiento. Una declaración externa de una variable empieza con el especificador extern y su tipo tiene que coincidir con el indicado en su definición (que se encuentra en otro fichero). Sólo se puede inicializar una variable externa en su definición: fichero1 fichero2 int y = 0; extern int y; se refieren a la misma variable 20

Variables: clase de almacenamiento static Las variables de clase static tienen almacenamiento permanente pero alcance restringido. Cuando se define como static una variable interna se genera almacenamiento permanente para ella de tal forma que mantiene su valor entre ejecuciones sucesivas del bloque en que está definida, y su ámbito se limita a este bloque. Cuando se define como static una variable externa se genera almacenamiento permanente para ella y su ámbito se limita al fichero en que está definida. 21

Variables: clase de almacenamiento static Si no existiesen variables locales estáticas se tendrían que utilizar variables globales, con los efectos secundarios que esto comporta. Ejemplo fichero1 fichero2 fichero3 static int i = 0; extern int i; int i=0; La variable i de fichero1 no es la variable a la que se hace referencia en fichero2 La variable i de fichero2 y fichero3 sí es la misma 22

Variables: clase de almacenamiento auto Las variables (locales) automáticas se crean cada vez que se entra en el bloque en el que han sido definidas y desaparecen cuando se sale de él No conservan su valor de una ejecución del bloque a la siguiente, y sólo son accesibles en el interior del bloque en el que se definen. Si en la definición de una variable local no se especifica la clase de almacenamiento, por defecto se toma por auto. 23

Variables: clase de almacenamiento register Cuando a una variable se añade el especificador register se indica al compilador que la almacene en algún registro de la CPU. El especificador register sólo se puede aplicar a variables automáticas, o a los parámetros formales de una función. Cuando las variables declaradas como register no se pueden almacenar en registros de la CPU se toman por auto y se almacenan en memoria. Dado que el acceso a variables de este tipo es muy rápido son ideales para el control de bucles 24

Variables: Generalidades Las variables estáticas y externas se inicializan una única vez al comienzo del programa; si no se inicializan explícitamente se inicializan a 0. Las variables automáticas y de clase register se inicializan cada vez que se ejecuta el bloque donde están definidas. Si la inicialización no es explícita, se inicializan con valores indefinidos (basura) 25

ELEMENTOS SINTÁCTICOS BÁSICOS Constantes y Strings Las constantes son valores fijos que no pueden alterarse durante la ejecución del programa. Las constantes de tipo numérico deben cumplir las normas siguientes: no pueden incluir comas ni espacios en blanco, pueden ir precedidas del signo ( - ), no pueden exceder de un límite máximo y mínimo especificado. Las constantes enteras pueden escribirse en decimal, en octal (comienzan por 0) y en hexadecimal (comienzan por 0x o 0X)

ELEMENTOS SINTÁCTICOS BÁSICOS: Constantes y Strings Una constante entera sin signo se identifica añadiéndole la letra U o u al final. Una constante entera larga se identifica añadiéndole la letra L o l al final. Una constante real es un número en base 10 que contiene un punto decimal y/o un exponente entero (separado de la mantisa con una E o una e) y opcionalmente un signo. Se considera de doble precisión si no termina por la letra F o f

ELEMENTOS SINTÁCTICOS BÁSICOS: Constantes y Strings Una constante carácter se escribe como un solo carácter encerrado entre comillas simples. Una constante cadena de caracteres se escribe como una secuencia de cualquier número de caracteres consecutivos, encerrada entre comillas dobles.

Operadores Aritméticos: Aditivos Los operadores aritméticos aditivos: + (suma) - (resta) son binarios, por lo que requieren dos operandos. Los operandos pueden ser expresiones de cualquier tipo de datos básico: char int short long unsigned float double También puede tener sentido sumar o restar una expresión de cualquier tipo integral (char, int, short, long, unsigned) a un puntero a un elemento de un array (un uso de la llamada “aritmética de punteros”) 26

Operadores Aritméticos: Multiplicativos Los operadores aritméticos multiplicativos (siempre binarios) son los siguientes: * (producto) / (cociente) % (resto de división entera) Los operadores * y / pueden trabajar sobre expresiones de cualquier tipo de datos básico. 27

Operadores Aritméticos: Multiplicativos Cuando / se aplica a dos operandos integrales se trunca la parte fraccionaria del resultado. Ejemplo: 7/2 = 3; 7./3 = 2.33…. Los operandos de % deben ser expresiones de tipo integral (el segundo, no nulo). En general el resultado siempre lleva el signo del numerador. Ejemplos: 7%3 = 1; (-7)%3 = -1; 7%(-3) = 1; (-7)%(-3) = -1 28

Operadores Aritméticos: Cambio de Signo Los únicos operadores aritméticos unarios (que requieren un solo operando) son - y + (el segundo fue nuevo en el estándar ANSI). El - produce el cambio de signo del operando. El operando puede ser una expresión de cualquier tipo de datos básico. 29

Operadores Relacionales Existen 4 operadores relacionales, todos ellos binarios: Operador Significado < menor que <= menor o igual que > mayor que >= mayor o igual que Se pueden aplicar a expresiones de cualquier tipo de datos básico. 30

Operadores Relacionales El resultado de estos operadores es 0 cuando la relación especificada es falsa y 1 cuando es cierta (el tipo del resultado es int, en “C” no hay booleano). También es posible comparar punteros, dependiendo el resultado de la posición relativa de los objetos apuntados en el espacio de direcciones del programa. 31

Operadores Relacionales y Lógicos Los operadores de igualdad también son binarios: Operador Significado == igual que != distinto de Los operadores lógicos son binarios; también se llaman conectivas lógicas: && y lógica || o lógica 32

Operadores Relacionales y Lógicos Los operandos no tienen por qué ser del mismo tipo, y pueden ser expresiones de cualquier tipo de datos básico. El único operador lógico unario es la negación lógica !. Devuelve 1 si el operando es 0 y 0 si el operando es distinto de 0. 33

Operadores de Manejo de Bits Como el lenguaje también fue diseñado para sustituir al lenguaje ensamblador en la mayoría de las tareas de programación, dispone de operadores especiales para manejar bits, siendo éstos: Operador Significado Operador Significado & and bit a bit | or bit a bit ^ xor bit a bit << despl. a la izda. >> desp. a la drcha. ~ complemento a 1 Se pueden aplicar a cualquier operando de tipo integral 34

Operadores de Manejo de Bits Los operadores de desplazamiento de bits desplazan los bits del operando izquierdo tantas posiciones como indique el operando derecho. n << 2 Cuando el desplazamiento es hacia la izquierda se añaden 0`s por la derecha y, en general, viceversa. 35

Operadores de Manejo de Bits: Advertencia Dado que la precedencia de los operadores de manejo de bits es menor que la de los operadores de igualdad, las expresiones de comprobación de bits deben encerrarse entre paréntesis: x & mascara == 0 <#> (x & mascara) == 0 36

Operadores y Expresiones de Asignación Los operadores de asignación son todos binarios y son: = += -= *= /= %= aritméticos >>= <<= &= ^= |= manejo de bits El valor del operando derecho se convierte al tipo del operando izquierdo. Los operadores de asignación requieren que el operando izquierdo sea una referencia a una zona de almacenamiento (un lvalue) y no una expresión cualquiera. Expresiones de asignación del tipo e1 op= e2 son abreviaturas: e1 op= e2 e1 = e1 op ( e2 ) 38

Operadores de Incremento y Decremento El lenguaje dispone de dos operadores unarios para incrementar y decrementar variables de cualquier tipo de datos básico y punteros: Operador Significado ++ incremento -- decremento Estos operadores incrementan o decrementan en una la variable a la que están asociados. Se pueden aplicar como prefijo o como sufijo: ++n --nn prefijos (incrementan antes de usar) n++ n-- sufijos (incrementan después de usar) 37

Expresiones Condicionales El lenguaje dispone de un operador condicional ( ?: ) para evaluar alternativas. Su sintaxis es: expresión1 ? expresión2 : expresión3 Se evalúa expresión1 y si es distinta de 0 (true) el resultado de la expresión condicional es expresión2. Si el resultado de expresión1 es 0 (false) el resultado es expresión3. Suelen aparecer en la parte derecha de una sentencia de asignación simple. Se asigna al identificador de la izquierda el valor de la expresión condicional. min = ( f < g ) ? f : g; 39

Precedencia de operadores 40

Precedencia de operadores 41

Precedencia de operadores Los operadores situados en la misma fila tienen la misma precedencia. Las filas están ordenadas de mayor a menor precedencia. A igualdad de precedencia los operadores se agrupan de acuerdo a su asociatividad. 42

double, float , long, int, short, char Conversiones de tipos Cuando se mezclan operandos de diferentes tipos se produce una conversión. Las reglas son: En cualquier operación en que se mezclan operandos de diferentes tipos se produce una conversión del tipo inferior al tipo superior antes de efectuarse la operación, siendo este último el tipo del resultado. El rango o categoría de tipos de mayor a menor es: double, float , long, int, short, char En una sentencia de asignación, el resultado final de los cálculos se reconvierte al tipo de la variable a la que van a ser asignados. 43

Conversiones de Tipos: Operador de Moldeado El operador de moldeado (o cast) sirve para forzar conversiones explícitas del tipo de una expresión. Su sintaxis es: ( tipo de datos ) expresión . El resultado de la expresión se convierte al tipo de datos especificado entre paréntesis. Tiene la misma precedencia que el resto de los operadores unarios. 45

Conversiones de tipos: Advertencias Una asignación que implica una conversión de tipos conlleva una promoción o pérdida de rango del valor asignado, según el tipo de la variable a la que se asigna. La promoción suele ser inocua, suele pasar inadvertida. La pérdida de rango puede provocar auténticas catástrofes 44

Conversión de Tipos: Parámetros de Funciones Como los parámetros actuales en las llamadas a funciones también son expresiones, se les pueden aplicar las reglas de conversión de tipos. En ANSI C, los parámetros formales de las funciones se pueden declarar mediante un prototipo de la función, y por tanto se realizan comprobación de tipos y conversiones entre parámetros formales y actuales; ejemplo: int nombre_funcion (int para1, char para2) 47

Conversión de tipos Para Obtener Desde Observaciones char unsigned char Si el valor > 127, el resultado es negativo char short int Se pierden los 8 bits más significativos char int Se pierden los 8 bits más significativos char long int Se pierden los 24 bits más significativos short int long int Se pierden los 16 bits más significativos int float Se pierde la parte fraccionaria (resultado indefinido si el valor no se ajusta al rango de int) float double Se redondea o se trunca, dependiendo de la implementación, según la precisión del resultado (resultado indefinido si el valor no se ajusta al rango de float) Nota: Para esta tabla se ha considerado una anchura de palabra de 16 bits. 46

Conversiones de Tipos: Enteros Sin Signo Para Obtener Desde Valor Resultado unsigned short positivo no cambia unsigned short negativo depende de la representación int unsigned dentro del rango del int no cambia int unsigned fuera del rango depende de la representación long unsigned dentro del rango no cambia long unsigned fuera del rango depende de la representación unsigned long positivo no cambia unsigned long negativo depende de la representación 48

Precedencia y Orden de Evaluación En la mayoría de los lenguajes no se especifica el orden de evaluación de los operandos de los operadores. El resultado de evaluar una expresión que incluye operadores de asignación y de incremento o decremento puede depender del orden de evaluación de las operaciones implicadas. En “C” no se especifica el orden de evaluación de los parámetros de las funciones. 49

Precedencia y Orden de Evaluación: Advertencias Cuidado con los efectos laterales producidos por las expresiones de asignación y los operadores de incremento y/o decremento. Cuidado con la escritura de programas cuyos resultados dependen del orden de evaluación de los operandos. Los resultados intermedios deben guardarse en variables temporales. 50

Tipos Enumerados Es posible declarar una lista de constantes enteras con un nombre asociado mediante la declaración de tipos enumerados. El tipo enumerado es una lista de símbolos cuya sintaxis es enum etiqueta { lista_id_ctes } lista_variables; La etiqueta especifica el nombre del tipo y es opcional. En las variables de un tipo enumerado sólo se deben almacenar constantes especificadas para ese tipo (pero el estándar no obliga al compilador que lo compruebe). 51

Tipos Enumerados La etiqueta se puede usar para declarar variables de ese tipo en otros puntos del programa. No se debe olvidar que cada símbolo de lista_id_ctes representa internamente un valor entero y por tanto puede utilizarse en cualquier expresión entera. 52

Tipos Enumerados: operaciones válidas Se puede asignar una constante de un tipo enumerado a una variable del mismo tipo: enum felinos { gato = 15, tigre, leon, puma}; enum felinos mascota; mascota = gato; Se pueden utilizar los operadores de igualdad: if (mascota == gato) ..... if (mascota != leon) ..... Se pueden utilizar operadores aritméticos con constantes de un tipo enumerado.

Tipos Enumerados operaciones que no conviene realizar No conviene utilizar los operadores de asignación (excepto =). mascota += gato /* advertencia */ No conviene utilizar los operadores de relación. if (mascota > puma) .... /* advertencia */ No conviene utilizar los operadores aritméticos. mascota = mascota + gato; /* advertencia */ Normalmente no conviene utilizar una constante de un tipo enumerado como subíndice de un array. fichas[rojo] = 23; /* desaconsejado */

Tipos Enumerados: Utilización Contribuyen a la legibilidad de los programas Se utilizan normalmente para uso interno de los programas y no en E/S.

typedef tipo lista_nombre; Definición de Tipos Cuando a una declaración de variables precede la palabra typedef, los identificadores especificados no se refieren a variables, sino a nombres de tipos de datos. Estos nombres de tipos pueden usarse posteriormente en la declaración de variables o en conversiones de tipos. Su sintaxis es: typedef tipo lista_nombre; 53

Definición de Tipos El alcance de la definición depende de la localización de la sentencia typedef. Si se realiza dentro de una función, el alcance queda confinado a la misma. Si la definición es externa (a toda función) el alcance es global. Este proceso ayuda a que los programas sean menos dependientes de la máquina y por tanto más transportables. 54