From a0c67066bb12efd96d41bfbcc6b582e9a2bb82d7 Mon Sep 17 00:00:00 2001 From: kai Date: Sat, 29 Mar 2025 13:36:39 +0100 Subject: [PATCH] add lookup funktion --- lab02/fib/src/main.cpp | 95 ++++++++++++++++++++++++++++++------------ 1 file changed, 68 insertions(+), 27 deletions(-) diff --git a/lab02/fib/src/main.cpp b/lab02/fib/src/main.cpp index 010460c..633843d 100644 --- a/lab02/fib/src/main.cpp +++ b/lab02/fib/src/main.cpp @@ -1,35 +1,76 @@ #include "matrix.h" #include -int fib(int n) -{ - if (n < 2) - return n; +#include +#include - int a = 0; - int b = 1; +int fib(int n) { + if (n < 2) + return n; - for (int i = 2; i <= n; ++i) - { - int temp = a + b; - a = b; - b = temp; - } + int a = 0; + int b = 1; - return b; + for (int i = 2; i <= n; ++i) { + int temp = a + b; + a = b; + b = temp; + } + + return b; } -Matrix compute(const Matrix &s, const std::vector &v) -{ - Matrix m(s.dim()); - const int n = v.size(); - for (int j = 0; j < n; ++j) - { - double val = static_cast(fib(v[j] % 256)); - double val2 = (sin(val) * tan(val) / sqrt(cos(val) + 2)); - for (int i = 0; i < n; ++i) - { - m(j, i) = s(j, i) * val2; - } - } - return m; +std::vector get_lookup(const std::vector &v) { + std::vector lookup = std::vector(256); + + for (int i = 0; i < 256; i++) { + lookup[i] = fib(i); + } + + return lookup; +} + +Matrix compute(const Matrix &s, const std::vector &v) { + std::vector lookup = get_lookup(v); + + Matrix m(s.dim()); + const int n = v.size(); + for (int j = 0; j < n; ++j) { + double val = static_cast(lookup[v[j] % 256]); + double val2 = (sin(val) * tan(val) / sqrt(cos(val) + 2)); + for (int i = 0; i < n; ++i) { + m(j, i) = s(j, i) * val2; + } + } + return m; +} + +int main() { + std::vector v = std::vector(3); + v[0] = 10; + v[1] = 2; + v[2] = 20; + + Matrix m = Matrix(3, 3); + for (int i = 0; i < 3; i++) { + for (int y = 0; y < 3; y++) { + m(i, y) = 1; + } + } + + auto erg = compute(m, v); + + std::cout << v[0] << std::endl; + std::cout << v[1] << std::endl; + std::cout << v[2] << std::endl; + + std::cout << std::endl; + + for (int i = 0; i < 3; i++) { + for (int y = 0; y < 3; y++) { + std::cout << erg(i, y) << "\t"; + } + std::cout << std::endl; + } + + return 0; }