Библиотека Рефераты Курсовые Дипломы Поиск
Библиотека Рефераты Курсовые Дипломы Поиск
сделать стартовой добавить в избранное
Кефирный гриб на сайте www.za4et.net.ru

Компьютеры, Программирование Компьютеры, Программирование     Программное обеспечение Программное обеспечение

Создание эффективной реализации сортированного списка с использованием generics

Карабин, 6x60 мм.
Размеры: 6x60 мм. Материал: металл. Упаковка: блистер.
44 руб
Раздел: Карабины для ошейников и поводков
Ручка "Шприц", желтая.
Необычная ручка в виде шприца. Состоит из пластикового корпуса с нанесением мерной шкалы. Внутри находится жидкость желтого цвета,
31 руб
Раздел: Оригинальные ручки
Ночник-проектор "Звездное небо и планеты", фиолетовый.
Оригинальный светильник - ночник - проектор. Корпус поворачивается от руки. Источник света: 1) Лампочка (от карманных фонариков) 2) Три
330 руб
Раздел: Ночники

Сергей Смирнов (Sergi io1) Так случилось, что я стал программистом 1С. Все прекрасно в этой среде, за исключением скорости. Эту проблему можно решить только одним способом: прямым доступом к файлам и обработкой результатов на компилируемом языке в памяти. Так, для группирования данных нужны алгоритмы поиска и вставки. И мое сознание, отягощенное бухгалтерским учетом, не нашло ничего лучшего, чем использовать аналог Lis (Sor edLis ), представляющий собой динамический массив со свойствами «емкость» и «количество элементов». Упорядоченность в этом массиве поддерживается с помощью компараторов, а при поиске используется алгоритм половинного деления с поиском нужной позиции i по ключу с условием (I ems&l ;Key). Если такого ключа нет, то все данные с позиции i переносятся на одну позицию в большую сторону. При этом используются процессорные команды MOVSW и MOVSB, которые выполняются очень быстро. При полном заполнении массива его размер увеличивается либо за счет свободных адресов, следующих за конечным адресом в массиве, либо с помощью выделения нового массива большей емкости с копированием данных из оригинала. Но время шло, и объем группировок вышел за 10000 записей. Мой AMD K6 200 (мощный по тем временам компьютер) начал работать слишком меленно. И не удивительно – количество сдвигаемых элементов в среднем стало равно 2/4, то есть 108. И вот как-то, после очередного обучения бухгалтеров бухгалтерии, пришла мысль. Зачем держать один большой массив, если можно его разбить на множество маленьких? Сказано – сделано. В течение двух минут я создал двухуровневый массив. Первый (верхний) уровень – это массив, элементами которого являются ссылки на массивы нижнего уровня. Второй из уровней (нижний) по сути, состоит из простых динамических массивов. Под простыми понимается то, что память под них выделяется заранее и впоследствии не перезанимается. Фактически этот массив представляет собой структуру, хранящую счетчик элементов и массив пар «ключ-значение». В дальнейшем я буду называть эти динамические массивы листовыми страницами (LeafPage). PLeafPage=^ LeafPage;   LeafPage = Record   // количество задействованных элементов в массиве KeyI ems   Cou :I eger;   // массив ссылок на пары «ключ-значение»   KeyI ems:Array of objec ; E d; LeafPageArray = Array of PleafPage; LeafPageArray : LeafPageArray; Поиск проходил в 2 этапа. Сначала производится поиск массива, в котором может находиться искомый ключ. Для этого с искомым значением сравниваются значение ключей нулевых элементов массивов KeyI ems с таким условием, чтобы значение ключа нулевого элемента массива было меньше или равнялось искомому, а значение нулевого элемента следующего массива превышало искомое. Это можно выразить так: (LeafPageArray.KeyI ems > Key) Алгоритм поиска на нижнем уровне аналогичен поиску в одномерном массиве. При полном заполнении KeyI ems выделяется новый PLeafIPage, в который копируется половина данных. Ссылка на новый массив вставляется в массив LeafPageArray в позицию на 1 больше текущей. При этом количество кода было менее 100 строк. Такой подход позволил резко сократить объем копируемой памяти – так как количество копируемых элементов никогда не превышает 64.

Тем самым удалось избежать замедления работы массива при его росте. ПРИМЕЧАНИЕ И не удивительно, т.к. количество переносимых элементов стало равно ( / 64) 642 / 4 ( / 64)2 / 4 = k / 4 ( / k)2 / 4. Здесь к – емкость страницы, но учитывая, что страницы заполняются не полностью, смело можно составить приблизительную формулу расчета общего количества операций копирования: k / 2 ( / k)2 / 2, оптимальное значение К будет K( ) = (2 )-3, и соответственно, 643 – вполне приемлемый размер страницы для хранения данных в этом классе. Отношение количества копируемых элементов в одномерном массиве к двухуровневому составило / (k / k2) / 2. В любом случае это отношение очень велико. Единственный минус этого алгоритма в замедлении поиска, так как доступ к ключу производится через дополнительную ссылку. Для исправления этого недостатка достаточно включить нулевой элемент KeyI ems в структуру родительского массива. odeI em = Record   Key : objec ;   LeafPage : PLeafPage; E d; odeArray= Array of  odeI em; ПРИМЕЧАНИЕ Таким образом, при поиске нужной листовой страницы нет необходимости обращаться к ее содержимому: ( odeArray.Key > Key) Таким образом можно убить сразу двух зайцев – сохранить скорость поиска и резко увеличить скорость вставки. B -деревья Когда объем группировок начал подходить к миллионам записей, этот алгоритм начал «тормозить» из-за увеличения размера массива верхнего уровня. Проблемы с копированием больших объемов данных вернулись. Чтобы избавиться от этой проблемы, можно применить тот же самый механизм, и разбить массив верхнего уровня на несколько подмассивов. Это приведет к созданию трехуровневого массива, а когда-нибудь, возможно, и четырехуровневого. Так что в принципе есть резон сразу создавать универсальный алгоритм, автоматически увеличивающий количество уровней и строящий дерево. Структура этого дерева включает страницы двух типов – узловые, содержащие массивы ссылок на нижележащие страницы, и листовые, содержащие отсортированные списки данных. Такое дерево называется B -деревом. Однако разбирать подробно реализацию B -деревьев в этой статье я не буду. Реализация двухуровневого массива На практике в большинстве случаев достаточно двухуровневых массивов. К тому же, их намного проще описывать. Они используют те же подходы, что и в Б -деревьях. Так что рассмотрим реализацию именно двухуровневых массивов. Вначале нужно определить структуру, которая будет хранить пары ключ значение (для листовых страниц) и ключ ссылка на страницу (для узловых страниц). В принципе, ссылку можно рассматривать как частный случай данных. Так что с помощью ge eric-ов можно описать единую структуру. Вот эта структура: i er al s ruc KeyValuePair&l ;K, V> {   i er al K Key;   i er al V Value;   public KeyValuePair(K key, V value)   {     Key = key;     Value = value;   } } Определим класс PageBase, с единственным полем Cou . i er al class PageBase {     public i Cou ; } Описание страницы, находящейся на нулевом уровне: i er al class LeafPage&l ;K, V> : PageBase {   public KeyValuePair&l ;K, V>[] PageI ems; // массив элементов   public LeafPage&l ;K, V> PriorPage; // ссылка на предыдущую страницу   public LeafPage&l ;K, V> ex Page; // ссылка на следующую страницу   public LeafPage()   {     Cou = 0;     PageI ems = ew KeyValuePair&l ;K, V>;   } } PriorPage, ex Page нужны для навигации по дереву.

Основную функциональность двухуровневого массива реализует класс woLevelSor edDic io ary: usi g Ge eric = Sys em.Collec io s.Ge eric;   public class woLevelSor edDic io ary&l ;K,V>: Ge eric.IDic io ary&l ;K,V>   {     i er al LeafPage&l ;K,V> Curre LeafPage; // Текущая страница с данными     i er al s ruc odeI em  // Структура элементов верхнего уровня     {       i er al K Key;       i er al LeafPage&l ;K,V> ChildPage;     }     i er al odeI em[] odeArray; // Массив элементов 2 уровня     i er al i pageCou ; // Количество страниц 1 уровня     i er al i curre PageI dex; // Текущий индекс элемента в массиве 2 уровня     i er al i curre Eleme I dex;  //  Текущий индекс в Curre LeafPage     i er al Ge eric.IKeyComparer&l ;K> comparer; // Пользовательский компаратор     i er al i cou ;  // Количество элементов в объекте     bool selec ed;       // Выбран ли элемент     i er al i versio =1; // Нужен для перечислителей     public Comp)     {       his. comparer = Comp;       Curre LeafPage = ew LeafPage&l ;K,V>(); // Выделяем страницу 1 уровня       pageCou = 1;     } Двухуровневый массив позволяет осуществлять навигацию по находящимся в нем элементам. При этом возникает понятие текущего элемента, у которого можно считывать или устанавливать значение, и читать значение ключа. Для позиционирования на запись с некоторым ключом используется функция aviga eKey. Алгоритм работы этой функции таков. Поскольку информация в массиве всегда упорядочена, то поиск можно осуществлять с помощью алгоритма бинарного поиска (то есть половинного деления). Единственная проблема, не позволяющая использовать классический алгоритм напрямую – это то, что, что массив состоит из двух уровней. Поэтому алгоритм поиска разделяется на два этапа. На первом этапе проверяется, есть ли массив верхнего уровня. Если есть, то в нем ищется страница, на которой может находиться искомый элемент. Если массива верхнего уровня нет, в качестве страницы, на которой будет производиться дальнейший поиск, используется единственная существующая страница. На втором этапе производится классический бинарный поиск по ключу в сортированном массиве. public bool aviga eKey(K key) {   // Устанавливаем индекс элемента в 0.   curre Eleme I dex = 0;   // Если есть второй уровень.   if ( pageCou > 1)   {     // Перебираем грани     i hi = pageCou - 1;     i lo = 0;     while (lo &l ;=  hi)     {       i i = (lo   hi) >> 1;       i resul = comparer.Compare( odeArray.Key, key);       if (resul &l ; 0)         lo = i 1;       else       {         hi = i - 1;         if (resul == 0)         {           // Ключ найден на 2 уровне. Устанавливаем текущую           // страницу Curre LeafPage.           curre PageI dex = i;           Curre LeafPage = odeArray.ChildPage;           selec ed = rue;           re ur rue;         }       }     }     // Ключ не найден на 2 уровне.     // Проверяем на возможность того, что искомый ключ –     // наименьший из имеющихся в объекте.     if (hi &l ; 0)     {       // Данный ключ меньше наименьшего хранимого ключа.       // Встаем на самый первый элемент двухуровневого массива       curre PageI dex = 0;       Curre LeafPage = odeArray.C

Стандаргной боевой задачей «Хокая» является патрулирование в течение 3,5 часов на удалении 110- 180 км от авианосца. Обзорная PЛC может обнаруживать и сопровождать более 200 целей на расстоянии до 370 км. Операторы самолета способны выполнять порядка 30 перехватов одновременно, но обычно они работают только с двумя истребителями F-14. Первый полет истребителя F/A-18E «Супер Хорнет». 29 ноября 1995 года F/A-18F – двухместная версия истребителя «Супер Хорнет» В послевоенные годы выделился отдельный класс противолодочных авианосцев, оснащенных самолетами ПЛО S-2 «Трэкер». Первый полет опытного самолета S2F-1 состоялся в 1952 г.. в 1953 г. он был принят на вооружение ВМС США. Серийное производство продолжалось до конца 1965 г. Всего построено около 800 машин. Авианосцы ПЛО оказались слишком дорогостоящими и малоэффективными, к 1973 г. они были исключены из списков флота. По мнению министерства обороны США, недостаточная эффективность авианосцев ПЛО объяснялась использованием устаревших самолетов. Военные поддержали программу создания нового палубного самолета ПЛО VSX

1. Создание эффективных правовых инструментов надлежащей охраны фонограмм и музыкальных произведений

2. Реализация связанных списков на базе массивов

3. Пути повышения эффективности реализации сельскохозяйственной продукции

4. Создание эскизов швейных изделий с использованием графического редактора Paint

5. Процесс создания и реализации проекта структуры менеджмента на предприятии

6. Пути повышения эффективности реализации муниципальной политики в сфере физической культуры и спорта
7. Оценка эффективности почтового отделения через использование финансовых и нефинансовых показателей
8. Создание проекта с использованием программы GeniDAQ и контроллеров серии АДАМ-4000

9. Использование гиперссылок при создании Веб-страницы

10. Топливо. Его виды и характеристика. Области эффективного использования. Топливный баланс страны

11. Эффективность использования нестандартных спортивных сооружений в ВУЗах, школах

12. Анализ состояния и эффективности использования основных средств предприятия (на примере ОАО "Газпром-Кран")

13. Использование рекламы в INTERNET и её эффективность

14. Экономическая эффективность создания совместного предприятия, специализированного на выпуске дверных блоков

15. Создание предпринимательской фирмы и рассмотрение эффективности ее работы на примере печатного цеха

16. Анализ имущества предприятия и проблемы его эффективного использования

Фигурка "Zabivaka Знаменосец", 9 см.
Фигурка "Zabivaka Знаменосец" в подарочной коробке (64 наклейки флагов 32-х стран-участниц в комплекте). Этот обаятельный,
389 руб
Раздел: Игрушки, фигурки
Набор цветной самоклеющейся бумаги №6, А4, 20 цветов, 20 листов.
Набор цветной самоклеющейся бумаги для детского творчества. Обычные цвета, металлик, флюоресцентные.
310 руб
Раздел: Самоклеящаяся, флуоресцентная, перламутровая и прочие
Бумага "Color copy", белая, А4, 350 гр/м2, 125 листов.
Формат: А4. Белизна: 99%. Плотность: 350 гр/м2. Класс А++. 125 листов в пачке.
708 руб
Раздел: Формата А4 и меньше

17. Анализ эффективности использования основоного капитала на Молодечненском заводе металлоконструкций

18. Иностранные инвестиции в РФ: структура, направления и эффективность использования

19. Развитие методов эффективного использования каналов связи

20. Тайм менеджмент: способы эффективного использования рабочего времени

21. Эффективность использования капиталов предприятия (на примере автотранспортного предприятия)

22. Повышение эффективности использования вычислительной техники в процессе обучения
23. Повышение эффективности подготовки борцов греко-римского стиля на основе использования технических средств
24. Вопросы оценки эффективности производства и реализации продукции энергетического машиностроения

25. Принципы реализации эко-эффективности

26. Сравнительная оценка эффективности использования финансового лизинга и банковского кредита при приобретении основных фондов

27. Эффективность использования капитала предприятия

28. Анализ производства и эффективности использования кормов

29. Пути повышения эффективности использования оборотных средств торгового предприятия

30. Эффективность использования оборотных средств предприятия

31. Анализ состояния и эффективности использования основных средств на примере ООО шахта Добропольская

32. Основные средства производства и эффективность их использования

Расчёска лазерная "Магия роста".
Регулярное использование расчески «Магия роста» позволит Вам восстановить нормальное кровообращение кожи головы, что благотворно повлияет
1091 руб
Раздел: Зеркала, расчески, заколки
Лестница-стремянка, 3 ступени, стальная.
Нескользящие пластиковые коврики. Размер ступеньки: 30x20 см. Материал: сталь. Высота на уровне верхней ступени: 67,5 см. Количество ступеней: 3.
1288 руб
Раздел: Лестницы
Комплект боковых ограждений для кровати Polini Simple/Basic, белый.
Комплект ограждений подходит для кроваток 140х70 см коллекций Polini Simple и Basic. Они могут крепиться как с одной стороны кровати, так
910 руб
Раздел: Аксессуары для кроваток

33. Земельная реформа в России и эффективность использования земельных угодий ОПХ Белоусовское

34. Учет и анализ состояния и эффективности использования основных средств в современных условиях

35. Использование CGI при создании интерактивных интерфейсов

36. Реализация списка

37. Использование принципа финансовой пирамиды для организации эффективного предприятия

38. Некоторые психолого-педагогические особенности создания и использования компьютерных обучающих программ в вузе
39. Состав и движение рабочей силы и эффективности использования рабочего времени. Технико-экономический анализ
40. Анализ эффективности использования земельных ресурсов

41. Анализ эффективности производства и реализации молока в СПК "Новый путь" Пильнинского района Нижегородской области

42. Государственное землеустройство, как система мероприятий по организации рационального и эффективного использования земель

43. Земельные ресурсы и эффективность их использования (на примере СПК Агрофирма "Родина")

44. Пути повышения экономической эффективности использования земельных угодий на примере ОАО совхоз "Червишевский" Тюменского района

45. Разработка системы мероприятий по рациональному использованию пахотных земель и создание высокопродуктивных устойчивых агросистем в хозяйстве "Хайтинское", Усольского района

46. Урожайность районированных сортов яровой пшеницы в зависимости от погодных условий и эффективность использования различной уборочной техники в производственных условиях

47. Экономическая эффективность использования земельных угодий в ООО "Агрофирма"

48. Экономическая эффективность использования земли и резервы ее повышения

Ведро Vileda "SuperMоcio" с отжимом ленточных швабр, 12 л.
Уникальная запатентованная система отжима подходит для любой ленточной швабры (не только бренда Vileda (ВИЛЕДА)). Прочное, устойчивое
679 руб
Раздел: С отжимом
Расчёска лазерная "Магия роста".
Регулярное использование расчески «Магия роста» позволит Вам восстановить нормальное кровообращение кожи головы, что благотворно повлияет
1091 руб
Раздел: Зеркала, расчески, заколки
Лестница-стремянка, 3 ступени, стальная.
Нескользящие пластиковые коврики. Размер ступеньки: 30x20 см. Материал: сталь. Высота на уровне верхней ступени: 67,5 см. Количество ступеней: 3.
1288 руб
Раздел: Лестницы

49. Эффективность использования основных фондов государственного унитарного сельскохозяйственного предприятия "Элитное"

50. Обоснование экономической эффективности производства и использования биогумуса в садоводстве (на примере ЗАО АФ "Сальский сад" Сальского района Ростовской области)

51. Исследование учета затрат машинно-тракторного парка и анализ эффективности его использования в организации АПК

52. Оборотные средства предприятия и рост эффективности их использования

53. Организация финансов предприятия дорожного хозяйства, выявление резервов и путей повышения эффективности использования финансовых ресурсов

54. Учет денежных средств в кассе и на счетах предприятия, анализ наличия и эффективности их использования
55. Учет основных средств и анализ эффективности их использования
56. Учет основных средств и анализ эффективности их использования

57. Учет собственного капитала и анализ эффективности его использования

58. Анализ эффективности использования материально-производственных запасов

59. Анализ эффективности использования основных средств организации на примере ООО "Свет–Сервис"

60. Аудит и анализ основных средств и эффективность их использования

61. Эффективность создания системы государственого и муниципального управления

62. Исследование возможностей проектирования, создания и использования компьютерного тестирования в системе дистанционного обучения Moodle

63. Создание средств наглядности с использованием программной среды Delphi и Microsoft Movie Maker

64. Изучение эффективности использования систематического каталога

Матрас в приставную колыбельку Bambola "Mini soft-8" (45x90x8 см).
Состав: - латексированная кокосовая плита; - микрофибра - съемный чехол. Размеры: 45x90x8 см.
883 руб
Раздел: Матрацы до 120 см
Контейнер герметичный глубокий, 5000 мл.
Контейнер герметичный глубокий. Материал: пластик. Объем: 5000 мл. Размеры: 28х20х15 см.
314 руб
Раздел: Штучно
Настольная игра "Гномы-вредители. Делюкс".
На первый взгляд, все гномы похожи: маленькие, бородатые, золото любят, упорно стучат своими кирками в подземных туннелях в поисках
1250 руб
Раздел: Карточные игры

65. Выручка от реализации продукции, работ и услуг как основной источник денежных средств предприятий, особенности ее формирования и использования в рыночных условиях хозяйствования (на материалах ТКУП "Столичный")

66. Оценка эффективности создания сети аптек "Здоровье"

67. Технология создания бренда ресторана национальной кухни: опыт реализации успешного проекта

68. Оценка экономической эффективности использования информационных технологий в медицине

69. Анализ эффективности использования трудовых ресурсов

70. Использование опыта участия в автогонках в управлении временем реализации проекта
71. Материальное стимулирование как метод управления: анализ и пути повышения эффективности его использования в организации (на материалах предприятия КТСУП "Отель")
72. Персонал предприятия и пути увеличения эффективности его использования

73. Реализация процессного подхода при создании системы менеджмента качества

74. Эффективное использование трудовых ресурсов – залог выхода из социально-экономического кризиса

75. Эффективность использования трудового потенциала предприятия

76. Эффективность использования трудовых ресурсов в Ставропольском крае

77. Экономическая сущность и эффективные пути использования франчайзинга в современной России

78. Особенности использования песенного и поэтического материала (стихов и рифмовок) как средства повышения эффективности урока английского языка

79. Роль нанотехнологии в создании более эффективных преобразователей энергии

80. Основные фонды автотранспортного предприятия и повышение эффективности их использования

Фоторамка "Poster gold" (30х40 см).
Фоторамка для фотографий размером: 30х40 см. Может располагаться как вертикально, так и горизонтально, на подставке. Есть настенные
321 руб
Раздел: Размер 30x40
Звуковой плакат "Домашние животные".
Представляем Вашему вниманию уникальную новинку — развивающие звуковые плакаты, которые содержат стихотворения, занимательные и
576 руб
Раздел: Электронные и звуковые плакаты
Чайник со свистком "Mayer & Boch", 3,5 литра, эмалированный (арт. 23854).
Этот чайник со свистком изготовлен из высококачественной нержавеющей стали. Корпус чайника имеет элегантное покрытие с цветочным рисунком.
1624 руб
Раздел: Чайники эмалированные

81. Повышение эффективности использования оборотных средств ДЭУ №66 РУП "Минскавтодор-Центр"

82. Цифровая защита фидеров контактной сети постоянного тока ЦЗАФ-3,3 кВ, эффективность использования, выбор уставок в границах Тайгинской дистанции электроснабжения

83. Использование культурно-исторических ресурсов при создании тура для туристов из КНР

84. Анализ имущественного положения предприятия и оценка эффективности использования его активов

85. Анализ эффективности использования основных фондов

86. Способы сравнения в анализе хозяйственной деятельности. Эффективность использования капитала предприятия
87. Финансовые ресурсы предприятия их формирование и эффективное использование
88. Экономическая эффективность разработки и реализации инвестиционного проекта

89. Анализ использования фонда заработной платы и мероприятия по его эффективному использованию

90. Анализ обеспеченности предприятия основными средствами, материальными ресурсами; эффективность их использования

91. Анализ развития малого бизнеса через эффективное использование оборотных средств

92. Анализ эффективности использования имущественного комплекса

93. Анализ эффективности использования материальных ресурсов

94. Анализ эффективности использования основного капитала

95. Анализ эффективности использования основных производственных фондов на предприятии и поиск направлений улучшения их использования на примере ПУВКХ г. Енакиево

96. Анализ эффективности использования основных средств предприятия на примере ОАО "Гомельдрев" ДОК и разработка основных направлений по повышению эффективности их использования

Конструктор электронный ЗНАТОК "Первые шаги в электронике. Набор В" (15 схем).
Вам будет предложено собрать свой первый светодиодный фонарик, собрать звуковые схемы, познакомится с работой транзистора — всего 15
892 руб
Раздел: Инженерные, научно-технические
Глобус ландшафтный, диаметр 320 мм.
Глобус для занятий по географии на подставке. Компактен и нагляден. Дает представление о строении поверхности Земли. На глобусе нанесено
880 руб
Раздел: Глобусы
Мусоровоз.
Мусоровоз выглядит совсем как настоящий. В наборе имеется мусорный бак, который автомобиль может загрузить в контейнер. Сверху открывается
985 руб
Раздел: Прочее

97. Анализ эффективности использования ресурсов ОАО "Яранский КМП"

98. Анализ эффективности использования трудовых ресурсов

99. Анализ эффективности использования фонда оплаты труда на предприятии


Поиск Рефератов на сайте za4eti.ru Вы студент, и у Вас нет времени на выполнение письменных работ (рефератов, курсовых и дипломов)? Мы сможем Вам в этом помочь. Возможно, Вам подойдет что-то из ПЕРЕЧНЯ ПРЕДМЕТОВ И ДИСЦИПЛИН, ПО КОТОРЫМ ВЫПОЛНЯЮТСЯ РЕФЕРАТЫ, КУРСОВЫЕ И ДИПЛОМНЫЕ РАБОТЫ. 
Вы можете поискать нужную Вам работу в КОЛЛЕКЦИИ ГОТОВЫХ РЕФЕРАТОВ, КУРСОВЫХ И ДИПЛОМНЫХ РАБОТ, выполненных преподавателями московских ВУЗов за период более чем 10-летней работы. Эти работы Вы можете бесплатно СКАЧАТЬ.