我在创建函数时需要一些帮助

时间:2019-05-21 15:13:07

标签: c++ function matrix

我是新手,在功能上不太好,我正在尝试解决这个问题:

  
      
  1. 假设ABC分别是大小为[M][N][M][N]的整数数组。用户将输入数组AB的值。用C ++编写一个用户定义的函数,通过添加CA的元素来计算第三个数组B。如果元素具有相同的索引号,它们将被相乘。 C的计算如下:-

         

    在函数中使用ABC作为参数。

  2.   

This is the picture that came with it

下面是我对这个问题的尝试。

     #include<iostream>
using namespace std;

void Mix(int(&A)[], int(&B)[], int(&C)[][100], int N, int M);
//dont understand why you used Q

int main()
{
    //variable declaration
    int A[100], B[100], C[100][100], n, m, l = 0;


    //input of size of elements for first ararys
    cout << "Enter number of elements you want to insert in first array: ";
    cin >> n;
    cout << "-----------------" << endl;
    cout << "-----------------" << endl;
    cout << "Enter your elements in ascending order" << endl;
    //input the elements of the array
    for (int i = 0; i < n; i++)
    {
        cout << "Enter element " << i + 1 << ":";
        cin >> A[i];
    }
    cout << endl << endl;
    //input of size of elements for first ararys
    cout << "Enter number of elements you want to insert in second array: ";
    cin >> m;
    cout << "-----------------" << endl;
    cout << "-----------------" << endl;
    cout << "Enter your elements in descending order" << endl;
    //input the elements of the array
    for (int i = 0; i < m; i++)
    {
        cout << "Enter element " << i + 1 << ":";
        cin >> B[i];
    }

    Mix(A, B, C, n, m);

    cout << "\nThe Merged Array in Ascending Order" << endl;


    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
        {
            cout << C[i][j] << " ";
        }
        cout << "\n"; //endline never use endl its 10 times slower
    }

    system("pause");
    return 0;
}

void Mix(int(&A)[], int(&B)[], int(&C)[][100], int N, int M)
{
    // rows is the index for the B array, cols is index for A array
    int rows = 0;
    int cols = 0;
    while (rows < M) {
        while (cols < N) {
            if (rows == cols) { // remember ==
                C[rows][cols] = B[rows] * A[cols];
            }
            else {
                C[rows][cols] = B[rows] + A[cols];
            }
            cols++; // increment here
        }
        rows++; // increment here
    }
    return;
}

以下是输出示例:

enter image description here

3 个答案:

答案 0 :(得分:1)

为了使export function searchRequest(search){ return(dispatch)=>{ console.log('in search', search) return axios.get(`http://localhost:4000/reports/${search}`) .then(response => { dispatch(searchInfo(response.data)) }) } } 数组为二维,需要将其表示为C,而不是C[100][100]。那是第一步。接下来,在您的C[200]函数中,您需要循环浏览Mix()A的每个元素(例如两个B循环)。您的行随着for的变化而变化,而列也随着B的变化而变化。包括对相同索引的检查,该索引将确定是将两个值相加还是相乘。

A

确保正确定义了数组,并按行和列打印出C数组以符合规范。

更新:如果要使用void Mix(int A[], int B[], int C[][], int N, int M) { // rows is the index for the B array, cols is index for A array for (int rows = 0; rows < M; rows++) { for (int cols = 0; cols < N; cols++) { if (rows == cols) { // remember == C[rows][cols] = B[rows] * A[cols]; } else { C[rows][cols] = B[rows] + A[cols]; } } } } 循环,我将默认解构while循环并应用相同的逻辑:

for

我绝对会推荐void Mix(int A[], int B[], int C[][], int N, int M) { // rows is the index for the B array, cols is index for A array int rows = 0; int cols = 0; while (rows < M) { while (cols < N) { if (rows == cols) { // remember == C[rows][cols] = B[rows] * A[cols]; } else { C[rows][cols] = B[rows] + A[cols]; } cols++; // increment here } rows++; // increment here } } 循环方法,因为它更紧凑,但操作完全相同。

答案 1 :(得分:0)

您的代码有很多错误。首先,必须使用2个方括号声明2D数组,以便C [200] [200]。在Mix函数中,逻辑运算符是 <cache-container name="hibernate" module="org.infinispan.hibernate-cache"> <transport channel="omega-ee" lock-timeout="60000"/> <global-state/> <local-cache name="local-query"> <object-memory size="10000"/> ...etc... 中的==而不是= 无论如何,这是您需要的功能:

if (A[I] = B[J])

答案 2 :(得分:0)

由于MN是在运行时定义的,因此您真的想使用vectors来表示它们。另外,考虑返回2D容器,以利用返回值的优化。

为简单起见,我将使用vectorvector编写一个示例(有关为何对玩具示例真正有用的更多信息,请参见What are the Issues with a vector-of-vectors?):

vector<vector<int>> Mix(const vector<int>& A, const vector<int>& B) {
    vector<vector<int>> result(size(B), vector<int>(size(A)));

    for(size_t i = 0U; i < size(B); ++i) {
        for(size_t j = 0U; j < size(A); ++j) {
            result[i][j] = A[j] * B[i];
        }
    }
    return result;
}

Live Example

编辑:

如果必须使用数组,那么您将错过返回值优化的机会。在这种情况下,我只会选择此作为一个不错的选择:

  1. 您没有返回任何东西,在这种情况下,您的函数可能类似于:
void Mix(const int* A, const int* B, const size_t size_A, const size_t size_B) 
{
    for(size_t i = 0U; i < size_B; ++i) {
        for(size_t j = 0U; j < size_A; ++j) {
            cout << '[' << i << "][" << j << "]: " << A[j] * B[i] << '\t';
        }
        cout << endl;
    }
}
  1. 您没有调用函数,并且已经获得int A[M]int B[N]作为输入,int C[N][M]作为输出,在这种情况下,您可以内联代码可能看起来像这样:
for(size_t i = 0U; i < size(B); ++i) {
    for(size_t j = 0U; j < size(A); ++j) {
        C[i][j] = A[j] * B[i];
    }
}