void borrar(struct arbol **A, int val){
     
     struct arbol *arbol_aux;
     
     if((*A) == NULL){
          printf("Error, no hay nodos en el arbol");
          return;
          }
          

          if((*A)->valor < val)
          borrar(&(*A)->der, val);
          else if((*A)->valor > val)
          borrar(&(*A)->izq, val);
          else if((*A)->valor == val){
                      arbol_aux = *A;              
                      if((*A)->izq == NULL)
                                    *A = (*A)->der;
                      else if((*A)->der == NULL)
                                    *A = (*A)->izq;
                      else
                                    rotacion(&(*A)->izq, &arbol_aux);
                                    
                      free(arbol_aux);
                      }          
     }
int main(){
int salida = 0, opc;

struct nodo *L;
L = NULL;

do{
printf("1) Insertar\n2) Borrar\n3) Listar\n4) Salir\n=============================\n");
    printf("Seleccione una opcion:\t");
    scanf("%d",&opc);
    switch(opc){
                case 1:                  
                     insertar(&L);
                     break;
                case 2:
                     borrar(&L);
                     break;
                case 3:
                     listar(L);
                     break;
                case 4:
                     salida = 1;
                     break;
                default:
                     salida = 0;
                        break;
                }
    }while(salida == 0);


getchar();  
    return 0;
    }
