-5

再次对不起,我不是编程方面的天才。

首先总结一下:数组输入。两个 3D 向量……哈哈,让我们用向量来计算 MORE 向量。无论如何:点积是荒谬的(小数点前有九个数字;我的意思是,说真的,我从没想过 1x8+7x5+4x2 可以有九个数字)。交叉产品是......甚至更糟。

我做了……呃……我怎么称呼它?好吧,我们称之为“traza”。我将按顺序翻译一个定义以便理解:代码的“traza”告诉我们其执行指令的顺序,以及在每一行代码之后变量如何变化。您知道,带有变量和数字标记的表格指的是代码行,如果代码执行了意外的事情,我们会在其中查看。直截了当:据我所知,一切都很好。

然后,我使用打印命令和向量中的每个值制作了一个意外的“pseudotraza”。就在输入之后和点积之前(在函数中)。猜猜看: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;
}
4

2 回答 2

2

问题是这样的:

/*3x Input combo*/
void introduirVector (Vector)
{
    int i;
    Vector v;

该函数将 aVector作为参数,但 Vector 没有名称,因此不能在函数内部使用。

然后你声明一个新的local Vector v。您将用户的输入读入此向量。

然后该函数结束,此时您读取用户输入的向量消失。

首先,您应该使用调用时使用的参数,而不是局部变量。但是您的第二个问题是您正在使用pass by value。当您调用此函数时,introduirVector (v1);您在 inside 使用的不是您从 main 中了解和喜爱的“v1” introduirVector,而是当您的函数返回时不再存在的它的本地副本。

你需要做的是让你的函数接受一个指针或对它被调用的 Vector 的引用:

void introduirVector(Vector& v)
{
    for (size_t i = 0; i < 3; ++i) {
        cin >> v[i];
    }
}

这并不能完全解决您的代码的所有问题,但它应该让您继续前进。

于 2013-11-04T21:03:30.773 回答
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
于 2013-11-04T20:40:52.833 回答