Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Автореферат диссертации'
Защита диссертации состоится 24 июня 2010 года в 15-00 часов на заседании диссертационного совета Д 008.008.06 при Учреждении Российской академии обр...полностью>>
'Программа'
Электроэнергетическая система представляет собой сложный социально-технический объект, предназначенный для обеспечения электрической и тепловой энерг...полностью>>
'Литература'
Понятие «возвращенная литература» появилось на закате советской эпохи, и оно связано с не самыми лучшими сторонами нашей истории. Как известно, до ре...полностью>>
'Документ'
Афины ● Дельфы ● Метеоры ● Фермопилы ● мыс Сунион ● Эпидавр ● Микены ● НафплионКоринф ●  Круиз по островам Саронического залива – Эгина ● Порос ● Гид...полностью>>

Лекция Соболевой (2)

Главная > Лекция
Сохрани ссылку в одной из сетей:

Раздел 1. ЯЗЫКИ ПРОГРАММИРОВАНИЯ

  1. Программное обеспечение (ПО). Основные этапы решения задач на ЭВМ. Жизненный цикл программного средства.

  2. Язык программирования Паскаль (Си). Структура программы на языке Паскаль (Си). Константы. Целые и вещественные типы языка Паскаль . Согласование типов. Преобразование типов. Иерархия операций в выражениях.

  3. Логический тип. Ветвления. Оператор условного перехода. Полная и сокращённая форма условного оператора. Составные условия.

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

  5. Оператор выбора.

  6. Операторы цикла. Оператор цикла с предусловием. Оператор цикла с постусловием. Оператор цикла с параметром.

  7. Процедуры и функции. Параметры, локальные и глобальные переменные. Передача параметров по адресу и по значению.

  8. Регулярный тип (массивы). Описание массивов. Ввод и вывод элементов массива. Нахождение максимального (минимального) элемента массива.

  9. Обработка матриц. Поиск заданного элемента в матрице.

  10. Работа с динамическими переменными. Динамические массивы.

  11. Файловый ввод-вывод. Работа с текстовыми и двоичными файлами.

  12. Микропроцессор Intel х86. Регистры. Команды обмена данными. Команды работы со стеком.

  13. Микропроцессор Intel х86. Арифметические команды. Логические команды и команды сдвига. Команды передачи управления.

  14. Микропроцессор Intel х86. Способы адресации: регистровая, непосредственная, прямая, косвенная.

Примечание. Для ответов на вопросы 2-11 следует использовать языки высокого уровня Паскаль или Си (Си++).

    1. Программное обеспечение. Основные этапы решения задач на ЭВМ. Жизненный цикл программного средства.

Лекция Соболевой

Программное обеспечение – упорядоченная последовательность команд. Управление аппаратными средствами.

Программная конфигурация – состав программного обеспечения компьютерной системы. Многие программы, работая, опираются на другие программы – межпрограммный интерфейс.

ПО распределяется на несколько уровней. Каждый вышележащий уровень повышает функциональность системы.

Б

Базовое ПО

Системное ПО

Прикладное ПО

Служебное ПО

ПО – отвечает за взаимодействие с базовыми программными средствами (ПЗУ).

Сист. ПО – обеспечивает взаимодействие прочих программ с программами БПО, обеспечивает взаимодействие с аппаратными средствами. (Ядро ОС: 1 - программы, отвечающие за взаимодействие с устройствами, 2 - средства обеспечения пользовательского интерфейса).

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

ППО – комплекс прикладных программ, с помощью которых на рабочем листе выполняется задача.

ГОСТ 19781-90

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

Программа - данные, предназначенные для управления кон­кретными компонентами системы обработки ин­формации в целях реализации определенного ал­горитма.

Книга «Информатика» /edu/zonna/3_ychebnik_11.htm#begin

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

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

2. Математическое описание задачи. Настоящий этап характеризуется математической формализацией задачи, при которой существующие соотношения между величинами, определяющими результат, выражаются посредством математических формул.

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

4. Алгоритмизация вычислительного процесса. На данном этапе составляется алгоритм решения задачи согласно действиям, задаваемым выбранным методом решения. Процесс обработки данных разбивается на отдельные относительно самостоятельные блоки, и устанавливается последовательность выполнения блоков. Разрабатывается схема алгоритма.

5. Составление программы. При составлении программы алгоритм решения задачи переводится на конкретный язык программирования. Для программирования обычно используются языки высокого уровня, поэтому составленная программа требует перевода ее на машинный язык ЭВМ. После такого перевода выполняется уже соответствующая машинная программа. 

6. Отладка программы. Отладка заключается в поиске и устранении синтаксических и логических ошибок в программе.

7. Решение задачи на ЭВМ и анализ результатов

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

А.М. Вендров. Проектирование программного обеспечения.

ЖЦ ПО – период времени, который начинается с момента принятия решения о необходимости создания ПО и заканчивается в момент его полного изъятия из эксплуатации (IEEE Std 610.12 – 1990, IEEE Standard Glossary of Software Engineering Terminology, IEEE - Institute of Electrical and Electronics Engineers).

Структура ЖЦ ПО базируется на трех группах процессов:

  • основные процессы (приобретение, поставка, разработка, эксплуатация, сопровождение);

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

  • организационные процессы (управление проектами, создание инфраструктуры проекта, определение, оценка и улучшение самого ЖЦ, обучение).

К настоящему времени наибольшее распространение получили следующие две основные модели ЖЦ:

  • каскадная модель (70-85 г.г.);

  • спиральная модель (86-90 г.г.).

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

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

1.2 Язык программирования Паскаль (Си). Структура программы на языке Паскаль (Си). Константы. Целые и вещественные типы языка Паскаль . Согласование типов. Преобразование типов. Иерархия операций в выражениях.

Основные понятия.

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

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

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


Основная структура программы.

Правила языка Паскаль предусматривают единую для всех программ форму основной структуры:

Program <Имя программы>;
<Раздел описаний>
Begin
<Тело программы>
End.

Здесь слова Program, Begin и End являются служебными. Правильное и уместное употребление этих слов является обязательным.

Угловые скобки в формате указывают на то, чтожно изначально, то тело цикла не будет выполнено ни разу. Если условие изначально истинно и в теле цикла нет действий, влияющих на истинность этого условия, то тело цикла будет выполняться бесконечное количество раз. Такая ситуация называется "зацикливанием". Прервать зациклившуюся программу может либо оператор (нажав Ctrl+C), либо аварийный останов самой программы, в случае переполнения переменной, деления на ноль и т.п., поэтому использовать структуру цикла следует с осторожностью, хорошо понимая, что многократное выполнение должно когда-нибудь заканчиваться.

На языке Pascal структура цикла "Пока" записывается следующим образом:
While <условие> Do <оператор>;

Правда, лаконично? По-русски можно прочитать так: "Пока истинно условие, выполнять оператор". Здесь, так же как в формате условного оператора, подразумевается выполнение только одного оператора. Если необходимо выполнить несколько действий, то может быть использован составной оператор. Тогда формат оператора принимает такой вид:

While <условие> Do
Begin

<оператор #1>;
<оператор #2>;
<оператор #3>;
. . .

End;

Константа - это идентификатор, обозначающий некоторую неизменную величину определенного типа. Константы, как и переменные, должны объявляться в соответствующем разделе программы.

В Турбо Паскаль применяется несколько стандартных видов констант:

  • Целочисленные константы. Могут быть определены посредством чисел, записанных в десятичном или шестнадцатиричном формате данных. Это число не должно содержать десятичной точки.

  • Вещественные константы. Могут быть определены числами, записанными в десятичном формате данных с использованием десятичной точки.

  • Символьные константы. Могут быть определены посредством некоторого символа (заключенного в апострофы).

  • Строковые константы. Могут быть определены последовательностью произвольных символов (заключенных в апострофы).

  • Типизированные константы. Представляют собой инициализиованные переменные, которые могут использоваться в программах наравне с обычными переменными. Каждой типизированной константе ставится в соответствие имя, тип и начальное значение. Например:

  • Приведем некоторые примеры использования выражений-констант в описаниях констант:

  • const
      Min = 0;
       Max = 100;
      Center = (Max - Min) div 2;
      Beta = Chr(255);
      NumChars = Ord('Z') - Ord('A') + 1;
      Message = 'Out of memory';
      ErrStr = 'Error:' + Message + '.';
      ErrPos = 80 - Length(Error) div 2;
      ErrAttr = Blink + Red * 16 + White;
      Ln10 = 2.302585092994095684;
      Ln10R = 1 / Ln10;
      Numeric = ['0'..'9'];
      Alpha = ['A'..'Z','a'..'z'];
      AlphaNum = Alpha + Numeric;

  • Целочисленные типы - обозначают множества целых чисел в различных диапазонах. Имеется пять целочисленных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти. Целочисленные типы обозначаются идентификаторами: Byte, ShortInt, Word, Integer, LongInt; их характеристики приведены в следующей таблице.

Тип 

Диапазон 

Размер в байтах 

Byte 
ShortInt 
Word
Integer 
LongInt

0 ... 255
-128 ... 127
0 ... 65535
-32768 ... 32767
-2147483648 ... 2147483647

1
1
2
2
4

Вещественные типы - обозначают множества вещественных чисел в различных диапазонах. Имеется пять вещественных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти. Вещественные типы обозначаются идентификаторами: Real, Single, Double, Extended, Comp; их характеристики приведены в следующей таблице.

