DATOS ESTRUCTURADOS Programación en C para electrónicos.

56
DATOS ESTRUCTURADOS Programación en C para electrónicos

Transcript of DATOS ESTRUCTURADOS Programación en C para electrónicos.

Page 1: DATOS ESTRUCTURADOS Programación en C para electrónicos.

DATOS ESTRUCTURADOS

Programación en C para electrónicos

Page 2: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

2

Índice

Punteros. Vectores. (Arrays)

Matrices. Vectores multidimensionales.

Cadenas de caracteres. Estructuras y Uniones. Tipos enumerados. Definición de nuevos tipos.

Page 3: DATOS ESTRUCTURADOS Programación en C para electrónicos.

4

Datos estructurados - David Carmona 2010

Programación en C para electrónica

Punteros

Page 4: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

5

Punteros

Un puntero es una variable que puede almacenar una dirección de memoria. Normalmente los punteros contienen la

dirección de memoria de otra variable. Los punteros apuntan a una variable

cuando contienen la dirección de memoria de dicha variable.

Page 5: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

6

Operadores

En la declaración y uso de los punteros se utilizan los operadores * y & (unarios) . & (dirección):

Permite obtener la dirección de memoria de una variable.

* (indirección): Permite obtener el contenido de una dirección

de memoria. También se utiliza para la declaración de

punteros.

Page 6: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

7

Declaración de punteros

Sintaxis:Tipo_dato * Nombre_Puntero

Un puntero debe estar asociado a un tipo de dato concreto. No pueden asignarse a un puntero

direcciones de datos de distinto tipo. Cuando asignamos un tipo a un puntero

indicamos la cantidad de memoria que ocupa el dato a partir de la dirección de memoria.

Page 7: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

8

Tipos de punteros

Los punteros se pueden declarar de cualquier tipo de dato de C. int, char, float….

El tipo de dato utilizado en la declaración de un puntero debe ser del mismo tipo que las variables a las puede apuntar.

El tipo de datos void, define un puntero genérico cuyo tipo es el del tipo de la variable a la que apunta.

Page 8: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

9

Puntero void

El puntero ip, primero apunta a una variable entera y después a una de tipo char.

Page 9: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

10

Asignación de direcciones

El operador & permite obtener la dirección que ocupa una variable en memoria.

Los tipos del puntero y la variable deben ser el mismo (excepto void).

Ejemplo:

Page 10: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

11

Indirección

Indirección es la forma de hacer referencia al valor de una variable a través de un puntero que apunta a dicha variable.

Para acceder al valor contenido en la dirección de memoria apuntada por un puntero se utiliza el operador *.

Ejemplo:*puntero=172;

//asigna el valor 172 a la p. mem. apuntada

Page 11: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

12

Ejemplo:

Page 12: DATOS ESTRUCTURADOS Programación en C para electrónicos.

13

Datos estructurados - David Carmona 2010

Operaciones con punteros

Asignación entre punteros: Podemos asignar un puntero

a otro siempre que sean del mismo tipo.

Después de la asignación ambos punteros contienen la misma dirección por lo tanto apuntan a la misma variable.

Page 13: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

14

Operaciones con punteros

Aritmética de punteros: Sumar un valor a un puntero implica el

incremento de la posición de memoria a la que apunta.

El incremento en la dirección se hace en múltiplos del tamaño del tipo de dato. Si a un puntero de tipo float (4 bytes) contiene

la dirección 1007, y se le suma 1 (puntero++) la dirección apuntada pasará a ser 1011

Page 14: DATOS ESTRUCTURADOS Programación en C para electrónicos.

15

Datos estructurados - David Carmona 2010

Ejemplo:

Dirección

valor

1000short a

1001

1002short b

1003

1004short c

1005

1006short d

1007

1008

float r1009

1010

1011

Page 15: DATOS ESTRUCTURADOS Programación en C para electrónicos.

16

Datos estructurados - David Carmona 2010

Programación en C para electrónica

Vectores

Page 16: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

17

Vectores

Un vector o array, es un grupo de datos del mismo tipo que ocupan posiciones de memoria contiguas.

Los datos de un vector se encuentran agrupados bajo un mismo identificador (nombre).

Para acceder a cada elemento del vector se utilizan subíndices. (nº de elemento del vector)

Page 17: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

18

Declaración de vectores.

Sintaxis:Tipo_dato Nombre_vector [tamaño]

Donde: Tipo_dato es el tipo de dato de todos los

elementos del vector. Nombre_vector es el identificador. tamaño es el número de elementos del

vector.

Page 18: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

19

Declaración de vectores.

Ejemplo:float temperaturas [100];

//vector para almacenar 100 temperaturas Inicialización:

Los vectores se pueden inicializar en la declaración encerrando la lista de valores entre llaves y separando cada elemento por comas.

Page 19: DATOS ESTRUCTURADOS Programación en C para electrónicos.

20

Datos estructurados - David Carmona 2010

Acceso a los elementos

Para acceder a un elemento del vector, se utiliza su nombre y un índice. Valor o expresión entera.

El primer elemento del vector tiene índice 0 y el último; tamaño-1. El índice debe estar siempre entre estos dos

valores.

Page 20: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

21

Acceso a los elementos

Ejemplos:

int contador[10];…contador[0]=10;contador[i+1]=127;int b=contador[9];contador[x]=7;

Page 21: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

23

Matrices

Una matriz es un vector de dos dimensiones.

Los conceptos de acceso, consulta e inicialización de elementos es similar a los de los vectores.

Sintaxis de la declaración:Tipo_dato Nombre_vector [tamaño_x]

[tamaño_y] tamaño_x y tamaño_y representan el

numero de filas y columnas de la matriz respectivamente.

Page 22: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

24

Almacenamiento

Los elementos de una matriz se almacenen en memoria por filas. A continuación del último elemento de una

fila se almacena el primer elemento de la fila siguiente.

Page 23: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

25

Asignación y consulta

Para acceder a un elemento se utiliza el nombre de la matriz y dos índices (uno por dimensión) entre corchetes. El valor del índice de cada dimensión oscila

entre el 0 y el tamaño de la dimensión menos 1.

Ejemplo:float temperaturas [10][10];

//matriz para almacenar 100 temperaturastemperatura [0][1]=27,6;

Page 24: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

26

Inicialización

Sin agrupar filas:

Agrupando filas:

Page 25: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

27

Vectores multidimensionales

Page 26: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

28

Punteros y vectores

En C el nombre de un vector se trata como un puntero que contiene la dirección del primer elemento del vector. El nombre del vector es una constante de

tipo puntero que no puede ser modificada. Se permite el uso de punteros que

contengan direcciones de elementos del vector para acceder a ellos utilizando la aritmética de punteros.

Page 27: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

29

Ejemplo

Page 28: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

30

Punteros y vectores

En un puntero que apunta a los elementos de una tabla, pueden usarse los corchetes para indexar dichos elementos, como en un vector:

Este tipo de indexaciones solo es válido si el puntero apunta al vector.

No se comprueba si el puntero apunta al vector o fuera de el.

Page 29: DATOS ESTRUCTURADOS Programación en C para electrónicos.

31

Datos estructurados - David Carmona 2010

Programación en C para electrónica

Cadenas de caracteres

Page 30: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

32

Cadenas de caracteres

Una cadena de caracteres es un vector de tipo char. Se les conoce como string.

Las cadenas de caracteres son tratadas de forma especial.

En C existe un archivo de cabecera (string.h) con funciones especializadas en el manejo de cadenas de caracteres.

Page 31: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

33

Cadenas de caracteres

Para que un vector sea considerado como cadena de caracteres debe finalizar con el carácter nulo (ASCII 0). El contenido a partir del carácter nulo se

ignora.

Para declarar una cadena de caracteres de tamaño N hay que reservar memoria N+1 caracteres.

Page 32: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

34

Declaración e inicialización

En la declaración se puede inicializar la cadena como hasta ahora:

En el caso de las cadenas, la forma equivalente es:

El compilador inserta caracteres nulos (\0) después del último carácter de la asignación.

Page 33: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

35

Declaración e inicialización

Sintaxis general:char Nombre_Cadena [ tamaño ] =

“Cadena”; Ejemplo:

char ciudad [30] = “Valencia”; Se puede obviar el tamaño de la cadena

en la declaración El compilador reservará el espacio justo

para albergar la cadena.char ciudad [] = “Valencia”;

Page 34: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

36

Cadena vacía (“”)

Una cadena vacía es aquella que consta únicamente del carácter nulo (\0)

Los caracteres siguientes al carácter nulo son ignorados. Para vaciar una cadena basta con asignar

el carácter nulo al primer carácter de la cadena.

Page 35: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

37

Manejo de cadenas

La librería string.h incorpora funciones para el manejo de cadenas de caracteres:

Page 36: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

38

E/S de cadenas

Las funciones printf y scanf disponen de un formato especial para cadenas de caracteres (%s)

Este formato permite capturar del teclado cadenas que no contengan espacios, tabuladores o saltos de línea.

