Advertisement
fabgonber

lls_todas_las_funciones

Sep 28th, 2020
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.86 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. typedef struct {
  5.        int largo; // en este caso es un numero entero
  6.        int ancho;
  7. } rectangulo;
  8.  
  9. struct nodo {
  10.        rectangulo informacion;
  11.        struct nodo * sgte;
  12. };
  13.  
  14. typedef struct nodo * tipo_lista;
  15.  
  16. bool son_iguales(rectangulo a,rectangulo b)
  17. {
  18.     if ((a.largo==b.largo)&&(a.ancho==b.ancho))
  19.     { return true; }
  20.     else
  21.     { return false; }
  22. }
  23.  
  24.  
  25. void ingresa_datos_rectangulo(rectangulo * un_rectangulo, int lado1, int lado2)
  26. {
  27.     if (lado1>lado2)
  28.     {
  29.      un_rectangulo->largo = lado1;
  30.      un_rectangulo->ancho = lado2;
  31.     }
  32.     else
  33.     {
  34.      un_rectangulo->largo = lado2;
  35.      un_rectangulo->ancho = lado1;
  36.     }
  37. }
  38.  
  39. // en algunos lenguajes de programacion el compilador
  40. // no copia la estructura entera y hay que copiar a mano
  41. // cada uno de los campos, no es el caso de c++
  42. void copiar(rectangulo origen, rectangulo * destino)
  43. {
  44.   destino->largo = origen.largo;
  45.   destino->ancho = origen.ancho;
  46. }
  47.  
  48.  
  49. void imprime_rectangulo(rectangulo otro)
  50. {
  51.   cout << "largo " << otro.largo;
  52.   cout << ",ancho " << otro.ancho;
  53.   cout << "\n";
  54. }
  55.  
  56. int area_rectangulo(rectangulo * un_rectangulo)
  57. {
  58.     return un_rectangulo->ancho*un_rectangulo->largo;
  59. }
  60.  
  61. int area_rectangulo(rectangulo un_rectangulo)
  62. {
  63.     return un_rectangulo.ancho*un_rectangulo.largo;
  64. }
  65.  
  66. // parte 2:
  67. void insertar_al_inicio(tipo_lista &lista, rectangulo valor)
  68. {
  69.     tipo_lista q;
  70.     q = new(struct nodo);
  71.     q->informacion = valor;
  72.     q->sgte = lista;
  73.     lista  = q;
  74. }
  75.  
  76. void insertar_al_final(tipo_lista &lista, rectangulo valor)
  77. {
  78.     tipo_lista t, q = new(struct nodo);
  79.  
  80.     q->informacion  = valor;
  81.     q->sgte = NULL;
  82.  
  83.     if(lista==NULL)
  84.     {
  85.         lista = q;
  86.     }
  87.     else
  88.     {
  89.         t = lista;
  90.         while(t->sgte!=NULL)
  91.         {
  92.             t = t->sgte;
  93.         }
  94.         t->sgte = q;
  95.     }
  96.  
  97. }
  98.  
  99. void imprime_rectangulos(tipo_lista lista)
  100. // paso por copia, del lenguaje de programacion
  101. {
  102.      while(lista != NULL)
  103.      {
  104.           imprime_rectangulo(lista->informacion);
  105.           lista = lista->sgte;
  106.      }
  107. }
  108.  
  109. int contar(tipo_lista lista)
  110. // paso por copia, del lenguaje de programacion
  111. {
  112.      int tmp = 0;
  113.      while(lista != NULL)
  114.      {
  115.           tmp = tmp + 1; // tmp++;
  116.           lista = lista->sgte;
  117.      }
  118.      return tmp;
  119. }
  120.  
  121. int buscar(tipo_lista pajar, rectangulo aguja)
  122. // paso por copia, del lenguaje de programacion
  123. {
  124.      int tmp = 0;
  125.      int ubicacion = -1; // si no esta devolvemos -1
  126.      while(pajar != NULL)
  127.      {
  128.           if (son_iguales(aguja,pajar->informacion))
  129.           {
  130.             ubicacion = tmp;
  131.           }
  132.           tmp = tmp + 1; // tmp++;
  133.           pajar = pajar->sgte;
  134.      }
  135.      return ubicacion;
  136. }
  137.  
  138.  
  139.  
  140. void eliminar_por_posicion(
  141.         tipo_lista &los_rectangulos,
  142.         int posicion)
  143. {
  144.   // recordatorio
  145.   // en c, c++, java, php, otros el primer elemento
  146.   // es el con indice cero
  147.   // el primero tiene posicion cero!
  148.  
  149.  
  150.   if (contar(los_rectangulos)>posicion)
  151.   {
  152.  
  153.   int i;
  154.   tipo_lista victima, anterior;
  155.  
  156.   if (posicion==0)
  157.   {
  158.       victima = los_rectangulos;
  159.       los_rectangulos = los_rectangulos->sgte;
  160.       delete(victima);
  161.   }
  162.   else
  163.   {
  164.     anterior = los_rectangulos;
  165.     victima = anterior->sgte;
  166.     for (i=1;i<posicion;i++)
  167.     {
  168.     //    cout << " * ";
  169.         anterior = anterior->sgte;
  170.         victima = victima->sgte;
  171.     }
  172.     // cout << "\n";
  173.     anterior->sgte = victima->sgte;
  174.     delete(victima);
  175.   }
  176.  
  177.   } // if contar
  178. }
  179.  
  180. void eliminar_cual(
  181.         tipo_lista &los_rectangulos,
  182.         rectangulo cual)
  183. {
  184.     int donde_esta = buscar(los_rectangulos, cual);;
  185.     while (donde_esta!=(-1)) {
  186.       eliminar_por_posicion(los_rectangulos,donde_esta);
  187.       donde_esta = buscar(los_rectangulos, cual);
  188.     }
  189. }
  190.  
  191.  
  192. void inserta_ordenado_por_area(
  193.         tipo_lista &los_rectangulos,
  194.         rectangulo nuevo)
  195. {
  196.       tipo_lista q, antes_de_q;
  197.       tipo_lista nodo_nuevo;
  198.       bool insertado = false;
  199.       int area_esta;
  200.       int area_nuevo;
  201.  
  202.       if (los_rectangulos==NULL)
  203.       {
  204.         insertar_al_inicio(los_rectangulos,nuevo);
  205.       }
  206.       else // if (los_rectangulos==NULL)
  207.       {
  208.           q = los_rectangulos;
  209.           area_esta = area_rectangulo(q->informacion);
  210.           area_nuevo = area_rectangulo(nuevo);
  211.           if (area_esta>area_nuevo)
  212.           {
  213.               insertar_al_inicio(los_rectangulos,nuevo);
  214.           }
  215.           else //  (area_esta>area_nuevo)
  216.           {
  217.               antes_de_q = q;
  218.               q = q->sgte;
  219.               while ((q!=NULL)&&(insertado==false))
  220.               {
  221.                     area_esta = area_rectangulo(q->informacion);
  222.                     if (area_esta>area_nuevo)
  223.                     {
  224.                         // insertar adelante
  225.                         nodo_nuevo = new(struct nodo);
  226.                         nodo_nuevo->informacion = nuevo;
  227.                         nodo_nuevo->sgte = q;
  228.                         antes_de_q->sgte = nodo_nuevo;
  229.                        
  230.                         insertado = true;
  231.                        
  232.                     } else
  233.                     {
  234.                       antes_de_q = q;
  235.                       q = q->sgte;
  236.                     }
  237.               }
  238.               if (insertado==false)
  239.               {
  240.                   insertar_al_final(los_rectangulos,nuevo);
  241.               }
  242.           } //  (area_esta>area_nuevo)
  243.       } // if (los_rectangulos==NULL)
  244.   /*
  245.     funciona si el mas alto no es el primero en ingresarse
  246.   */
  247. }
  248.  
  249.  
  250.  
  251. // se aplica recursividad:
  252. // 2020-09-28
  253. void imprime_rectangulos_desde_el_final(tipo_lista lista)
  254. // paso por copia, del lenguaje de programacion
  255. {
  256.     rectangulo rosa;
  257.     if (lista != NULL)
  258.      {
  259.           rosa = lista->informacion;
  260.          
  261.           imprime_rectangulos_desde_el_final(lista->sgte);
  262.  
  263.           // lo mismo cout:
  264.           imprime_rectangulo(rosa);
  265.          
  266.      }
  267. }
  268.  
  269. int main() {
  270.   cout << "Hello World!\n";
  271.  
  272.   /*
  273.   // parte 1:
  274.   int a,b, un_area;
  275.   rectangulo azul, verde;
  276.   cout << "ingrese lado ";
  277.   cin >> a;
  278.   cout << "ingrese otro lado ";
  279.   cin >> b;
  280.   ingresa_datos_rectangulo(&azul,a,b);
  281.   imprime_rectangulo(azul);
  282.   un_area = area_rectangulo(azul);
  283.   cout << "el area es " << un_area << "\n";
  284.  
  285.   cout << "ingrese lado ";
  286.   cin >> a;
  287.   cout << "ingrese otro lado ";
  288.   cin >> b;
  289.   ingresa_datos_rectangulo(&verde,a,b);
  290.   imprime_rectangulo(verde);
  291.  
  292.   // if (azul==verde) // c++ no lo permite
  293.   if (son_iguales(azul,verde))
  294.   {
  295.      cout << "son iguales";
  296.   } else
  297.   {
  298.      cout << "son distintos";
  299.   }
  300.   */
  301.  
  302.  
  303.  
  304.  
  305.  
  306.   // PARTE 2:
  307.   int cuantos,i,a,b;
  308.   rectangulo matame;
  309.  
  310.   rectangulo azul;
  311.  
  312.   tipo_lista varios_rectangulos = NULL;
  313.   cout << "cuantos elementos ingresar ? ";
  314.   cin >> cuantos;
  315.   for (i=0;i<cuantos;i++)
  316.   {
  317.       cout << "\n == rectangulo " << i << " == \n";
  318.       cout << "ingrese lado ";
  319.       cin >> a;
  320.       cout << "ingrese otro lado ";
  321.       cin >> b;
  322.       ingresa_datos_rectangulo(&azul,a,b);
  323.       // insertar_al_inicio(varios_rectangulos,azul);
  324.       insertar_al_inicio(varios_rectangulos, azul);
  325.   }
  326.  
  327.  
  328.   cout << "\n == antes de eliminar == \n";
  329.   imprime_rectangulos(varios_rectangulos);
  330.  
  331. cout << "\n == ingrese datos del rectangulo a eliminar == \n";
  332.       cout << "ingrese lado ";
  333.       cin >> a;
  334.       cout << "ingrese otro lado ";
  335.       cin >> b;
  336.       ingresa_datos_rectangulo(&matame,a,b);
  337.  
  338.   eliminar_cual(varios_rectangulos,matame);
  339.   cout << "\n == despues de eliminar == \n";
  340.   imprime_rectangulos(varios_rectangulos);
  341.  
  342.  
  343.   /*
  344.   eliminar_por_posicion(varios_rectangulos,4);
  345.   cout << "\n == despues de eliminar == \n";
  346.   imprime_rectangulos(varios_rectangulos);
  347.   */
  348.  
  349.   /*
  350.   imprime_rectangulos_desde_el_final(varios_rectangulos);
  351.   */
  352.  
  353. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement