Help with a 2d vector function

I have been struggling with this program. Im hoping someone could see what im doing wrong or give me some tips on how to approach this.

thanks in advance


#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

const double EPSILON(1e-12);

// function prototypes

// ENTER FUNCTION PROTOTYPE FOR read_vector HERE.
void read_vector(const double & text, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_length HERE.
double vector_length (double x, double y);

// ENTER FUNCTION PROTOTYPE FOR write_vector HERE.
void write_vector(const double & text2, double x, double y);

// ENTER FUNCTION PROTOTYPE FOR vector_add HERE.
void vector_add (double x1, double y1, double x2, double y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR vector_subtract HERE.
void vector_subtract (double x1, double y1, double x2, double y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR scalar_mult HERE.
void scalar_mult (double x1, double y1, double s, double & x2, double & y2);

// ENTER FUNCTION PROTOTYPE FOR normalize HERE.
void normalize (double x, double y);

// ENTER FUNCTION PROTOTYPE FOR perpendicular HERE.
void perpendicular (double x1, double y1, double x2, double y2);



// *** DO NOT CHANGE ANY CODE IN THE MAIN FUNCTION.
int main()
{
double u1, v1; // coordinates of first vector
double u2, v2; // coordinates of second vector
double u3, v3;
double scalar;

read_vector("Enter first vector (2 floats): ", u1, v1);
read_vector("Enter second vector (2 floats): ", u2, v2);

cout << "Enter scalar multiplier: ";
cin >> scalar;
cout << endl;

write_vector("First vector: ", u1, v1);
write_vector("Second vector: ", u2, v2);

cout << endl;

vector_add(u1, v1, u2, v2, u3, v3);
write_vector("Vector add: ", u3, v3);

vector_subtract(u1, v1, u2, v2, u3, v3);
write_vector("Vector subtract: ", u3, v3);

scalar_mult(u1, v1, scalar, u3, v3);
write_vector("Scalar multiplier: ", u3, v3);

cout << endl;

write_vector("First vector: ", u1, v1);
write_vector("Second vector: ", u2, v2);
perpendicular(u1, v1, u2, v2);

return(0);
}



// DEFINE FUNCTION read_vector HERE.

void read_vector(const double & text, double & x, double & y)
{

cout << prompt;
cin >> x >> y;
}

// DEFINE FUNCTION vector_length HERE.

double vector_length (double x, double y)
{
double v_length = sqrt(pow(x, 2) + pow(y, 2));
return (v_length);
}


// DEFINE FUNCTION write_vector HERE.

void write_vector(const double & text2, double x, double y)
{
cout << "(" << x << ", " << y << ") has length" << vector_length(x,y) << endl;
}


// DEFINE FUNCTION vector_add HERE.

void vector_add(double x1, double y1, double x2, double y2, double & x3, double & y3)
{
x3 = x1 + x2;
y3 = y1 + y2;
}

// DEFINE FUNCTION vector_subtract HERE.

void vector_subtract(double x1, double y1, double x2, double y2, double & x3, double, double & y3)
{
x3 = x1 - x2;
y3 = y1 - y2;
}

// DEFINE FUNCTION scalar_mult HERE.

void scalar_mult(double x1, double y1, double s, double & x2, double & y2)
{
x2 = s * x1;
y2 = s * y1;
}

// DEFINE FUNCTION perpendicular HERE.

void perpendicular(double x1, double y1, double x2, double y2)
{

}
Right away, I noticed that you set up your void normalize prototype wrong. (You also did not define the function at the bottom) Remember that if you are making a void function, you have to make the values pass by reference. That means putting in the ampersands.
is this what you meant? im confused.


#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

const double EPSILON(1e-12);

// function prototypes

// ENTER FUNCTION PROTOTYPE FOR read_vector HERE.
void read_vector(const double & prompt, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_length HERE.
double vector_length (double x, double y);

// ENTER FUNCTION PROTOTYPE FOR write_vector HERE.
void write_vector(const double & prompt, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_add HERE.
void vector_add (double & x1, double & y1, double & x2, double & y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR vector_subtract HERE.
void vector_subtract (double & x1, double & y1, double & x2, double & y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR scalar_mult HERE.
void scalar_mult (double & x1, double & y1, double & s, double & x2, double & y2);

// ENTER FUNCTION PROTOTYPE FOR normalize HERE.
void normalize (double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR perpendicular HERE.
void perpendicular (double & x1, double & y1, double & x2, double & y2);

// *** DO NOT CHANGE ANY CODE IN THE MAIN FUNCTION.
int main()
{
double u1, v1; // coordinates of first vector
double u2, v2; // coordinates of second vector
double u3, v3;
double scalar;

read_vector("Enter first vector (2 floats): ", u1, v1);
read_vector("Enter second vector (2 floats): ", u2, v2);

cout << "Enter scalar multiplier: ";
cin >> scalar;
cout << endl;

write_vector("First vector: ", u1, v1);
write_vector("Second vector: ", u2, v2);

cout << endl;

vector_add(u1, v1, u2, v2, u3, v3);
write_vector("Vector add: ", u3, v3);

vector_subtract(u1, v1, u2, v2, u3, v3);
write_vector("Vector subtract: ", u3, v3);

scalar_mult(u1, v1, scalar, u3, v3);
write_vector("Scalar multiplier: ", u3, v3);

cout << endl;

write_vector("First vector: ", u1, v1);
write_vector("Second vector: ", u2, v2);
perpendicular(u1, v1, u2, v2);

return(0);
}

// DEFINE FUNCTION read_vector HERE.

void read_vector(const double & prompt, double & x, double & y)
{

cout << prompt;
cin >> x >> y;
}

// DEFINE FUNCTION vector_length HERE.

double vector_length (double x, double y)
{
double v_length = sqrt(pow(x, 2) + pow(y, 2));
return (v_length);
}


// DEFINE FUNCTION write_vector HERE.

void write_vector(const double & prompt, double & x, double & y)
{
cout << "(" << x << ", " << y << ") has length" << vector_length(x,y) << endl;
}


// DEFINE FUNCTION vector_add HERE.

void vector_add (double & x1, double & y1, double & x2, double & y2, double & x3, double & y3)
{
x3 = x1 + x2;
y3 = y1 + y2;
}

// DEFINE FUNCTION vector_subtract HERE.

void vector_subtract (double & x1, double & y1, double & x2, double & y2, double & x3, double & y3)
{
x3 = x1 - x2;
y3 = y1 - y2;
}

// DEFINE FUNCTION scalar_mult HERE.

void scalar_mult (double & x1, double & y1, double & s, double & x2, double & y2)
{
x2 = s * x1;
y2 = s * y1;
}

// DEFINE FUNCTION perpendicular HERE.

void perpendicular (double & x1, double & y1, double & x2, double & y2)
{

}
Yes, it should have been changed to:

void normalize(double & x, double & y);

but it was not defined in your "DEFINE FUNCTION" section at the bottom.
Also, you have no statements in your perpendicular function.

(ALSO, to help make it easier to read on here. Click on the "<>" button on the format and insert your code inbetween the code brackets, just so it is easier to read)
Last edited on
thats because im not sure what statement to write for the perpendicular function. However i fixed that and im still getting a lot of errors.

http://ideone.com/HX86pS
I see. If you want to make that string of prompt work, you take out the "double" and replace it with "string" and you have to add #include<string>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
#include <iomanip>
#include <cmath>
#include<string>

using namespace std;

const double EPSILON(1e-12);

// function prototypes

// ENTER FUNCTION PROTOTYPE FOR read_vector HERE.
void read_vector(const string & prompt, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_length HERE.
double vector_length (double x, double y);

// ENTER FUNCTION PROTOTYPE FOR write_vector HERE.
void write_vector(const string & prompt, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_add HERE.
void vector_add (double & x1, double & y1, double & x2, double & y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR vector_subtract HERE.
void vector_subtract (double & x1, double & y1, double & x2, double & y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR scalar_mult HERE.
void scalar_mult (double & x1, double & y1, double & s, double & x2, double & y2);

// ENTER FUNCTION PROTOTYPE FOR normalize HERE.
void normalize (double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR perpendicular HERE.
void perpendicular (double & x1, double & y1, double & x2, double & y2);

// *** DO NOT CHANGE ANY CODE IN THE MAIN FUNCTION.
int main()
{
double u1, v1;	// coordinates of first vector
double u2, v2;	// coordinates of second vector
double u3, v3;
double scalar;

read_vector("Enter first vector (2 floats): ", u1, v1);
read_vector("Enter second vector (2 floats): ", u2, v2);

cout << "Enter scalar multiplier: ";
cin >> scalar;
cout << endl;

write_vector("First vector: ", u1, v1);
write_vector("Second vector: ", u2, v2);

cout << endl;

vector_add(u1, v1, u2, v2, u3, v3);
write_vector("Vector add: ", u3, v3);

vector_subtract(u1, v1, u2, v2, u3, v3);
write_vector("Vector subtract: ", u3, v3);

scalar_mult(u1, v1, scalar, u3, v3);
write_vector("Scalar multiplier: ", u3, v3);

cout << endl;

write_vector("First vector: ", u1, v1);
write_vector("Second vector: ", u2, v2);
perpendicular(u1, v1, u2, v2);

return(0);
}

// DEFINE FUNCTION read_vector HERE.

void read_vector(const double & prompt, double & x, double & y)
{

cout << prompt;
cin >> x >> y;
}

// DEFINE FUNCTION vector_length HERE.

double vector_length (double x, double y)
{
double v_length = sqrt(pow(x, 2) + pow(y, 2));
return (v_length);
}


// DEFINE FUNCTION write_vector HERE.

void write_vector(const double & prompt, double & x, double & y)
{
cout << "(" << x << ", " << y << ") has length" << vector_length(x,y) << endl;
}


// DEFINE FUNCTION vector_add HERE.

void vector_add (double & x1, double & y1, double & x2, double & y2, double & x3, double & y3)
{
x3 = x1 + x2;
y3 = y1 + y2;
}

// DEFINE FUNCTION vector_subtract HERE.

void vector_subtract (double & x1, double & y1, double & x2, double & y2, double & x3, double & y3)
{
x3 = x1 - x2;
y3 = y1 - y2;
}

// DEFINE FUNCTION scalar_mult HERE.

void scalar_mult (double & x1, double & y1, double & s, double & x2, double & y2)
{
x2 = s * x1;
y2 = s * y1;
}

// DEFINE FUNCTION perpendicular HERE.

void perpendicular (double & x1, double & y1, double & x2, double & y2)
{

}


Does that fix the errors?
Ahh, I found another error. In lines 22-28, only your last two parameters should be passed by reference. You have to make the first four parameters on each function passed by value. (Take out the "&")

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
#include <iomanip>
#include <cmath>
#include<string>

using namespace std;

const double EPSILON(1e-12);

// function prototypes

// ENTER FUNCTION PROTOTYPE FOR read_vector HERE.
void read_vector(const string & prompt, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_length HERE.
double vector_length (double x, double y);

// ENTER FUNCTION PROTOTYPE FOR write_vector HERE.
void write_vector(const string & prompt, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_add HERE.
void vector_add (double  x1, double  y1, double  x2, double  y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR vector_subtract HERE.
void vector_subtract (double  x1, double  y1, double  x2, double  y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR scalar_mult HERE.
void scalar_mult (double  x1, double  y1, double  s, double & x2, double & y2);

// ENTER FUNCTION PROTOTYPE FOR normalize HERE.
void normalize (double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR perpendicular HERE.
void perpendicular (double & x1, double & y1, double & x2, double & y2);

// *** DO NOT CHANGE ANY CODE IN THE MAIN FUNCTION.
int main()
{
    double u1, v1;	// coordinates of first vector
    double u2, v2;	// coordinates of second vector
    double u3, v3;
    double scalar;
    
    read_vector("Enter first vector (2 floats): ", u1, v1);
    read_vector("Enter second vector (2 floats): ", u2, v2);
    
    cout << "Enter scalar multiplier: ";
    cin >> scalar;
    cout << endl;
    
    write_vector("First vector: ", u1, v1);
    write_vector("Second vector: ", u2, v2);
    
    cout << endl;
    
    vector_add(u1, v1, u2, v2, u3, v3);
    write_vector("Vector add: ", u3, v3);
    
    vector_subtract(u1, v1, u2, v2, u3, v3);
    write_vector("Vector subtract: ", u3, v3);
    
    scalar_mult(u1, v1, scalar, u3, v3);
    write_vector("Scalar multiplier: ", u3, v3);
    
    cout << endl;
    
    write_vector("First vector: ", u1, v1);
    write_vector("Second vector: ", u2, v2);
    perpendicular(u1, v1, u2, v2);
    
    return(0);
}

// DEFINE FUNCTION read_vector HERE.

void read_vector(const string & prompt, double & x, double & y)
{
    
    cout << prompt;
    cin >> x >> y;
}

// DEFINE FUNCTION vector_length HERE.

double vector_length (double x, double y)
{
    double v_length = sqrt(pow(x, 2) + pow(y, 2));
    return (v_length);
}


// DEFINE FUNCTION write_vector HERE.

void write_vector(const string & prompt, double & x, double & y)
{
    cout << "(" << x << ", " << y << ") has length" << vector_length(x,y) << endl;
}


// DEFINE FUNCTION vector_add HERE.

void vector_add (double  x1, double y1, double  x2, double y2, double & x3, double & y3)
{
    x3 = x1 + x2;
    y3 = y1 + y2;
}

// DEFINE FUNCTION vector_subtract HERE.

void vector_subtract (double  x1, double  y1, double  x2, double  y2, double & x3, double & y3)
{
    x3 = x1 - x2;
    y3 = y1 - y2;
}

// DEFINE FUNCTION scalar_mult HERE.

void scalar_mult (double  x1, double y1, double s, double & x2, double & y2)
{
    x2 = s * x1;
    y2 = s * y1;
}

// DEFINE FUNCTION perpendicular HERE.

void perpendicular (double & x1, double & y1, double & x2, double & y2)
{
    
}
Last edited on
oh ok that makes sense. That helped with a lot of my errors thanks. now i just have to figure out my function for normalize and perpendicular.

thanks again
Okay, i'm assuming that you have to use the normalize function in your perpendicular function statement. But feel free to keep replying to this question because I have an idea on what should go in your perpendicular function.
so i got my code finished and it works properly however when i run the program i want to cout first vector and second vector for the first 2 and last 2 outputs but i cant figure out how. any ideas?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

const double EPSILON(1e-12);



// function prototypes

// ENTER FUNCTION PROTOTYPE FOR read_vector HERE.
void read_vector (const string & prompt, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_length HERE.
double vector_length (double x, double y);

// ENTER FUNCTION PROTOTYPE FOR write_vector HERE.
void write_vector (const string & prompt, double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR vector_add HERE.
void vector_add (double  x1, double  y1, double  x2, double  y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR vector_subtract HERE.
void vector_subtract (double  x1, double  y1, double  x2, double  y2, double & x3, double & y3);

// ENTER FUNCTION PROTOTYPE FOR scalar_mult HERE.
void scalar_mult (double  x1, double  y1, double  s, double & x2, double & y2);

// ENTER FUNCTION PROTOTYPE FOR normalize HERE.
void normalize (double & x, double & y);

// ENTER FUNCTION PROTOTYPE FOR perpendicular HERE.
void perpendicular (double & x1, double & y1, double & x2, double & y2);



// *** DO NOT CHANGE ANY CODE IN THE MAIN FUNCTION.
int main()
{
    double u1, v1;	// coordinates of first vector
    double u2, v2;	// coordinates of second vector
    double u3, v3;
    double scalar;
    
    read_vector("Enter first vector (2 floats): ", u1, v1);
    read_vector("Enter second vector (2 floats): ", u2, v2);
    
    cout << "Enter scalar multiplier: ";
    cin >> scalar;
    cout << endl;
    
    write_vector("First vector: ", u1, v1);
    write_vector("Second vector: ", u2, v2);
    
    cout << endl;
    
    vector_add(u1, v1, u2, v2, u3, v3);
    write_vector("Vector add: ", u3, v3);
    
    vector_subtract(u1, v1, u2, v2, u3, v3);
    write_vector("Vector subtract: ", u3, v3);
    
    scalar_mult(u1, v1, scalar, u3, v3);
    write_vector("Scalar multiplier: ", u3, v3);
    
    cout << endl;
    
    write_vector("First vector: ", u1, v1);
    write_vector("Second vector: ", u2, v2);
    perpendicular(u1, v1, u2, v2);
    
    return(0);
}



// DEFINE FUNCTION read_vector HERE.
void read_vector (const string & prompt, double & x, double & y)
{
    cout << prompt;
    cin >> x >> y;
}

// DEFINE FUNCTION vector_length HERE.
double vector_length (double x, double y)
{
    double v_length = sqrt(pow(x, 2) + pow(y, 2));
    return (v_length);
}

// DEFINE FUNCTION write_vector HERE.
void write_vector (const string & prompt, double & x, double & y)
{
    cout << "(" << x << ", " << y << ") has length " << vector_length(x,y) << endl;
}

// DEFINE FUNCTION vector_add HERE.
void vector_add (double  x1, double y1, double  x2, double y2, double & x3, double & y3)
{
    x3 = x1 + x2;
    y3 = y1 + y2;
    cout << "Vector add: ";
}

// DEFINE FUNCTION vector_subtract HERE.
void vector_subtract (double  x1, double  y1, double  x2, double  y2, double & x3, double & y3)
{
    x3 = x1 - x2;
    y3 = y1 - y2;
    cout << "Vector subtract: ";
}

// DEFINE FUNCTION scalar_mult HERE.
void scalar_mult (double  x1, double y1, double s, double & x2, double & y2)
{
    x2 = s * x1;
    y2 = s * y1;
    cout << "Vector multiplier: ";
}

// DEFINE FUNCTION normalize HERE.
void normalize (double & x, double & y)
{
    double v = vector_length(x, y);
    
    if (v < EPSILON)
    {
        x = x / v;
        y = y / v;
    }
}

// DEFINE FUNCTION perpendicular HERE.
void perpendicular (double & x1, double & y1, double & x2, double & y2)
{
    normalize(x1, y1);
    normalize (x2, y2);
    
    double p1x = -y1;
    double p1y = x1;
    double p2x = -p1x;
    double p2y = -p1y;
    
    if (abs(x2 - p1x) < EPSILON && abs(y2 - p1y) < EPSILON || (abs(x2 - p2x) < EPSILON && abs(y2 - p2y) < EPSILON))
    {
        cout << "Vectors are PERPENDICULAR." << endl;
    }
    else
    {
        cout << "Vectors are NOT PERPENDICULAR." << endl;
    }
}
Yes. You have to call the string library.

At the top, if you put:

 
#include<string> 


it will output your prompt
nice interface style by the way.
Topic archived. No new replies allowed.