内積についてはここ。
cinで数値を入力した後、各ベクトルの数値を配列に入れて内積を計算する。
結果
データ数を入力 ->3
x0->2
x1->4
x2->3
w0->1
w1->3
w2->5
2×1=2
4×3=12
3×5=15
結果 ->29
ソースコード。
#include <iostream>
double dot(int n, std::shared_ptr<double[]> x, std::shared_ptr<double[]> w) {
double goukei = 0;
for (int i = 0; i < n; i++) {
std::cout << x[i] << "×" << w[i] << "=" << x[i] * w[i] << std::endl;
goukei = goukei + x[i] * w[i];
}
std::cout << std::endl;
return goukei;
}
int main() {
std::size_t n;
while (1) {
std::cout << "データ数を入力 ->";
std::cin >> n;
if ((std::cin.good() != 0) && n >= 1 && n <= 99) {
break;
}
std::cin.clear();
std::cin.ignore(256, '\n');
std::cout << "もう一度数を入力 ->";
}
std::shared_ptr<double[]> x(new double[n]);
std::shared_ptr<double[]> w(new double[n]);
for (unsigned int i = 0; i < n; i++) {
std::cout << "x" << i << "->";
while (1) {
std::cin >> x[i];
if ((std::cin.good() != 0) && x[i] >= 0 && x[i] < 99) {
break;
}
std::cin.clear();
std::cin.ignore(256, '\n');
std::cout << "もう一度数を入力 ->";
}
}
std::cout << std::endl;
for (unsigned int i = 0; i < n; i++) {
std::cout << "w" << i << "->";
while (1) {
std::cin >> w[i];
if ((std::cin.good() != 0) && w[i] >= 0 && w[i] < 99) {
break;
}
std::cin.clear();
std::cin.ignore(256, '\n');
std::cout << "もう一度数を入力 ->";
}
}
std::cout << std::endl;
std::cout<< "結果 ->" << dot(n, x, w);
return(0);
}
同じ動きをするnewを使った例↓
#include <iostream>
double dot(int n,double *x, double *w) {
double goukei = 0;
for (int i = 0; i < n; i++) {
std::cout << x[i] << "×" << w[i] << "=" << x[i] * w[i] << std::endl;
goukei = goukei + x[i] * w[i];
}
std::cout << std::endl;
return goukei;
}
int main() {
unsigned int n;
double* x, *w;
while (1) {
std::cout << "データ数を入力 ->";
std::cin >> n;
if ((std::cin.good() != 0) && n >= 1 && n <= 99) {
break;
}
std::cin.clear();
std::cin.ignore(256, '\n');
std::cout << "もう一度数を入力 ->";
}
x = new double[n];
w = new double[n];
for (int i = 0; i < n; i++) {
std::cout << "x" << i << "->";
while (1) {
std::cin >> x[i];
if ((std::cin.good() != 0) && x[i] >= 0 && x[i] < 99) {
break;
}
std::cin.clear();
std::cin.ignore(256, '\n');
std::cout << "もう一度数を入力 ->";
}
}
for (int i = 0; i < n; i++) {
std::cout << "w" << i << "->";
while (1) {
std::cin >> w[i];
if ((std::cin.good() != 0) && w[i] >= 0 && w[i] < 99) {
break;
}
std::cin.clear();
std::cin.ignore(256, '\n');
std::cout << "もう一度数を入力 ->";
}
}
std::cout << std::endl;
std::cout<< "結果 ->" << dot(n, x, w);
delete[] x;
delete[] w;
return(0);
}
コメント