Лекция 2: Информация, ее представление и измерение 5 страница

 

12. Лекция: Формальные языки и грамматики: версия для печати и PDA Рассматриваются основные сведения о формальных и естественных языках, грамматиках, типах грамматик, грамматическом анализе, переводе с языков, типах трансляторов.
  Математический язык как форма выражения научного знания использовался еще в древности при решении практических задач. Большую роль в развитии математики как языка – метаязыка наук – сыграла математическая логика, аксиоматизировавшая ряд теории, изучившая их логику, внутреннюю структуру. Развитие информатики, особенно таких ее разделов, как теория формальных языков, грамматик, структур, алгоритмических языков и методов трансляции баз данных и знаний и других приводит к развитию, углублению, формализации и структурированию предметов наук. В свою очередь, появилась возможность моделирования языковых структур, формализации, структурирования ряда языков общения, анализа и построения различного рода текстов и словарей, в том числе – их автоматического построения. Язык, определенный с помощью алфавита (над алфавитом) X = {x1, x2,..., xn}, – это некоторая устная, звуковая, письменная или иная форма выражения слов над X, включая синтаксис – правила образования структур из слов и словосочетаний, семантику – правила проверки правильности, смысловой однозначности и совместимости синтаксических конструкций языка, состоящих из лексем. Для устных языков (общения) нужна и фонетика – правила произношения составных частей предложения, то есть фонем. Язык как коммуникативный аппарат должен иметь определяющие конструкции слов над данным алфавитом, грамматические правила образования предложений из слов и соотнесения этих предложений тем явлениям и процессам, которые они описывают, или синтаксическим и семантическим правилам. Пример. В частности, семантика изучает связи вида: "знак, структура знаков объект"; синтаксис – связи вида: "знак, структура знаков объект". Основные функции любого языка – отображение, передача, сжатие, хранение, актуализация информации с помощью сообщений на этом языке. Пример. Запишем более кратко, сжато, точно (формализованно) факт "целое число x делится на целое число y без остатка". На математическом языке это будет иметь вид "Число x кратно числу y". Факт, что числа x, y – целые, уже можно специально, как выше, не оговаривать, так как математическое понятие кратности это уже предполагает (аксиома). Запишем еще более кратко и формализованно на алгоритмическом языке Паскаль: "x mod y = 0". Здесь уже условие кратности область изменения аргументов не нужно оговаривать – они декларированы в языке Паскаль (в описаниях типов и операции mod). Языки бывают естественного происхождения (например языки общения) и искусственного происхождения или формальные языки, разрабатываемые для общения человека с автоматом (компьютером) либо для описания и получения знаний. Пусть X – некоторый алфавит, X = {x1, x2,..., xn}, а S(X) – множество слов над алфавитом X, тогда S(X) – бесконечное и счетное множество. Формальный язык L(X) – произвольное подмножество S(X). Формальный язык использует естественный язык как лексическую форму оформления входящих в него абстрактных объектов, как метаязык или язык для описания синтаксиса другого языка. Описываемый метаязыком язык в этом случае называется объектным языком (по отношению к метаязыку). Формальная грамматика G состоит из совокупностей: T = {t1, t2,..., tk} – множество терминальных символов языка или множество основных понятий языка; N = {n1, n2,..., nm} – множество нетерминальных символов языка или вспомогательных понятий, обозначений конкретных классов слов, например, глаголов или предлогов, причем во множестве N содержится n0 – начальный символ из N; P = {p1, p2,..., pq} – система подстановок (продукции) слов вида или замен всех слов s1(x) в рассматриваемой системе соотношений на слова вида s2(x). Язык (множество слов S(X)) задается грамматикой G(S) – структурой правил, которые позволяют порождать все слова и только их. Грамматический анализ – процесс редукции к нетерминальному символу или слову. Множество – словарь грамматики G. Правила вывода – это непустое множество правил вида " – отношение вида "левое (можно) заменить на правое". Слово называется выводом g из f, если fi+1 выводимо из fi для всех . Признаком завершения процесса (последовательности) вывода является отсутствие слова, выводимого из g. Пример. Опишем элементы естественного, например, русского языка в терминах формальных грамматик. Алфавит языка X = {А, а, Б, б,..., Я, я,.,,,:,;,.,!,?, ", ", (,)}, T={<корни>, <приставки> и т.д.}, N = {предложение, подлежащее, сказуемое, глагол, местоимение и т.д.}, n0 = "предложение". Например, пусть Т = {арбуз, банан, красный, греет, загорает, бок}, N = {сказуемое, подлежащее, определение, дополнение, группа подлежащего, группа сказуемого}, n0 = {предложение}, P = {p1: предложение (группа подлежащего), (группа сказуемого), p2: группа подлежащего (определение)(подлежащее), p3: группа сказуемого (сказуемое) (дополнение), p4: определение "красный", p5: подлежащее "арбуз", p6: подлежащее "банан", p7: сказуемое "греет", p8: дополнение "банан", p9: дополнение "бок"}. Тогда справедливы следующие выводы: предложение (группа подлежащего)(группа сказуемого) (определение) (подлежащее) (группа сказуемого) (определение) (подлежащее) (сказуемое) (дополнение) "красный" (подлежащее) (сказуемое)(дополнение) "красный арбуз" (сказуемое) (дополнение) "красный арбуз греет" (дополнение) "красный арбуз греет бок". Таким образом, мы по формальным правилам построили предложение естественного языка. Различают четыре основных типа формальных грамматик. Грамматика типа 0 (G–0) – грамматика, в которой нет ограничений на правила вывода (то есть в правиле вывода , f и g – любые). Грамматика типа 1 (G–1) – грамматика, в которой содержатся правила , где n – нетерминальный символ , f1, f2, w – цепочки из словаря W. Грамматика типа 2 (G–2) – грамматика, в которой допустимы лишь правила вида . Грамматика типа 3 (G–3) имеет правила вида . Грамматики типа G–0 называются свободными, типа G–1 – контекстно-зависимыми, типа G–2 – контекстно-свободными, типа G–3 – регулярными или автоматными. Выражение, записанное на метаязыке с помощью конечного (счетного) числа операций и операндов, называется регулярным выражением. В формальных грамматиках рассматриваются три основные проблемы: 1. проблема вхождения – построить алгоритм, который для каждого задаваемого слова выясняет, принадлежит ли оно языку, допускаемому данной грамматикой; 2. проблема анализа – построить алгоритм, который для каждого слова, допускаемого данной грамматикой, строит вывод этого слова; 3. проблема оценки сложности алгоритма вывода (вычислений). Если первые две задачи – более "грамматического" характера, то третья задача – более "алгоритмического" характера. С появлением компьютеров повысились требования к точности и структурированности алгоритма. Для этих целей разрабатываются алгоритмические языки. Это формальный язык, формализованный язык, так как он включает в себя и математическую символику, например, числа, знаки операций, переменные, выражения и др. Алгоритмический язык – средство записи алгоритмов для исполнения, изучения логики алгоритма. Основное отличие алгоритмического языка от языка программирования (хотя их часто отождествляют) состоит в том, что последний предназначен для записи и исполнения алгоритмов в виде, понятном и исполнимом ЭВМ. Основные атрибуты языка алгоритмического (программирования): 1. константы – постоянные величины (числовые, символьные, логические); 2. символы – знаки, имеющие различные коды при переводе; 3. идентификаторы – имена, именования различных объектов алгоритма; 4. переменные – для именования изменяемых величин, параметров; 5. метки – именования различных частей, участков алгоритмов; 6. процедуры – функционально завершенные именованные части алгоритма; 7. описания – соглашения о типе, характере, структуре используемых данных и стандартизации представления (описания) данных; 8. комментарии – пояснения к различным участкам алгоритма; 9. операторы – команды преобразования используемых, получаемых данных или изменения порядка их выполнения; 10. выражения – записи, образуемые из постоянных, переменных и знаков операций и являющиеся источниками значений; сюда отнесем и функции стандартные (встроенные), с которыми можно оперировать, как и с переменными, в соответствии с их атрибутами. Любые математические выражения записываются на алгоритмических языках по правилам не только математики, но и этого языка. Пример. На алгоритмическом языке Паскаль математическое выражение будет записано в виде y = exp(x*ln(2)) + 3*sin(x – 4/5))*ln(x + sqrt(x + 5)). Пример. Выражению Паскаля w = sqrt(sqr(b + c) + 2/a*x/c) соответствует математическое выражение вида . Вычисление значений выражений на алгоритмическом языке происходит в соответствии с принятым в языке старшинством операций. Пример. Найдем b = ln(ехр(5)) + min(max(3,2),6) + mod(15,4)*int(1.99). Результат равен: b = 5 + min(3,6) + 3*1 = 5 + 3 + 3 = 11. Первые ЭВМ поставлялись без программного обеспечения, и программисту приходилось описывать в программе все необходимое для ее работы. Разработка первых алгоритмических языков (например ForTran) упростила программирование, увеличила число людей, решающих на компьютере свои задачи без привлечения программистов, положила начало двум основным направлениям в программировании: прикладному и системному программированию, а затем и третьему – инструментальному программированию. Прикладной программист (обычно на языках программирования высокого уровня) разрабатывает программы решения конкретных естественнонаучных задач. Системный программист (обычно на языках программирования низкого уровня) разрабатывает программы автоматизации процесса написания и отладки прикладных программ, распределения ресурсов между прикладными программами, управления процессом прохождения таких прикладных программ на ЭВМ, например разрабатывает ОС. Язык считается тем более высокого уровня, чем более он близок к языку естественному, и считается тем более низкого уровня, чем он ближе к языкам, реализуемым аппаратно, машинным. Охарактеризуем эти уровни алгоритмических языков: · языки запросов (непроцедурные языки) предназначены для осуществления диалога с некоторым пакетом прикладных программ, — это языки имитационного моделирования, в частности язык SLAM и др.; · языки высокого уровня (проблемно-ориентированные языки) предназначены для решения определенного, но достаточно широкого класса задач, например, вычислительного характера или обработки текстов (символов) — это, к примеру, языки FORTRAN, BASIC, LISP и др.; · ассемблеры (семейство языков), предназначены для укрупнения и символической (мнемонической) записи машинных команд; · языки микроопераций (языки разработки микропрограмм) — собственно говоря, это и есть языки машинных операций. Языки по типу их использования и сферам применения можно делить условно на следующие типы (это – не полная их классификация): 1. языки процедурные; 2. языки непроцедурные; 3. языки функционального программирования; 4. языки моделирования; 5. языки аналитических преобразований; 6. языки эвристические; 7. языки описания, представления объектных языков или метаязыки. Возможно и такое деление языков (отражающее характер их использования): 1. метаязыки, языки описания других языков; 2. языки описания, формулирования задач; 3. языки описания технологии, сценариев решения задач; 4. языки описания, разработки программ решения задач (или кодирования алгоритмов, часто вычислительного характера); 5. языки описания, представления знаний (фреймовые языки); 6. языки описания, представления данных; 7. языки описания, формулировки решений задач. В мире разработано несколько тысяч языков различного назначения. Пример. Отметим следующие языки, которые оказали наибольшее влияние и преемственность в развитии языков программирования: · ФОРТРАН, язык научно-технических расчетов, разработан в 1955 году фирмой IBM; · АЛГОЛ, язык вычислительного характера, разработан в 1960 году Международным комитетом ученых; · БЕЙСИК, простой язык для начинающих, разработан в 1965 году в Дортмунде; · ПАСКАЛЬ, разработан в качестве языка учебного и исследовательского характера в 1969 году в Цюрихе Н. Виртом; · СИ, разработан лабораторией BELL (США, 1972 г.) в качестве языка поддержки и программирования ОС UNIX; · ПРОЛОГ, язык логического программирования, разработан Колмероэ в 1971-1973 годах; · ПИТОН (ПАЙТОН), разработан в начале 1990-х годов Гвидо ван Россумом и является простым объектно-ориентированным языком, расширяемым, совершенствуемым пользователями; · JAVA – язык, ориентированный на сеть Интернет и серверы WWW; рассмотрим этот язык подробнее ниже; · HTML, предложен Тимом Бернерсом-Ли в 1989 году в качестве поддержки WWW-документов. ЭВМ может исполнять программы, написанные на ее машинном языке, в машинных кодах. Для перевода с других языков на машинный язык составляется специальная программа, называемая транслятором. Алгоритм (программа на языке программирования) преобразуется в корректную последовательность команд и данных, загружаемых в память ЭВМ и выполняемых в ней аппаратно. Чем выше уровень используемого при составлении программы исходного языка, тем больше работ по трансляции программы. Транслятор переводит программу с исходного языка программирования на машинный язык загрузки ее в память и исполнения. Существует два основных режима трансляции: компиляция и интерпретация. При интерпретации перевод на язык машины и выполнение каждой команды исходной программы осуществляется последовательно, покомандно, а полученная машинная программа пригодна только для одноразового решения задачи; данные вводятся при этом по мере трансляции. При компиляции до выполнения программы осуществляется полный перевод всей программы на машинный язык ЭВМ, затем полученная программа редактируется и загружается со всеми необходимыми для выполнения транслированной программы программами ОС в память ЭВМ и получается так называемый загрузочный модуль. Загрузочный модуль пригоден для многократного использования без повторной трансляции. Пример. Язык Бейсик имеет трансляторы различного типа. Например, в среде TurboBasic (TBasic) – транслятор-интерпретатор, а в среде QuickBasic (QBasic) – транслятор-компилятор. Программа для TBasic интерпретируется по циклу: "ввод команды – перевод команды на внутренний машинный язык – ввод данных для данной команды – исполнение". Программа для QBasic компилируется по циклу: "перевод всех команд программы на внутренний язык – исправление ошибок в программе – ввод данных для программы – исполнение всей программы".

