7
7/23/2019 Manual de Listas de Listas http://slidepdf.com/reader/full/manual-de-listas-de-listas 1/7 Ing. Carlos Valdivia Salazar Ingeniería en C Algoritmos y Estructura de Datos II  LISTAS DE LISTAS DINAMICAS Las Listas de Listas permiten representar los datos mediante el anidamiento de Listas, es decir una Lis definición tiene como un campo mas  a otra Lista, como se vera a continuación. DEFINICIÓN DE REGISTROS struct Curso { char Codigo[MAXCOD]; char Nombre[MAXCAD]; int Cred, HT, HP; char Escuela[MAXCAD]; }; struct ListaCurso { int N, Max; Curso *Data; }; En esta Lista se encuentran almacenados todos los cursos de la Facultad, es decir podemos estar hablando de la Curricula de Estudios de cada escuela.  Valores almacenados en esta Lista Codigo Nombre Cred HT HP Escuela MM451 Matemática I 5 3 3 MM MM325 Calculo Avanzado 4 3 2 MM EE156 Algoritmos I 4 3 2 CI EE112 Sistemas Operativos 4 3 2 CI EE205 Técnicas de Programación 4 3 2 CI FF100 Física I 5 3 3 FF FF200 Electrónica Digital 5 3 2 FF struct Matricula { char CodCur[M char CodSem[M int Nota; }; struct ListaMatr { int N, Max; Matricula *Data };  Los valores almacenados matriculados de un alumno estudiado.  Para el alumno 961664C CodCur C EE156 2 EE112 2 MM451 2 MM451 2  Para el alumno 980205J  EE156 1 EE205 1  Para el alumno 961020A MM451 1 MM325 1

Manual de Listas de Listas

Embed Size (px)

Citation preview

Page 1: Manual de Listas de Listas

7/23/2019 Manual de Listas de Listas

http://slidepdf.com/reader/full/manual-de-listas-de-listas 1/7

Ing. Carlos Valdivia Salazar Ingeniería en C

Algoritmos y Estructura de Datos II

 LISTAS DE LISTAS DINAMICASLas Listas de Listas permiten representar los datos mediante el anidamiento de Listas, es decir una Lis

definición tiene como un campo mas a otra Lista, como se vera a continuación.

DEFINICIÓN DE REGISTROS

struct Curso{

char Codigo[MAXCOD];

char Nombre[MAXCAD];

int Cred, HT, HP;

char Escuela[MAXCAD];

};

struct ListaCurso{

int N, Max;

Curso *Data;};

En esta Lista se encuentran almacenados todos los cursos de la

Facultad, es decir podemos estar hablando de la Curricula deEstudios de cada escuela.

•  Valores almacenados en esta Lista

Codigo Nombre Cred HT HP EscuelaMM451 Matemática I 5 3 3 MM

MM325 Calculo

Avanzado

4 3 2 MM

EE156 Algoritmos I 4 3 2 CIEE112 Sistemas

Operativos

4 3 2 CI

EE205 Técnicas de

Programación

4 3 2 CI

FF100 Física I 5 3 3 FF

FF200 Electrónica

Digital

5 3 2 FF

struct Matricula{

char CodCur[M

char CodSem[M

int Nota;

};

struct ListaMatr{

int N, Max;

Matricula *Data

};• 

Los valores almacenados

matriculados de un alumno

estudiado.

•  Para el alumno 961664C CodCur CEE156 2EE112 2MM451 2MM451 2

• 

Para el alumno 980205J EE156 1EE205 1

•  Para el alumno 961020A MM451 1MM325 1

Page 2: Manual de Listas de Listas

7/23/2019 Manual de Listas de Listas

http://slidepdf.com/reader/full/manual-de-listas-de-listas 2/7

Ing. Carlos Valdivia Salazar Ingeniería en C

Algoritmos y Estructura de Datos II

•  Para el alumno 000306F 

FF100 1999-II 11

FF200 1999-II 10

FF200 2000-I 12

• 

Para el alumno 010330C FF100 2000-I 11

FF200 2000-I 13

struct Alumno{

char Codigo[MACOD];

char Nombre[MAXCAD];

int Edad;

char Escuela[MAXCAD];

ListaMatricula LM; // Lista dentro de otra};

El registro Alumno contiene como un campo de su definición una

Lista declarada anteriormente, lo cual lo convierte en lista de listas a

la Lista Alumno.

struct ListaAlumno{

int N, Max;

Alumno *Data;

};

En esta Lista se encuentran almacenados todos los alumnos de todala Facultad, y por cada alumno también se encuentran almacenados

los cursos que ha llevado durante toda su vida universitaria

ingresados por semestre de estudios.

•  Valores almacenados en esta Lista

Codigo Nombre Edad961664C Fiorella Perez 21

980205J Juan Cortez 25

961020A Maria Socorro 26

979915H Carlos Antón 22

000306F Cesar Sanchez 24

010330C Miguel Díaz 19

Page 3: Manual de Listas de Listas

7/23/2019 Manual de Listas de Listas

http://slidepdf.com/reader/full/manual-de-listas-de-listas 3/7

Ing. Carlos Valdivia Salazar Ingeniería en C

Algoritmos y Estructura de Datos II

TRABAJANDO CON LISTAS DE LISTAS

Cada una de las Listas se sigue trabajando por separado, utilizando sus

 propias funciones básicas:

  Para Lista de Cursos  void IniciaLCurso (ListaCurso &L);

 

void InsertaLCurso (ListaCurso &L, Curso &C)  void EliminaLCurso (ListaCurso &L, int Pos);

  int BuscaLCurso (ListaCurso &L, char Cad[]);

  void PresentaLCurso (ListaCurso &L);

  void CreceLCurso (ListaCurso &L);

  void OrdenaLCurso (ListaCurso &L);

  void TerminaLCurso (ListaCurso &L);

 

Para Lista de Matriculas 

  void IniciaLMatricula (ListaMatricula &L);

  void InsertaLMatricula (ListaMatricula &L, Matricula &M)

  void EliminaLMatricula (ListaMatricula &L, int Pos);

 

int BuscaLMatricula (ListaMatricula &L, char Cad[]);  void PresentaLMatricula (ListaMatricula &L);

  void CreceLMatricula (ListaMatricula &L);

  void OrdenaLMatricula (ListaMatricula &L);

  void TerminaLMatricula (ListaMatricula &L);

 

Para Lista de Alumnos 

  void IniciaLAlumno (ListaAlumno &L);

  void InsertaLAlumno(ListaAlumno &L, Alumno &A);

  void EliminaLAlumno (ListaAlumno &L, int Pos);

  int BuscaLAlumno (ListaAlumno &L, char Cad[]);

  void PresentaLAlumno (ListaAlumno &L);

 

void CreceLAlumno (ListaAlumno &L);

  void OrdenaLAlumno (ListaAlumno &L);

  void TerminaLAlumno (ListaAlumno &L);

LA

NMaxData

LC

Codigo Nombre

Cred HTEscuela

Codigo NombreCred HTEscuela

NMaxData

Codigo Nombre

Edad

Escuela

Codigo Nombre

Edad

Escuela

Page 4: Manual de Listas de Listas

7/23/2019 Manual de Listas de Listas

http://slidepdf.com/reader/full/manual-de-listas-de-listas 4/7

Ing. Carlos Valdivia Salazar Ingeniería en Computación e Informática - UNPRG

Algoritmos y Estructura de Datos II 4

Los procesos a solicitar deben desarrollarse utilizando las funciones principales de cada Lista y

mediante los diagramas de datos encontrar el acceso respectivo para ingresar a los datos.

Aún se puede trabajar en forma individual o con las Listas en forma conjunta

 TRABAJO CON LISTAS EN FORMA INDIVIDUAL

Los procesos se desarrollan solo utilizando sus funciones principales, ejemplo:

   Listado de Cursos de una determinada Escuela y el total de créditos que suman.

Desarrollo:  Lo primero a identificar es si con los datos que se tienen almacenados en nuestras Listas se

 puede dar solución a lo solicitado, la lista que cumple con esto es la Lista de Cursos.

  Como dentro de la Lista de Cursos se encuentra un campo Escuela, entonces mediante ese

campo se debe realizar el reporte.

  Todos los reportes necesitan de un nuevo proceso, dentro del cual se utilizan los procesos

 básicos de la Lista que se esta utilizando.

void ListadoCursos(ListaCursos &LC) // Utilizando acceso mediante el operador “ * “

{

1  char Cad[MAXCOD]; // para leer el valor de la escuela para el reporte

2  int i, TotalCred = 0; // Para almacenar el total de créditos de la curricula

4 LeeCad(“Ingrese Escuela a Reportar”, Cad);

5  for(i = 0; i <LC.N; i++)

6  {

7  if (strcmp(( *(LC.Data + i)).Escuela,Cad) == 0 )

8  {

9  PresentaCurso(*(LC.Data + i)); // Presenta un solo Curso

10  TotalCred++;

11  }

12  }

13  if (TotalCred > 0)

14  printf(“Total de Creditos de la Escuela %s es %d”, Cad, TotalCred);

15  getch();

 TRABAJO CON LISTAS EN FORMA CONJUNTA

Los procesos se desarrollan utilizando las operaciones básicas de las Listas y nuevos procesos que permitan trabajar las listas de manera conjunta, ejemplo:

   Ingresado un código de Alumno y un código de Semestre. Mostrar datos del alumno y datos

de los cursos que ha llevado en dicho Semestre, a la vez que se muestran las notas obtenidas

en dichos cursos.

Desarrollo:  Lo primero a identificar es cual de las listas es la que va a permitir trabajar con los datos que se

solicitaran, como es código de alumno y código de semestre.

  Con solamente tener el código de un alumno, de manera inmediata mediante un busca

encontramos la entrada dentro de ListaAlumno. ¿Cierto? ¿Porqué utilizar un busca?

Page 5: Manual de Listas de Listas

7/23/2019 Manual de Listas de Listas

http://slidepdf.com/reader/full/manual-de-listas-de-listas 5/7

Ing. Carlos Valdivia Salazar Ingeniería en Computación e Informática - UNPRG

Algoritmos y Estructura de Datos II 5

  El reporte solicita datos del alumno, los cuales ya se encontraron por estar dentro de la Lista de

alumnos, y como cada registro alumno tiene como un campo ListaMatricula, solamente queda

 buscar dentro de esta Lista, sin tener necesidad de salir hacia otra.

 

La búsqueda debe hacerse mediante el código de semestre ingresado.

void ListadoCursosAlumno(ListaAlumno &LA, ListaCurso &LC){

1 char Cod[MAXCOD], Sem[MAXCOD]; // Para leer código de alumno y semestre

2 int i;

4  LeeCad(“Ingrese código de Alumno”, Cod);

5 int Pos = BuscaLAlumno(LA, Cod); // Buscar el alumno

6  if (Pos != -1) // El alumno fue encontrado

7  {

8  LeeCad(“Ingrese código de Semestre”, Sem); // Pedir semestre para buscar datos

9  EncuentraCurso((*(LA.Data + Pos)).LM, LC, Sem); // Enviar la lista de matricula a otro proceso

10  }

11  else12  puts(“Alumno no existe...”);

13  getch();

}

void EncuentraCurso(ListaMatricula &LM, ListaCurso &LC, char Sem[]){

1  int i;

3 if (LM.N > 0) // Tiene registros

4  {

5  for(i = 0; i < LM.N; i++)

6  {

7  Matricula Aux;

8  Aux = (*(LM.Data + i)); //Sacar un registro en un auxiliar

9  if (strcmp(Aux.CodSem, Sem) == 0

10  {

11  int Pos = BuscaLCurso(LC, Aux.CodCur); // Buscar el curso

12 if (Pos != -1)

13  PresentaCurso(*(LC.Data + Pos)); // mostrar el curso encontrado

14  }

15 }

16  }

17  else18  puts(“Alumno no tiene registros de matricula...”);

19  getch();

}

Page 6: Manual de Listas de Listas

7/23/2019 Manual de Listas de Listas

http://slidepdf.com/reader/full/manual-de-listas-de-listas 6/7

Ing. Carlos Valdivia Salazar Ingeniería en Computación e Informática - UNPRG

Algoritmos y Estructura de Datos II 6

RESPONDER RAPIDAMENTE

Utilizando los datos de ejemplo de las Listas, responder a las siguientes interrogantes:

1. 

Cuantos cursos tiene la curricula de Computación?

2.  Cuantos Créditos acumula la curricula de Física?

3.  Que curricula tiene la mayor cantidad de horas teóricas?

4.  Cuantos alumnos tiene la escuela de Estadística?

5.  Cuantos alumnos tiene la facultad?

6.  Que cantidad de matriculados hubo en el semestre 2000-I? 

7. 

Como se llama el alumno que tuvo mayor nota en todo el semestre 2000-I? 

8.  Como se llaman los alumnos que han desaprobado y en que curso fue? 

9.  En el semestre 1999-II, como se llaman los cursos que se dictaron? 

10. Cual es el ponderado del alumno 000306F en el semestre 1999-II? 

Page 7: Manual de Listas de Listas

7/23/2019 Manual de Listas de Listas

http://slidepdf.com/reader/full/manual-de-listas-de-listas 7/7

Ing. Carlos Valdivia Salazar Ingeniería en Computación e Informática - UNPRG

Algoritmos y Estructura de Datos II 7

DESARROLLAR LOS SIGUIENTES PROCESOS MEDIANTE PROGRAMACION

1. 

Listado de alumnos de una determinada Escuela.

2. 

Total de Alumnos de una determinada Escuela y el promedio de sus edades.

3.  Mostrar el nombre del alumno de mayor edad de toda la Facultad e indicar a que Escuela

 pertenece.

4.  Listado de alumnos que sus primeras dos letras de su apellido coincidan con las ingresadas por

teclado.

5. 

Listado de alumnos de un determinado Código de ingreso (ejemplo: 98, 99, 00, 01).

6. 

Total de alumnos de las diferentes escuelas de la Facultad.

7.  Listado de Cursos ( o curricula de estudios) de una determinada Escuela Profesional.

8.  Total de créditos de cada una de las curriculas de las Escuelas Profesionales.

9.  Mostrar el total de alumnos matriculados en un determinado semestre de estudios (ejemplo:

1999-I, 1999-II)

10. Ingresado el código de un Alumno, encontrar cuantas veces esta matriculado sin importar el

semestre de estudios, mostrar todos los datos del alumno.

11. Ingresado el código de un Alumno y el código de un semestre de estudios, indicar en cuantos

cursos estuvo matriculado.

12. 

Ingresado el código de un alumno y el código de un semestre de estudios, indicar el nombre de

cada curso y la nota que obtuvo en dicho curso.

13. Obtener el promedio ponderado de un alumno en un determinado semestre.

14. Total de alumnos matriculados de una determinada Escuela en un semestre específico.

15. Mostrar el Record Académico de un determinado alumno (Son todos los cursos que ha llevado

el alumno durante su vida universitaria y que los ha aprobado).

16. Mostrar Nombre y edad de los alumnos matriculados en un determinado semestre.

17. Ingresado el código de un curso, mostrar cuantos alumnos se han matriculado en un

determinado semestre de estudios.

18. Listado de alumnos en forma ordenada que están matriculados en un curso determinado por

semestre (utilizar una Lista auxiliar).

19. 

Total de aprobados y desaprobados de un semestre.

20. 

Generar el Record de Notas de un alumno en un semestre.