Beispiel #3
0
int main()
{
    DIR* dir = opendir("datos");
    sigset_t mask;
    sigfillset(&mask);
    sigdelset(&mask, SIGALRM);
    sigprocmask(SIG_SETMASK, &mask, NULL);
    signal(SIGALRM, handler);
    if (dir)
    {
        borrar();
    }else if (ENOENT == errno){
        mkdir("./datos", 0700);
    }else{
        printf("Error creando el directorio \n");
    }
    for(int i = 0; i < 5; i++){
        sprintf(buffer, "./datos/a%d",i);
        archivo = fopen(buffer, "w+");
        alarm(3);
        while(grabar)
            fputc('x', archivo);
        fclose(archivo);
        i++;
    }
    return 0;
}
Beispiel #4
0
int main(){
		int i;
		Dicbin a=vacio();

		do{
				scanf("%d",&i);
				printf("\n");
					if(i!=0)
					  a=insord(i,a);		
				puts("-------------------------");	

		}while(i);
		
			inorder(a);
				puts("-------------------------");
		do{
				scanf("%d",&i);
				printf("\n");
					if(i!=0)
					  a=borrar(i,a);
					  	inorder(a);
				puts("-------------------------");
		
		}while(i);
		
		
	return  0;
	
}
Beispiel #5
0
void menu(){
   int seleccion;
	clrscr();
   printf("1.- Crear vector numerico de 10 elementos: ");
   printf("\n2.- Ordenar vector: ");
   printf("\n3.- Insertar un elemento: ");
   printf("\n4.- Borrar un elemento: ");
   printf("\n5.- Buscar un elemento: ");
   printf("\n6.- Visualizar lista: \n");
   scanf("%d",&seleccion);
   switch (seleccion){
   	case 1: crear();
      	break;
      case 2: ordenar();
      	break;
      case 3: insertar();
      	break;
      case 4: borrar();
      	break;
      case 5: buscar();
      	break;
      case 6: visualizar();
      	break;
   }
}
void releaseStats(  ){
	// Borrar todos los elementos de la lista
	valorSum *valor = NULL;
	// Comprobar si hay elementos
	if(vectorSumFr == NULL || vectorSumFr->numeroDeElementos<1)  return;
	// borrar: borra siempre el elemento actual

	valor = (valorSum *)borrar(vectorSumFr);
	while (valor)
	{
		free(valor);
		valor = NULL;
		valor = (valorSum *)borrar(vectorSumFr);
	}
	free( Stats );
	free(Coef);
}
Beispiel #7
0
Datei: 36.c Projekt: leolas95/c
char *trimall(char *str)
{
	int i = 0;
	while (str[i]) {
		while (str[i] == ' ' && str[i+1] == ' ')
			borrar(str, i);
		i++;
	}
}
Beispiel #8
0
void borrartodo(void){

int i;						//*****************************

for (i=1;i<=MAX;i++)				//Metodo que deja el Archivo	

	borrar(i);				//en blanco (borra todo)

}						//*****************************
Beispiel #9
0
void Logger::verificarTamanioDelLog(){
    ifstream log(DEFAULT_LOG_PATH, ios_base::in);
	log.seekg(0, ios::end);
	int size = static_cast <int> (log.tellg());
	if (size > tamanoMaximo){
		ofstream borrar(DEFAULT_LOG_PATH, ios::trunc);
		borrar.close();
	}
	log.close();
}
Beispiel #10
0
int main (void)
{
	int i=0;
   char opc=' ';
   // En esta área se debe verficar si existe el archivo de lo contrario debe crearlo 
    if ((arcLibro = fopen("Biblioteca.dat","r+"))==NULL){       //Verifica  si existe el archivo de libros, si es asi se conecta
       printf("\n\n  Archivo no existe. Se creará  en la dirección por defecto \n");
       arcLibro  = fopen("Biblioteca.dat","w+");               //si no existe se crea el archivo
       getch ();
      }
      fclose(arcLibro);
    // esta área controla el menú del archivo Libro
    do {
       system("CLS");
       printf( " Biblioteca de Prueba   \n\n ");
       printf( "\n1) Agregar Libro");
       printf( "\n2) Buscar Libros.");
       printf( "\n3) Listar Libros.");
       printf( "\n4) Borrar.");
       printf( "\n0) Salir. \n");
       printf ("\nIngrese una opción:   ");
       opc=getchar();
       inicializar(Vlibro);
       switch (opc) {
        case '1': agregarLibro (arcLibro, Vlibro);
                  break;
        case '2': {
        	      system ("cls");
        	      metododebusqueda ();
        	      printf ("\nIngrese la opción de busqueda:  ");
        	      scanf ("%d", &i);
        	      buscar (arcLibro, i);
        	      getch ();
			      break;
		          }
        case '3': listarLibros(arcLibro);
                  break;
        case '4': {
        	      system ("cls");
        	      metododeborrado ();
        	      printf ("\nIngrese la opción de busqueda:  ");
        	      scanf ("%d", &i);
        	      borrar (arcLibro, i);
        	      getch ();
			      break;
		          }
        case '0':
                  break;
        default: printf( "Verifique la opción seleccionada.");//en caso de que se equivoque en el menu, le muestro este mensaje
                  break;
        } 
    } while (opc!='0');
    return 0;   
    
}
FormListaPeluqueria::FormListaPeluqueria( QWidget* parent )
: EVentana( parent ), Ui::FormListadoPeluqueriaBase()
{
	setupUi(this);
	setObjectName( "lista_servicios" );
	setWindowTitle( "Listado de servicios brindados" );
	setWindowIcon( QIcon( ":/imagenes/pelu.gif" ) );

	this->addAction( new EActCerrar( this ) );
	QAction *ActAgregar = new QAction( "Agregar", this );
	ActAgregar->setIcon( QIcon( ":/imagenes/add.png" ) );
	ActAgregar->setShortcut( QKeySequence( "Ctrl+a" ) );
	DigiFauno *digifauno = qobject_cast<DigiFauno *>(parent);
        connect( ActAgregar, SIGNAL( triggered() ), this, SLOT( agregarServicioPeluqueria() ) );
	this->addAction( ActAgregar );

	QAction *ActBorrar = new QAction( "Borrar", this );
	ActBorrar->setIcon( QIcon( ":/imagenes/eliminar.png" ) );
	ActBorrar->setShortcut( QKeySequence( "Ctrl+b" ) );
	connect( ActBorrar, SIGNAL( triggered() ), this, SLOT( borrar() ) );
	this->addAction( ActBorrar );

	modelo = new MPeluqueria( TVPeluqueria, true );
	modelo->setEditStrategy( QSqlTableModel::OnRowChange );
	TVPeluqueria->setModel( modelo );
	modelo->select();
	TVPeluqueria->setSelectionBehavior( QAbstractItemView::SelectRows );
	TVPeluqueria->resizeColumnsToContents();
	TVPeluqueria->hideColumn( 0 );
	TVPeluqueria->setSortingEnabled( true );

	GBFiltrado->setChecked( false );

	QSqlQueryModel *modeloMascota = new QSqlQueryModel( CBMascota );
	if( QSqlDatabase::database().driverName() == "QSQLITE" )
	{
		modeloMascota->setQuery( "SELECT m.id, m.nombre||' - '||d.apellido||', '||d.nombre FROM mascota m, dueno d WHERE m.id_dueno = d.id" );
	}
	else if( QSqlDatabase::database().driverName() == "QMYSQL" )
	{
		modeloMascota->setQuery( "SELECT m.id, CONCAT( CONCAT( CONCAT( CONCAT( m.nombre, \" - \" ), d.apellido ), \", \" ), d.nombre ) FROM mascota m, dueno d WHERE m.id_dueno = d.id" );
	}
	CBMascota->setModel( modeloMascota );
	CBMascota->setModelColumn( 1 );
	CBMascota->setCurrentIndex( -1 );

	connect( GBFiltrado, SIGNAL( toggled ( bool )              ), this, SLOT( cambioEstadoGrupo( bool )    ) );
	connect( ChBMascota, SIGNAL( stateChanged ( int )          ), this, SLOT( cambioEstadoMascota( int )   ) );
	connect( ChBFecha  , SIGNAL( stateChanged ( int )          ), this, SLOT( cambioEstadoFecha( int )     ) );
	connect( CBMascota , SIGNAL( currentIndexChanged( int )    ), this, SLOT( cambioIndice( int )          ) );
	connect( DEFecha   , SIGNAL( dateChanged ( const QDate & ) ), this, SLOT( cambioFecha( const QDate & ) ) );

	///@todo Agregar calculo de fecha maxima y minima desde la tabla para limitar el filtrado
}
FormAgregarServicio::FormAgregarServicio( QWidget* parent )
: EVentana( parent ), Ui::FormAgregarServPeluqueriaBase()
{
	setupUi(this);
	setObjectName( "FormAgregarServicio" );
	setWindowTitle( "Agregar Nuevo Servicio de Peluqueria" );
	setWindowIcon( QIcon( ":/imagenes/pelu.gif" ) );

	this->addAction( new EActCerrar( this ) );

	QSqlQueryModel *modeloMascota = new QSqlQueryModel( CBMascota );
	if( QSqlDatabase::database().driverName() == "QSQLITE" )
	{
		modeloMascota->setQuery( "SELECT m.id, m.nombre||' - '||d.apellido||', '||d.nombre FROM mascota m, dueno d WHERE m.id_dueno = d.id ORDER BY 2" );
	}
	else if( QSqlDatabase::database().driverName() == "QMYSQL" )
	{
		modeloMascota->setQuery( "SELECT m.id, CONCAT( CONCAT( CONCAT( CONCAT( m.nombre, \" - \" ), d.apellido ), \", \" ), d.nombre ) FROM mascota m, dueno d WHERE m.id_dueno = d.id ORDER BY 2" );
	}
	CBMascota->setModel( modeloMascota );
	CBMascota->setModelColumn( 1 );
	CBMascota->setCurrentIndex( -1 );
	connect( CBMascota, SIGNAL( currentIndexChanged( int ) ), this, SLOT( cambioIndice( int ) ) );

	CWFecha->setMaximumDate( QDate::currentDate() );
	CWFecha->setSelectionMode( QCalendarWidget::SingleSelection );

	PBAgregar->setIcon( QIcon( ":/imagenes/add.png" ) );
	PBAgregar->setShortcut( QKeySequence( "Ctrl+a" ) );
	PBAgregar->setText( "&Agregar" );
	PBBorrar->setIcon( QIcon( ":/imagenes/borrar.png" ) );
	PBBorrar->setShortcut( QKeySequence( "Ctrl+L" ) );
	PBBorrar->setText( "&Limpiar" );

	modeloPeluqueria = new MPeluqueria( this, false );
	modeloPeluqueria->setSolo_lectura( true );
	preferencias *p = preferencias::getInstancia();
	modeloPeluqueria->setLimite( p->value( "General\\limite", 5 ).toInt() );
	modeloPeluqueria->setSort( 4, Qt::DescendingOrder );
 	modeloPeluqueria->setEditStrategy( QSqlTableModel::OnRowChange );
	TVHistorial->setModel( modeloPeluqueria );
	TVHistorial->hideColumn( 0 );
	TVHistorial->hideColumn( 1 );
	TVHistorial->resizeColumnsToContents();

	connect( PBAgregar, SIGNAL( clicked() ), this, SLOT( agregar() ) );
	connect( PBBorrar , SIGNAL( clicked() ), this, SLOT( borrar()  ) );

	QCompleter *completador = new QCompleter( LEDescripcion );
	QSqlQueryModel *modeloDescripciones = new QSqlQueryModel( completador );
	modeloDescripciones->setQuery( "SELECT DISTINCT descripcion FROM peluqueria" );
	completador->setModel( modeloDescripciones );
	LEDescripcion->setCompleter( completador );
}
Beispiel #13
0
void borrar_cola_mensaje(DescriptorColas* cola, int worker, char tipo)
{
  char nombre[7];

  switch(tipo) {
    case 'w':
      cerrar(cola->worker);
      cerrar(cola->anillo);
      sprintf(nombre, "/cola%d", worker);
      borrar(nombre);
      break;

    case 'd':
      cerrar(cola->disp);
      cerrar(cola->worker);
      sprintf(nombre, "/cola%d", (worker+NUM_WORKER)%(2*NUM_WORKER));
      borrar(nombre);
      break;
  }
  free(cola);
}
void BorrarHash (char *cad,TablaHash t)
{
   tPosicion p;
   int pos=Hash(cad);

   p=primero(t[pos]);
   while (p!=fin(t[pos]) && !strcmp(cad,elemento(p,t[pos])))
      p=siguiente(p,t[pos]));

   if (p!=fin(t[pos]))
      borrar(p,t[pos]);
}
Beispiel #15
0
ZGui::ZGui ( const QString &ejecuta, QWidget* parent, const char* name, WFlags fl )
    : ZKbMainWidget ( ZHeader::FULL_TYPE, NULL, "ZMainWidget", 0 )
{
  QString eje = ejecuta;
  if ( eje == "cleannow" )
  {infos=NULL;
  dlg=NULL;
  ZConfig conf ( getProgramDir() + "av_db.cfg", true );
  QStringList list = conf.readListEntry ( QString("DATABASE"), QString("DELETE"), QChar(';') );
  QStringList a="";
  for(int i=0;i< list.count();i++) {
  a=limpiar(SD,list[i]); borrar(a); a="";
  a=limpiar(phone,list[i]); borrar(a); a="";}
  qApp->quit();  
  }
  else
  {infos=NULL;
  dlg=NULL; 
  eliminados="";
  CreateWindow ( parent );
  ( ( ZApplication* ) qApp )->showMainWidget ( this );}
}
int main(int argc, _TCHAR* argv[])
{
	srand(time(NULL));
	
	for (int x = 0; x < 10; x++){
		numeros[x] = std::rand() % 20 + 1;
	}

	remplazarnum(20, 2);
	borrar(5);
	buscarnum(12);
	printnum();
	return 0;
}
Beispiel #17
0
void existe(){
  int status;
  DIR *dir = opendir(PATH);
  if (dir){
    printf("El directorio ya existe\n");
    borrar();
    closedir(dir);
  }else if(ENOENT == errno){
    printf("El directorio no existe\nCreando directorio\n");
    mkdir(PATH, 0777);
  }else{
    printf("Error al abrir directorio\n");
  }
}
Beispiel #18
0
int borrar(Lista *lista){
  Elemento *elem;
  while (lista->ini != NULL){
    elem = lista->ini;
    lista->ini = lista->ini->sig;
    if(elem->sig!=NULL){
      elem->sig->ant=NULL;
    }
    free(elem->nombre);
    if(elem->lista!=NULL){
      borrar(elem->lista);
    }
    free(elem);
  }
}
void comprobar(){
	
	DIR *directory;
	directory = opendir(DIRECTORY);	

	if(directory) {
		printf("Borrando ficheros en %s\n", DIRECTORY);
		borrar();
	} else if(ENOENT == errno) {
		printf("Creando el directorio %s\n", DIRECTORY);
		mkdir(DIRECTORY, 0755);
	} else {
		printf("Error al abrir directorio");	
	}

}
Beispiel #20
0
void EBusqueda::changeEvent( QEvent *e )
{
    QDockWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        retranslateUi(this);
        break;
    case QEvent::Hide:
    case QEvent::Close:
        borrar();
        emit cerrando();
        break;
    default:
        break;
    }
}
Beispiel #21
0
int eliminarPpalYAux(Lista * listaPpal,Lista * listaAux, char * nombre){
  Elemento * elem, * aux, *ppal;
  Lista * del;
  int elimino = 0;

  if(listaPpal->tam == 0)
    return -1;

  elem = listaPpal->ini;
  while(elem!=NULL){ // conseguir el nombre en la lista ppal
    if(strcmp(elem->nombre,nombre)==0){ //nombre ppal encontrado
      ppal = elem;

      if (elem->lista !=NULL && elem->lista->ini!=NULL){
        del = elem->lista;

        elem = elem->lista->ini; // ini de la lista auxiliar para nombre ppal
        
        aux = listaAux->ini; // ini de listaAux
        while(elem!=NULL){
          while(aux!=NULL){
            if (strcmp(elem->nombre,aux->nombre)==0){
              elimino = elimino + eliminar(aux->lista, nombre);
              elem = elem->sig;
              aux = listaAux->ini;
              break;
            }
            else{
              aux = aux->sig;
            }
          }
        }
        if(del!=NULL)
          borrar(del);
        ppal->lista = NULL;
        eliminar(listaPpal,ppal->nombre);
        return elimino;
      }
      return eliminar(listaPpal,ppal->nombre);
    }
    else{ // nombre ppal no encontrado
      elem = elem->sig;
    }
  }
  return -1;
}
Beispiel #22
0
EBusqueda::EBusqueda( QWidget *parent, QSqlTableModel *modelo, QString titulo ) :
    QDockWidget( parent ), Ui::EBusquedaBase()
{
    setupUi( this );
    setObjectName( "dock-busqueda" );
    if( titulo.isEmpty() || titulo.isNull() ) {
        this->setWindowTitle( "Buscador y filtrador" );
    } else { this->setWindowTitle( titulo ); }

    connect( CBTipo  , SIGNAL( currentIndexChanged( int ) ), this, SLOT( filtrar() ) );
    connect( LETexto , SIGNAL( textChanged( QString )     ), this, SLOT( filtrar() ) );
    connect( PBBorrar, SIGNAL( clicked()                  ), this, SLOT( borrar()  ) );

    _modelo = modelo;
    // Guardo el filtro anterior
    QString _filtro_anterior = _modelo->filter();
}
Beispiel #23
0
void eliminar_parametros_ocultos (TABLA_SIMBOLOS tabla, int nivel)
/**********************************************************************/
{
   int i, j;

   for (i = 0; i < TAMANO_TABLA; ++i)
   {
       j = 1;
       while (j <= longitud_lista (tabla[i]))
       {
           SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j);

           if (((*simbolo).tipo == PARAMETRO) && (!(*simbolo).visible) && ((*simbolo).nivel == nivel))
			  borrar (&tabla[i], j);
		   else
		      ++j;
       }
   }
}
Beispiel #24
0
void eliminar_variables (TABLA_SIMBOLOS tabla, int nivel)
/**********************************************************************/
{
   int i, j;

   for (i = 0; i < TAMANO_TABLA; ++i)
   {
       j = 1;
       while (j <= longitud_lista (tabla[i]))
       {
           SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j);

           if (((*simbolo).tipo == VARIABLE) && ((*simbolo).nivel == nivel))
			  borrar (&tabla[i], j);
		   else
		      ++j;
       }
   }
}
Beispiel #25
0
void eliminar_programa (TABLA_SIMBOLOS tabla)
/**********************************************************************/
{
   int i, j;

   for (i = 0; i < TAMANO_TABLA; ++i)
   {
       j = 1;
       while (j <= longitud_lista (tabla[i]))
       {
           SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j);

           if (((*simbolo).tipo == PROGRAMA) && ((*simbolo).nivel == 0))
			  borrar (&tabla[i], j);
		   else
		      ++j;
       }
   }
}
Beispiel #26
0
void pracAOC::cargar()
{
	borrar();
	QImage qimgRead1(320,100,QImage::Format_Indexed8);
	QImage qimgCRead1(320,100,QImage::Format_Indexed8);
	QString fichero=*path+"/imagesaoc";
	QString fn = QFileDialog::getOpenFileName(this,"Elija la imagen a cargar",fichero, "Images (*.png *.xpm *.jpg)");
	if(qimgRead1.load(fn))
	{

		qimgCRead1=qimgRead1.convertToFormat(QImage::Format_Indexed8, ctable);
		qimgCRead1=qimgCRead1.copy(0,0,320,100);

		for(int y=0; y<100;y++)
			for(int x=0; x<320; x++){
				imgO[y*320+x]=(qimgCRead1.bits())[(y*qimgCRead1.width()+x)];
				imgD[y*320+x]=(qimgCRead1.bits())[(y*qimgCRead1.width()+x)];
			}
		update();
	}
}
/*!
    \fn FormAgregarServicio::agregar()
	Agrega los datos si se lleno correctamente
 */
void FormAgregarServicio::agregar()
{
 if( CBMascota->currentIndex() < 0 )
 {
  QMessageBox::warning( this, "Faltan Datos", "Por favor, seleccione una mascota de la lista desplegable" );
  qDebug( "Error de masctoa" );
  return;
 }
 if( LEDescripcion->text().isEmpty() )
 {
  QMessageBox::warning( this, "Faltan Datos", "Por favor, ingrese una descripcion para el servicio" );
  qDebug( "Error, descripcion esta vacio" );
  return;
 }
 if( !dSpBPrecio->value() > 0 )
 {
  QMessageBox::warning( this, "Faltan Datos", "Por favor, ingrese un precio para el servicio prestado" );
  qDebug( QString( "Error, precio es invalido: %1" ).arg( dSpBPrecio->value() ).toLocal8Bit() );
  return;
 }
 modeloPeluqueria->setLimite( -1 );
 if( modeloPeluqueria->agregarServicio( LEDescripcion->text(),
					dSpBPrecio->value(),
					CWFecha->selectedDate(),
					id_mascota ) )
 {
  QMessageBox::information( this, "Correcto", "Los datos se han guardado correctamente" );
  borrar();
  preferencias *p = preferencias::getInstancia();
  modeloPeluqueria->setLimite( p->value( "General\\limite", 5 ).toInt() );
  modeloPeluqueria->select();
  TVHistorial->resizeColumnsToContents();
  return;
 }
 else
 {
  QMessageBox::critical( this, "Error", "Hubo un error al intentar agregar el servicio. No se guardaron datos." );
  return;
 }
}
Beispiel #28
0
void eliminar_acciones (TABLA_SIMBOLOS tabla, int nivel)
/**********************************************************************/
{
   int i, j;

   for (i = 0; i < TAMANO_TABLA; ++i)
   {
       j = 1;
       while (j <= longitud_lista (tabla[i]))
       {
           SIMBOLO *simbolo = (SIMBOLO*) observar (tabla[i], j);

           if (ES_ACCION(*simbolo) && ((*simbolo).nivel == nivel))
		   {
			  liberar (&((*simbolo).parametros));
			  borrar (&tabla[i], j);
		   }
		   else
		      ++j;
       }
   }
}
Beispiel #29
0
int main(int argc, char *argv[]) {
	prueba.cima = 0; //Inicializamos la pila
	int opc,continuar = 1;
	//Menú
	while(continuar == 1){
		system("cls");
		printf("Saluton! Pilas en C");
		printf("\n\nEscoge una operacion: ");
		printf("\n1)Agregar elemento");
		printf("\n2)Borrar elemento");
		printf("\n3)Mostrar elementos");
		printf("\n4)Salir\n");
		scanf("%d",&opc);
		switch(opc){
			case 1:
				agregar();
				break;
			case 2:
				borrar();
				break;
			case 3:
				mostrar();
				break;
			case 4:
				continuar = 0;
				break;
			default: //Es opcional
				printf("\nEscoge una opcion del menu 7n7");
				printf("\nPuchale enter para continuar");
				getch();
				break;
		}
	}
	system("cls");
	printf("Gxis la revido"); //Es opcional
	return 0;
}
Beispiel #30
0
int eliminar(Lista *lista, char * nombre){
  Elemento *elem;

  if(lista->tam == 0)
    return -1;

  elem = lista->ini;
  while(elem!=NULL){
    if(strcmp(elem->nombre,nombre)==0){
      if(elem->ant == NULL){
        lista->ini = elem->sig;
        if(elem->sig!=NULL)
          elem->sig->ant = elem->ant;
      }
      if (elem-> sig == NULL){
        if(elem->ant!=NULL)
          elem->ant->sig = NULL;
        lista->fin = elem->ant;
      }
      if(elem->ant!=NULL && elem->sig!=NULL){
        elem->ant->sig = elem->sig;
        elem->sig->ant = elem->ant;
      }
      if(elem->lista!=NULL)
        borrar(elem->lista);
      free(elem->nombre);
      free(elem);
      lista->tam--;
      return 0;
    }
    else{
      elem = elem->sig;
    }
  }
  return -1;
}