cppcourse/src/sheet02.cpp
2022-11-19 19:06:58 +01:00

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';
}
}