2017-12-12 11 views
0
  1. 二つの数量との演算を使用してU及びVはアレイ

    NUV = u1v1 + u2v2 + u3v3 + u4v4 +あれば直角であると言われている............ + unvn = 0

uとvが直角であるかどうかを計算する関数を書く。必要に応じて配列を使用できます。この関数は、ベクトルが同じ次元(n)を持つと仮定することができますが、この数は関数のパラメータとして渡す必要があります。

私のプログラムにはいくつかの誤りがあります。私は初心者なので、助けていただければ幸いです。エラーが私に言っている: '無効機能(int型*、int型*')
cppの機能で

26:エラー予想します ';' '}' の前にトークン
cppの29:エラー;あなたはこの方法でforループを使用しているところ

#include <iostream> 

using namespace std; 

const int n = 5; 

void function(int array[n],int array2[n]); 

int main(){ 

    int array[n] = {5, 3 , -4, 2, 8}; 
    int array2[n] ={-7, -9, 5, 2, 9}; 

    function(array, array2); 

    return 0; 
} 

void function(int array[n], int array2[n]){ 

    int multiple; 

    for(int i=0; i <=5, i++) 
    { 
     (array[i]*array2[i]) + (array[i+1]*array2[i+1]) = multiple; 
    } 

    cout << multiple << endl; 
} 
+1

0に倍数を初期化します。 multiple + =(..) – user6386155

+0

関数 'function'を呼び出さないでください。それは 'DotProduct'のような意味のある名前です。 – stark

+0

'i <= 5'あなたは範囲外の配列にアクセスしています。 –

答えて

1

構文エラーがある割り当ての左のオペランドとして必要な値:

for(int i=0;i<=5,i++) 

使用代わりに

for(int i=0; i <= 5; i++) 
+0

ありがとう私はちょうどこれを修正したばかりですが、void関数(int * int *)に問題があり、代入の左側のオペランドに29 lvalueが必要です – ProgrammingNoob

+0

@ProgrammingNoob: 'multiple'の代入が逆順であるためです –

+0

はい問題も。 –

1

forループが不正です。 <=の代わりに<を使用し、5の代わりにnを使用し、,の代わりに;を使用する必要があります。

あなたの割り当てmultipleは、それ以降のものです。 =演算子の右側の値は、=の左側の変数に割り当てられます。 multiple(初期化されていない)の値は、それ自身の明示的な変数を持たない動的に計算された値に割り当てようとしています。代わりに計算された値をmultipleに割り当てる必要があります。

また、「この番号[配列の寸法]を関数のパラメータとして渡す必要があります」という指示に従わなかった場合。

このお試しください:機能

#include <iostream> 
using namespace std; 

const int n = 5; 

void function(const int *array1, const int *array2, const int size); 

int main() 
{ 
    int array1[n] = { 5, 3, -4, 2, 8}; 
    int array2[n] = {-7, -9, 5, 2, 9}; 

    function(array1, array2, n); 

    return 0; 
} 

void function(const int *array1, const int *array2, const int size) 
{ 
    int multiple = 0; 

    for(int i = 0; i < size; i++) 
    { 
     multiple += (array1[i] * array2[i]); 
    } 

    cout << multiple << endl; 
} 
1

はベクトルが同じ次元(nは、 が言う)、を持っていると仮定することができますが、この数は 機能にパラメータとして渡す必要があります。

この関数宣言

void function(int array[n],int array2[n]); 

は、アレイの寸法を指定するパラメータが含まれていません。

値によって渡される配列を暗黙的に最初の要素へのポインタに変換されるため、上記の宣言は

void function(int *array,int *array2); 

と等価です。

for(int i=0; i <=5, i++) 
      ^^^^^^ 

for (int i=0; i < n; i++) 

multiple

int multiple; 
が初期化されていない変数とこの割り当てがなければならないタイプミスや文に対して、このバグがあります

(array[i]*array2[i]) + (array[i+1]*array2[i+1]) = multiple; 

は意味を持たないと、あなたが何を意味するかと思われる条件

nuv = u1v1 + u2v2 + u3v3 + u4v4 +………… + unvn = 0 

と共通のものはこれらの配列は

int array[N] = { 5, 3 , -4, 2, 8 }; 
    int array2[N] = { -7, -9, 5, 2, 9 }; 

は右ではありません、以下

#include <iostream> 

bool function(const int array[], const int array2[], size_t n) 
{ 

    long long int product = 0; 

    for (size_t i = 0; i < n; i++) 
    { 
     product += array[i] * array2[i]; 
    } 

    return product == 0; 
} 

int main() 
{ 
    const size_t N = 5; 
    int array[N] = { 5, 3 , -4, 2, 8 }; 
    int array2[N] = { -7, -9, 5, 2, 9 }; 

    std::cout << "array and array2 are " 
     << (function(array, array2, N) ? "" : "not ") 
     << "at right angles" 
     << std::endl; 

    return 0; 
} 

でいません角度、

しかし、これらの配列

int array[N] = { 5, 3 , -4, 1, 9 }; 
    int array2[N] = { -7, -9, 5, 1, 9 }; 

は直角です。それらを試してください。

0

代替:C++の方法を試してください。長さを知っているstd :: arrayを使用してください。 std :: inner_productのような標準ライブラリによって提供されるアルゴリズムを使用してください。

#include <iostream> 
#include <algorithm> 
#include <array> 
#include <numeric> 

int main() 
{ 
    using arr_t = std::array<int,5>; 

    arr_t arr1 = {5, 3 , -4, 2, 8}; 
    arr_t arr2 = {-7, -9, 5, 2, 9}; 

    int mult = std::inner_product(begin(arr1), end(arr1), begin(arr2), 0, 
       std::plus<>(), std::multiplies<>()); 

    std::cerr << mult << "\n"; 
}