Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Orlando.64 en 9 Octubre 2020, 05:34 am



Título: Ayuda en resolver codigo
Publicado por: Orlando.64 en 9 Octubre 2020, 05:34 am
Karel se quedó de ver con 4 de sus amigos para hacer un trabajo en equipo. Para que todos se reunan, fijaron un punto de encuentro de tal forma que a todos les quede relativamente cerca. Una vez fijado dicho punto de encuentro, Karel notó algo muy poco peculiar: a partir del punto de encuentro, uno de sus amigos vive al norte, otro al sur, uno más al este y el último al oeste. Lo más misterioso de este asunto es que el que vive al norte está perfectamente alineado con quien vive al sur; y quien vive al oeste está perfectamente alineado con quien vive al este.

Sus 4 amigos tienen unas bicicletas especiales que van más rápido si no se les cambia la dirección. Todo esto ayuda convenientemente para que, el que vive al norte, solo tenga que viajar al sur sin desviarse para llegar al punto de encuentro; el que vive al oeste solo tiene que viajar al este sin desviarse para llegar al punto de encuentro y así respectivamente con los otros 2.

Problema
Karel no tiene idea donde será el punto de encuentro, pero tiene las coordenadas de donde viven sus amigos. Tu tarea consiste en imprimir las coordenadas del punto de encuentro.

Entrada
4 coordenadas (X, Y) separadas por un espacio (sin orden específico) y un salto de línea entre cada coordenada (TIP: cin al leer, ignora si son saltos de linea o espacios)

Salida
Una única línea con 2 números separados por un espacio, representando la coordenada (X, Y) del punto de encuentro

Ejemplo
Código:
Entrada	  Salida
-2 2         1 2
 1 4
 6 2
 1 -1

Este es parte de mi código:

Código
  1. #include <iostream>
  2.  
  3. using namespace std ;
  4.  
  5. int main (){
  6.  
  7.     double  X1,Y1,X2,Y2,P, X3 , Y3 , X4, Y4, Q , R,S    ;
  8.      int A,  Z ;
  9.     cin>> X1 >> Y1 ;
  10.     cin>> X2 >> Y2 ;
  11.     cin>> X3 >> Y3 ;
  12.     cin>> X4 >> Y4 ;
  13.  
  14.     P= (X1 +  X2) / 2 ;
  15.  
  16.     Q= (Y1 + Y2) / 2  ;
  17.  
  18.     R =(X3 + X4) / 2 ;
  19.  
  20.     S=((Y3 +Y4 ) / 2) ;
  21.  
  22.     A = (P+R) / 2 ;
  23.  
  24.     Z = (Q + S ) / 2 ;
  25.  
  26.     cout <<A << "\t" <<   Z   <<endl ;
  27.  
  28. }


MOD: El código debe ir entre etiquetas de Código GeSHi indicando el lenguaje adecuado


Título: Re: Ayuda en resolver codigo
Publicado por: K-YreX en 9 Octubre 2020, 15:37 pm
Las operaciones que realizas no tienen mucho sentido.

El punto que esté al norte y el que esté al sur, tendrán la misma coordenada X (llamémosla A).
El punto que esté al oeste y el que esté al este, tendrán la misma coordenada Y (llamémosla B).
El punto solución es: (A, B)


Título: Re: Ayuda en resolver codigo
Publicado por: Loretz en 10 Octubre 2020, 07:00 am
Ya sé lo que es un Karel...

Y con respecto al programa este, debe haber mejores formas de resolverlo, seguramente, pero a mí me ha salido así, y no me disgusta:

Código
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <optional>
  5.  
  6. std::optional<double> find_comun(const std::vector<double>& coordenadas)
  7. {
  8.    for (const auto i : { 1, 2, 3 }) {
  9.        if (std::find(coordenadas.begin() + i, coordenadas.end(), coordenadas[i - 1]) != coordenadas.end()) {
  10.            return coordenadas[i - 1];
  11.        }
  12.    }
  13.    return {};
  14. }
  15.  
  16. int main()
  17. {
  18.    std::vector<double> abscisas;
  19.    std::vector<double> ordenadas;
  20.  
  21.    std::cout << "4 puntos (x, y):\n";
  22.    double x, y;
  23.    for (const auto i : { 0, 1, 2, 3 }) {
  24.        std::cin >> x >> y;
  25.        abscisas.push_back(x);
  26.        ordenadas.push_back(y);
  27.    }
  28.  
  29.    // el punto de encuentro será (abscisa_comun, ordenada_comun):
  30.    std::cout << "punto de encuentro = ("
  31.        << find_comun(abscisas).value_or(std::nan("")) << ", "
  32.        << find_comun(ordenadas).value_or(std::nan("")) << ")";
  33. }