Tema 7 Inform - PowerPoint PPT Presentation

1 / 13
About This Presentation
Title:

Tema 7 Inform

Description:

Conocer el concepto de vector. Conocer las operaciones que pueden ... Similar a como ordena sus cartas un jugador. Proceso: dividir el vector en dos partes ... – PowerPoint PPT presentation

Number of Views:22
Avg rating:3.0/5.0
Slides: 14
Provided by: lsta1
Category:
Tags: el | inform | jugador | tema

less

Transcript and Presenter's Notes

Title: Tema 7 Inform


1
Tema 7 Informática Topografía
  • Estructuras de datos compuestas
  • Objetivos
  • Conocer el concepto de vector
  • Conocer las operaciones que pueden realizarse con
    ellos
  • Aplicar ambos conceptos a la resolución de
    problemas
  • Conocer el concepto de matriz bidimensional y
    multidimensional

2
  • Definición de vector
  • Operaciones con vectores
  • Búsqueda
  • Ordenación
  • Definición de vector de caracteres
  • Operaciones carácter a carácter
  • Funciones de cadenas de caracteres

3
Tipos de datos
  • simples
  • char, int, long int, float, double
  • compuestos
  • vector
  • los datos almacenados son todos del mismo tipo
  • pueden numerarse
  • permiten tratamiento homogéneo e implícito (uso
    de bucles)

4
Definición de vector
  • Conjunto de datos homogéneos
  • Tipificación
  • Elemento Cada uno de las unidades que forman el
    vector
  • Rango Cantidad de elementos que contiene
  • Índice Número identificativo del elemento
  • Rango 10

0 1 2 3 4 5 6 7 8 9
12 01 22 56 32 09 4 3
5
Definición de vector
  • Declaración
  • tipo vectorRANGO
  • Inicialización
  • int datos3 1,4,8
  • Acceso a los elementos
  • datos0 a
  • a datos2
  • b a datosN-1 - 5
  • Entrada
  • scanf (d, datos0)
  • Salida
  • printf (d, datos0)

Índice
Elemento
6
Programa que genera un vector para almacenar 10
números enteros leídos desde teclado y lo
visualiza una vez creado.
include ltstdio.hgt define RANGO 10 main ()
int numerosRANGO, i for (i0ilt RANGOi)
printf ("\n Introduce un numero ") scanf
("d",numerosi) for (i0iltRANGOi)
printf("\nEl valor del elemento d es d", i1,
numerosi)
7
Búsqueda en vectores
  • Consiste en determinar
  • Qué elemento cumple una determinada condición
  • Igual a un valor dado
  • Si supera un umbral (positivo o negativo)
  • Otras más sofisticadas
  • Su posición. Recordar el elemento
  • Métodos de búsqueda
  • Secuencial. Se recorren todos los elementos desde
    el primero hasta el último o hasta el localizado.
    Cuesta N pasos
  • Binaria o dicotómica. Partiendo de un vector
    ordenado mediante algún criterio, se localiza el
    elemento en log2(N) pasos
  • N es el rango del vector

8
Búsqueda en vectores
  • Métodos de búsqueda secuencial
  • Programa que sustituya los ceros por unos
  • define RANGO 100
  • ....
  • main()
  • int i, VRANGO
  • ....
  • for (i0iltRANGOi)
  • if (Vi 0)
  • Vi 1
  • ....

9
Métodos de búsqueda binaria
La búsqueda binaria requiere menos comparaciones
(iteraciones) que la secuencial pero para
realizar la búsqueda se requiere que el vector
este previamente ordenado.
10
Búsqueda Binaria
  • Programa que averigüe si existe una persona con
    un DNI dado
  • define TOTAL_PERSONAS 100
  • main()
  • long i, DNI, PersonasTOTAL_PERSONAS
  • printf(Indique por favor el DNI a liocalizar )
  • scanf(d, DNI)
  • /comienzo de bloque de búsqueda/
  • i Salto TOTAL_PERSONAS / 2
  • while (Salto ! 0)
  • if (Vi lt DNI)
  • i Salto /Hay que buscar valores mayores/
  • else if (Vi gt DNI)
  • i - Salto /Buscar valores menores/
  • else break /se ha encontrado a la
    persona/
  • Salto Salto / 2
  • /Del while/

11
Ordenación de vectores
  • Organizar los elementos de un vector de acuerdo
    con un criterio de ponderación
  • Métodos
  • inserción directa
  • selección
  • burbuja

12
Método de inserción directa
  • Similar a como ordena sus cartas un jugador
  • Proceso
  • dividir el vector en dos partes
  • tomar el primer elemento de la secuencia origen e
    insertarlo en el lugar adecuado de la secuencia
    destino.

13
Método de inserción directa
  • include ltstdio.hgt
  • define RANGO
  • main()
  • / declaracion de
  • variables /
  • / lectura
  • del vector /
  • / ordenacion
  • del vector /

for (i1 iltRANGO i) x ai fin
FALSE j i-1 while (!fin jgt0)
fin (xgtaj) if (!fin)
aj1aj j--
aj1 x
14
Vector de caracteres
  • String o cadena de caracteres
  • Declaración
  • char nombre_vectorRANGO1
  • Inicialización
  • char ciudad9 Valencia
  • char ciudad Valencia
  • char ciudad30 Valencia

h o l a \0
V a l e n c i a \0
21 char
15
Operaciones carácter a carácter
  • Asignación
  • char ciudad5
  • ciudad0 L
  • ciudad1 u
  • ciudad2 g
  • ciudad3 o
  • ciudad4 \0
  • Lectura/Escritura
  • scanf (c, ciudad3)
  • printf (c, ciudad2)

16
Funciones de cadenas de caracteres
  • Lectura/Escritura
  • char ciudadRANGO
  • /solo una palabra/
  • scanf (s, ciudad)
  • printf (s, ciudad)
  • /una o varias palabras/
  • gets (ciudad)
  • puts (ciudad)

17
Funciones de cadenas de caracteres (2)
  • Biblioteca de cadenas
  • include ltstring.hgt
  • Asignación de cadenas
  • char strcpy(destino, origen)
  • Longitud de una cadena
  • long int strlen(nombre)
  • char nombre 20
  • strcpy (nombre, Jorge Bueno)
  • printf (La longitud del vector es ld\n,
    strlen (nombre))

18
Funciones de cadenas de caracteres (3)
  • Comparación de cadenas
  • int strcmp(cadena1,cadena2)
  • / lt0 si c1ltc2, 0 si c1c2, gt0 si c1gtc2 /
  • char nombre 20, nombre_aux20
  • strcpy (nombre, ..... )
  • strcpy (nombre_aux, ..... )
  • rdostrcmp (nombre, nombre_aux)
  • if (rdo 0) printf (Los nombres son iguales
    \n)
  • else if (rdo lt 1)
  • printf (El nombre s precede alfabeticamente a
    s \n, nombre, nombre_aux)
  • else printf (El nombre s precede
    alfabeticamente a s \n, nombre_aux, nombre)

19
Funciones de cadenas de caracteres (4)
  • Concatenación de cadenas
  • char strcat(destino, origen)
  • char nombre MAX, apellidoMAX
  • strcpy (nombre, Jorge )
  • strcpy (apellido, Bueno)
  • strcat (nombre, apellido)
  • printf (El nombre completo es s\n, nombre)

20
Funciones de cadenas de caracteres (5)
  • Búsqueda de caracteres
  • char strchr(cadena,carácter)
  • char nombre30, caracter
  • strcpy (nombre, Jorge Bueno)
  • printf (Introduce el caracter a buscar\n)
  • caractergetchar()
  • if (strchr (nombre, caracter)!NULL)
  • printf (La cadena encontrada a partir del
    caracter c es s\n, caracter, strchr (nombre,
    caracter)
  • else printf (No se ha encontrado el caracter
    c\n, caracter)

21
Funciones de cadenas de caracteres (6)
  • Búsqueda de cadenas
  • char strstr(busqueda, buscada)
  • char nombre 20
  • strcpy (nombre, Jorge Bueno)
  • printf (La cadena encontrada es s\n, strstr
    (nombre, Bue))
  • / La cadena encontrada es Bueno /

22
Vectores bidimensionales
  • Vector cuyos elementos son vectores
  • Declaración
  • tipo_dato nombre_vectorrango1rango2
  • Inicialización por filas
  • int X43 2, 4, 6,
  • 8, 10, 12,
  • 14, 16, 18,
  • 20, 22, 24

23
Vectores bidimensionales (2)
  • Acceso matriz31
  • Entrada scanf (f, matrizxy)
  • Salida printf (f, matrizxy)
  • Expresiones matrizxymatrizx1y2

24
Vectores bidimensionales (2)
  • Acceso matriz31
  • Bucles anidados para tratar cada elemento
  • Paso de matrices como argumentos de funciones
  • El argumento formal debe incluir la
    especificación de rango2.
  • tipo_dato nombre_funcion (tipo_dato
    nombre_vectorrango2)

25
Vectores bidimensionales (3)
  • Se realiza un bucle de barrido por cada dimensión
    de la matriz
  • Para cada posición en una dimensión, se recorren
    todos los elementos del resto de dimensiones
    (Bucles anidados)

X
....
....
X / Y










....
Y
....
26
Vectores bidimensionales (4)
  • Bucles anidados para tratar cada elemento
  • include ltstdio.hgt
  • define N 3
  • void main()
  • int i, j, matrizNN
  • / Lectura de los elementos /
  • for (i0iltNi)
  • for (j0jltNj)
  • printf(Elementodd,i,j)
  • scanf (d, matrizij)
  • / Impresión de los elementos /
  • for (i0iltNi)
  • for (j0jltNj)
  • printf(Elementoddd,
  • i,j,matrizij)

27
Vectores bidimensionales Suma de matrices
include ltstdio.hgt define N 3 void main() int
m1NN, m2NN, m3NN int i,
j /Lectura de los elementos de
m1/ ... /Lectura de los elementos de
m2/ ... /Suma de matrices/ for
(i0iltNi) for (j0jltNj)
m3ij m1ij m2ij /Impresión de
los elem. de m3/ ...
28
Vectores bidimensionales Traspuesta de una
matriz
include ltstdio.hgt define N 3 void main() int
mNN, mtNN int i, j /Lectura de los
elementos de m/ ... /Traspuesta de m/ for
(i0iltNi) for (j0jltNj)
mtji mij /Impresión de los elem. de
mt/ ...
29
Vectores multidimensionales
  • Vectores que contienen vectores, que a su vez
    contienen vectores, etc.
  • Declaración
  • tipo_dato nombre_vectorrg1rg2rgN
  • Inicialización
  • int 2341,2,3,4,
  • 5,6,7,8,
  • 9,0,1,2 ,
  • 2,4,6,8,
  • 1,3,5,7,
  • 0,9,3,4

30
  • Estructuras de datos
  • Definición y declaración de estructuras
  • Estructuras anidadas
  • Inicialización de estructuras
  • Operaciones sobre estructuras
  • Definición de tipos de usuario
  • Paso de estructuras como argumentos de funciones
  • Estructura union

31
Definición
  • almacena datos de tipos distintos
  • declaración
  • struct nombre_estructura
  • tipo_dato miembro_1
  • tipo_dato miembro_2
  • tipo_dato miembro_n

32
Declaración
Declaración implícita struct nombre_estructura
tipo_dato miembro_1 tipo_dato
miembro_n variable1, variable2 Declaración
explícita struct nombre_estructura tipo_dato
miembro_1 tipo_dato miembro_n struct
nombre_estructura variable1, variable2
33
Ejemplos de declaraciones
struct tarjetas long int NumTarjetas char
TipoCuenta char Nombre80 float
Saldo struct tarjetas Cliente1,
Cliente2 sizeof(Cliente1) 89
Cliente1
NumTarjetas NumTarjetas NumTarjetas NumTarjetas TC Nombre Saldo Saldo Saldo Saldo

Resto de memoria
Resto de memoria
4 bytes
80 bytes
4 bytes
34
Ejemplos de declaraciones
/Declaración de un struct dentro de otro
struct/ struct Cliente long int
num_tarjetas char tipo_cuenta char
nombre80 float saldo cliente1,
cliente2 struct int cod_ciudad char
nom_ciudad80 int habitantes char
provincia80 poblacion
35
Estructuras anidadas
struct fecha int mes int dia int
anyo struct tarjetas long int
num_tarjeta char tipo_cuenta char
nombre80 float saldo struct fecha
validez cliente1, cliente2
36
Inicialización
  • struct tarjetas cliente 25634, A, Pedro
    Garcia,
  • 120000, 1-1-2000
  • struct tarjetas clientes20
  • 27645, B, Maria Perez, 20000, 10-30-1999,
  • 45785, A, Juan Martinez, 13090, 4-25-2003

37
Operaciones sobre estructuras (1)
  • Acceso variable.miembro
  • Ejemplos
  • cliente1.saldo cliente1.validez.anyo
  • clientes3.nombre clientes.nombre0
  • Asignación
  • clientes0.saldo 0.0
  • clientes10.saldo clientes10.saldo
    100000
  • clientes4.validez.anyo 1999

38
Operaciones sobre estructuras (2)
  • Lectura y escritura
  • gets (clientes5.nombre)
  • scanf (d, clientes7.validez.dia)
  • printf (c, clientes8.tipo_cuenta
  • Copia de los valores de estructuras
  • clientes4 clientes8

39
Definición de tipos de datos de usuario
  • typedef tipo_dato nombre_tipo
  • typedef char caracter
  • caracter A, B, C
  • typedef struct
  • long int num_tarjeta
  • char tipo_cuenta
  • char nombre80
  • float saldo
  • tarjetas
  • tarjetas clientes20

40
Paso de estructuras como argumentos de funciones
  • Paso por valor
  • Se puede pasar uno o más miembros de la
    estructura o la estructura completa
  • include ltstdio.hgt typedef struct
  • define N 100 long int num_tarjeta
  • char tipo_cuenta
  • typedef struct char nombre80
  • int mes float saldo
  • int dia fecha validez
  • int anyo tarjetas
  • fecha

41
Paso de estructuras como argumentos de funciones
(2)
  • tarjetas modificar_tarjeta (tarjetas cli)
  • printf (\nNumero de tarjeta ld,
    cli.num_tarjeta)
  • printf (\nTitular s, cli.nombre)
  • printf (\nTipo de cuenta actual c,
    cli.tipo_cuenta)
  • printf (\nTipo de cuenta nuevo )
  • scanf (c, cli.tipo_cuenta)
  • printf (\nSaldo actual f, cli.saldo)
  • printf (\nSaldo actualizado )
  • scanf (f, cli.saldo)
  • return (cli)
  • void main()
  • int i
  • tarjetas clienteN /inicialización del
    vector/
  • for (i0 iltN i) clienteimodificar_tarjeta(
    clientei)

42
Estructura union
  • Declaración
  • union nombre_union
  • tipo_dato miembro_1
  • tipo_dato miembro_n
  • union
  • int NumEntero
  • float NumReal
  • numero
  • sizeof(numero) 4

Numentero ?? ??
NumReal NumReal NumReal
Write a Comment
User Comments (0)
About PowerShow.com