elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / eliminar un dato de arbol en: 30 Julio 2020, 00:36
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
 
Código
  1. #include<stdio.h>
  2. #include<windows.h>
  3.  
  4. struct nodo{
  5. double dato;
  6. nodo *derecho;
  7. nodo *izquierdo;
  8. nodo *padre;
  9. };
  10.  
  11. nodo *arbol=NULL;
  12. //--------------------------elliminar dato----------------------------------
  13. void eliminar(nodo*arbol,double num)
  14. {
  15. if(arbol ==NULL)
  16. {
  17. return;
  18. }
  19. else if(num<arbol ->dato)
  20. {
  21. eliminar(arbol->izquierdo,num);
  22. }
  23. else if(num>arbol->dato)
  24. {
  25. eliminar(arbol-> derecho,num);
  26. }
  27. else
  28. {
  29. eliminarnodo(arbol);
  30. }
  31.  
  32.  
  33. }
  34. //--------------------------------------------------------------------------
  35. nodo*minimo(nodo*arbol)
  36. {
  37. if(arbol ==NULL)
  38. {
  39. return NULL;
  40. }
  41. if(arbole->izquierdo)
  42. {
  43. return minimo(arbol->izquierdo);
  44. }
  45. else
  46. {
  47. return arbol;
  48. }
  49. }
  50. //----------------------------------------------------------------
  51. void reemplazar(nodo *arbol,nodo* nuevonodo)
  52. {
  53. if(arbol->padre)
  54. {
  55.  
  56. if(arbol->dato =arbol->padre->izquierdo->dato)
  57. {
  58. arbol->padre->padre->izquierdo=nuevonodo;
  59. }
  60. else if(arbol->dato==arbol->padre->derecho->dato)
  61. {
  62. arbol->padre->derecho=nuevonodo;
  63. }
  64.  
  65. }
  66. if(nuevonodo)
  67. {
  68. nuevonodo->padre=arbol->padre;
  69. }
  70. }
  71. //--------------------------------------------------------------------------
  72. void destruirnodo(nodo *nodo)
  73. {
  74. nodo->izquierdo=NULL;
  75. nodo->derecho=NULL;
  76.  
  77. delete nodo;
  78. }
  79. //---------------------------------------------------------------------------
  80. void eliminarnodo(nodo*nodoeliminar)
  81. {
  82. if(nodoeliminar->izquerdo && nodoeliminar->derecho)
  83. {
  84. nodo*menor=minimo(nodoeliminar->derecho);
  85. nodoeliminar->dato=menor->dato;
  86. eliminarnodo(menor);
  87. }
  88. else if(nodoeliminar->izquierdo)
  89. {
  90. reemplazar(nodoeliminar,nodoeliminar->izquierda);
  91. destruirnodo(nodoeliminar);
  92. }
  93. else if(nodoeliminar->derecho)
  94. {
  95. reemplazar(nodoeliminar,nodoeliminar->derecho);
  96. destruirnodo(nodoeliminar);
  97. }
  98. }
  99. //--------------------------CONSULTAR DATOS---------------------------------
  100. bool consultar(nodo *arbol, double num){
  101.  
  102. if(arbol == NULL)
  103. {
  104. return false;
  105. }
  106. else if(arbol->dato == num)
  107. {
  108. return true;
  109. }
  110. else if(num < arbol->dato)
  111. {
  112. return consultar(arbol->izquierdo, num);
  113. }
  114. else
  115. {
  116. return consultar(arbol->derecho, num);
  117. }
  118.  
  119. }
  120.  
  121. //--------------------------MOSTRAR DATOS---------------------------------
  122. void mostrar(nodo *arbol, double cont)
  123. {
  124. if(arbol==NULL)
  125. {
  126. return;
  127. }
  128. else
  129. {
  130. mostrar(arbol->derecho, cont+1);
  131. for(int i=0;i<cont; i++)
  132. printf("    ");
  133. printf(" %.2lf \n\n",arbol->dato);
  134.  
  135. mostrar(arbol->izquierdo, cont+1);
  136.  
  137. }
  138.  
  139. }
  140. //-------------------------------------------------------------------------
  141.  
  142. nodo * crear(double num)
  143. {
  144. nodo * nuevonodo = new nodo();
  145. nuevonodo->dato = num;
  146. nuevonodo->derecho = NULL;
  147. nuevonodo->izquierdo = NULL;
  148.  
  149. return nuevonodo;
  150. }
  151. //---------------------------INSERTAR DATOS--------------------------------
  152. void insertar(nodo *&arbol, double num)
  153. {
  154. if(arbol == NULL)
  155. {
  156. nodo *nuevonodo = crear(num);
  157. arbol = nuevonodo;
  158. }
  159. else
  160. {
  161. int raiz=arbol->dato;
  162. if(num < raiz)
  163. insertar(arbol->izquierdo, num);
  164. else
  165. {
  166. insertar(arbol->derecho, num);
  167. }
  168. }
  169. }
  170. //------------------------------MENU-----------------------------------------------------
  171. void menu()
  172. {
  173. int opc, cont=0;
  174. double num;
  175. char resp;
  176.  
  177. do{
  178. system("cls");
  179. printf("\n\t MENU ARBOLES BINARIOS");
  180. printf("\n\t **** ******* ********");
  181.  
  182. printf("\n [1]...Agregando datos al %crbol",160);
  183. printf("\n [2]...Mostrar datos del %crbol",160);
  184. printf("\n [3]...Consultar datos del %crbol",160);
  185. printf("\n [4]...Eliminar un dato del %crbol",160);
  186. printf("\n [5]...Eliminar todos los datos del %crbol",160);
  187. printf("\n [6]...SALIR");
  188. do{
  189. printf("\n Ingrese una opci%cn: ",162);
  190. scanf("%d", &opc);
  191. if(opc<1 || opc>6);
  192. printf("\n ERROR...Ingrese una opci%cn v%clida[1-6]: ",162, 160);
  193. }while(opc<1 || opc>6);
  194.  
  195. switch(opc){
  196. case 1:
  197. system("cls");
  198. printf("\n\t INGRESO DATOS AL ARBOL");
  199. printf("\n\t ******* ** ***** ** *****");
  200.  
  201. do{
  202. printf("\n Ingrese un n%cmero al arbol: ", 163);
  203. scanf("%lf", &num);
  204. insertar(arbol, num);
  205.  
  206. do
  207. {
  208. printf("\n %cDesea ingresar otro dato al arbol?: ",168);
  209. scanf("%s", &resp);
  210. resp=toupper(resp);
  211. if(resp != 'S' && resp != 'N')
  212. printf("\n ERROR... Ingrese una opcion valida[S-N]");
  213. }while(resp != 'S' && resp != 'N');
  214. }while(resp=='S');
  215.  
  216. break;
  217.  
  218. case 2:
  219. system("cls");
  220. printf("\n\t MOSTRANDO DATOS DEL ARBOL");
  221. printf("\n\t ********* ***** *** *****\n");
  222. mostrar(arbol, cont);
  223. system("pause");
  224. break;
  225.  
  226. case 3:
  227. system("cls");
  228. printf("\n\t CONSULTAR DATOS DEL DATOS");
  229. printf("\n\t ********* ***** *** *****");
  230.  
  231. do{
  232. printf("\n Ingrese un n%cmero a buscar del arbol: ",163);
  233. scanf("%lf", &num);
  234.  
  235. if(consultar(arbol, num) == true)
  236. {
  237. printf("\n EL ELEMENTO [%.2lf] HA SIDO ENCONTRADO", num);
  238. printf("\n");
  239. }
  240. else
  241. {
  242. printf("\n EL DATO [%.2lf] NO ESTA GUARDADO EN EL ARBOL.",num);
  243. printf("\n");
  244. }
  245. printf("\n");
  246. system("pause");
  247.  
  248. do
  249. {
  250. printf("\n %cDesea buscar otro dato dentro del %crbol?: ",168,160);
  251. scanf("%s", &resp);
  252. resp=toupper(resp);
  253. if(resp != 'S' && resp != 'N')
  254. printf("\n ERROR... Ingrese una opcion valida[S-N]");
  255. }while(resp != 'S' && resp != 'N');
  256. }while(resp=='S');
  257. break;
  258. case 4:
  259. system("cls");
  260. printf("\n\t eliminar un DATO DEL arbol");
  261. printf("\n\t ********* ***** *** *****");
  262. eliminar(arbol,num);
  263.  
  264. default:
  265. exit(0);
  266. }
  267.  
  268. }while(opc != 6);
  269.  
  270.  
  271.  
  272. }
  273.  
  274. main()
  275. {
  276. menu();
  277. return 0;
  278. }
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
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
  
Código
  1. #include<stdio.h>
  2. #include<windows.h>
  3.  
  4. FILE *archivo;
  5.  
  6. struct pasajero
  7. {
  8. int codigo ,asiento, edad;
  9. char nombre [50];
  10. double precio ,precioTotal;
  11. }pas;
  12. //**************************************************************
  13. double validar(double valor, double li, double ls)
  14. {
  15. while(valor < li || valor > ls)
  16. {
  17.    printf("\n Error...Ingrese un valor entre [%.2lf] y [%.2lf]: ", li, ls);
  18. scanf("%lf",&valor);  
  19. }
  20. return valor;
  21. }
  22. //***************************************************************
  23. void consultar()
  24. {
  25. int cod;
  26.  
  27. system("cls");
  28.  
  29. archivo = fopen("pasajero.txt","rt");
  30.  
  31. if(archivo == NULL)
  32. printf("\nEl archivo No existe.");
  33. else
  34. {
  35. printf("\n Ingrese el codigo del pasajero: ");
  36. scanf("%d",&pas.codigo);
  37.  
  38. printf("\n codigo Edad Nombre No-asiento");
  39.  
  40. while(!feof(archivo))
  41. {
  42. fscanf(archivo, "%d %d %s %d",&pas.codigo,&pas.edad,&pas.nombre,&pas.asiento);
  43.  
  44. if(pas.codigo==cod)
  45. {
  46. printf("%d %d %s %d",pas.codigo,pas.edad,pas.nombre,pas.asiento);
  47. break;
  48. }
  49. else if(feof(archivo))
  50. printf("\n Pasajero no encontrado");
  51. }
  52. }
  53. system("pause");
  54. fclose(archivo);
  55. }
  56. //***************************************************************
  57. void listar()
  58. {
  59. system("cls");
  60.  
  61. archivo = fopen("pasajero.txt", "rt" );
  62.  
  63. if(archivo == NULL)
  64.     {
  65. printf("\nEl archivo No existe.");
  66.   }
  67. else
  68.     {
  69.   printf("\nCodigo edad nombre promedio\n");
  70.  
  71.   while(!feof(archivo))
  72.            {
  73.  fscanf(archivo, "%d %d %s %d", &pas.codigo, &pas.edad, &pas.nombre, &pas.asiento);
  74.    printf("%5d %4d %5s %5d\n", pas.codigo, pas.edad, pas.nombre, pas.asiento);
  75.            }
  76.     }
  77. system("pause");
  78. fclose(archivo);
  79. }
  80. //***************************************************************
  81. void agregar()
  82. {
  83. char resp;
  84. archivo = fopen("pasajero.txt","rt");
  85.  
  86. if(archivo ==NULL)
  87. {
  88. printf("\nEl archivo No existe");
  89. }
  90. else
  91. {
  92. system("cls");
  93. archivo = fopen("pasajero.txt","at");
  94. do
  95. {
  96. printf("\n\tDatos del pasajero");
  97. printf("\n\t----- --- --------");
  98. printf("\nIngrese el codigo del pasajero :");
  99. scanf("%d",&pas.codigo);
  100. pas.codigo=validar(pas.codigo,1,10);
  101.  
  102. printf("\nIngrese la edad del pasajero:");
  103. scanf("%d",&pas.edad);
  104. pas.edad=validar(pas.edad,1,100);
  105.  
  106. printf("\nIngrese el nombre del pasajero: ");
  107. scanf("%s",&pas.nombre);
  108.  
  109. printf("\nIngrese el numero del asiento:");
  110. scanf("%d",&pas.asiento);
  111.  
  112. fprintf(archivo, "\n %d", pas.codigo);
  113.          fprintf(archivo, "\n %d", pas.edad);
  114. fprintf(archivo, "\n %s", pas.nombre);
  115. fprintf(archivo, "\n %d", pas.asiento);
  116.  
  117. do
  118. {
  119. printf("\n Desea agregar otro envio? \n: ");
  120.    scanf("%s", &resp);
  121.    resp = toupper(resp);
  122.    if(resp != 'S' && resp != 'N')
  123.     printf("\n Error... Ingrese [S o N]");
  124. }while(resp != 'S' && resp != 'N');
  125.  
  126. }while(resp=='S');
  127. }
  128. printf("\n");
  129. system("pause");    
  130. fclose(archivo);
  131. }
  132. //***************************************************************
  133. void crear()
  134. {
  135. archivo = fopen("pasajero.txt","rt");
  136.  
  137. if(archivo !=NULL)
  138. {
  139. printf("\n El archivo ya existe");
  140. }
  141. else
  142. {
  143. archivo = fopen("pasajero.txt","wt");
  144. printf("\n el archivo a sido creado con exito");
  145. }
  146. system("pause");
  147. fclose(archivo);
  148. }
  149. //***************************************************************
  150. void menu()
  151. {
  152. int opc;
  153. do
  154. {
  155. system("cls");
  156. printf("\nMenu :");
  157. printf("\n[1]...crear");
  158. printf("\n[2]... Agregar");
  159. printf("\n[3]... listar datos ");
  160. printf("\n[4]... consultar pasajero");
  161. printf("\n[5]... salir");
  162. do
  163. {
  164. printf("\nIngrese su opcion [1-5]: ");
  165. scanf("%d",&opc);
  166. if(opc<1 || opc>5)
  167. printf("\nError ingrese [1-5]: ");
  168. }while(opc<1 || opc>7);
  169.  
  170. switch(opc)
  171. {
  172. case 1:
  173. crear();
  174. break;
  175. case 2:
  176. agregar();
  177. break;
  178. case 3:
  179. listar();
  180. break;
  181. case 4:
  182. consultar();
  183. break;
  184. default:
  185. printf("gracias por usar nuestro sistema");
  186. exit(0);
  187. }
  188. }while(opc != 5);
  189. }
  190. //*********************************************************
  191. main ()
  192. {
  193. menu();
  194.  
  195. return 0 ;
  196. }
  197.  
Páginas: [1]
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines