tipos de datos estructurados

84
5 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad Complutense Fundamentos de la programación 2011-2012 Tipos de datos estructurados

Upload: emery

Post on 11-Jan-2016

57 views

Category:

Documents


2 download

DESCRIPTION

Fundamentos de la programación 2011-2012. Tipos de datos estructurados. 5. Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad Complutense. Índice. Tipos estructurados2 Arrays5 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Tipos de datos estructurados

5Grado en Ingeniería Informática

Grado en Ingeniería del Software Grado en Ingeniería de Computadores

Luis Hernández Yáñez

Facultad de InformáticaUniversidad Complutense

Fundamentos de la programación 2011-2012

Tipos de datos estructurados

Page 2: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Índice

Página 2

Tipos estructurados 2Arrays 5

Declaración 8Uso 10Ejemplos 14Capacidad y copia de arrays 21Arrays multidimensionales 23Inicialización de arrays 34Paso de arrays a funciones 37

Cadenas de caracteres 40Cadenas de caracteres al estilo de C44Cadenas de caracteres de tipo

string 50Estructuras 58

Combinación de tipos estructurados63

Page 3: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 3Fundamentos de la programación: Tipos de datos estructurados

Tipos estructurados

Page 4: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Tipos de datos

Clasificación de tipos Simples

Estándar: int, float, double, char, boolEl conjunto de valores está predeterminado.

Definidos por el usuario: enumeradosEl conjunto de valores lo define el programador.

Estructurados Colecciones homogéneas: arrays

Todos los elementos de la colección son del mismo tipo. Colecciones heterogéneas: estructuras

Los elementos de la colección pueden ser de tipos distintos.

Página 4

Page 5: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Tipos estructurados

Colecciones o tipos aglomeradosAgrupación de datos (elementos): Todos del mismo tipo: array o tabla. De tipos distintos: estructura o tupla.

Arrays (tablas) Elementos organizados por posición: 0, 1, 2, 3, ... Acceso por índice (posición): 0, 1, 2, 3, ... Una o varias dimensiones.

Estructuras(tuplas, registros) Elementos sin orden establecido. Acceso por nombre (campos).

Página 5

Page 6: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 6Fundamentos de la programación: Tipos de datos estructurados

Arrays

Page 7: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Colecciones homogéneasUn mismo tipo de dato para varios elementos: Notas de los estudiantes de una clase Ventas de cada día de la semana Temperaturas de cada día del mes

...

En lugar de declarar N variables...

Página 7

125.40vLun

76.95vMar

328.80vMie

254.62vJue

435.00vVie

164.29vSab

0.00vDom

ventas

125.40

76.95 328.80

254.62

435.00

164.29

0.00

0 1 2 3 4 5 6

... declaramos una tabla de N valores:

Índices

Page 8: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Estructura secuencialCada elemento se encuentra en una posición (índice): Los índices son enteros positivos El índice del primer elemento siempre es 0 Los índices se incrementan de uno en uno

Acceso directo

A cada elemento se accede directamente a través de su índice:

ventas[4] accede al 5º elemento del array (contiene el valor 435.00).cout << ventas[4];

ventas[4] = 442.75;

Página 8

ventas

125.40

76.95 328.80

254.62

435.00

164.29

0.00

0 1 2 3 4 5 6

Cada elemento es un dato del tipo base.Se usa como cualquier otra variable de ese tipo.

Page 9: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Tipos arrays

Declaración de tipos de arraystypedef tipo_base nombre[tamaño];

Ejemplos:typedef double tTemp[7];typedef short int tDiasMes[12];typedef char tVocales[5];typedef double tVentas[31];typedef tMoneda tCalderilla[15]; // Enumerado tMoneda

Página 9

[Identificador Expresión ]Tipotypedef

Recuerda: Adoptamos el convenio de comenzar los nombres de tipo con una t minúscula, seguida de una o varias palabras, cada una con su inicial en mayúscula.

Page 10: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Variables arrays

Declaración de variables arraystipo nombre;

Ejemplos:

Página 10

NO se inicializan los elementos automáticamente.

tempMax ? ? ? ? ? ? ?

0 1 2 3 4 5 6

typedef double tTemp[7];typedef short int tDiasMes[12];typedef char tVocales[5];typedef double tVentas[31];

ventasFeb ? ? ? ? ? ? ? ? ? ? ? ? ? ... ?

0 1 2 3 4 5 6 7 8 9 10 11 12 30

vocales ? ? ? ? ?

0 1 2 3 4

diasMes ? ? ? ? ? ? ? ? ? ? ? ?

0 1 2 3 4 5 6 7 8 9 10 11

tTemp tempMax;

tDiasMes diasMes;

tVocales vocales;

tVentas ventasFeb;

Page 11: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 11Fundamentos de la programación: Tipos de datos estructurados

Uso de arrays

Page 12: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Uso de arrays

Acceso a los elementos de un arraynombre[índice]

A cada elemento se accede directamente a través de su índice (posición).

tVocales vocales;

5 elementos, índices de 0 a 4:vocales[0] vocales[1] vocales[2] vocales[3] vocales[4]

Procesamiento de cada elemento:

El mismo que cualquier variable del tipo base.cout << vocales[4];

vocales[3] = 'o';

if (vocales[i] == 'e') ...

Página 12

vocales 'a' 'e' 'i' 'o' 'u'

0 1 2 3 4

NO SE COMPRUEBA SI EL ÍNDICE ES VÁLIDO.¡Es responsabilidad del programador!¡¡¡ ¿¿¿ vocales[7] ??? !!!

typedef char tVocales[5];

Page 13: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Procesamiento Recorridos. Búsquedas. Ordenación.

. . .

Se verán con detenimiento en los próximos temas.

Arrays y bucles forArrays: tamaño fijo Bucle de recorrido fijo (for)tTemp tempMax;double mediaMax, total = 0; ...for (int i = 0; i < 7; i++) total = total + tempMax[i];mediaMax = total / 7;

Página 13

Page 14: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Memoria

tempMax[0] 12.40

tempMax[1] 10.96

tempMax[2] 8.43

tempMax[3] 11.65

tempMax[4] 13.70

tempMax[5] 13.41

tempMax[6] 14.07

mediaMax ?

total 0.00

i 0

12.40

1

23.36

2

31.79

3

43.44

4

84.62

7

Arrays

tTemp tempMax;double mediaMax, total = 0; ...for (int i = 0; i < 7; i++) total = total + tempMax[i];

Página 14

12.40 10.96 8.43 11.65 13.70 13.41 14.07

0 1 2 3 4 5 6

falsetrue

total+=tempMax[i];

i++

i < 7

i = 0

...

Page 15: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 15Fundamentos de la programación: Tipos de datos estructurados

Ejemplos

Page 16: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Días de cada mes

const int Meses = 12;typedef short int tDiasMes[Meses];tDiasMes diasMes; // Días de cada mes del añodiasMes[0] = 31; // EnerodiasMes[1] = 29; // Febrero (¡bisiesto!)diasMes[2] = 31; // MarzodiasMes[3] = 30; // AbrildiasMes[4] = 31; // MayodiasMes[5] = 30; // JuniodiasMes[6] = 31; // JuliodiasMes[7] = 31; // AgostodiasMes[8] = 30; // SeptiembrediasMes[9] = 31; // OctubrediasMes[10] = 30; // NoviembrediasMes[11] = 31; // Diciembre

Página 16

Define el tamaño del array con una constante.

Page 17: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Días de cada mes

Página 17

Los usuarios usan de 1 a 12 para numerar los meses.La interfaz debe aproximarse a los usuarios,

aunque internamente se usen los índices de 0 a 11.

// Calculamos la media de díasdouble total = 0, media;for (int mes = 0; mes < Meses; mes++) total = total + diasMes[mes];media = total / Meses;

// Mostramos los días de cada mes del añofor (int mes = 0; mes < Meses; mes++) cout << "Mes " << mes + 1 << ": " << diasMes[mes] << "dias" << endl;

diasMes 31 29 31 30 31 30 31 31 30 31 30 31

0 1 2 3 4 5 6 7 8 9 10 11

Page 18: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Temperaturas máximas y mínimas de la semana

const int Dias = 7;typedef double tTemp[Dias];tTemp tempMin, tempMax; // Mínimas y máximas – 2 arrays

// Pedimos al usuario las temperaturasfor (int dia = 0; dia < Dias; dia++) { cout << "Dia " << dia + 1 << ": " << endl; cout << "Minima: "; cin >> tempMin[dia]; cout << "Maxima: "; cin >> tempMax[dia];}

2 arrays paralelos que se manejan conjuntamente.Alternativas: array bidimensional o array de estructuras...

Página 18

Page 19: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Total de ventas de cada día del mesconst int MaxDias = 31;typedef double tVentas[MaxDias];tVentas ventasFeb; // Ventas de cada día de febrero

¿Cuántos días tiene ese mes (febrero)?const int Meses = 12;typedef short int tDiasMes[Meses];tDiasMes diasMes;inicializa(diasMes); // Asigna a cada mes su nº de días

// Pedimos al usuario las ventas de ese mes...for (int dia = 0; dia < diasMes[1]; dia++) { // ¡Ojo! Febrero tiene índice 1 (Enero el 0) cout << "Ventas del dia " << dia + 1 << ": "; cin >> ventasFeb[dia];}

Página 19

Page 20: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Inicialización del array de díasvoid inicializa(tDiasMes dias) { dias[0] = 31; // Enero dias[1] = 29; // Febrero (¡bisiesto!) dias[2] = 31; // Marzo dias[3] = 30; // Abril dias[4] = 31; // Mayo dias[5] = 30; // Junio dias[6] = 31; // Julio dias[7] = 31; // Agosto dias[8] = 30; // Septiembre dias[9] = 31; // Octubre dias[10] = 30; // Noviembre dias[11] = 31; // Diciembre}

Página 20

Los arrays se pasansiempre por referencia,sin tener que usar &.

¡dias vuelve modificado!

Page 21: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Array de valores de enumeradostring aCadena(tMoneda moneda); // Prototipo de funciónconst int MaxMonedas = 15;typedef enum { centimo, dos_centimos, cinco_centimos, diez_centimos, veinte_centimos, medio_euro, euro } tMoneda;

typedef tMoneda tCalderilla[MaxMonedas];

tCalderilla bolsillo; // Hasta MaxMonedas monedas que llevobolsillo[0] = euro;bolsillo[1] = cinco_centimos;bolsillo[2] = medio_euro;bolsillo[3] = euro;bolsillo[4] = centimo;...for (int moneda = 0; moneda < MaxMonedas; moneda++) cout << aCadena(bolsillo[moneda]) << endl;

Página 21

Page 22: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 22Fundamentos de la programación: Tipos de datos estructurados

Capacidad y copia de arrays

Page 23: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Capacidad de los arraysLa capacidad de un array se define en la declaración y no puede ser cambiada en tiempo de ejecución.

El tamaño de un array es una decisión del diseño. En ocasiones será fácil (días de los 12 meses del año). Cuando pueda variar (lista de clientes) ha de estimarse un tamaño

que no se quede corto ni desperdicie mucha memoria (posiciones sin usar).

La STL (Standard Template Library) de C++ proporciona coleccionesmás eficientes cuyo tamaño puede variar dinámicamente.

Copia de arraysNo se pueden copiar dos arrays (del mismo tipo) con la asignación:

array2 = array1; // ¡¡¡ NO COPIA LOS ELEMENTOS !!!

Han de copiarse los elementos uno a uno:

for (int i = 0; i < N; i++) array2[i] = array1[i];

Página 23

Page 24: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 24Fundamentos de la programación: Tipos de datos estructurados

Arrays multidimensionales

Page 25: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays multidimensionales

Arrays de varias dimensionesPodemos indicar varios tamaños en la declaración de un array.

Cada uno en su par de corchetes.

typedef tipo_base nombre[tamaño1][tamaño2]...[tamañoN];

El array tendrá varias dimensiones, tantas como tamaños se indiquen.typedef double tMatriz[50][100];

tMatriz matriz;

matriz es una tabla bidimensional de 50 filas por 100 columnas:

Página 25

0 1 2 3 ... 98 99

0 ...

1 ...

2 ...

... ... ... ... ... ... ... ...

48 ...

49 ...

Page 26: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays multidimensionales

Arrays de varias dimensionestypedef double tMatriz[50][100];

tMatriz matriz;

Ahora cada elemento del array se localiza con dos índices, uno por cada dimensión.cout << matriz[2][98];

Página 26

0 1 2 3 ... 98 99

0 ...

1 ...

2 ...

... ... ... ... ... ... ... ...

48 ...

49 ...

Page 27: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays multidimensionales

Arrays de varias dimensionesPodemos definir tantas dimensiones como necesitemos.typedef double tMatriz[5][10][20][10];

tMatriz matriz;

Necesitamos tantos índices como dimensiones:cout << matriz[2][9][15][6];

Página 27

Page 28: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Ejemplo de arrays multidimensionalesTemperaturas mínimas y máximas.

Matriz bidimensional de días y mínima/máxima:const int MaxDias = 31;

typedef double tTemp[MaxDias][2]; // Día x mínima / máxima

tTemp temp;

double tempMaxMedia, tempMinMedia, tempMaxAbs, tempMinAbs;

int dias = 0;

Ahora: temp[i][0] es la temperatura mínima del día i+1. temp[i][1] es la temperatura máxima del día i+1.

Página 28

Page 29: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays...

int main() { const int MaxDias = 31; typedef double tTemp[MaxDias][2]; // Día x mínima / máxima tTemp temp; double tempMaxMedia = 0, tempMinMedia = 0, tempMaxAbs = -100, tempMinAbs = 100; int dias = 0; double max, min; ifstream archivo; archivo.open("temp.txt"); if (!archivo.is_open()) cout << "No se ha podido abrir el archivo." << endl; else { archivo >> min >> max; // El archivo termina con -99 -99 while (!((min == -99) && (max == -99)) && (dias < MaxDias)) { temp[dias][0] = min; temp[dias][1] = max; dias++; archivo >> min >> max; } ...

Página 29

temp.cpp

Page 30: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays... for (int i = 0; i < dias; i++) { tempMinMedia = tempMinMedia + temp[i][0]; if (temp[i][0] < tempMinAbs) tempMinAbs = temp[i][0]; tempMaxMedia = tempMaxMedia + temp[i][1]; if (temp[i][1] > tempMaxAbs) tempMaxAbs = temp[i][1]; } tempMinMedia = tempMinMedia / dias; tempMaxMedia = tempMaxMedia / dias; cout << "Temperaturas minimas.-" << endl; cout << " Media = " << fixed << setprecision(1) << tempMinMedia << " C Minima absoluta = " << setprecision(1) << tempMinAbs << " C" << endl; cout << "Temperaturas maximas.-" << endl; cout << " Media = " << fixed << setprecision(1) << tempMaxMedia << " C Maxima absoluta = " << setprecision(1) << tempMaxAbs << " C" << endl; archivo.close(); }

return 0;}

Página 30

Page 31: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Enumerados como índicestypedef enum { minima, maxima } tTipoTemp;

const int MaxDias = 31;

typedef double tTemp[MaxDias][2]; // Día x { mínima, máxima }

tTemp temp;int dias = 0;double max, min;ifstream archivo;...

Página 31

Recuerda que internamentese asignan enteros a partir de 0

a los distintos símbolos del enumerado.minima 0 maxima 1

archivo >> min >> max; while (!((min == -99) && (max == -99)) && (dias < MaxDias)) { temp[dias][minima] = min; temp[dias][maxima] = max; dias++; archivo >> min >> max; }

Page 32: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Ventas de todos los meses de un año (bisiesto)

Página 32

Array bidimensional de meses y días:const int Meses = 12;const int MaxDias = 31;typedef double tVentas[Meses][MaxDias];tVentas ventas; // Ventas de todo el añotypedef short int tDiasMes[Meses];tDiasMes diasMes;inicializa(diasMes); // Asigna a cada mes su nº de días// Pedimos al usuario las ventas de cada día del año...for (int mes = 0; mes < Meses; mes++) for (int dia = 0; dia < diasMes[mes]; dia++) { cout << "Ventas del dia " << dia + 1 << " del mes " << mes + 1 << ": "; cin >> ventas[mes][dia]; }

Page 33: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Ventas de todos los meses de un año (bisiesto)

Página 33

0 1 2 3 4 ... 29 30 31

0 201 125 234 112 156 ... 234 543 667

1 323 231 675 325 111 ... 342

2 523 417 327 333 324 ... 444 367 437

3 145 845 654 212 562 ... 354 548

4 327 652 555 222 777 ... 428 999 666

5 854 438 824 547 175 ... 321 356

6 654 543 353 777 437 ... 765 678 555

7 327 541 164 563 327 ... 538 159 235

8 333 327 432 249 777 ... 528 529

9 524 583 333 100 334 ... 743 468 531

10 217 427 585 218 843 ... 777 555

11 222 666 512 400 259 ... 438 637 879

Días

MesesCeldas no utilizadas

Page 34: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 34Fundamentos de la programación: Tipos de datos estructurados

Más sobre arrays

Page 35: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Inicialización de arraysPodemos dar valores a los elementos de los arrays durante la declaración.

Asignamos una lista de valores al array:int i[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int cuads[5][2] = {1,1, 2,4, 3,9, 4,16, 5,25};

Se van asignando los valores iniciales en el orden en el que los elementos están mantenidos en memoria.

La memoria es de una dimensión: secuencia de celdas.

Los elementos de un array multidimensional se colocan en la memoria haciendo variar siempre más rápidamente los índices de la derecha.cuads[0][0] cuads[0][1] cuads[1][0] cuads[1][1] cuads[2][0]...

Para cada valor del primer índice se recorren todos los valores del segundo.

Página 35

Page 36: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Inicialización de arraysint cuads[5][2] = {1,1, 2,4, 3,9, 4,16, 5,25};

Página 36

Memoria

cuads[0][0] 1

cuads[0][1] 1

cuads[1][0] 2

cuads[1][1] 4

cuads[2][0] 3

cuads[2][1] 9

cuads[3][0] 4

cuads[3][1] 16

cuads[4][0] 5

cuads[4][1] 25

Si hay menos valores que elementos,el resto se inicializan a cero.

Inicialización a cero de todo un array:

int cuads[5][2] = { 0 };

Page 37: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Inicialización de arraystypedef double tMatriz[3][4][2][3];

tMatriz matriz = {1, 2, 3, 4, 5, 6,

7, 8, 9, 10, 11, 12};

Página 37

Memoria

matriz[0][0][0][0] 1

matriz[0][0][0][1] 2

matriz[0][0][0][2] 3

matriz[0][0][1][0] 4

matriz[0][0][1][1] 5

matriz[0][0][1][2] 6

matriz[0][1][0][0] 7

matriz[0][1][0][1] 8

matriz[0][1][0][2] 9

matriz[0][1][1][0] 10

matriz[0][1][1][1] 11

matriz[0][1][1][2] 12

matriz[0][2][0][0] 0

... 0

Page 38: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Paso de arrays a procedimientos y funcionesSimulación de paso de parámetro por referencia.

Sin poner & en la declaración del parámetro.

Los subprogramas no reciben una copia del array, sino su dirección en memoria.const int Max = 10;

typedef int tTabla[Max];

void inicializa(tTabla tabla);

Cualquier modificación de elementos del array quedará reflejada en el argumento tras la llamada al subprograma:inicializa(array);

Si el procedimiento inicializa() modifica algún elemento de su parámetro tabla, automáticamente quedan modificadoslos del argumento array.

Página 38

Page 39: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Paso de arrays a funciones

Página 39

0 1 2 3 4 5 6 7 8 9

const int Max = 10;typedef int tTabla[Max];void inicializa(tTabla tabla);

void inicializa(tTabla tabla) { for (int i = 0; i < Max; i++) tabla[i] = i;}

int main() { tTabla array; inicializa(array); // array queda modificado for (int i = 0; i < Max; i++) cout << array[i] << " "; ...

Page 40: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Arrays

Paso de arrays a funcionesSi se quiere evitar que se modifique el array en el subprograma, se puede usar const.

const tTabla tabla es un array de constantes.

void muestra(const tTabla tabla);

El argumento que se pase se trata como un array de constantes.

Si en el procedimiento se encuentra alguna instrucción que intente modificar un elemento del array, se mostrará un error de compilación.

void muestra(const tTabla tabla) {

for (int i = 0; i < Max; i++) cout << array[i] << " "; // Se accede, pero no se modifica}

Página 40

Page 41: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 41Fundamentos de la programación: Tipos de datos estructurados

Cadenas de caracteres

Page 42: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Arrays de caracteresCadenas: secuencias de caracteres de longitud variable.

Las variables de cadenas pueden cambiar de secuencias, pasando a tener más o menos caracteres:"Hola" "Adiós" "Supercalifragílistico"

Se guardan en arrays de caracteres: tamaño máximo.

No todas las posiciones del array son relevantes: Longitud de la cadena: número de posiciones (caracteres),

desde la primera, que realmente constituyen la cadena.

Longitud actual: 4

Página 42

H o l a0 1 2 3 4 5 6 7 8 9 1

011

12

13

14

15

16

17

18

19

20

21

Page 43: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Longitud de la cadena

Longitud: 5

Longitud: 21

Necesidad de saber dónde terminan los caracteres relevantes: Mantener la longitud de la cadena como dato asociado. Colocar un carácter de terminación al final (centinela).

Página 43

A d i ó s0 1 2 3 4 5 6 7 8 9 1

011

12

13

14

15

16

17

18

19

20

21

S u p e r c a l i f r a g i l í s t i c o0 1 2 3 4 5 6 7 8 9 1

011

12

13

14

15

16

17

18

19

20

21

A d i ó s \00 1 2 3 4 5 6 7 8 9 10

Page 44: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Cadenas de caracteres en C++Dos alternativas para el manejo de cadenas: Cadenas al estilo de C (terminadas en nulo). Tipo string.

Cadenas al estilo de C Arrays de tipo char con una longitud máxima. Un último carácter especial al final: '\0'

Tipo string Cadenas más sofisticadas. No hay necesidad de establecer una longitud máxima:

Gestión automática de la memoria. Multitud de funciones de utilidad.

Página 44

Page 45: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 45Fundamentos de la programación: Tipos de datos estructurados

Cadenas de caracteresal estilo de C

Page 46: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Cadenas de caracteres al estilo de CArrays de caracteres:

typedef char tCadena[15];

tCadena cadena = "Adiós"; // Se pueden inicializar al declarar

Cuando se inicializa o se lee un array de caracteres se coloca al final un carácter especial: carácter nulo, el que tiene el código ASCII 0 ('\0').Indica que en esa posición termina la cadena.

En el array de caracteres caben tamaño-1 caracteres significativos.

La longitud máxima de la variable cadena es 14.

Pero no se pueden asignar cadenas literales: cadena = "Hola";(Ni copiar cadenas directamente: cad2 = cad1;)

Página 46

cadena A d i ó s \0

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Page 47: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Cadenas de caracteres al estilo de CSe pueden leer de cin y escribir en cout:tCadena cadena;

cin >> cadena; // Se añade automáticamente el nulo finalcout << cadena << endl; // Se muestra sólo hasta el nulo (sin él)

Cuando se lee de cin con el extractor se termina la lectura en el primer carácter de espacio en blanco.

Y no se comprueba si se leen más caracteres de los que caben en la cadena: ¡riesgo de sobrescribir otras zonas de memoria!

El manipulador setw() permite establecer el máximo de caracteres a colocar en la cadena (incluyendo el nulo):cin >> setw(15) >> cadena;

Se puede usar la función getline(cadena, máx), que incluye los caracteres de espacio en blanco que se lean y el nulo final:cin.getline(cadena, 15); // Hasta 14 caracteres relevantes

Página 47

Page 48: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Funciones para cadenas de caracteres al estilo de C (cstring) strlen(cadena): devuelve la longitud actual de la cadena.

cout << "Longitud: " << strlen(cadena);

strcpy(destino, origen): copia la cadena origen en la cadena destino.strcpy(cad2, cad1);strcpy(cad, "Me gusta C++");

strcat(destino, origen): añade (concatena) una copia de origen al final de la cadena destino.typedef char tCad[80];tCad cad1 = "Hola", cad2 = "Adiós";strcat(cad1, cad2); // Ahora cad1 contiene "HolaAdiós"

strcmp(cad1, cad2): compara las cadenas y devuelve 0 si son iguales, un positivo si cad1 es mayor que cad2 o un negativo si cad2 es mayor que cad1.Se entiende mayor lexicográficamente (alfabéticamente) hablando.tCad cad1 = "Hola", cad2 = "Adiós";strcmp(cad1, cad2); // Devuelve un positivo ("Hola" > "Adiós")

http://www.cplusplus.com/reference/clibrary/cstring/

Página 48

Page 49: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres#include <iostream>using namespace std;#include <cstring>int main() { const int MAX = 20; typedef char tCad[MAX]; tCad cadena = "Me gusta C++"; cout << cadena << endl; cout << "Cadena: "; cin >> cadena; // Pon espacios (se lee hasta el primer espacio) cout << cadena << endl; cin.sync(); // Sincronizar la entrada cout << "Cadena: "; cin.getline(cadena, MAX); cout << cadena << endl; cout << "Longitud: " << strlen(cadena) << endl; strcpy(cadena, "Hola"); ...

Página 49

cadenas.cpp

Page 50: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

tCad cadena2 = " amigo"; strcat(cadena, cadena2); cout << cadena << endl; if (strcmp(cadena, cadena2) == 0) cout << "Iguales"; else if (strcmp(cadena, cadena2) > 0) cout << cadena << " es mayor que " << cadena2; else cout << cadena2 << " es mayor que " << cadena; cout << endl;

return 0;}

Página 50

Page 51: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 51Fundamentos de la programación: Tipos de datos estructurados

Cadenas de caracteresde tipo string

Page 52: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Cadenas de caracteres de tipo string El tipo asume la responsabilidad de la gestión de memoria. Tiene definidos operadores sobrecargados

(por ejemplo, + para concatenar). Cadenas más eficientes y seguras de usar.

Biblioteca string (requiere establecer el espacio de nombres a std). Se pueden inicializar en la declaración. Se pueden copiar con el operador de asignación. Se pueden concatenar con el operador +. Multitud de funciones de utilidad.

Página 52

Page 53: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres#include <iostream>#include <string>using namespace std;

int main() { string cad1("Hola"); // inicialización string cad2 = "amigo"; // inicialización string cad3; cad3 = cad1; // copia cout << "cad3 = " << cad3 << endl; cad3 = cad1 + " "; // concatenación cad3 += cad2; // concatenación cout << "cad3 = " << cad3 << endl; cad1.swap(cad2); // intercambio cout << "cad1 = " << cad1 << endl; cout << "cad2 = " << cad2 << endl;

return 0;}

Página 53

string.cpp

Page 54: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

E/S con cadenas de tipo string Se pueden mostrar en la pantalla directamente con cout <<. La lectura con cin >> termina en el primer espacio en blanco.

El resto de los caracteres introducidos quedan en el buffer esperando a la siguiente lectura. Para descartarlos usaremos cin.sync(): cin.sync();

Para leer incluyendo espacios en blanco se usa la función getline():getline(cin, cadena) guarda en la cadena los caracteres leídos hasta el fin de línea (Intro).

Página 54

Observa que las funciones getline() son distintas para cadenas al estilo de C (cin.getline(...))y para cadenas de tipo string (getline(cin, ...)).

Page 55: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

E/S con cadenas de tipo string

Página 55

string2.cpp

#include <iostream>#include <string>using namespace std;

int main() { string nombre, apellidos; cout << "Introduzca un nombre: "; cin >> nombre; cin.sync(); cout << "Introduzca los apellidos: "; getline(cin, apellidos); cout << "Nombre completo: " << nombre << " " << apellidos << endl;

return 0;}

Page 56: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Funciones para cadenas de tipo string substr(posición, longitud): devuelve una subcadena de la cadena

sobre la que se ejecuta la función: longitud caracteres desde la posición.

string cad = "abcdefg";cout << cad.substr(2, 3); // Muestra cde

compare(cadena2): devuelve 0 si las cadenas son iguales, un positivo si cadena2 es mayor que la cadena sobre la que se ejecuta la función y un negativo en caso contrario.

string cad1 = "Hola", cad2 = "Adiós";cout << cad1.compare(cad2);

find(subcadena): devuelve la posición en la que empieza la primera ocurrencia de la subcadena en la cadena sobre la que se ejecuta la función.

string cad = "Hola";cout << cad.find("la"); // Muestra 2

(Recuerda que los arrays de caracteres comienzan con el índice 0.)

Página 56

Notación punto (.)

Page 57: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Funciones para cadenas de tipo string rfind(subcadena): devuelve la posición en la que empieza la última

ocurrencia de la subcadena en la cadena sobre la que se ejecuta la función.

string cad = "Olala";cout << cad.rfind("la"); // Muestra 3

find_first_of(cadena2): devuelve la posición en la que aparece por primera vez cualquier carácter de cadena2 en la cadena sobre la que se ejecuta la función.

string cad = "Olala";cout << cad.find_first_of("aeiou"); // Muestra 2. . .

http://www.cplusplus.com/reference/string/string/

Página 57

Page 58: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Cadenas de caracteres

Más sobre cadenas de tipo string Longitud de una cadena: cadena.length() o cadena.size() Están definidos los operadores relacionales:

if (cad1 <= cad2) ...

Modificación de cadenas:cadena.erase(0, 7); // Elimina 7 caracteres desde el 1ºcadena.replace(9, 5, cad2); // Reemplaza 5 caracteres a partir

// de la posición 9 por cad2cadena.insert(0, cad3); // Inserta en la posición 0 cad3cadena.append(3, '!'); // Añade por el final 3 caracteres

// de signo de exclamación (!)

Acceso a los caracteres de una cadena Como array de caracteres que es: cadena[i], sin control de posibles accesos

a posiciones inexistentes de la cadena (array). Con la función at(índice): cadena.at(i), provoca un error

de ejecución si se intenta acceder a una posición inexistente.

Página 58

Page 59: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Fundamentos de la programación

Página 59Fundamentos de la programación: Tipos de datos estructurados

Estructuras

Page 60: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Estructuras

Colecciones heterogéneas (tuplas, registros)Varios 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 de información por su nombre de campo,con el operador punto (.).struct nombre { // nombre de tipo tipo1 nombre_de_campo1; tipo2 nombre_de_campo2;

...} lista_de_variables; // Puede no haber lista de variables

Página 60

{Identificadorstruct Campo

Variables

}

IdentificadorTipo ;Campo

;

Page 61: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Estructuras

Tipos estructurasDeclaramos un tipo con typedef (ahora el nombre de tipo va al final)y luego usaremos el tipo para declarar variables:typedef struct { string nombre; string apellidos; int edad; string nif;} tPersona;

Las variables de tipo tPersona contienen cuatro datos:nombre, apellidos, edad y nif.tPersona persona;

Acceso a los elementos (campos) con el operador punto (.):persona.nombre // una cadena (string)persona.edad // un entero (int)

Página 61

Page 62: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Estructuras

Agrupación de datos heterogéneostypedef struct { string nombre; string apellidos; int edad; string nif;} tPersona;tPersona persona;

Página 62

Luis Antonionombre

Hernández Yáñezapellidos

22edad

00223344Fnif

Memoria

persona.nombreLuis

Antonio

persona.apellidos

Hernández Yáñez

persona.edad 22

persona.nif00223344

F

persona

Page 63: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Estructuras

Elementos sin orden establecidotypedef struct { string nombre; string apellidos; int edad; string nif;} tPersona;tPersona persona;

Los campos no siguen ningún orden establecido.

Acceso directo por nombre de campo (operador .).

Con cada campo se puede hacer lo que permita su tipo.

Estructuras dentro de estructuras:typedef struct { typedef struct { string dni; ... char letra; tNif nif;} tNif; } tPersona;

Página 63

Las estructuras se pueden pasar por valor o por referencia a los subprogramas.

Page 64: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

1

Combinación de tipos estructuradosconst int Max = 100;typedef struct { string dni; char letra;} tNif;typedef struct { string nombre; string apellidos; int edad; tNif nif;} tPersona;typedef tPersona tLista[Max];typedef double tNotas[Max];typedef struct { tLista lista; tNotas notas; int cont;} tClase;

Página 64

nombre

apellidos

edad

nifdni

letra

tPersona

tNif

nombre

apellidos

edad

nifdni

letra

nombre

apellidos

edad

nifdni

letra

nombre

apellidos

edad

nifdni

letra

nombre

apellidos

edad

nifdni

letra

nombre

apellidos

edad

nifdni

letra

tLista

...

0

2

3

Max-1

Page 65: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosconst int Max = 100;

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

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

typedef tPersona tLista[Max];typedef double tNotas[Max];

typedef struct { tLista lista; tNotas notas; int cont;} tClase;

Página 65

cont

lista

tClase

...

...

notas

Page 66: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructurados#include <iostream>#include <string>using namespace std;#include <iomanip>

const int Max = 100;

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

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

typedef tPersona tLista[Max];typedef double tNotas[Max];

typedef struct { tLista lista; tNotas notas; int cont;} tClase;

Página 66

(continúa...)

bd.cpp

Declaraciones de tiposal principio del programa.

Alcance global(Si algún tipo sólo se usaen un subprograma, se declararádentro de ese subprograma.)

Page 67: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint menu(); // Menú de opciones del programa - devuelve la opción elegida

void inicializa(tClase &clase); // Lista vacía: contador a cero

bool dniOK(string dni); // ¿8 dígitos?

void leeNif(tNif &nif);

string dameNif(tPersona persona); // NIF en forma de cadena

string nombreCompleto(tPersona persona); // Nombre + espacio + apellidos

void leePersona(tPersona &persona);

double leeNota(tPersona persona); // Lee y devuelve la nota de la persona

// Inserta en la lista de la clase la persona y su nota:

bool insertaPersona(tClase &clase, tPersona persona, double nota);

// Muestra los datos de la persona en una línea (sin salto de línea):

void escribePersona(tPersona persona);

double mediaClase(tClase clase); // Nota media de la clase

int mayorNota(tClase clase); // Índice del estudiante con la mayor nota

void listado(tClase clase, int mayor); // Lista de la clase

// mayor es el índice del estudiante con mejor nota

Página 67

(continúa...)Los prototipos, después de los tipos globales

Page 68: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructurados

Página 68

(continúa...)

Recorrido de un string

int menu() { int op; do { cout << "1 - Nuevo estudiante" << endl; cout << "2 - Listado de notas" << endl; cout << "0 - Salir" << endl; cout << "Elige: "; cin >> op; } while ((op < 0) || (op > 2)); return op;}

void inicializa(tClase &clase) { clase.cont = 0; // Basta poner a 0 el contador. No accedemos nunca más allá.}bool dniOK(string dni) { bool ok = true; if (dni.size() != 8) ok = false; else for (int i = 0; i < dni.size(); i++) if ((dni.at(i) < '0') || (dni.at(i) > '9')) ok = false; return ok;}

Page 69: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosvoid leeNif(tNif &nif) { do { cout << "D.N.I. (8 digitos): "; cin.sync(); cin >> nif.dni; } while (!dniOK(nif.dni)); do { cout << "Letra: "; cin.sync(); cin >> nif.letra; nif.letra = toupper(nif.letra); } while ((nif.letra < 'A') || (nif.letra > 'Z'));}

Página 69

(continúa...)

string dameNif(tPersona persona) { return persona.nif.dni + "-" + persona.nif.letra; // Concat. de cadenas}string nombreCompleto(tPersona persona) { return persona.nombre + " " + persona.apellidos; // Concat. de cadenas}

Page 70: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosvoid leePersona(tPersona &persona) { cout << "Nombre (solo uno): "; // Sólo se admiten nombres de una palabra cin.sync(); cin >> persona.nombre; cout << "Apellidos: "; cin.sync(); getline(cin, persona.apellidos); cout << "Edad: "; cin >> persona.edad; leeNif(persona.nif);}

Página 70

(continúa...)

double leeNota(tPersona persona) { cout << "Nota de " << nombreCompleto(persona) << ": "; double nota; cin.sync(); cin >> nota; return nota;}

Page 71: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosbool insertaPersona(tClase &clase, tPersona persona, double nota) { bool ok = true; if (clase.cont == Max) ok = false; else { clase.lista[clase.cont] = persona; clase.notas[clase.cont] = nota; clase.cont++; } return ok;}

Página 71

(continúa...)

void escribePersona(tPersona persona) { cout << setw(25) << persona.nombre + " " + persona.apellidos << " (" << dameNif(persona) << ", " << persona.edad << " años)";}

Page 72: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosdouble mediaClase(tClase clase) { double total = 0.0; for (int i = 0; i < clase.cont; i++) total = total + clase.notas[i]; return total / clase.cont;}

Página 72

(continúa...)

int mayorNota(tClase clase) { double max = 0; int pos = 0; for (int i = 0; i < clase.cont; i++) if (clase.notas[i] > max) { max = clase.notas[i]; pos = i; } return pos;}

Page 73: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosvoid listado(tClase clase, int mayor) { for (int i = 0; i < clase.cont; i++) { escribePersona(clase.lista[i]); cout << " - Nota: " << setw(4) << fixed << setprecision(1) << clase.notas[i]; if (i == mayor) cout << " <<< Mayor nota!"; cout << endl; } cout << endl;}

Página 73

(continúa...)

Page 74: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint main() { tClase clase; inicializa(clase); int op; do { op = menu(); if (op == 1) { tPersona persona; leePersona(persona); double nota = leeNota(persona); if (!insertaPersona(clase, persona, nota)) cout << "Lista llena: imposible insertar" << endl; } else if (op == 2) { int posMayorNota = mayorNota(clase); listado(clase, posMayorNota); } } while (op != 0); return 0;}

Página 74

Page 75: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructurados

Página 75

Page 76: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint main() { tClase clase; inicializa(clase); int op; do { op = menu(); if (op == 1) { tPersona persona; leePersona(persona); double nota = leeNota(persona); if (!insertaPersona(clase, persona, nota)) cout << "Lista llena: imposible insertar" << endl; } else if (op == 2) { int posMayorNota = mayorNota(clase); listado(clase, posMayorNota); } } while (op != 0); return 0;}

Página 76

contlista

clase

...

...

notas

Page 77: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint main() { tClase clase; inicializa(clase); int op; do { op = menu(); if (op == 1) { tPersona persona; leePersona(persona); double nota = leeNota(persona); if (!insertaPersona(clase, persona, nota)) cout << "Lista llena: imposible insertar" << endl; } else if (op == 2) { int posMayorNota = mayorNota(clase); listado(clase, posMayorNota); } } while (op != 0); return 0;}

Página 77

0contlista

clase

...

...

notas

Page 78: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint main() { tClase clase; inicializa(clase); int op; do { op = menu(); if (op == 1) { tPersona persona; leePersona(persona); double nota = leeNota(persona); if (!insertaPersona(clase, persona, nota)) cout << "Lista llena: imposible insertar" << endl; } else if (op == 2) { int posMayorNota = mayorNota(clase); listado(clase, posMayorNota); } } while (op != 0); return 0;}

Página 78

0contlista

clase

...

...

notas

nombre

apellidos

edad

nif dni

letra

persona

Page 79: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint main() { tClase clase; inicializa(clase); int op; do { op = menu(); if (op == 1) { tPersona persona; leePersona(persona); double nota = leeNota(persona); if (!insertaPersona(clase, persona, nota)) cout << "Lista llena: imposible insertar" << endl; } else if (op == 2) { int posMayorNota = mayorNota(clase); listado(clase, posMayorNota); } } while (op != 0); return 0;}

Página 79

0contlista

clase

...

...

notas

Luisnombre

Hernándezapellidos

22

edad

nif00112233

dni

Fletra

persona

Page 80: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint main() { tClase clase; inicializa(clase); int op; do { op = menu(); if (op == 1) { tPersona persona; leePersona(persona); double nota = leeNota(persona); if (!insertaPersona(clase, persona, nota)) cout << "Lista llena: imposible insertar" << endl; } else if (op == 2) { int posMayorNota = mayorNota(clase); listado(clase, posMayorNota); } } while (op != 0); return 0;}

Página 80

0contlista

clase

...

...

notas

Luisnombre

Hernándezapellidos

22

edad

nif00112233

dni

Fletra

persona

9.7nota

Page 81: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint main() { tClase clase; inicializa(clase); int op; do { op = menu(); if (op == 1) { tPersona persona; leePersona(persona); double nota = leeNota(persona); if (!insertaPersona(clase, persona, nota)) cout << "Lista llena: imposible insertar" << endl; } else if (op == 2) { int posMayorNota = mayorNota(clase); listado(clase, posMayorNota); } } while (op != 0); return 0;}

Página 81

0contlista

clase

...

...

notas

Luisnombre

Hernándezapellidos

22

edad

nif00112233

dni

Fletra

persona

nota 9.7

Page 82: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Combinación de tipos estructuradosint main() { tClase clase; inicializa(clase); int op; do { op = menu(); if (op == 1) { tPersona persona; leePersona(persona); double nota = leeNota(persona); if (!insertaPersona(clase, persona, nota)) cout << "Lista llena: imposible insertar" << endl; } else if (op == 2) { int posMayorNota = mayorNota(clase); listado(clase, posMayorNota); } } while (op != 0); return 0;}

Página 82

1contlista

clase

...

9.7

...

notas

Luisnombre

Hernándezapellidos

22

edad

nif00112233

dni

Fletra

persona

9.7nota

Luisnombre

Hernández

apellidos

22edad

nif00112233dni

Fletra

Page 83: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Referencias bibliográficas

Programming. Principles and Practice Using C++B. Stroustrup. Pearson Education, 2009

Programación en C++ para ingenierosF. Xhafa et al. Thomson, 2006

C++: An Introduction to Computing (2ª edición)J. Adams, S. Leestma, L. Nyhoff. Prentice Hall, 1998

El lenguaje de programación C++ (Edición especial)B. Stroustrup. Addison-Wesley, 2002

Página 83

Page 84: Tipos de datos estructurados

Fundamentos de la programación: Tipos de datos estructurados

Luis

Her

nánd

ez Y

áñez

Acerca de Creative Commons

Licencia CC (Creative Commons)Este tipo de licencias ofrecen algunos derechos a terceras personas bajo ciertas condiciones.

Este documento tiene establecidas las siguientes:

Pulsa en la imagen de arriba a la derecha para saber más.

Página 84

Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licenciahará falta reconocer la autoría.

No comercial (Non commercial): La explotación de la obra queda limitada a usos no comerciales.

Compartir igual (Share alike):La explotación autorizada incluye la creación de obras derivadas siempre que mantengan la misma licencia al ser divulgadas.