Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- / ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- /*
- #include <iostream>
- #include <string>
- using namespace std;
- int sigma(int n, int m, function<int(int)> pf)
- {
- int i, sum;
- sum = 0;
- for (i = n; i <= m; i++)
- sum = sum + pf(i);
- return sum;
- }
- int pi(int n, int m, function<int(int)> pf)
- {
- int i, pr;
- pr = 1;
- for (i = n; i <= m; i++)
- pr = pr * pf(i);
- return pr;
- }
- int simple(int i)
- {
- return i;
- }
- int fact(int n)
- {
- return pi(1, n, simple);
- }
- void main()
- {
- int n;
- cin >> n;
- cout << sigma(1, n, fact) << endl;
- system("pause");
- }
- */
- /*
- #include <iostream>
- #include <functional>
- using namespace std;
- int summ(int a, int b)
- {
- return a + b;
- }
- int mult(int a, int b)
- {
- return a * b;
- }
- int simple(int i)
- {
- return i;
- }
- int alpha(int n, int m, int start, function<int(int)> pf, function<int(int, int)> pf2)
- {
- int i, res;
- res = start;
- for (i = n; i <= m; i++)
- res = pf2(res, pf(i));
- return res;
- }
- int fасt(int n)
- {
- return alpha(1, n, 1, simple, mult);
- }
- void main()
- {
- int n;
- cin >> n;
- cout << alpha(1, n, 0, fасt, summ) << endl;
- system("pause");
- }
- */
- #include <iostream>
- #include <functional>
- using namespace std;
- int alpha(int m, int n, int start, function<int(int)> pf, function<int(int, int)> pf2)
- {
- int i, res;
- res = start;
- for (i = m; i <= n; i++)
- res = pf2(res, pf(i));
- return res;
- }
- function<int(int)> partapply(function<int(int, int, int, function<int(int)>, function<int(int, int)>)> af, int m, int start, function<int(int)> pf, function<int(int, int)> pf2)
- {
- return [af, m, start, pf, pf2](int n)->int {return af(m, n, start, pf, pf2); };
- }
- int memoise(function<int(int)> pf, int n, int* a)
- {
- if (a[n] == 0)
- a[n] = pf(n);
- return a[n];
- }
- function<int(int)> partapply(function<int(function<int(int)>, int, int*)> mf, function<int(int)> pf, int* a)
- {
- return [mf, pf, a](int n)->int {return mf(pf, n, a); };
- }
- void main()
- {
- int n;
- cin >> n;
- int a[100];
- for (int i = 0; i < 100; i++)
- a[i] = 0;
- // function<int(int)> fact = partapply(alpha, 1, 1, [](int x)->int {return x; }, [](int x, int y)->int {return x * y; });
- // function<int(int)> memfact = partapply(memoise, fact, a);
- // cout << alpha(1, n, 0, memfact, [](int x, int y)->int {return x + y; }) << endl;
- cout << alpha(1, n, 0, partapply(memoise, partapply(alpha, 1, 1, [](int x)->int {return x; }, [](int x, int y)->int {return x * y; }), a), [](int x, int y)->int {return x + y; }) << endl;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement