|
Mostrar Temas
|
Páginas: [1]
|
1
|
Programación / Programación C/C++ / eliminar un dato de arbol
|
en: 30 Julio 2020, 00:36 am
|
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(" %.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{ 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); do{ printf("\n Ingrese una opci%cn: ",162); 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: printf("\n\t INGRESO DATOS AL ARBOL"); printf("\n\t ******* ** ***** ** *****"); do{ printf("\n Ingrese un n%cmero al arbol: ", 163); insertar(arbol, num); do { printf("\n %cDesea ingresar otro dato al arbol?: ",168); 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: printf("\n\t MOSTRANDO DATOS DEL ARBOL"); printf("\n\t ********* ***** *** *****\n"); mostrar(arbol, cont); break; case 3: printf("\n\t CONSULTAR DATOS DEL DATOS"); printf("\n\t ********* ***** *** *****"); do{ printf("\n Ingrese un n%cmero a buscar del arbol: ",163); if(consultar(arbol, num) == true) { printf("\n EL ELEMENTO [%.2lf] HA SIDO ENCONTRADO", num ); } else { printf("\n EL DATO [%.2lf] NO ESTA GUARDADO EN EL ARBOL.",num ); } do { printf("\n %cDesea buscar otro dato dentro del %crbol?: ",168,160); 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: printf("\n\t eliminar un DATO DEL arbol"); printf("\n\t ********* ***** *** *****"); eliminar(arbol,num); default: } }while(opc != 6); } main() { menu(); return 0; }
|
|
|
2
|
Programación / Programación C/C++ / venta de boletos de autobuses utilizando (colas ,listas o arboles) y archivos
|
en: 27 Julio 2020, 03:22 am
|
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 ); } return valor; } //*************************************************************** void consultar() { int cod; archivo = fopen("pasajero.txt","rt"); if(archivo == NULL) printf("\nEl archivo No existe."); else { printf("\n Ingrese el codigo del pasajero: "); printf("\n codigo Edad Nombre No-asiento"); { 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; } printf("\n Pasajero no encontrado"); } } } //*************************************************************** void listar() { archivo = fopen("pasajero.txt", "rt" ); if(archivo == NULL) { printf("\nEl archivo No existe."); } else { printf("\nCodigo edad nombre promedio\n"); { 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); } } } //*************************************************************** void agregar() { char resp; archivo = fopen("pasajero.txt","rt"); if(archivo ==NULL) { printf("\nEl archivo No existe"); } else { archivo = fopen("pasajero.txt","at"); do { printf("\n\tDatos del pasajero"); printf("\n\t----- --- --------"); printf("\nIngrese el codigo del pasajero :"); pas.codigo=validar(pas.codigo,1,10); printf("\nIngrese la edad del pasajero:"); pas.edad=validar(pas.edad,1,100); printf("\nIngrese el nombre del pasajero: "); 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: "); if(resp != 'S' && resp != 'N') printf("\n Error... Ingrese [S o N]"); }while(resp != 'S' && resp != 'N'); }while(resp=='S'); } } //*************************************************************** 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"); } } //*************************************************************** void menu() { int opc; do { printf("\n[3]... listar datos "); printf("\n[4]... consultar pasajero"); do { printf("\nIngrese su opcion [1-5]: "); 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"); } }while(opc != 5); } //********************************************************* main () { menu(); return 0 ; }
|
|
|
|
|
|
|