Ayuda para pasar ESTE código hecho en JAVA A C++

Iniciado por Blazjker, 28 Febrero 2019, 23:42 PM

0 Miembros y 1 Visitante están viendo este tema.

Blazjker

Buenas tardes a todos, el problema que tengo es que quiero pasar el siguiente código hecho en JAVA A C++, lo he intentado hacer,pero los resultados que me son dados DIFIEREN uno del otro.

A mi entender el de "JAVA" funciona bien, es decir, cumple con los requisitos. En cambio el de C++ no lo hace de forma completa.

Sin más preámbulos adjuntaré ambos códigos, para que si pueden, ayudarme a entender cuáles son los errores que he cometido en el "intento" de trasladar las líneas de código  a C++.


VERSIÓN JAVA

Código (java) [Seleccionar]
public class Ejerciciooo
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);

System.out.print("Enter the number of points: ");
final int numOfPoints = scan.nextInt();

double[][] points = new double[numOfPoints][2];
double shortestDistance=0;
double distance=0;
String closestPoint1="";
String closestPoint2="";

//enter x,y coords into the ix2 table points[][]
for (int i=0; i<numOfPoints; i++)
{
System.out.print("Enter point x" + i + ": ");
points[i][0] = scan.nextDouble();
System.out.print("Enter point y" + i + ": ");
points[i][1] = scan.nextDouble();
}

//get the distance between the point in the ith row and the (m+1)th row
//and check if it's shorter than the distance between 0th and 1st
for (int i=0; i<numOfPoints; i++)
{
//use m=i rather than 0 to avoid duplicate computations
for (int m=i; m<numOfPoints-1;m++)
{
double dx = points[i][0] - points[m+1][0];
double dy = points[i][1] - points[m+1][1];
distance = Math.sqrt(dx*dx + dy*dy);

//set shortestDistance and closestPoints to the first iteration
if (m == 0 && i == 0)
{
shortestDistance = distance;
closestPoint1 = "(" + points[0][0] + "," + points[0][1] + ")";
closestPoint2 = "(" + points[1][0] + "," + points[1][1] + ")";
}
//then check if any further iterations have shorter distances
else if (distance < shortestDistance)
{
shortestDistance = distance;
closestPoint1 = "(" + points[i][0] + "," + points[i][1] + ")";
closestPoint2 = "(" + points[m+1][0] + "," + points[m+1][1] + ")";
}
}
}
System.out.println("The shortest distance is: " + shortestDistance);
System.out.println("The closest points are " + closestPoint1 + " and " + closestPoint2);
}   
}



VERSIÓN C++

Código (cpp) [Seleccionar]

#include <conio.h>
#include <math.h>
#include <sstream>
#include <string>
using namespace std;

int main () {

int cantidad;
cout<<"Digite la cantidad de puntos que desea: "; cin>>cantidad;

double puntos [cantidad][2];
double dX = 0, dY = 0 , distancia = 0, distMasCorta = 0;

ostringstream osA,osB;

for (int i=0; i<cantidad; i++) {
cout<<"Digite el valor correspondiente a X '"<<i+1<<"': "; cin>>puntos[i][0];
cout<<"Digite el valor correspondiente a Y '"<<i+1<<"': "; cin>>puntos[i][1];

cout<<endl;
}

for (int i=0; i<cantidad; i++) {
for (int m=i; m<cantidad-1; m++) {

dX = puntos[i][0] - puntos[m+1][0];
dY = puntos[i][1] - puntos[m+1][1];

distancia = sqrt (dX * dX + dY * dY);

if (distancia < distMasCorta) {

distMasCorta = distancia;

osA << "(" << puntos[i][0] << "," << puntos[i][1] << ")";
osB << "(" << puntos[m+1][0] << "," << puntos[m+1][1] << ")";
}
}
}

cout<<"La distancia mas corta es de '"<<distMasCorta<<"'"<<endl;
cout<<"Los puntos más cercanos son: "<<osA.str()<<" y "<<osB.str()<<endl;

getch();
return 0;
}






Desde ya muchísimas gracias !

K-YreX

Si puedes especificar un poco más cuando dices que los resultados difieren o que no lo hace de forma completa... En principio estoy dando por supuesto que ambos compilan sin problemas. :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Blazjker

Cita de: YreX-DwX en  1 Marzo 2019, 00:08 AM
Si puedes especificar un poco más cuando dices que los resultados difieren o que no lo hace de forma completa... En principio estoy dando por supuesto que ambos compilan sin problemas. :-X


En el código de Java, ingreso por ejemplo las siguientes coordenadas.
x y

(1,2)

(5,10)

(3,4)

Y me dice que los puntos más cercanas entre sí son (1,2) y (3,4)

En cambio, en el de C++ , directamente ni me los toma , ya que cuando se ejecuta el "cout" no me marca los puntos ni nada.

K-YreX

Vale, a ver, los errores son varios y te los voy dejando por aquí:
  • Antes de nada no está incluido <iostream> para poder hacer las entradas/salidas de pantalla <cin> y <cout>.
  • Si inicializas <distMasCorta = 0> y luego buscas dos puntos cuya distancia sea menor a eso, no creo que los encuentres nunca... :silbar:
  • Los dos bucles <for> anidados están al revés. El exterior es el que tiene que acabar antes y el interior el que tiene que llegar hasta el final.

    Y ahora unos consejos que nunca están de más :-X:
  • No utilices <conio.h>. No es estándar por lo que algunos compiladores no lo admiten.
  • El <getch()> que usas de <conio.h> sustitúyelo por <cin.get()> que está en <iostream>.
  • Las librerías que acaban en ".h" (versión C) tienen su versión de C++ sin el ".h" y empezando por "c" <cmath>.
  • El bucle <for> interno en vez de inicializar <m = i> y después usar siempre <m+1>; inicialízalo en <m = i+1> y así sólo tendrás que usar <m> luego.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Blazjker

#4
Siguiendo los pasos que mencionaste, el código funciona similar a Java, desde ya muchísimas gracias por haberme ayudado , hay alguna manera para recompensarte ,es decir, hay algún modo para colocar puntajes o algo parecido, en forma de agradecimiento ?

K-YreX

Cita de: Blazjker en  1 Marzo 2019, 02:01 AM
Siguiendo los pasos que mencionaste, el código funciona similar a Java, desde ya muchísimas gracias por haberme ayudado , hay alguna manera para recompensarte ,es decir, hay algún modo para colocar puntajes o algo parecido, en forma de agradecimiento ?
No, no hay ningún sistema de valoración. Pero para eso es el foro, para prestar ayuda voluntariamente. :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;