再次打扰一下,我不是编程中的天才。
首先,摘要:数组输入。两个3D矢量......哈哈,让我们用矢量来计算更多的矢量。无论如何:点积是荒谬的(小数点前九个数字;我的意思是,我认为1x8 + 7x5 + 4x2可能没有NINE数字)。交叉产品......更糟糕。
我做了......呃......我该怎么称呼它?好吧,我们称之为“traza”。我将翻译定义以便理解:代码的“traza”告诉我们执行的指令序列,以及在每行代码之后变量如何变化。你知道,带有变量和数字标记的表引用了代码行,我们看看代码是否做了意外的事情。重点:就我所见,这一切都很好。
然后,我用一个打印命令和矢量中的每个值做了一个意外的“pseudotraza”。在输入之后和te dot产品之前(在函数中)。你猜怎么着: 1)这不是我的输入,在其中任何一个 2)它们甚至不是相同的值 3)第一个值远离我的输入,但下面的值至少是更多的逻辑(与输入的差异较小)。
我在12小时前的今天早上学会了使用数组/矢量/无论如何。我没有必要在输入之前将任何值设置为0作为默认值。但是,在我这样的事情发生之前,这是我唯一知道的事情。 (总有一天你们中的任何一个人都会成为我的编程老师,你们学习的比我自己更多...并且原谅我糟糕的语法,西班牙的英语教学只是“在上一个高中一年学习一些语法规则,不超过50个练习。 ..所有你需要通过大学入学考试!“)
#include <iostream>
using namespace std;
#include <stdlib.h>
const int N = 3;
typedef int Vector[N];
void introduirVector (Vector);
float producteEscalar (const Vector, const Vector); /*Input vector and dot product*/
int main (void)
{
Vector v1, v2;
float p_esc;
cout << "Introduim les dades del vector A: "; /* Input */
introduirVector (v1);
cout << "Introduim les dades del vector B: "; /* 2x Input combo */
introduirVector (v2);
cout << v1[0] << "\n" << v1[1] << "\n" << v1[2] << "\n" << v2[0] << "\n" << v2[1] << "\n" << v2[2] << endl; /* "Puseudotraza*/
p_esc= producteEscalar (v1, v2); /*Dot product*/
cout << "El producte escalar: " << p_esc; /*Dot product is...*/
system ("PAUSE");
return 0;
}
/*3x Input combo*/
void introduirVector (Vector)
{
int i;
Vector v;
for (i = 0; i < N; i++)
{
cin >> v[i];
}
return;
}
/* Dot product (why all the Vectors are set as constants but another after this is not set? It's the hint given by the teacher, my (not) beloved teacher...they gave us the main function and the other function's prototypes, but that's all) */
float producteEscalar (const Vector, const Vector)
{
float escalar;
Vector v1, v2;
/* Pseudotrazas for all*/
cout << v1[0] << "\n" << v1[1] << "\n" << v1[2] << "\n" << v2[0] << "\n" << v2[1] << "\n" << v2[2] << endl;
/* Dot product and all that */
escalar = (v1[0]*v2[0])+(v1[1]*v2[1])+(v1[2]*v2[2]);
return escalar;
}
答案 0 :(得分:2)
问题在于:
/*3x Input combo*/
void introduirVector (Vector)
{
int i;
Vector v;
此函数将Vector
作为参数,但Vector没有名称,因此无法在函数内使用。
然后您宣布一个新的本地 Vector v
。您将用户的输入读入此向量。
然后函数结束,此时读取用户输入的向量消失。
首先,您应该使用您调用的参数,而不是局部变量。但是你的第二个问题是你正在使用pass by value。当您调用此函数时,introduirVector (v1);
不您知道的“v1”,并且您正在使用introduirVector
内部的主要内容,但本地副本它在函数返回时不再存在。
你需要做的是让你的函数接受一个指针或对它所调用的Vector的引用:
void introduirVector(Vector& v)
{
for (size_t i = 0; i < 3; ++i) {
cin >> v[i];
}
}
这并没有完全解决您的代码的所有问题,但它应该让您继续前进。
答案 1 :(得分:0)
我没有看到任何输入,这就是你没有收到任何输入的原因。
尝试使用:
string inpt;
int a, b, c;
cin >> inpt;
a = atoi( inpt.c_str());
inpt = "";
cin >> inpt;
b = atoi( inpt.c_str());
// etc...
// Make your vector in this fashion, grabbing each integer separately then loading them
// into a vector