Tipos Estructurados - PowerPoint PPT Presentation

1 / 57
About This Presentation
Title:

Tipos Estructurados

Description:

Fundamentos de Programaci n curso 05/06 TEMA 5. Fundamentos ... Inicializar una lista con un m ximo de 100 valores enteros dados por el usuario desde teclado. ... – PowerPoint PPT presentation

Number of Views:86
Avg rating:3.0/5.0
Slides: 58
Provided by: luishern
Category:

less

Transcript and Presenter's Notes

Title: Tipos Estructurados


1
Tipos Estructurados
Departamento de Sistemas Informáticos
yProgramación
  • Facultad de CC. Físicas. CURSO 04/05Fundamentos
    de Programación TEMA 5

Facultad de CC. FísicasFundamentos de
Programación curso 05/06 TEMA 5
2
Tipos Estructurados
  • Una estructura de datos es
  • una colección de valores a los que se hace
    referencia a través de un único nombre,
  • organizada de tal manera que se puede acceder a
    cada uno de los valores de forma individual
  • Se puede operar sobre la estructura completa o
    sobre cada valor individual

3
Arrays unidimensionales.
  • Motivación
  • Especificación. Se desarrolla un programa para
  • Leer una lista de calificaciones de examen
  • Encontrar su media
  • Escribir la lista con las calificaciones
    superiores a la media
  • Ordenar la lista de calificaciones en orden
    ascendente
  • Solición 1. Utilizar una variable para cada
    calificación. Si hay 100 alumnos, 100 variables

4
Arrays unidimensionales.
  • Utilidad procesamiento de listas i.e.
    colecciones ordenadas de valores a los que se
    puede acceder individualmente a través de un
    índice.
  • Sintaxis
  • ltTipogt NombreArray ltTamañogt

5
Arrays unidimensionales.
  • Es una estructura que se utiliza para almacenar
    valores del mismo tipo.
  • Se pueden identificar como listas o vectores
  • los valores se almacenan uno junto a otro,
  • cada dato de la colección se puede referenciar
    por su posición en la lista
  • Un array se caracteriza por
  • Un nombre (Identificador)
  • Un tamaño (nº de elementos que contiene)
  • El tipo de elementos que contiene

6
Arrays unidimensionales.
Ejemplo
  • int VectorGrande100, VectorPeque8,7,6,5
  • double a3
  • char calif10, una_calif
  • cin gtgt VectorGrande99 gtgt VectorGrande0
  • VectorGrande13 VectorGrande99
    VectorGrande0
  • cout ltlt VectorGrande13
  • int indice
  • indice 0
  • cout ltlt VectorGrandeindice

Declaración
Utilización de los elementos
7
Arrays unidimensionales.
Ejemplo
  • Especificación. En una lista de 5 puntuaciones
    en los exámenes dadas por el usuario mediante
    teclado, presentar la mayor y la diferencia de
    cada uno con el mayor.
  • Algoritmo.
  • 1. Introducir valores para los elementos del
    array por cin.
  • 2. Recorrer la lista buscando el mayor.
  • 3. Mostrar para cada elemento la diferencia con
    el mayor.

Procesamientode listas de valores
8
Arrays unidimensionales.
Ejemplo
  • int main()
  • float NotaAlum5
  • int i0, maximo
  • for (int i0 i lt 5 i)
  • cout ltlt "Intro valor de nota n " ltlt i ltlt
    endl
  • cin gtgt NotaAlumi
  • maximo NotaAlum0
  • for (i1 i lt 5 i)
  • if (NotaAlumi gt maximo) maximo NotaAlumi
  • for (i 0 ilt5 i)
  • cout ltlt NotaAlumi ltlt " tiene una diferencia
    de "
  • ltlt maximo - NotaAlumi
  • ltlt " con respecto al maximo" ltlt endl
  • getchar()
  • return 0

Procesamientode listas de valores
9
Arrays unidimensionales.
  • Qué sucede en memoria?
  • int a6
  • Se reservan posiciones adyacentes para 6
    elementos de tipo int.
  • Se recuerda únicamente la dirección del primer
    elemento.
  • Para obtener cualquier elemento de la estructura
    se cuenta a partir del primero.

10
Arrays unidimensionales.
  • Peligro!!!
  • int a6
  • a7 238
  • El ordenador ejecuta la instrucción como si
    existiera el elemento.
  • Es necesario llevar un registro del número de
    elementos que contiene el array y tenerlo en
    cuenta al procesar.

11
Arrays unidimensionales.
Ejemplo
  • Especificación. Inicializar una lista con un
    máximo de 100 valores enteros dados por el
    usuario desde teclado. La introducción se da por
    finalizada al introducir un número positivo. El
    usuario nos debe dar valores ordenados de menor a
    mayor.

Registro del númerode elementos
12
Arrays unidimensionales.
  • int const max_ind 100
  • int amax_ind
  • int indice
  • do
  • int numero
  • cin ltlt numero
  • if (numerogt0)
  • for (indice 0 indice lt max_ind
    indice)
  • if (indice 0)
  • aindice numero
  • else
  • while (numero lt aindice-1)
  • cout ltlt solo numeros ordenados de menor
    a mayor
  • cin gtgt numero
  • //Fin while
  • aindice numero
  • //Fin else
  • //fin for

Ejemplo
Registro del númerode elementos
13
Arrays unidimensionales.
Utilización de Arrays como parámetros de
Subprogramas lttipogt NomFun (lttipoelemgt
NomArr) Son un tipo especial, en la práctica
funcionan de la misma forma que los parámetros
por referencia. Son de entrada/salida.
14
Arrays unidimensionales.
  • include ltvcl.hgt
  • pragma hdrstop
  • include ltiostream.hgt
  • pragma argsused
  • void IniNotas (float Notas, int const maxElem)
  • for (int i0 i lt maxElem i)
  • cout ltlt "Intro valor de nota n " ltlt i ltlt
    endl
  • cin gtgt Notasi
  •  
  • int main(int argc, char argv)
  • float NotaAlum5
  • int i0, maximo
  • IniNotas(NotaAlum)
  • maximo NotaAlum0

Ejemplo
Arrays como parámetros de funciones
15
Arrays unidimensionales.
Argumento
  • Función que devuelve el valor máximo almacenado
    en un array de enteros.
  • Algoritmo
  • Asumir
  • Se ha declarado un array de enteros que ya se han
    leido por teclado.
  • Argumentos de entrada
  • La función necesita el array y el tamaño del
    array.
  • Devuelve
  • Valor entero máximo contenido en el array.
  • Procesamiento
  • Maximo 0.
  • Recorrer todo el array comprobando que el entero
    de la posición i es mayor que maximo si es
    mayor, asignar dicho entero a maximo.

16
Arrays unidimensionales.
Argumento
  • Función que devuelve el valor máximo almacenado
    en un array de enteros.

int maximo (int fvector, int tamano) float
maximo fvector0 int i for (i 0 i lt
tamano i) if (maximo lt fvectori) maximo
fvectori return maximo void main ()
int const limiteSup 50 int
vectorlimiteSup, i ...
17
Arrays unidimensionales.
Argumento
include ltiostream.hgt int maximo (int fvector,
int tamano) float maximo fvector0 int
i for (i 0 i lttamano i) if (maximo lt
fvectori) maximo fvectori return
maximo void main () int const limiteSup
5 int vectorlimiteSup, i //Leer los datos
por teclado. for (i 0 ilt limiteSup dato
gt 0 i) cout ltlt "Introduce el dato
(valor negativo para finalizar)"ltlt i ltlt " "
cin gtgt dato if (datogt0)
vectoridato i
//Devuelve el valor maximo del
array. coutltlt"El valor maximo del array es "ltlt
maximo (vector, limiteSup) //Fin main
18
Arrays unidimensionales.
ERROR COMÚN En arrays parcialmente llenos,
pasar como parámetros elementos que no se han
iniciado. Para evitarlo, hay que llevar un
registro de los límites en que el array tiene
valores. El subprograma necesita conocer cuál es
el último elemento que tiene valor.
19
Arrays unidimensionales.
  • Escribir un programa que lea 20 enteros, los
    guarde en un array y calcule y muestre por
    pantalla la suma de los valores que haya en
    posiciones pares del array (0, 2, ) y la suma de
    los valores que haya en posiciones impares del
    array (1, 3, ).
  • Algoritmo
  • 1. Leer los 20 números enteros y almacenarlos en
    un array.
  • 2. Recorrer el array sumando los valores de
  • - Posiciones pares.
  • - Posiciones impares.
  • 3. Visualizar resultados.

