1 ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКА Как и естественные языки программирования, имеют алфавит, словарный запас, синтаксис и семантику. Алфавит – разрешенный к использованию.

Презентация:



Advertisements
Похожие презентации
turbo.exe основной файл среды Любой язык обладает алфавитом, синтаксисом и семантикой. В алфавит входит набор символов, использующихся в языке с помощью.
Advertisements

Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
Язык программирования Pascal. Программа это упорядоченный список команд, необходимых для решения некоторой задачи. Языком программирования называют систему.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Тема урока Переменная. Тип данных. Ввод и вывод данных.
Pascal 1 Основы языка Паскаль Информатика и ИКТ Смирнов М.В. МКО ООШ п. Климковка Белохолуницкого района Кировской области.
Язык программирования Turbo Pascal. Программирование Программирование – это запись разработанного алгоритма на языке программирования. 4 Автор языка Паскаль.
Строки в Pascal
1 ESC – ВЫХОД НА СЛЕДУЮЩИЙ миэт цко НА ПРЕДЫДУЩИЙ Алфавит языка Турбо-Паскаль: БУКВЫ И ЦИФРЫ 1. Прописные и строчные буквы латинского алфавита: A B C D.
Символы и строки. Процедуры и функции работы со строками.
ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ ПРОГРАММИРОВАНИЯ ПАСКАЛЬ НАЧАЛА ПРОГРАММИРОВАНИЯ.
Познакомиться с основными понятиями языка Pascal 2.
ЛИНЕЙНЫЕ АЛГОРИТМЫ. Алгоритмические действия над исходными данными и рабочими объектами языка, необходимые для решения поставленной задачи описываются.
«Типы данных». Целочисленные типы данных Тип ДиапазонТребуемая память (байт) byte shortint integer word longint
1 Программирование на языке Паскаль Тема 1. Введение.
Подпрограммы 1.Принцип модульности 2.Область действия переменных 3.Параметры подпрограмм 4.Модули.
ОДНОМЕРНЫЕ МАССИВЫ. РАБОТА С ЭЛЕМЕНТАМИ СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ.
Урок 6 Turbo Pascal Язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля (1623–1662) и разработан.
Язык программирования Delphi. Алфавит языка 53 буквы латинского алфавита и символ подчеркивания Цифры от 0 до 9 23 спец.символа
Программирование на Pascal. Темы Повторение. Составные логические условия Повторение. Составные логические условия Повторение. Составные логические условия.
Транксрипт:

1 ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКА Как и естественные языки программирования, имеют алфавит, словарный запас, синтаксис и семантику. Алфавит – разрешенный к использованию набор символов, с помощью которого могут быть образованы слова и предложения языка. содержит: латинские буквы строчные и прописные, цифры арабские 0..9, спецсимволы, $ ' * + -,. / : ; ( ) & { } [ ] ^

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

3 Лексемы Лексемы – особые языковые конструкции, имеющие самостоятельный смысл. Различают следующие основные классы лексем: зарезервированные (служебные слова); идентификаторы (имена); изображения (значения); знаки операций; разделители; комментарии; пробел.

4 ВИДЫ ЛЕКСЕМ Зарезервированные (служебные) слова. Примеры: program, type, uses и т.д. более 60 слов. Их можно использовать только так, как определено разработчиком языка. Изображения. К их числу относятся константы, символьные строки и некоторые другие значения.

5 ВИДЫ ЛЕКСЕМ Идентификаторы (имена). Они предназначены для обозначения констант, переменных и др. Имя может содержать буквы, цифры, символ "_" (подчеркивание). Имя всегда (кроме метки) начинается с буквы. Длина имени может быть любой, однако компилятор учитывает имена по его первым 63 символам. Внутри имени не должно быть пробелов. Object Pascal в именах при компиляции не различает больших и малых букв. Так следующие имена будут идентичны: SaveToFile, SAVETOFILE. Это следует использовать для повышения наглядности текста программы.

6 ВИДЫ ЛЕКСЕМ Знаки операций формируются из одного или нескольких символов по определению действий, связанных с преобразованием данных. Операции 1. Арифметические: + - * / DIV MOD. 2. Логические not and or 3. Операция со строками конкатенация Операции над множествами. +, -, *. 5. Отношения > =. 6. ^ Разделители: = _., ' ( ) [ ] { } (**) : ; используются с целью разделения между собой лексем и для структурирования текста.

7 ВИДЫ ЛЕКСЕМ Комментарии – это текстовые строки, которые содержат пояснения к тексту программы, улучшая понятность текста программы (программного кода). Комментарий в программе можно записать одним из способов : { комментарий } (* комментарий *) // однострочный комментарий. Внутри самого комментария символы } или *) встречаться не должны.

8 ВИДЫ ЛЕКСЕМ Пробел не имеет видимого изображения и служит для отделения лексем друг от друга в тех случаях, когда это необходимо. Пробелами можно повысить наглядность текста программы. Например выделить разделы программы, указать вложенность элементов.

9 СТРУКТУРА PASCAL ПРОГРАММЫ program ; uses ; label ; const = ; type = ; var : ; procedure ; function ; Любой объект, прежде чем будет использован, он должен быть объявлен и описан. Pascal-программа состоит из блока описаний и блока операторов: Блок описаний содержит следующие разделы:

10 СТРУКТУРА PASCAL ПРОГРАММЫ Блок операторов представляет собой следующую синтаксическую конструкцию: begin {начало основного тела программы} end. (* конец основного тела программы *)

11 ДАННЫЕ В ПРОГРАММАХ С данными в программах связываются такие важные понятия языка, как значение, константа, переменная. Значение – это постоянная величина или комплекс постоянных величин, выраженных в явном виде. Значение не имеет имени. Примеры значений: {вещественное число}, 'Расчет посадки ' {строка символов}.

12 ДАННЫЕ В ПРОГРАММАХ Константа – это ячейка, в которой значение не изменяется во время работы программы. Переменная – это ячейка значение, в которой в любой момент времени может быть изменено программой. Всякая переменная должна быть описана, т.е. должен быть явно указан ее тип.

13 КОНЦЕПЦИЯ ТИПА ДАННЫХ Pascal относится к строго типизированным языкам. Каждое данное описывается как представитель одного из типов. Тип определяет: - множество возможных значений, которые может принимать переменная; - объем памяти занимаемой данным; - операции и функции, которые могут применяться к данным.

14 ОПИСАНИЕ ТИПОВ ДАННЫХ Тип данного может быть: - явно описан в разделе var ; - неявно определиться после вычисления выражения. var a,b: real; // переменные a b – вещественного типа I, j: integer; // переменные i j целого типа begin i:=1; a:= i ; // допустимо т.к. типы совместимы b:=i / j; // результат деления НЕЯВНО понимается как вещественное end.

15 Pascal имеет множество разнообразных типов. Более того, он позволяет пользователю самостоятельно конструировать необходимые ему типы. Типы имеют свою иерархию. Типы данных разделяются на стандартные и пользовательские.

16 В Pascal есть еще одна удобная возможность описания переменной. Тип переменной предварительно объявляется в разделе type, затем описывается в разделе var. Например, type Tcolor=(red,blue,black); //объявление типа var color1:Tcolor; //описание переменной типа цвет Begin color1:= red; end.

17 СТРУКТУРА ТИПОВ OBJECT PASCAL Простые (скалярные) Структуры Указатели СимволыЛогические Целые ПеречислимыеОграниченные ЗаписиМассивыМножества Стандартные типы Порядковые Действительные (вещественные) Конструируемые пользователем типы Строки

18 КОНСТАНТЫ Константа - это объект, значение которого известно еще до начала работы программы, и не изменяется во время выполнения программы. КОНСТАНТЫ ОБЫЧНЫЕИМЕННОВАННЫЕ числовые строковые символьные множества логические

19 ОБЫЧНЫЕ КОНСТАНТЫ Обычные константы отдельного описания в программе не требуют, к ним относятся: числовые константы, символьные, строковые, логические, множества. Числовая константа. Любая последовательность цифр в программе (возможно, пред- варяемая знаком "-" или "+" или разбиваемая одной точкой) воспри- нимается компилятором как неименованная числовая константа. Целая часть от дробной отделяется точкой. Перед отрицатель- ным числом ставится минус, перед положительным плюс можно опустить. Дробные константы могут быть записаны в форме с фиксированной или плавающей запятой. Например, е23 1,02е-12 Тип такой константы может быть только целый или веществен- ный (Real, Integer), это определяется компилятором автоматически.

20 ОБЫЧНЫЕ КОНСТАНТЫ Символ. Строка. Строковые и символьные константы заключаются в апостроф, например, a или Иванов. Логическое значение. Могут принимать значения TRUE или FALSE.

21 ИМЕНОВАННЫЕ КОНСТАНТЫ Именованные константы необходимы для повышения наглядности программ. Именованная константа имеет имя и описывается в разделе Const. Например: Const Prise=250; flag=true; Name=kolya; Radius=2.321;

22 ОПИСАНИЕ МЕТОК Язык допускает в качестве меток использовать имя или значение целого типа из диапазона Любой оператор может быть помечен меткой, оператором перехода можно передать управление на помеченный оператор. Все метки должны быть описаны в разделе Label. Например: Label 1, 2, Met1, Met2, Met3; Оператор помечается меткой с помощью : Например, met1: x:=1.2;

23 ОПИСАНИЕ ПЕРЕМЕННЫХ Переменные – это именованные данные, которые в процессе выполнения программы могут изменять свое значение. Каждая переменная имеет: имя, тип, значение, область видимости. В процессе выполнения программы значение может изменяться. Переменные описываются в разделе var Например, var a,b,c : real; i,j,k : integer; s1 : string;

24 ВЫРАЖЕНИЯ Выражения – состоят из операндов, операции, скобок. Операнды – константы, переменные, функции участвующие в написании выражения. Выражения различаются по типу их результата. Приоритет операций в выражениях Первый (высший) not Второй * / div mod Третий + - and or Четвертый (низший) = = Выражение, стоящее в скобках вычисляется в первую очередь.

25 ВЫРАЖЕНИЯ Основное требование к записи выражений является размещение всех его элементов в одной строке (на одном уровне). Например, (6-x)x+10(xy-6xyz) xy-yz-zx следует записать так: ((6 - x) * x + 10 * (x * y - 6 * x * y * z)) / (x * y - y * z - z * x) А выражение x yz выглядит так x / y / z или так x / ( y * z)

26 ОПЕРАТОРЫ Операторы – это инструкции по выполнению каких либо действий. Подразделяются на простые и сложные. Простые – не содержат в себе других операторов в качестве составных частей. К ним относятся операторы: - присваивания := - перехода goto L - пустой оператор ; - оператор обращения к процедуре, функции.

27 ОПЕРАТОРЫ Сложные - содержат в себе другие операторы в качестве составных частей. К ним относятся операторы: - составной begin ; ; … end ; - условия if then else ; - выбора case - цикла (с параметром for, с предусловием while, с постусловием repeat ) - оператор присоединения with

28 ОПЕРАТОРЫ Операторы можно помечать метками (которые предварительно следует описать в разделе label), можно передавать управление на метки оператором перехода goto. Все операторы языка Pascal должны заканчиваться знаком " ; " (точка с запятой), и ни один оператор не может разрываться этим знаком. Единственная возможность не ставить после оператора ";" появляется в том случае, когда сразу за этим оператором следует ключевое слово end.

29 ОПЕРАТОР ПРИСВАИВАНИЯ Оператор присваивания предназначен для изменения содержимого переменной. Синтаксис оператора присваивания: x := y; {читается «переменной x присвоить значение y"} Здесь x – переменная, y – выражение совместимого с x типа. В частности выражением могут быть переменная, именованная константа или значение. Семантика оператора присваивания: сначала вычисляется выражение y, затем получившийся результат в виде значения записывается в переменную x. При этом если ранее, что то было в х, то оно стирается и заносится новое значение.

30 ПРИМЕР КОНСОЛЬНОЙ ПРОГРАММЫ var a,b : real ; i,n : integer ; Begin a:=1.25; b:=a+3.14; b:= b+a; n:=1; i:=b; end.

31 ВВОД С КОНСОЛИ Ввод с клавиатуры данных в ранее описанные переменные проводится с помощью вызова стандартных процедур read( ); readln( ); Первая считывает все предложенные ей данные, оставляя курсор в конце последней строки ввода, а вторая - сразу после окончания ввода переводит курсор на начало следующей строки. В остальном же их действия полностью совпадают.

32 ВВОД С КОНСОЛИ Список ввода - это последовательность имен переменных разделенных запятыми. Например, Var k:byte; x:real; c:char; s:string; begin readln(k,x,c,s); {программа получит с клавиатуры значения сразу для четырех переменных, относящихся к различным типам}. end. Вводимые значения необходимо разделять пробелами, а завершать ввод - нажатием клавиши Enter. Ввод данных заканчивается в тот момент, когда последняя переменная из списка ввода получила свое значение.

33 ВВОД С КОНСОЛИ Типы вводимых значений должны совпадать с типами указанных переменных, иначе возникает ошибка. Ввести с клавиатуры можно целые, символьные, вещественные, строковые типы.

34 ВЫВОД НА КОНСОЛЬ Для того чтобы вывести на экран данные пользуются вызовом процедур write( ) или writeln( ). Первая из них после печати оставит курсор в конце выведенной строки, а вторая переведет его в начало следующей строчки. Например, writeln(a,b,c); но в этом случае выводимые символы окажутся «слепленными», поэтому более правильно в список добавить пробелы writeln(a,' ',b,' ',c).

35 ВЫВОД НА КОНСОЛЬ Вывод переменных можно сделать форматированным, например writeln(a:5,b,c:20:5); Первое число после знака ":" обозначает количество позиций, выделяемых под всю переменную, а второе - под дробную часть числа. Десятичная точка тоже считается отдельным символом. Если число длиннее, чем отведенное под него пространство, количество позиций будет автоматически увеличено. Если же выводимое число короче заданного формата, то спереди к нему припишутся несколько пробелов. Например, если a = 25, b = 'x', а c = 10.5, то после выполнения команды writeln(a:5,' ',b,c:10:5) на экране или в файле будет записано: _ _ _25_x_ _ Особенно важен формат при выводе вещественных переменных. Если не указать формат, то число выведется в формате с плавающей запятой, т.е будет выведено как Е+0001.

36 ПОРЯДКОВЫЕ ТИПЫ К порядковым типам относятся: - простые (базовые) - целые, символьные, логические; - конструируемые – перечислимый и ограниченный. Особенности порядковых типов: - представление данных порядкового типа – точное; - каждому данному может быть сопоставлен уникальный (порядковый) номер; - определен порядок в соответствии с нумерацией, т.е. из двух данных можно точно сказать, которое из них меньше, а которое – больше.

37 Процедуры и функции порядковых типов 1. Функция ord(x) возвращает порядковый номер значения переменной x. 2. Функция pred(x) возвращает значение, предшествующее х. 3. Функция succ(x) возвращает значение, следующее за х. 4. Процедура inc(x) возвращает значение, следующее за х (x:=x+1). 5. Процедура inc(x,k) возвращает k-е значение, следующее за х (x:=x+k). 6. Процедура dec(x) возвращает значение, предшествующее х (x:=x-1). 7. Процедура dec(x,k) возвращает k-e значение, предшествующее х (x:=x-k). 8. Функции High(x), Low(x) наибольшее наименьшее значение

38 ЦЕЛЫЕ ТИПЫ ТипДиапазон значенийРазмер в б Integer Longint Byte0…2551 Word

39 В целых типах определены операции: * умножение; div целочисленное деление; mod остаток от целочисленного деления; + сложение; - вычитание; При выполнении / обычного деления результат получится вещественный. Значения целых типов могут изображаться и в шестнадцатеричном виде. Для этого в начале числа ставится символ $ а сами значения формируются из шестнадцатерич-ных цифр 0.. 9, A... F. Примеры: 241 $F1 ( то же, что 241)

40 СИМВОЛЬНЫЙ ТИП Символьный тип, будучи порядковым, обрабатывается всеми функциями порядкового типа в соответствии c таблицей кодировки Ord(x), Pred(x), Succ(x), High(x), Low(x). Возможно применение всех операций отношения a

41 ЛОГИЧЕСКИЙ (БУЛЕВСКИЙ) ТИП Константы, False, True ( Boolean) определены в стандартных модулях и не требуют описания. Переменные булевского типа принимают два значения 0 и 1 или что тоже false и true, т.е. используют только один бит памяти. ТИП БАЙТ Boolean1 Для булевских типов применяются операции сравнения, =, =, , логические not, and, or, xor. Например, q:=3 petia ivanov

42 ЛОГИЧЕСКИЕ ОПЕРАЦИИ Приоритет операций not, and, or, xor, выше чем =,, =, , поэтому операции отношения должны быть заключены в скобки. Например, (-3>5)or not(5 1) X Y and or xor not

43 ПЕРЕЧИСЛИМЫЙ ТИП Задает упорядоченное множество значений путем пере- числения имен, обозначающих эти значения, например: Type fam=(Ivanov, Petrov, Sidorov, Fedorov); Var x : fam; //переменная x может иметь только одно из выше перечисленных значений fam Begin For x:=Ivanov to Fedorov do …. End. Значения, указанные в описании типа, являются константами этого типа, т.е. может быть конструкция x:=Ivanov; Нельзя использовать одну и ту же константу для определения различных типов. Применимы операции отношения > < и т.д., функции Pred, Succ, Ord и т.д., надо учитывать что Ord(Ivanov) примет значение 0.

44 ОГРАНИЧЕННЫЕ ТИПЫ (ДИАПАЗОН) Создаются из порядковых типов путем наложения ограничений (первый при этом называется базовым), например: Type Color = (red, blue, green, black); Color1= red.. green; // объявление ограниченного типа на основе перечислимого Digit =0..9; Symbol = a..z; Var k: 1..3; k1: Digit ; К переменным типа диапазон применимы все операции и функции допустимые в базовом типе. Попытка присвоить переменной типа диапазон значения выходящего за границы диапазона приведет к ошибке.

45 ВЕЩЕСТВЕННЫЕ ТИПЫ ТИПДИАПАЗОН ЗНАЧЕНИЙЦифрБ Real Double5.0* * * *

46 ВЕЩЕСТВЕННЫЕ ТИПЫ Операции + - * / дают вещественный результат если хотя бы один операнд вещественный. Если в выражении используется несколько вещественных типов, то результат усекается до наименьшей точности. Вещественные значения можно представить: в форме с фиксированной десятичной точкой. Пример ; разделитель. а, в форме с плавающей десятичной точкой. Примеры: -45.2E6 ( то же, что -45,2*10 6 ) 5.245E-12 ( то же, что 5,24* ). Порядок в таких числах должен быть всегда целым числом.

47 ФУНКЦИИ ВЕЩЕСТВЕННОГО ТИПА ABS(X)АБСОЛЮТНОЕ ЗНАЧARCTAN(X)АРКТАНГЕНСCOS(X) SIN(X) КОСИНУС СИНУС EXP(X)ЭКСПОНЕНТАSQR(X)КВАДРАТLN(X)ЛОГАРИФМ НАТУР ФУНКЦИЯ НАЗВАНИЕФУНКЦИЯНАЗВАНИЕSQRT(X)КОРЕНЬ КВАДРАТНЫЙPI3, INT(X) FRAC(X) TRUNC(X) ROUND(X) ДРОБНАЯ ЧАСТЬ ОТСЕЧЕНИЕ ДРОБНОЙ Ч ОКРУГЛЕНИЕ ЦЕЛАЯ ЧАСТЬ Подключаемый по умолчанию модуль System обеспе- чивает работу следующих стандартных функций

48 ЭКВИВАЛЕНТНОСТЬ И СОВМЕСТИМОСТЬ ТИПОВ Два типа Т1 и Т2 являются эквивалентными (идентичными), если выполняется одно из двух условий: -Т1 и Т2 есть один и то же тип; -тип Т2 описан с использованием типа Т1. Например: type T1 = Integer; T2 = T1; T3 = T2; Типы являются совместимыми, если: -они эквивалентны; -являются оба либо целыми, либо действительными; -один тип - интервальный, другой - его базовый; -оба интервальные с общим базовым;

49 СОСТАВНОЙ ОПЕРАТОР Зарезервированные слова begin end называются операторными скобками. Составным оператором называется группа операторов заключенных в операторные скобки т.е. Begin ; ;… end; Составной оператор применяется тогда, когда по правилам синтаксиса разрешается применять только один оператор, а необходимо выполнить несколько.

50 ПУСТОЙ ОПЕРАТОР Пустой оператор не выполняет никаких действий. Символ ; - применяется для разделения операторов, но не входит в оператор. Перед end символ ; не ставится, но если он стоит, то понимается это как пустой оператор. Пустой оператор может быть помечен меткой. Например, Begin a:=1; lb1 : ; // пустой оператор помеченный меткой lb1 end; Begin ;; ; end; // три пустых оператора

51 ОПЕРАТОР ПЕРЕХОДА Оператор перехода goto передает управление в программе на тот оператор, который помечен меткой. Помечается оператор так (метка затем двоеточие) A1: x:=1; Помеченный оператор и оператор перехода должны распола- гаться в одном блоке. Например, Label m1; // описана метка m1 var a,b : real; begin b:=0; m1: read(a); // помечен оператор b:= b+a; If a>0 then goto m1; // переход на метку m1 end.

52 УСЛОВНЫЙ ОПЕРАТОР IF Условный оператор предназначен для реализации ветвящихся алгоритмов. Синтаксис оператора: if then else ; // полная форма if then ; //укороченная форма замечаем, что перед else ; не ставится Семантика оператора: - вычисляется логическое выражение - если в результате ИСТИНА (true), то выполняется следующий после then (т.е. оператор 1). - если в результате ЛОЖЬ (false), выполняется оператор следующий после else. В укороченной форме выполняется следующий оператор за if. В случае если вместо операторов 1 или 2 требуется выполнить не один, а группу операторов, их необходимо заключить в операторные скобки.

53 УСЛОВНЫЙ ОПЕРАТОР IF Ввиду существования полной и укороченной форм при использовании вложенных конструкций if могут возникать неоднозначности в понимании того, к какой из вложенных конструкций if относится else. If у1>1 then if у2>2 then о:=1 else о:=2; Else относится к ближайшему then, как во втором случае.

54 УСЛОВНЫЙ ОПЕРАТОР IF (пример) Составить программу выводящею слово Yes, если точка с координатами x,y принадлежит заштрихованной области и No, если нет var x,y,R : real; begin writeln(enter x y R ); readln (x,y,R); if (x*x+y*y =0) and (y>=0) then writeln(Yes ) else writeln(No ); end.

55 Оператор выбора CASE Оператор выбора позволяет выбрать переход на один из нескольких вариантов операторов.

56 Оператор выбора CASE (пример) Var n:integer; begin writeln(enter n ); readln (n); case n of 12,1,2 : writeln(Winter); 3,4,5 :writeln(Spring); 6,7,8 :writeln(Summer); else writeln(Autem ); end; end. Составить программу выводящую на экран название времени года по введенному номеру месяца.

57 ОПЕРАТОРЫ ЦИКЛОВ Циклы бывают трех видов: с параметром, с предусловием, с постусловием. Цикл с параметром – организует циклическое выполнение оператора заранее известное число раз. Синтаксис имеет две разновидности: for := to do ; for := downto do ; – переменная порядкового типа, параметр цикла; и - выражения совместимые по типу с параметром цикла; - тело цикла, оператор выполняющийся циклически.

58 for i:=1+m to 10*n do k:=k+1; Семантика оператора первого вида: - вычисляются выражения для начального и конечного значения; - счетчику присваивается начальное значение; - счетчик сравнивается с конечным значением, и если он меньше или равен конечного выполняется тело цикла; - счетчик увеличивается до следующего значения; - если счетчик меньше конечного значения, то выполняется тело цикла, если больше, то следующий за циклом оператор.

59 for i:=10 downto 1 do k:=k+1; Оператор второго вида выполняется аналогично но отсчет обратный. for i:=10 downto 1 do k:=k+1; В теле цикла может быть составной оператор или оператор цикла. Например, (пусть предварительно m:=0;n:=0; k:=1 ) for i:=1 to 10 do begin m:=m+1;n:=n+i; k:=k*i; end; Значение счетчика изменять внутри цикла с параметром запрещено.

60 Вычислить S= 1+1/4+1/9+1/16+ … +1/n 2 Var i,n: integer ; s,ai: real ; begin writeln(enter n ); readln (n); s:=0; for i:=1 to n do begin ai:=1/sqr(i); s:=s+ai; end ; writeln(s=,s:7:3); readln; end.

61 ВЛОЖЕННЫЕ ЦИКЛЫ В теле оператора цикла могут быть размещены другие операторы цикла. Такие структуры называются вложенными циклами. Язык допускает любую глубину вложенности циклов. При использовании вложенных циклов необходимо иметь в виду следующее: - все вложенные циклы For – Do должны иметь различные счетчики (иначе это противоречило бы требованию на запрет изменения значения счетчика внутри цикла); - нет никаких ограничений на досрочный выход из внутреннего цикла наружу; - недопустим вход во внутренний цикл For – Do, минуя его заголовок, что соответствует общему требованию о корректном входе в цикл. На каждом шаге наружного цикла полностью выполняется внутренний цикл.

62 Вывести на экран таблицу Пифагора. Var s,i,n: integer ; begin for i:=1 to n do begin for j:=1 to n do begin s:=i*j; write (,s:4); end ; writeln; end ; writeln(s=,s:7:3); readln; end.

63 ЦИКЛЫ С ПРЕДУСЛОВИЕМ И ПОСТУСЛОВИЕМ Синтаксис цикла с предусловием While do ; Семантика: - вычисляется значение логического выражения; - если лог выр имеет значение true, то выполняется тело цикла; - если оно имеет значение false, то выполняется следующий за циклом оператор. Синтаксис цикла с постусловием Repeat ; ; … until ; Семантика: - выполняется группа операторов оп1,оп2... опn ; - вычисляется значение логического выражения, и если оно true, то выполняется следующий после цикла оператор. Использование операторных скобок не обязательно, цикл выполняется хотя бы один раз.

64 Найти сумму знакочередующегося ряда S=1-1/3+1/5-1/7+ … с точность e = Известно,что в знакочередующемся сходящемся ряде остаток не более первого отброшенного члена. Var z,n: integer ; eps,s,t: real ; begin writeln(enter eps ); readln (eps); s:=0; t:=1; n:=1; z :=1; repeat t:= 1/(2*n-1); s:=s+t*z; n:=n+1; z:=z*(-1); until t

65 ОПЕРАТОР BREAK Во всех циклах д ля досрочного прерывания используется оператор break ; оператор continue передает управление на начало цикла. Оператор Break может быть размещен в теле цикла. При его выполнении цикл прекращает работу и считается выполненным. Пример. s:= 0; i:=0; Repeat Inc (i); s:= s + z[i]; if s > 14 then Break ; Until (i = 44); В этом примере цикл будет выполняться до тех пор, пока не выполнится условие i = 44 или если переменная s превысит значение 14.

66 ПОДПРОГРАММЫ Подпрограмма – это законченная алгоритмическая единица, которая предназначена для выполнения некоторого круга операций. В программировании процесс решения сложной задачи представляется как последовательность решения ряда простых, а для решения простых используются подпрограммы. Разработку отдельных подпрограмм ведут разные специалисты одновременно. Применение подпрограмм позволяет сократить число повторений групп операторов, а также конструировать программу как набор подпрограмм.

67 ОПИСАНИЕ ПОДПРОГРАММ В языке Pascal есть два вида подпрограмм – процедуры и функции. Описанием подпрограммы является ее исходный код, а обращением к подпрограмме является оператор вызова подпрограммы. Каждая подпрограмма должна быть описана в блоке описаний. Описывается подпрограмма только один раз, а исполь- зоваться (вызываться) может многократно. Таким образом, описание – это технология, а обращение – это действие по предписанной технологии.

68 СТРУКТУРА ОПИСАНИЯ ПОДПРОГРАММЫ Структура описания подпрограммы сходна со структурой программы. Синтаксис ее таков: procedure ; {аналогично function ;} uses ; const ; type ; var ; procedure ; function ; begin end. Заголовок процедуры или функции. Обязательный раздел. локальные описания тело подпрограммы

69 Всякая подпрограмма может иметь локальные и глобальные по отношению к ней описания (константы, переменные, массивы, подпрограммы и т.д.). Локальным является описание, действие которого ограничено только подпрограммой, в которой оно описано, т.е. при выходе из подпрограммы значения локальных описаний теряются. Локальные описания и тело подпрограммы ни чем не отличаются от подобных разделов программ, а заголовки следует рассмотреть подробней.

70 ОПИСАНИЕ ЗАГОЛОВКА ПРОЦЕДУРЫ Описание процедуры начинается с заголовка, в котором задается имя процедуры и список формальных параметров с указанием их типов. Если параметров нет, то только имя. При вызове подпрограммы формальные параметры заменяются фактическими в том же порядке как они были указаны в описании заголовка. С помощью параметров осуществляется передача входных данных в процедуру, а так же возвращаются результаты работы процедуры в программу. Пример описания заголовка процедуры: procedure Max( x:real; I:integer; var c,d;real; ); В программе возможен такой вызов (обращение к ) п/п Max(ax,k+1, c1,d); имена формальных и фактических параметров могут совпадать и не совпадать.

71 ОПИСАНИЕ ЗАГОЛОВКА ПРОЦЕДУРЫ Синтаксис описания заголовка процедуры : Procedure ( ); Список формальных параметров может включать: - параметры-значения; - параметры-переменные.

72 ПАРАМЕТРЫ-ЗНАЧЕНИЯ В ОПИСАНИИ ЗАГОЛОВКА В описании параметры-значения служебными словами не выделяются. При вызове процедуры : -формальные параметры-значения могут заменяться константами, переменными или выражениями соответствующего типа; -выражения (стоящие в качестве фактических параметров) прежде вычисляются их значения заносятся во временную память стек. Копии фактического параметра присваиваются параметру значению и отрабатываются подпрограммой, т.е. изменение параметра-значения внутри подпрограммы никак не изменит фактические параметры. Используются параметры-значения для передачи входных данных в подпрограмму.

73 ПРИМЕР ПОДПРОГРАММ Пример: Посчитать значения следующих выражений: Y= x Z= (tgx+1) T= e 2x + 1 Var x,y,z,t real; // описание глобальных параметров function F(x:real):real; // описание подпрограммы begin F:= sqr(x)+1; // тело подпрограммы end; begin Write(введите x ); Readln(x); Y:=F(x); //вызов подпрограммы формальный параметр заменен фактическим Z:=F(tan(x)+1); //вызов подпрограммы T:=F(exp(x)); //вызов подпрограммы Writeln(Y=,Y, Z=, Z, T=,T,); end.

74 ПАРАМЕТРЫ-ПЕРЕМЕННЫЕ В ОПИСАНИЕ ЗАГОЛОВКА В заголовке подпрограммы перед каждым описанием ставится слово var. Например, Procedure koren (a,b,c:real; var x1,x2:real; var S:string) При вызове параметры-переменные передают ссылку, т.е. адрес фактического параметра, по которому должно передаваться значение. По адресу, подпрограмма извлекает значение фактического параметра, работает с ним, может изменить его и разместить результат по тому же адресу. В качестве фактического параметра для параметра-переменной может использоваться только переменная. Параметры-переменные используются в подпрограммах как для описания входных данных так и выходных.

75 ПАРАМЕТРЫ-ПЕРЕМЕННЫЕ В ОПИСАНИЕ ЗАГОЛОВКА Пример: сколько ошибок в программе var x,y,z:real; procedure Sum (x,y:real; var z:real); Begin z:=x+y; end ; begin read(x,y); Sum(x,y,z); Sum(x+1,y,z); Sum(x,y,Z+1.25); Sum(x,y,1.25); end.

76 ФУНКЦИИ Описание функции подобно описанию процедуры, но результат ее работы есть возвращение только одного значения произвольного типа. Поэтому в заголовке функции указывается тип возвращаемого значения. Function ( ): ; Например, Function arcsin(x:real):real; // возвратит веществ значение

77 ФУНКЦИИ В конце тела функции должен быть один оператор присваи- вания, в левой части которого стоит имя самой функции. Например описание: Function arcsin(x: real ): real ; Begin arcsin := arctan(x/sqrt(1-x*x)); end ; Вызов функции можно помещать в выражениях и операторах присваивания. Например, Z:=2*arcsin(a-2)+1;

78 ГЛОБАЛЬНЫЕ И ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ Переменные, описанные в основной программе, являются глобальными по отношению к переменным описанным в процедурах и функциях. Тоже отностится и к вложенным пп Переменные, описанные в процедурах и функциях, являют- ся локальными по отношению к переменным описанным в основных программах. Локальные переменные порождаются при каждом вызове процедуры и уничтожаются при выходе из нее, т.е. основной программе локальные переменные не доступны. Если имена у локальной и глобальной переменных совпадают, то внутри подпрограммы будет действовать локальная переменная.

79 ГЛОБАЛЬНЫЕ И ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ Подпрограммы могут получать входные данные и возвращать результат в основную программу не только при помощи параметров переменных и выходных параметров, но и с помощью глобальных переменных. Хотя для уменьшения количества ошибок, требуется соблюдать принцип максимальной локализации переменных.

80 Процедуры прерывания подпрограммы Процедура exit передает управление из текущей подпрограммы в подпрограмму вызвавшую ее на следующий после вызова оператор. Если exit действует в основной программе, то это приводит к выходу из программы. Процедура halt досрочно прекращает работу программы.

81 СТРОКОВЫЕ ТИПЫ Написание большинства программ не обходится без использования строковых данных. Строка - это последовательность символов. Строковые типы во многом схожы с массивом символов. Отличие состоит в том, что переменная строкового типа может иметь динамическое количество символов (изменяемое в процессе работы программы), в то время как массив символов всегда статичен, т.е. имеет одинаковое количество символов, выделяемых статически на этапе компилирования.

82 СТРОКОВЫЙ ТИП String String – короткая строка длина не более 255 символов (в однобайтовой кодировке СР-866 ). Самый первый байт имеет номер 0 и содержит символ, код которого равен длине строки. По номеру символа можно получить доступ к его значению, при этом номер заключается в квадратные скобки. Например, I:=ord(s[0]); - даст количество символов в строке, s[1]:=a; символ «а» сделает первым символом в строке. Короткая строка размещается компилятором в памяти до начала выполнения программы, т.е. статически.

83 СТРОКОВЫЕ КОНСТАНТЫ Строковые (символьные) константы изображают в виде последовательности символов (символа), заключенной в апострофы. Например: c:='z';{c: char} или s:='abc';{s: string} Константе автоматически присваивается "минимальный" тип данных, достаточный для ее представления: char или string[k]. Поэтому попытка написать c:='zzz'; {c: char} вызовет ошибку уже на этапе компиляции.

84 СТРОКОВЫЕ ТИПЫ (ПРИМЕР) Пример. В строке Ivanov I дописать имя. Var S:string; begin S:= Ivanov I S[0]:=chr(12);// изменяем длину строки // дальше добавляем символы S[9]:=v; S[10]:=a; S[11]:=n; S[12]:=.; readln; end. Оперировать строкой как символьным массивом неудобно

85 СТРОКОВЫЕ ВЫРАЖЕНИЯ И СТАНДАРТНЫЕ ПРОЦЕДУРЫ Над строками определена операция конкатенации сцепления строк, в которой за символами первой стоки располагаются символы второй строки. Оперировать строкой как символьным массивом неудобно (как видно из примера), поэтому в работе со строками предпочтительней использовать стандартные процедуры и функции.

86 СТАНДАРТНЫЕ ПРОЦЕДУРЫ ДЛЯ СТРОКОВЫХ ТИПОВ (ознакомительно) Приведем некоторые из них: Procedure Delete (varS:string;Index,Count:Integer); Удаляет из S подстроку начиная с Index размером Count символов. Procedure Insert (Source:string; var S:string; Index:integer); Вставляет в Source подстроку S начиная с Index. Function Pos (Substr:string; S:string):integer; Возвращает индекс начала первого вхождения Substr в S Function Length (S): integer; Возвращает число символов строки S. Procedure SetLength(var S; NewLength: integer); устанавливает новую длину строки S. При увеличении строки старые символы остаются на прежних местах, добавленные неопределенны (пробелы), при уменьшении строка урезается.

87 Function IntToStr(V:integer):string; Преобразует целое число в строку символов (состоящих из цифр). Function FloatToStr(V:extendent):string; Преобразует вещественное число в строку Function StrToInt(const S :string;):integer; Преобразует строку без пробелов в целое. Function StrToFloat(const S :string;):extendend; Преобразует строку в вещественное.