Что такое переменная в паскале определение

Переменная

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

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

Дискретные (можно перечислить возможные значения):

Вещественные (real, double, extended) — служат для представления действительных чисел с ограниченной точностью.

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

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

При выполнении оператора программа будет приостановлена, пока пользователь не наберет на клавиатуре значения и не нажмет клавишу «Enter». Затем введенные значения будут помещены в переменные, указанные как параметры процедуры ввода. Например, при выполнении оператора

компьютер будет ожидать ввода двух значений, которые затем будут помещены в переменные a и b.

Операторы read и readln отличаются тем, что во втором случае после ввода данных будет переведена строка, т.е. последующие сообщения компьютера будут выводиться с новой строки.

Оператор вывода нужен, чтобы компьютер показал результаты работы программы или какие-либо вспомогательные сообщения. В программе на Pascal он записывается следующим образом:

При выполнении оператора вычисляются значения выражений, после чего эти значения выводятся на экран монитора. Например, при выполнении оператора

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

Операторы write и writeln отличаются тем, что во втором случае после вывода данных будет переведена строка, т.е. последующие сообщения компьютера будут выводиться с новой строки.

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

Тип переменной должен совпадать с типом выражения либо быть «более широким» совместимым (т.е. вещественной переменной можно присвоить значение целого выражения; строковой переменной можно присвоить значение символьного выражения).

Компьютер сначала вычисляет значение выражения в правой части оператора присваивания, затем помещает его в переменную, указанную слева от символа присваивания «:=».

Например, при выполнении оператора

переменная x получит значение суммы переменных a и b. При выполнении оператора

значение переменной n увеличится на единицу.

Запомните! При присваивании переменной нового значения старое будет потеряно безвозвратно. Например, после выполнения операторов a := b;

обе переменные будут иметь одинаковые значения, равные тому, которое имела переменная b.

Рассмотрим, как составить простую программу, выполняющую какие-либо вычисления. Для этого нам нужно:

Рассмотрим простейший пример.

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

1) Определим исходные данные и результаты задачи. В данном случае они явно указаны в условии: исходная величина — радиус, результаты — длина окружности и площадь круга. Используем для них традиционные обозначения: R, L и S, соответственно. Все эти переменные могут принимать как целые, так и дробные числовые значения, поэтому следует использовать вещественный тип данных, например, Real.

2) Математически задача описывается известными формулами:

3) Алгоритм в данном случае предельно прост:

4) При вычислениях нам (точнее, компьютеру) потребуется значение π. Вообще говоря, практически все реализации Pascal имеют встроенную константу PI, но мы объявим подобную константу самостоятельно.

Источник

Pascal. Переменные.

В этом уроке речь пойдёт о переменных в языке Pascal. Давайте попробуем на образах понять, что же такое переменная.

Переменная представляет собой «ящик», в который мы можем что-то положить, что-то заменить и что-то удалить, и у этого ящика есть какой-то размер, получается в него может поместится далеко не всё.

Мы можем что-то достать из ящика и показать это, потом положить обратно.

Получается — переменная своеобразный ящик, с которым можно работать.

Насчёт содержимого ящика: в зависимости от типа ящика, можно положить в него различные предметы.

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

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

Если давать определение как в умных книжках, то

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

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

Все переменные в языке Паскаль ( Pascal — как Вам удобнее ) должны быть объявлены в разделе — var.

До этого мы говорили о структуре Паскаль, и там мы упоминали об этом разделе.

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

Мы должны сначала написать слово — var — это зарезервированное слово — поэтому его можно использовать только в объявлении переменных.

После слова var мы можем объявлять переменные, что мы имеем в виду под словом объявлять — в программе в разделе var, если он есть в программе, будут считываться все переменные и их типы, после в памяти будут выделены ячейки с определёнными типами, и нашим переменным будут присвоены адресы к этим ячейкам ( областям ) памяти, после чего в них можно будет записывать именно те данные, которые будут соответствовать типу переменных.

И так, насчёт объявления переменных, пишем var, после перечисляем названия переменных на английском языке через запятую, после последней переменной ставится двоеточие и пишется тип этих переменных. Вот пример:

Источник

Урок 1 — Переменные и константы. Первая программа

В этом уроке рассмотрим:

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

1 Структура программы на Паскаль

PROGRAM имя программы;
(английскими буквами, одно слово. Хотите глубже? То необходимо воспользоваться правилами написания идентификаторов )

USES подключаемые библиотеки (модули);
(дополнительные возможности, их можно подключать к программе в этой строке)

LABEL список меток;
(из одного места программы «прыгать» в другое)

CONST раздел описания констант;
(постоянные величины, их нельзя изменять)

TYPE описание типов переменных;

VAR определение глобальных переменных;
(описание всех переменных величин, которые в программе могут изменяться)

основной блок программы

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

Данная программа ни чего не делает, так как в ней нет ни одного оператора.

2 Пример программы на Pascal

Результатом данный программы будет вывод на экран строки «Hello, World!».

Запустите Turbo Pascal и перепишите исходный код программы. Теперь запустите программу, это можно сделать зажав сочетание клавиш Ctrl+F9. Результат выполнения программы всегда можно посмотреть зажав сочетание клавиш Alt+F5.

3 Константы и переменные. Примеры

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

3.1 Константы

Те переменные, которые не изменяются, называются константами. Различают следующие типы констант:

‘Pascal programming language’

Рассмотрим программу «Hello world!» с использованием константы.

В данном случае мы объявили константу hello равную значению ‘Привет, ‘. Далее в программе достаточно в нужном месте подставить эту константу. Теперь если нам вдруг понадобиться вместо программы, которая здоровается, сделать программу, которая прощается, достаточно в начале программы поменять «Привет, » на «До свидания, » и программа будет прощаться с пользователем.

Если Вы обратили внимание, то в примере у константы не указан явно не указан тип, такие константы называются Обычными константами. Тип обычных констант определяется по их значению.

Помимо обычных констант существуют Типизированные константы. Тип таких констант объявляется явно:

Дополнительно хочется обратить внимание на апострафы в константах. Если Вам в константе понадобится использовать апострофы, то просто продублируйте их:

3.2 Переменные в Pascal

Для хранения данных, полученных от пользователя, в программе вводятся переменные. К примеру для того, чтобы передать программе имя какого-то человека нам нужно в коде программы записать строчку:

Хочу обратить Ваше внимание на тот факт, что все идентификаторы(переменные, название программы) в коде Turbo Pascal могут состоять исключительно из символов латинского алфавита (A-Z, a-z), цифр (0-9) и символа нижнего подчеркивания («_»). Также идентификаторы не должны начинаться с цифр.

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

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

4 Справочная информация по типам данных

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

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

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

4.1 Целочисленный тип

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

ТипДиапазонРазмер в байтах
shortint-128…1271
integer-32 768…32 7672
longint-2 147 483 648…2 147 483 6474
byte0…2551
word0…65 5352

Объявить целочисленную переменную можно в разделе Var, например:
Var book: word;

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

4.2 Вещественный тип

В Паскале бывают следующие вещественные типы данных:

ТипДиапазонПамять, байтКоличество цифр
Real2.9e-39 … 1.7e38611-12
Single1.5e-45 … 3.4e3847-8
Double5.0e-324 …1.7e308815-16
Extended3.4e-4932 … 1.1e4931019-20
Comp-9.2e63 … (9.2e63)-1819-20

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

4.3 Логический тип

4.4 Символьный тип

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

К величинам символьного типа данных применимы операции отношения и следующие функции:

4.5 Строковый тип

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

Var A: (Monday, Tuesday);

4.6 Интервальный тип данных

Когда необходимо задать какой то диапазон значений, то в таких ситуациях применяется интервальный тип данных. Для объявления используется конструкция m..n, где m – минимальное (начальное) значение, а n – максимально (конечное); здесь m и n являются константами, которые могут быть целого, символьного, перечисляемого или логического типа. Описываться величины интервального типа могут как в разделе типов, так и в разделе описания переменных.

5 Pascal. Операторы ввода-вывода

5.1 Ввод данных

Процедура ввода данных с клавиатуры – Read (читать). Ее можно представить так:

Для перевода каретки после выполнения оператора Read на новую строку, следует прибавить окончание ln :

Также можно не указывать список ввода:

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

5.2 Вывод данных

Элементами списка вывода являются величины различных типов, в том числе выражения и строки, отделенные друг от друга запятыми, например:

Здесь x и y – параметры, заключенные в круглые скобки. Возможно использование оператора вывода и без параметров:

Недостаточно просто вывести значение на экран, нужно также сделать это как можно корректнее. Допустим нам нужно в одном операторе Write вывести значения нескольких переменных ( a=1, b=2, c=3 ). Пишем:

1) Вписать пробел вручную, например:

2) Воспользоваться возможностью форматированного вывода:

Двоеточие относиться к переменной, после которой оно следует, и говорит программе, что при выводе (переменной) нужно выделить место, заданное целым числом (в нашем случае это 2), т. е. под значения, хранящиеся в переменных b и c отводиться две клетки, сами они выведутся «прижатыми» к правому краю.

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

Результат выполнения: 32.101

Формат 5 означает, что всего под число 32.1012 выделено 5 клеток, а 2 – из этих пяти под дробную часть отводиться 2 клетки.

6 Выражения с тандартные функции

6.1 Стандартные функции Pascal

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

ФункцияНазначение
ABS(x)Вычисление абсолютного значения x: |х|
SQR(x)Вычисление квадрата x: x*x
SIN(x)Вычисление синуса x: sin x
COS(x)Вычисление косинуса x: cos x
ARCTAN(x)Вычисление арктангенса x: arctg x
EXP(x)Вычисление экспоненты (числа Е) в степени x
EXP10(x)Вычисление 10 в степени x
LN(x)Вычисление натурального логарифма x
LOG(x)Вычисление десятичного логарифма x
SQRT(x)Вычисление квадратного корня из x
A DIV BВычисление частного при делении А на В с отбрасыванием остатка
A MOD BНахождение остатка от делении А на В
TRUNC(x)Нахождение целой части x
RANDOM(x)Псевдослучайное число в интервале [0, x]
ROUND(x)Округление значения x в сторону ближайшего целого
ODD(x)Проверяет аргумент на нечетность. Результат TRUE, если аргумент нечетный, FALSE – если четный.
ORD(x)Возвращает порядковый номер аргумента и, как следствие, преобразует величину порядкового типа в величину целого типа.
CHR(x)Определение символа языка Паскаль по его порядковому номеру
SUCC(x)Нахождение элемента, идущего после данного в перечне допустимых элементов
PRED(x)Нахождение элемента, идущего перед данным в перечне допустимых элементов
FRAC(X)Возвращает дробную часть x
INT(X)Возвращает целую часть x
PiЗначение математической постоянной π
EOF(x)Возвращает TRUE, если файл находится в стоянии “конец файла”, иначе FALSE, если нет конца файла

6.2 Выражения в Pascal

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

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

Такое логическое выражение возвращает истину, лишь в том случае, когда истинны оба выражения, т. е. если a входит в диапазон от 1 до 20 включительно. Стоит обратить внимание на скобки, здесь они необходимы для изменения приоритета, так как у операторов сравнения он низший.

3) (a+3>0) and (a+3 1) and (b

Условие вернет истину, тогда когда истинными будут два условия слева или справа от OR, а также если они оба будут истинными.

Логическая операция OR (или) суть дизъюнкция в логики и поэтому имеет следующую таблицу истинности:

XYX or Y
000
011
101
111

Ложь имеет место только когда X и Y ложны (нули). В том случае, чтобы истина возвращалась только тогда, когда одно из условий верно следует применить оператор XOR (исключающее или):

(a+3>0) and (a+3 1) and (b

В Pascal нет функции возведения числа в степень (кроме степени 2), поэтому существует два пути:

1 — умножать число само на себя, какое то количество раз;

2 — воспользоваться функциями экспоненты и натурального логарифма.

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

Источник

Основные понятия и операторы языка Паскаль

Основные понятия и операторы языка Паскаль

Сайт:Электронные курсы ТПУ
Курс:Информационные технологии 3
Книга:Основные понятия и операторы языка Паскаль
Напечатано::Гость
Дата:Пятница, 24 Декабрь 2021, 23:51

Оглавление

ВВЕДЕНИЕ

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

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

Язык Турбо Паскаль является классическим языком программирования, широко применяемым в инженерных расчётах. Его изучение позволяет сформировать у студентов особый вид мышления – алгоритмический. Студентам, успешно овладевшим этим языком, не составит особого труда в будущей своей трудовой деятельности применять свои знания и составлять программы не только на языке Паскаль, но и на других языках программирования. Особенно важным является то, что знание языка Паскаль нужно для составления программ в среде Windows при помощи прикладного пакета Delphi, всё более популярного в последнее время.

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

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

1. ОСНОВНЫЕ ПОНЯТИЯ СИСТЕМЫ ПРОГРАММИРОВАНИЯ ТУРБО ПАСКАЛЬ

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

Необходимо также уметь упорядочивать команды так, чтобы:

Таким образом, нужно уметь использовать семь основных элементов программирования – ввод, данные, операции, вывод, условное выполнение, циклы и подпрограммы – и на их основе строить программы.

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

Основные файлы пакета Турбо Паскаль:

Для работы в графическом режиме необходимы Graph.tru – модуль с графическими процедурами и функциями Турбо Паскаля, несколько файлов с расширением *.BGI – драйверы различных типов видеосистем ПК, несколько файлов с расширением *.CHR, содержащих векторные шрифты.

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

В рабочем окне осуществляется набор текста программы, запуск же происходит следующим образом: выход в меню, выбор пункта Run – Run.

Для того чтобы сохранить программу, необходимо: выйти в меню, выбрать File – Save (Save as …), в появившемся окне ввести имя файла и нажать клавишу Enter.

Выход из системы программирования: выход в меню, пункт File – Exit.

1.1. Алфавит и словарь языка Паскаль

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

Алфавит Паскаля составляют:

Неделимые последовательности знаков алфавита образуют слова, отделенные друг от друга разделителями. Ими могут быть пробел, комментарий или символ конца строки. Словарь Паскаля можно разделить на три группы слов: зарезервированные слова, стандартные идентификаторы и идентификаторы пользователя.

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

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

Некоторые зарезервированные слова версии Турбо Паскаль.

Остаток от деления

До тех пор, пока не выполнится

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

1.1.1. Величины в Паскале

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

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

Кроме констант и переменных, существуют так называемые типизированные константы, которые являются как бы промежуточным звеном между переменными и константами (в данном пособии не рассматриваются. Рекомендуется дополнительная литература, например, [3]).

1.1.2. Структура программы

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

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

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

Любой элемент данного списка в программе может отсутствовать.

Данный раздел начинается со служебного слова Begin и заканчивается служебным словом End. В нём задаются действия над объектами программы, введенными в разделе описаний. Операторы, посредством которых эти действия производятся, разделяются точкой с запятой. После последнего слова End ставится точка.

Для лучшего восприятия текста программы и поиска ошибок рекомендуется следующая схема:

1.2. Типы данных

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

Представим типы данных в виде схемы:

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *