Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class...
-
Upload
almudena-guillen -
Category
Documents
-
view
3 -
download
0
Transcript of Estructuras de Datos Cont. C++ y Tipos de Datos. Ejemplo: Vector de Objetos #include class...
![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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/1.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/2.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/3.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/4.jpg)
//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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/5.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/6.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/7.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/8.jpg)
//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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/9.jpg)
• 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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/10.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/11.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/12.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/13.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/14.jpg)
• 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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/15.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/16.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/17.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/18.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/19.jpg)
• 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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/20.jpg)
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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/21.jpg)
• 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;](https://reader033.fdocuments.net/reader033/viewer/2022051616/55365b91550346156f8b47d3/html5/thumbnails/22.jpg)
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.