Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Anduresu

#1
necesito ayuda la verdad no puede logarar que los datos del arbol se eliminen
no logro avanzar de ahi me serviria mucho su ayuda o consejos gracias
eliminar un solo dato del arbol
y despues que se eliminen todos los datos del arbol


#include<stdio.h>
#include<windows.h>

struct nodo{
double dato;
nodo *derecho;
nodo *izquierdo;
nodo *padre;
};

nodo *arbol=NULL;
//--------------------------elliminar dato----------------------------------
void eliminar(nodo*arbol,double num)
{
if(arbol ==NULL)
{
return;
}
else if(num<arbol ->dato)
{
eliminar(arbol->izquierdo,num);
}
else if(num>arbol->dato)
{
eliminar(arbol-> derecho,num);
}
else
{
eliminarnodo(arbol);
}


}
//--------------------------------------------------------------------------
nodo*minimo(nodo*arbol)
{
if(arbol ==NULL)
{
return NULL;
}
if(arbole->izquierdo)
{
return minimo(arbol->izquierdo);
}
else
{
return arbol;
}
}
//----------------------------------------------------------------
void reemplazar(nodo *arbol,nodo* nuevonodo)
{
if(arbol->padre)
{

if(arbol->dato =arbol->padre->izquierdo->dato)
{
arbol->padre->padre->izquierdo=nuevonodo;
}
else if(arbol->dato==arbol->padre->derecho->dato)
{
arbol->padre->derecho=nuevonodo;
}

}
if(nuevonodo)
{
nuevonodo->padre=arbol->padre;
}
}
//--------------------------------------------------------------------------
void destruirnodo(nodo *nodo)
{
nodo->izquierdo=NULL;
nodo->derecho=NULL;

delete nodo;
}
//---------------------------------------------------------------------------
void eliminarnodo(nodo*nodoeliminar)
{
if(nodoeliminar->izquerdo && nodoeliminar->derecho)
{
nodo*menor=minimo(nodoeliminar->derecho);
nodoeliminar->dato=menor->dato;
eliminarnodo(menor);
}
else if(nodoeliminar->izquierdo)
{
reemplazar(nodoeliminar,nodoeliminar->izquierda);
destruirnodo(nodoeliminar);
}
else if(nodoeliminar->derecho)
{
reemplazar(nodoeliminar,nodoeliminar->derecho);
destruirnodo(nodoeliminar);
}
}
//--------------------------CONSULTAR DATOS---------------------------------
bool consultar(nodo *arbol, double num){

if(arbol == NULL)
{
return false;
}
else if(arbol->dato == num)
{
return true;
}
else if(num < arbol->dato)
{
return consultar(arbol->izquierdo, num);
}
else
{
return consultar(arbol->derecho, num);
}

}

//--------------------------MOSTRAR DATOS---------------------------------
void mostrar(nodo *arbol, double cont)
{
if(arbol==NULL)
{
return;
}
else
{
mostrar(arbol->derecho, cont+1);
for(int i=0;i<cont; i++)
printf("    ");
printf(" %.2lf \n\n",arbol->dato);

mostrar(arbol->izquierdo, cont+1);

}

}
//-------------------------------------------------------------------------

nodo * crear(double num)
{
nodo * nuevonodo = new nodo();
nuevonodo->dato = num;
nuevonodo->derecho = NULL;
nuevonodo->izquierdo = NULL;

return nuevonodo;
}
//---------------------------INSERTAR DATOS--------------------------------
void insertar(nodo *&arbol, double num)
{
if(arbol == NULL)
{
nodo *nuevonodo = crear(num);
arbol = nuevonodo;
}
else
{
int raiz=arbol->dato;
if(num < raiz)
insertar(arbol->izquierdo, num);
else
{
insertar(arbol->derecho, num);
}
}
}
//------------------------------MENU-----------------------------------------------------
void menu()
{
int opc, cont=0;
double num;
char resp;

do{
system("cls");
printf("\n\t MENU ARBOLES BINARIOS");
printf("\n\t **** ******* ********");

printf("\n [1]...Agregando datos al %crbol",160);
printf("\n [2]...Mostrar datos del %crbol",160);
printf("\n [3]...Consultar datos del %crbol",160);
printf("\n [4]...Eliminar un dato del %crbol",160);
printf("\n [5]...Eliminar todos los datos del %crbol",160);
printf("\n [6]...SALIR");
do{
printf("\n Ingrese una opci%cn: ",162);
scanf("%d", &opc);
if(opc<1 || opc>6);
printf("\n ERROR...Ingrese una opci%cn v%clida[1-6]: ",162, 160);
}while(opc<1 || opc>6);

switch(opc){
case 1:
system("cls");
printf("\n\t INGRESO DATOS AL ARBOL");
printf("\n\t ******* ** ***** ** *****");

do{
printf("\n Ingrese un n%cmero al arbol: ", 163);
scanf("%lf", &num);
insertar(arbol, num);

do
{
printf("\n %cDesea ingresar otro dato al arbol?: ",168);
scanf("%s", &resp);
resp=toupper(resp);
if(resp != 'S' && resp != 'N')
printf("\n ERROR... Ingrese una opcion valida[S-N]");
}while(resp != 'S' && resp != 'N');
}while(resp=='S');

break;

case 2:
system("cls");
printf("\n\t MOSTRANDO DATOS DEL ARBOL");
printf("\n\t ********* ***** *** *****\n");
mostrar(arbol, cont);
system("pause");
break;

case 3:
system("cls");
printf("\n\t CONSULTAR DATOS DEL DATOS");
printf("\n\t ********* ***** *** *****");

do{
printf("\n Ingrese un n%cmero a buscar del arbol: ",163);
scanf("%lf", &num);

if(consultar(arbol, num) == true)
{
printf("\n EL ELEMENTO [%.2lf] HA SIDO ENCONTRADO", num);
printf("\n");
}
else
{
printf("\n EL DATO [%.2lf] NO ESTA GUARDADO EN EL ARBOL.",num);
printf("\n");
}
printf("\n");
system("pause");

do
{
printf("\n %cDesea buscar otro dato dentro del %crbol?: ",168,160);
scanf("%s", &resp);
resp=toupper(resp);
if(resp != 'S' && resp != 'N')
printf("\n ERROR... Ingrese una opcion valida[S-N]");
}while(resp != 'S' && resp != 'N');
}while(resp=='S');
break;
case 4:
system("cls");
printf("\n\t eliminar un DATO DEL arbol");
printf("\n\t ********* ***** *** *****");
eliminar(arbol,num);

default:
exit(0);
}

}while(opc != 6);



}

main()
{
menu();
return 0;
}
#2
hacer reserva de asientos de un autobús(máximo 10 asientos ) que pida código ,nombre , numero de asiento ,numero de autobús ,precio ,y precio total con impuesto ,guardando los datos en un archivo y utilizando listas o colas y que imprima todo estos datos como un recibo soy estudiante y me ayudaría mucho su ayuda muchas gracias por su tiempo ; si lo siento mucho asta ahii e avanzado

mas que todo queria una idea o una sugerencia de como hacer la parte de colas o listas ya que no se exactamente como proceder
 

#include<stdio.h>
#include<windows.h>

FILE *archivo;

struct pasajero
{
int codigo ,asiento, edad;
char nombre [50];
double precio ,precioTotal;
}pas;
//**************************************************************
double validar(double valor, double li, double ls)
{
while(valor < li || valor > ls)
{
   printf("\n Error...Ingrese un valor entre [%.2lf] y [%.2lf]: ", li, ls);
scanf("%lf",&valor);  
}
return valor;
}
//***************************************************************
void consultar()
{
int cod;

system("cls");

archivo = fopen("pasajero.txt","rt");

if(archivo == NULL)
printf("\nEl archivo No existe.");
else
{
printf("\n Ingrese el codigo del pasajero: ");
scanf("%d",&pas.codigo);

printf("\n codigo Edad Nombre No-asiento");

while(!feof(archivo))
{
fscanf(archivo, "%d %d %s %d",&pas.codigo,&pas.edad,&pas.nombre,&pas.asiento);

if(pas.codigo==cod)
{
printf("%d %d %s %d",pas.codigo,pas.edad,pas.nombre,pas.asiento);
break;
}
else if(feof(archivo))
printf("\n Pasajero no encontrado");
}
}
system("pause");
fclose(archivo);
}
//***************************************************************
void listar()
{
system("cls");

archivo = fopen("pasajero.txt", "rt" );

if(archivo == NULL)
    {
printf("\nEl archivo No existe.");
  }
else
    {
  printf("\nCodigo edad nombre promedio\n");

  while(!feof(archivo))
           {
 fscanf(archivo, "%d %d %s %d", &pas.codigo, &pas.edad, &pas.nombre, &pas.asiento);
   printf("%5d %4d %5s %5d\n", pas.codigo, pas.edad, pas.nombre, pas.asiento);
           }
    }
system("pause");
fclose(archivo);
}
//***************************************************************
void agregar()
{
char resp;
archivo = fopen("pasajero.txt","rt");

if(archivo ==NULL)
{
printf("\nEl archivo No existe");
}
else
{
system("cls");
archivo = fopen("pasajero.txt","at");
do
{
printf("\n\tDatos del pasajero");
printf("\n\t----- --- --------");
printf("\nIngrese el codigo del pasajero :");
scanf("%d",&pas.codigo);
pas.codigo=validar(pas.codigo,1,10);

printf("\nIngrese la edad del pasajero:");
scanf("%d",&pas.edad);
pas.edad=validar(pas.edad,1,100);

printf("\nIngrese el nombre del pasajero: ");
scanf("%s",&pas.nombre);

printf("\nIngrese el numero del asiento:");
scanf("%d",&pas.asiento);

fprintf(archivo, "\n %d", pas.codigo);
         fprintf(archivo, "\n %d", pas.edad);
fprintf(archivo, "\n %s", pas.nombre);
fprintf(archivo, "\n %d", pas.asiento);

do
{
printf("\n Desea agregar otro envio? \n: ");
   scanf("%s", &resp);
   resp = toupper(resp);
   if(resp != 'S' && resp != 'N')
    printf("\n Error... Ingrese [S o N]");
}while(resp != 'S' && resp != 'N');

}while(resp=='S');
}
printf("\n");
system("pause");    
fclose(archivo);
}
//***************************************************************
void crear()
{
archivo = fopen("pasajero.txt","rt");

if(archivo !=NULL)
{
printf("\n El archivo ya existe");
}
else
{
archivo = fopen("pasajero.txt","wt");
printf("\n el archivo a sido creado con exito");
}
system("pause");
fclose(archivo);
}
//***************************************************************
void menu()
{
int opc;
do
{
system("cls");
printf("\nMenu :");
printf("\n[1]...crear");
printf("\n[2]... Agregar");
printf("\n[3]... listar datos ");
printf("\n[4]... consultar pasajero");
printf("\n[5]... salir");
do
{
printf("\nIngrese su opcion [1-5]: ");
scanf("%d",&opc);
if(opc<1 || opc>5)
printf("\nError ingrese [1-5]: ");
}while(opc<1 || opc>7);

switch(opc)
{
case 1:
crear();
break;
case 2:
agregar();
break;
case 3:
listar();
break;
case 4:
consultar();
break;
default:
printf("gracias por usar nuestro sistema");
exit(0);
}
}while(opc != 5);
}
//*********************************************************
main ()
{
menu();

return 0 ;
}