Nie rozumiem zadania - obliczanie ntej wartości ciągu

0

Oblicz:
X = (N mod 4).
Napisz szablonową funkcję rng(n, m, f), która otrzyma parametry n i m typu generycznego T
oraz funkcję lambda f. Funkcja rng powinna obliczyć i zwrócić wartość wyrażenia po n
iteracjach:
Ri = f(Ri-1
, Ri - 2
) mod m.
Wartości początkowe przyjmij:
R0 = (T)std::time(0),
R1 = X^2 + 1.

Nie bardzo wiem o co chodzi w poleceniu.

1

Masz napisać funkcję szablonową obliczajacą n-ty wyraz ciągu, którego pierwsze dwa wyrazy to (T)std::time(0) i X^2 + 1, gdzie X = (N mod 4), ^ to prawdopodobnie operator potęgowania. Wzór na kolejne wyrazy ciągu to R(i) = f(R(i-1), R(i-2)) modulo m

0

Dasz radę napisać mi program ,do przeanalizowania go ? Byłbym wdzięczny

0


#include <iostream>

using namespace std;

template <typename T, class F>

T rng(T n, T m, F f)
{
	
}

na razie mam coś takiego czy w dobrą stronę ide ?

0

Idziesz w dobrą stronę.

1

W wyrażeniu X = (N mod 4) brakuje informacji (*) jaką rolę odgrywa parametr N. Czy ma ustaloną wartość początkową, czy jest przesyłany jako parametr funkcji, czy jako parametr szablonu, czy też jest zmienną funkcji lambda?

(*) chyba że czegoś tutaj nie widzę

0
template <typename T, class Function>
rng(T n, T m, Function lambda)
{

    int X = 17346 % 4;
    time_t R0 = (T)time(0);
    int R1 = pow(X, 2) + 1;

    for(int i = 0; i > n; n++ )
    {
        if(i = n - 1)
        {
            return lambda(R0, R1) % m;
        }
    }
}


0

mam coś takeigo typu ? Czy jest dobrze ?

template <typename T, class Function>
rng(T n, T m, Function lambda)
{

    int X = 17346 % 4;
    time_t R0 = (T)time(0);
    int R1 = pow(X, 2) + 1;

    for(int i = 0; i > n; n++ )
    {
        if(i = n - 1)
        {
            return lambda(R0, R1) % m;
        }
    }
}
#include <iostream>
#include <time.h>
#include <functional>

using namespace std;

int X = 17365 % 4;

template <class T>
T rng(T n, T m, function <T(T, T)> f) {
    if (n == 0) return X ^ 2 + 1;
    if (n == 1) return (T)time(0);
    else return f(rng(n - 1, m, f), rng(n - 2, m, f)) % m;

0

Pętla

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

nie wykona się ani razu , chyba że będziesz operował na ujemnych wartościach n.

Wyrażenie

if(i = n - 1) 

jest sprawdzeniem czy zmienna i po podstawieniu jest równa zero czy też nie. Wątpię żeby o to chodziło.

Moja rada jest taka. Spróbuj spokojnie przetestować swój kod. Czy działa, czy się kompiluje, jakie wartości zwraca funkcja. Jak będziesz kawałek po kawałku rozbudowywał swoją funkcję dodając następne fragmenty kodu, to nie tylko nauczysz się jak to wszystko działa, ale unikniesz popełniania powyższych błędów, które nawet początkujący programista jest w stanie zauważyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1