Знакомство с языком программирования Паскаль

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

Время урока: 2 урока по 40 минут
Урок 1: Знакомство с языком программирования (теория)
Урок 2: Знакомство с языком программирования (практика)

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

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

Задачи:
Образовательные
Воспитательные
Развивающие

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


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

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

Форма урока:
Фронтальная и индивидуальная

Вид урока: объяснительно-иллюстративный, частично-поисковый и репродуктивный.

Оборудование: используется оборудование кабинета информатики

Ход урока
Организационный момент (сообщается учащимся тема урока, содержание урока, план урока);
Повторение ранее изученного материала
Мотивация
Изучение нового материала
Закрепление нового материала
Подведение итогов
Домашнее задание

Ход урока
Деятельность учителя
Деятельность учащихся

Организационный момент

Приветствие класса.
Контроль отсутствующих.

Формулировка темы и цели урока.
Проверка состояния своего рабочего места.

Учащиеся слушают учителя.

Повторение ранее изученного материала

Учитель задает вопросы всему классу.




Что такое базовые алгоритмические структуры?


Какие типы алгоритмов Вам известны?


В чем заключается суть метода последовательной детализации (последовательного уточнения) при составлении алгоритма задачи? Объясните, используя понятие СКИ (Система Команд Исполнителя).




Как называется алгоритм, который описывает решение какой-либо подзадачи – части основной задачи, оформленной как самостоятельная задача?

Как называются эти “крупные” блоки в основном алгоритме?

Мотивация
- “Беседы с компьютером”, “диалог с ЭВМ”... Вам, наверное, не раз приходилось читать или слышать подобные словосочетания. Действительно, с компьютером можно общаться, как с книгой, как с коллегой, как с собеседником. Разные люди общаются с компьютером по-разному: кто-то любит поиграть, кому-то необходимо отыскать нужную информацию, кому-то пройти психологическое тестирование. Словом, существуют самые разнообразные способы общения человека с компьютером и определяются они, как Вы уже знаете, тем, какая программа “работает” в компьютере. А для того, чтобы эту программу создать, нужен профессионал - программист. У программистов есть свои специальные способы общения с ЭВМ, так называемые языки программирования. Если обратиться к истории развития вычислительной техники, то она уведет нас к временам глубокой древности, когда люди придумали простейшие инструменты для ускорения и упрощения вычислений. Это были палочки, камни, а затем абак и счеты. Все эти средства не столько ускоряли счет, сколько помогали запоминать промежуточные результаты, т. е., выражаясь современным языком, выполняли роль “оперативной памяти”, а роль “процессора” выполнял сам человек. Позднее появились механические, а сравнительно недавно и электронные вычислительные устройства, включающие в себя и процессор, и электронную память.
- Сегодня мы познакомимся с программированием на одном из языке, языке Паскаль. Для начала вспомним Историю
Механические вычисления осуществлялись так: для выполнения каждой операции человек должен был крутить ручку или нажимать кнопки. Когда же появилась электронная память, американский математик
- Вспомним, как это зовут?
Да, этот принцип используется во всех современных компьютерах и микропроцессорных системах и носит название принципа фон Неймана.
По мере того как росла мощность вычислительных машин, увеличивалась и сложность программ. Появилась профессия программиста, т. е. появились люди, основным занятием которых было составление программ для ЭВМ. Для облегчения и ускорения этой работы было предложено кодировать каждую команду не цифрами, а буквами, например: ADD - сложить, SUB - вычесть и т.п. (сокращения от соответствующих английских слов). Так человеку удобнее запоминать большое количество команд, а для “перевода” такой программы в “привычный” для ЭВМ цифровой вид можно написать несложную программу. Такие способы кодирования команд получили название языков программирования “низкого уровня”. Это нововведение несколько облегчило труд программистов, но создание больших программ и целых программных комплексов оставалось делом чрезвычайно трудоемким. Среди программистов появились специалисты по созданию алгоритмов и “кодировщики” - люди, которые занимались переводом алгоритмов, записанных, как правило, в виде блок-схем, на языки низкого уровня. Следующим шагом была идея передать функции “кодировщика” самой ЭВМ. Для этого потребовалось разработать правила записи программ, с одной стороны, удобные для человека, похожие на естественный человеческий язык, с другой стороны, достаточно строгие, чтобы программы можно было однозначно перевести на язык ЭВМ. Так возникли языки программирования “высокого уровня”. Для перевода программ с таких языков на “машинный” были созданы специальные программы, называемые трансляторами (от английского translate - переводить).
Можно ли “заставить” компьютер понимать “человеческий” язык (русский, английский и т.п.), иными словами, можно ли создать транслятор, который мог бы переводить с естественного языка на язык машинных команд? Различные языки программирования обладают разной степенью похожести на естественный, однако обязательным требованием для языка программирования является определенность и однозначность. Это значит, что каждая “фраза”, написанная на таком языке, должна быть “понята” и исполнена компьютером, причем всегда одинаково. Естественные же человеческие языки таким свойством не обладают. Сказанное или написанное понимается часто по-разному в зависимости от контекста, не говоря уже о том, что далеко не каждая фраза требует от собеседника каких-либо действий.
Первым языком программирования “высокого уровня” был FORTRAN (сокращение от английских слов FORmula TRANslation - переводчик формул). Вслед за ним появилось множество других языков, в настоящее время их насчитывается несколько сотен. Каждый из них предназначен для решения определенного круга задач, например: BASIC и FORTRAN - для вычислений, PROLOG - для создания систем искусственного интеллекта, Pascal - для обучения программированию, COBOL - для обработки больших объемов данных.
Одним из современных широко распространенных языков программирования является Pascal. Он был создан на рубеже 1960-1970-х годов швейцарским ученым Никлаусом Виртом. В языке Pascal сосредоточены многие лучшие черты языков-предшественников.
Учащиеся отвечают на поставленные учителем вопросы, в случае неверного ответа другой учащийся вносит изменения.

Следование, Ветвление, Цикл “пока” (с предусловием).

Линейный, разветвляющийся, циклический.

Задача решается в “крупных” блоках (командах), с применением команд, которые не входят в СКИ; затем постепенно уточняется, детализируется, пока не будет сведена к использованию только команд СКИ.

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

Этим средством было применение в программе процедур.




Учащиеся внимательно слушают учителя



























Учащиеся открывают тетради







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
























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



Изучение нового материала

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

- Современное программирование фактически является промышленной технологией, с помощью которой создаются программы и компьютерные системы. Труд этот чаще всего коллективный, хотя не исключены некоторые успехи индивидуальных разработчиков. Например, MS Windows и MS Office – это результаты нескольких сотен профессиональных программистов, аналитиков, проектировщиков, менеджеров и дизайнеров фирмы Microsoft. А, скажем, архиватор WinRAR реализовал индивидуальный разработчик Евгений Рошал.
Поэтому сделав выводы, схематически технология создания программ проходит следующий ряд этапов:

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









Учащиеся записывают в тетрадь этапы создания программ:
- постановка задачи;
- проектирование программы;
- программирование;
- отладка и тестирование программы.

- Давайте более подробно познакомимся со средой PascalABC, для этого садимся за компьютеры и приступим к практической работе.
Запустим программу Паскаль АВС

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

Учащиеся знакомятся со средой ПаскальАВС:
- Блок инструментов по работе с файлами
- Блок инструментов по работе с текстовыми фрагментами
- Блок инструментов отладки
- Запуск и остановка работы программы
- Закладки с названием программы














Учащиеся открывают DEMO и анализируют, сравнивают
Записывают в тетради свои наблюдения и задают вопросы учителю.

Практические работы:
DEMO 0


DEMO 1


DEMO 2


DEMO 3


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




Приложение1





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






Приложение 2




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





Приложение 3



Учащиеся знакомятся с диалогом в графическом приложении

Систематизация нового материала
(Учитель предлагает обсудить новый материала):
Итак, какие выводы можно сделать. Вопросы:
Что реализует блок операторов (основной) программы?

Что реализует блок операторов процедуры (функции)?

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


Кто дополнит предыдущий ответ?



Что можно сказать о механизме обмена данными между основной программой и процедурой?










С помощью каких данных основная программа получает результаты работы процедуры?


Что можно сказать о количестве, типе и порядке следования фактических и формальных параметров?



У кого появились вопросы по этому материалу?


(учитель сопровождает объяснение с помощью проектора)
Процедура может принимать/возвращать любое количество любых переменных (ограничение на общий размер - 64 Кбайт, как и для глобальных переменных), или совсем не обмениваться данными. Пример - вывод на экран текста стихотворения.
Возврат к плану: 13 LINK \l "_Hlk39423282" \s "1,2288,2299,0,,Этапы урока" 14Этапы урока15 13 LINK \l "_Hlk37596086" \s "1,2289,2300,0,,Этапы урока" 14 15

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

