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 imprime_rectangulos(tipo_lista lista)
- // paso por copia, del lenguaje de programacion
- {
- while(lista != NULL)
- {
- imprime_rectangulo(lista->informacion);
- lista = lista->sgte;
- }
- }
- int contar(tipo_lista lista)
- // paso por copia, del lenguaje de programacion
- {
- int tmp = 0;
- while(lista != NULL)
- {
- tmp = tmp + 1; // tmp++;
- lista = lista->sgte;
- }
- return tmp;
- }
- int buscar(tipo_lista pajar, rectangulo aguja)
- // paso por copia, del lenguaje de programacion
- {
- int tmp = 0;
- int ubicacion = -1; // si no esta devolvemos -1
- while(pajar != NULL)
- {
- if (son_iguales(aguja,pajar->informacion))
- {
- ubicacion = tmp;
- }
- tmp = tmp + 1; // tmp++;
- pajar = pajar->sgte;
- }
- return ubicacion;
- }
- void eliminar_por_posicion(
- tipo_lista &los_rectangulos,
- int posicion)
- {
- // recordatorio
- // en c, c++, java, php, otros el primer elemento
- // es el con indice cero
- // el primero tiene posicion cero!
- if (contar(los_rectangulos)>posicion)
- {
- int i;
- tipo_lista victima, anterior;
- if (posicion==0)
- {
- victima = los_rectangulos;
- los_rectangulos = los_rectangulos->sgte;
- delete(victima);
- }
- else
- {
- anterior = los_rectangulos;
- victima = anterior->sgte;
- for (i=1;i<posicion;i++)
- {
- // cout << " * ";
- anterior = anterior->sgte;
- victima = victima->sgte;
- }
- // cout << "\n";
- anterior->sgte = victima->sgte;
- delete(victima);
- }
- } // if contar
- }
- void eliminar_cual(
- tipo_lista &los_rectangulos,
- rectangulo cual)
- {
- int donde_esta = buscar(los_rectangulos, cual);;
- while (donde_esta!=(-1)) {
- eliminar_por_posicion(los_rectangulos,donde_esta);
- donde_esta = buscar(los_rectangulos, cual);
- }
- }
- 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
- */
- }
- // se aplica recursividad:
- // 2020-09-28
- void imprime_rectangulos_desde_el_final(tipo_lista lista)
- // paso por copia, del lenguaje de programacion
- {
- rectangulo rosa;
- if (lista != NULL)
- {
- rosa = lista->informacion;
- imprime_rectangulos_desde_el_final(lista->sgte);
- // lo mismo cout:
- imprime_rectangulo(rosa);
- }
- }
- 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 matame;
- rectangulo azul;
- tipo_lista varios_rectangulos = NULL;
- 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);
- insertar_al_inicio(varios_rectangulos, azul);
- }
- cout << "\n == antes de eliminar == \n";
- imprime_rectangulos(varios_rectangulos);
- cout << "\n == ingrese datos del rectangulo a eliminar == \n";
- cout << "ingrese lado ";
- cin >> a;
- cout << "ingrese otro lado ";
- cin >> b;
- ingresa_datos_rectangulo(&matame,a,b);
- eliminar_cual(varios_rectangulos,matame);
- cout << "\n == despues de eliminar == \n";
- imprime_rectangulos(varios_rectangulos);
- /*
- eliminar_por_posicion(varios_rectangulos,4);
- cout << "\n == despues de eliminar == \n";
- imprime_rectangulos(varios_rectangulos);
- */
- /*
- imprime_rectangulos_desde_el_final(varios_rectangulos);
- */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement