<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
		<id>http://wiki.isofts.kiev.ua/index.php?action=history&amp;feed=atom&amp;title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80</id>
		<title>Генератор - Історія редагувань</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.isofts.kiev.ua/index.php?action=history&amp;feed=atom&amp;title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80"/>
		<link rel="alternate" type="text/html" href="http://wiki.isofts.kiev.ua/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80&amp;action=history"/>
		<updated>2026-04-07T10:25:35Z</updated>
		<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
		<generator>MediaWiki 1.25.3</generator>

	<entry>
		<id>http://wiki.isofts.kiev.ua/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80&amp;diff=2287&amp;oldid=prev</id>
		<title>111: Створена сторінка: '''Генератор''' — в інформатиці, це підпрограма, що контролює ітерації в циклі.  Генератор...</title>
		<link rel="alternate" type="text/html" href="http://wiki.isofts.kiev.ua/index.php?title=%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80&amp;diff=2287&amp;oldid=prev"/>
				<updated>2018-02-18T17:54:00Z</updated>
		
		<summary type="html">&lt;p&gt;Створена сторінка: &amp;#039;&amp;#039;&amp;#039;Генератор&amp;#039;&amp;#039;&amp;#039; — в інформатиці, це підпрограма, що контролює ітерації в циклі.  Генератор...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Генератор''' — в інформатиці, це підпрограма, що контролює ітерації в циклі.&lt;br /&gt;
&lt;br /&gt;
Генератор є підвидом ітератора.&lt;br /&gt;
&lt;br /&gt;
Різниця між ітератором і генератором:&lt;br /&gt;
&lt;br /&gt;
Ітератор проходить по колекції по одному елементу за раз.&lt;br /&gt;
Генератор генерує елементи послідовності по одному елементу за раз.&lt;br /&gt;
Генератор може бути реалізований у вигляді наступних конструкцій потоку керування як:&lt;br /&gt;
&lt;br /&gt;
співпрограма;&lt;br /&gt;
продовження першого порядку.&lt;br /&gt;
Генератор є частковим випадком співпрограми, оскільки завжди повертає керування до того коду, який його викликав.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Приклади в різних мовах програмування''' ==&lt;br /&gt;
&lt;br /&gt;
== '''C#''' ==&lt;br /&gt;
&lt;br /&gt;
public static IEnumerable&amp;lt;int&amp;gt; GetEven(IEnumerable&amp;lt;int&amp;gt; numbers)&lt;br /&gt;
{&lt;br /&gt;
    foreach (int i in numbers)&lt;br /&gt;
        if ((i % 2) == 0)&lt;br /&gt;
            yield return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== '''F#''' ==&lt;br /&gt;
&lt;br /&gt;
seq&lt;br /&gt;
{&lt;br /&gt;
    for b in 0 .. 25 do&lt;br /&gt;
        if b &amp;lt; 15 then&lt;br /&gt;
            yield b * b&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== '''C++''' ==&lt;br /&gt;
C++11 дозволяє застосовувати foreach цикли до будь-якого класу, що надає функції begin та end. Отже, можливо написати подібний до генератора клас визначивши обидва ці методи і методи ітератора (operator!=, operator++ і operator*) в одному класі. Наприклад, можливо написати таку програму:&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    for (int i: range(10))&lt;br /&gt;
    {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
Просте втілення класа range виглядало б так:&lt;br /&gt;
&lt;br /&gt;
class range&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
    int last;&lt;br /&gt;
    int iter;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    range(int end):&lt;br /&gt;
        last(end),&lt;br /&gt;
        iter(0)&lt;br /&gt;
    {}&lt;br /&gt;
&lt;br /&gt;
    // Повертають ітератор&lt;br /&gt;
    const range&amp;amp; begin() const { return *this; }&lt;br /&gt;
    const range&amp;amp; end() const { return *this; }&lt;br /&gt;
&lt;br /&gt;
    // Функції ітератора&lt;br /&gt;
    bool operator!=(const range&amp;amp;) const { return iter &amp;lt; last; }&lt;br /&gt;
    void operator++() { ++iter; }&lt;br /&gt;
    int operator*() const { return iter; }&lt;br /&gt;
};&lt;br /&gt;
В Microsoft Visual C++ 2015 реалізовані деякі пропозиції для C++17&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;experimental/generator&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std::experimental;&lt;br /&gt;
&lt;br /&gt;
inline generator&amp;lt;int&amp;gt; values()&lt;br /&gt;
{&lt;br /&gt;
	for (int i = 0; i &amp;lt; 100; ++i)&lt;br /&gt;
	{&lt;br /&gt;
		__yield_value i*i;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
Можливо писати в стилі, який через вкладеність викликів, читатиметься знизу вверх:&lt;br /&gt;
&lt;br /&gt;
	auto seq = take(5&lt;br /&gt;
				,transform([](int x) {return x*x;}&lt;br /&gt;
				,where([](int x) {return x % 2 == 0;}&lt;br /&gt;
				,fibonacci()&lt;br /&gt;
				)));&lt;br /&gt;
&lt;br /&gt;
	for (auto i : seq)&lt;br /&gt;
		printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
&lt;br /&gt;
== '''Посилання''' ==&lt;br /&gt;
&lt;br /&gt;
yield (C# Reference)&lt;br /&gt;
Some Details on F# Computation Expressions&lt;br /&gt;
Resumable Functions (revision 4)&lt;br /&gt;
Resumable functions in C++&lt;br /&gt;
More about resumable functions in C++&lt;/div&gt;</summary>
		<author><name>111</name></author>	</entry>

	</feed>