estructuras de datos cont. c++ y tipos de datos. ejemplo: vector de objetos #include class...

22
Estructuras de Datos Cont. C++ y Tipos de Datos

Upload: almudena-guillen

Post on 21-Apr-2015

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Estructuras de Datos

Cont. C++ y Tipos de Datos

Page 2: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Ejemplo: Vector de Objetos

#include <iostream.h>#include <string.h>class estudiante{ private: int aCarne; char aNombre[20]; float aNota; int aAnno_ing;

Page 3: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

public: estudiante( int eCarne, float eNota, char eNombre[], int eAnno_ing); estudiante(); //Constructor por defecto float ver_nota(); int key(); void ver_nombre(); int ver_anno();

void asignar_nota(float eNota); void asignar_carne(int eCarne); void asignar_anno(int eAnno_ing); void asignar_nombre(char eNombre[]);};

Page 4: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

//Constructoresestudiante::estudiante( int eCarne, float eNota, char eNombre[ ], int eAnno_ing){ aCarne=eCarne; aNota=eNota; strcpy(aNombre, eNombre); aAnno_ing=eAnno_ing;}

estudiante::estudiante(){ aCarne=0; aNota=0; aNombre[0]='\0'; aAnno_ing=0;}

Page 5: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

float estudiante::ver_nota(){ return aNota; }

void estudiante::ver_nombre(){ cout<<aNombre; }

int estudiante::ver_anno(){ return aAnno_ing;}

int estudiante::key(){ int aKey; aKey=((aAnno_ing)*100000+aCarne); return aKey;}

Page 6: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

void estudiante::asignar_carne(int eCarne){ aCarne=eCarne; }

void estudiante::asignar_nota(float eNota){ aNota=eNota; }

void estudiante::asignar_nombre(char eNombre[]){ strcpy(aNombre, eNombre); }

void estudiante::asignar_anno(int eAnno_ing){ aAnno_ing=eAnno_ing; }

Page 7: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

void main(void){ estudiante grupo1[10];

int aCarne; char aNombre[20]; float aNota; int aAnno_ing; int k;

//Ciclo de Lectura de datosfor(k=0;k<10;k++){

cout<<"Estudiante #:" << k+1;cout<<"Entre Carnet:";cin>>aCarne;grupo1[k].asignar_carne(aCarne);…//Igual se hace para el nombre, la nota y el año de ingreso…}

Page 8: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

//Ciclo para imprimir el arreglo de objetos:

for(k=0;k<10;k++){ cout<<"Estudiante:" <<k+1<<"\n";

cout<<grupo1[k].key(); grupo1[k].ver_nombre(); cout<<grupo1[k].ver_nota();

cout<<grupo1[k].ver_anno();}

}

Page 9: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

• Usando el arreglo de estudiantes del ejemplo

anterior, se implementará una función que busca el estudiante con la mayor nota y devuelve su número de identificación y la nota

• Los dos resultados que la función debe retornar se devolverán en una estructura simple (aunque también se podría realizar con dos parámetros pasados por referencia.)

Page 10: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Se define antes del main la siguiente estructura y se especifica la función buscar_mejor:

struct resultado{float nota;int id;

};

void buscar_mejor( estudiante grupo[ ], resultado &result);

Page 11: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

La implementación de la función es:

void buscar_mejor(estudiante grupo[ ], resultado &result){ float temp_nota=0.0; int temp_id;

for(int i=0; i<10; i++){ if((grupo[i].ver_nota())>temp_nota) { temp_nota=grupo[i].ver_nota(); temp_id=grupo[i].key(); } }result.nota=temp_nota;result.id=temp_id;}

Page 12: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Finalmente luego de tener “lleno” el vector de objetos se invoca la función y se imprimen los resultados:

struct resultado result; // Variable auxiliarbuscar_mejor(grupo1, result);cout<<"El mejor estudiante es:"<<"\n";cout<<result.id;cout<<result.nota;

Page 13: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Especificación de un Tipo de Datos Escalar

• Identificación: Debe tener un nombre

• Dominio: Conjunto de valores que hacen parte del tipo. Puede ser explícito o implícito

• Operaciones: Que operaciones son aplicables a los valores del tipo y que efecto tiene su aplicación. Normalmente a una operación se le asocia un símbolo

Page 14: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

• El efecto de la operación puede ser descrito mediante:

– Mediante Pre y Post Condiciones las cuales pueden ser expresadas mediante:

• Descripciones verbales• Cálculo de Predicados• Pseudo Lenguaje de Programación

– Axiomas

Condiciones que deben cumplirse para que la operación pueda realizarse

Describen el resultado de lasacciones llevadas a cabo y el valor retornado (si lo hay)

Page 15: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Ejemplo: Tipo de datos ColorColor• Dominio (explícito): {rojo, amarillo, azul,

verde, naranja, violeta}*• Operaciones: Se definirán 4 operaciones:

– Mezclar: Combina 2 colores primarios y retorna otro color (secundario)

– Primario: Dice si un color es primario o no– Formado_por: Devuelve los colores que

conforman a un color secundario– Asignar: Asigna un color dado a una variable

de tipo color

*Los 3 primeros son colores primarios

Page 16: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Especificación de las operaciones

Color Mezclar(Color c1, Color c2) Pre: c1 y c2 son colores primarios.Post: La mezcla es un color formado por la

combinación de los colores c1 y c2 en cantidades iguales.

bool Primario(Color c)Pre: NingunaPost: Si c es un color primario, entonces Primario

devuelve verdadero, sino devuelve falso.

Page 17: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

void Formado_por(Color c, *Color c1, *Color c2)

Pre: c es un color secundario.

Post: c1 y c2 son dos colores primarios que forman el color c.

void Asignar(*Color c1, Color c2)

Pre: Ninguna

Post: c1 tiene el valor de c2.

Nota: El símbolo * se utiliza en los parámetros para indicar que se trata de un parámetro de retorno

Page 18: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Especificación de un Tipo de Datos Agregado

Aparte de lo anterior se debe especificar:• Componentes: Número y tipoSe considerarán estos casos:

- Tipos de Datos con un número de componentes fijo de tipo variable (como las estructuras) Tipos Estructurados- Tipos de Datos con número variable de componentes pero todos ellos del mismo tipo Tipos iterados

Page 19: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

• Estructura de Composición: Es la forma como están unidos los componentes. Los componentes se unen a través de enlaces.– Aridad: Número de enlaces de cada

componente– Ciclicidad: ¿Es posible recorrer la cadena de

enlaces a partir de un elemento y volver a él?

Page 20: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

Ejemplo: tipo de dato iterado CCadena_caradena_car• Dominio: Todas las cadenas de caracteres

ASCII de tamaño 5.• Operaciones:

– Car_izq: Devuelve el primer carácter de la cadena

– Agregar: Añade un carácter al final de la cadena

– Invertir: Invierte la cadena

Page 21: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

• Elementos componentes: Caracteres ASCII. Máximo 5.

• Estructura de composición: Relación lineal y no cíclica entre los componentes

• Especificación de las operaciones:char Car_izq(Cadena_car c)pre: El tamaño de la cadena es > 0 y < 6.post: El valor devuelto es el primer carácter de la

cadena c.

Page 22: Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;

void Agregar(char l, Cadena_car c)pre: El número de elementos de la cadena c es < 5.post: La cadena c tiene una longitud mayor en una

unidad a la longitud que tenía y el carácter contenido en l es su último carácter.

void Invertir(*Cadena_car c)pre: El número de elementos de la cadena c es < 6.post: La secuencia de caracteres en la cadena c

está invertida.