La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Guía teórica de manejo de estructuras de datos

Presentaciones similares


Presentación del tema: "Guía teórica de manejo de estructuras de datos"— Transcripción de la presentación:

1 Guía teórica de manejo de estructuras de datos

2 ¿QUÉ ES UNA ESTRUCTURA?  En C++ una estructura es una colección de variables que se referencian bajo el mismo nombre. Las variables que forman la estructura son llamados elementos estructurados. Generalmente, todos los elementos en la estructura están relacionados lógicamente unos con otros. Por ejemplo, se puede representar una lista de nombres de empleados en una estructura. Mediante la palabra clave struct se le indica al compilador que defina una plantilla de estructura.

3 EJEMPLOS DE ESTRUCTURAS
struct Empleado{ string sNombre; int iEdad; string sDomicilio; string sCiudad; char cSexo; int iLegajo; }; struct Persona{ string sNombre; string sApellido; int iEdad; double dAltura; }; struct Jugador { string sNombre; string sApellido; int iCamiseta; int iEdad; double dAltura; int iCantGoles; }; Nota: el punto y coma “;” al finalizar la declaración de la estructura es obligatorio, ya que sino el programa no compila. Las variables del tipo estructuras, al igual que las variables vistas anteriormente, pueden ser pre inicializadas en la declaración: Empleado miEmpleado={"Vicente Fernandez",40,"Corrientes 348","Capital Federal","M",12345};

