Advertisement
fabgonber

Untitled

Sep 23rd, 2020
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.11 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 inserta_ordenado_por_area(
  100.         tipo_lista &los_rectangulos,
  101.         rectangulo nuevo)
  102. {
  103.       tipo_lista q, antes_de_q;
  104.       tipo_lista nodo_nuevo;
  105.       bool insertado = false;
  106.       int area_esta;
  107.       int area_nuevo;
  108.  
  109.       if (los_rectangulos==NULL)
  110.       {
  111.         insertar_al_inicio(los_rectangulos,nuevo);
  112.       }
  113.       else // if (los_rectangulos==NULL)
  114.       {
  115.           q = los_rectangulos;
  116.           area_esta = area_rectangulo(q->informacion);
  117.           area_nuevo = area_rectangulo(nuevo);
  118.           if (area_esta>area_nuevo)
  119.           {
  120.               insertar_al_inicio(los_rectangulos,nuevo);
  121.           }
  122.           else //  (area_esta>area_nuevo)
  123.           {
  124.               antes_de_q = q;
  125.               q = q->sgte;
  126.               while ((q!=NULL)&&(insertado==false))
  127.               {
  128.                     area_esta = area_rectangulo(q->informacion);
  129.                     if (area_esta>area_nuevo)
  130.                     {
  131.                         // insertar adelante
  132.                         nodo_nuevo = new(struct nodo);
  133.                         nodo_nuevo->informacion = nuevo;
  134.                         nodo_nuevo->sgte = q;
  135.                         antes_de_q->sgte = nodo_nuevo;
  136.                        
  137.                         insertado = true;
  138.                        
  139.                     } else
  140.                     {
  141.                       antes_de_q = q;
  142.                       q = q->sgte;
  143.                     }
  144.               }
  145.               if (insertado==false)
  146.               {
  147.                   insertar_al_final(los_rectangulos,nuevo);
  148.               }
  149.           } //  (area_esta>area_nuevo)
  150.       } // if (los_rectangulos==NULL)
  151.   /*
  152.     funciona si el mas alto no es el primero en ingresarse
  153.   */
  154.  
  155.  
  156. }
  157.  
  158. void imprime_rectangulos(tipo_lista lista)
  159. // paso por copia, del lenguaje de programacion
  160. {
  161.      while(lista != NULL)
  162.      {
  163.           imprime_rectangulo(lista->informacion);
  164.           lista = lista->sgte;
  165.      }
  166. }
  167.  
  168. int main() {
  169.   cout << "Hello World!\n";
  170.  
  171.   /*
  172.   // parte 1:
  173.   int a,b, un_area;
  174.   rectangulo azul, verde;
  175.   cout << "ingrese lado ";
  176.   cin >> a;
  177.   cout << "ingrese otro lado ";
  178.   cin >> b;
  179.   ingresa_datos_rectangulo(&azul,a,b);
  180.   imprime_rectangulo(azul);
  181.   un_area = area_rectangulo(azul);
  182.   cout << "el area es " << un_area << "\n";
  183.  
  184.   cout << "ingrese lado ";
  185.   cin >> a;
  186.   cout << "ingrese otro lado ";
  187.   cin >> b;
  188.   ingresa_datos_rectangulo(&verde,a,b);
  189.   imprime_rectangulo(verde);
  190.  
  191.   // if (azul==verde) // c++ no lo permite
  192.   if (son_iguales(azul,verde))
  193.   {
  194.      cout << "son iguales";
  195.   } else
  196.   {
  197.      cout << "son distintos";
  198.   }
  199.   */
  200.  
  201.  
  202.  
  203.  
  204.  
  205.   // PARTE 2:
  206.   int cuantos,i,a,b;
  207.  
  208.   rectangulo azul;
  209.   tipo_lista varios_rectangulos;
  210.   cout << "cuantos elementos ingresar ? ";
  211.   cin >> cuantos;
  212.   for (i=0;i<cuantos;i++)
  213.   {
  214.       cout << "\n == rectangulo " << i << " == \n";
  215.       cout << "ingrese lado ";
  216.       cin >> a;
  217.       cout << "ingrese otro lado ";
  218.       cin >> b;
  219.       ingresa_datos_rectangulo(&azul,a,b);
  220.       // insertar_al_inicio(varios_rectangulos,azul);
  221.       inserta_ordenado_por_area(varios_rectangulos, azul);
  222.  
  223.   }
  224.   imprime_rectangulos(varios_rectangulos);
  225.  
  226.  
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement