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

Post on 21-Apr-2015

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Estructuras de Datos

Cont. C++ y Tipos de Datos

Ejemplo: Vector de Objetos

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

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

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

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

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

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…}

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

}

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

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

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

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;

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

• 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)

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

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.

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

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

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

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

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

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.

top related