Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- typedef struct {
- int largo; // en este caso es un numero entero
- int ancho;
- } rectangulo;
- struct nodo {
- rectangulo informacion;
- struct nodo * sgte;
- };
- typedef struct nodo * tipo_lista;
- bool son_iguales(rectangulo a,rectangulo b)
- {
- if ((a.largo==b.largo)&&(a.ancho==b.ancho))
- { return true; }
- else
- { return false; }
- }
- void ingresa_datos_rectangulo(rectangulo * un_rectangulo, int lado1, int lado2)
- {
- if (lado1>lado2)
- {
- un_rectangulo->largo = lado1;
- un_rectangulo->ancho = lado2;
- }
- else
- {
- un_rectangulo->largo = lado2;
- un_rectangulo->ancho = lado1;
- }
- }
- // en algunos lenguajes de programacion el compilador
- // no copia la estructura entera y hay que copiar a mano
- // cada uno de los campos, no es el caso de c++
- void copiar(rectangulo origen, rectangulo * destino)
- {
- destino->largo = origen.largo;
- destino->ancho = origen.ancho;
- }
- void imprime_rectangulo(rectangulo otro)
- {
- cout << "largo " << otro.largo;
- cout << ",ancho " << otro.ancho;
- cout << "\n";
- }
- int area_rectangulo(rectangulo * un_rectangulo)
- {
- return un_rectangulo->ancho*un_rectangulo->largo;
- }
- int area_rectangulo(rectangulo un_rectangulo)
- {
- return un_rectangulo.ancho*un_rectangulo.largo;
- }
- // parte 2:
- void insertar_al_inicio(tipo_lista &lista, rectangulo valor)
- {
- tipo_lista q;
- q = new(struct nodo);
- q->informacion = valor;
- q->sgte = lista;
- lista = q;
- }
- void insertar_al_final(tipo_lista &lista, rectangulo valor)
- {
- tipo_lista t, q = new(struct nodo);
- q->informacion = valor;
- q->sgte = NULL;
- if(lista==NULL)
- {
- lista = q;
- }
- else
- {
- t = lista;
- while(t->sgte!=NULL)
- {
- t = t->sgte;
- }
- t->sgte = q;
- }
- }
- void inserta_ordenado_por_area(
- tipo_lista &los_rectangulos,
- rectangulo nuevo)
- {
- tipo_lista q, antes_de_q;
- tipo_lista nodo_nuevo;
- bool insertado = false;
- int area_esta;
- int area_nuevo;
- if (los_rectangulos==NULL)
- {
- insertar_al_inicio(los_rectangulos,nuevo);
- }
- else // if (los_rectangulos==NULL)
- {
- q = los_rectangulos;
- area_esta = area_rectangulo(q->informacion);
- area_nuevo = area_rectangulo(nuevo);
- if (area_esta>area_nuevo)
- {
- insertar_al_inicio(los_rectangulos,nuevo);
- }
- else // (area_esta>area_nuevo)
- {
- antes_de_q = q;
- q = q->sgte;
- while ((q!=NULL)&&(insertado==false))
- {
- area_esta = area_rectangulo(q->informacion);
- if (area_esta>area_nuevo)
- {
- // insertar adelante
- nodo_nuevo = new(struct nodo);
- nodo_nuevo->informacion = nuevo;
- nodo_nuevo->sgte = q;
- antes_de_q->sgte = nodo_nuevo;
- insertado = true;
- } else
- {
- antes_de_q = q;
- q = q->sgte;
- }
- }
- if (insertado==false)
- {
- insertar_al_final(los_rectangulos,nuevo);
- }
- } // (area_esta>area_nuevo)
- } // if (los_rectangulos==NULL)
- /*
- funciona si el mas alto no es el primero en ingresarse
- */
- }
- void imprime_rectangulos(tipo_lista lista)
- // paso por copia, del lenguaje de programacion
- {
- while(lista != NULL)
- {
- imprime_rectangulo(lista->informacion);
- lista = lista->sgte;
- }
- }
- int main() {
- cout << "Hello World!\n";
- /*
- // parte 1:
- int a,b, un_area;
- rectangulo azul, verde;
- cout << "ingrese lado ";
- cin >> a;
- cout << "ingrese otro lado ";
- cin >> b;
- ingresa_datos_rectangulo(&azul,a,b);
- imprime_rectangulo(azul);
- un_area = area_rectangulo(azul);
- cout << "el area es " << un_area << "\n";
- cout << "ingrese lado ";
- cin >> a;
- cout << "ingrese otro lado ";
- cin >> b;
- ingresa_datos_rectangulo(&verde,a,b);
- imprime_rectangulo(verde);
- // if (azul==verde) // c++ no lo permite
- if (son_iguales(azul,verde))
- {
- cout << "son iguales";
- } else
- {
- cout << "son distintos";
- }
- */
- // PARTE 2:
- int cuantos,i,a,b;
- rectangulo azul;
- tipo_lista varios_rectangulos;
- cout << "cuantos elementos ingresar ? ";
- cin >> cuantos;
- for (i=0;i<cuantos;i++)
- {
- cout << "\n == rectangulo " << i << " == \n";
- cout << "ingrese lado ";
- cin >> a;
- cout << "ingrese otro lado ";
- cin >> b;
- ingresa_datos_rectangulo(&azul,a,b);
- // insertar_al_inicio(varios_rectangulos,azul);
- inserta_ordenado_por_area(varios_rectangulos, azul);
- }
- imprime_rectangulos(varios_rectangulos);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement