La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota;"— Transcripción de la presentación:

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

2 Ejemplo: Vector de Objetos #include class estudiante { private: int aCarne; char aNombre[20]; float aNota; int aAnno_ing;

3 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[]); };

4 //Constructores estudiante::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; }

5 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; }

6 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; }

7 void main(void) { estudiante grupo1[10]; int aCarne; char aNombre[20]; float aNota; int aAnno_ing; int k; //Ciclo de Lectura de datos for(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… }

8 //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(); }

9 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.)

10 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);

11 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; }

12 Finalmente luego de tener “lleno” el vector de objetos se invoca la función y se imprimen los resultados: struct resultado result; // Variable auxiliar buscar_mejor(grupo1, result); cout<<"El mejor estudiante es:"<<"\n"; cout<<result.id; cout<<result.nota;

13 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

14 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 las acciones llevadas a cabo y el valor retornado (si lo hay)

15 Color Ejemplo: Tipo de datos Color 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

16 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: Ninguna Post: Si c es un color primario, entonces Primario devuelve verdadero, sino devuelve falso.

17 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

18 Especificación de un Tipo de Datos Agregado Aparte de lo anterior se debe especificar: Componentes: Número y tipo Se 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

19 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?

20 Cadena_car Ejemplo: tipo de dato iterado Cadena_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

21 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.

22 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.


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

Presentaciones similares


Anuncios Google