124 lines
2.9 KiB
C++
Executable File
124 lines
2.9 KiB
C++
Executable File
#include <iostream>
|
|
#include <map>
|
|
#include <cmath>
|
|
#include <vector>
|
|
|
|
double euclidean_length(const std::vector<double> &v);
|
|
double scalar_product(const std::vector<double> &v, const std::vector<double> &w);
|
|
std::vector<double> normalize(const std::vector<double> &v);
|
|
double euclidean_distance(const std::vector<double> &v, const std::vector<double> &w);
|
|
void print_dvector(const std::vector<double> &v);
|
|
unsigned fibonacci_rec(unsigned n);
|
|
unsigned fibonacci_nonrec(unsigned n);
|
|
void mymap();
|
|
|
|
|
|
int main()
|
|
{
|
|
std::vector<double> a = {1, 2, 3};
|
|
std::vector<double> b = {4, 5, 6};
|
|
std::cout << "length of 'a': " << euclidean_length(a) << '\n';
|
|
std::cout << "scalar product of 'a' and 'b': " << scalar_product(a, b) << '\n';
|
|
print_dvector(normalize(a));
|
|
std::cout << "distance between 'a' and 'b': " << euclidean_distance(a, b) << '\n';
|
|
std::cout << "Recursive Fibonacci of 25: " << fibonacci_rec(25) << '\n';
|
|
std::cout << "Fibonacci of 50: " << fibonacci_nonrec(25) << '\n';
|
|
mymap();
|
|
}
|
|
|
|
void print_dvector(const std::vector<double> &v) {
|
|
for (const double &d : v) {
|
|
std::cout << d << '\n';
|
|
}
|
|
std::cout << '\n';
|
|
}
|
|
double euclidean_length(const std::vector<double> &v)
|
|
{
|
|
double sum = 0;
|
|
|
|
return std::sqrt(sum);
|
|
}
|
|
|
|
double scalar_product(const std::vector<double> &v, const std::vector<double> &w)
|
|
{
|
|
double product = 0;
|
|
if(v.size()!=w.size()) { return std::nan(""); }
|
|
for(int i=0; i<v.size(); ++i)
|
|
{
|
|
product += v[i]*w[i];
|
|
}
|
|
return product;
|
|
}
|
|
|
|
std::vector<double> normalize(const std::vector<double> &v)
|
|
{
|
|
double length = euclidean_length(v);
|
|
std::vector<double> norm;
|
|
for(int i=0; i<v.size(); ++i)
|
|
{
|
|
norm.push_back(v[i]/length);
|
|
}
|
|
return norm;
|
|
}
|
|
|
|
double euclidean_distance(const std::vector<double> &v, const std::vector<double> &w)
|
|
{
|
|
if(v.size()!=w.size()) { return std::nan(""); }
|
|
double distance = 0;
|
|
for(int i=0; i<v.size(); ++i)
|
|
{
|
|
distance += (v[i]-w[i])*(v[i]-w[i]);
|
|
}
|
|
return std::sqrt(distance);
|
|
}
|
|
|
|
unsigned fibonacci_rec(unsigned n)
|
|
{
|
|
if(n<=2)
|
|
{
|
|
return 1l;
|
|
}
|
|
else
|
|
{
|
|
return fibonacci_rec(n-1)+fibonacci_rec(n-2);
|
|
}
|
|
}
|
|
|
|
unsigned fibonacci_nonrec(unsigned n)
|
|
{
|
|
unsigned fibo = 0;
|
|
unsigned prev_fibo = 1;
|
|
unsigned prev_prev_fibo = 0;
|
|
|
|
for(int i=2; i<=n; ++i)
|
|
{
|
|
fibo = prev_fibo + prev_prev_fibo;
|
|
prev_prev_fibo = prev_fibo;
|
|
prev_fibo = fibo;
|
|
}
|
|
|
|
return fibo;
|
|
}
|
|
|
|
void mymap()
|
|
{
|
|
std::map<std::string, int> mymap;
|
|
mymap["Peter"] = 40;
|
|
mymap["Brian"] = 4;
|
|
mymap["Stewie"] = 1;
|
|
mymap["Chris"] = 15;
|
|
mymap["Meg"] = 14;
|
|
|
|
for(const auto& n : mymap)
|
|
{
|
|
std::cout << n.first << ' ' << n.second << '\n';
|
|
}
|
|
|
|
mymap["Lois"] = 41;
|
|
std::cout << '\n';
|
|
|
|
for(const auto& n : mymap)
|
|
{
|
|
std::cout << n.first << ' ' << n.second << '\n';
|
|
}
|
|
} |