Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

END MODULE global 1 страница




LOGICAL:: test

REAL, DIMENSION(100):: a, b, c

MODULE global

CONTAINS

MODULE имя

[определения]

...

процедуры модуля]

END [MODULE [имя]]

INTEGER:: list(100)

Схема структуры модуля показывает, что все содержащиеся в модуле процедуры (подпрограммы и функции) размещаются между ключевыми операторами CONTAINS и END MODULE.

Пример модуля cartesian с процедурой swap:

MODULE cartesian

TYPE point

REAL:: x, y

END TYPE point

CONTAINS

SUBROUTINE swap(p1, p2)

TYPE(point), INTENT(INOUT):: p1, p2

TYPE(point):: tmp

tmp = p1

p1 = p2

p2 = tmp

END SUBROUTINE swap

END MODULE cartesian

В этом модуле дается описание типа point как структуры, содержащей два поля x, yтипа REAL, а также процедура swap с двумя параметрами p1, p2, из которых каждый описан имеющим тип point и атрибут INTENT (вид параметра) со значением INOUT (входной IN и выходной OUT одновременно, или изменяемый). Тип point задан и для локальной переменной tmp. Символом :: отделяется перечисление свойств переменных от списка переменных.

Использование cartesian. Использование описаний и процедур модуля должно идти после объявления о намерении использовать модуль (оператор USE) виспользующей процедуре.

PROGRAM graph

USE cartesian

TYPE(point):: first, last

...

CALL swap (first, last)

...

END PROGRAM graph

Две разновидности модулей: первый модуль – подпрограмма функции, которая определяется следующим образом: t FUNCTION f(a1,a2…an), где t – тип функции: Integer, Real, Double Precision, Complex, Logical; по умолчанию Real или Integer, определяется первой буквой имени функции; FUNCTION – ключевое слово; f – имя функции; a1,a2, …, an – формальные параметры. Структура:

FUNCTION Name(a1, a2, …, an)

исполнимая часть

Name=Result

Return

End

После выполнения основной (исполнимой) части имени функции присваивается значение полученного результата ее работы (Result). Оператор Return передает результат в вызывающую программу (End –завершение текста подпрограммы при трансляции).

Второй вид модулей универсального назначения, в Фортране называется SUBROUTINE, в Паскале – PROCEDURE (в отличие от SUBROUTINE подпрограмма PROCEDURE является внутренним программным модулем, доступ к которому возможен только из самой вызывающей программы, в состав которой он входит). В языке С, хотя все модули называются функциями, имеется два особых вида таких модулей, вызываемых из главной программы (main) с возможностями SUBROUTINE и PROCEDURE.

В подпрограммах типа SUBROUTINE снимается ограничение подпрограммы функции, которая обеспечивает единственный результат, присваиваемый имени функции. Это вызвано тем, что ряд задач связан с необходимостью получения большего количества выходных результатов (например, графические процедуры, матричные вычисления, решения систем линейных уравнений, дифференциальных уравнений и т.п.).

Программа SUBROUTINE оформляется следующим образом:

SUBROUTINE S(a1,a2, …, an)

Тело подпрограммы

Исполнительная часть

RETURN

END

где SUBROUTINE – ключевое слово; S – имя подпрограммы (не имеет типа и никак не связано с входными и выходными параметрами); a1,a2, …, an – формальные параметры, используемые при работе подпрограммы, включая и выходные параметры (результаты вычислений). Формальные и фактические параметры должны быть согласованы между собой (так же, как и в подпрограмме функции) по типу, количеству и порядку следования. Естественно выходные (вычисляемые) параметры фигурируют в главной программе только в виде имен (не имеющих значений до начала работы модуля). RETURN и END – выполняют те же функции, что и в подпрограмме функции.

40. Основные концепции структурного программирования, причины его появления, иерархия структурных фрагментов (на примере Паскаля)

Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. В соответствии с данной методологией:

1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций: последовательное исполнение (следование) — однократное выполнение операций в том порядке, в котором они записаны в тексте программы; ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия; цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

2. Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т.н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы

3. Разработка программы ведётся пошагово, методом «сверху вниз».

