Основы программирования на языке Pascal.ppt
- Количество слайдов: 69
Основы программирования на языке Pascal Алфавит, типы данных, структура программ. Основные операторы.
Понятие языков программирования Языки программирования – искусственные языки, инструментальные средства разработки прикладных программ. Синтаксис правила записи конструкций языка. Семантика- смысл конструкций языка. Отладка - это поиск и исправление ошибок в программе. Тестирование составление специальных наборов - это входных и выходных данных (тестов), а затем исполнение программы и проверка полученных результатов в поисках возможных семантических или логических ошибок.
Уровни языков программирования Язык программирования низкого уровня ориентирован на конкретный тип процессора и учитывает его особенности. Операторы данного языка близки к машинному коду и содержат команды процессору. Ассемблер, Форт – примеры языков программирования низкого уровня Фрагмент программы на языке Ассемблер mov ax, dat mov ds, ax mov ah, 09 h mov dx, offset var int 21 h mov ah, 4 Ch int 21 h
Уровни языков программирования Языки программирования высокого уровня не учитывают особенности конкретных компьютерных архитектур. Создаваемые на них программы легко переносимы с одного типа компьютеров на другой, их разработка значительно проще, а уровень ошибок гораздо ниже. Паскаль, С++, PHP, Java, SQL – примеры языков программирования высокого уровня Фрагмент программы на языке SQL SELECT Товар. Название, Товар. Цена*Сделка. Количество AS Стоимость FROM Товар
Поколения языков программирования 1 поколение (нач. 50 -х гг. 20 в. ) – первый язык ассемблера, «одна инструкция, одна строка» . 2 поколение (конец 50 -х – нач. 60 -х годов 20 в. ) - символический ассемблер, в котором появилось понятие переменной. Именно он считается первым полноценным языком программирования. 3 поколение (вторая половина 69 -х гг. 20 в. ) - универсальные языки высокого уровня, с помощью которых удалось решить множество прикладных задач из различных областей науки и техники (Бэйсик, Паскаль, Фортран, Ада). 4 поколение (с начала 70 -х годов и по настоящее время ) - проблемноориентированные языки, оперирующие конкретными понятиями предметной области (ЛИСП, ПРОЛОГ). 5 поколение (с сер. 90 -х гг. 20 в. ) - системы автоматического создания прикладных программ с помощью визуальных средств разработки.
Компиляция и интерпретация Существует два метода получения машинного кода - компиляция и интерпретация. Программы-компиляторы просматривают программный код в поисках синтаксических ошибок, выполняют смысловой анализ и автоматически переводят (транслируют) на машинный язык — генерируют машинный код. Основной недостаток компиляторов — трудоемкость трансляции языков программирования, ориентированных на обработку данных сложной структуры. Интерпретатор берет очередной оператор из текста программы, анализирует его структуру и запускает на выполнение. Только после его успешного выполнения, интерпретатор переходит к следующему оператору. Недостаток интерпретаторов: программы, содержащие большой объем повторяющихся вычислений, будут работать достаточно медленно. Для выполнения исходной программы на другом компьютере там также должен быть установлен соответствующий интерпретатор.
Интегрированные системы программирования l l l текстовый редактор, ориентированный на конкретный язык программирования; компилятор, переводящий исходный текст в машинный код; библиотека функций, содержит машинный код подпрограмм, реализующих различные стандартные функции языка (например, вычисляющих математические функции sin или In); поставляется вместе с компилятором; редактор связей (сборщик, компоновщик) выполняет связывание объектных модулей программы и машинного кода стандартных функций, находя их в библиотеках, и формирует на выходе запускаемое приложение - исполнимый код; отладчик анализирует работу программы во время ее выполнения. С его помощью можно выполнять операторы исходного текста по шагам, наблюдая за изменением значений различных переменных.
Элементы языка Pascal: l l l буквы латинского алфавита А-Z (в любом регистре), а также знак подчеркивания _; буквы русского алфавита А-Я; цифры 0 -9; специальные символы > < = + - / * [ ] ( ) { } . , : ; ^ @ ’ $ # пары символов (их нельзя разделять пробелами) < > <= >= : = (* *) (. . ) пробелы (рассматриваются как ограничители идентификаторов, констант, чисел, зарезервированных слов).
Элементы языка Pascal: Идентификаторы - неделимые последовательности символов алфавита, используемые для обозначения констант, переменных, процедур, функций и т. д. Идентификаторы могут иметь произвольную длину, но значащими являются только первые 63 символа. Идентификатор должен начинаться с буквы или символа подчеркивания, не должен содержать пробелов и специальных символов. and goto array begin case string const label then div mod do to downto type else of end or until uses procedure var for program while record function repeat
Элементы языка Pascal: Константа- это объект, значение которого известно еще до начала работы программы. В качестве констант могут использоваться числа, логические константы, символы и строки символов. В языке Pascal существует три вида констант: l неименованные константы (не имеют имен, и потому их не нужно описывать; и тип определяется автоматически) int 1 : = -10; ch 3 : = 'z'; str 4 : = 'abc' + str 44; st 5 : = [1, 3, 5] * st 55; bool 6: = true;
Элементы языка Pascal: lименованные нетипизированные константы (имеют имя, описываются в специальном разделе const, тип определяется автоматически) const n = -10; x = 2. 5; c = 'z'; s = 'string'; lименованные типизированные константы - переменные(!) с начальным значением, которое к моменту старта программы уже известно. Следовательно, типизированные константы нельзя использовать для определения других констант, типов данных и переменных. Их значения можно изменять в процессе работы программы. const <имя_константы> : <тип_константы> = <нач_значение>; const n: integer = -10; c: char = 'z';
Элементы языка Pascal: Выражение задает порядок выполнения действий над элементами данных и состоит из операндов (констант, переменных, функций, круглых скобок и знаков операций). В общем случае выражение состоит из нескольких элементов (операндов) и знаков операций, а тип его значения определяется типом операндов и видом примененных к ним операций. Примеры выражений: (a+b)*c x-y a>2 sin(x) sum 1+sum 2
Структура программы Program <имя программы>; {Раздел описаний программы} Var … Const … BEGIN {Раздел исполняемых операторов} END.
Раздел описаний программы l l l раздел меток (label); раздел констант (const); раздел типов (type); раздел переменных (var); раздел процедур (procedure) раздел функций (function). Пример: var k, i, j: integer; a, b: real; сonst pi=3. 14; c=2. 7531;
Раздел исполняемых операторов Пример программы, служащей для вычисления площади круга некоторого постоянного радиуса R=6. 015. {Заголовок программы} program pr; {Задание значения радиуса} const r=6. 015; {Описание переменных программы} var s: real; {Начало раздела операторов} begin {Вычисление площади круга} s: =pi*sqr( r ); {Вывод результатов на экран} writeln(‘s=’, s); {Конец программы} end.
Типы данных
Стандартные функции ABS(x) – модуль х ( | x | ); SQR(x) – квадрат числа x (x 2); SQRT(x) – квадратный корень из x ( ); LN(x) – натуральный логарифм от х ( ln x ); EXP(x) – е в степени х (ех ); SIN(x) – синус х (sin x); COS(x) – косинус х (cos x); ARCTAN(x) – арктангенс х (arctg x).
Оператор присваивания Общий вид оператора присваивания: имя_переменной: =<выражение>; здесь имя_переменной – переменная, : = - операция присваивания. Выражение может содержать константы, переменные, названия функций, знаки операций и скобки. Переменная и выражение в операторе должны иметь один и тот тип. Примеры. y: =2*sin(x); a: =5; b: =a+7; х: =х+1;
Понятие составного оператора Составной оператор начинается ключевым словом BEGIN и заканчивается словом END. Между этими словами помещаются составляющие операторы, которые выполняются в порядке их следования. После END ставится точка с запятой, например: . . . begin i: =2; k: =i/5; end; . . .
Операторы ввода Для организации ввода данных с клавиатуры в языке Паскаль используется процедура READ. В общем случае данная процедура имеет вид: READ (a 1, a 2, a 3, … ); Здесь a 1, a 2, a 3, … - список переменных, разделенных запятой. Например, Var A : Real; B : Integer; C : Char; Begin READ(A, B, C) End. Примеры ввода данных с помощью процедуры READLN: READLN(A, B, C); READLN(X);
Процедура вывода Процедура, выводящая содержимое переменных на экран, называется процедурой вывода. WRITE (p 1, p 2, …, pn); где p 1, p 2, …, pn - список констант и/или переменных, разделенных запятой. Например, WRITE ('Сумма=', S). Примеры вывода данных: WRITE(A, B, C); WRITELN('Корнем уравнения является ', X); WRITELN(LOGP);
Основные алгоритмические структуры l Следование Пешеход шел по пересеченной местности. Его скорость движения по равнине v 1 км/ч, в гору — v 2 км/ч и под гору — v 3 км/ч. Время движения соответственно t 1, t 2 и t 3 ч. Какой путь прошел пешеход? 1. Ввести v 1, v 2, v 3, t 1, t 2, t 3. 2. S 1 : = v 1 * t 1. 3. S 2 : = v 2 * t 2. 4. S 3 : = v 3 * t 3. 5. S : = S 1 + S 2 + S 3. 6. Вывести значение S. 7. Конец.
Основные алгоритмические структуры l Ветвление Пример. функции 1. Ввести x. 2. Если x<=-12, то y: =–x 2; переход к п. 5 3. Если x<0, то y: =x 4; переход к п. 5 4. y : = x– 2 5. Вывести y 6. Конец Вычислить значение
Основные алгоритмические структуры l Циклы 1. С параметром 2. С постпроверкой условия 3. С предпроверкой условия
25 Программирование на языке Паскаль Тема 2. Ветвления
Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Особенность: действия исполнителя зависят от некоторых условий (если … иначе …). Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися. 26
Вариант 1. Блок-схема начало блок «решение» ввод a, b да a > b? max: = a; полная форма ветвления нет max: = b; вывод max конец ? Если a = b? 27
Вариант 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. 28
Условный оператор if <условие> then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end; Особенности: • перед else НЕ ставится точка с запятой • вторая часть (else …) может отсутствовать (неполная форма) • если в блоке один оператор, можно убрать слова begin и end 29
Вариант 2. Блок-схема начало ввод a, b max: = a; да b > a? нет неполная форма ветвления max: = b; вывод max конец 30
Вариант 2. Программа program qq; var a, b, max: integer; begin writeln('Введите два целых числа'); read ( a, b ); неполная форма max : = a; условного if b > a then оператора max : = b; writeln ('Наибольшее число ', max); end. 31
Задания « 4» : Ввести три числа и найти наибольшее из них. Пример: Введите три числа: 4 15 9 Наибольшее число 15 « 5» : Ввести пять чисел и найти наибольшее из них. Пример: Введите пять чисел: 4 15 9 56 Наибольшее число 56 4 32
33 Программирование на языке Паскаль Тема 3. Сложные условия
Сложные условия Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: • not – НЕ (отрицание, инверсия) • and – И (логическое умножение, конъюнкция, одновременное выполнение условий) • or – ИЛИ (логическое сложение, дизъюнкция, выполнение хотя бы одного из условий) • xor – исключающее ИЛИ (выполнение только одного из двух условий, но не обоих) Простые условия (отношения) < <= > >= равно = не равно <> 34
Сложные условия Порядок выполнения (приоритет = старшинство) • выражения в скобках • not • and • or, xor • <, <=, >, >=, =, <> Особенность – каждое из простых условий обязательно заключать в скобки. Пример 4 1 6 2 5 3 if not (a > b) or (c <> d) and (b <> a) then begin. . . end 35
Сложные условия Истинно или ложно при 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 (x < < > > 6) 6) 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 36
37 Программирование на языке Паскаль Тема 4. Циклы
Циклы Цикл – это многократное выполнение одинаковой последовательности действий. • цикл с известным числом шагов • цикл с неизвестным числом шагов (цикл с условием) Задача. Вывести на экран 5 раз слово «Привет» . Особенность: одинаковые действия выполняются 5 раз. ? Можно ли решить известными методами? 38
Блок-схема, соответствующая циклу с параметром языка Паскаль, представлена на рисунке Здесь i – параметр цикла; i 0 – начальное значение параметра; i. T – конечное значение параметра.
Циклы program qq; «Для всех i от 1 до 5 var i: integer; делай …» begin for i: =1 to 5 do writeln('Привет'); end. Если в цикле более одного оператора: for i: =1 to 5 do begin write('Привет'); writeln(', Вася!'); ? Что получится? end; 40
Циклы Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b). Особенность: одинаковые действия выполняются 8 раз. ? Можно ли решить известными методами? 41
Алгоритм начало задать начальное значение переменной цикла i : = 1; проверить, все ли сделали i <= 8? да i 2 : = i * i; i 3 : = i 2 * i; нет конец вычисляем квадрат и куб вывод результата i, i 2, i 3 перейти к следующему i i : = i + 1; 42
Алгоритм (с блоком «цикл» ) начало i : = 1, 8 i 2 : = i * i; i 3 : = i 2 * i; блок «цикл» конец тело цикла i, i 2, i 3 43
Программа program qq; var i, i 2, i 3: integer; begin начальное значение переменная цикла конечное значение for i: =1 to 8 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end. 44
Цикл с уменьшением переменной Задача. Вывести на экран квадраты и кубы целых чисел от 8 до 1 (в обратном порядке). Особенность: переменная цикла должна уменьшаться. Решение: for i: =8 downto 1 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end; 45
Цикл с переменной Увеличение переменной на 1: for <переменная> : = <начальное значение> to <конечное значение> do begin {тело цикла} end; Уменьшение переменной на 1: for <переменная> : = <начальное значение> downto <конечное значение> do begin {тело цикла} end; 46
Цикл с переменной Особенности: • переменная цикла может быть только целой (integer) • шаг изменения переменной цикла всегда равен 1 (to) или -1 (downto) • если в теле цикла только один оператор, слова begin и end можно не писать: for i: =1 to 8 do writeln('Привет'); • если конечное значение меньше начального, цикл (to) не выполняется ни разу (проверка условия в начале цикла, цикл с предусловием) 47
Цикл с переменной Особенности: • в теле цикла не разрешается изменять переменную цикла (почему? ) • при изменении начального и конечного значения внутри цикла количество шагов не изменится: n : = 8; for i: =1 to n do begin writeln('Привет'); нет n : = n + 1; зацикливания end; 48
Сколько раз выполняется цикл? a : = 1; for i: =1 to 3 do a : = a+1; a = 4 a : = 1; for i: =3 to 1 do a : = a+1; a = 1 a : = 1; for i: =1 downto 3 do a : = a+1; a = 1 a : = 1; for i: =3 downto 1 do a : = a+1; a = 4 49
Как изменить шаг? Задача. Вывести на экран квадраты и кубы нечётных целых чисел от 1 до 9. Особенность: переменная цикла должна увеличиваться на 2. Проблема: в Паскале шаг может быть 1 или -1. Решение: for i: =1 to 9 do begin if i mod 2 = 1 then begin ? ? ? выполняется только для нечетных i i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end; ? Что плохо? 50
Как изменить шаг? – II Идея: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Начальное значение i равно 1, с каждым шагом цикла i увеличивается на 2. Решение: i : = ? ? ? 1; for k: =1 to 5 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); ? ? ? i + 2; i : = end; 51
Как изменить шаг? – III Идея: Надо вывести всего 5 чисел, переменная k изменяется от 1 до 5. Зная k, надо рассчитать i. k 1 2 3 4 5 i 1 3 5 7 i = 2 k-1 9 Решение: for k: =1 to 5 do begin i ? ? ? 2*k – 1; : = i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end; 52
53 Программирование на языке Паскаль Тема 5. Циклы с условием
Цикл с неизвестным числом шагов Пример: Отпилить полено от бревна. Сколько раз надо сделать движения пилой? Задача: Ввести целое число (<2000000) и определить число цифр в нем. Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик. n count 123 0 12 1 1 2 0 3 Проблема: Неизвестно, сколько шагов надо сделать. Решение: Надо остановиться, когда n = 0, т. е. надо делать «пока n <> 0» . 54
Алгоритм начало обнулить счетчик цифр ввод n count : = 0; выполнять «пока n <> 0» n <> 0? нет да count : = count + 1; n : = n div 10; count конец 55
Программа program qq; , n 1: integer; var n, count: integer; begin writeln('Введите целое число'); read(n); n 1 : = n; выполнять count : = 0; «пока n <> 0» while n <> 0 do begin count : = count 1; count : = count + +1; : = div 10; n n: = n ndiv 10; end; writeln('В числе ', n 1, ' нашли ', n, count, ' цифр'); end. Что плохо? ? 56
Цикл с предпроверкой условия WHILE
Цикл с условием while <условие> do begin {тело цикла} end; Особенности: • можно использовать сложные условия: while (a
Цикл с условием Особенности: • условие пересчитывается каждый раз при входе в цикл • если условие на входе в цикл ложно, цикл не выполняется ни разу a : = 4; b : = 6; while a > b do a : = a – b; • если условие никогда не станет ложным, программа зацикливается a : = 4; b : = 6; while a < b do d : = a + b; 59
Сколько раз выполняется цикл? a : = 4; b : = 6; while a < b do a : = a + 1; 2 раза a = 6 a : = 4; b : = 6; while a < b do a : = a + b; 1 раз a = 10 a : = 4; b : = 6; while a > b do a : = a + 1; 0 раз a = 4 a : = 4; b : = 6; while a < b do b : = a - b; 1 раз b = -2 a : = 4; b : = 6; while a < b do a : = a - 1; зацикливание 60
Замена for на while и наоборот for i: =1 to 10 do begin {тело цикла} end; for i: =a downto b do begin {тело цикла} end; i : = 1; while i <= 10 do begin {тело цикла} i : = i + 1; end; i : = a; while i >= b do begin {тело цикла} i : = i - 1; end; Замена цикла for на while возможна всегда. Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла. 61
Последовательности Задача: найти сумму всех элементов последовательности, которые по модулю больше 0, 001: Элемент последовательности (начиная с № 2): n 1 2 3 4 5 . . . b 1 2 3 4 5 . . . c 2 4 8 16 32 . . . z -1 1 -1 . . . b : = b+1; c : = 2*c; z : = -z; 62
Алгоритм начальные значения начало S : = 0; b : = 1; S : = 0; c : = 2; z : = -1; a : = 1; |a| > 0. 001? новый элемент изменение первый элемент нет да S : = S + a; a : = z*b/c; b : = b + 1; c : = 2*c; z : = -z; S конец ? Перестановка? 63
Программа program qq; начальные var b, c, z: integer; значения S, a: real; begin S : = 0; z : = -1; b : = 1; c : = 2; a : = 1; while abs(a) > 0. 001 do begin увеличение S : = S + a; суммы a : = z * b / c; z : = - z; расчет элемента b : = b + 1; последовательности c : = c * 2; end; переход к writeln('S =', S: 10: 3); end. следующему слагаемому 64
Цикл с постусловием Задача: Ввести целое положительное число (<2000000) и определить число цифр в нем. Проблема: Как не дать ввести отрицательное число или ноль? Решение: Если вводится неверное число, вернуться назад к вводу данных (цикл!). Особенность: Один раз тело цикла надо сделать в любом случае => проверку условия цикла надо делать в конце цикла (цикл с постусловием). Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла. 65
Цикл с постпроверкой условия REPEAT
Цикл с постусловием: алгоритм начало ввод n тело цикла нет n > 0? да основной алгоритм условие ВЫХОДА блок «типовой процесс» конец 67
Программа program qq; var n: integer; begin repeat writeln('Введите положительное число'); read(n); условие ВЫХОДА until n > 0; until n. . . { основной алгоритм } end. Особенности: • тело цикла всегда выполняется хотя бы один раз • после слова until ("до тех пор, пока не…") ставится условие ВЫХОДА из цикла 68
Сколько раз выполняется цикл? a : = 4; b : = 6; repeat a : = a + 1; until a > b; 3 раза a = 7 a : = 4; b : = 6; repeat a : = a + b; until a > b; 1 раз a = 10 a : = 4; b : = 6; repeat a : = a + b; until a < b; зацикливание a : = 4; b : = 6; repeat b : = a - b; until a < b; a : = 4; b : = 6; repeat a : = a + 2; until a < b; 2 раза b = 6 зацикливание 69