Алгоритм решения задачи


Вспомогательный алгоритм решения задачи

Общее – в структуре, отличие – блок операторов процедуры должен заканчиваться символом “;”, основной программы – символом “.”.

Процедура должна всегда иметь заголовок, программа может не иметь заголовка.

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

Глобальных переменных, а также формальных параметров, перед которыми стоит служебное слово var.

Количество, тип и порядок следования фактических и формальных параметров должны совпадать.

Сколько и какие величины могут быть аргументами процедуры?

Учащиеся смотрят на экран, слушают.

Закрепление нового материала (разноуровневая работа, работа в парах)

Перед учащимися ставится проблема (дается формулировка задачи):
Задача.
Найти площадь земельного участка, имеющего форму N-угольника.
Дифференциация по уровню сложности:
а) простой вариант (N=4, дается текст процедуры),
в) средней сложности (N=5, текста процедуры нет),
с) повышенной сложности (любое N).

Сделайте чертеж земельного участка на доске.

(после выполнения чертежа учащимся):
- Разделите многоугольник на треугольники.

Какие математические формулы потребуются для решения задачи? Запишите их на доске.

Какая формула нужна в случае, если известны координаты вершин многоугольника?

Остановимся на первом варианте – вычислении площадей треугольников по формуле Герона.
Какие исходные данные нужны для решения задачи?

Скажите, достаточно ли этих данных для решения задачи?


Следите за тем, какие исходные данные будут передаваться из основной программы в подпрограмму и наоборот, из подпрограммы в основную программу, чтобы вычислить общую (суммарную) площадь многоугольника? Поработайте над решением задачи в парах. Напишите одно решение задачи на двоих.
Заголовок процедуры для варианта а):
Procedure Square (x, y, z : real; var S : real);
вызовы процедуры:
Square (a, b, f, S1); {S1 – площадь 1-го треугольника}
Square (c, d, f, S2); {S2 – площадь 2-го треугольника}
a, b, c, d-стороны, f - диагональ 4-угольника.

Одно решение каждого из вариантов (на  усмотрение учителя) представляется всему классу (возможен разбор типичных ошибок учащихся). Отмечаются лучшие работы.
Возврат к плану: 13 LINK \l "_Hlk39423298" \s "1,2288,2299,0,,Этапы урока" 14Этапы урока15 13 LINK \l "_Hlk37596146" \s "1,2289,2300,0,,Этапы урока" 14 15



Учащиеся слушают, задают вопросы по условию задачи, выбирают вариант решения задачи а), в) или с), и затем записывают в тетрадь свой вариант задачи.


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

Формула Герона.
(пишет формулу)

- Формула расстояния между двумя точками, заданными координатами.

- Длины сторон многоугольника.



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

Обсуждают решение в парах, затем один из пары (по желанию) сдает работу учителю. Возможны разные процедуры в вариантах b) и c), в том числе тот (не самый лучший), при котором в процедуре и вычисляется площадь треугольника, и суммируется к предыдущему значению переменной S, в которой будет результат - площадь многоугольника. Здесь весь “груз” вычислений находится в процедуре.

Вносят исправления в свои тетради в случае неверного решения, записывают правильный вариант решения задачи для варианта с) и делают выводы.

Решение задач на компьютере (разноуровневая работа)

Разноуровневая работа по решению задач.
Предлагает карточки с условиями задач разной сложности (13 LINK \l "_Hlk37592947" \s "1,17263,17275,90,,Приложение 4" 14Приложение 415).
Напутствует:
13 LINK \l "_Hlk37594206" \s "1,17401,17417,0,,Описание функции" 14Описание функции15 давалось на первом уроке,
Не забудьте про то, что знаменатель дроби не должен быть равен 0, а также про тип данных.
Исходные данные для тестирования программ готовьте самостоятельно.
объединяются в малые группы (от 2 до 4 чел.), решают задачу:
разрабатывают алгоритм решения, составляют программу, выполняют программу на компьютере, проводят тестирование программы.

Анализ результатов (показ программ с использованием проектора)

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

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


Записывают условие задачи в тетрадь.

Подведение итогов

Обобщение деятельности учащихся на уроке (степень выполнения поставленных задач). Выставление оценок.
Возврат к плану: 13 LINK \l "_Hlk39423311" \s "1,2288,2299,0,,Этапы урока" 14Этапы урока15 13 LINK \l "_Hlk37596194" \s "1,2289,2300,0,,Этапы урока" 14 15
Формулировка вывода по уроку.



Приложение 1
Механизм обмена данными основной программы и процедуры
Приложение 2
Процедуры и функции в Паскале

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



Общий вид (формат) процедуры
Блок содержит локальные для процедуры описания и раздел операторов. В качестве результата процедура может возвращать в вызывающую программу множество простых или структурированных величин или не возвращать никаких значений. Среди параметров процедуры указываются как аргументы, так и результаты. Параметры-результаты должны быть обязательно параметрами-переменными (описанными после служебного слова Var).
Обращение к процедуре:
<имя процедуры> (<фактические параметры >); отдельный оператор.
Общий вид (формат) функции
Тип функции может быть только простым типом (в Турбо-Паскале исключением из этого правила является тип string). Блок содержит локальные для функции описания и раздел операторов, который должен содержать по крайней мере один оператор присваивания с именем функции в левой части его.
Обращение к функции: <имя функции>(<фактические параметры>) - операнд в выражении.
Обмен данными между вызывающей программой и подпрограммой может происходить не только через параметры, но и через глобальные переменные.
Количество, типы и порядок следования формальных и фактических параметров должны совпадать или быть совместимыми. Подпрограмма может не иметь параметров.
Возврат к плану: 13 LINK \l "_Hlk39423470" \s "1,2288,2299,0,,Этапы урока" 14Этапы урока15 13 LINK \l "_Hlk37596393" \s "1,2289,2300,0,,Этапы урока" 14 15
Приложение 3
Примеры функций и процедур
Пример 1.
Вычислить разность двух простых дробей: a/b-c/d (a, b, с, d натуральные числа). Результат получить в виде простой несократимой дроби e/f.
Решение. Следует вычислить числитель и знаменатель по правилам вычитания дробей, и сократить их на наибольший общий делитель (НОД). Вычисление НОД двух чисел оформим в виде процедуры, используя известный в математике алгоритм Евклида.

Program Drobi; {Программа вычитания дробей и сокращения результата}
var А,В,С,D,G,E,F:integer;
Procedure Nod(M, N:integer; var К:integer);
{перед именем формального параметра К (результата) служебное слово var !!! }
begin
while M<>N do {Процедура вычисления НОД}
if M>N then M:=M-N {двух натуральных чисел}
else N:=N-M; {по алгоритму Евклида}
К:=М
end;
begin {Основная программа}
write('Введите числители и знаменатели дробей:') ;
readln (А,В,С,D);
E:=A*D-B*C; F:=B*D;
if E=0 then writeln (E)
else begin
Nod(Abs(E), F, G); {Обращение к процедуре}
Е:= E div G; F:= F div G;
end;
writeln('Ответ: ', E, '/', F);
end.
Пример 2. Составить подпрограмму-функцию вычисления общего сопротивления для двух параллельно соединенных проводников.
Решение.
Описание функции на Паскале:
Function Par(X, Y: real):real;
begin
Par:=X * Y / (X + Y);
end;
Приложение 4
Карточки для работы на компьютере
Вариант 1

Вариант 2


Вариант 3


Вариант 4







