Licenciatura en Ciencia de la Computación TIPOS DE DATOS ABSTRACTOS TDA Rosa Barrera Capot rosa.barrera@usach.cl ¿Qué es un TDA? Supongamos el siguiente problema: ¿Listar a todos mis respectivos teléfonos, cumpleaños este mes? amigos, con sus que estarán de ¿¿¿Cómo lo haríamos con las herramientas que tenemos??? ¿Qué es un TDA? Es un conjunto de datos donde: Permiten agrupar varios datos, mantengan algún tipo de relación Pueden ser diferente tipo que ES UN NUEVO TIPO DE DATO, QUE AGRUPA UN CONJUNTO DE DATOS Declaración de TDA Formato definición de tipo: struct Id_nuevo_TIPO { Tipo Id_var; Tipo Id_var; …. Tipo Id_var; }; Formato declaración: Id_nuevo_TIPO Id_var1 [ ,Id_var2, …]; Ejemplo: Declaración del tipo: struct Agenda { char nombre[30]; char fono[12]; int mes_c; }; Declaración de variables: Agenda a,b; Primeros programas en C++ Programa muestra el teléfono de mis amigos que están de cumpleaños. #include <iostream.h> struct Agenda{ char nombre[30]; char fono[12]; int mes_c; }; int main() { int i,n; Agenda a; cout <<“Cuantos datos desea ingresar”; cin >> n; for( i=0; i < n; i ++) { ….. } cout << “ Los datos de mis amigos que están de cumpleaños son:” << endl; for( i=0; i < n; i ++) ….. return 0; } Primeros programas en C++ Programa muestra el teléfono de mis amigos que están de cumpleaños. #include <iostream.h> #define Max 30 struct Agenda{ char nombre[30]; char fono[12]; int mes_c; }; int main() { int i,n; Agenda a[Max]; cout <<“Cuantos datos desea ingresar”; cin >> n; for( i=0; i < n; i ++) { ….. } cout << “ Los datos de mis amigos que están de cumpleaños son:” << endl; for( i=0; i < n; i ++) ….. return 0; } #include <iostream.h> #define Max 30 struct Agenda{ char nombre[30]; char fono[12]; int mes_c; }; void llenar(Agenda a[Max],int n); //Ingresar elementos a la estructura void Mostrar(Agenda a[Max],int n); //Muestra elementos a la estructura void Mostrar(Agenda a[Max],int n, int M); //Muestra nombres y telefonos de quienes están de cumpleaños en M int pide_n(); // Ingresa largo validado int main() { int n,Mes; Agenda a[Max]; cout <<“Cuantos amigos desea ingresar”; n=pide_n(); llenar(a,n); cout <<“Ingrese mes que desea chequear cumpleaños”; cin>>Mes; cout << “De mis amigos : \n”; Mostrar(a,n); cout<<“Los que est{an de cumpleaños en “<<Mes <<“son: “; Mostrar(a,n,Mes); return 0; } void llenar(Agenda a[Max],int n) { int i; for(i=0; i < n; i++) { cout <<“Nombre Amigo ” << i+1<<“:\t”; cin >> a[i].nombre; cout <<“Su telefono: \t”; cin >> a[i].fono; cout <<“Mes de nacimiento :\t”; cin >> a[i].mes_c; } } void Mostrar(Agenda a[Max],int n) { int i; for(i=0; i < n; i++) cout <<a[i].nombre << “:\t” <<a[i].fono << “:\t” <<a[i].mes_c <<endl; } void Mostrar(Agenda a[Max],int n, int M) { int i; for(i=0; i < n; i++) if (a[i].mes_c == M) cout <<a[i].nombre << “:\t” <<a[i].fono << endl; } int pide_n() { int n; do { cout <<“Ingrese numero de amigos (Máximo ”<<Max<<“): “; cin >> n; if (n < 1 || n > Max) cout <<“ERROR, intente de nuevo”; } while (n < 1 || n > Max); return n; } Notas Importantes El nombre del TDA indica donde se localiza el grupo en la memoria de la computadora Para pasar como parámetro un TDA, sólo se envía el Identificador de la variable, pues esta contiene la dirección del primer elemento. Por defecto, al pasar un TDA a una función, este es un parámetro por referencia Ejercicios 1. En un estudio de las carreras de las universidad, se pide que: Entregue el promedio del puntaje de la P.S.U. de los alumnos que ingresaron a la carrera LCC el año 2010. El promedio de edad de los mismos alumnos. Cuantos de ellos pusieron la carrera en alguna de las cinco primeras opciones. Además de decir cuántos, debe mostrar el nombre y rut de estos postulantes Ejercicios 2. Dada la siguiente estructura de datos: struct datos { char nombre[30]; int esc; /*escolaridad: básica, media o superior */ int estado; /* completa o incompleta */ int edad; ... /* Puede agregar campos, si lo considera necesario */ }; Realice: a) Muestre el nombre de las personas que han completado enseñanza básica, media o superior. –tiene que indicar el tipo de escolaridad que tieneb) Calcule la media por edad. c) Calcule la media por edad y tipo de escolaridad incompleta. d) Indique en que tipo de escolaridad incompleta existe una mayor cantidad de personas.