Foros del Web » Programación para mayores de 30 ;) » C/C++ »

necesito explicación con un codigo

Estas en el tema de necesito explicación con un codigo en el foro de C/C++ en Foros del Web. hola, tengo un código "no es mio" pero parece que hace algo parecido a lo que quiero hacer que al parecer es un diccionario excepto ...
  #1 (permalink)  
Antiguo 30/11/2012, 23:59
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 11 años, 7 meses
Puntos: 0
necesito explicación con un codigo

hola, tengo un código "no es mio" pero parece que hace algo parecido a lo que quiero hacer que al parecer es un diccionario excepto por que no hace nada quiero saber por que la función main debe retornar un entero si es void.
y quisiera saber aunque sea por encima, que hacen las funciones rotación por favor, me parecen muchas funciones para nomas de un diccionario y aunque el código marea por ser tan extenso. yo solo quiero agregar y sobre escribir no quiero rotar nada pero de pronto alguna de esas funciones me ayude en lo que necesito.
aquí esta el codigo es bastante extenso no no estoy seguro de si hay funciones que dependan de otras así que lo subo todo.

Código C++:
Ver original
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "conio.h"
  4. #include "string.h"
  5. #include "iostream"
  6. using namespace std;
  7.  
  8. //Estructura del Nodo
  9.  
  10. struct nodos{
  11.     char ingles[50];
  12.     char espanol[50];
  13.     struct nodos *der;
  14.     struct nodos *izq;
  15.     int Fe;
  16. };
  17.  
  18. typedef struct nodos Arbol;
  19. typedef Arbol *ARBOL;
  20. int listo;
  21. char in[50],es[50];
  22.  
  23. //Protótipos de las funciones
  24.  
  25. void menu();
  26. void menu_agregar();
  27. void menu_ingles();
  28. void menu_espanol();
  29. void menu_borrar();
  30. void menu_listar();
  31. void agregar(ARBOL  *nodoarb);
  32. void buscar_ingles(ARBOL nodoarb);
  33. void buscar_espanol(ARBOL nodoarb);
  34. void listar(ARBOL nodoarb);
  35. void rotacionddsimple(ARBOL *nodoarb);
  36. void rotaciondidoble(ARBOL *nodoarb);
  37. void rotaciondd2(ARBOL *nodoarb);
  38. void rotacionii2(ARBOL *nodoarb);
  39. void rotacioniisimple(ARBOL *nodoarb);
  40. void rotacioniddoble(ARBOL *nodoarb);
  41. void menor(ARBOL nodoarb);
  42. void actualizarbi(ARBOL *nodoarb, int *ban);
  43. void actualizarbd(ARBOL *nodoarb, int *ban);
  44. void eliminar(ARBOL *nodoarb, int *ban);
  45. void borrar(ARBOL *nodoarb , int *ban);
  46.  
  47. //                              PROGRAMA PRINCIPAL
  48.  
  49. void main()
  50. {
  51.     char opc='1';
  52.     int ban=1;
  53.     ARBOL raiz=NULL;
  54.     do
  55.         {
  56.             menu();
  57.             cin>>opc;
  58.             switch(opc){
  59.                         case '1':
  60.                                 menu_agregar();
  61.                                 cout<<"Introduzca Palabra en Ingles : ";
  62.                                 cin>>in;
  63.                                 cout<<"Introduzca Palabra en Espanol : ";
  64.                                 cin>>es;                               
  65.                                 agregar(&raiz);
  66.                                 break;
  67.                         case '2':
  68.                                 menu_borrar();
  69.                                 cout<<"Que Palabra en Ingles desea Borrar? : ";
  70.                                 cin>>in;
  71.                                 borrar(&raiz,&ban);
  72.                                 cout<<"Elemento Borrado!";
  73.                                 break;
  74.                         case '3':
  75.                                 menu_ingles();             
  76.                                 cout<<"Que Palabra en Ingles desea Buscar? : ";
  77.                                 cin>>in;
  78.                                 listo=0;
  79.                                 buscar_ingles(raiz);
  80.                                 if (listo==0)
  81.                                     cout<<"Elemento no encontrado!";
  82.                                 getch();
  83.                                 listo=0;
  84.                                 break;
  85.                                
  86.                         case '4':  
  87.                                 menu_espanol();            
  88.                                 cout<<"Que Palabra en Espanol desea Buscar? : ";
  89.                                 cin>>es;
  90.                                 listo=0;
  91.                                 buscar_espanol(raiz);
  92.                                 if (listo==0)
  93.                                     cout<<"Elemento no encontrado!";
  94.                                 getch();
  95.                                 listo=0;
  96.                                 break;
  97.                         case '5':
  98.                                 menu_listar();
  99.                                 listar(raiz);
  100.                                 getch();
  101.                                 break;
  102.                         }
  103.         }   while (opc !='6');
  104. }
  105.  
  106. //  Funcion Menu
  107.  
  108. void menu()
  109. {
  110.     system("cls");
  111.  
  112.     cout<<"                  1. Agregar palabras al diccionario                            "<<endl;
  113.     cout<<"                                                                                "<<endl;
  114.     cout<<"                  2. Borrar palabras del diccionario                            "<<endl;
  115.     cout<<"                                                                                "<<endl;
  116.     cout<<"                  3. Consultar Palabra en Ingles                                "<<endl;
  117.     cout<<"                                                                                "<<endl;
  118.     cout<<"                  4. Consultar Palabra en Espanol                               "<<endl;
  119.     cout<<"                                                                                "<<endl;
  120.     cout<<"                  5. Listar Palabras                                            "<<endl;
  121.     cout<<"                                                                                "<<endl;
  122.     cout<<"                  6. Salir                                                      "<<endl;
  123.  
  124.     cout<<"  Digite su Opcion                                                         "<<endl;
  125.    
  126. }
  127.  
  128. void agregar(ARBOL  *nodoarb)
  129. {
  130.  
  131.     int det;   
  132.     if (*nodoarb == NULL){
  133.         *nodoarb = new(Arbol);
  134.         if (*nodoarb != NULL){
  135.             strcpy((*nodoarb)->ingles,in);
  136.             strcpy((*nodoarb)->espanol,es);
  137.             (*nodoarb)->der=NULL;
  138.             (*nodoarb)->izq=NULL;
  139.         }
  140.         else{
  141.             system("cls");
  142.             cout<<"No hay memoria suficiente!";
  143.         }
  144.     }
  145.     else
  146.     {
  147.         det=strcmp(in,(*nodoarb)->ingles);
  148.  
  149.         if (det < 0)
  150.             agregar (&((*nodoarb)->izq));
  151.         else
  152.             if (det > 0)
  153.                 agregar (&((*nodoarb)->der));
  154.             else
  155.             {
  156.                 system("cls");
  157.                 cout<<"¡¡¡ Dato duplicado !!!";
  158.                 getch();
  159.                 system("cls");
  160.             }
  161.     }
  162. }
  163.  
  164.  
  165. //Funcion Buscar Ingles
  166.  
  167.  
  168. void buscar_ingles(ARBOL nodoarb)
  169. {
  170.     if (nodoarb != NULL){
  171.         buscar_ingles(nodoarb->izq);
  172.         if (strcmp(in,nodoarb->ingles)==0)
  173.         {
  174.             cout<<endl;
  175.             cout<<endl;
  176.             cout<<endl;
  177.             cout<<"                        "<<nodoarb->ingles<<" -> "<<nodoarb->espanol<<endl;
  178.             listo=1;
  179.             return;
  180.         }
  181.         buscar_ingles(nodoarb->der);
  182.     }
  183. }
  184.  
  185.  
  186. //Funcion Buscar español
  187.  
  188.  
  189. void buscar_espanol(ARBOL nodoarb)
  190. {
  191.     if (nodoarb != NULL){
  192.         buscar_espanol(nodoarb->izq);
  193.         if (strcmp(es,nodoarb->espanol)==0)
  194.         {
  195.             cout<<endl;
  196.             cout<<endl;
  197.             cout<<endl;
  198.             cout<<"                        "<<nodoarb->espanol<<" -> "<<nodoarb->ingles<<endl;
  199.             listo=1;
  200.             return;
  201.         }
  202.         buscar_espanol(nodoarb->der);
  203.     }
  204. }
  205.  
  206. //Funcion listar Palabras
  207.  
  208.  
  209.  
  210. void listar(ARBOL nodoarb)
  211. {
  212.     if (nodoarb != NULL){
  213.         listar(nodoarb->izq);
  214.         cout<<"                            "<<nodoarb->ingles<<" -> "<<nodoarb->espanol<<endl;
  215.         listar(nodoarb->der);
  216.     }
  217. }
  218.  
  219.  
  220. //  Funcion rotacionddsimple
  221.  
  222.  
  223. void rotacionddsimple(ARBOL *nodoarb)
  224. {
  225.   ARBOL nda=NULL;
  226.     nda=(*nodoarb)->der;
  227.     (*nodoarb)->der=nda->izq;
  228.     nda->izq=(*nodoarb);
  229.     nda->Fe=0;
  230.     (*nodoarb)->Fe=0;
  231. }
  232.  
  233.  
  234. //      Funcion rotaciondidoble
  235.  
  236.  
  237. void rotaciondidoble(ARBOL *nodoarb)
  238. {
  239.   ARBOL nda1=NULL, nda2=NULL;
  240.     nda1=(*nodoarb)->der;
  241.     nda2=nda1->der;
  242.  
  243.     nda1->izq=nda2->der;
  244.     nda2->der=nda1;
  245.     (*nodoarb)->der=nda2->izq;
  246.     nda2->izq=(*nodoarb);
  247.  
  248.     if (nda2->Fe == 1)
  249.         (*nodoarb)->Fe=-1;
  250.     else
  251.         (*nodoarb)->Fe=0;
  252.     if (nda2->Fe == -1)
  253.         (*nodoarb)->Fe=1;
  254.     else
  255.         (*nodoarb)->Fe=0;
  256.  
  257.     nda2->Fe=0;
  258.     (*nodoarb)=nda2;
  259. }
  260.  
  261.  
  262. //      Funcion rotaciondd2
  263.  
  264.  
  265. void rotaciondd2(ARBOL *nodoarb)
  266. {
  267.   ARBOL nda=NULL;
  268.     nda=(*nodoarb)->der;
  269.     (*nodoarb)->der=nda->izq;
  270.     nda->izq=(*nodoarb);
  271.     nda->Fe=-1;
  272.     (*nodoarb)->Fe=1;
  273.     (*nodoarb)=nda;
  274. }
  275.  
  276.  
  277. //Funcion rotacionii2
  278.  
  279.  
  280. void rotacionii2(ARBOL *nodoarb)
  281. {
  282.   ARBOL nda=NULL;
  283.     nda=(*nodoarb)->izq;
  284.     (*nodoarb)->izq=nda->der;
  285.     nda->der=(*nodoarb);
  286.     nda->Fe=1;
  287.     (*nodoarb)->Fe=-1;
  288.     (*nodoarb)=nda;
  289. }
  290.  
  291. //                              Funcion rotacionsimple
  292.  
  293. void rotacioniisimple(ARBOL *nodoarb)
  294. {
  295.   ARBOL nda=NULL;
  296.     nda=(*nodoarb)->izq;
  297.     (*nodoarb)->izq=nda->der;
  298.     nda->der=(*nodoarb);
  299.     nda->Fe=0;
  300.     (*nodoarb)->Fe=0;
  301.         *nodoarb=nda;
  302. }
  303.  
  304.  
  305. //Funcion rotacioniddoble
  306.  
  307.  
  308. void rotacioniddoble(ARBOL *nodoarb)
  309. {
  310.   ARBOL nda1=NULL, nda2=NULL;
  311.  
  312.     nda1=(*nodoarb)->izq;
  313.     nda2=nda1->der;
  314.     nda1->der=nda2->izq;
  315.     nda2->izq=nda1;
  316.  
  317.     (*nodoarb)->izq=nda2->der;
  318.     nda2->der=(*nodoarb);
  319.  
  320.     if (nda2->Fe == 1)
  321.         nda1->Fe=-1;
  322.     else
  323.         nda1->Fe=0;
  324.     if (nda2->Fe == -1)
  325.         (*nodoarb)->Fe=1;
  326.     else
  327.         (*nodoarb)->Fe=0;
  328.  
  329.     nda2->Fe=0;
  330.     (*nodoarb)=nda2;
  331. }
  332.  
  333.  
  334. //      Funcion Menor
  335.  
  336.  
  337. void menor(ARBOL nodoarb)
  338. {
  339.     if (nodoarb->izq == NULL)
  340.     {  
  341.         strcpy(in,nodoarb->ingles);
  342.         strcpy(es,nodoarb->espanol);
  343.     }
  344.     else
  345.         menor(nodoarb->izq);
  346. }
  347.  
  348.  
  349. //Funcion Actualizarbi
  350.  
  351.  
  352. void actualizarbi(ARBOL *nodoarb, int *ban)
  353. {
  354.     switch((*nodoarb)->Fe){
  355.         case -1:
  356.             (*nodoarb)->Fe=0;
  357.             break;
  358.         case 0:
  359.             (*nodoarb)->Fe=1;
  360.             *ban=0;
  361.             break;
  362.         case 1:
  363.             switch((*nodoarb)->der->Fe){
  364.                 case 1:
  365.                     rotacionddsimple(&(*nodoarb));
  366.                     break;
  367.                 case -1:
  368.                     rotaciondidoble(&(*nodoarb));
  369.                     break;
  370.                 case 0:
  371.                     rotaciondd2(&(*nodoarb));
  372.                     *ban=0;
  373.                     break;
  374.  
  375.             }
  376.             break;
  377.     }
  378. }
  379.  
  380. //  Funcion Actualizarbd
  381.  
  382.  
  383. void actualizarbd(ARBOL *nodoarb, int *ban)
  384. {
  385.     switch((*nodoarb)->Fe){
  386.         case 1:
  387.             (*nodoarb)->Fe=0;
  388.             break;
  389.         case 0:
  390.             (*nodoarb)->Fe=-1;
  391.             *ban=0;
  392.             break;
  393.         case -1:
  394.             switch((*nodoarb)->izq->Fe){
  395.                 case -1:
  396.                     rotacioniisimple(&(*nodoarb));
  397.                     break;
  398.                 case 1:
  399.                     rotacioniddoble(&(*nodoarb));
  400.                     break;
  401.                 case 0:
  402.                     rotacionii2(&(*nodoarb));
  403.                     *ban=0;
  404.                     break;
  405.  
  406.             }
  407.             break;
  408.     }
  409. }
  410.  
  411. //Funcion Eliminar
  412.  
  413. void eliminar(ARBOL *nodoarb, int *ban)
  414. {
  415.  ARBOL aux=NULL;
  416.  
  417.     if ((*nodoarb)->izq == NULL){
  418.         aux=*nodoarb;
  419.         *nodoarb=(*nodoarb)->der;
  420.         free(aux);
  421.         *ban=1;
  422.     }
  423.     else{
  424.         if ((*nodoarb)->der == NULL){
  425.             aux=*nodoarb;
  426.             *nodoarb=(*nodoarb)->izq;
  427.             free(aux);
  428.             *ban=1;
  429.         }
  430.         else{
  431.             menor((*nodoarb)->der);
  432.             borrar(&(*nodoarb)->der,&(*ban));
  433.             if (*ban)
  434.                 actualizarbd(&(*nodoarb),&(*ban));
  435.         }
  436.     }
  437. }
  438.  
  439. //Funcion Borrar
  440.  
  441. void borrar(ARBOL *nodoarb , int *ban)
  442. {
  443.     if (nodoarb == NULL)
  444.         *ban=0;
  445.     else
  446.         if (strcmp((*nodoarb)->ingles,in)==0)
  447.             eliminar(&(*nodoarb),&(*ban));
  448.  
  449.         else
  450.             if (strcmp((*nodoarb)->ingles,in) > 0 ){
  451.                 borrar(&(*nodoarb)->izq,&(*ban));
  452.                 if (*ban)
  453.                     actualizarbi(&(*nodoarb),&(*ban));
  454.             }
  455.             else{
  456.                 borrar(&(*nodoarb)->der,&(*ban));
  457.                 if (*ban)
  458.                     actualizarbd(&(*nodoarb),&(*ban));
  459.  
  460.             }
  461. }
  #2 (permalink)  
Antiguo 01/12/2012, 09:59
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: necesito explicación con un codigo

"...por que la función main debe retornar un entero si es void..."

La funcion main es de tipo entero ( int main(int , char **) ), y debe retornar un codigo de error que por defecto será 0. Las demas funciones de tu codigo no las he mirado.

Saludos
vosk
  #3 (permalink)  
Antiguo 01/12/2012, 10:05
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: necesito explicación con un codigo

Para mi gusto, lo mas dificil de la programacion es analizar el codigo de otro(y mas si no esta comentado)


Saludos
  #4 (permalink)  
Antiguo 01/12/2012, 10:21
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: necesito explicación con un codigo

Estoy de acuerdo
  #5 (permalink)  
Antiguo 02/12/2012, 16:52
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: necesito explicación con un codigo

Gracias por la honestidad la verdad yo creía que la gente con mucha experiencia leía estos códigos como si fuera su lengua materna, bueno luego de rascarme la cabeza como un mono con piojitos tome lo que entendí arregle el código he hice mi diccionario.

Etiquetas: estructura, funcion, int, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:32.