Manual de Listas de Listas
-
Upload
jose-piscoya -
Category
Documents
-
view
234 -
download
0
Transcript of 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
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
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
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
3
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?
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;
3
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;
2
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();
}
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?
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.