
Паскаль. М1 и М2.ppt
- Количество слайдов: 69
Литература web-источники по курсу 1. 2. 3. 4. 5. 6. 7. 8. 9. С. И. Смирнов. Уроки программирования Pascal Delphi. Часть I. 2011 г. , 100 с. Д. М. Ушаков, Т. А. Юркова. Паскаль для школьников. 2010 г. , 256 с. А. С. Миронченко. Императивное и объектноориентированное программирование на Turbo Pascal и Delphi. 2007 г. , 408 с. О. В. Деревенец. Песни о Паскале. 2010 г. , 586 с. В. В. Фаронов. Turbo Pascal. 2004 г. , 1056 с. www. pas 1. ru www. pascal. helpov. net www. gospodaretsva. com/category/the-programminglanguage-pascal. guti. ru
Программирование на языке Паскаль Модуль 1. Введение
Алгоритм Термин введен узбекским математиком Аль-Хорезми в IX веке. Алгоритм – это упорядоченный набор из недвусмысленных и выполнимых этапов, определяющих некоторый конечный процесс. (Дж. Гленн Брукшир) Алгоритм – понятное и точное предписание исполнителю совершить последовательность действий, направленных на достижение поставленной цели (Могилев А. В. и др. )
Алгоритм – это четко определенный план действий для исполнителя. Исполнителем алгоритма может быть человек или автоматическое устройство, способное воспринять и выполнить предусмотренные в нем действия. Конечное множество команд, которые воспринимает исполнитель – это СКИ (система команд исполнителя). Исходные данные Алгоритм Исполнитель (СКИ) Результат
Алгоритм При выполнении алгоритма исполнитель не вникает в смысл того, что он делает, но получает необходимый результат. В этом случае говорят, что исполнитель действует формально, т. е. он только строго выполняет команды алгоритма, не вникая в содержание поставленной задачи
Алгоритм Свойства алгоритма • дискретность: состоит из отдельных шагов (команд) • понятность: должен включать только команды, известные исполнителю (входящие в СКИ) • определенность: при одинаковых исходных данных всегда выдает один и тот же результат, то есть каждый шаг должен быть определён и не должен допускать произвольной трактовки исполнителя • конечность: заканчивается за конечное число шагов • массовость: может применяться многократно при различных исходных данных • корректность: дает верное решение при любых допустимых исходных данных
Основные парадигмы программирования • • императивная (процедурная): Процесс программирования представляет собой запись последовательности команд для обработки данных. Это традиционный подход. декларативная: главный вопрос: «Что представляет собой задача? » . Роль программиста – точная формулировка задачи функциональная: процесс программирования заключается в конструировании требуемых функций в виде вложенных друг в друга более простых функций. объектно-ориентированная: элемент данных рассматривается как активный объект, т. е. объект, содержащий алгоритмы для выполнения свойственных этому объекту действий
Программа Для записи алгоритма используют различные формы языка: • естественный язык (неоднозначность) • блок–схемы (недостаток – запутанность в сложных случаях) • псевдокод – система обозначений, предназначенная для неформального представления идей в процессе разработки алгоритма. • языки программирования – когда пользователь – автоматическое устройство. Запись алгоритма на языке программирования называется программа
Программа – это • алгоритм, записанный на каком-либо языке программирования • набор команд для компьютера Команда – это описание действий, которые должен выполнить компьютер. • откуда взять исходные данные? • что нужно с ними сделать?
Технология проектирование программ методом "сверху вниз", или пошаговая детализация Вначале программа формулируется в виде крупных частей, которые затем детализируются фразами естественного (русского или английского) языка или фразами псевдокода. Независимость от машины и языка программирования
Примерная схема разработки алгоритма: 1. Постановка задачи 2. Спецификация. Что дано, что найти, указание ограничений. 3. Математическая модель. Используемые математические формулы 4. Общая запись алгоритма. На псевдокоде или естественном языке. 5. Детализированная запись алгоритма.
Системы программирования включает в себя: 1. транслятор с языка программирования высокого уровня (обычно компилятор) 2. средства редактирования, компоновки и загрузки программы 3. макроассемблер (машинноориентированный язык) 4. отладчик программ
Транслятор – компиляция Существуют два принципиально разных метода трансляции: «компиляция» и «интерпретация» . При компиляции (compile) в память ЭВМ загружается программа –компилятор. Она воспринимает текст программы на языке программирования высокого уровня как исходную информацию. Компилятор производит синтаксический контроль программы и при обнаружении ошибок выводит соответствующее сообщение. Если ошибок нет, то результатом компиляции является программа на языке машинных команд. Затем компилятор удаляется из оперативной памяти. В памяти остается только программа на языке машинных команд, которая выполняется для получения необходимых результатов.
Транслятор – интерпретация Интерпретатор в течении всего времени работы программы находится в оперативной памяти. В память также помещается программа на языке программирования высокого уровня. Интерпретатор «читает» ее первый оператор, переводит его в машинные команды и тут же организует выполнение этих команд. Затем переходит к переводу и выполнению следующего оператора и так до конца программы. При этом результаты предыдущих переводов в памяти не сохраняются. Перед трансляцией каждого оператора производится его синтаксический анализ.
Средства редактирования, компоновки и загрузки программ 1) текстовый редактор (edit), осуществляющий функции записи и редактирования исходного текста программы. 2) загрузчик программы (load), позволяющий открыть нужный файл программы 3) запускатель программ (run), осуществляющий процесс выполнения программы и т. д.
Отладчик (Debugger) позволяет осуществить пошаговое выполнение программ (трассировку), идентификацию места и вида ошибок в программе, отслеживание значений переменных и т. д.
Термины языка программирования (ЯП) Алфавит – фиксированный для данного языка набор основных символов, допускаемых для составления текста программы на этом языке. Лексемы – минимальные значимые единицы текста программы. Категории лексем: специальные символы, идентификаторы, зарезервированные слова, числа, метки, строки, комментарии. Синтаксис – система правил, определяющих допустимые конструкции ЯП из знаков алфавита. Семантика – система правил однозначного толкования отдельных языковых конструкций, позволяющих воспроизвести процесс обработки данных. Семантика языка программирования задается определением средств описания данных и действий (алгоритм).
Пример алгоритма: 1) 2) 3) Найти гипотенузу по двум катетам Дано: a, b – вещественные числа >0, Найти: с – вещественное число c=a 2+b 2 4) 1 -й шаг Алгоритм Гипотенуза Объявить переменные Начало Подготовить исходные данные Вычислить значение Гипотенузы Вывести результат Конец 2 -й шаг Алгоритм Гипотенуза Вещ a, b, c Начало Вывести заголовок задачи Вывести запрос на значение a Ввести значение a Вывести запрос на значение b Ввести значение b c: =a*a+b*b Вывести заголовки выходных данных Вывести значения c Конец
Языки программирования • Язык - знаковая система, служащая для хранения, переработки и передачи информации. Все языки делятся на: естественные и искусственные • Естественные языки противоречивы, неоднозначны, неточны. • Одна из особенностей искусственных языков состоит в строгой определенности их словаря, синтаксиса и семантики • Языки программирования – знаковые системы, применяемые для описания процессов решения задачи на ЭВМ. Строго формализованы
Языки программирования • Машинно-ориентированные (низкого уровня) - каждая команда соответствует одной команде процессора (ассемблер) • Языки высокого уровня – приближены к естественному (английскому) языку, легче воспринимаются человеком, не зависят от конкретного компьютера • для обучения: Бейсик, ЛОГО, Паскаль • профессиональные: Си, Фортран, Паскаль • для задач искусственного интеллекта: Пролог, ЛИСП • для Интернета: Java. Script, Java, Perl, PHP, ASP
Язык Паскаль 1970 – Никлаус Вирт (Швейцария) • язык для обучения студентов • разработка программ «сверху вниз» Задача Подзадача 1 1. 2 1. 3 Подзадача 2 2. 1 2. 2 Подзадача 3 2. 3 3. 1 3. 2 3. 3 • разнообразные структуры данных (массивы, структуры, множества)
Из чего состоит программа? program <имя программы>; const …; {константы} var …; {переменные} { процедуры и функции } begin … {основная программа} end. комментарии в фигурных скобках не обрабатываются
Из чего состоит программа? Константа – постоянная величина, имеющая имя. Переменная – изменяющаяся величина, имеющая имя (ячейка памяти). Процедура – вспомогательный алгоритм, описывающий некоторые действия (рисование окружности). Функция – вспомогательный алгоритм для выполнения вычислений (вычисление квадратного корня, sin).
Имена программы, констант, переменных Имена могут включать • латинские буквы (A-Z) заглавные и строчные буквы не различаются • цифры имя не может начинаться с цифры • знак подчеркивания _ Имена НЕ могут включать • русские буквы • пробелы • скобки, знаки +, =, !, ? и др. Какие имена правильные? ? AXby R&B 4 Wheel Вася “Pes. Barbos” TU 154 [Qu. Qu] _ABBA A+B
Константы const i 2 = 45; { целое число } pi = 3. 14; { вещественное число } целая и дробная часть отделяются точкой qq = 'Вася'; { строка символов } можно использовать русские буквы! L = True; { логическая величина } может принимать два значения: • True (истина, "да") • False (ложь, "нет")
Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. Типы переменных: • integer { целая } • real { вещественная } • char { один символ } • string { символьная строка } • boolean { логическая } Объявление переменных (выделение памяти): var a, b: integer; Q: real; s 1, s 2: string;
Как изменить значение переменной? Оператор – это команда языка программирования высокого уровня. Оператор присваивания служит для изменения значения переменной. Пример: program qq; a var a, b: integer; 5 ? 5 begin b a : = 5; 5+2 ? 7 b : = a + 2; a a : = (a + 2)*(b – 3); 7*4 28 5 end.
Оператор присваивания Общая структура: <имя переменной> : = <выражение>; Арифметическое выражение может включать • константы • имена переменных • знаки арифметических операций: + * / div mod умножение деление • вызовы функций • круглые скобки ( ) деление нацело остаток от деления
Какие операторы неправильные? program qq; var a, b: integer; x, y: real; begin имя переменной должно быть слева от знака : = a : = 5; целая и дробная часть 10 : = x; отделяются точкой y : = 7, 8; нельзя записывать b : = 2. 5; вещественное значение в целую переменную x : = 2*(a + y); a : = b + x; end.
Ручная прокрутка программы program qq; var a, b: integer; begin a : = 5; b : = a + 2; a : = (a + 2)*(b – 3); b : = a div 5; a : = a mod b; a : = a + 1; b : = (a + 14) mod 7; end. a b ? ? 5 7 28 5 3 4 4
Порядок выполнения операций • вычисление выражений в скобках • умножение, деление, div, mod слева направо • сложение и вычитание слева направо 2 3 5 4 1 7 8 6 9 z : = (5*a*c+3*(c-d))/a*(b-c)/ b; 2 6 3 4 7 5 1 12 8 11 10 9 x: =(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));
Сложение двух чисел Задача. Ввести два целых числа и вывести на экран их сумму. Простейшее решение: program qq; var a, b, c: integer; begin read ( a, b ); c : = a + b; writeln ( c ); end.
Оператор ввода read ( a ); { ввод значения переменной a} read ( a, b ); { ввод значений переменных a и b} Как вводить два числа? 25 a 30 b через пробел: 25 30 через Enter: 25 30 25 a 30 b
Оператор вывода write ( a ); { вывод значения переменной a} writeln ( a ); { вывод значения переменной a и переход на новую строчку} writeln ( 'Привет!' ); { вывод текста} writeln ( 'Ответ: ', c ); { вывод текста и значения переменной c} writeln ( a, '+', b, '=', c );
Форматы вывода program qq; var i: integer; x: real; begin всего i : = 15; символов writeln ( '>', i, '<' ); writeln ( '>', i: 5, '<' ); x : = 12. 345678; writeln ( '>', x, '<' ); writeln ( '>', x: 10, '<' ); writeln ( '>', x: 7: 2, '<' ); end. всего символов в дробной части >15< >1. 234568 E+001< > 1. 23 E+001< > 12. 35<
Полное решение program qq; var a, b, c: integer; begin writeln('Введите два целых числа'); read ( a, b ); c : = a + b; writeln ( a, '+', b, '=', c ); end. Протокол: это выводит компьютер Введите два целых числа 25 30 это вводит пользователь 25+30=55
Блок-схема линейного алгоритма начало блок "начало" ввод a, b блок "ввод" c : = a + b; вывод c конец блок "процесс" блок "вывод" блок "конец"
Задания "4": Ввести три числа, найти их сумму и произведение. Пример: Введите три числа: 4 5 7 4+5+7=16 4*5*7=140 "5": Ввести три числа, найти их сумму, произведение и среднее арифметическое. Пример: Введите три числа: 4 5 7 4+5+7=16 4*5*7=140 (4+5+7)/3=5. 33
Зарезервированные слова and else label repeat var asm end mod set while array file nil shl with begin for not shr xor case function object string const go to of then constructor if or to destructor implementation packed type div in procedure unit do inline program until downto interface record uses
Математические операции Функция Описание Odd(x) Для четного числа дает False, для нечетного - True Succ(x) Величина, следующая значению данного выражения (X+1) Pred(x) Величина, предшествующая значению данного выражения (X-1) Ord(x) Порядковый номер значения выражения в типе Chr (x) Возвращает символ ASCII, код которого равен x Sqr (x) Возвращает квадрат числа х Sqrt (x) Возвращает квадратный корень числа x
Математические операции Функция Int(x) Trunc(X) Описание Возвращает число, равное целой части числа X frac (x) Дает вещественную часть числа х Abs (x) Возвращает модуль числа х Sin (x), Cos (x) Arc. Tan (x) Exp (x) Ln (x) Возвращает Sin, Cos числа х в радианах Возвращает арк- фунцию числа х Возвращает экспоненту числа х Возвращает натуральный логарифм числа x Random (x) Возвращает случайное число от 0 до X-1 Pi Число Пи, зарезервированная константа Round(X) Функция округляет число X
Типы данных в Object Pascal
Целый тип данных Объем памяти, занимаемый переменной Диапазон значений Byte 1 0 до 255 Word 2 0 до 65535 4 0 до 4294967295 Short. Int 1 -128 до 127 Small. Int 2 -32768 до 32767 Описание Long. Word (Cardinal) Integer Long. Int 64 -2147483648 4 до 2147483647 8 -263 до 263 -1
Вещественный тип данных Описание Объем памяти, занимаемый переменной Диапазон значений Real Double 8 ± 5. 0*10 -324 до ± 1. 7*10308 Real 48 6 ± 2. 9*10 -39 до ± 1. 7*1038 4 ± 1. 5*10 -45 до ± 3. 4*1038 10 ± 3. 6*10 -4951 до ± 1. 1*104932 8 -263 до 262 Single Extended Comp
Логический тип данных Объем памяти, занимаемый переменной Диапазон значений Boolean 1 True or False Byte. Bool 1 True or False Bool 2 True or False word. Bool 2 True or False Long. Bool 4 True or False Описание
Тип данных Дата/время Описание TDate. Time Объем памяти, занимаемый переменной 8 Диапазон значений вещественное число с фиксированной дробной частью TDate. Time – позволяет одновременное хранение и даты, и времени. Целая часть числа - дата, дробная часть – время. Дата - количество суток, прошедших с 30 декабря 1899 года Время - часть суток, прошедших с 0 часов. Пример: Значение 36444, 837 соответствует дате 11. 10. 1999 и времени 20: 05.
Тип данных Дата/время Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00. 0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу. Над данными типа TDate. Time определены те же операции, что и над вещественными числами, а в выражениях этого типа могут участвовать константы и переменные целого и вещественного типов. Поскольку тип TDate. Time совместим с форматом вещественных чисел, можно без труда определить дату, отстоящую от заданной на сколько-то дней вперед или назад: для этого достаточно соответственно прибавить к заданной дате или отнять от нее нужное целое число
Программирование на языке Паскаль Модуль 2. Условный оператор Часть 1. Ветвления
Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Особенность: действия исполнителя зависят от некоторых условий (если … иначе …). Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися.
Вариант 1. Блок-схема начало ввод a, b да a > b? max: = a; блок "решение" полная форма ветвления нет max: = b; вывод max конец ? Если a = b?
Вариант 1. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); полная форма if a > b then begin условного max : = a; оператора end else begin max : = b; end; writeln ('Наибольшее число ', max); end.
Условный оператор if <условие> then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end; Особенности: • перед else НЕ ставится точка с запятой • вторая часть (else …) может отсутствовать (неполная форма) • если в блоке один оператор, можно убрать слова begin и end
Что неправильно? if a > b then begin a : = b end else begin b : = a end; if a > b then begin a : = b end begin else b > a begin b : = a end; if a > b then begin a : = b end else begin b : = a end; if a > b then begin a : = b end; end else begin b : = a end;
Вариант 2. Блок-схема начало ввод a, b max: = a; да b > a? max: = b; вывод max конец нет неполная форма ветвления
Вариант 2. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); max : = a; неполная форма условного if b > a then оператора max : = b; writeln ('Наибольшее число ', max); end.
Вариант 2 Б. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); max : = b; > if a ? ? ? b then ? ? ? max : = a; writeln ('Наибольшее число ', max); end.
Что неправильно? if a > b then begin a : = b; b else b : = a; if a > b then b a : = b; else b : = a; end; if a > b then begin a : = b; end else b : = a; if a > b then else beginthen if b >= a bb: = a; end;
Задания "4": Ввести три числа и найти наибольшее из них. Пример: Введите три числа: 4 15 9 Наибольшее число 15 "5": Ввести пять чисел и найти наибольшее из них. Пример: Введите пять чисел: 4 15 9 56 Наибольшее число 56 4
Программирование на языке Паскаль Модуль 2. Условный оператор Часть 2. Сложные условия
Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ "подходит" или "не подходит"). Особенность: надо проверить, выполняются ли два условия одновременно. ? Можно ли решить известными методами?
Вариант 1. Алгоритм начало ввод x да да 'подходит' x <= 40? x >= 25? нет 'не подходит' конец 'не подходит'
Вариант 1. Программа program qq; uses crt; var x: byte; begin writeln('Введите возраст'); read ( x ); if x >= 25 then if x <= 40 then writeln ('Подходит') else writeln ('Не подходит') readkey end.
Вариант 2. Алгоритм начало ввод x да x >= 25 и x <= 40? 'подходит' нет 'не подходит' конец
Вариант 2. Программа program qq; var x: integer; begin сложное writeln('Введите возраст'); условие read ( x ); if (x >= 25) and (x <= 40) then writeln ('Подходит') else writeln ('Не подходит') end.
Сложные условия Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: • not – НЕ (отрицание, инверсия) • and – И (логическое умножение, конъюнкция, одновременное выполнение условий) • or – ИЛИ (логическое сложение, дизъюнкция, выполнение хотя бы одного из условий) • xor – исключающее ИЛИ (выполнение только одного из двух условий, но не обоих) Простые условия (отношения) < <= > >= равно = не равно <>
Сложные условия Порядок выполнения • выражения в скобках • not • and • or, xor • <, <=, >, >=, =, <> Особенность – каждое из простых условий обязательно заключать в скобки. Пример 4 1 6 2 5 3 if not (a > b) or (c <> d) and (b <> a) then begin. . . end
Таблица истинности А true В true not A false A and B A or B true A xor B false true false true false true false
Сложные условия Истинно или ложно при a : = 2; b : = 3; c : = 4; True not (a > b) True (a < b) and (b < c) True not (a >= b) or (c = d) True (a < c) or (b < c) and (b < a) (a < b) xor not (b > c) FALSE Для каких значений (x (x < < > > 6) 6) x истинны условия: and (x < 10) and (x > 10) or (x < 10) or (x > 10) (- , 6) (6, 10) (10, ) (- , 10) (- , 6) (10, ) (- , ) (6, ) x < 6 x > 10 x < 10 x > 6
Задания "4": Ввести номер месяца и вывести название времени года. Пример: Введите номер месяца: 4 весна "5": Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом "год", "года" или "лет". Пример: Введите возраст: 24 Вам 24 года Введите возраст: 57 Вам 57 лет
Паскаль. М1 и М2.ppt