Hello, I have the following problem:
Entering coordinates of points on a plain with keyboard (as rows x,y). Analysing this coordinates. Replacing coordinates in vector (point - structure data type). Then calculating distance from the first point to all another points.

I've written the code of this problem using arrays -> formula r=sqrt( (x[i]-x[1])^2+(y[i]-y[1])^2) ), (coordinate plain).

#include <stdio.h>
  #include <iostream.h>
  #include <math.h>

main()
{
    float x[100], y[100];
    int i, n;
    float r;

    cout << "Enter dimension of 1D massives (vectors of X & Y coordinates)\n";
    cin >> n;

    cout << "Enter X coordinates of points for the 1st 1D massive (vector 1):\n";
    for (i = 0; i < n; i++)
    { cin >> x[i];
    }

    cout << "Enter Y coordinates of points for the 2nd 1D massive (vector 2):\n";
    for (i = 0; i < n; i++)
    { cin >> y[i];
    }

    for (i = 0; i < n; i++)
    { r=sqrt(  ((x[i]-x[0])*(x[i]-x[0])+(y[i]-y[0])*(y[i]-y[0]))  );

    cout << "\n r = " << r;
    cout << "\n";
          }

    return 0;
}

How to write it using vectors?

#include <stdio.h>
  #include <iostream.h>
  #include <vector.h>

    struct {
{ float x, y;
  } points;

main()
{ using namespace std;

  int i; 
  float r;

  cout << "Set dimension of vector";
  cin >> i;
  for (i=0; i<i; i++) {  // Input coordinates x, y
    cout << "Input x:";
    cin >> points.x;
    cout << "Input y:";
    cin >> points.y;
}
  std:: vector<points> pointvect; // vector declaration
  points points;
  pointvect.push_back (points); // add point to the vector

  r=/* ??? */

Recommended Answers

All 5 Replies

I think, iterators would be used here.

#include <stdio.h>
#include <iostream.h>
#include <vector.h>

using std::cout;
using std::cin;

//2 dimensional vector struct
struct points
{ 
    float x, y;
};


main()
{ 
  int i; 
  float r;
  std::vector<points*> pointvect; // vector declaration
  points * point; //declare pointer

  cout << "Set dimension of vector";
  cin >> i; //with struct only 2D accepted

  for (i=0; i<i; i++) 
  {  // Input coordinates x, y
    point = new point; //init a new points 

    cout << "Input x:";
    cin >> point->x; //assign values
    cout << "Input y:";
    cin >> point->y;    
    pointvect.push_back(point); // add point to the vector
 }

  //then do calculations as before because the vector can be accessed like an array
  // either with an iterator or by pointvect[pos]->x 
  //r=sqrt(((pointvect[i]->x - pointvect[0]->x)*(pointvect[i]->x - pointvect[0]->x)+(pointvect[i]->y-pointvect[0]->y)*(pointvect[i]->y-pointvect[0]->y)

  return 0;
}

hope this helps

Can you tell how to use iterators in this situation? This code is wrong, but is algorithm right?:

    #include <stdio.h>
    #include <iostream.h>
    #include <vector.h>

    using std::cout;
    using std::cin;

    //2 dimensional vector struct

    struct points
    {
    float x, y;
    };

    main()
    {
    int i;
    float r;
    std::vector<points*> pointvect; // vector declaration
    points * point; //declare pointer

    cout << "Set dimension of vector";
    cin >> i; //with struct only 2D accepted

    for (i=0; i<i; i++)
    { // Input coordinates x, y
    point = new point; //init a new points
    cout << "Input x:";
    cin >> point->x; //assign values
    cout << "Input y:";
    cin >> point->y;

    pointvect.push_back(point); // add point to the vector
    }

    vector<points>::iterator pos;
            for (pos = pointvect.begin(); pos != pointvect.end(); pos++) {
          r=sqrt( (pointvect[i]-pointvect[0])*(pointvect[i]-pointvect[0]));

          cout << r;
          }
          return 0; 
          }

here is the working code

#include <iostream>
#include <vector>

using std::cout;
using std::cin;

//2 dimensional vector struct
struct points
{
   float x, y;
};

main()
{
    int i;
    float r;

    std::vector<points*> pointvect; // vector declaration
    points * point; //declare pointer

    cout << "Set dimension of vector";
    cin >> i; //with struct only 2D accepted

    for (int j=0; j<i; j++)
    { // Input coordinates x, y
        point = new points; //init a new points
        cout << "Input x:";
        cin >> point->x; //assign values
        cout << "Input y:";
        cin >> point->y;
        pointvect.push_back(point); // add point to the vector
    }

    //define iterators
    std::vector<points*>::iterator first = pointvect.begin(); 
    std::vector<points*>::iterator end = pointvect.end(); 

    //you use the iterators in the following way
    for(std::vector<points*>::iterator itr = first; itr != end; itr++)
    {
        cout <<((*itr)->x - (*first)->x) << "\n"; //minus all elements x co-ords from the first x co-ord and print
    }

    //cout << r;


return 0;
}

hope this helps

Thank you so much. Very helpful!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.