Fundamentos de la programación

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 Lue

0 downloads 35 Views 4MB Size

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

Página 9

typedef struct { string nombre; string apellidos; int edad; string nif; } tPersona tPersona; ; tPersona persona;

Acceso directo por nombre de campo (operador .) Con cada campo se puede hacer lo que permita su tipo

Las estructuras se pasan a los subprogramas por valor (sin &) o por referencia (con &)

Fundamentos de la programación: Tipos de datos estructurados

Página 10

typedef struct { int dni dni; ; char letra; } tNif tNif; ;

typedef struct { ... tNif nif; } tPersona tPersona; ;

tPersona persona;

Acceso al NIF : persona.nif persona nif // Otra estructura

Acceso a la letra del NIF: persona.nif.letra

tPersona nombre apellidos edad

tNif

nif dni letra

Acceso al DNI: persona.nif.dni

Fundamentos de la programación: Tipos de datos estructurados

Página 11

const int Max = 100 100; ; tPersona typedef yp struct { nombre string nombre; apellidos string apellidos; edad int edad; nif string nif; } tPersona tPersona; ; typedef tPersona tTablaPersonas tTablaPersonas[Max]; [Max]; tTablaPersonas personal;

personal nombre

0

apellidos edad nif nombre

1

apellidos edad nif nombre

2

apellidos edad nif

Nombre de la tercera persona: personal[2 personal[ 2].nombre

Edad de la duodécima persona: personal[11 personal[ 11].edad ].edad

NIF de la primera persona:

nombre

MAXMAX -1

apellidos edad nif

personal[0 personal[ 0].nif

Fundamentos de la programación: Tipos de datos estructurados

Página 12

const int MAX = 100 100; ; typedef yp struct { string nombre; string apellidos; int edad; string nif; } tPersona tPersona; ;

personal

typedef tPersona tTablaPersonas tTablaPersonas[MAX] [MAX];

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

Página 46

void mostrar mostrar( (const tEstudiante & estudiante) { 35) )

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.