Язык программирования.
Для представления алгоритма в виде, понятном компьютеру, служат языки программирования. Сначала разрабатывается алгоритм действий, а потом он записывается на одном из таких языков. В итоге получается текст программы - полное, законченное и детальное описание алгоритма на языке программирования. Затем этот текст программы специальными служебными приложениями, которые называются трансляторами, либо переводится в машинный код (язык нулей и единиц), либо исполняется.
Транслятор средство для преобразования текстов из одного языка, понятного человеку, в другой язык, «понятный» компьютеру. Трансляторы бывают двух типов интерпретаторы и компиляторы. Отличие между ними заключается в том, что интерпретатор последовательно анализирует и исполняет каждую строку программы, а компилятор проводит полный анализ написанной программы и формирует уже готовый к исполнению машинный код.
Языки программирования - искусственные языки. От естественных они отличаются ограниченным числом "слов", значение которых понятно транслятору, и очень строгими правилами записи команд (операторов).
Для написания текста программы можно использовать обычный текстовый редактор (например, Блокнот), а затем с помощью компилятора перевести её в машинный код, т.е. получить исполняемую программу. Но проще и удобнее пользоваться специальными интегрированными средами программирования.
На заре компьютерной эры, в 50-е годы XX века, программы писались на машинном языке и представляли собой очень длинные последовательности нулей и единиц. Составление и отладка таких программ было чрезвычайно трудоемким делом.
В 6070-е годы для облегчения труда программистов начали создаваться языки программирования высокого уровня, формальные языки, кодирующие алгоритмы в привычном для человека виде (в виде предложений). Такие языки программирования строились на основе использования определенного алфавита и строгих правил построения предложений (синтаксиса).
Наиболее широко распространенным типом языков программирования высокого уровня являются процедурные языки. В таких языках широко используются управляющие конструкции (операторы), которые позволяют закодировать различные алгоритмические структуры (линейную, ветвление, цикл).
Одним из первых процедурных языков программирования был известный всем Бейсик (Basic), созданный в 1964 году. В течение последующего времени Бейсик развивался, появлялись его различные версии (MSX-Basic, Бейсик-Агат, QBasic и др.). Другим широко распространенным языком программирования алгоритмического типа является Pascal.
Первая версия языка Паскаль была разработана швейцарским ученым Никлаусом Виртом в 1968 году. Первоначально язык предназначался для целей обучения, поскольку он является достаточно детерминированным, т.е. все подчиняется определенным правилам, исключений из которых не так много. Основные характеристики: относительно небольшое количество базовых понятий, простой синтаксис, быстрый компилятор для перевода исходных текстов в машинный код.
В 1992 г. фирма Borland International выпустила два пакета, основанных на языке Паскаль: Borland Pascal 7.0 и Turbo Pascal 7.0. Первый может работать в трех режимах - обычном и защищенном режимах MS DOS и в системе Windows. Для него необходимо порядка 30 Мбайт на жестком диске и около 2 Мбайт оперативной памяти. Турбо Паскаль 7.0 работает только в обычном режиме MS DOS и менее требователен к характеристикам компьютера. Поскольку основные компоненты, которые мы будем рассматривать в нашем курсе, совпадают в обоих продуктах, в дальнейшем будет использоваться название Турбо Паскаль.
Пакет включает в себя алгоритмический язык программирования высокого уровня, встроенный редактор и среду, предназначенную для отладки и запуска программ. Кроме того, пакет содержит большой объем справочной информации (англоязычной). Как известно, языки программирования делятся на два типа: интерпретаторы и компиляторы. Турбо Паскаль относится к компиляторным языкам.
Благодаря языкам программирования высокого уровня, программы которые мы будем составлять, будут больше напоминать инструкции, обращенные к человеку, нежели к машине.
Однако следует иметь в виду, что в языках программирования не допускаются даже незначительные (с точки зрения человека) нарушения в правилах написания программ. Ведь даже маленькая неточность может вызвать невыполнимость программы или трудно уловимую ошибку.
В языках программирования высокого уровня программа - это перечень действий. Исполнение этих действий определено в самом языке программирования, и их принято называть операторами.
Алфавит языка программирования Турбо Паскаль.
Под алфавитом языка понимают совокупность допустимых символов. В языке Турбо Паскаль используются символы ASCII (американский стандартный код обмена информацией). Можно выделить четыре основные группы символов: символы, используемые в идентификаторах, разделители, специальные символы и неиспользуемые символы.
Идентификатор - это имя любого объекта языка. Он может состоять из латинских букв (a...z), цифр (0...9) и знака подчеркивания и не должен начинаться с цифры. Прописные и строчные буквы в идентификаторах и зарезервированных словах считаются идентичными, они различаются лишь в строковых константах. Длина идентификатора не ограничена, но значимыми являются лишь первые 63 символа.
Разделители используются для отделения друг от друга идентификаторов, чисел и зарезервированных слов. К разделителям относятся, например, пробел и комментарий. В любом месте программы, где разрешается один пробел, их можно вставить любое количество.
Комментарии заключаются либо в фигурные скобки { комментарий 1 }, либо в символы (* комментарий 2 *) и могут занимать любое количество строк.
К специальным знакам относятся знаки пунктуации (. () [] .. : ;), знаки операций и зарезервированные слова. Знаки операций могут быть как символьные (+, -, *, / и т.д.), так и буквенными (mod, div, not). Зарезервированные слова являются служебными и не могут быть переопределены пользователем, т.е. их нельзя использовать как имена пользовательских объектов.
Неиспользуемые символы - это коды ASCII, которые используются только в комментариях и символьных строках, но не в языке. К ним относятся все русские буквы, а также символы %, &, ! и т.п.
Структура программы.
Любая программа на Паскале имеет определенную структуру:
program имя_программы;
uses
Подключение модулей
const
Раздел описания констант
label
Раздел описания меток
type
Раздел описания типов
var
Раздел описания переменнных
begin
Тело программы
end.
Начинается программа с заголовка. После заголовка на схеме представлены разделы описания констант, меток, типов, переменных, а также раздел, в котором подключаются используемые модули. Причем Турбо Паскаль вовсе не предписывает порядок в каком порядке должны идти эти разделы. Однако если в одном из разделов объявлен элемент программы, на который имеется ссылка в другом разделе, то описание, на которое имеется ссылка должно предшествовать ссылающему описанию. Например, если в разделе объявления переменных объявляется переменная того типа, который описывается в разделе описания типов, то сначала описывается тип, а затем переменная.
type
IntList = array[1..100] of Integer;
var
mylist : IntList;
Обязательной частью является лишь тело программы, которое начинается словом begin, а заканчивается словом end с точкой. Операторы в Паскале разделяются точкой запятой.
Вопросы:

