/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
using namespace std;
typedef struct
{
int largo;
int ancho;
} rectangulo;
void ingresa_datos_rectangulo (rectangulo * un_rectangulo, int lado1,
int lado2);
void imprime_rectangulo (rectangulo otro);
void duplica_largo_por_copia (rectangulo algun_rectangulo);
void duplica_largo_por_referencia (rectangulo * algun_rectangulo);
bool son_iguales (rectangulo a, rectangulo b);
int area_rectangulo (rectangulo un_rectangulo);
int
main ()
{
cout << "Ejemplo de Rectangulos (typedef)" << endl;
int a, b;
rectangulo verde;
rectangulo azul;
cout << "AZUL:" << endl;
cout << "ingrese lado largo ";
cin >> a;
cout << "ingrese otro lado (ancho) ";
cin >> b;
azul.largo = a; // ->
azul.ancho = b;
imprime_rectangulo (azul);
cout << "VERDE:" << endl;
cout << "ingrese lado ";
cin >> a;
cout << "ingrese otro lado ";
cin >> b;
ingresa_datos_rectangulo (&verde, a, b);
imprime_rectangulo (verde);
// if (azul==verde) // <== eso no funciona porque == no reconoce typedefs
if (son_iguales (azul, verde))
{
cout << "son iguales" << endl;
}
else
{
cout << "son distintos" << endl;
}
duplica_largo_por_copia (verde);
imprime_rectangulo (verde);
duplica_largo_por_referencia (&verde);
imprime_rectangulo (verde);
// cout << "la direccion de memoria de verde es " << &verde << endl;
// cout << "la direccion de memoria de verde.largo es " << &verde.largo << endl;
// cout << "la direccion de memoria de verde.ancho es " << &verde.ancho << endl;
return 0;
}
// con * es paso por referencia o direccion de memoria
void
ingresa_datos_rectangulo (rectangulo * un_rectangulo, int lado1, int lado2)
{
// cout << "la direccion de memoria de un_rectangulo es " << un_rectangulo << endl;
if (lado1 > lado2)
{
un_rectangulo->largo = lado1;
un_rectangulo->ancho = lado2;
}
else
{
un_rectangulo->largo = lado2;
un_rectangulo->ancho = lado1;
}
}
void
duplica_largo_por_copia (rectangulo algun_rectangulo)
{
algun_rectangulo.largo = (algun_rectangulo.largo * 2);
}
void
duplica_largo_por_referencia (rectangulo * algun_rectangulo)
{
algun_rectangulo->largo = (algun_rectangulo->largo * 2);
}
// sin * es paso por valor o copia
void
imprime_rectangulo (rectangulo otro)
{
// cout << "la direccion de memoria de otro es " << &otro << endl;
cout << "largo " << otro.largo;
cout << ",ancho " << otro.ancho;
cout << "\n";
}
bool
son_iguales (rectangulo a, rectangulo b)
{
if ((a.largo == b.largo) && (a.ancho == b.ancho))
{
return true;
}
else
{
return false;
}
}
// por valor
/*
int area_rectangulo(rectangulo * un_rectangulo)
{
return un_rectangulo->ancho*un_rectangulo->largo;
}
*/
// por copia
int
area_rectangulo (rectangulo un_rectangulo)
{
return un_rectangulo.ancho * un_rectangulo.largo;
}