20
Arrays unidimensionales.
include ltiostream.hgt define MAXIMO 20 void
CargarArray (int fvector) int i0 char
fin do cout ltlt Desea introducir otro
dato? cin gtgt fin if (UpCase(fin) ! S i
lt MAXIMO) cout ltlt "Introduce el dato " ltlt i
ltlt " " cin gtgt fvectori i
while (UpCase(fin)!SiltMAXIMO) void main
() int MatrizMAXIMO int TotalPar 0,
TotalImpar 0, i //Cargar array cout ltlt
"Introduce los componentes del array " ltlt endl
CargarArray (Matriz) ...
21
Arrays unidimensionales
  • Implementación
  • 2. Recorrer el array sumando los valores de
  • - Posiciones pares.
  • - Posiciones impares.

//Sumatorios posiciones pares e impares. for
(i 0 i lt MAXIMO i) if (i 2 0)
TotalPar Matrizi else TotalImpar
Matrizi
22
Arrays unidimensionales.
ATENCIÓN. El valor devuelto por una función no
puede ser un tipo estructurado.
23
Arrays unidimensionales.
  • Algunas Limitaciones
  • Los arrays son muy útiles para el procesamiento
    de listas. Pero la implementación de listas con
    arrays tiene limitaciones
  • Un array tiene que tener un número fijo de
    elementos y una lista no. Se suele estimar el
    tamaño máximo que puede llegar a tener la lista y
    se declara el array para que tenga ese número de
    componentes.
  • Siempre se corre el riesgo de dejar elementos
    fuera del procesamiento un array demasiado
    grande ocupa mucha memoria.

24
Arrays unidimensionales.
  • Algunas Limitaciones
  • Algoritmos de inserción y eliminación son poco
    eficientes.
  • Por ejemplo, para insertar un nuevo elemento en
    la siguiente lista (en la posición 6) hay que
    desplazar cada elemento de las posciones 7 a la
    10 una posición a la derecha
  • 23,24,25,27,28,29,98,87,65,32

7
23,24,25,27,28,7,29,98,87,65,32
25
Arrays unidimensionales.
Algunas Limitaciones En eliminación sucede lo
mismo, hay que desplazar los elementos que están
a derecha del eliminado una posición hacia la
izquierda para cerrar el hueco
23,24,25,27,28,29,98,87,65,32
23,24,25,27,29,98,87,65,32
26
Arrays unidimensionales.
  • Algunas Limitaciones
  • Si inserción y eliminación se limitan al final
    del array, no existe ineficiencia.
  • Una pila es una lista cuyos elementos pueden
    insertarse (apilarse) y borrarse (desapilar) sólo
    al final de la lista (cima de la pila).
  • Si los elementos se pueden insertar sólo por un
    extremo (el final) y borrar los del otro (la
    cabeza) se le llama cola.

27
Arrays unidimensionales.
  • Resumiendo
  • Los arrays agrupan elementos del mismo tipo.
  • Funcionan muy bien para listas estáticas.
  • Funcionan razonablemente bien para listas cuyo
    tamaño se puede estimar y las que las operaciones
    de inserción y eliminación no son frecuentes o
    están restringidas al final.
  • No es lo más adecuado para listas dinámicas cuyos
    tamaños pueden variar mucho y con muchas
    operaciones de inserción/eliminación.

28
Arrays bi y multi dimensionales.
  • Utilidad procesamiento de estructuras tipo
    matriz. El acceso a cada elemento se hace a
    través de 2 índices.
  • Sintaxis
  • ltTipogtNombreArrayltDimensión1gt ltDimensión2gt
  • Cada celda de almacenamiento es del tipo ltTipogt

29
Arrays bi y multi dimensionales.
Definición
  • Ejemplos
  • int m6 10 ? Array bidimensional de 6x10
    enteros (matriz)
  • float k3 2 5 ? Array tridimensional de
    3x2x5 reales (cubo)

cubo de 3x2x5
matriz de 6x10
30
Arrays bi y multi dimensionales.
Acceso
  • Para identificar un elemento de un array
    multidimensional se debe dar un índice para cada
    dimensión, en el mismo orden que en la
    declaración.
  • Cada índice se encierra en sus propios corchetes.

Declaración ? int matriz 6 10
matriz 0 8
matriz
matriz 2 5
31
Arrays bidimensionales.
  • En C un array bidimensional es un array de
    arrays
  • int MatrizEnteros 53
  • Es en realidad un array unidimensional de 5
    elementos, cuyo tipo base es a su vez un array de
    3 elementos.
  • void NombreProc (ltTipoElementogt
    NombreArrayltDimension2gt, int const
    Dimension1)

32
Arrays bidimensionales.
Ejemplo
  • Especificación. . Queremos un programa por el que
    podamos gestionar la ocupación de los asientos en
    un cine. En el cine hay 12 filas (numeradas del 0
    al 11) y en cada fila hay 8 asientos (numerados
    del 0 al 7). El programa permitirá al usuario
    visualizar un mapa de la sala con el estado
    actual de ocupación de los asientos (O para libre
    y X para ocupado) y comprar la entrada
    correspondiente a un asiento libre.

Uso de arrays bidimensionales
33
Arrays bidimensionales.
Ejemplo
  • Especificación. . Escribir un programa que sume
    dos matrices. El valor de cada una lo introducirá
    el usuario por teclado.

Uso de arrays bidimensionales
34
Arrays bidimensionales.
Ejemplo
  • Especificación. Sumar los componentes de dos
    matrices bidimensionales de la misma dimensión.
    El usuario introducirá los componentes de cada
    matriz por teclado. El programa deberá guardar
    los resultados en una tercera matriz.Las
    dimensiones de las matrices se definen por
    programa.

Uso de arrays bidimensionales
35
Arrays bidimensionales.
Ejercicio - Suma
  • 1. Cargar la matriz1.
  • 2. Cargar la matriz2.
  • 3. Sumar, componente a componente, las dos
    matrices y guardar el resultado en matriz3.
  • 4. Visualizar resultado (matriz3).

36
Arrays bidimensionales.
Ejercicio - Suma
include ltiostream.hgt define FILAS 4 define
COLUMNAS 3 void CargarArray (int
fvectorFILASCOLUMNAS) int i, j for (i
0 i lt FILAS i) for (j 0 j lt
COLUMNAS j) cout ltlt "Introduce
el dato " ltlt i ltlt "" ltlt j ltlt " " cin
gtgt fvectorij cout ltlt endl
... void main () int matriz1FILASCOLUMN
AS int matriz2FILASCOLUMNAS int
matrizSumaFILASCOLUMNAS CargarArray
(matriz1) CargarArray (matriz2)
37
Arrays bidimensionales.
Ejercicio - Suma
void SumarArrays (int fvector1FILASCOLUMNAS,
int fvector2FILASCOLUMNAS, int
fvectorSFILASCOLUMNAS) int i, j for
(i 0 i lt FILAS i) for (j 0 j lt
COLUMNAS j) fvectorSij
fvector1ij fvector2ij ... void main
() ... SumarArrays (matriz1, matriz2,
matrizSuma)
38
Arrays bidimensionales.
Ejercicio - Suma
void VisualizarArray (int fvectorFILASCOLUMNAS
) int i, j for (i 0 i lt FILAS i)
for (j 0 j lt COLUMNAS j) cout ltlt
fvectorij ltlt " " cout ltlt endl
... void main () ... cout ltlt "La suma de
los dos arrays es " ltlt endl VisualizarArray
(matrizSuma)
39
Arrays bidimensionales.
Ejercicio - Suma
void main() int matriz1FILASCOLUMNAS
int matriz2FILASCOLUMNAS int
matrizSumaFILASCOLUMNAS //Cargar primer
array cout ltlt "Introduce los componentes del
primer array " ltlt endl CargarArray (matriz1)
//Visualizar array1 cout ltlt "El primer array
introducido es " ltlt endl VisualizarArray
(matriz1) //Cargar segundo array cout ltlt
"Introduce los componentes del segundo array " ltlt
endl CargarArray (matriz2) //Visualizar
array2 cout ltlt "El segundo array introducido
es " ltlt endl VisualizarArray (matriz2)
//Sumar los arrays SumarArrays (matriz1,
matriz2, matrizSuma) //Visualizar array Suma
cout ltlt "La suma de los dos arrays es " ltlt
endl VisualizarArray (matrizSuma)
40
La clase string.
  • Utilidad tratamiento de cadenas de caracteres.
  • en c las cadenas de caracteres se tratan como
    arrays de char.
  • en c existe además la clase string para tratar
    cadenas.

41
La clase string.
  • Cómo se usa
  • los string son arrays de caracteres que incluyen
    una serie de operaciones predefinidas.
  • los caracteres de string se numeran
    consecutivamente desde 0.
  • la clase string es programación orientada a
    objetos y tiene un tratamiento y unas normas
    sintácticas diferentes a lo que hemos visto hasta
    ahora.

42
La clase string.
  • Cómo se usa
  • está en la biblioteca ltstring.hgt.
  • se crea un objeto de la clase string la sintaxis
    es idéntica a la de creación de una variable.
  • string cadena
  • para incializar el objeto
  • cadena Hola bicho bola
  • cin gtgt cadena
  • getline (cin, cadena,0)
  • para mostrar su valor
  • cout ltlt cadena

getline toma el flujo de caracteres de cin hasta
encontrar el primer espacio blanco y lo asigna a
cadena
43
La clase string.
  • En POO hay una nomenclatura especial
  • a los tipos se les llama clases
  • objetos a los valores
  • funciones miembro a las funciones
  • acciones miembro a las acciones
  • métodos a los subprogramas
  • los métodos se utilizan de forma distinta a los
    subprogramas.
  • El cambio sintáctico de la utilización es el
    resultado de un cambio de responsabilidades, ya
    no estamos ejecutando una función sino que
    estamos pidiendo a un objeto que ejecute un
    método con ciertos argumentos.

44
La clase string.
45
La clase string.
46
La clase string.
  • Sintaxis para la utilización de los métodos
  • La idea es que pedimos a un objeto que ejecute
    una operación
  • Se crea el objeto
  • ltN_clasegt N_objeto
  • string cadena
  • Invocar a un método
  • N_objeto.N_metodo(arg1,arg2)
  • cadena.erase(pos,n) //elimina n caracteres
    //desde pos en cadena

47
La clase string.
  • include ltiostream.hgt
  • include ltstringgt
  • void main()
  • string a (Hola ), b(a ), c(los lectores.
    ),d
  • d a b c
  • coutltltdltltendl
  • if (bltc)
  • coutltltla cadena b es menor que la cltltendl
  • string s1,s2,x,re
  • int pos,n
  • coutltltIntroduce una frase palabra a
    palabraltltendlltlt0 para finalizar
  • do
  • cingtgtx
  • if(x!0)
  • if(!s1.empty())
  • s1.append( )
  • s1.append(x)
  • while (x!0)

48
La clase string.
  • coutltltIntroduce la palabra a buscar en la
    frase
  • cingtgts2
  • pos0n0
  • coutltltla palabra aparece en la frase en la
    posición/es
  • do
  • //comprueba si s2 esta en s1. pos es el índice
    de la //primera posición de s1 en la que aparece
    la cadena //s2.Devuelve 1 cuando no se
    encuentra el elemento.
  • if (pos!-1)
  • if(n!0) coutltlt,
  • coutltltpos
  • posn
  • while(pos!-1)

49
La clase string.
  • coutltltIntroduce la palabra a buscar
  • cingtgts2
  • coutltltIntroduce la palabra a reemplazar
  • cingtgtre
  • pos0
  • do
  • poss1.find(s2,pos)
  • if (pos!-1)
  • s1.replace(pos,s2.length(),re)
  • pos
  • while(pos!-1)
  • coutltltla cadena resultante esltltendlltlts1

50
Registros. Tipos struct.
  • Utilidad agrupar información de carácter
    heterogéneo en una estructura.
  • A cada una de las unidades de información que
    constituyen un registro se le llama CAMPO.
  • Sintaxis
  • struct
  • ltTipo campo1gt Nombre1
  • ltTipo campo2gt Nombre2
  • ltTipo campo3gt Nombre3
  • NombreRegistro

51
Registros. Tipos struct.
  • struct
  • double ParteReal
  • double ParteImaginaria
  • complejo
  • struct
  • char nombre100
  • int edad
  • char nif14
  • persona

52
Registros. Tipos struct.
  • No se suelen utilizar registros para definir
    variables directamente, porque generalmente se
    suele necesitar más de una y repetir la
    definición es muy costoso. Lo normal es definir
    un tipo con typedef.
  • Sintaxis
  • typedef struct
  • ltTipo campo1gt Nombre1
  • ltTipo campo2gt Nombre2
  • ltTipo campo3gt Nombre3
  • NombreTipoRegistro

53
Registros. Tipos struct.
  • No se suelen utilizar registros para definir
    variables directamente, porque generalmente se
    suele necesitar más de una y repetir la
    definición es muy costoso. Lo normal es definir
    un tipo con typedef.
  • Sintaxis
  • typedef struct
  • ltTipo campo1gt Nombre1
  • ltTipo campo2gt Nombre2
  • ltTipo campo3gt Nombre3
  • NombreTipoRegistro

En algunos entornos se exige repetir el nombre
del tipo después de struct
54
Registros. Tipos struct.
  • Para utilizar registros
  • Sintaxis
  • Complejo c
  • c.parteReal1
  • c.parteImaginaria2
  • coutltltla parte real vale ltlt c.parteRealltlt
  • ltlt la parte imaginaria vale
    ltltc.parteImaginaria
  • Complejo c_i0.0,1.0

55
Registros. Tipos struct.
  • Los registros no tienen ninguno de los
    comportamientos extraños de los arrays cuando se
    emplean en subprogramas. Esto es así incluso
    cuando un registro contiene un array. De hecho
    una manera de hacer que los arrays se comporten
    como el resto de tipos es encerrarlos en
    registros.

56
Registros. Tipos struct.
  • int const N3
  • typedef struct vector
  • double datosN
  • vector
  • typedef struct matriz
  • vector datosN
  • matriz

57
Registros. Tipos struct.
  • Las operaciones ahora se pueden implementar como
  • Sintaxis
  • Complejo c
  • c.parteReal1
  • c.parteImaginaria2
  • coutltltla parte real vale ltlt c.parteRealltlt
  • ltlt la parte imaginaria vale
    ltltc.parteImaginaria
  • Complejo c_i0.0,1.0
Write a Comment
User Comments (0)
About PowerShow.com