Fundamentos de la Persona
ADOLESCENCIA Y PROYECTO DE VIDA Julio Ayala *
De la adolescencia a la adultez hay un tiempo prolongado, sea porque la adol
Story Transcript
Fundamentos de la programación
5 Grados en Ingeniería Informática, Ingeniería d l SSoftware f i í de d Computadores C d del e IIngeniería Ana Gil Luezas (adaptadas del original de Luis Hernández Yáñez) Facultad de Informática Universidad Complutense
Tipos de datos Estructuras Estructuras dentro de estructuras Arrays de estructuras Arrays dentro de estructuras Listas de longitud variable Insertar Eliminar Buscar Cadenas de caracteres de tipo string Entrada/salida d / l d con string i Operaciones con string Un ejemplo completo
Fundamentos de la programación: Tipos de datos estructurados
2 5 11 12 13 14 16 18 20 23 26 28 32
Fundamentos de la programación: Tipos de datos estructurados
Página 2
Clasificación de tipos Simples
Primitivos: int int,, float float,, double double,, char char,, bool Conjunto de valores predeterminado Definidos por el usuario: enumerados Conjunto de valores definido por el programador
Estructurados E d
Colecciones homogéneas: arrays T d los Todos l elementos l d dell mismo i tipo i Colecciones heterogéneas: estructuras L l t pueden d ser d ti t Los elementos de ti tipos di distintos
Fundamentos de la programación: Tipos de datos estructurados
Página 3
Colecciones o tipos aglomerados Agrupaciones de datos: Todos del mismo tipo tipo:: array o tabla De tipos distintos distintos:: estructura o registro
A Arrays ((tablas) bl ) Elementos organizados por posición: 0, 1, 2, 3, ... Acceso por índice: 0, 1, 2, 3, ... Una o varias dimensiones
Estructuras (registros) Elementos (campos) sin orden establecido Acceso por nombre Fundamentos de la programación: Tipos de datos estructurados
Página 4
Fundamentos de la programación: Tipos de datos estructurados
Página 5
Colecciones heterogéneas (registros) Elementos de (posiblemente) distintos tipos: campos Campos identificados por su nombre Información relacionada que se puede manejar como una unidad Acceso a cada elemento por su nombre de campo (operador. (operador.) typedef struct { tipo1 nombre_de_campo1 nombre_de_campo1; ; tipo2 nombre_de_campo2 nombre_de_campo2; ; ... } tTipo; tTipo p ; // nombre de tipo p al final struct
{
Campo p
Tipo p
Campo
Identificador
Fundamentos de la programación: Tipos de datos estructurados
}
Identificador
;
; Página 6
typedef struct { tipo1 nombre_de_campo1 nombre_de_campo1; ; tipo2 nombre_de_campo2 nombre_de_campo2; ; ... // declaraciones de campos (como variables) } tTipo tTipo; ; // nombre de tipo al final typedef struct { string nombre; string apellidos; int edad; string nif nif; ; } tPersona tPersona; ;
Campos: Tipos estándar o previamente declarado Fundamentos de la programación: Tipos de datos estructurados
Página 7
Usamos el tipo para declarar variables: tPersona persona;
Las variables de tipo tPersona contienen cuatro datos (campos): nombre
apellidos
edad
nif
Acceso a los campos con el operador punto (. (.): persona.nombre // una cadena (string) p ( g) persona.apellidos // una cadena (string) persona.edad // un entero (int) persona.nif // una cadena (string)
Podemos copiar p dos estructuras directamente: tPersona persona1, persona2; ... persona2 = persona1;
Se copian como bloque o campo a campo? Fundamentos de la programación: Tipos de datos estructurados
Página 8
typedef struct { string g nombre; ; string apellidos; int edad; string nif; } tPersona tPersona; ; tPersona persona;
Memoria
persona.nombre
Luis Antonio
persona.apellidos p p
Hernández Yáñe Yáñez
persona.edad p
22
persona.nif
00223344F
persona nombre Luis Antonio apellidos Hernández Yáñez edad
22
nif 00223344F
Fundamentos de la programación: Tipos de datos estructurados
typedef struct { tTablaPersonas datos; i int contador; d } tListaPersonas tListaPersonas; ; tListaPersonas personal; p ;
datos 0
nombre apellidos edad nif
1
nombre apellidos edad nif
2
nombre apellidos edad nif
MAXMAX -1
nombre apellidos edad nif
cont
Nombre de la tercera persona: personal.datos[ personal.datos [2].nombre p p ] Edad de la duodécima persona: personal.datos personal.datos[ [11 11].edad ].edad NIF de la p primera p persona: personal.datos personal.datos[ [0]. ].nif nif Fundamentos de la programación: Tipos de datos estructurados
Página 13
Fundamentos de la programación: Tipos de datos estructurados
Página 14
Estructura que agrupe el array y el contador: const int MAX = N; // Tamaño máximo estimado N>0 typedef tDatos tTabla[MAX]; tTabla[MAX]; // supongamos tDatotDato->double typedef struct { tTabla datos; Elementos sin usar int cont cont; ; (datos basura) } tLista tLista; ;
datos 12.0
-2.2
5.4
0.0
36.2
35.0
X
X
X
X
0
1
2
3
4
5
6
7
8
9
cont
6 Nº de elementos (y primer índice sin elemento)
Operaciones principales: búsqueda, inserción y eliminación de elementos
Fundamentos de la programación: Tipos de datos estructurados
Página 15
Insertar un nuevo elemento en una posición Posiciones válidas: 0 a contador 42.0 nuevo 3 pos
12.0 -2.2 0
1
5.4
0.0
2
3
36.2 35.0 4
5
X
X
X
X
6
7
8
9
6
Hay que asegurarse de que haya sitio (contador < máximo) Operación en 3 pasos: 1.-- Abrir hueco para el nuevo elemento (en la posición) 1. 2.-- Colocar el elemento nuevo en la posición 2. 3.-- Incrementar el contador 3.
Fundamentos de la programación: Tipos de datos estructurados
Página 16
bool insertarPos insertarPos( (tLista & list, list, tDato dato, int pos) if (list.cont list cont == MAX || pos>list.cont pos> pos>list list.cont list cont || pos> lista.datos li t d t [i].nota; lista.datos[i].nota; [i] t } }
Fundamentos de la programación: Tipos de datos estructurados
Página 45
double mediaClase mediaClase( (const tListaEstu &lista) { ; double total = 0.0 0.0; for (int i = 0; i < lista.cont; lista.cont; i++) { total = total + lista.datos[i].nota; lista.datos[i].nota; } return total / lista.cont; lista.cont; } int mayorNota mayorNota( (const tListaEstu &lista &lista) ) { double max = 0; int pos = 0; for (int i = 0; i < lista.cont; lista.cont; i++) { lista.datos[i].nota [i].nota [ ] > max max) ) { if (lista.datos max = lista.datos lista.datos[i [i].nota ].nota; ; pos = i; } } return pos; } Fundamentos de la programación: Tipos de datos estructurados