Тип 

Диапазон 

Размер в байтах 

Real
Single
Double
Extended
Comp

2.9·10-39 ... 1.7·1038
1.5·10-45 ... 3.4·1038
5.0·10-324 ... 1.7·10308
3.4·10-4932 ... 1.1·10-4932
-2·1063 ... +2·1063-1

6
4
8
10
8

Логический тип (Boolean) - состоит всего из двух значений: False (ложно) и True (истинно). Слова False и True определены в языке и являются, по сути, логическими константами. Регистр букв в их написании несущественен: FALSE = false. Значения этого типа являются результатом вычислений условных и логических выражений и участвуют во всевозможных условных операторах языка.

Допустимые операции:
- присваивание;
- сравнение: <, >, >=, <=, <>, =;
- логические операции: NOT, OR, AND, XOR

Символьный тип (Char) - это тип данных, состоящих из одного символа (знака, буквы, кода). Значением типа Char может быть любой символ из набора ASCII. Если символ имеет графическое представление, то в программе он записывается заключенным в одиночные кавычки (апострофы), например:

'ж'     's'    '.'    '*'    ' '-(пробел)

Для представления самого апострофа его изображение удваивается: ''''.
Если же символ не имеет графического представления, например, символ табуляции или символ возрата каретки, то можно воспользоваться эквивалентной формой записи символьного значения, состоящего из префикса # и ASCII-кода символа:

#9     #32    #13

Допустимые операции:
- присваивание;
- сравнение: <, >, >=, <=, <>, =. Большим считается тот символ, который имеет больший ASCII-номер.

Строковый тип (String, String[n]) - этот тип данных определяет последовательности символов - строки. Параметр n определяет максимальное количество символов в строке. Если он не задан, подразумевается n=255. Значение типа "строка" в программе запиывается как последовательность символов, заключенных в одиночные кавычки (апострофы), например

'Это текстовая строка'   'This is a string'
'1234' - это тоже строка, не число
'' - пустая строка

Эквивалентность типов

Существует несколько схем для определения того, являются ли типы двух объектов эквивалентными. Две схемы, наиболее часто используемые, называются структурная эквивалентность типов и именная эквивалентность типов. В соответствии со схемой структурной эквивалентности типов два объекта относятся к одному и тому же типу только в том случае, если их компоненты имеют одинаковые типы. В соответствии со схемой именной эквивалентности типов два объекта имеют один и тот же тип только в случае их определения с использованием имени того же типа.

Большинство реализаций языка Си используют схему структурной эквивалентности типов. Однако в книге (Ritche, D.M. 1980/ The C Programming Language - Reference Manual/ AT&T Bell Laboratories, Murray Hill, N.J. 07974) вопрос об эквивалентности типов игнорируется, и при каждой реализации может быть выбрана своя схема определения эквивалентности типов. Следовательно, вполне возможно, что результаты правильно работающей программы станут неверными при замене компилятора!

Преобразование типов

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

  1. Если операция выполняется над данными двух различных типов, обе величины приводятся к высшему из двух типов. Этот процесс называется повышением типа.

  2. Последовательность имен типов, упорядоченных от высшего типа к низшему, выглядит так: double, float, long, int, short, char. Применение ключевого слова unsigned повышает ранг соответствующего типа данных со знаком.

  3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение. Данный процесс может привести к повышению типа, как описано выше, или к понижению, при котором величина приводится к типу данных, имеющему более низкий приоритет.

Повышение типа обычно происходит гладко, в то время как понижение может привести к затруднениям. Причина этого проста: все число целиком может не поместиться в элементе данных низшего типа. Переменная типа char может иметь целое значение 101, но не 22225.

Пример, приведенный ниже, иллюстрирует применение этих правил:

/*преобразования*/

int main( )

{

char ch;

int i;

float f1;

f1=i=ch='A'; /***8***/

printf("ch=%c,i=%d,f1=%2.2f\n",ch,i,f1);

ch=ch+1; /***10***/

i=f1=f1+2*ch; /***11***/

f1=2.0*ch+i; /***12***/

printf("ch=%c,i=%d,f1=%2.2f\n",ch,i,f1);

ch=2.0e30;/***14***/

printf("Теперь ch=%c\n",ch);

}

Выполнив программу "преобразования", получим следующие результаты:

ch=A,i=65,f1=65.00

ch=B,i=197,f1=329.00

Теперь ch=

Разбор программы

Строки 8 и 9: величина 'A' присваивается символьной переменной ch. Переменная i получает целое значение, являющееся преобразованием символа 'A' в целое число, т.е. 65. Переменная f1 получает значение 65.00, являющееся преобразованием числа 65 в число с плавающей точкой.

Строки 10 и 13: значение символьной переменной 'A' преобразуется в целое число 65, к которому затем добавляется 1. После этого получившееся в результате число 66 преобразуется в код символа В и помещается в переменную ch.

Строки 11 и 13: при умножении на 2 значение переменной ch преобразуется в целое число 66. При сложении с величиной переменной f1 получившееся в результате число 132 преобразуется в число с плавающей точкой. Результат 197.00 преобразуется в число целого типа и присваивается переменной i.

Строки 12 и 13: перед умножением на 2.0 значение переменной ch('B') преобразуется в число с плавающей точкой. Перед выполнением сложения величина переменной i(197) преобразуется в число с плавающей точкой, а результат 329.00 присваивается переменной f1.

Строки 14 и 15: здесь производится попытка осуществить преобразование типов в порядке убывания старшинства - переменная ch полагается равной сравнительно большому числу. Результаты оказываются неутешительными. Независимо от переполнения и усечения, которые имеют место, в итоге мы получили код, соответствующий какому-то непечатаемому знаку.

Существует еще один вид преобразования типов. Для сохранения точности вычислений при арифметических операциях все величины типа float преобразуются в данные типа double. Это существенно уменьшает ошибку округления. Конечный результат преобразуется обратно в число типа float, если это диктуется соответствующим оператором описания.

1.3. Логический тип. Ветвления. Оператор условного перехода. Полная и сокращённая форма условного оператора. Составные условия

Логические типы данных Pascal-Паскаль

В Турбо Паскале логический тип данных носит название BOOLEAN. Значением логического типа может быть одна из двух констант FALSE (ложь) или TRUE (истина). Для них справедливы правила:

Ord(false)=0

Ord(true)=1

False<true

Succ(false)=true

Pred(true)=false

Логические переменные должны быть описаны предложением:

Var <имя_переменной>: boolean;

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

Пример переменных с булевым значением:

X:=true;

y:=5>3

Логические выражения (условия) – это выражения, которые могут принимать лишь одно из двух значений: true (истина) или false (ложь). Для построения логических выражений используются операции отношения, которые обозначаются знаками: = (отношение на равенство), <> (отношение на неравенство), < (отношение меньше), > (отношение больше), <= (отношение меньше или равно), >= (отношение больше или равно).

Сложные условия составляются из простых с помощью логических операций: and (логическое «И»), or (логическое «ИЛИ») и not (логическое «НЕ»). При составлении сложных условий операнды логического выражения берутся в скобки (это важно!).

Пример логических выражений:

5>3;

2<=6;

(x<2)and(x>=0)

2*x+5<>0

При вычислении логических выражений операции выполняются в следующем порядке: not, and, or, операции отношения, арифметические операции. Если порядок выполнения операций нужно изменить, то применяют скобки.

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

Общее описание

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

Виды условных инструкций

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

Условный оператор

Условный оператор реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true. В большинстве языков программирования условный оператор начинается с ключевого слова if.

Встречаются следующие формы условного оператора:

Условный оператор с одной ветвью

if условие then команды end

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

Условный оператор с двумя ветвями

if условие then команды1 else команды2 end

Здесь при истинности условия выполняются команды1 при ложности — команды2. При необходимости проверить последовательно несколько условий возможно каскадирование условных операторов:

if условие1

then команды1

else if условие2 then команды2

else if условие3 then команды3

...

else if условиеN-1 then командыN-1

else командыN end;

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

Условный оператор с несколькими условиями

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

if условие1 then команды1

else if условие2 then команды2

...

else командыN end;

порядок выполнения этого оператора в точности соответствует вышеприведённому каскаду простых операторов if-then-else.



Скачать документ

Похожие документы:

  1. Лекция Соболевой (1)

    Лекция
    Язык программирования Паскаль (Си). Структура программы на языке Паскаль (Си). Константы. Целые и вещественные типы языка Паскаль . Согласование типов.
  2. Лекции по Истории и методологии биологии Основная литература: История биология (с древнейших времен до наших дней)

    Лекции
    Часть I. Первоначальные представления о живойприроде и первые попытки научных обобщений1. Биологические представления в древности1.1. Накопление сведений о растениях и животных в первобытном обществе1.
  3. Лекция 18 восстановительный период математического образования

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

    Лекции
    Основные определения. Классификация квазилинейных уравнений в частных производных второго порядка. Уравнения: волновое, теплопроводности, Лапласа и описываемые ими физические процессы.
  5. Лекции Число часов (2)

    Лекции
    Основные определения. Классификация квазилинейных уравнений в частных производных второго порядка. Уравнения: волновое, теплопроводности, Лапласа и описываемые ими физические процессы.

Другие похожие документы..