logoUADY
                 logoCIMAT
Unidad Mérida           

conacyt 

PROGRAMACIÓN AVANZADA AGOSTO-DICIEMBRE 2014

Profr: Dr. Francisco Javier Hernández López (fcoj23@cimat.mx)
Enviar tareas al correo: ProgAvanzada@hotmail.com  (nombre_tarea_#)

Temario

Sesión
Tarea
1. Pilas
    * Implementando una pila con memoria estática: pila_mem_estatica.cpp
    * Implementando una pila con memoria dinámica: pila_doble_apuntador.cpp
    * Comprobar sintaxis de paréntesis, corchetes y llaves en  C: comprobar_sintaxis.cpp (Terminar el programa)

tarea_1.pdf
2. Colas
    * Implementando una cola con memoria estática: cola_memoria_estatica.cpp
    * Implementando una cola con memoria dinámica: cola_memoria_dinamica.cpp

tarea_2.pdf

3. Listas
    * Implementando una lista con memoria dinámica: lista_enlazada.cpp
    * Implementando una lista circular: lista_circular.cpp
    * Implementando el juego de la papa se quema...: lista_circular_papa_se_quema.cpp

tarea_3.pdf
4. Lista doblemente enlazada
    * Implementando una lista doblemente enlazada: lista_doble_liga.cpp (Terminar el programa)
    * Implementando una lista enlazada ordenada: lista_enlazada_ordenada.cpp (Terminar el programa)

tarea_4.pdf

5. Árboles
6. Árboles Binarios de Búsqueda
    * Implementando un árbol binario de búsqueda: arbol_binario_busqueda.cpp (Terminar el programa)
    * Exposiciones:
        a) Árboles AVL (Tarea_6: Insertar y eliminar elementos en un árbol AVL)
        b) Árboles Rojo-Negro
        c) Árboles AA
        d) Árboles B
        e) Árboles B+
tarea_5.jpg
7. Tablas hash
    * Implementando una tabla hash: tabla_hash.cpp (Terminar el programa)
tarea_7.pdf
8. Grafos
    Grafos no dirigidos
tarea_8.pdf
9. Algoritmos de ordenamiento

tarea_9.pdf
10. Cómputo paralelo




Calificaciones de las tareas:
Num. Ctrl.
T1
Comentarios
T2
Comentarios
T3
Comentarios
T4
Comentarios
T5
Comentarios
T6
Comentarios
T7
Comentarios
T8
Comentarios
T9
Comentarios
lt26i
9.7
T1_9
10

10
T3_3
10

0
T5_1
0
T1_17 0
T1_17 0
T1_17
0
T1_17
99991111
5
T1_1, T1_5, T1_6,T1_7,T1_8
1.5
T2_2, T1_8, T2_5, T1_16, T2_4
9
T3_10, T2_4
0 T1_17
10

2.8
T6_1
0
T1_17 0
T1_17 9
T6_1
12216300
5.5
T1_1, T1_5, T1_10, T1_11, T1_12, T1_13
7
T2_2
7.5
T3_4, T3_5, T3_6
6
T4_3, T4_2
10

7.8
T6_1 3.5
T7_4, T1_5
8.0
T6_1
9
T6_2
A07001582
6
T1_1, T1_2, T1_3, T1_4
2.5
T1_5, T2_4, T2_2, T2_1, T2_6
4.5
T1_5, T3_1, T3_2, T2_2
0 T1_17
10

5.2
T6_2 6.0
T7_1, T7_2
0
T1_17 9
T6_1
09204211
5
T1_1, T1_2, T1_3, T1_8
0
T1_17
6
T1_5, T3_7, T3_8, T3_4, T3_6
0 T1_17
10

7.8
T6_1 6.0
T7_1, T7_2
0
T1_17 9.5
T6_1
11216323
6
T1_1, T1_8, T1_16
6.5
T1_8, T2_4
7.5
T3_4, T3_9, T2_4
0 T1_17
10

9.6
T6_2 0
T1_17 0
T1_17 10

11216326
2.5
T1_14, T1_8, T1_7, T1_15, T1_5
0
T1_17
10

6
T4_1, T4_2
10

6.5
T6_1 7.0
T7_1, T7_3
0
T1_17 10

08000946
0
T1_17
6
T2_1, T2_2
0
T1_17
0 T1_17
0
T5_1
0
T1_17 0
T1_17 0
T1_17 10

12345678
1
T1_1,  T2_2, T1_18, T1_16, T2_4
0.5
T1_14, T2_7, T1_8, T1_16, T2_4
0 T1_17
0 T1_17
10

0.9
T6_2 0
T1_17 0
T1_17 0
T1_17
a11216316
2.8
T1_19,T1_8, T2_4
4
T1_8, T2_4
4.9
T3_11, T3_4, T3_12, T2_4
0
T1_17
0
T5_1
0
T1_17 6
T7_5, T7_6, T7_7
5.8
T6_2 10


Comentarios:
            typedef tipoNodo *pNodo;
            typedef tipoNodo *Pila;
            Entonces cuando declaras: Pila *algo
            tu variable algo es en realidad un doble apuntador
            Después de calcular el tamaño de la cadena (tam), debiste empezar tu ciclo for en i=tam-1 (ejercicio 2b)
            push(pila1,&tope1,&numero1);
            void push (int pila[],int *tope, int x)

            while(precedencia(inf[i], pila[ptr]) < 0 && pila[ptr]!='(' && ptr>0)
            Hay que cuidar el orden de las comparaciones, en este caso puede quedar de la siguiente manera:
            while(ptr>0 && pila[ptr]!='(' && precedencia(inf[i], pila[ptr]) < 0)

            while(aux_bor!=NULL && (aux_bor->valor)<y)
            Tu variable aux_bor nunca va a apuntar a NULL, por lo tanto, si no tienes ningún valor en la lista que sea mayor o igual que "y" entonces tu programa entrará en un ciclo infinito…

            Nodo *nuevo, *aux;
            nuevo = (Nodo *) malloc(sizeof(Nodo));
            nuevo->sig=aux->sig;   //No puedes asignar a nuevo->sig una dirección que no has reservado o inicializado (aux->sig no existe)

            Nodo *temp=inicio;
            Nodo *aux, *nuevo;
            int c, e;
            while(temp!=NULL){
                c=temp->coe;
                e=temp->exp;
                aux->coe=c*e;  //aquí aux no ha sido inicializado o asignado a una localidad de memoria, entonces no es posible asignarle algo en coe
                Nota: en tu función insertarInicio, primero reservas memoria con malloc y luego asignas los valores coe y exp (aquí sería algo similar)



            Ejemplo: Suponga que se han dado de alta estos elementos
            Tabla Hash:
            <HELF70> <DANIEL> <1500.00> <PINOS>
            <--> <--> <--> <-->
            <HELF40> <FRANCISCO> <1000.00> <AMERICAS>--><HELF90> <PATY> <5000.00> <OAXACA>--><HELF04> <HIGINIO> <2000.00> <CHUBURNA>
            <HELF50> <NAYELI> <4000.00> <AME>
            <--> <--> <--> <-->

             Al eliminar el elemento con IFE=HELF40, pasa lo siguiente:
            Tabla Hash:
            <HELF70> <DANIEL> <5000.00> <PINOS>
            <--> <--> <--> <-->
            <HELF90> <PATY> <5000.00> <OAXACA>--><HELF90> <PATY> <5000.00> <OAXACA>--><HELF04> <HIGINIO> <2000.00> <CHUBURNA>
            <HELF50> <NAYELI> <4000.00> <AME>
            <--> <--> <--> <-->           

            Ahora, el elemento con IFE=HELF90, se repite tanto en la tabla como en su respectiva lista

            En tu programa solo basta con eliminar el nodo de la lista después de haber copiado la información, es decir, poner lo siguiente:
            elimina_en_lista(&Tabla[posicion].lista, Tabla[posicion].lista->IFE);


Proyectos:

Presentación: Jueves 27/Noviembre


Bibliografía
: