• Изучение pascal abc с нуля. Паскаль (Pascal) — основы программирования для начинающих. Произведение целых чисел

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

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

    Уроки Pascal ABC

    Представленные в видеокурсе уроки Паскаль АБС основаны на разработке прикладных программ и дают практические знания. Все программы, которые вы напишите в процессе прохождения видеокурса, полностью рабочие и их можно использовать в повседневной жизни – «воды» и пустой теории в курсе нет.

    Осваиваем интерфейс редактора и пишем свои первые строчки кода.


    Изучаем логику работы с числами и конструируем таймер.


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



    Используем Паскаль для нахождения решения задачи про школьницу Анну.


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


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



    Создаём «правильную» телефонную книгу на основе базы данных.


    Урок 1 - Первая программа
    Урок 2 - Простые числа
    Урок 3 - Компиляторы (Часть 1)
    Урок 3 - Компиляторы (Часть 2)
    Урок 4 - Решение школьной задачи
    Урок 5 - Создание пианино
    Урок 6 - Продвинутый калькулятор (Часть 1)
    Урок 6 - Продвинутый калькулятор (Часть 2)
    Урок 7 - Удобная телефонная книга (Часть 1)
    Урок 7 - Удобная телефонная книга (Часть 2)
    Урок 7 - Удобная телефонная книга (Часть 3)
    Урок 7 - Удобная телефонная книга (Часть 4)
    Урок 8 - Работа с графикой. Система частиц (Часть 1)
    Урок 8 - Работа с графикой. Система частиц (Часть 2)
    Урок 8 - Работа с графикой. Система частиц (Часть 3)
    Урок 8 - Работа с графикой. Система частиц (Часть 4)

    Создаем первую программу в PascalABC.NET. Разбираем основные моменты.

    PascalABC.NET — SCHOOL — Простые числа. Решето Эратосфена

    Разбираем самый быстрый алгоритм поиска простых чисел. Решето Эратосфена. Эксперимент по сравнению алгоритмов. Разбираем еще несколько функций и возможностей языка Pascal…

    PascalABC.NET — SCHOOL — Компиляторы (1.Введение) — Выделение чисел

    Начинаем разбираться в компиляторах. Ищем в тексте числа целые и дробные. Следите за обновлениями этой линейки!

    PascalABC.NET — SCHOOL — Компиляторы (2.Заканчиваем выделять) — Слова и строки

    Продолжаем разрабатывать компилятор. Учимся выделять слова и строки.

    PascalABC.NET — SCHOOL — Решаем задачу для 7 класса

    PascalABC.NET — SCHOOL — ♫ Пианино + ООП + Кличко

    Разбираемся, как сделать простое пианино с применением ООП (объектно-ориентированное программирование).

    PascalABC.NET — SCHOOL — 1. Крутой калькулятор со скобками. Разбор выражений

    Пишем мощный калькулятор, разбирающий скобки и функции, типа sin или trunc. ООП (объектно-ориентированное программирование).

    PascalABC.NET — SCHOOL — 2. Крутой калькулятор со скобками. Разбор выражений

    ПРОДОЛЖЕНИЕ!!! Доводим до ума мощный калькулятор, разбирающий скобки и функции, типа sin или trunc. ООП (объектно-ориентированное программирование).

    PascalABC.NET — SCHOOL — 1. Продвинутая телефонная книга! Быстрый поиск. Индексирование

    Как реализовать быстрый поиск в большом объеме данных. Теория графов. Создаем на примере телефонной книги.

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

    В бесплатной мини-версии задачника доступно 270 заданий по всем основным разделам. Этого вполне достаточно для самостоятельного освоения начального уровня программирования. Скачать паскаль бесплатно версию 3.0 можно здесь . В настоящее время данная версия больше не поддерживается и разработчики работают над PascalABC.Net . Итак, начинаем pascal abc обучение.

    Внешний вид интерфейса программы PascalABC

    Окно среды программирования выглядит стандартно. В нем присутствует строка меню (1), ниже располагается панель инструментов быстрого доступа (2). Далее расположена рабочая зона редактора кода.


    Внешний вид интерфейса программы

    Вверху отображены ярлыки открытых файлов с текстами программ (3). Одновременная работа с несколькими текстами значительно упрощает создание программ. Можно копировать и переносить участки кода из одного файла в другой (4).

    В режиме выполнения программы можно увидеть зону ввода данных и вывода результатов (5).

    Работа с PascalABC

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

    Давайте имя отличное от предлагаемого по умолчанию. Это облегчит вам в дальнейшем поиск нужного кода.

    Запуск

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


    Ошибки в программе

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

    Остановка

    Остановка программы происходит по ее завершению. Но возможны случаи, когда программу необходимо остановить принудительно. Для этого есть кнопка «Стоп» на панели инструментов или команда Программа — Завершить.

    Настройка текстового редактора abc паскаль

    По умолчанию в редакторе кода задан минимальный размер шрифта. Если вы испытываете дискомфорт при наборе текста, то зайдите в меню Сервис — Настройки редактора . Установите желаемый размер шрифта.


    Настройка редактора Pascal ABC

    Работа с электронным задачником

    Научиться писать программы pascal невозможно без практики. Система автоматического тестирования работы программы для паскаля поможет вам освоить программирование на языке pascal.
    Зайдите в меню Сервис — Создать шаблон программы. У вас откроется следующее окно (смотрите ниже)

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

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

    Теперь для просмотра текста задания нажмем на кнопку запуска программы.

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

    Запускаем на выполнение. Если нет ошибок, то получим окно.

    Нужно провести несколько повторных запусков программы, чтобы пройти все тесты. И только после прохождения всех тестов задание получит статус «Задание выполнено!» Теперь можно переходить к выполнению следующего задания.

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

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

    Структура программы — совокупность разделов, из которых состоит программа.

    Для написания первой программы на языке Паскаль достаточно знать два раздела (на самом деле их больше):

    • раздел описания переменных — var — в этом разделе через запятую перечисляются имена переменных, используемые в программе. Далее указывается их тип.
    • тело программы — начинается со слова begin и заканчивается словом end. (с точкой). В этом разделе пишется текст самой программы
    var переменные : тип данных ; begin тело программы end.

    Переменные

    Что же такое переменная.

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

    Ячейки памяти с именами a, b, c

    Имя переменной должно удовлетворять следующим требованиям:

    • состоять из букв латинского алфавита (a-z, A- Z), цифр и знака подчеркивания «_»;
    • имя переменной не должно начинаться с цифры (но может начинаться со знака «_» (Например : _primer ).
    • имя переменной не должно содержать пробелов

    Переменная primer и PriMer для Паскаля равнозначны

    Типы данных

    После того, как мы перечислим переменные в разделе var , мы должны указать их тип:

    • integer — целочисленный тип
    • real — вещественный тип (дробные числа)
    • string — строковый тип

    Например:

    var a, b, c : integer ;

    где a, b, c — переменные, integer — тип этих переменных. Т.е. переменные (ячейки памяти) a, b, c могут содержать в себе только целые числа.

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

    Если необходимо, чтобы часть переменных была одного типа, а часть другого:

    var a, b : integer ; с :real ;

    т.е. переменные a, b — целые, а переменная с — вещественное число (нецелое).

    Оператор присваивания

    Оператор присваивания служит для присвоения переменной какого-либо значения.

    := оператор присваивания

    Запись a:=23; читается как «Переменной а присвоено значение 23 «. Теперь в ячейке памяти с именем а хранится число 23.

    Оператор ввода

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

    readln(a)

    Как только паскаль будет выполнять команду readln(a), он потребует от нас ввода значения с клавиатуры, которое запишет в переменную, стоящую в скобках. В нашем случаем — в переменную a .

    Математические операции

    + — операция сложения

    — операция вычитания

    * — операция умножения

    / — операция деления

    mod — остаток от деления

    div — целая часть от деления

    Пример:

    S:=22 mod 5; После выполнения данного когда переменная S станет равной 2 .

    S:= 22 div 5; После выполнения данного кода переменная S станет равной 4.

    Оператор вывода

    Для вывода значения переменной на экран используется команда write(a) или writeln(a) . После выполнения команды writeln происходит переход на новую строку, после выполнения команды write — не происходит.

    Если необходимо вывести на экран текст, то он заключается в апострофы:

    writeln(‘Мама мыла раму’);

    Также можно вывести на экран текст вместе со значением переменной:

    a:=6;
    writeln(‘Значение переменной а = ‘, a );

    На экране мы увидим: Значение переменной а=6.

    Рассмотрим задачу:

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

    var a,b,S,P :integer; //объявляем переменные begin writeln("Введите длину прямоугольника "); readln(a ); //вводим длину writeln("Введите ширину прямоугольника "); readln(b ); //вводим ширину S:=a*b ; //вычислим площадь прямоугольника P:=2*(a+b) ; //вычислим периметр прямоугольника writeln("Площадь прямоугольника равна ",S ); //выводим на экран writeln("Периметр прямоугольника равен ",P ); end.

    2-е изд. - СПб.: 2011. - 320 с .

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

    Формат: pdf (2011, 2-е изд., 320с.)

    Размер: 14,5 Мб

    Смотреть, скачать: docs.google.com

    Содержание
    Предисловие ко второму изданию 15
    Вступление 16
    От издательства 16
    ТЕМА 1. Как написать простую программу на Паскале 17
    Урок 1.1. Выводим сообщение на экран дисплея 18
    Урок 1.2. Как заложить эту программу в компьютер 19
    Этапы создания компьютерной программы 20
    Урок 1.3. Оформление текста на экране 28
    Выводы 34
    Контрольные вопросы 34
    ТЕМА 2. Как включить в работу числовые данные 36
    Урок 2.1. Начнем с простого: целые числа 37
    Понятие переменной 38
    Тип Integer. Оператор присваивания. Вывод на экран 38
    Операции с типом Integer 40
    Стандартные функции типа Integer 42
    Как представляются переменные целого типа
    в памяти компьютера 43
    Урок 2.2. Включаем в работу вещественные числа 45
    Описание вещественного типа данных (real) 45
    Форматы записи вещественных переменных 46
    Вещественные операции 46
    Стандартные функции типа real 47
    Запись математических выражений 48
    Как представляются переменные вещественного типа в памяти компьютера 50
    Урок 2.3. Как совместить переменные целого и вещественного типа 51
    Преобразование типов 51
    Правила приоритета в выполняемых действиях 52
    Действия над данными разных типов 53
    Урок 2.4. Ввод и вывод данных 56
    Вводим переменные с клавиатуры 57
    Красивый вывод на экран 57
    Задание значений переменных датчиком случайных чисел 61
    Урок 2.5. Зачем нужны константы в программе? 62
    Выводы 64
    Контрольные вопросы 64
    ТЕМА 3. Учимся работать с символами 66
    Урок 3.1. Как компьютер понимает символы 67
    Кодовая таблица ASCII 67
    Описание типа Char и стандартные функции 68
    Урок 3.2. Тип Char - порядковый тип! 70
    Выводы 71
    Контрольные вопросы 72
    ТЕМА 4. Джордж Буль и его логика 73
    Урок 4.1. Необходим еще один тип - логический! 74
    Логический тип данных (Boolean) 75
    Операции отношения 75
    Ввод-вывод булевских переменных 76
    Урок 4.2. Логические (булевские) операции 76
    Логическое умножение (конъюнкция) 76
    Логическое сложение (дизъюнкция) 77
    Исключающее ИЛИ (сложение по модулю 2) 77
    Логическое отрицание (инверсия) 78
    Применение логических операций в программе 78
    Приоритет логических операций 80
    Выводы 81
    Контрольные вопросы 81
    ТЕМА 5. Анализ ситуации и последовательность выполнения команд 82
    Урок 5.1. Проверка условия и ветвление в алгоритме 83
    Полная и неполная форма оператора if 84
    Оформление программ 86
    Урок 5.2. Блоки операторов 88
    Урок 5.3. Ветвление по ряду условий (оператор case) 92
    Выводы 96
    Контрольные вопросы 96
    ТЕМА 6. Многократно повторяющиеся действия 98
    Урок 6.1. Оператор цикла for 99
    Оператор for с последовательным увеличением счетчика 100 Оператор for с последовательным уменьшением счетчика 101
    Урок 6.2. Применение циклов со счетчиком 101
    Цикл в цикле 102
    Трассировка 103
    Вычисление суммы ряда 105
    Выводы 108
    Контрольные вопросы 109
    ТЕМА 7. Циклы с условием 110
    Урок 7.1. Цикл с предусловием 111
    Описание цикла с предусловием 111
    Приближенное вычисление суммы бесконечного ряда 112
    Возведение числа в указанную целую степень 115
    Урок 7.2. Цикл с постусловием 119
    Описание цикла с постусловием 120
    Использование циклов repeat и while 120
    Относительность выбора операторов while и repeat 123
    Выводы 129
    Контрольные вопросы 129
    ТЕМА 8. Массивы - структурированный тип данных 131
    Урок 8.1. Хранение однотипных данных в виде таблицы 132
    Основные действия по работе с массивами 133
    Описание массива на языке Паскаль 133
    Заполнение массива случайными числами и вывод массива на экран 134
    Создание пользовательского типа данных 137
    Поиск максимального элемента массива 140
    Вычисление суммы и количества алементов массива с заданными свойствами 144
    Урок 8.2. Поиск в массиве 148
    Определение наличия в массиве отрицательного алемента с использованием флажка 148
    Определение наличия в массиве отрицательных алементов путем вычисления их количества 149
    Нахождение номера отрицательного алемента массива 150
    Урок 8.3. Двумерные массивы 154
    Выводы 156
    Контрольные вопросы 157
    ТЕМА 9. Вспомогательные алгоритмы. Процедуры и функции. Структурное программирование 1 58
    Урок 9.1. Конструирование алгоритма «сверху вниз» 159
    Практическая задача с использованием вспомогательных алгоритмов 160
    Урок 9.2. Пример работы с функцией: Поиск максимального элемента 167
    Выводы 168
    Контрольные вопросы 169
    ТЕМА 10. Как работать с символьными строками 170
    Урок 10.1. Работаем с цепочками символов: тип String 171
    Описание строковой переменной 171
    Основные действия со строками 172
    Урок 10.2. Некоторые функции и процедуры Паскаля для работы со строками 173
    Использование библиотечных подпрограмм работы со строками 173
    Выводы 175
    Контрольные вопросы 175
    ТЕМА 11. Процедуры и функции с параметрами 176
    Урок 11.1. Простые примеры использования подпрограмм с параметрами 177
    Простейшие процедуры с параметрами 177
    Формальные и фактические параметры 179
    Простейшие функции с параметрами 179
    Урок 11.2. Способы передачи параметров 181
    Выводы 183
    Контрольные вопросы 184
    ТЕМА 12. Файлы: сохраняем результаты работы до следующего раза 185
    Урок 12.1. Как работать с текстовым файлом 186
    Открытие файла для чтения 186
    Открытие файла для записи 188
    Урок 12.2. Сохранение двумерного массива чисел в текстовом файле 192
    Сохранение числовых данных в текстовом файле 192
    Сохранение массива чисел в текстовом файле 192
    Дописывание информации в конец файла 196
    Выводы 197
    Контрольные вопросы 197
    Тема 13. Графический режим работы. Модуль Graph 199
    Урок 13.1. Включаем графический режим работы 200
    Особенности работы с графикой 200
    Переключение в графический режим видеоадаптера 201
    Урок 13.2. Продолжаем изучать возможности модуля Graph 203
    Рисование линий средствами модуля Graph 203
    Рисование окружностей средствами модуля Graph 205
    Выводы 206
    Контрольные вопросы 207
    Тема 14. Операторы, изменяющие естественный ход программы 208
    Урок 14.1. Использование оператора безусловного перехода goto 210
    Урок 14.2. Операторы, изменяющие ход выполнения цикла 213
    Оператор break 213
    Оператор continue 214
    Выводы 215
    Контрольные вопросы 215
    Тема 15. Группируем данные: записи 216
    Урок 15.1. Описание типа данных record 218
    Урок 15.2. Когда и как разумно использовать записи 220
    Создание собственного типа данных - запись 220
    Массив записей 220
    Оператор присоединения with 221
    Пример выбора структуры данных 223
    Записи записей 224
    Выводы 225
    Контрольные вопросы и задания 225
    Тема 16. Динамические переменные 226
    Урок 16.1. Выделение памяти 227
    Урок 16.2. Адреса 229
    Урок 16.3. Указатели 230
    Указатели на отдельные переменные 230
    Указатели на блоки переменных 232
    Урок 16.4. Динамическое выделение памяти 232
    New и Dispose 233
    Динамическое выделение памяти для массивов 235
    GetMem и FreeMem 236
    Обращение к элементам массива, созданного динамически 237
    Массив переменной длины 238
    Выводы 241
    Контрольные вопросы 242
    Тема 17. Динамические структуры данных. Стек 244
    Урок 17.1. Опишем тип данных 245
    Урок 17.2. Создание стека и основные операции со стеком 247
    Добавление элемента в стек (Push) 248
    Извлечение элемента из стека (Pop) 251
    Проверка стека на пустоту (StacklsEmpty) 252
    Урок 17.3. Использование стека 253
    Программирование стека при помощи массива 255
    Выводы 256
    Контрольные вопросы и задания 256
    Тема 18. Динамические структуры данных. Очередь 258
    Урок 18.1. Принцип работы и описание типа данных 259
    Урок 18.2. Основные операции с очередью 261
    Добавление элемента в очередь (EnQueue) 261
    Извлечение элемента из очереди (DeQueue) 263
    Проверка очереди на пустоту (QueuelsEmpty) 264
    Урок 18.3. Использование очереди 264
    Программирование очереди при помощи массива 267
    Выводы 269
    Контрольные вопросы 269
    Тема 19. Динамические структуры данных. Однонаправленный список 270
    Урок 19.1. Описание типа данных и принцип работы 271
    Урок 19.2. Основные операции с однонаправленным списком 272
    Последовательный просмотр всех элементов списка 272
    Помещение элемента в список 273
    Удаление элемента из списка 275
    Урок 19.3. Обработка списков 276
    Целесообразность использования однонаправленного списка 278
    Выводы 280
    Контрольные вопросы 280
    Тема 20. Рекурсия 281
    Урок 20.1. Описание принципа 282
    Урок 20.2. Ханойские башни 285
    Урок 20.3. Структура рекуррентной подпрограммы 287
    Урок 20.4. Пример рекуррентного решения нерекуррентной задачи 288
    Урок 20.5. Пример рекуррентного решения рекуррентной задачи 289
    Выводы 291
    Контрольные вопросы 291
    Приложение 1. Элементы блок-схем 292
    Приложение 2. Задачи 295
    Integer. Описание. Ввод. Вывод. Операции 296
    Real. Описание. Ввод. Вывод. Операции и функции 296
    Real. Запись и вычисление выражений 297
    Char. Описание. Ввод. Вывод. Функции 298
    Boolean. Запись выражений 298
    Boolean. Вычисление выражений 299
    If. Простые сравнения. Min/max/средний 300
    If. Уравнения и неравенства с параметрами 300
    For. Перечисления 300
    For. Вычисления со счетчиком цикла 301
    For. Перебор со сравнениями 302
    While-Repeat. Поиск 302
    While-Repeat. Ряды 303
    Графика. Прямые 303
    Графика. Окружности 304
    Массивы. Заполнение, вывод, сумма/количество 305
    Массивы. Перестановки 305
    Массивы. Поиск 306
    Массивы. Проверки 307
    Массивы. Максимумы 307
    Подпрограммы без параметров 307
    Строки. Часть I 308
    Строки. Часть II 309
    Подпрограммы с параметрами. Часть I 309
    Подпрограммы с параметрами. Часть II 310
    Подпрограммы с параметрами. Часть III 310
    Файлы 311
    Однонаправленный список 312
    Рекурсия 313

    После выхода первого издания книги к нам стали все чаще обращаться наши коллеги и ученики с просьбой дополнить первое издание информацией о наиболее изучаемых и востребованных структурах данных. В это издание мы добавили несколько глав, посвященных записям, динамическим переменным, стеку, очереди и спискам. Также мы постарались осветить одну из самых сложных тем в программировании - построение рекурсивных алгоритмов.
    В приложении мы решили отказаться от сборника домашних заданий с множеством вариантов по нескольким темам. Вместо этого мы поместили в приложение большое число тематических заданий, организованных блоками по 5-8 задач. Задания в каждом блоке расположены от простого к сложному. Мы используем их на наших уроках для организации практических занятий при закреплении теоретического материала (одно занятие - один блок).
    Авторы выражают глубочайшую признательность одному из лучших своих учеников, доценту кафедры безопасности информационных систем СПбГУАП, к. т. н. Евгению Михайловичу Линскому за поддержку, множество полезных советов и большую помощь при работе над вторым изданием книги.