Перечислим некоторые достоинства структурного программирования:

1. Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и облегчает понимание её другими разработчиками.

2. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться без блок-схем и других графических форм изображения алгоритмов (сама программа – блок-схема).

3. Сильно упрощается процесс тестирования и отладки структурированных программ.

Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственного усложнения программного обеспечения. Программы становились слишком сложными, чтобы их можно было нормально сопровождать, поэтому потребовалась какая-то систематизация процесса разработки и структуры программ. Наиболее сильной критике со стороны разработчиков структурного подхода к программированию подвергся оператор GOTO (оператор безусловного перехода), имевшийся тогда почти во всех языках программирования. Неправильное и необдуманное использование произвольных переходов в тексте программы приводит к получению запутанных, плохо структурированных программ, по тексту которых практически невозможно понять порядок исполнения и взаимозависимость фрагментов.

41. Объектно-ориентированное программирование (ООП) – понятие об абстракции процесса и абстракции данных, три ключевых языковых свойства ООП – инкапсуляция, наследование и полиморфизм с динамическим связыванием

ООП — подход к программированию, в котором основными концепциями являются понятия объектов и классов

Абстракция процесса и данных. Объекты представляют собою упрощенное, идеализированное описание реальных сущностей предметной области. Если соответствующие модели адекватны решаемой задаче, то работать с ними оказывается намного удобнее, чем с низкоуровневым описанием всех возможных свойств и реакций объекта.

Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов.

Наследованием называется возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка и добавляя, при необходимости, новые свойства и методы. Набор классов, связанных отношением наследования, называют иерархией. Наследование призвано отобразить такое свойство реального мира, как иерархичность.

Полиморфизмом называют явление, при котором функции (методу) с одним и тем же именем соответствует разный программный код в зависимости от того, объект какого класса используется при вызове данного метода. Полиморфизм обеспечивается тем, что в классе-потомке изменяют реализацию метода класса-предка с обязательным сохранением сигнатуры метода.

42. Разновидности и краткие характеристики машинно-независимых языков программирования

Машинно–независимые языки – это средство описания алгоритмов решения задач и информации, подлежащей обработке. Они удобны в использовании для широкого круга пользователей и не требуют от них знания особенностей организации функционирования ЭВМ и вычислительных систем. Подобные языки получили название высокоуровневых языков программирования. Программы, составляемые на таких языках, представляют собой последовательности операторов, структурированные согласно правилам рассматривания языка (задачи, сегменты, блоки и т.д.). Операторы языка описывают действия, которые должна выполнять система после трансляции программы на машинный язык.

Машинно-независимые языки можно разбить на:

1. Проблемно–ориентированные языки. С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Необходимо было создать такие языки программирования, которые, используя в данной области обозначения и терминологию, позволили бы описывать требуемые алгоритмы решения для поставленных задач, ими стали проблемно–ориентированные языки. Эти языки, ориентированные на решение определенных проблем, должны обеспечить программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме. Проблемных языков очень много, например:

Фортран, Алгол – языки, созданные для решения математических задач;

Simula, Слэнг – для моделирования;

Лисп, Снобол – для работы со списочными структурами.

2. Универсальные языки – были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный процедурный язык «PL/1» был разработан фирмой IBM. PL/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными, организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Второй по мощности универсальный язык называется Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Программы в PL/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.

3. Диалоговые языки. Появление новых технических возможностей поставило задачу перед системными программистами – создать программные средства, обеспечивающие оперативное взаимодействие человека с ЭВМ, их назвали диалоговыми языками. Эти работы велись в двух направлениях. Создавались специальные управляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках. Разрабатывались также языки, которые кроме целей управления обеспечивали бы описание алгоритмов решения задач.

Необходимость обеспечения оперативного взаимодействия с пользователем потребовала сохранения в памяти ЭВМ копии исходной программы даже после получения объектной программы в машинных кодах. При внесении изменений в программу с использованием диалогового языка система программирования с помощью специальных таблиц устанавливает взаимосвязь структур исходной и объектной программ. Это позволяет осуществить требуемые редакционные изменения в объектной программе.

Одним из примеров диалоговых языков является Бейсик. Бейсик использует обозначения, подобные обычным математическим выражениям. Многие операторы являются упрощенными вариантами операторов языка Фортран. Поэтому этот язык позволяет решать достаточно широкий круг задач.

4. Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами. Позволяя четко описывать как задачу, так и необходимые для её решения действия, таблицы решений дают возможность в наглядной форме определить, какие условия должны быть выполнены, прежде чем переходить к какому-либо действию. Одна таблица решений, описывающая некоторую ситуацию, содержит все возможные блок-схемы реализаций алгоритмов решения. Табличные методы легко осваиваются специалистами любых профессий. Программы, составленные на табличном языке, удобно описывают сложные ситуации, возникающие при системном анализе.

43. Программное обеспечение ЭВМ – общие сведения (определение программы, форматы программ, разновидности программного обеспечения, особенности разработки)

Назначением ЭВМ является выполнение программ.

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

Под системным (базовым) понимается программное обеспечение, включающее в себя операционные системы, сетевое ПО, сервисные программы, а также средства разработки программ (трансляторы, редакторы связей, отладчики и пр.).

Основные функции операционных систем (ОС) заключаются в управлении ресурсами (физическими и логическими) и процессами вычислительных систем. Физическими ресурсами являются: оперативная память, процессор, монитор, печатающее устройство, магнитные и оптические диски. К логическим ресурсам можно отнести программы, файлы, события и т.д. Под процессом понимается некоторая последовательность действий, предписанная соответствующей программой и используемыми ею данными.

В настоящее время существует большое количество ОС, разработанных для ЭВМ различных типов. На ЭВМ Единой Системы (ЕС ЭВМ), например, использовались такие операционные системы, как СВМ и ОС ЕС, на малых ЭВМ (СМ-4, СМ-1420 и др.) – ОС РВ и RSX-11. На персональных ЭВМ долгое время эксплуатировалась ОС MS-DOS. В настоящее время получили распространение системы Windows 98/Me, Windows 2000, Linux.

Сетевое ПО предназначено для управления общими ресурсами в распределенных вычислительных системах: сетевыми накопителями на магнитных дисках, принтерами, сканерами, передаваемыми сообщениями и т.д. К сетевому ПО относят ОС, поддерживающие работу ЭВМ в сетевых конфигурациях (так называемые сетевые ОС), а также отдельные сетевые программы (пакеты), используемые совместно с обычными, не сетевыми ОС.

Например, большое распространение получили следующие сетевые ОС: NetWare 4.1 (фирма Novell), Windows NT Server 3.5 (фирма Microsoft) и LAN Server 4.0 Advanced (фирма IBM). Однако в последнее время лидирующие позиции начинает занимать ОС Windows 2000 Server фирмы Microsoft.

Для расширения возможностей операционных систем и предоставления набора дополнительных услуг используются сервисные программы. Их можно разделить на следующие группы: интерфейсные системы; оболочки операционных систем; утилиты.

Интерфейсные системы являются естественным продолжением операционной системы и модифицируют как пользовательский, так и программный интерфейсы, а также реализуют дополнительные возможности по управлению ресурсами ЭВМ. В связи с тем, что развитая интерфейсная система может изменить весь пользовательский интерфейс, часто их также называют операционными системами. Это относится, например, к Windows 3.11 и Windows 3.11 for Workgroups (для рабочих групп).

Оболочки операционных систем, в отличие от интерфейсных систем, модифицируют только пользовательский интерфейс, предоставляя пользователю качественно новый интерфейс по сравнению с реализуемым операционной системой. Такие системы существенно упрощают выполнение часто запрашиваемых функций, например, таких операций с файлами, как копирование, переименование и уничтожение, а также предлагают пользователю ряд дополнительных услуг. В целом, программы-оболочки заметно повышают уровень пользовательского интерфейса, наиболее полно удовлетворяя потребностям пользователя.

На ПЭВМ широко используются такие программы-оболочки, как Norton Commander, FAR Manager и Windows Commander.

Утилиты предоставляют пользователям средства обслуживания компьютера и его ПО. Они обеспечивают реализацию следующих действий:

обслуживание магнитных дисков;

обслуживание файлов и каталогов;

предоставление информации о ресурсах компьютера;

шифрование информации;

защита от компьютерных вирусов;

архивация файлов и др.

Существуют отдельные утилиты, используемые для решения одного из перечисленных действий, и многофункциональные комплекты утилит. В настоящее время для ПЭВМ среди многофункциональных утилит одним из наиболее совершенных является комплект утилит Norton Utilities. Существуют его версии для использования в среде DOS и Windows.

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

Прикладным называется ПО, предназначенное для решения определенной целевой задачи из проблемной области. Часто такие программы называют приложениями.

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

Из всего разнообразия прикладного ПО выделяют группу наиболее распространенных программ (типовые пакеты и программы), которые можно использовать во многих областях человеческой деятельности.

К типовому прикладному ПО относят следующие программы:

текстовые процессоры;

табличные процессоры;

системы иллюстративной и деловой графики (графические процессоры);

системы управления базами данных;

экспертные системы;

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

Предлагаемые на рынке ПО приложения, в общем случае, могут быть выполнены как отдельные программы либо как интегрированные системы. Интегрированными системами обычно являются экспертные системы, программы математических расчетов, моделирования и анализа экспериментальных данных, а также офисные системы. Примером мощной и широко распространенной интегрированной системы является офисная система Microsoft Office.

44. Разновидности организации прикладного программного обеспечения

Каждая прикладная среда предназначена для создания и исследования определенного вида компьютерного объекта. Например, для создания графического объекта предназначена среда графического редактора, для работы с текстом — среда текстового процессора и т.д.

Комплекс прикладных программ в среде операционной системы Windows называют приложением. Нередко его называют также пакётом прикладных программ (ППП).

Наибольшей популярностью пользуются следующие группы прикладного программного обеспечения:

· текстовые процессоры – для создания текстовых документов;

· табличные процессоры (электронные таблицы) – для вычислений и анализа информации, представленной в табличной форме;

· базы данных – для организации и управления данными;

· графические пакеты – для представления информации в виде рисунков и графиков;

· коммуникационные программы – для обмена информацией между компьютерами;

· интегрированные пакеты, включающие несколько прикладных программ разного назначения;

· обучающие программы, электронные учебники, словари, энциклопедии, системы проектирования и дизайна;

· игры.

Прикладное ПО – программы, фактически выполняющие задачу пользователя. Имеется несколько способов организации этого ПО. Например, позадачный, который представлен виде отдельных программ, разрабатываемых под конкретные задачи пользователей и отображающих узкоспециализированные особенности этих задач.

Библиотека программ по специальностям – наборы программ по определенной тематике, описанные с соблюдением определенных стандартов в виде модулей типа функций или подпрограмм.

Пакеты прикладных программ (ППП) имеют в своем составе, кроме функциональных модулей, управляющую программу, выделенную базу данных и входной язык пакета.

45. Операционные системы – состав, характеристики отдельных частей, классификация

Операционная система — это комплекс взаимосвязанных системных программ, назначение которого — организация взаимодействия пользователя с компьютером и выполнение всех других программ. Операционная система выполняет роль связующего звена между аппаратурой компьютера с одной стороны и выполняемыми программами, а также пользователем, с другой стороны.

Операционная система обычно хранится во внешней памяти компьютера — на диске. При включении компьютера она считывается с дисковой памяти и размещается в ОЗУ. Этот процесс называется загрузкой операционной системы.

В функции операционной системы входят:

· осуществление диалога с пользователем;

· ввод-вывод и управление данными;

· планирование и организация процесса обработки программ;

· распределение ресурсов (оперативной памяти и кэша, процессора, внешних устройств);

· запуск программ на выполнение;

· всевозможные вспомогательные операции обслуживания;

· передача информации между различными внутренними устройствами;

· программная поддержка работы периферийных устройств (дисплея, клавиатуры, дисковых накопителей, принтера).

Операционную систему можно назвать программным продолжением устройства управления компьютера. Операционная система скрывает от пользователя сложные ненужные подробности взаимодействия с аппаратурой, образуя прослойку между ними. В результате этого люди освобождаются от очень трудоёмкой работы по организации взаимодействия с аппаратурой компьютера.

Операционные системы можно разделить на группы (классифицировать) по следующим признакам:

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

2. По числу процессов: однозадачные (обрабатывают только одну задачу); многозадачные (располагает в оперативной памяти одновременно несколько задач, которые попеременно обрабатывает процессор).

3. По типу средств вычислительной техники: однопроцессорные, многопроцессорные (задачи могут выполняться на разных процессорах; серверы, как правило, многопроцессорные), сетевые (обеспечивают совместное использование ресурсов всеми выполняемыми в сети задачами).

4. По типу интерфейса (способа взаимодействия с пользователем) операционные системы делятся на 2 класса: ОС с интерфейсом командной строки и ОС с графическим интерфейсом.

Операционная система для персонального компьютера, ориентированного на профессиональное применение, должна содержать следующие основные компоненты:

· программы управления вводом/выводом;

· программы, управляющие файловой системой и планирующие задания для компьютера;

· процессор командного языка, который принимает, анализирует и выполняет команды, адресованные операционной системе.

Каждая операционная система имеет свой командный язык, который позволяет пользователю выполнять те или иные действия:

· обращаться к каталогу

· выполнять разметку внешних носителей;

· запускать программы;

·... другие действия.

Анализ и исполнение команд пользователя, включая загрузку готовых программ из файлов в оперативную память и их запуск, осуществляет командный процессор операционной системы.

Для управления внешними устройствами компьютера используются специальные системные программы — драйверы. Драйверы стандартных устройств образуют в совокупности базовую систему ввода-вывода (BIOS), которая обычно заносится в постоянное ЗУ компьютера.

46. Инструментальное ПО ЭВМ, разновидности трансляторов

Инструментальное ПО или системы программирования – это системы для автоматизации разработки новых программ на языке программирования. Язык программирования и транслятор, реализующий его на конкретной ЭВМ, обычно объединяют под общим названием – система программирования. Трансляторы могут быть представлены в следующих вариантах: ассемблеры; компиляторы; интерпретаторы; трансляторы, использующие промежуточный код; кросс-трансляторы.

Ассемблер – трансляторы с языков Ассемблер. Хотя у каждого типа ЭВМ имеется свой язык, все разновидности трансляторов с этих языков имеют единое название – Ассемблер.

Компиляторы – наиболее распространенный вид транслятора. После создания текста программы (исходного модуля) на машинном носителе с помощью программы EDIT (1-й этап) он загружается в ОП и последовательно, строчка за строчкой, обрабатывается компилятором (COMPILE). Как правило, компиляторы имеют синтаксическую диагностику, поэтому этот процесс (EDIT-COMPILE) носит итерационный характер. После завершения синтаксической отладки (2-й этап) создается объектный модуль (О) этой программы, который на следующем этапе 3 обрабатывается редактором связи (или компоновщиком). Компоновщик включает в программу необходимые библиотечные модули и в результате работы этой программы создается исполнимая программа (В). Таким образом, в результате работы трех обрабатывающих программ имеются три программы одного и того же функционального назначения в различных форматах. По завершении каждой стадии программы перечисленных форматов копируются на диск, а соответствующие обрабатывающие программы также удаляютсяиз ОП. В связи с этим, чтобы запустить изготовленную программу, ее необходимо загрузить (этап 4 – LOAD) в ОП и произвести ее запуск (этап 5 – RUN).

В отличие от компилятора интерпретатор обрабатывает по одному предложению программы, выполняя все четыре фазы. Разница, в некотором смысле, подобна разнице между переводчиком литературы и переводчиком устной речи. Этот режим характерен для диалоговых языков и, безусловно, более удобен с точки зрения алгоритмической отладки программ и оперативного получения результатов. Но для выполнения интерпретируемой программы интерпретатор должен находиться в оперативной памяти вместе с выполняемой программой.




Поделиться с друзьями:


Дата добавления: 2014-11-20; Просмотров: 495; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.068 сек.