[Noti-aed] Ciorciari Conrado EJ3TPL3

Conrado Ciorciari conrs2001 en gmail.com
Jue Nov 9 19:52:17 -03 2023


------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://venus.santafe-conicet.gov.ar/pipermail/noti-aed/attachments/20231109/8b55b2c7/attachment.html>
------------ próxima parte ------------
#define USECHRONO
#undef HAVE_MPI

#include "eval.hpp"
#include <cassert>
#include <climits>
#include <cstdlib>
#include <stack>
using namespace aed;
using namespace std;

//---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
// COMPLETAR DNI y NOMBRE AQUI:
// Nombre: Conrado Ciorciari
int DNI=43426610;

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
//Escribir una función void createab(btree<int> &B, list<int> &abpos,list<int> &val); que, dado un árbol B, y 
//dos listas de enteros abpos y val va tomando valores p y v de ambas listas y va insertando el valor v en la posición correspondiente a abpos=p. 
//Las posiciones en abpos recorren los nodos en orden previo.

                                            ///AYUDA
  ///Escribir una función recursiva con un argumento adicional de tipo iterador.
 /// En la función recursiva, si la lista abpos está vacía, salir.
 /// Caso contrario extraer los valores pos y val del comienzo de las listas (eliminarlos).
 /// Insertar el valor val en el nodo actual (refrescar el iterador).
  ///Ahora hay que crear (recursivamente) los árboles izquierdo y derecho.
 /// Si la lista NO está vacía y si el valor en el frente de abpos es 2*pos+1 llamar recursivamente sobre el hijo izquierdo para crear su subárbol.
 /// Si la lista NO está vacía y si el valor en el frente de abpos es 2*pos+2 llamar recursivamente sobre el hijo derecho para crear su subárbol.

//aux
void createab(btree<int> &B, btree<int>::iterator n,list<int> &abpos,list<int> &vals) {
  if(abpos.empty()==true){//si abpos vacio retorna
    return;
  }else{
    int valor=vals.front();//tomo valor del comienzo de vals
    int posicion=abpos.front();//tomo valor comienzo de pos
    
    vals.pop_front();//elimino 1er valor vals
    abpos.pop_front();//elimino 1er valor pos
    
    n=B.insert(n,valor);//inserto valor en n.
    int posicionIzq=2*posicion+1;
    int posicionDer=2*posicion+2;
    
    //itero por izq
    if(abpos.front()==posicionIzq){
      createab(B,n.left(),abpos,vals);
    }
    //itero por der
    if(abpos.front()==posicionDer){
      createab(B,n.right(),abpos,vals);
    }
    
  }
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void createab(btree<int> &B, list<int> &abpos,list<int> &vals) {
  createab(B,B.begin(),abpos,vals);
}

//---:---<*>---:---<*>- FINALIZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
int main() {
  Eval ev;
  int vrbs=0;
  ev.eval<1>(createab,vrbs);
  // ev.evalr<1>(createab,12345,vrbs);
  return 0;
}


Más información sobre la lista de distribución Noti-AED