Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct
- {
- int nroParcial;
- char dni[9];
- char asignatura[20];
- float Nota; ///> 0 && =<10
- } Examen;
- typedef struct
- {
- Examen e;
- struct nodo2 * anterior;
- struct nodo2 * siguiente;
- } nodo2;
- nodo2 * inicLista ();
- nodo2 * listaCreada (nodo2 * lista);
- nodo2 * crearNodo(Examen ex);
- nodo2 * agregarAlPrincipio (nodo2 * lista, nodo2 * nuevo);
- nodo2 * recorrerYMostrar (nodo2 * lista);
- Examen cargaExamen (char materia[], char dni[], int nroParcial, float nota);
- nodo2 * eliminarDni (nodo2 * lista, char docu[]);
- int ExisteDni (nodo2 * lista, char asignatura[], char dni[]);
- float promedioNotas (nodo2* lista, char materia[], char dni[]);
- int cuentaAlumnos (nodo2* lista, char materia[]);
- int main()
- {
- nodo2* lista = inicLista();
- nodo2 * nuevo;
- Examen stExamen;
- int opcion, flag =0, cont =0;
- float prom =0;
- lista = listaCreada(lista);
- printf("\nINGRESE UN INCISO PARA REVISAR: ");
- scanf("%d", &opcion);
- switch (opcion)
- {
- case 1:
- printf("\nLO QUE EL PUBLICO QUIERE: FUNCION ELIMINAR DNI\n");
- recorrerYMostrar(lista);
- lista = eliminarDni(lista, "00000013");
- lista = eliminarDni(lista, "00000008");
- printf("\n\n NUEVA LISTA: \n");
- recorrerYMostrar(lista);
- break;
- case 2:
- printf("\n(Recursivo) Verificar si existe un determinado DNI en una asignatura dada\n");
- flag = ExisteDni(lista, "matematica", "45612857");
- if (flag == 1)
- {
- printf("\n El alumno cursa la materia");
- }
- else
- printf("\n El alumno no cursa la materia");
- break;
- case 3:
- printf("\nRealizar un algoritmo que informe el promedio de nota por DNI de una asignatura en particular\n");
- prom = promedioNotas(lista, "matematica", "45612358");
- printf("\n\nEL PROMEDIO ES: %2.f", prom);
- break;
- case 4:
- printf("\n (Recursivo) Mostrar todos los nodos con DNI, Nro. parcial y Nota de una asignatura en particular \n");
- mostrarPorAsignatura_recursivo(lista, "matematica");
- break;
- case 5:
- printf("\n (Recursivo) Devolver la cantidad de alumnos(DNI) de una asignatura en particular.\n");
- cont = cuentaAlumnos(lista, "matematica");
- printf("\n\n %d ALUMNOS ESTUDIAN DICHA ASIGNATURA", cont);
- break;
- default:
- printf("\n\nOPCION INCORRECTA.");
- }
- return 0;
- }
- nodo2 * inicLista ()
- {
- return NULL;
- }
- nodo2 * crearNodo (Examen ex)
- {
- nodo2 * aux= malloc(sizeof(nodo2));
- aux->e = ex;
- aux->anterior = NULL;
- aux->siguiente =NULL;
- return aux;
- }
- nodo2 * agregarAlPrincipio (nodo2 * lista, nodo2 * nuevo)
- {
- if (lista == NULL)
- {
- lista = nuevo;
- }
- else
- {
- nuevo->siguiente = lista;
- lista->anterior = nuevo;
- lista = nuevo;
- }
- return lista;
- }
- Examen cargaExamen (char materia[], char dni[], int nroParcial, float nota)
- {
- Examen stEx;
- fflush(stdin);
- strcpy(stEx.asignatura, materia);
- fflush(stdin);
- strcpy(stEx.dni, dni);
- stEx.nroParcial = nroParcial;
- stEx.Nota = nota;
- return stEx;
- }
- void mostrarExamen (Examen ex)
- {
- printf("\nMATERIA: %s", ex.asignatura);
- printf("\nDNI: %s", ex.dni);
- printf("\nNRO DE PARCIAL: %d", ex.nroParcial);
- printf("\nNOTA: %.2f", ex.Nota);
- }
- nodo2 * recorrerYMostrar(nodo2 * lista)
- {
- nodo2 * seguidora = lista;
- while (seguidora != NULL)
- {
- mostrarExamen(seguidora->e);
- seguidora = seguidora->siguiente;
- }
- }
- nodo2 * eliminarDni (nodo2 * lista, char docu[])
- {
- nodo2 * seguidora = lista;
- nodo2 * aux;
- nodo2 * ante;
- Examen stEx;
- while (seguidora != NULL)
- {
- stEx = seguidora->e;
- if (strcmp(stEx.dni, docu) ==0)
- {
- if (seguidora->anterior != NULL && seguidora->siguiente != NULL)
- {
- ante = seguidora->anterior;
- aux = seguidora;
- seguidora = seguidora->siguiente;
- ante->siguiente= seguidora;
- seguidora->anterior = ante;
- free(aux);
- }
- else if (seguidora->anterior == NULL)
- {
- aux = seguidora;
- lista = seguidora->siguiente;
- lista->anterior = NULL;
- free(aux);
- seguidora = seguidora->siguiente;
- }
- else if (seguidora->siguiente == NULL)
- {
- aux = seguidora;
- ante = seguidora->anterior;
- ante->siguiente = NULL;
- free(aux);
- seguidora = seguidora->siguiente;
- }
- }
- else
- seguidora = seguidora->siguiente;
- }
- return lista;
- }
- int ExisteDni (nodo2 * lista, char asignatura[], char dni[]) ///probar que onda cuando no
- {
- int flag =0;
- Examen stEx;
- if ((lista!= NULL) && (flag ==0))
- {
- stEx = lista->e;
- if ((strcmpi(asignatura, stEx.asignatura)==0) && (strcmpi(dni, stEx.dni)==0))
- {
- flag = 1;
- }
- else
- {
- flag = ExisteDni(lista->siguiente, asignatura, dni);
- }
- }
- return flag;
- }
- float promedioNotas (nodo2* lista, char materia[], char dni[]) ///esta en la foto
- {
- float promedio =0, acum=0;
- int cont =0;
- nodo2 * seguidora = lista;
- Examen stEx;
- while (seguidora != NULL)
- {
- stEx = seguidora->e;
- if ((strcmp(dni, stEx.dni) == 0) && (strcmpi(materia, stEx.asignatura) ==0))
- {
- cont++;
- acum =stEx.Nota+acum;
- }
- seguidora= seguidora->siguiente;
- }
- if (cont > 0)
- {
- promedio = acum/cont;
- }
- return promedio;
- }
- int cuentaAlumnos (nodo2* lista, char materia[])
- {
- int cuenta =0;
- Examen stEx;
- if (lista != NULL)
- {
- stEx = lista->e;
- if (strcmpi(stEx.asignatura, materia)==0)
- {
- if (stEx.nroParcial == 1)
- {
- cuenta = cuenta+1;
- }
- }
- cuenta = cuentaAlumnos(lista->siguiente, materia) + cuenta;
- }
- return cuenta;
- }
- nodo2 * listaCreada (nodo2 * lista)
- {
- nodo2 * nuevo;
- Examen stExamen;
- stExamen = cargaExamen("matematica", "00000013", 1, 9);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("matematica", "00000013", 2, 7);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("matematica", "00000012", 1, 9);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("programacion", "00000011", 1, 5);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("estadistica", "00000010", 1, 7);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("programacion", "00000009", 1, 4);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("sistemas", "00000008", 2, 9);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("laboratorio", "00000007", 1, 2);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("matematica", "00000006", 1, 8);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("sistemas", "00000005", 2, 6);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("estadistica", "00000004", 1, 7);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("programacion", "00000003", 3, 10);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("laboratorio", "00000002", 2, 3);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- stExamen = cargaExamen("estadistica", "00000001", 1, 4);
- nuevo = crearNodo(stExamen);
- lista = agregarAlPrincipio(lista, nuevo);
- return lista;
- }
- void mostrarStruct(Examen stEx)
- {
- printf("\n\nASIGNATURA: %s", stEx.asignatura);
- printf("\n\nDNI: %s", stEx.dni);
- printf("\n\nNUMERO DE PARCIAL: %d", stEx.nroParcial);
- printf("\n\nNOTA DE PARCIAL: %2.f\n", stEx.Nota);
- }
- void mostrarPorAsignatura_recursivo (nodo2 * lista, char asignatura[])
- {
- Examen stEx;
- if (lista!= NULL)
- {
- stEx = lista->e;
- if (strcmpi(stEx.asignatura, asignatura)==0)
- {
- mostrarStruct(stEx);
- }
- mostrarPorAsignatura_recursivo(lista->siguiente, asignatura);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement