17315

Створення DLL-бібліотеки

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота 1. Створення DLLбібліотеки Мета роботи: 1. Створення DLLбібліотеки 2. Створення рішення з кількох проектів модулів 3. Створення DLLбібліотеки як окремого рішення. 4. Вивчення структури збірки метаданих збірки В платформі Microsoft .NET реалізовано ком...

Украинкский

2013-06-30

63.99 KB

7 чел.

Лабораторна робота 1. Створення DLL-бібліотеки

Мета роботи:

1. Створення DLL-бібліотеки

2. Створення рішення з кількох проектів (модулів)

3. Створення DLL-бібліотеки як окремого рішення.

4. Вивчення структури збірки, метаданих збірки

В платформі Microsoft .NET реалізовано компонентно-орієнтований підхід до програмування.

Цей підхід до проектування і реалізації програмних систем і комплексів є розвитком об'єктно-орієнтованого і практично придатніший для розробки великих  і розподілених систем.

В компонентній моделі .Net компонентом є збірка, яка може бути у вигляді виконуваного файлу (з розширенням EXE), або файлу динамічної бібліотеки (з розширенням DLL). До складу збірки входить маніфест.

Збірка є самодостатньою одиницею для розгортання, тиражування та повторного використання.

Збірка має маніфест, який містить інформацію про збірку (метадані, які описують збірку).

Динамічна бібліотека DLL як тип компонента

Динамічна бібліотека — набір функцій, скомпонованих разом у вигляді бінарного файла, який може бути динамічно завантажений в адресний простір процесу, що використовує ці функції. Динамічне завантаження (dynamic loading) — завантаження під час виконання процесу.

Оскільки динамічні бібліотеки є двійковими файлами, можна організувати спільну роботу бібліотек, розроблених із використанням різних мов програмування і програмних засобів, що спрощує створення застосувань на основі програмних компонентів (отже, динамічне компонування лежить в основі компонентного підходу до розробки програмного забезпечення).

1. Створення DLL-бібліотеки

Запустимо Visual Studio 2008, із стартової сторінки перейдемо до створення проекту, виберемо тип проекту «Class Library».  У вікні створення DLL всі поля заповнені значеннями за замовчанням. Як правило, їх слід перевизначити, задаючи власну інформацію.

У полі Name задати ім'я DLLMyLib.

У полі Location вказується шлях до каталогу, де зберігатиметься Рішення, що містить проект.

У полі Solution вибраний елемент «Create New Solution», що створює нове Рішення. Альтернативою є елемент списку, вказуючий, що проект може бути доданий до існуючого Рішення.

У вікні Solution Name задано ім'я Рішення.

Зверніть увагу на інші установки, зроблені в цьому вікні, - включений прапорець (за замовчанням) «Create directory for solution», у верхньому віконці із списку можливих каркасів вибраний каркас Framework .Net 3.5. Задавши необхідні установки і клацнувши по кнопці «OK», отримаємо автоматично побудовану заготівку проекту DLL, відкриту в середовищі Visual Studio 2008 .

Імена класів повинні бути змістовними. Змінимо ім'я «Class1» на ім'я «MyFun».  Для цього у вікні коду проекту виділимо ім'я змінної об'єкту, потім в головному меню виберемо пункт Refactor і підпункт Rename. У вікні, що відкрилося, вкажемо нове ім'я. Тоді будуть показані всі місця, що вимагають перейменування об'єкту. В даному випадку буде лише одна очевидна заміна, але в загальному випадку замін багато, так що автоматична заміна всіх входжень корисна.

Наступний крок також продиктований правилом стилю – ім'я класу і ім'я файлу, що зберігає клас, повинні збігатися. Перейменування імені файлу робиться безпосередньо у вікні проектів Solution Explorer.

І наступний крок продиктований також важливим правилом стилю, - додавання коментаря. Для цього в рядку перед заголовком класу слід набрати три слеша (три косі риски). В результаті перед заголовком класу з'явиться заголовний коментар – тег «summary», в який і слід додати короткий, але змістовний опис призначення класу. Теги «summary», якими слід супроводжувати класи, відкриті (public) методи і поля класу відіграють три важливі ролі. Вони полегшують розробку і супровід проекту, роблячи його самодокументованим. Клієнти класу при створенні об'єктів класу отримують інтелектуальну підказку, що пояснює суть того, що можна робити з об'єктами. Спеціальний інструментарій дозволяє побудувати документацію за проектом, що включає інформацію з тегів «summary».

У нашому випадку коментар до класу MyFun може бути достатньо простим – «Обчислення математичних функцій ».

Напишемо реалізацію одного методу класу – обчислення функції Sin(x) через ряд Тейлора.

Спочатку напишемо коментарі до методу (у форматі XML). Далі напишемо реалізацію методу. Отримаємо код.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace MyLib

{

///Обчислення математичних фунцій

   public class MySin

   {

    /// <summary>

    /// Sin(x)

    /// </summary>

    /// <param name="x">кут в радіанах – перший аргумент функції  Sin</param>

    ///<param name="n">показник ступеня – другий аргумент функції  Sin</param>

    /// <returns>Повертає значення функції Sin для заданого кута</returns>

       public static double Sin(double x, int n)

       {

           double result = 0;

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

           {

               result = result + (Math.Pow((-1), i) * Math.Pow(x, (2 * i + 1))) / F(2 * i + 1);

           }

           return result;

       }

       static double F(int n)

       {

           double tmp = 1;

           for (int i = 1; i <= n; i++)

           {

               tmp = tmp * i;

           }

           return tmp;

       

       }

   }

}

Побудуємо Рішення, що містить проект, для чого в Головному меню виберемо пункт Build|Build Solution. В результаті успішної компіляції буде побудований файл з уточненням dll. Він знаходиться в папці проекту

.\bin\Debug

Оскільки побудована збірка не містить виконуваного файлу, то безпосередньо запустити наш проект на виконання не удасться. Побудуємо консольний  проект, до якого приєднаємо нашу DLL, і протестуємо, наскільки коректно працюють створені нами методи.

2. Створення консольного проекту для тестування функції з бібліотеки.

Виберемо пункт меню File|New|Project, задамо тип проекту ConsoleApplication, дамо йому ім'я – ConsoleMyLib, вкажемо, що проект додається до існуючого рішення.  В результаті у вже існуюче Рішення додасться ще один проект.

Напишемо код, який викликає функцію Sin(x,n), яку ми реалізували, стандартну функцію Sin(x), обчислює похибку і виводить результат на консоль.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace TestDLL

{

   class Program

   {

       /// <summary>

       /// Виклик бібліотечного метода Sin(x,n) з MyLib.dll

       /// </summary>

       /// <param name="args"></param>

       static void Main(string[] args)

       {

           Console.WriteLine("Введите x- угол в радианах");

           double x = double.Parse(Console.ReadLine());

           Console.WriteLine("Введите показатель степени n");

           int n = int.Parse(Console.ReadLine());

           //вызов метода вычисления sin(x) из библиотеки

           double my_sinus = MyLib.MyFun.Sin(x, n);

           //вызов метода из класса Math

           double sinus = Math.Sin(x);

           double delta = sinus - my_sinus;

           Console.WriteLine("my_sinus= {0},sin={1},delta={2}", my_sinus, sinus, delta);

           Console.ReadKey();

       }

   }

}

Побудуємо рішення і отримаємо повідомлення про помилку. Наша бібліотека не підключена  до проекту.

3. Підключення проекту бібліотеки до консольного проекту.

Для цього додамо посилання на проект з DLL MyLib. У вікні Solution Explorer наведемо покажчик миші до імені консольного проекту і з контекстного меню виберемо пункт меню «Add Reference». Виберемо вкладку «Projects». Оскільки проект MySin включений в Рішення, то він автоматично з'явиться у вікні, Якщо посилання потрібно встановити на проект, не включений в Рішення, то у вікні додавання посилань потрібно вказати шлях до проекту.

Посилання  на DLL  з'явиться в папці «References» консольного проекту. Тепер проекти зв'язані і з консольного проекту доступні функції DLL.

Перебудуємо рішення, щоб не було помилок.

4. Встановлення стартового проекту.

У вікні Solution Explorer наведемо курсор миші на заголовок консольного проекту і виберемо:

Set as StartUp Project

Після цього його можна запустити на виконання.

5. Створення Windows-проекту в тому самому рішенні.

Виберемо пункт меню File|New|Project, задамо тип проекту Windows Forms Application, дамо йому ім'я – WindowsMySin, вкажемо, що проект додається до існуючого Рішення.

На формі створимо 2 текстові поля для введення вхідних параметрів, третє і четверте – для результатів.

Додамо 2 кнопки. При натисканні кнопки "Обчислення Sin" виконується виклик функцій, "Вихід" – завершення роботи.

Код форми:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsMySin

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       private void button1_Click(object sender, EventArgs e)

       {

          double x = double.Parse(txt_x.Text);

          int n = int.Parse(txt_n.Text);

          //вызов метода вычисления sin(x) из библиотеки

          double my_sinus = MyLib.MyFun.Sin(x, n);

          //вызов метода из класса Math

          double sinus = Math.Sin(x);

          txt_y1.Text = my_sinus.ToString();

          txt_y2.Text = sinus.ToString();

       }

       private void button2_Click(object sender, EventArgs e)

       {

           this.Close();

       }

   }

}

6. Робимо проект стартовим і запускаємо на виконання. Результат:

7. Документування коду

    /// <summary>

    /// Sin(x)

    /// </summary>

    /// <param name="x">кут в радіанах – перший аргумент функції  Sin</param>

    ///<param name="n">показник ступеня – другий аргумент функції  Sin</param>

    /// <returns>Повертає значення функції Sin для заданого кута</returns>

Завдання для самостійної роботи

2. Створити DLL-бібліотеку, яка містить методи, що реалізують завдання. В кожному методі вказати XML-коментарі.

3. Створити рішення, яке включає DLL-бібліотеку, консольний проект, який тестує роботу бібліотечних методів.

3. Створити Windows-проект в тому самому рішенні, який викликає бібліотечні методи.

4. Створити DLL-бібліотеку як окреме рішення. Зв'язати бібліотеку з Windows-проектом.

варіанту

Зміст завдання

1

1. Створити масив для зберігання значень зросту студентів групи (20 чоловік). Заповнити масив за допомогою класу Random цілими числами в діапазоні від 160 до 190 включно.  Відсортувати масив і вивести на консоль його елементи.

2. Є прямокутний масив розмірністю (5x5). Визначити суму всіх елементів третього рядка  і  суму всіх елементів першого стовпчика.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

6x4-3x3+8x2-25=0

2

1. Згенерувати масив М випадкових чисел в діапазоні від 1 до 50. Обчислити  суму елементів масиву, середнє арифметичне (мат.очікування) елементів M, квадратний корінь від М, min і max елементів масиву. Результати вивести на консоль.

2.  В двовимірному масиві зберігається інформація про зарплату  18 співробітників за 12 місяців (за січень – першому стовпчику, лютий – другому, ...). Визначити загальний бюджет зарплати за рік, загальну  і середню зарплату за квітень.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

(x2-6*x)2 -2(x-3)2=81

3

1. Згенерувати масив випадкових чисел в діапазоні від 10 до 100. Обчислити добуток елементів масиву, середнє арифметичне (мат.очікування) елементів M, min і max елементів масиву. Результати вивести на консоль.

2.  В двовимірному масиві зберігається інформація про зарплату  18 співробітників за 12 місяців (за січень – першому стовпчику, лютий – другому, ...). Визначити загальну зарплату кожного співробітника за рік і середню зарплату за кожний місяць.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

(x2+2x)2-(x+1)2=55

4

1. Згенерувати масив випадкових дійсних чисел в діапазоні від 0 до 1. Відсортувати масив, знайти min і max елементи. Результати вивести на консоль.

2.  В двовимірному масиві зберігається інформація про зарплату  30 працівників фірми за 12 місяців (за січень – першому стовпчику, лютий – другому, ...). Визначити середню зарплату  фірми за кожний місяць року, а також середню зарплату за кожний місяць кожного співробітника.

3. Реалізувати консольній застосунок знаходження коренів нелінійного рівняння методом бісекції

(x2+x+1)( x2+x+1) -12=0

5

1. Згенерувати дві серії випадкових чисел, що повторюються. Кількість чисел ввести з консолі. Результати вивести на консоль.

2. В двовимірному масиві зберігається інформація про оцінки  студентів з двох дисциплін (з дисципліни ОС – в першому стовпчику, з дисципліни Мова С# - в другому). Визначити середню успішність студентів  групи і середній бал (рейтинг) кожного студента  з цих дисциплін.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

(x2-5*x+7) 2- (x-2)(x-3)=0

6

1. Згенерувати масив чисел Фібоначчі. Кількість чисел ввести з консолі. Результати вивести на консоль.

2. Фірма має  10 магазинів. Інформація про прибуток кожного магазину за кожний місяць зберігається в двовимірному масиві (першрго – в першому рядку, другого – в другому, і т.д.). Обчислити середній прибуток кожного магазину.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

x4-13x2+36=0

7

1. Створити масив для зберігання значень ваги  студентів групи (20 чоловік). Заповнити масив за допомогою класу Random цілими числами в діапазоні від 50 до 100 включно.  Відсортувати масив і вивести на консоль його елементи.

2. В двовимірному масиві зберігається інформація про оцінки  кожного із 20 студентів групи по кожній з 10 дисциплін. Перший рядок – інформація про оцінки першого студента, друга – другого і т.д. Обчислити середню успішність кожного студента.

3. Реалізувати консольній застосунок знаходження коренів нелінійного рівняння методом бісекції

2x8+x4-15=0

8

1. Створити масив з 10 елементів і заповнити його значеннями в коді. Всі його елементи:

- зменшити на 20;

- помножити на останній елемент

- збільшити на число В, яке ввести з консолі

2. В двовимірному масиві зберігається інформація про оцінки кожного із 20 студентів групи по кожній з 10 дисциплін. Перший рядок – інформація про оцінки першого студента, друга – другого і т.д. Обчислити середню успішність групи по кожній з дисциплін і в цілому успішність групи.

3. Реалізувати консольний застосунок знаходження методом бісекції коренів нелінійного рівняння

x4-13x2+36=0

9

1. Створити масив з 10 елементів і заповнити його значеннями в коді. Визначити суму всіх елементів масиву, суму квадратів всіх елементів масиву, середнє арифметичне всіх елементів масиву.

2. В двовимірному масиві 3x5 знайти суму елементів в кожному рядку і суму елементів кожного стовпчика.

3.  Реалізувати консольній застосунок знаходження коренів нелінійного рівняння методом Ньютона

x4-2x3+x-132=0

10

1. Створити масив з 10 елементів і заповнити його значеннями в коді. Всі його елементи: збільшити у 2 рази, розділити на перший елемент, зменшити на число А, яке ввести з консолі.

2. Три групи студентів, в кожній з яких 20 чоловік, в сесію здавали по 4 екзамени.  Відомості про оцінки кожної групи зберігаються в двовимірних масивах. Визначити кращу групу за середньою оцінкою

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

8x4+6x3-13x2-x+3=0

11

1. Створити масив з 8 елементів і заповнити його випадковими дійсними числами в діапазоні від 1 до 20.  Результати вивести на консоль

2. Створити прямокутний масив і заповнити його випадковими числами від 1 до 40. Знайти суму елементів другого стовпчика

 

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

x3+6x+4x2+3=0

12

1. Створити масив з 8 елементів і заповнити його випадковими дійсними числами в діапазоні від 21 до 40. Результати вивести на консоль

2. Створити прямокутний масив і заповнити його випадковими числами від 1 до 40. Знайти суму елементів третього рядка масиву, які менше 20

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

2x4-x3-9x2+13x-5=0

13

1. Створити масив і заповнити його 20-ма першими цілими числами, які діляться на 13 або на 17 і знаходяться в інтервалі, ліва границя якого рівна 300.

2. Створити прямокутний масив і заповнити його випадковими числами від 1 до 40. Знайти суму елементів першого рядка масиву і кількість його не нульових елементів

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

(x-1)3+(2x+3)3=27x3+8

14

1. Створити масив і заповнити його 30-ма простими числами (простим є число, яке ділиться на 1 і самого себе)

2. Створити прямокутний масив цілих чисел і

заповнити його випадковими числами від 1 до 100. Визначити суму елементів масиву, які більше 30 і середнє арифметичне  всіх елементів

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

x4-4x3-19x2+106x-120=0

15

1. Створити масив і заповнити його 20-ма випадковими числами в діапазоні  20 до 100. Вивести на консоль елемент за його індексом в масиві.

2. Створити прямокутний масив цілих чисел і заповнити його випадковими числами від 1 до 60. Визначити суму елементів масиву, які більше 10 і середнє арифметичне елементів першого рядка

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

x4-2x3+x-132=0

16

1. Створити масив, розмір масиву ввести з консолі, заповнити його випадковими числами від 1 до 50. Відсортувати елементи. Вивести на консоль в прямому і зворотному порядку.

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Для кожного рядка масиву обчислити суму від'ємних елементів.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

6x3-x2-20x+12=0

17

1. Створити масив, розмір масиву ввести з консолі, заповнити його випадковими дійсними числами від 1 до 50. Обчислити корінь квадратний кожного з його елементів і середнє арифметичне двох сусідніх елементів.

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Для кожного рядка масиву обчислити суму додатних і від'ємних  елементів.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

x4+1=2(1+x)4

18

1. Створити масив, в якому зберігаються  дані про кількість опадів, які випали за кожний день місяця (наприклад, в листопаді). Обчислити загальну і середню кількість опадів за  місяць.

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Для кожного стовпчика масиву обчислити суму додатніх, від'ємних елементів.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

x4+1=2(1+x)4

19

1. Створити масив, в якому зберігаються  дані про температуру  в одному місяці. Обчислити середню температуру в місяці.

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Для кожного рядка  масиву обчислити  кількість елементів, які більше 10.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння.

6x3-x2-20x+12=0

20

1. Створити масив, в якому зберігаються дані про кількість опадів, що випали за кожний день місяця (наприклад, в травні). Обчислити в якій половині місяця (першій чи другій) випало більше опадів. Обчислити в якій декаді місяця  кількість опадів була найбільшою

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Знайти  максимальний і мінімальний елементи кожного рядка.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

6x3-x2-20x+12=0


 

А также другие работы, которые могут Вас заинтересовать

25998. Философия и медицина 15.18 KB
  Чаадаев о России Петр Яковлевич [27. Высочайшим повелением Чаадаев Петр Яковлевич был объявлен сумасшедшим. Написанная Чаадаев Петр Яковлевич в ответ на обвинения в недостатке патриотизма Апология сумасшедшего 1837 где Чаадаев Петр Яковлевич говоря о России утверждал что мы призваны решить большую часть проблем социального порядка.227 при жизни Чаадаев Петр Яковлевич Напечатана не была.
25999. Философские традиции Древней Индии. Веды 30.37 KB
  Содержанием философии в Упанишадах становится обсуждение таких фундаментальных проблем как место и назначение человека в системе окружающего бытия природа внешнего мира и человека характер его жизни и психики границы и возможности его познавательных способностей нормы его поведения и т. Не удивительно поэтому что при таком отношении господствующей в Упанишадах религиозноидеалистической философии к оппозиционным ей учениям последние получили здесь крайне скупое освещение: чаще всего они представлены лишь в виде простого упоминания без...
26000. Буддизм: религия и философия 19.58 KB
  Основатель буддизма индийский принц Сиддхартха Гаутама получивший впоследствии имя Будды что значит пробуждённый просветлённый а также ШакьяМуни что значит мудрец из рода Шакьи. Вероучение и обрядность раннего Буддизма изложены в Трип Итаке €œтройной корзине€ своде произведений основанных на откровениях Будды. Душа распадается по учению Буддизма на отдельные элементы сканды но чтобы в новом рождении оказалась воплотившейся та же личность необходимо чтобы сканды соединились тем образом как они были соединены в прежнем...
26001. Особенности древнекитайской философии. Конфуцианство 34.09 KB
  Философия Бакунина Михаил Александрович [1830. В эти годы Бакунин Михаил Александрович последователь философии И. В Берлинском университете Бакунин Михаил Александрович слушал лекции К. В Цюрихе Бакунин Михаил Александрович познакомился с В.
26002. Натурфилософия Древней Греции. Сущность материализма 29.47 KB
  Жан Жак Руссо .В любом из произведений Руссо непрестанно звучат четыре лейтмотива: культ личности чувствительность культ природы и ощущение социальной несправедливости. Эти Руссо замечает что жизнь человека в этом лучшем из миров не соответствует его подлинной сущности что человек не таков каким он должен быть согласно своей истинной природе но и представляется не тем что он есть на самом деле люди не решаются показаться тем что они есть стало выгоднее притворяться не таким каков ты есть на самом деле. Чем больше накапливаем...
26003. СМО с бесконечной очередью для пуассоновских потоков. Граф, система уравнений, расчетные соотношения 23.44 KB
  СМО с бесконечной очередью для пуассоновских потоков. Из СМО с очередью конечной длины можно получить СМО с неограниченной очередью если устремить. Рассмотрим частный случай одноканальной системы с бесконечной очередью
26004. СМО с бесконечной очередью для произвольных потоков. Граф, система уравнений, расчетные соотношения 30.06 KB
  СМО с бесконечной очередью для произвольных потоков. Рассмотрим случай который можно интерпретировать либо как наличие немедленного обслуживающего прибора интенсивность обслуживания которого растет линейно с ростом числа ожидающих требований либо как систему в которой всегда найдется новый обслуживающий прибор доступный каждому вновь поступающему требованию. СМО типа М М ∞ с бесконечным числом обслуживающих приборов Переходя к равенству: Получаем: Можно выписать искомые решения для pk и N: Условие эргодичности в данном случае также...
26005. СМО с бесконечной очередью и частичной взаимопомощью для пуассоновских потоков. Граф, система уравнений, расчетные соотношения 60.64 KB
  СМО типа М М m Переходя к решению для pk в соответствии с равенством: Видим что это решение должно быть разбито на две части так как зависимость k от k также имеет две части. Соответственно при k≤m: Аналогично при k≥m: Объединяя результаты получим: Где: Теперь с помощью: Можно выписать решение для p0: И следовательно: Вероятность того что поступающее требование окажется в очереди задается равенством: Таким образом:.
26006. СМО с бесконечной очередью и частичной взаимопомощью для произвольных потоков. Граф, система уравнений, расчетные соотношения 35.06 KB
  Эта система в строгом смысле является саморегулируемой. Подходящей моделью для описания такой системы является процесс размножения и гибели при следующем выборе параметров: Система является эргодической.