Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Неизмеримость информации в быту↑ Стр 1 из 14Следующая ⇒ Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Понятие информации. Виды информационных процессов. Поиск и систематизация информации. Хранение информации; выбор способа хранения информации. Передача информации в социальных, биологических и технических системах.
С развитием теории информации, кибернетики, информатики как науки понятие «информация» (от латинского infor-matio — сведения, разъяснения), наряду с понятиями «вещество», «энергия», «пространство» и «время» легло в основу современной научной картины мира. В то же время однозначного определения этого понятия пока не существует. Все подходы к феномену информации имеют право на существование и исследуются в соответствующих областях науки. «В информатике информацию можно рассматривать как продукт взаимодействия данных и методов их обработки, адекватных решаемой задаче». В учебниках информатики в общем виде информационный процесс определяется как совокупность действий, проводимых над информацией для получения какого-либо результата. В настоящее время выделены типовые действия над информацией, общие для различных систем: обработка, передача, хранение. Процесс обработки информации может представлять собой:
Процесс передачи информации представляет собой создание копии информации на расстоянии от исходного места хранения. В процессе передачи информации обязательно участвуют источник и приемник информации. Между ними действует канал связи. В процессе передачи информация может теряться или искажаться — случайно или намеренно. На устранение этого могут быть направлены методы защиты при передаче информации. Передача информации в социальных, биологических и технических системах с точки зрения информатики осуществляется по общей схеме: источник-канал-приемник. Различие в том, что в таких системах понимают под информацией. «В социальных науках под информацией понимают сведения, данные понятия, отраженные в нашем сознании и изменяющие наши представления о реальном мире. Эту информацию, передающуюся в человеческом обществе и участвующую в формировании общественного сознания, называют социальной информацией. Инженеры, биологи, генетики, психологи отождествляют информацию с теми сигналами, импульсами, кодами, которые наблюдают в технических и биологических системах. Содержание принимаемых и обрабатываемых сигналов инженера не интересует» [3], а генетиков и биологов может интересовать.
К процессу хранения информации можно отнести:
Понятие о кодировании информации. Выбор способа представления информации в соответствии с поставленной задачей. Универсальность дискретного (цифрового) представления информации. Двоичное кодирование.
Информация никогда не появляется в «чистом виде», она всегда как-то представлена, в каком-либо формализованном (закодированном) виде. Одна и та же информация может быть представлена различными способами. От того, как представлена информация, зависит очень многое, от возможной интерпретации до возможности ее технической обработки. Так что в практических задачах важно выбрать тот способ представления информации, который наиболее удобен и адекватен решаемой задаче. В настоящее время достаточно распространен процесс кодирования, т. е. преобразование информации из одной знаковой формы в другую, удобную для ее обработки, хранения или передачи. Используемый для кодирования конечный набор знаков называют алфавитом. Кодирование осуществляется по принятым правилам. Правило кодирования называется кодом (от французского code — кодекс, свод законов). Длина кода — количество знаков алфавита, используемое для кодирования. Многие годы человечество работало с информацией, прежде чем был изобретен компьютер. С появлением компьютера стало возможным автоматизировать процессы обработки, передачи и хранения информации. При кодировании информации для технических устройств удобно использовать алфавиты, состоящие всего из двух знаков. Такие алфавиты называют двоичными. Чем меньше знаков в алфавите, тем проще должна быть устроена «машина» для распознавания (дешифровки) информационного сообщения. Однако чем меньше знаков в алфавите, тем большее их количество требуется для кодирования, следовательно, тем больше длина кода. Легко рассчитать количество М элементарных сообщений, которые можно закодировать, используя код постоянной длины п и алфавит из R знаков: М = Rn. Длину кода рассчитывают по формуле n = [logRM + 1]. Если мы используем двоичный алфавит, то М = 2n При конструировании компьютеров был выбран двоичный алфавит {0, 1}, что позволило использовать достаточно простые устройства для представления и автоматического распознавания программ и данных. Именно простота сделала этот принцип кодирования таким распространенным. Наряду с этим свойством двоичное кодирование обеспечивает удобство физической реализации, универсальность представления любого вида информации, уменьшение избыточности сообщения, обеспечение защиты от случайных искажений или нежелательного доступа. Наиболее распространены кодировки компьютерных символов: ASCII, Win1251, ДКОИ-8.
Вероятностный и алфавитный подходы к измерению информации. Единицы измерения информации. Скорость передачи информации. Пропускная способность канала связи.
Различные подходы к измерению количества информации в сообщении определяются различием подходов к определению самого понятия «информация». Чтобы измерить что-либо, необходимо ввести единицу измерения. Минимальная единица измерения информации — бит. Смысл данной единицы также различен в рамках разных подходов к измерению информации. Выделяют три подхода.
Понятие алгоритма Исторический обзор. Первым дошедшим до нас алгоритмом в его интуитивном понимании — конечной последовательности элементарных действии, решающих поставленную задачу, — считается предложенный Евклидом в III веке до нашей эры алгоритм нахождения наибольшего общего делителя двух чисел (алгоритм Евклида). Вплоть до начала XX века само слово «алгоритм» употреблялось в устойчивом сочетании «алгоритм Евклида». Для описания пошагового решения других математических задач использовалось слово «метод». Слово «алгоритм», «algorithm» происходит от имени выдающегося ученого IX века Мухаммеда ибн Муса ал-Хорезми (в переводе с арабского Мухаммед, сын Мусы из Хорезма). По латинскому переводу его труда (XII век) Западная Европа познакомилась с десятичной позиционной системой счисления и правилами (algorismi) выполнения в ней арифметических действий.
Формализация понятия алгоритма. Во всех сферах своей деятельности, в частности, в сфере обработки информации, человек сталкивается с различными методами решения задач. Они определяют порядок выполнения действий для получения желаемого результата — мы можем трактовать это как первоначальное или интуитивное определение алгоритма. Определение 1. Алгоритм — это заданное на некотором языке конечное предписание, задающее конечную последовательность выполнимых элементарных операций для решения задачи, общее для класса возможных исходных данных. Варианты словесного определения алгоритма, принадлежащие российским ученым-математикам А. Н. Колмогорову и А. А. Маркову: Определение 2 (Колмогоров). Алгоритм — это всякая система вычислений, выполняемых по строго определенным правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи. Определение 3 (Марков). Алгоритм — это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату.
Свойства алгоритмов
Алгоритм предполагает наличие исполнителя — человека или технического устройства (автомат, робот, компьютер) со строго определенным набором возможных команд. Совокупность команд, которые могут быть выполнены исполнителем, называется системой команд исполнителя (СКИ). Исполнитель может исполнять команды из СКИ и ничего более.
Способы описания алгоритмов Словесное описание применимо лишь для простейших алгоритмов. В случае, когда связи между действиями усложняются, высокая степень детализации приводит к громоздкому описанию. Описание на алгоритмическом языке (псевдокоде) осуществляется с помощью слов естественного языка, но в специальной форме, отображающей структуру алгоритма. Всё чаще словесное описание и запись на алгоритмическом языке сводят к одному способу — словесному. Описание в графической форме в виде блок-схемы. В схеме алгоритма каждому типу действий (ввод исходных данных, вычисление, проверка условия, управление циклом, вывод результатов, окончание) соответствует своя геометрическая фигура — блок. Блоки соединяются линиями со стрелками, указывающими последовательность действий. Форма блоков установлена ГОСТом. Внутри блока записывается содержание соответствующего действия. Совокупность блоков образует блок-схему алгоритма. (В Microsoft Office можно использовать готовые шаблоны блоков.)
Основные блоки, используемые при графической форме записи алгоритмов:
Описание в виде программы для компьютера на языке программирования (например, Паскаль, Бейсик, Си).
Языки программирования Первые компьютеры (ЭВМ) разрабатывались прежде всего как вычислительные машины, т. е. устройства, выполняющие операции над числами. Сегодня компьютеры позволяют обрабатывать информацию всех видов — текстовую, графическую, числовую, мультимедийную. Для решения задачи на компьютере необходимо создать программу, т. е. последовательность команд, входящих в систему команд компьютера. Для первых компьютеров программисты писали программы в двоичных кодах, т. е. на машинном языке. Каждая команда машинного языка задает некоторое элементарное действие центрального процессора. Важным этапом в развитии программирования явилась разработка языков программирования высокого уровня (ЯПВУ) — специальных искусственных языков, приближенных к обычному разговорному языку (английскому). Примеры таких языков: FORTRAN, Basic, Pascal, С. Большинство языков высокого уровня универсальны, т. е. предназначены для решения широкого круга задач. Первая цель создания ЯПВУ — облегчить создание программ. Вторая цель — сделать программы переносимыми, т. е. уменьшить количество труда по адаптации программ для новых типов компьютеров. Поскольку компьютер (а точнее, его процессор) оперирует не конструкциями ЯПВУ, а двоичными командами, то перед выполнением программа должна быть превращена в машинный код. Выполняют эту операцию программы-трансляторы. В зависимости от порядка подготовки программы на языке высокого уровня к исполнению, трансляторы делятся на компиляторы и интерпретаторы. Компилятор — это программа, автоматически преобразующая (компилирующая) исходный код ЯПВУ в машинный код и создающая таким образом исполняемый файл. Он может быть запущен на исполнение операционной системой. В ОС Microsoft такие файлы могут иметь расширения ехе, com, dll. Интерпретатор — это программа, преобразующая код ЯПВУ в машинный код шаг за шагом, т. е. каждая команда преобразуется интерпретатором и сразу выполняется компьютером, затем интерпретатор преобразует следующую команду, компьютер ее выполняет и т. д. (интерпретатор — «синхронный переводчик»). Недостаток интерпретаторов — низкая скорость выполнения программ. Примеры: интерпретаторы языков Basic и Java Script. Для языка Basic в настоящее время существуют как интерпретаторы, так и компиляторы.
Типы данных При решении задач на компьютере следует определить данные задачи и их типы. Данные — это информация, необходимая для выполнения программы, представленная в формальном виде, который обеспечивает возможность ее хранения, обработки и передачи (англ. data). Языки высокого уровня организуют обработку данных с помощью переменных. Переменная — это именованная область оперативной памяти, в которой может храниться нужная информация (данные). Способ хранения определяется типом переменной. Константа — это именованное значение, которое остается неизменным на протяжении всего времени выполнения программы. Числовая константа представляет собой какое-либо число (7; 3.14), а строковая константа - произвольную строку (" количество учеников в классе "). В любом ЯПВУ переменные и константы характеризуются своими типами. Тип данных — это правила хранения и формат данных. Во время работы программы тип данных будет определять, каким образом данные будут извлекаться из оперативной памяти (ОП), интерпретироваться и сохраняться в ОП. Например, величины 205 и -45 относятся к целочисленному типу и их можно складывать, вычитать, перемножать и делить. Величины " цвет " и " ок " относятся к строковому типу, их можно сцеплять, но над ними нельзя выполнять арифметические операции. В языке Basic существуют следующие типы данных.
Примечание: Массив - индексированный набор элементов одного типа; STRING - ряд, последовательность, цепочка; строка - последовательность символов.
Технологии программирования Под алгоритмом, в случае, когда исполнителем является компьютер, можно понимать последовательность команд для процессора. В широком смысле, программирование — процесс создания программ, т. е. разработка программного обеспечения. Существуют различные технологии программирования. Технология восходящего программирования («снизу вверх») реализуется так:
Достоинства этого подхода — уменьшается общий объем работы за счет ранее созданных участков кода; снижаются требования к аппаратным ресурсам; уменьшается вероятность возникновения ошибок, так как только на поздних этапах проекта мы работаем с большим объемом кода. Недостатки — уже реализованные, отлаженные и протестированные модули иногда приходится разрабатывать заново (так как головной модуль разрабатывается на завершающем этапе). Использование готовых частей кода может привести к менее эффективной структуре решения в целом. Кроме того, при применении такого подхода в чистом виде возникает опасность потерять общую логику разработки.
Технология нисходящего программирования — это создание программы «сверху вниз». Сначала разрабатывается основная программа (точнее, ее общая структура) и в ней записываются обращения к пока еще не написанным вспомогательным подпрограммам; и так далее — до самых простых «неделимых» подпрограмм. Существенный этап такой разработки — определить основные структуры данных и правила их обработки. То есть определить, с какими данными подпрограммы будут работать и что должно быть ими сделано в результате выполнения. При этом для ускорения процесса работы над задачей руководитель может разрабатывать основную программу, а другие сотрудники — подпрограммы. Если какая-то подпрограмма не готова, ее заменяют подпрограммой-«заглушкой», которая при заданных входных данных дает разумный результат (хотя фактически подпрограмма не работает). Технология нисходящего программирования (метод последовательной детализации) лежит в основе технологии структурного программирования. Алгоритм решения основной задачи называется основным алгоритмом. Алгоритм решения некоторой подзадачи по отношению к исходной (основной) задаче называется вспомогательным алгоритмом. Структурное программирование предполагает, что логическая структура программы может быть выражена комбинацией трех базовых структур: следования, ветвления и цикла. Эти структуры могут комбинироваться одна с другой, как того требует программа. Итак, особенности структурного программирования:
Этапы решения сложной задачи X сверху вниз:
Достоинства метода программирования «сверху вниз» — серьезные ошибки с большой вероятностью отыскиваются уже на ранних стадиях проекта; тестирование систематично. Недостаток — при отладке поглощается больше машинных ресурсов. Необходимо снижать трудоемкость тестирования и отладки программы.
Процедуры и функции Подпрограмма (subroutine) — именованная последовательность операторов языка, предназначенная для решения некоторой подзадачи. Часто подпрограмма имеет свои переменные, не пересекающиеся с переменными других подпрограмм или самой программы (если только переменные не были объявлены специальным образом или переданы подпрограмме). Каждая подпрограмма имеет имя, по которому к ней можно обратиться. В языке QBasic механизм подпрограмм реализуется в виде процедур (procedure) и функций (function) с такой же структурой, как и основная программа. Они различаются назначением и способом использования. Основное назначение процедуры — выполнение самостоятельных действий (без возврата какого-либо значения), а функции — возврат значения для использования в выражениях основной программы. Подпрограммы вводятся в основную программу с помощью соответствующего описания, затем к ним можно выполнять обращение. Создание подпрограмм облегчает программирование, так как:
Процедура начинается с заголовка, за ним следует имя, а в круглых скобках — список формальных параметров:
Описание процедуры SUB <имя>[(<формальные параметры>)] <Объявление переменных> <Тело процедуры> EXIT SUB END SUB Обращение к процедуре CALL <имя>[(фактические параметры)]
Примечание. В квадратных скобках указываются необязательные части оператора, т. е. список формальных параметров может отсутствовать. Параметры процедуры можно разделить на входные и выходные, т. е. результаты.
Процедура может получить из основной программы несколько переменных (фактических параметров) для изменения их значений. Чтобы выполнить процедуру, к ней следует обратиться из основной программы с фактическими параметрами. Количество, тип и порядок следования формальных и фактических параметров должны совпадать.
Функция предназначена для того, чтобы возвращать одно значение, оно и является ее результатом. Описание функции начинается с заголовка, за ним следует имя, а в круглых скобках — список формальных параметров:
Описание функции Function <имя> [(<формальные параметры>)]: <тип результата> <Объявление переменных> <Тело функции> <имя>=<значение> END FUNCTION Обращение к функции Р=<имя>[(<фактические параметры>)]
Примечание. <значение> - это результат выполнения арифметичиского выражения.
Функция или процедура — самостоятельная часть программы, имеющая собственные переменные, которым отводится отдельное, не зависящее от основной программы, место в памяти компьютера.
Структура программы на QBasic:
Const — раздел констант Туре — раздел типов DEF — раздел переменных SUB, FUNCTION — раздел процедур и функций Раздел операторов END Примечание. Через главное меню процедуры и функции записываются отдельно, при распечатке программы они печатаются после основной программы.
Примеры создания и использования процедур и функций: Задача 1. Написать процедуру возведения в целую степень N некотс рого числа X, N > 0, X > 0. Показать использование процедуры, оба числа вводятся с клавиатуры.
Структуры данных. Обработка массивов. Поиск в массиве. Основные алгоритмы сортировки массивов.
В связи с тем, что подавляющее большинство прикладных задач оперируют большим количеством разнообразных данных, практически все развитые универсальные языки программирования высокого уровня имеют в своем синтаксисе конструкции, предназначенные для организации сложных моделей представления данных. Основное назначение таких конструкций — упростить описание модели, упорядочить дальнейшую обработку и позволить создавать объединения из отдельных переменных. Самый простой случай такой структуры данных — массив. В компилируемых языках высокого уровня массив определяют как упорядоченный набор однотипных переменных. Такой набор переменных объявляется заранее, с указанием типа переменных и их количества — для отведения нужного объема памяти. Переменные в массиве называются его элементами. Каждый элемент массива имеет ипдекс — целое число, задающее его положение по порядку в массиве. Основная операция с массивом — обращение к его элементам. Элементы массива используются и изменяются как обычные переменные.
Массивы активно используются в тех случаях, когда нужно обработать большое количество однотипных данных. Примеры: массив значений температуры, массив названий товаров и пр. Часто возникает задача поиска (определения индекса) элемента в массиве по заданному критерию. Простейший способ такого поиска: перебор всех элементов до нахождения нужного. В качестве ответа можно хранить значение, а можно — индекс найденного элемента.
Пример — поиск максимального элемента в массиве: CLS DEFINT A DIM A(5) FOR I = 1 TO 5 A(I) = INT(RND(1) * 100) PRINT A(I); NEXT MAX = 0 FOR I = 1 TO N IF A(I) > MAX THEN MAX = A(I) ELSE 10 10: NEXT PRINT "максимальный элемент массива -"; MAX END
Если в массиве выдержан какой-то принцип расположения элементов (упорядочение), то все операции поиска можно ускорить. Упорядоченным по неубыванию считается массив, в котором каждый следующий элемент не меньше предыдущего, упорядоченным по невозрастанию — тот, где каждый следующий элемент не больше предыдущего. В упорядоченных массивах можно искать любой заданный элемент методом деления отрезка пополам, а поиск максимума и минимума вообще не нужен. Алгоритмов сортировки массивов достаточно много, наиболее простой в реализации — метод пузырька. Этот алгоритм предполагает многократный проход по массиву; на каждом проходе (итерации цикла) циклически обмениваются местами попарно элементы, стоящие в неправильной последовательности. В результате самый «легкий» элемент (минимальный или максимальный) «всплывает» и занимает свое место. На каждой итерации количество обрабатываемых элементов уменьшается на единицу. Итерации повторяются, пока требуется выполнить хотя бы одну перестановку:
Пример — сортировка элементов массива по возрастанию.
CLS DIM A(10) FOR I=1 TO 10 A(I) = INT(RND(1)*100) PRINT A(I); NEXT FOR I=1 TO 9 IF A(I) <=A(I+1) THEN 10 ELSE 20 20: R= A(I) A(I)= A(I+1) A(I+1)= R I=0 10: NEXT FOR I=1 TO 10 PRINT A(I); NEXT
Основные понятия и операции формальной логики. Законы логики. Логические переменные. Логические выражения и их преобразования. Построение таблиц истинности логических выражений.
Основные понятия и операции алгебры логики Формальной логикой принято называть античную логику, основанную Аристотелем. Это название происходит от основного принципа логики как науки, который гласит, что правильность рассуждения (умозаключения) определяется только его логической формой, или структурой, и не зависит от конкретного содержания входящих в него суждений. Логика изучает формы мышления с точки зрения их структуры, законы и правила получения некоторого знания. Формами мышления являются: понятие, суждение, умозаключение. Понятие — форма мышления, отражающая существенные свойства предмета или класса однородных предметов. Характеризуется содержанием и объемом. Содержание понятия — те признаки предмета, которые позволяют отличить предмет от всех остальных. Объем понятия — множество предметов, каждому из которых принадлежат эти признаки. Суждение — форма мышления, в которой что-либо утверждается или отрицается о наличии предмета, его свойствах и действиях. Характеризуется содержанием и формой. Содержанием суждения является его смысл. Форма — способ построения. Суждения бывают истинными и ложными. Умозаключение — форма мышления, в которой из одного или нескольких суждений на основании определенных правил вывода получается новое суждение (вывод, или заключение). В своем развитии логика прошла ряд этапов. Современную логику называют математической. Алгебра высказываний (алгебра логики) — раздел математической логики. Алгебра логики возникла в середине XIX века в трудах Джорджа Буля. Создание алгебры логики представляло собой попытку решать традиционные логические задачи алгебраическими методами. Учение о высказываниях, называемое алгеброй высказываний (алгеброй логики), является первой из формальных логических теорий. Объектами алгебры логики являются высказывания. Алгебра логики имеет приложения при синтезе релейно-контактных и электронных схем. В этой теории отвлекаются от содержания высказывания, а рассматривают только то его свойство, что оно представляет собой или истину, или ложь. Тогда высказывание можно рассматривать как величину, которая может принимать два значения: «истина» и «ложь». Высказывания обозначаются прописными латинскими буквами А, В, С, D..., а их значения «Истина» или «Ложь» можно записывать как TRUE и FALSE, или Т и F, или 1 и 0, или И и Л. Примеры высказываний: «Луна — спутник Земли». «Все числа — целые».
Над высказываниями в алгебре логики определяются следующие основные логические операции, в результате которых получаются новые, составные высказывания:
Логическое отрицание (инверсия) — это логическая операция, применяемая к одному высказыванию. Высказывание А есть высказывание, которое ложно, когда А истинно, и истинно, когда А ложно. Высказывание называется отрицанием А. Возможные обозначения отрицания: A, not А, не А.
Логическое умножение (конъюнкция) — это логическая операция, ставящая в соответствие каждым двум простым высказываниям составное высказывание, являющееся истинным тогда и только тогда, когда оба исходных высказывания истинны. Возможные обозначения конъюнкции: A И В, А & В, A AND В, А·В, А U В, АВ.
Логическое сложение (дизъюнкция) — это логическая операция, ставящая в соответствие каждым двум простым высказываниям составное высказывание, являющееся истинным тогда и только тогда, когда истинно хотя бы одно из высказываний. Возможные обозначения дизъюнкции: А ИЛИ В, A U В, A OR В, А + В, А || В.
Логическое следование (импликация) — это высказывание ложно тогда и только тогда, когда А истинно, а В ложно. Возможные обозначения импликации: А®В, А => В.
Эквивалентность — это высказывание истинно тогда и только тогда, когда А и В оба истинны или оба ложны. Возможные обозначения эквивалентности: А ~ В, А U В.
Всякое сложное высказывание, составленное из некоторых исходных высказываний посредством логических операций, будем называть логическим выражением. Его также называют формулой алгебры логики. Исходные высказывания могут быть логическими константами (если имеют постоянное значение «истина» или «ложь») или логическими переменными. Переменные высказывания — это такие переменные, значениями которых могут быть любые наперед заданные простые высказывания — константы. Логические операции позволяют каждой формуле при заданных значениях входящих в нее высказываний приписать одно из двух значений: 0 или 1. Тем самым каждая формула может рассматриваться как некоторый способ задания или реализации функции алгебры логики. Логическая функция — это функция, определенная на множестве значений (истина, ложь) и принимающая значение из того же множества. Например: F1 = А&В, F2 = AUB. Функцию можно задавать как в виде формулы, так и в виде таблицы, которая содержит все наборы значений переменных и значения функции на этих наборах. Такую таблицу называют таблицей истинности.
Таблица простейших логических функций:
|
||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-26; просмотров: 785; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.85.74 (0.021 с.) |