· Что такое транслятор?

· Какие языки программирования вы знаете?

· Что такое оператор?

· Какую структуру имеет программа на языке Турбо Паскаль?
 
III. Практическая часть.
В качестве примера рассмотрим программу вычисления площади прямоугольника (блок-схему этого алгоритма мы записывали на прошлом занятии):
program SquareRectangle; {вычисление площади прямоугольника}
uses WinCrt;
var
a, b, s: real;
begin
write('Введите высоту: ');
readln(a);
write('Введите ширину: ');
readln(b);
s:=a*b;
writeln('Площадь равна: ',s:5:2);
end.
Программа начинается со слова program. После служебного слова program записывается имя программы. В нашей программе именем является SquareRectangle. Имя программы записывается на английском языке и задается произвольно автором программы. В конце первой строки, после имени программы стоит ";" - точка с запятой. Этот знак указывает на то, что некоторая инструкция закончена и за ней будет записана следующая инструкция. Точка с запятой является обязательным разделительным знаком в языке Паскаль.
Далее идет блок подключения модуля WinCrt (для Borland Pascal for Windows).
В следующем разделе описываются переменные. В программе используются 3 переменные (a, b, s), все они имеют тип real.
Далее в программе следует служебное, зарезервированное, слово begin (начать), которым начинается раздел операторов.
В этом разделе последовательно записываются команды, операторы, которые разделяются ";" - точкой с запятой. Они будут выполняться компьютером.
Значения переменных в нашей программе вводятся с клавиатуры. Для ввода ширины и длины используется процедура ввода readln. Подробнее о стандартных процедурах ввода и вывода мы поговорим позднее. Запустим программу и проверим ее работу.
Программа заканчивается служебным словом end, после которого стоит точка. Она является обязательной во всех паскалевских программах. Точка оповещает о конце текста программы.
Запустите программу и изучите ее работу.
Теперь исправьте программу для вычисления периметра квадрата.
Учащиеся выполняют задание.
IV. Д/з
Знать, что такое алгоритм, программа, транслятор, переменная, структура программы. Составить программу для вычисления площади треугольника по высоте и основанию.
V. Вопросы учеников.
Ответы на вопросы учащихся.
VI. Итог урока.
Подведение итога урока. Выставление оценок.
На уроке мы познакомились с тем, что такое программа, зачем нужен транслятор, что такое оператор. Познакомились со структурой программы, с понятием переменной. Написали свою небольшую программу.


Список рекомендуемой литературы
1.Алкок Д. Язык Паскаль в иллюстрациях.  М., 1991.
2.Боон К. Паскаль для всех. М., 1988.
3.Гордон Ян. Язык программирования Паскаль без секретов. Учебное пособие по программированию на ПК. Изд-во: [ Cкачайте файл, чтобы посмотреть ссылку ], 2004 г.
4.Грогоно П. Программирование   на   языке  ПАСКАЛЬ.  М., 1982.
5.Джонс Ж., Харроу К. Решение задач в системе Турбо Паскаль. М: «Финансы и статистика», 1991.
6.Немнюгин С. Турбо Паскаль: практикум. СПб: Из-во «Питер» - 2001.
7.Немнюгин С. Турбо Паскаль: учебник. СПб: Из-во «Питер» - 2000.
8.Павловская Т. А. Паскаль. Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер-Трейд, 2007.
9. Павловская Т. А. Паскаль. Программирование на языке высокого уровня: Практикум. – СПб.: Питер, 2007.
10.  Поляков Д.Б., Круглов И.Ю. Программирование в среде Турбо Паскаль (версия 5.5): Справ.-метод. пособие. М., 1992.
11. Справочник по процедурам и функциям Borland Pascal with Objects 7.0. Киев, 1993.
12.  Ускова О.Ф. Программирование на языке Паскаль. Задачник. – СПб.: Питер, 2005.
13.  Шпак Ю.А. Программирование в Turbo Pascal. Переход в Delphi. – К.: «МК-Пресс», 2006. – 416 с. 
14.  Обучающий комплекс по программированию на языке Паскаль: petrsu.karelia.ru/psu/Chairs/IMO/pascal/
15.  Система программирования PascalABC: sunschool.math.rsu.ru/pabc/

 Ответы - операторы присваивания для вариантов заданий по карточкам 13 LINK \l "_Hlk38813599" \s "1,19136,19148,90,,Приложение 4" 14Приложение 415:
вариант 1 RO := R1 + Par(R2, R3 + R4) + R5;
вариант 2 RO := Par (R1, R2) + R3 + Par (Par (R4, R5), R6);
вариант 3 RO := Par (Par (R1 + R2 + R3, R4), R5 + R6) + Par(R7, R8);
вариант 4 RO := Par (R1, Par(R2 + R3, R4)) + Par (Par (R5, R6), R7 + R8);
где RO – общее сопротивление на участке цепи,
R1, R2, R3, R4, R5, R6, R7, R8 – исходные данные.










Шаг
Шаг
Поворот
Сделай ИмяПроцедуры
Шаг

конец программы
процедура ИмяПроцедуры
прыжок
шаг
шаг
поворот

конец процедуры

Описание процедуры

Основная программа

Основная программа

Команда вызова процедуры

Имя процедуры


Возврат к плану: 13 LINK \l "_Hlk39423334" \s "1,2288,2299,0,,Этапы урока" 14Этапы урока15

Взаимное расположение описаний процедур
Правило
Любая переменная должна быть описана перед своим употреблением

Возврат к плану: 13 LINK \l "_Hlk39423359" \s "1,2288,2299,0,,Этапы урока" 14Этапы урока15

Основная программа

Подпрограмма А

Подпрограмма A1

Подпрограмма A11

Подпрограмма B

Подпрограмма B1

program Имя_Основной_Программы;
const .... Описание
type ..... глобальных
var ...... данных
(* описание процедуры А*)
procedure A; (* Имя_Процедуры *)
const ..... Описание
type ..... локальных
var ...... данных
begin (* Вспомогательный алгоритм *)
(* операторы *)
end;
begin
(* ОСНОВНОЙ АЛГОРИТМ *)
(* операторы *)
A; (* вызов подпрограммы A*)
(* операторы *)
A; (* вызов подпрограммы A *)
(* операторы *)
A; (* вызов подпрограммы A*)

end.

Структура программы, содержащей процедуру


Подпрограмма

Процедура

Функция

Procedure <имя процедуры> (<формальные параметры - аргументы и результаты>) ;
<блок>;

Function <имя функции>(<формальные параметры - аргументы>):<тип функции> ;
<блок>;

Аргументы

Результаты

Процедура

Аргументы

Результат (одно значение)

Функция

X

Y

13EMBED Equation.31415

R2

R1

R3

R6

R4

R5

Текст программы здесь не приводится. Использование функции пользователя в программе:
RO := Par (R1, R2) + Par (R3, Par (R4, R5)) + R6;
Здесь трижды вызывается функция Par. При третьем обращении к функции Par (X, Y) в качестве фактических параметров используются: для X – переменная R3, для Y – функция Par (R4, R5).
R1, R2, R3, R4, R5, R6, RO – глобальные переменные вещественного типа.
Возврат к плану: 13 LINK \l "_Hlk39423441" \s "1,2288,2299,0,,Этапы урока" 14Этапы урока15

R2

R1

R3

R5

R4

R2

R1

R4

R6

R5

R3

R2

R1

R3

R4

R5

R7

R8

R6

R2

R1

R3

R5

R6

R4

R8

R7



° 1
·t
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·ѓ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·›
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·°
·
·8
·
·
·
·
·°
·
·
·
·
·
·°
·@
·
·
·а
·
·!
·@
·Ђ
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·‡
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·°
·@
·D
·
·
·
·@
·Ђ
·
·
·
·
·@
·Ђ
·
·
·
·
·
·Ѓ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·о
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·!
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·г
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·†
·
·
·
·
·
·
·°
·@
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·@
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·»
·@
·Ђ
·…
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·°
·@
·B
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·@
·Ђ
·
·
·
·Ѓ
·
·
·
·
·
·
·
·
·
·°
·@
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·°
·
·
·
·
·°
·@
·
·
·
·
·
·
·Ђ
·
·
·
·а
·
·
·
·
·°
·
·
·
·
·
·
·@
·Ђ
·Дp
·
·
·
·
·
·°
·
·
·
·
·°
·@
·
·
·8
·
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·°
·‚
·
·
·°
·@
·
·
·
·
·
·
·Ђ
·
·
·
·A
·
·
·
·°
·
·
·а
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·°
·Ыp
·
·Ї
·@
·Ђ
·
·
·
·
·Ђ
·
·
·
·
·8
·
·
·
·°
·@
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·»
·@
·Ђ
·…
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·°
·@
·B
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·@
·Ђ
·
·
·
·Ѓ
·
·
·
·
·
·
·
·
·
·°
·@
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·°
·
·
·
·
·°
·@
·
·
·
·
·
·
·Ђ
·
·
·
·а
·
·
·
·
·°
·
·
·
·
·
·
·@
·Ђ
·Дp
·
·
·
·
·
·°
·
·
·
·
·°
·@
·
·
·8
·
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·°
·‚
·
·
·°
·@
·
·
·
·
·
·
·Ђ
·
·
·
·A
·
·
·
·°
·
·
·а
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·°
·Ыp
·
·Ї
·@
·Ђ
·
·
·
·
·Ђ
·
·
·
·
·8
·
·
·
·°
·@
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·°
·
·
·
·»
·@
·Ђ
·…
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·3в
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·†
·
·
·
·
·
·
·
·
·
·а
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ь
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Х
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·Ы
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·ы
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ч
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ъ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·{
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ж
·@
·
·}
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·!
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·°
·@
·
·
·
·
·
·
·
·‚
·
·
·
·
·
·
·
·Р
·Ђ
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·ё
·@
·Ђ
·€
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·0
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·v
·
·
·
·
·
·
·
·
·
·
·
·„
·°
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·3
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·5
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·!
·@
·Ђ
·
·
·
·
·Ш
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·Й
·@
·Ђ
·
·
·
·
·
·
·
·9
·
·
·@
·Ђ
·
·
·
·
·
·
·
·°
·@
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ж
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·!
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·A
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·9
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·“
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·/
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·в
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·’
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·&
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·а
·
·
·н
·
·
·
·C
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·X
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ъ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·м
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·;
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·П
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·g
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ф
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·f
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ю
·‹
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Є
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ъ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ў
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·A
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·k
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ц
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·B
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·H
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·z
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Щ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·>
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·+
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ь
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·л
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·J
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·&
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Є
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·я
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·<
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·y
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·14
·
·
·
·
·
·
·
·
·
·
·
·P
·
·
·
·
·д
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ј
·
·
·
·
·
·
·
·
·Я
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·>
·№
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ї
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· 
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·t
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·R
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·o
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ў
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·”
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·U
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·*
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·я
·
·
·
·
·
·
·
·
·|
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·H
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·h
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·и
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·d
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·14
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ѓ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·$
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ґ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ж
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·­
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·>
·
·
·
·
·
·
·
·
·
·
·к° Ѓ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·™
·
·
·
·
·
·
·
·
·
·„
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ф
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ё
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·“
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·‡
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·У
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·y
·
·
·
·
·
·
·
·
·
·
·
·ј
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·°
·@
·
·
·
·
·
·
·@
·Ђ
·
·ђ
·@
·Ђ
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·°
·@
·
·M
·
·
·
·
·
·
·
·
·
·
·Ж
·
·
·
·
·
·
·
·
·Ь
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·C
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·”
·
·
·Ц
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·Ю
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·g
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·J
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·t
·
·‰
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ь
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·ЂР
·
·
·
·°
·@
·Ђ
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·°
·@
·
·
·
·
·!
·@
·Ђ
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·p
·M
·
·
·
·
·К
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·_
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·?
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·ґb
·
·
·
·
·
·
·
·
·
·
·
·
·…
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·°
·)H
·
·
·
·°
·@
·
·
·
·Ђ
·
·
·
·
·$
·
·
·
·
·
·°
·
·°
·@
·Ђ
·€
·
·
·B
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·l
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·@
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·$
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·B
·Ђ
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·