Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] estructuras en c++

Estas en el tema de estructuras en c++ en el foro de C/C++ en Foros del Web. Hola a todos: Estoy totalmente bloqueado en este problema. Necesito ayuda!!! 1) Implemente una estructura Punto con dos propiedades de tipo numérico: x y y. ...
  #1 (permalink)  
Antiguo 26/03/2014, 17:55
 
Fecha de Ingreso: marzo-2014
Ubicación: bogota
Mensajes: 2
Antigüedad: 8 años, 8 meses
Puntos: 0
Pregunta estructuras en c++

Hola a todos:

Estoy totalmente bloqueado en este problema. Necesito ayuda!!!

1) Implemente una estructura Punto con dos propiedades de tipo numérico: x y y.
2) Implemente una función distancia que reciba dos parámetros de tipo Punto como argumento y devuelva la distancia entre los puntos.
3) Implemente una estructura Figura con una propiedad de tipo arreglo de Puntos y un método calcularPerimetro sin parámetros y con retorno de tipo real. Debe retornar el perímetro de la figura representada.

Se como hacer los pasos 1 y 2, pero no se como puedo hacer el paso No. 3.

La verdad el paso 3 se me hace muy pero muy complejo, les agradecería que me ayudaran.

Un cordial saludo a todos.
  #2 (permalink)  
Antiguo 27/03/2014, 00:23
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 9 años, 2 meses
Puntos: 38
Respuesta: estructuras en c++

1º pues perímetro es el área externa de una figura.
Eso se usa mucho en gráficas, lo uso para crear jueguitos :D
Imagínese la pantalla de tu ordenador...
Están los pixeles ¿verdad? un pixel es como una bombilla, y una pantalla tiene una cierta cantidad de esas bombillas.
Esa cantidad de bombillas suele ser la resolución de la pantalla. A mas resolución mas pixeles tiene.
Ahora bien ¿¿¿Cuantos pixeles tiene??? Esa pregunta depende del monitor.
nosotros lejos de entrar en tecnicismo imaginamos que nuestra pantalla tiene los suficientes para mostrar dicha imagen.
Digamos que tenemos 800 pixeles de largo y 600 de alto.
El sistema de cordenadas puede variar pero yo digo que x es ancho y y es alto ¿ok?
o sea que
const int x = 800;
const int y = 600;
const por que no van a cambiar.
Esos 2 parametros son lo que deberia ir en la clase punto junto con sus metodos de acceso(geters y seters).

Ahora calcular la distancia entre 2 puntos has dicho que sabes XDD asi que saltamos a la 3ª clase.
Cada tipo de "FIGURA GEOMETRICA" tiene un calculo. No es lo mismo calcular un circulo que un cuadrado, ni mucho menos un triangulo ¿ok?
Usaremos un cuadrado ;)
Imagina que un cuadrado tiene 4 puntos. uno en cada esquina de los cuadrados.

pues bien...
si son 4 puntos deberias tener 4 puntos ¿no?

Punto esquina_superior_izquierda;
Punto esquina_superior_derecha;
Punto esquina_inferior_izquierda;
Punto esquina_inferior_derecha;

una funcion que tome los valores X Y de cada punto.
funcion( Punto esquina_superior_izquierda, Punto esquina_superior_derecha, Punto esquina_inferior_izquierda, Punto esquina_inferior_derecha )

Ahora bien que los meta esos puntos en un arreglo ;)
Punto cuadrado[4];
cuadrado[0] = esquina_superior_izquierda;
cuadrado[1] = esquina_superior_derecha;
cuadrado[2] = esquina_inferior_izquierda;
cuadrado[3] = esquina_inferior_derecha;

creo que ya vas pillando no XDD
ahora bien...¿Como vamos calcular eso?
Se supone que lo hace la clase que calcula no?
O lo hacer con herencia o le pasas ese arreglo...Te lo dejo a ti eso.

La cosa es¿Como se calcula el perímetro de un cuadrado?
pues el perimetro del cuadrado si es una "CUADRADO" pues es que sus lados son todos iguales ¿no? :D
Pues es solo pasarla uno de los lados cualquiera y que te devuelva eso multiplicado por 4 XDDD

Debes de pensar cuantas figuras quieres calcular triángulos, círculos, cuadrado rectángulo.

Por ejemplo el cuadrado_rectángulo no es exacto todos sus lados y tendrás que calcular algunos lados por separado.
el circulo pues debes multiplicar el radio *2, y después por PI o yo que se...Las mates las tengo oxidadas XDD
Para calcular el perímetro eso busca las formulas por Internet.


Bien ahora echemos una mirada en eso de las coordenadas.

Debes tener claro como funciona las coordenadas. Donde esta el punto 0 en una gráfica.

Yo dire que esta en la esquina superior izquierda pero eso depende mucho por que puede estar en el centro:


Nosotros usaremos este:

O sea la X va de la derecha a la izquierda y la y va de arriba hacia abajo.
Imagine que son las partes de la izquierda de tu pantalla y la parte superior.
El cero esta arriba a la izquierda.

Imagine que te paso 4 puntos a,b, c y d:
La gráfica seria mas o menos asi:
Miramos la coordenada de esta forma (X, Y) si pongo (0, 800) es x=0; y =800;


Es solo hacer la función que calcule según la figura geométrica.


Las formulas si no las sabes busca en google.
calcular perímetro cuadrado
calcular perímetro circulo
calcular perímetro triangulo....

Si necesitas mas ayuda pues aquí estamos.

Te explique como hacer en pixeles pero eso todo se puede aplicar a centímetros o metros o kilómetros XDDD

para los trialgulos la cosa ya es mas chunga. debes saber calcular la distancia entre 2 puntos

entonces digamos que tienes 3 puntos ¿No? XDD
A,B y C

pues calculas primero de A a B, de B a C y de Ca A.

Después suma los 3.
En google esta.
En videos y todo si no entiendes :D
lo de los cuadrados tambien se calcula por puntos.

si no me equivoco se calcula con la raiz cuadrada.
hay una funcion llamada sqrt() que te la calcula.

Código C++:
Ver original
  1. //incluir cmath, recibe 2 objetos del tipo punto
  2. int pointimetroXD(Punto distancia, Punto diferencia  ){
  3.     //pueden ser float si no anda con int.
  4.     int distanciax = diferencia.x - distancia.x;
  5.     int distanciay = diferencia.y - distancia.y;
  6.     int distancia = sqrt(distanciax * distanciax + distanciay * distanciay);
  7.    
  8.     return distancia;
  9. }

Creo que eso te calcula la distancia :D

Bueno me piro que ya casque demasiado. Solo espero que te haya servido. ;)

Puedes usar esa función para calcular directamente todos los puntos si así ves mejor XDDD

Así se puede hacer

para calcular cuadrados y rectángulos, ya sean de cualquier forma.
CA, CD, AB, DB


para que entiendas en la foto tienes la x que aumenta asi para la derecha.

|------diferenciax-------|-----------------distanciax-------------------|
x=0 C.x=100 D.x =200


como la x aumenta hacia ===>
restas la x menor del cuadrado de la x mayor:
D.x - C.x
Eso elimina la distancia que hay del borde de la pantalla izquierda hacia al punto C.X
dejando solo el tamaño del cuadrado exacto entre C.x y D.x
O sea: que ese seria pasar a la función primero el 200 después el 100 de forma que quede:
pointimeterXD(D.x, C.x);
Una vez calculado eso tendrías la parte inferior del cuadrado.

int inferior = pointimeterXD(D.x, C.x);
cuando tengas las 4 lo sumas ^^

si haces el contrario estarías restando un numero mas grande el mas pequeño y te devolvería -100 cosa que no es correcta.
Fíate muy bien en el sistema de coordenadas por que según sea el sistema todo cambia.
Imagina como calcular un punto C.X que guardara un numero negativo por ejemplo
un C.x = -20
y el D.x estuviera en D.x = 100;
El punto cero estaría en el centro de la pantalla.
Así suele ser las coordenadas en 3D -_-'
En la 2D solo trabajamos en una parte de la reja prescindiendo de las otras pero no es por que la coordenada 0 este en la esquina superior izquierda que no aya números negativos. ;)

Si la coordenada es igual que la mía pues le pasas el numero x mas grande primero después el mas pequeño a la función.
Bueno sera siempre así, el mas grande y después el mas pequeño aun que tenga la otra coordenada. ;)

Lo mismo con la y, primero la mas grande y después restamos la distancia del borde hacia la y mas pequeña. del cuadrado.


Intenta implementar el código.
Después si tienes problemas pon aquí y te intento ayudar o alguien con mas luces que yo XDDD

Casco mucho por que quiero que aprendas, no que copies y ya esta XDD
Pero si quieres solo copiar dale, pero recuerda que mañana ya sabes que pasa a la hora de hacer un examen

Algunas imagenes de interes:
Sistema 3D frente al 3D:


Haciendo juegos 2D XDD:


Mire los modos de coordenadas 2D, observe donde están los puntos 0 en tu pantalla y hacia adonde aumenta las Xs y las Ys:


Aumentan siempre hacia donde apunta: 0-+-+-+->
El cero esta donde cruzan las 2 lineas, y puede haber números negativos.
Pero si trabajamos del lado positivo solamente es mas fácil ¿No?
Para eso sirve la clase Punto para expresar esos puntos y calcular distancias por ejemplo entre imágenes i calcular también colisiones entre personajes.
Si por ejemplo un proyectil a tocado nuestro personaje XDD

Última edición por vangodp; 27/03/2014 a las 00:42
  #3 (permalink)  
Antiguo 27/03/2014, 03:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: estructuras en c++

Entiendo que si ya tienes la estructura que alberga una pareja de puntos, y la función que calcula la distancia entre dos puntos, sólo tienes que implementar una función que sume todas las distancias de todas las parejas de puntos (los lados).
No parece muy problemático.
Sería algo como esto:
Una estructura para albergar un punto
Código C++:
Ver original
  1. struct punto
  2. {
  3. float x,y;
  4. };

una estructura para albergar un lado (o arista)
Código C++:
Ver original
  1. struct arista
  2. {
  3. punto vertices[2]
  4. float distancia (vertice[0],vertice[1]);//implementar la función
  5. };

una estructura para albergar el polígono, pongamos un cuadrado
Código C++:
Ver original
  1. struct rectangulo
  2. {
  3. arista aristas[4];
  4. float calcularperimetro()
  5.    {float perimetro=0;
  6.     for (int i=0;i<4;i++)
  7.     {
  8.          perimetro+=aristas[i].distancia;
  9.     }
  10.     return perimetro;
  11. }

Bueno, algo así. Obviamente con sus constructores y demás donde hagan falta.
Estos ejercicios están bien para ir construyendo objetos más complejos de forma progresiva, y hacer uso de los métodos de los objetos base para conseguir de forma sencilla y lógica implementar métodos en los objetos siguientes. Fíjate que para obtener el perímetro sólo has de sumar las distancias de las aristas.
Con dos float construyes un objeto punto.
Con dos punto construyes un objeto arista
Con n arista (en este caso 4) construyes un objeto cuadrado o rectángulo.

Todo esto se puede mejorar para que la estructura que alberga un cuadrado pueda funcionar para cualquier tipo de polígono y obviamente para muchas mas sutilezas.

Bueno, espero que esto te sirva.
  #4 (permalink)  
Antiguo 27/03/2014, 07:08
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 9 años, 2 meses
Puntos: 38
Respuesta: estructuras en c++

Si buena sugerencia ^^
Se puede llegar a montar cosillas muy interesantes.
Me da unas muy buenas ideas para hacerlo en c++
  #5 (permalink)  
Antiguo 27/03/2014, 17:06
 
Fecha de Ingreso: marzo-2014
Ubicación: bogota
Mensajes: 2
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: estructuras en c++

Hey, amigos muchas gracias por sus respuestas de ayuda

Si tengo alguna otra duda, les estaré molestando jeje

De nuevo mil gracias, necesitaba una ayuda...

Cordial saludo amigos

Etiquetas: c++, estructuras, funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:41.