Page 37: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

39

E/S de cadenas

Además, la librería stdio.h dispone de otras funciones para tratamiento de cadenas en la entrada y salida:

Estas funciones permiten la entrada de cadenas que contengan espacios, tabuladores…

Page 38: DATOS ESTRUCTURADOS Programación en C para electrónicos.

40

Datos estructurados - David Carmona 2010

Programación en C para electrónica

Estructuras y uniones

Page 39: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

41

Estructura

Una estructura es un conjunto de datos de distintos tipos que ocupan posiciones de memoria contiguas.

Los elementos (campos) de una estructura pueden ser de cualquier tipo de los vistos hasta ahora.

Los elementos de una estructura se referencian a través del nombre de la misma.

Page 40: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

42

Definición

La definición de una estructura requiere especificar el nombre y tipo de todos los campos de la estructura.

Para la definición de la estructura se utiliza la palabra reservada struct.

Una vez definida la estructura, se pueden crear tantos datos de la estructura como se quieran. El nombre de la estructura se utiliza como un

tipo de dato más a la hora de declarar variables de ese tipo.

Page 41: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

43

Sintaxis

Page 42: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

44

Declaración de variables

Se utiliza la palabra reservada struct y el nombre de la estructura.

También se pueden declarar variables de la estructura creada en la definición de la misma.

Page 43: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

45

Ejemplos

Page 44: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

46

Acceso a los campos

Para acceder a un campo de una

estrutura se utiliza el operador . (punto) La forma general de acceso a campos es

:Variable.nombre_campo

Ejemplo:Nuevo_cliente.dni = 12345678;

Page 45: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

47

Inicialización

Se puede asignar valor a todos los campos de la variable en el momento de declararla. Se encierran entre llaves los valores y se

separan con comas (,) en el mismo orden de la definición.

Ejemplo:

Page 46: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

48

Copia y comparación

No se pueden comparar mediante los operadores relacionales variables del mismo tipo de estructura. Se deben comparar los campos

individualmente. Se pueden copiar todos los campos de

una variable a otra mediante la asignación simple:struct cliente cliente1,Nuevo_cliente;

…Nuevo_cliente = cliente1;

Page 47: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

49

Uniones

Pueden contener varios campos de distinto tipo.

Todos los campos de la unión comparten espacio de memoria. Una variable de este tipo solo puede

almacenar el valor de uno de los campos. La unión ocupa el mismo espacio de

memoria que el campo de mayor tamaño.

Page 48: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

50

Definición

La definición y declaración de variables de una unión es análoga al de las estructuras. Se utiliza la palabra reservada union.

Page 49: DATOS ESTRUCTURADOS Programación en C para electrónicos.

51

Datos estructurados - David Carmona 2010

Programación en C para electrónica

Tipos enumerados

Page 50: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

52

Tipos enumerados

Es un conjunto ordenado de constantes enteras a las que se le asigna un nombre.

Los nombres representan todos los valores que puede tomar la variable.

El compilador les asigna un valor entero según el orden de las constantes y empezando por 0.

Page 51: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

53

Definición

Se utiliza la palabra reservada enum, seguida del nombre de la enumeración y de la lista de nombres de las constantes.

Ejemplo:

enum Nombre_Enum { Const1, Const2, … ConstN};

Page 52: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

54

Declaración de variables

La declaración de variables enumeradas puede hacerse en la definición:

O posteriormente utilizando la siguiente sintaxis:

enum dia_semana { Lunes, Martes, Miercoles, Jueves, Viernes, Sabado,Domingo} dia;

enum dia_semana dia;

Page 53: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

55

Cambio de valores

Por defecto, a los nombres se les asigna un valor entero, por orden de aparición en la definición y empezando desde 0.

Se puede cambiar el valor por defecto mediante asignaciones en la definición.

Page 54: DATOS ESTRUCTURADOS Programación en C para electrónicos.

56

Datos estructurados - David Carmona 2010

Programación en C para electrónica

Definición de nuevos tipos.

Page 55: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

57

typedef

El lenguaje C permite definir nuevos tipos de datos basados en los tipos vistos hasta ahora.

Para definir los nuevos tipos se utiliza la palabra reservada typedef, con la siguiente sintaxis:

Una vez definido el nuevo tipo, el nombre se puede utilizar como tipo de datos en la declaración de variables.

typedef tipo_datos Nombre_nuevo_tipo;

Page 56: DATOS ESTRUCTURADOS Programación en C para electrónicos.

Datos estructurados - David Carmona 2010

58

Ejemplos: