Язык программирования Паскаль 1.ppt
- Количество слайдов: 52
Язык программирования Паскаль Введение
Немного истории Паскаль был создан швейцарским ученым Никлаусом Виртом в 1970 году. Первоисточники 1) 2) Йенсен К. , Вирт Н. Паскаль. Руководство пользователя. М. : Финансы и статистика, 1989. Вирт Н. Систематическое программирования. Введение. М. : Мир, 1977.
Реализации языка l l l Turbo Pascal Borland Pascal Free Pascal ABC Delphi
Алфавит языка Паскаль l l l латинские буквы прописные и строчные (A. . Z, a. . z) символы национальных алфавитов (например, русского) цифры (0. . 9) зарезервированные символы ; : , . + - * / < > = ^ ` ( ) [ ] { } $ # @ зарезервированные сочетания символов : = >= <= <>. . (* *)
Алфавит языка Паскаль (продолжение) ключевые (зарезервированные) слова and end implementation program type array file label record unit begin for mod repeat until case forward nil set uses const function not shl var div goto of shr while do if or string with downto in packed then xor else interface procedure to l
Этапы работы над программой l l создание или редактирование текста программы; компиляция – перевод программы с языка высокого уровня в машинноориентированные коды; исполнение откомпилированного файла; тестирование и отладка.
Компиляция программы Компиляцию программы выполняет особая программа, называемая компилятором. Этапы компиляции: • • • лексический анализ синтаксический анализ семантический анализ генерация промежуточного кода оптимизация кода генерация результирующего машинного кода.
Лексический анализ Текст программы разбивается на отдельные составляющие – лексемы. При выделении лексем важную роль играет алфавит языка, а так же правила построения ее отдельных элементов: имен, комментариев, констант и т. д.
Правила построения основных видов лексем Имя любого программного объекта в программе на Паскале должно быть идентификатором. К программным объектам относят переменные, константы, типы, всю программу, процедуры и функции. Идентификатор – это последовательность латинских букв, цифр и знака подчеркивания ( _ ), начинающаяся с буквы или со знака подчеркивания.
Правила использования идентификаторов 1) 2) Большие и маленькие буквы во всем тексте программы не различаются, т. е. идентификаторы Otvet, otvet, OTVET и o. TVET будут с точки зрения компилятора эквивалентны. Идентификатор не может совпадать с ключевым словом. Именно поэтому ключевые слова еще называют зарезервированными словами, т. е. они заняты под нужды языка, и программист их использовать не может.
Задание Определите, какие из данных ниже последовательностей символов являются идентификаторами. l l l l A 1 packed 123 авп _fg r_304 1 de
Комментарии Комментарий с точки зрения Паскалькомпилятора – это последовательность символов, которая должна быть исключена из дальнейшей обработки текста программы. Способы оформления комментариев { } (* *) // (только для Delphi, Free Pascal, Pascal ABC)
Пример использования комментариев Var a: integer; (*Переменная а имеет целый тип*) Begin Readln(a); // Ввод значения переменной а a: =a+1; { Это на потом. . . a: =a*2; a: =a-a; } writeln(a) End.
Константы l l числовые (целые и вещественные) символьные логические строковые
Целочисленные константы l l могут использоваться цифры 0. . 9 и знаки +, – если знак перед числом не указан, то число считается положительным допустимы ведущие незначащие нули, при выводе числа они отбрасываются целое число, представленное в шестнадцатеричной системе счисления, записывается с использованием префикса $, при выводе такое число будет переведено в десятичную систему счисления.
Примеры констант целого типа в десятичной форме 34 – 825 +19 000056 00 l в шестнадцатеричной форме $10 –$FF $03 f (определите, как эти числа будут выглядеть при выводе). l
Константы вещественного типа l l l могут задаваться в форме с фиксированной точкой и с плавающей точкой. при записи вещественного числа в форме с фиксированной точкой в качестве разделителя целой и дробной части используется символ точка (. ). десятичная точка требует, по крайней мере, одну цифру слева от себя, т. е. запись. 9, например, недопустима.
Константы вещественного типа (продолжение) в форме с плавающей точкой сначала записывается мантисса числа (m), затем символ E (или e, поскольку большие и маленькие буквы Паскалем не различаются) и указывается порядок числа (p) l мантисса может быть целым числом или вещественным в форме с фиксированной точкой l порядок задается целым десятичным числом l формула, для преобразования числа из формы с плавающей точкой в форму с фиксированной точкой: m E p = m · 10 p. l
Примеры вещественных констант в форме с фиксированной точкой 3. 1415 0. 00000127 – 125. 0 0. 0 l в форме c плавающей точкой 0. 031415 E+00002 – 789 e– 4 – 1 e+01 (определите, каким числам они соответствуют) l вещественные константы, записанные с ошибкой 3, 14. 001 – 5. 12 E 2 e 0. 2 l
Строковые константы l l l Строковая константа – это произвольная последовательность символов, заключенная c обеих сторон в апострофы (’). Если внутри строковой константы должен присутствовать символ апострофа, то он указывается дважды. Пустая строковая константа записывается в виде двух подряд идущих апострофов (’ ’).
Примеры констант строкового типа ’Добро пожаловать!’ ’Магнитофон ’ ’Вега ’ ’ продан. ’ (определите, что будет выведено)
Логические константы l l l Логическая константа может принимать только два значения True или False. При записи слов true и false регистр не имеет значения, как и при записи всего текста программы. При выводе логическая константа будет записана прописными буквами.
Символьные константы l l Символьная константа – это ровно один символ, ограниченный апострофами. Обращение к любому символу возможен через его номер в таблице кодировки, путем указания этого номера с предшествующим символом решетки (#). Так, записи ‘D’ и #68 дают ссылку на один и тот же символ, так как номер символа D в таблице кодировки равен 68.
Задание Определите тип константы l l l l l TRUE ’TRUE’ f. Al. Se ’T’ #12 ’ 12 $12 3 е 3
Синтаксис языка программирования определяет правила построения составляющих программы (операторов, выражений, разделов описаний, и т. д. ), а так же всей программы в целом. Способы описания синтаксиса l синтаксические диаграммы Н. Вирта l формы Бэкуса-Наура
Синтаксические диаграммы Н. Вирта l l l Элементы алфавита языка будем заключать в круг или прямоугольник со скругленными углами Понятия, требующие дальнейшей расшифровки, будем заключать в прямоугольник Понятие, расшифровываемое диаграммой, будем писать в ее начале
Структура программы l l обязательным элементом программы является только тело программы телу программы может(гут) предшествовать заголовок программы и(или) раздел описаний.
Заголовок программы Например: program Primer;
Тело программы Например: begin end.
Пустой оператор l l Синтаксис Паскаля требует, чтобы операторы внутри составного оператора разделялись знаком точка с запятой (; ). Не является ошибкой, если программист ставит точку запятой после каждого оператора. В этом случае «лишний» знак точка с запятой – тот, который стоит самым последним – будет трактоваться компилятором как пустой оператор.
Семантический анализ В ходе семантического анализа компилятор проверяет соответствие типов данных в операторах. Ошибки, выявленные в ходе лексического и синтаксического анализа, принято называть синтаксическими ошибками, а ошибки, выявленные в ходе семантического анализа семантическими.
Операторы вывода Write(<список параметров вывода>) – вывод параметров без перевода курсора на новую строку Write. Ln(<список параметров вывода>) – вывод параметров и перевод курсора на новую строку
Задание Определите, что будет выведено в ходе выполнения следующей программы: const g=981; {описание константы g} var a, b: integer; {описание переменных а и b} begin a: =7; b: =13; write(a); Writeln(g); Write(‘Привет, мир!’); Writeln($14); Writeln(False); Write(2*30 -12, ’ ’); Writeln(a, ’+’, b, ’=’, a+b); end.
Формат вывода l l l Первое целое число - количество позиций, отводимых под данное значение. Выравнивание производится по правому краю. Если количество позиций указано меньше, чем требуется, выводимое значение все равно будет отображено полностью. Второе целое число задает количество цифр в дробной части, используется только при выводе вещественных значений. Если задано число цифр в дробной части меньше, чем имеется, то производится округление по правилам математики. Если для вещественных чисел не указывать формат вывода, или указывать только первую часть формата, то они выводятся в форме с плавающей точкой (кроме Pascal ABC), например, операторы writeln(5689. 08) и writeln(5689. 08: 5) выведут что-то вроде 5. 6890800000 Е+03.
Задание Определите, что будет выведено при выполнении следующих операторов: writeln(‘Проба пера’: 15); writeln(‘Проба пера’: 5); write(‘Проба’: 7); writeln(‘ пера’: 7);
Задание Определите, что будет выведено при выполнении следующих операторов: Writeln(3. 1415926: 12: 4); Writeln(3. 1415926: 2: 2); Writeln(0. 5 e-003: 13); Writeln(0. 5 e-003: 10: 5);
Операторы ввода Read(<список параметров вывода>) – считывает указанные параметры, спецсимволы, соответствующие нажатию клавиши Enter, остаются в буфере клавиатуры Read. Ln(<список параметров вывода>) – считывает указанные параметры и спецсимволы, соответствующие нажатию клавиши Enter Read. Ln – считывает только спецсимволы, соответствующие нажатию клавиши Enter
Задание определите, какие операторы ввода записаны без ошибок const g=981; {описание константы g} var a, b: integer; {описание переменных а и b} … Readln(’ а= ’, a); Read(a); readl. N(g); Read. Ln(a, b); Read. Ln;
Задание Определите, что будет выведено следующей программой. Произойдет ли задержка до нажатия клавиши Enter в конце работы программы? Var a, b: integer; Begin read(a); readln(b); writeln(‘ Результат 1 - ‘, a, ‘ ‘, b); readln(a); read(a, b); writeln(‘ Результат 2 - ‘, a, ‘ ‘, b); readln; end. Было введено: 1 2 3 Результат 1 - … 1 2 3 Результат 2 - …
Пример создания дружественного интерфейса пользователя Writeln(‘Введите целое число от 1 до 100’); Read. Ln(a); Writeln(‘Введите целое число от 1 до 100’); Read. Ln(b); Writeln(a, ’*’, b, ’=’, a*b);
Оператор присваивания <имя переменной>: =<выражение> l l Сначала вычисляется значение выражения, а затем полученное значение заносится в указанную переменную. Тип переменной и тип выражения должны быть совместимы. - каждый тип совместим сам с собой - целые типы совместимы между собой - вещественной переменной может быть присвоено значение целого типа (но не наоборот!) - строковой переменной может быть присвоено символьное значение
Арифметические операции применяются к данным целых и вещественных типов. l Унарные операции: - операция смены знака (например, -5). l Бинарные операции: + * / (вещественное деление) div (деление нацело) mod (остаток от деления нацело) Замечания: Результат вещественного деления всегда вещественное число, даже если с точки зрения математики получается целый результат. Операции Div и Mod применимы только к значениям целого типа, их результат так же целое число. Для остальных операций: если среди операндов выражения есть вещественные значения, то результат вещественный, в противном случае - целый
Арифметические выражения Арифметическое выражение задаёт порядок выполнения действий над числовыми величинами. Арифметические выражения могут содержать переменные, константы, арифметические операции, функции и круглые скобки. Правила записи арифметических операций: l все символы пишутся в строчку на одном уровне, l проставляются все знаки арифметических операций, l не допускается два следующих подряд знака операций (в этом случае используются скобки), l несколько записанных подряд операций одного приоритета выполняются слева направо.
Приоритеты выполнения операций: l l l выражения в скобках, вычисление функций, операция смены знака, *, /, div, mod, +, -.
Операции Div и Mod Div результат деления нацело Mod – остаток от деления нацело Пример a: =10 div 3; {a=3} b: =10 mod 3; {b=1} Эти операции очень часто используются для выделения цифр в числах. Например, если n 1 – целое четырёхзначное число, то a: =n 1 mod 10; {4 цифра} b: =n 1 div 10 mod 10; {3 цифра} c: =n 1 div 100 mod 10; {2 цифра} d: =n 1 div 1000; {1 цифра}
Задание Запишите следующую формулу в виде арифметического выражения на Паскале 3*sqrt(y)*(5*x-1/y)/(2/sqrt(x)+4*sin(x))*(2+3*x*y)
Возведение в степень В Паскале нет стандартной функции возведения в степень. Для вычисления xy можно использовать два способа: l использовать цикл, если y – целое число, l использовать формулу: xy=ey ln(x), если y – вещественное число.
Задание Определите, какие операторы присваивания записаны без ошибок Var a: integer; b: real; … a: =b*5; b: =(a+7)/3; a: =1/(1+a); b: =b/3;
Оператор ветвления If <условие> Then <оператор> [Else <оператор>] l l l Внутри оператора ветвления точек с запятой не ставится, так как это – единый оператор. После Then и Else может выполняться только один оператор. Если необходимо выполнить более одного оператора, то ставятся операторные скобки Begin и End (так называемый составной оператор). Операторы ветвления могут быть вложены друг в друга. В этом случае, если неясно, к какому оператору If относится ветвь Else, то действует следующее правило: Else относится к ближайшему оператору If, у которого отсутствует данная ветвь.
Пример использования оператора ветвления {Программа поиска максимума из двух чисел} Program new; Var x, y, max: integer; Begin Write. Ln(‘Введите два целых числа’); Read. Ln(x, y); If x>y Then Max: =x Else Max: =y; Write. Ln(‘Максимум из чисел ’, x: 3, ‘и ‘, y: 3, ’ – ‘, Max: 5) End.
Логические выражения Аргументы для логических выражений – логические переменные и константы или выражения, возвращающие логические значения (например, выражения с операциями сравнения: >, <, <=, >=, <>) Логические операции: l Not – логическое отрицание, l Or – логическое сложение (логическое ИЛИ), l And – логическое умножение (логическое И), l Xor - исключающее «или» , имеющее значение true, если оба операнда различны. Замечание: При построении выражений нужно учитывать, что операции сравнения имеют самый низкий приоритет.
Задача Написать программу, определяющую, принадлежит ли точка (x, y) заштрихованной области Var x, y: real; Begin writeln(’Введите координаты точки (x, y) через пробел’); readln(x, y); if (x<=2) and (x>=-2) and (y<=3) and (y>=0) or (x<=4) and (x>=-4) and (y<=0) and (y<=-2) then Write. Ln(’ Принадлежит’) else Write. Ln(’Не принадлежит’); read. Ln; End. Замечание: Возможно альтернативное логическое выражение (abs(x)<=2) and (y<=3) and (y>=0) or (abs(x)<=4) and (y<=0) and (y<=-2)