4 ¿CÓMO USO UNA ESTRUCTURA?
void main() { Jugador miJugador; //Declaro miJugador miJugador.Nombre = "Ezequiel"; //defino propiedad miJugador.Camiseta = 10; //defino propiedad cout << "Ingrese la edad del jugador: "; cin >> miJugador.Edad; //Usuario ingresa la edad del jugador }

5 ESTRUCTURAS COMO PARÁMETROS
Podemos pasar las estructuras o sus atributos como parámetros de una función o de un procedimiento Vamos a definir una nueva estructura para mostrar un ejemplo de esto: El prefijo ty adelante del nombre de la estructura es para saber que es un nuevo tipo de dato (viene de type) struct tyMateria { string NombreMateria; int Aula; int CantidadAprobados; int NotaMasAlta; string AlumnoNotaMasAlta; float PromedioAprobados; }; De cada materia queremos saber su nombre, el aula donde se dicta, la cantidad de aprobados, la nota más alta y que alumno la obtuvo y el promedio de los aprobados. Importante: Recuerden que las estructuras se definen fuera del main!

6 Vamos a crear dos funciones que utilizaremos más adelante:
float calcularPromedio(int iAcum, int iCant) { int iProm; iProm = iAcum * 1.0 / iCant; return iProm; } void mostrarDatos(tyMateria materia) { //recibo la materia por parámetro y muestro todos sus atributos cout << "Nombre: " << materia.NombreMateria << endl; cout << "Aula: " << materia.Aula << endl; cout << "Cantidad de alumnos aprobados: " << materia.CantidadAprobados << endl; cout << "Nota mas alta: " << materia.NotaMasAlta << endl; cout << "Alumno con nota mas alta: " << materia.AlumnoNotaMasAlta << endl; cout << "Promedio de las notas: " << materia.PromedioAprobados << endl; Esta función calcula el promedio como lo hacemos siempre, por ahora nada nuevo. Esta función recibe por parámetro una estructura, eso está bien? Claro que sí! La estructura es un tipo de dato como cualquier otro. Entonces la función recibe la estructura y la utiliza para ir mostrando todos sus atributos.

7 Creamos nuestra estructura y pedimos todos los datos necesarios para llenar sus atributos
void main(){ int iCantAlumnos; int iNota; string sNombre; int iAcumNotasAprobadas = 0; //Declaro la estructura y defino propiedades iniciales tyMateria estaMateria; estaMateria.CantidadAprobados = 0; estaMateria.NotaMasAlta = 0; estaMateria.PromedioAprobados = 0; /*Pido al usuario que me de las propiedades de la estructura que no puedo definir por mi cuenta*/ cout << "Ingrese nombre de la materia" << endl; cin >> estaMateria.NombreMateria; cout << "Ingrese el aula" << endl; cin >> estaMateria.Aula; cout << "Ingrese cantidad de alumnos" << endl; cin >> iCantAlumnos;

8 Por cada alumno, pedimos su nombre y su nota, verificamos si esta última supera a la nota más alta de la materia y en este caso actualizamos la nota más alta y el alumno que la obtuvo. for (int i = 1; i <= iCantAlumnos; i++) { //Por cada alumno pido su nombre y su nota en esta materia cout << "Ingrese nombre del alumno" << endl; cin >> sNombre; cout << "Ingrese nota"<<endl; cin >> iNota; if (iNota >= 6) { //Si el alumno aprobó, aumento en 1 la cantidad de aprobados de la materia. estaMateria.CantidadAprobados++; //Acumulo las notas de los alumnos iAcumNotasAprobadas = iAcumNotasAprobadas + iNota; } if (iNota > estaMateria.NotaMasAlta) { /*Si la nota del alumno supera la nota más alta de la materia, la misma tendrá una nueva nota más alta y un nuevo alumno con nota más alta.*/ estaMateria.NotaMasAlta = iNota; estaMateria.AlumnoNotaMasAlta = sNombre;

9 Ahora viene lo interesante
if (iCantAlumnos > 0) { /*Si la cantidad de alumnos es mayor a cero, calulo el promedio de sus notas. Para esto, llamo a mi función calcularPromedio y le paso, las notas acumuladas y la cantidad de aprobados (atributo de la materia)*/ estaMateria.PromedioAprobados = calcularPromedio(iAcumNotasAprobadas, estaMateria.CantidadAprobados); //Muestro el contenido de la estructura materia mostrarDatos(estaMateria); } else { cout << "No hay alumnos en la materia " << estaMateria.NombreMateria << endl; system("pause"); } //fin del main

10 Hagamosle zoom a esta línea de código
estaMateria.PromedioAprobados = calcularPromedio(iAcumNotasAprobadas, estaMateria.CantidadAprobados); Nuestra función calcularPromedio recibía dos parámetros de tipo int llamados iAcum e iCant. En esta línea de código estamos haciendo dos cosas: A calcularPromedio le estamos pasando como parámetro el acumulador de notas aprobadas y el atributo de cantidad de aprobados de la estructura materia Al atributo promedio aprobados de la materia le estamos guardando lo que devuelve la función promedio Importante! Cuando la función calcular promedio recibe como parámetro estaMateria.CantidadAprobados no está recibiendo toda la estructura, solo recibe lo que se almacena en el atributo cantidad aprobados de la materia. La función no tiene conocimiento de que existe una estructura materia que tiene ciertos atributos, solo recibe lo que le pasan desde el main.

11 Ahora hagamosle zoom a esta otra línea de código
mostrarDatos(estaMateria); Nuestro procedimiento mostrarDatos recibía un único parámetro de tipo tyMateria que lo llamaba materia. Acá lo que estamos haciendo es, justamente, pasarle nuestra materia llamada estaMateria al procedimiento para que éste último la maneje como quiera y haga lo que necesite hacer. Importante! Nótese que acá estamos pasando como parámetro la estructura entera. De esta forma, la función/procedimiento que recibe esta estructura, la maneja según sus necesidades ya que tiene acceso todos los atributos de la misma. Por ejemplo, mostrarDatos muestra por pantalla cada atributo de la materia que le pasamos por parámetro.

12 RESUMEN Las estructuras son tipos de datos que nos permiten agrupar en ellas un conjunto de variables que los llamamos atributos o propiedades. Los atributos tienen un tipo como cualquier variable y se utilizan como una variable común y corriente. Al crear una estructura estamos creando un nuevo tipo de dato. Debo definirla (crearla), declararla e incializarla. Las estructuras pueden ser pasadas por parámetro completamente a un procedimiento o una función. Podemos pasar un atributo de una estructura como parámetro a una función o procedimiento, pero la función/procedimiento no se enterará que hay una estructura, solo recibirá un dato del tipo de dato correspondiente que se le envía cuando se llama a la función/procedimiento. Las estructuras deben estar definidas fuera del main.


Descargar ppt "Guía teórica de manejo de estructuras de datos"

Presentaciones similares


Anuncios Google