13. Лекция: Введение в моделирование объектов, процессов и явлений: версия для печати и PDA Рассматриваются основные понятия моделирования (особенно, математического и компьютерного), типы и свойства моделей, жизненный цикл моделирования.
Модель и моделирование – это универсальные понятия, атрибуты одного из наиболее мощных методов познания в любой профессиональной области, познания объекта, процесса, явления (через модели и моделирование). Модели и моделирование объединяют специалистов различных областей, работающих над решением межпредметных проблем, независимо от того, где эта модель и результаты моделирования будут применены. Модель – это некоторое представление или описание оригинала (объекта, процесса, явления), которое при определенных предложениях, гипотезах о поведении оригинала позволяет замещать оригинал для его лучшего изучения, исследования, описания его свойств. Пример. Рассматривая физическое тело, брошенное с высоты h и падающее свободно в течение t времени, можно записать соотношение: h = gt2/2. Это физико-математическая модель системы (математическая модель физической системы) пути при свободном падении тела. При построении этой модели приняты следующие гипотезы: 1) падение происходит в вакууме (то есть коэффициент сопротивления воздуха равен нулю); 2) ветра нет; 3) масса тела неизменна; 4) тело движется с одинаковым постоянным ускорением g в любой точке. Слово "модель" (лат. modelium) означает "мера", "способ", "сходство с какой-то вещью". Проблема моделирования состоит из трех взаимосвязанных задач: построение новой (адаптация известной) модели; исследование модели (разработка метода исследования или адаптация, применение известного); использование (на практике или теоретически) модели. Схема построения модели М системы S с входными сигналами X и выходными сигналами Y изображена на рис. 13.1. увеличить изображение Рис. 13.1. Схема построения модели Если на вход М поступают сигналы из X и на входе появляются сигналы из Y, то задан закон, правило f функционирования модели, системы. Классификацию моделей проводят по различным критериям. Модель – статическая, если среди параметров описания модели нет (явно) временного параметра. Модель – динамическая, если среди параметров модели явно выделен временной параметр. Модель – дискретная, если описывает поведение оригинала лишь дискретно, например в дискретные моменты времени (для динамической модели). Модель – непрерывная, если описывает поведение оригинала на всем промежутке времени. Модель – детерминированная, если для каждой допустимой совокупности входных параметров она позволяет определять однозначно набор выходных параметров; в противном случае – модель недетерминированная, стохастическая (вероятностная). Модель – функциональная, если представима системой функциональных соотношений (например, уравнений). Модель – теоретико-множественная, если представима некоторыми множествами и отношениями их и их элементов. Модель – логическая, если представима предикатами, логическими функциями и отношениями. Модель – информационно-логическая, если она представима информацией о составных элементах, подмоделях, а также логическими отношениями между ними. Модель – игровая, если она описывает, реализует некоторую игровую ситуацию между элементами (объектами и субъектами игры). Модель – алгоритмическая, если она описана некоторым алгоритмом или комплексом алгоритмов, определяющим ее функционирование, развитие. Введение такого, на первый взгляд, непривычного типа моделей (действительно, кажется, что любая модель может быть представлена алгоритмом ее исследования), на наш взгляд, вполне обосновано, так как не все модели могут быть исследованы или реализованы алгоритмически. Модель – графовая, если она представима графом (отношениями вершин и соединяющих их ребер) или графами и отношениями между ними. Модель – иерархическая (древовидная), если она представима иерахической структурой (деревом). Модель – языковая, лингвистическая, если она представлена некоторым лингвистическим объектом, формализованной языковой системой или структурой. Иногда такие модели называют вербальными, синтаксическими и т.п. Модель – визуальная, если она позволяет визуализировать отношения и связи моделируемой системы, особенно в динамике. Модель – натурная, если она есть материальная копия оригинала. Модель – геометрическая, если она представима геометрическими образами и отношениями между ними. Модель – имитационная, если она построена для испытания или изучения, проигрывания возможных путей развития и поведения объекта путем варьирования некоторых или всех параметров модели. Есть и другие типы моделей. Пример. Модель F = am – статическая модель движения тела по наклонной плоскости. Динамическая модель типа закона Ньютона: F(t) = a(t)m(t) или, еще более точно и лучше, F(t)=s''(t)m(t). Если рассматривать только t = 0.1, 0.2, …, 1 (с), то модель St = gt2/2 или числовая последовательность S0 = 0, S1 = 0.01g/2, S2 = 0.04g, …, S10 = g/2 может служить дискретной моделью движения свободно падающего тела. Модель S = gt2/2, 0 < t < 10 непрерывна на промежутке времени (0;10). Пусть модель экономической системы производства товаров двух видов 1 и 2, соответственно, в количестве x1 и x2 единиц и стоимостью каждой единицы товара a1 и a2 на предприятии описана в виде соотношения a1x1 + a2x2 = S, где S – общая стоимость произведенной предприятием всей продукции (вида 1 и 2). Можно ее использовать в качестве имитационной модели, определяя общую стоимость S в зависимости от тех или иных значений объемов производимых товаров. Приведенные выше физические модели – детерминированные. Если в модели S= gt2/2, 0 < t < 10 мы учтем случайный параметр – порыв ветра с силой p при падении тела, например, просто так: S(p) = g(p)t2/2, 0 < t < 10, то мы получим стохастическую модель (уже не свободного!) падения. Это – также функциональная модель. Для множества X = {Николай, Петр, Николаев, Петров, Елена, Екатерина, Михаил, Татьяна} опишем отношения Y: "Николай – супруг Елены", "Екатерина – супруга Петра", "Татьяна – дочь Николая и Елены", "Михаил – сын Петра и Екатерины". Тогда множества X и Y могут служить теоретико-множественной моделью двух семей. Совокупность двух логических функций вида: может служить логической моделью одноразрядного сумматора компьютера. Пусть игрок 1 – добросовестный налоговый инспектор, а игрок 2 – недобросовестный налогоплательщик. Идет "игра" по уклонению от налогов (с одной стороны) и по выявлению сокрытия уплаты налогов (с другой стороны). Игроки выбирают натуральные числа i и j (), которые можно отождествить, соответственно, со штрафом игрока 2 за неуплату налогов при обнаружении факта неуплаты игроком 1 и с временной выгодой игрока 2 от сокрытия налогов. Каждый элемент этой матрицы A определяется по правилу aij = |i – j|. Модель игры описывается этой матрицей и стратегией уклонения и поимки. Алгоритмической моделью вычисления суммы бесконечного убывающего ряда чисел может служить алгоритм вычисления конечной суммы ряда до некоторой заданной степени точности. Правила правописания – языковая, структурная модель. Глобус – натурная географическая модель земного шара. Макет дома является натурной геометрической моделью строящегося дома. Вписанный в окружность многоугольник дает визуальную геометрическую модель окружности на экране компьютера. Тип модели зависит от связей и отношений его подсистем и элементов, окружения, а не от его физической природы. Пример. Математические описания (модели) динамики эпидемии инфекционной болезни, радиоактивного распада, усвоения второго иностранного языка, выпуска изделий производственного предприятия и т.д. являются одинаковыми с точки зрения их описания, хотя процессы различны. Основные свойства любой модели: · целенаправленность; · конечность; · упрощенность; · приблизительность; · адекватность; · информативность; · полнота; · замкнутость и др. Жизненный цикл моделируемой системы: · сбор информации; · проектирование; · построение; · исследование; · оценка; · модификация. Наука моделирования состоит в разделении процесса моделирования (системы, модели) на этапы (подсистемы, подмодели), детальном изучении каждого этапа, взаимоотношений, связей, отношений между ними и затем эффективного описания их с максимально возможной степенью формализации и адекватности. Приведем примеры применения математического, компьютерного моделирования в различных областях: · энергетика: управление ядерными реакторами, моделирование термоядерных процессов, прогнозирование энергетических процессов, управление энергоресурсами и т.д.; · экономика: моделирование, прогнозирование экономических и социально-экономических процессов, межбанковские расчеты, автоматизация работ и т.д.; · космонавтика: расчет траекторий и управления полетом космических аппаратов, моделирование конструкций летательных аппаратов, обработка спутниковой информации и т.д.; · медицина: моделирование, прогнозирование эпидемий, инфекционных процессов, управление процессом лечения, диагностика болезней и выработка оптимальных стратегий лечения и т.д.; · производство: управление техническими и технологическими процессами и системами, ресурсами (запасами), планирование, прогнозирование оптимальных процессов производства и т.д.; · экология: моделирование загрязнения экологических систем, прогноз причинно-следственных связей в экологической системе, откликов системы на те или иные воздействия экологических факторов и т.д.; · образование: моделирование междисциплинарных связей и систем, стратегий и тактик обучения и т.д.; · военное дело: моделирование и прогнозирование военных конфликтов, боевых ситуаций, управления войсками, обеспечение армий и т.д.; · политика: моделирование и прогнозирование политических ситуаций, поведения коалиций различного характера и т.д.; · социология, общественные науки: моделирование и прогнозирование поведения социологических групп и процессов, общественного поведения и влияния, принятие решений и т.д.; · СМИ: моделирование и прогнозирование эффекта от воздействия тех или иных сообщений на группы людей, социальные слои и др.; · туризм: моделирование и прогнозирование потока туристов, развития инфраструктуры туризма и др.; · проектирование: моделирование, проектирование различных систем, разработка оптимальных проектов, автоматизация управления процессом проектирования и т.д. Современное моделирование сложных процессов и явлений невозможно без компьютера, без компьютерного моделирования. Компьютерное моделирование – основа представления (актуализации) знаний как в компьютере, так и с помощью компьютера и с использованием любой информации, которую можно актуализировать с помощью ЭВМ. Разновидность компьютерного моделирования – вычислительный эксперимент, осуществляемый экспериментатором над исследуемой системой или процессом с помощью орудия эксперимента – компьютера, компьютерной технологии. Вычислительный эксперимент позволяет находить новые закономерности, проверять гипотезы, визуализировать события и т.д. Компьютерное моделирование от начала и до завершения проходит следующие этапы. 1. Постановка задачи. 2. Предмодельный анализ. 3. Анализ задачи. 4. Исследование модели. 5. Программирование, проектирование программы. 6. Тестирование и отладка. 7. Оценка моделирования. 8. Документирование. 9. Сопровождение. 10. Использование (применение) модели. Пример. Рассмотрим популяцию рыб, из которой в текущий момент времени изымается некоторое количество особей (идет лов рыбы). Динамика такой системы определяется моделью вида: xi + 1 = xi + аxi – kxi, х0 = c, где k – коэффициент вылова (скорость изъятия особей). Стоимость одной пойманной рыбы равна b руб. Цель моделирования — прогноз прибыли при заданной квоте вылова. Для этой модели можно проводить имитационные вычислительные эксперименты и далее модифицировать модель, например следующим образом. Эксперимент 1. Для заданных параметров a, c изменяя параметр k, определить его наибольшее значение, при котором популяция не вымирает. Эксперимент 2. Для заданных параметров c, k изменяя параметр a, определить его наибольшее значение, при котором популяция вымирает. Модификация 1. Учитываем естественную гибель популяции (за счет нехватки пищи, например) с коэффициентом смертности, равным, b: xi + 1 = xi + аxi – (k + b)xi, х0 = c. Модификация 2. Учитываем зависимость коэффициента k от x (например, k = dx):

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: