Главная      Лекции     Лекции (разные) - часть 9

 

поиск по сайту            

 

 

 

 

 

 

 

 

 

содержание   ..  461  462  463   ..

 

 

1. 1 Что такое "программирование"? 6

1. 1 Что такое "программирование"? 6

СОДЕРЖАНИЕ

1 Введение........................................................................................................ 5

1.1 Что такое "программирование"?........................................................... 5

1.2 Понятие алгоритма................................................................................. 5

1.3 Алгоритмический язык........................................................................... 7

2 Введение в язык Turbo Pascal....................................................................... 8

2.1 История создания языка......................................................................... 8

2.2 Алфавит языка........................................................................................ 8

2.3 Структура программы........................................................................... 9

3 Типы данных. Описание переменных........................................................ 11

3.1 Понятие типа данных. Система типов языка....................................... 11

3.2 Описание данных.................................................................................. 13

3.3 Целые типы........................................................................................... 13

3.4 Вещественные типы.............................................................................. 14

3.5 Арифметические выражения................................................................ 16

3.6 Символьный тип................................................................................... 16

3.7 Булевский тип........................................................................................ 17

3.8 Ограниченные типы.............................................................................. 19

3.9 Перечислимые типы.............................................................................. 20

4 Операторы................................................................................................... 21

4.1 Основные операторы............................................................................ 21

4.2 Составной оператор............................................................................. 23

4.3 Условный оператор.............................................................................. 23

4.4 Оператор варианта............................................................................... 25

4.5 Операторы циклов................................................................................ 25

4.6 Пустой оператор................................................................................... 28

5 Некоторые составные типы........................................................................ 29

5.1 Регулярные типы (массивы)................................................................. 29

5.2 Строковый тип...................................................................................... 30

5.3 Множественный тип.............................................................................. 32

5.4 Комбинированный тип (запись)........................................................... 35

6 Подпрограммы........................................................................................... 38

6.1 Назначение подпрограмм.................................................................... 38

6.2 Структура подпрограмм...................................................................... 38

6.3 Область действия имен......................................................................... 39

6.4 Механизм параметров.......................................................................... 40

7 Файловые типы........................................................................................... 46

7.1 Файлы. Файловые переменные............................................................ 46

7.2 Основные операции с файлами............................................................ 47

7.3 Примеры работы с файлами................................................................ 48

7.4 Текстовые файлы.................................................................................. 52

8 Модули. Графика........................................................................................ 54

8.1 Организация модулей........................................................................... 54

8.2 Модуль Graph....................................................................................... 55

8.3 Инициализация и выход из графического режима............................. 59

8.4 Вывод некоторых графических примитивов....................................... 60

8.5 Управление графическими элементами............................................... 60

8.6 Управление графическим курсором.................................................... 63

8.7 Вывод текстовой информации............................................................. 63

9 Ссылочные типы. Динамические переменные........................................... 64

9.1 Динамическая память. Статические и динамические переменные...... 64

9.2 Понятие ссылочных типов и указателей.............................................. 65

9.3 Списки................................................................................................... 66

10 Программа Turbo Pascal.......................................................................... 69

10.1 Основы работы с программой........................................................... 69

10.2 Отладчик............................................................................................. 74

Методические указания по выполнению контрольной работы №2............ 76

Литература..................................................................................................... 80

1 Введение

1.1 Что такое "программирование"?

Сейчас, наверное, практически невозможно найти человека, который бы не слышал таких слов, как "информатика", "программирование", а профессия программиста стала одной из самых многочисленных.

Чем же занимаются программисты? Наверное, самый простой ответ – создают программы для решения задач с помощью компьютера. Попробуем разобраться, из чего состоит процесс написания программы. Прежде всего, перед программистом ставится определенная задача. Очевидно, что для решения задачи недостаточно только знать язык, на котором требуется написать программу, самое главное – найти способ ее решения, алгоритм . А сама программа – это запись этого алгоритма на каком-либо языке, понятном машине. Процесс перевода на этот язык и называется программированием , а язык, на который осуществляется перевод, называется алгоритмическим языком . Именно поэтому самым важным в профессии программиста является умение создавать хорошие алгоритмы, а следовательно, и хорошие программы.

1.2 Понятие алгоритма

Понятие алгоритма является одним из фундаментальных понятий информатики и широко используется в программировании – написание любой программы начинается с составления алгоритма. Алгоритмы возникли вместе с появлением математики и встречаются практически во всех областях человеческой деятельности. Например, в школьном курсе математики изучаются алгоритмы деления "столбиком", умножения дробей и т.д.; в курсе высшей математики – алгоритмы решения дифференциальных уравнений, нахождения интегралов и т.д. Кроме этого, можно описать алгоритмы выращивания цветов, сборки шкафа, проведения физического эксперимента и многие другие.

Определить это понятие можно следующим образом: алгоритм – это конечный набор правил, однозначно задающих последовательность выполнения некоторых действий, направленных на достижение определенного результата. Однако, не любой набор правил можно назвать алгоритмом. Рассмотрим требования, которым должен удовлетворять алгоритм:

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

- однозначность – применение алгоритма к одним и тем же входным данным должно давать один и то же результат;

- конечность – количество шагов алгоритма не может быть бесконечным.

Описать алгоритм можно разными способами. Например, алгоритм вычисления выражения 52 ×(62 +32 ), описанный словесным способом, будет выглядеть следующим образом: вычислить значения выражений 62 и 32 , сложить их и умножить полученную сумму на значение выражения 52 . Как правило, такие описания алгоритмов получаются громоздкими и неоднозначными, найти ошибки в них очень сложно.

Гораздо чаще для этих целей используются блок-схемы алгоритмов . Они позволяют представить алгоритмы в более наглядном виде, это дает возможность анализировать их работу, искать ошибки в их реализации и т.д. В блок-схемах всегда есть начало и конец , между ними – последовательность шагов алгоритма, соединенных дугами . Шаги бывают безусловными (изображаются прямоугольниками) и условными (изображаются ромбами). Из ромба всегда выходят две стрелки – одна означает выполнение условия (обозначается обычно словом "да"), другая – невыполнение ("нет"). Вывод на экран значения выражения изображается параллелограммом. Например, опишем блок-схему алгоритма для нахождения максимального из трех заданных чисел a,b,c.


Рисунок 1.1 – Пример блок-схемы алгоритма

Если решение задачи сложное и достаточно длинное, то алгоритм может получиться громоздким и плохо обозримым. Избежать этого можно, заменив некоторые шаги алгоритма блоками, которые будут являться подалгоритмами. Блок обычно не элементарен, его размеры выбираются в зависимости от необходимости, однако, если он правильно составлен, то обладает всеми необходимыми признаками алгоритмического шага: имеет точку входа (четко выделенное начало) и может быть условным или безусловным. Разные блоки алгоритма связаны друг с другом только через точки входа и выхода, поэтому если блок верно решает свою задачу, то его внутренняя структура несущественна для остальной части алгоритма. Такое блочное представление особенно удобно на первых этапах решения сложных задач, когда детализация блоков производится позднее, и возможно, другими разработчиками.

1.3 Алгоритмический язык

Алгоритмы, описанные неформальными способами, как правило, сложны для понимания и неоднозначны. Для того чтобы исключить эти недостатки, используются алгоритмические языки.

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

При описании любого языка (в том числе естественного, например, русского, английского и т.д.) используются следующие понятия: алфавит , синтаксис и семантика .

Алфавит языка – это множество символов, которые могут быть использованы в текстах этого языка.

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

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

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

2 Введение в язык Turbo Pascal

2.1 История создания языка

В 1968-1971 гг. в Цюрихском Институте информатики в Швейцарии Никлаусом Виртом был разработан язык программирования Pascal . Необходимость создания подобного языка возникла за отсутствием инструмента обучения студентов "программированию как систематической дисциплине". Но достаточно скоро стало ясно, что этот язык очень эффективен как для решения разных задач, так и для разработки сложных систем. И при этом он прост и легок в изучении.

Pascal – процедурный язык, имеющий блочную структуру. Набор операторов языка отражает принципы структурного программирования.

Язык Turbo Pascal, созданный фирмой Borland International, является реализацией языка Pascal для персональных компьютеров. Turbo Pascal – это язык профессионального программирования, одна из особенностей которого состоит в наличии интегрированной среды, включающей ряд мощных программных средств подготовки, редактирования, компиляции и отладки программного обеспечения. К достоинствам Турбо-Паскаля можно отнести:

- простоту и естественность основных конструкций языка, что позволяет быстро его освоить и создавать алгоритмически сложные программы;

- возможность использования развитых средств представления структур данных, что обеспечивает удобство работы как с числовой, так и с символьной информацией;

- соответствие языка структурному программированию, что делает программы наглядными и упрощает их разработку и отладку;

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

2.2 Алфавит языка

Алфавит языка включает следующие символы:

Заглавные и строчные латинские буквы и символ "_" (который тоже считается буквой). Используются при создании идентификаторов и служебных слов .

- Цифры от 0 до 9. Используются при записи чисел и идентификаторов.

- Специальные символы: + - * / = > < . , ; : @ ^ ‘ ( ) [ ]
{ } $ #
используются как знаки операций , синтаксические разделители , при записи выражений, комментариев.

Символы алфавита языка используются для построения лексем – элементарных единиц языка, имеющих самостоятельный смысл. К лексемам относятся служебные слова, идентификаторы, знаки операций, разделители, изображения.

Служебные слова – это конечный набор зарезервированных слов, смысл которых определен в языке. Служебные слова нельзя использовать в качестве идентификаторов. Примеры служебных слов: begin, end, const, var, if, then и т.д.

Идентификаторы – это имена переменных, констант, процедур, функций, типов, меток. Составляются из букв, цифр и знаков подчеркивания в соответствии со следующими правилами:

- длина идентификатора может быть произвольной, однако компилятор воспринимает только первые 63 символа;

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

В Pascal строчные и заглавные буквы в идентификаторах и служебных словах не различаются, поэтому следующие идентификаторы считаются одинаковыми:

My_Function;

my_function;

MY _ FUNCTION .

Знаки операций формируются из одного или нескольких специальных символов, например: <=, <>, >.

Разделители также формируются из одного или нескольких спецсимволов и предназначены для наглядности программ.

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

{Данная строка является комментарием}.

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

Так как Pascal – алгоритмический язык, программа, написанная на этом языке, является записью некоторого алгоритма, т.е. последовательности действий.

В целом программа на языке Pascal состоит из двух основных частей: описание всех данных, с которыми производятся действия, и описание самих действий. Кроме этого, в самом начале программы может присутствовать ее название – заголовок, который рассматривается как комментарий. В самом конце программы ставится точка ". ".

В разделе описания могут быть следующие объекты:

- переменные;

- константы;

- типы;

- метки;

- подпрограммы.

Общая структура программы примерно выглядит следующим образом:

Program <имя программы>; {заголовок программы}

Label

{раздел описания меток}

Const

{раздел описания констант}

Type

{раздел описания типов}

Var

{раздел описания переменных}

Begin

{тело программы, представляет из себя последовательность операторов, разделенных символом "; "}

End.

Обратите внимание, что имя программы заключено в треугольные скобки, такие скобки используются только для того, чтобы показать, что их содержимое может изменяться. При написании программы треугольные скобки не ставятся. Например, можно использовать различные заголовки программы: Program Hello или Program My_prog.


3 Типы данных. Описание переменных

3.1 Понятие типа данных. Система типов языка

Теоретически научиться программировать невозможно. Поэтому все, что вы будете изучать с помощью данного пособия, желательно реализовывать практически. Вы должны писать программы, начиная с простых и все более усложняя их. Если у вас возникают проблемы с компиляцией, отладкой, то в этом случае сначала обратитесь к главе 10, в которой изложены основы работы с программой-компилятором Turbo Pascal.

В любой задаче используются, обрабатываются какие-либо данные – числа, целые или вещественные, массивы, символы, слова и т.д. Все они характеризуются своим типом . Классификация различных данных по типам возникла по следующим причинам. Во-первых, тип фактически характеризует множество значений к которым относится константа, которые может принимать некоторая переменная или выражение и которые может формировать функция. Во-вторых, благодаря указанию типа определяется множество операций, которые можно применять к данным этого типа. Например, числа можно перемножать и делить, но операции умножения и деления недопустимы для строк. В-третьих, указание типа данных необходимо для правильного представления данных в памяти машины.

Рисунок 3.1 – Система типов языка Pascal

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

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

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

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


Рисунок 3.2 – Стандартные скалярные типы языка Pascal

Существует два способа создания новых типов на основе стандартных скалярных – ограниченные и перечислимые типы.

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

3.2 Описание данных

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

Раздел описания переменных начинается со служебного слова var, само описание переменной содержит два элемента: имя переменной (идентификатор) и ее тип. Эти элементы разделяются двоеточием, после указания типа ставится разделитель – символ ";".

Var <имя переменной>:<тип переменной>;

Так как Pascal статический язык, то это описание остается неизменным во всей области определения переменной. Если несколько переменных имеют один тип, их описания объединяются в одно, при этом имена указываются через запятую.

Var <имя переменной1>,<имя переменной2>:<тип переменных>;

3.3 Целые типы

Для работы с данными представленными целыми числами используются целые типы. Это 5 типов (Integer , Byte , Shortint , Word , Longint ), обозначающих множества целых чисел в различных диапазонах. Типы различаются допустимым диапазоном значений и размером занимаемой оперативной памяти. Характеристики типов приведены в следующей таблице:

Таблица 3.1 – Целые типы

Название типа

Диапазон допустимых значений

Размер памяти

Shortint

-128..127

1 байт

Integer

-32768..32767

2 байта

Longint

-2147483648..2147483647

4 байта

Byte

0..255

1 байт

Word

0..65535

2 байта

Таким образом, если переменные принимают только положительные значения по смыслу задачи, их следует описать с помощью типов Byte или Word. Если предполагается работа с большими числами, то переменные следует описать с помощью типа Longint. Приведем пример описания переменных.

Var a1:integer;

b,c:byte;

x,y,z:longint;

При таком описании в памяти выделится два байта под переменную а1, по одному байту для переменных b и c, и по четыре байта для переменных x, y и z.

3.4 Вещественные типы

Для работы с дробными (вещественными числами) используются вещественные типы. Это 5 типов (Real, Single, Double, Extended, Comp ), обозначающих множества вещественных чисел в разли­чных диапазонах.

Вещественные значения в программе могут изображаться двумя способами:

- в форме с фиксированной точкой, когда целая часть от дробной отделяется с помощью точки (4.786, 1.0, -65.23 и т.д.);

- в форме с плавающей точкой (запись числа состоит из двух элементов – мантиссы и порядка, между ними ставится символ "Е". Например, запись числа 2,8*109 выглядит, как 2.8Е9, число 0,000001 равно 0,1*10-5 и записывается как 0.1Е-5).

Примеры неправильных форм записи:

.987

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

Вещественные типы отличаются друг от друга допустимым диапазоном значений и размером занимаемой оперативной памяти. Характеристики типов приведены в следующей таблице:

Таблица 3.2 – Вещественные типы

Название типа

Диапазон допустимых значений

Размер памяти

Real

2.9е-39 .. 1.7е38

6 байт

Single

1.5е-45 .. 3.4е38

4 байта

Double

5.0е-324 .. 1.7е308

8 байт

Extended

3.4е-4932 .. 1.1е4932

10 байт

Comp

-2е+63 .. +2е+63-1

8 байт

Операции, допустимые над целыми и вещественными значениями

Арифметические операции (+ , - , * , / ) применимы, как к целым так и к вещественным значениям. Из таблицы можно увидеть, какого типа результат будет получен при выполнении этих операций над данными целого или вещественного типа.

Таблица 3.3 – арифметические операции

a

b

a+b

a-b

a*b

a/b

целое

целое

целое

целое

целое

вещественное

целое

вещественное

вещественное

вещественное

вещественное

вещественное

вещественное

целое

вещественное

вещественное

вещественное

вещественное

вещественное

вещественное

вещественное

вещественное

вещественное

вещественное

Операции отношения (=, <>, >=, <=, >, <). Целые числа можно сравнивать, как с целыми так и с вещественными.

Для целых типов определены еще две операции:

- операция "деление нацело" с отбрасыванием дробной части, обозначается служебным словом div (14 div 3 =4, 5 div 8=0);

- операция "взятие остатка от целочисленного деления", обозначается служебным словом mod (14 mod 3 =2, 5 mod 8=5).

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

trunc ( x ) – отбрасывание вещественной части x , x – вещественное значение (trunc(5.67)=5.

round ( x ) – операция округления вещественного числа х до ближайшего целого (round(5.67)=6; round(5.47)=5).

sqr ( x ) функция возведения в квадрат, где x переменная целого или вещественного типа, значение функции совпадает с типом аргумента.

sqrt ( x ) – функция извлечения квадратного корня, где x переменная целого или вещественного типа, значение функции всегда вещественного типа.

Sin ( x ), cos ( x ), arctan ( x ) тригонометрические функции, аргументы и значения которых всегда вещественного типа, причем для sin(x), cos(x) значение переменной х задается в радианах.

Abs ( x ) функция определения модуля числа х, где x переменная целого или вещественного типа, значение функции совпадает с типом аргумента.

Exp ( x ) – экспонента в степени х, где аргумент целого или вещественного типа, значение функции всегда вещественного типа.

Ln ( x ) натуральный логарифм х, где аргумент целого или вещественного типа, значение функции всегда вещественного типа.

Функции Ln ( x ) и Exp ( x ) могут быть использованы для возведения в степень по правилу: хn =enln ( x ) . Например, значение х9 вычисляется по формуле exp(9*ln(x)).

3.5 Арифметические выражения

Константы по внешнему виду похожи на переменные, однако, в отличие от них, не могут изменить своего значения. Описание констант начинается со служебного слова const . Описание каждой константы включает всегда только два элемента: идентификатор и константное выражение, разделенные символом "=", заканчивается символом ";". Пример:

const

max = 1000;

Pi = 3.1415;

С = Pi*2;

min = -max;.

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

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

Выражения используются для вычисления новых значений, т.е. имеют тип, который определяется синтаксически в зависимости от типов операций и операндов.

Операнды – это некоторые "элементарные" значения: переменные, константы, вызовы функций.

При составлении выражений необходимо знать следующие правила.

1. Все выражение должно быть записано в строку. Двухэтажные выражения, а так же верхние и нижние индексы не допускаются. Например: ((а1*х1)-(а2*х2))/(х1-х2).

2. В выражении в качестве разделителей можно использовать только круглые скобки.

3. Нельзя записывать подряд два знака. Например, форма записи а+в/-с неправильна, правильной является форма а+в/(-с) .

Примеры выражений:

a+b*x;

y-(2*y+c)*y;

sin(x)*2+56.

3.6 Символьный тип

Переменные этого типа описываются служебным словом char .

Язык Pascal позволяет работать не только с численными данными, но и с символьными. Значениями символьного типа являются символы из множества ASCII (American Standart Code For Information Interchange - американский стандартный код для обмена ин­формацией).

Это множество включает 256 различных символов, расположенных в определенном порядке и пронумерованных. Номера символов – целые числа в диапазоне 0..255. Допускаются некоторые отклонения от стандарта ASCII, в частности при наличии соответствующей системной поддержки это множество может содержать буквы русского алфавита. Размер памяти, занимаемый символом, 1 байт.

Если символьное значение имеет графическое представление, то оно изображается соответствующим знаком, заключенным в одинарные кавычки (апострофы), например: ' R ' '+' '-' 's'. Для представления самого апострофа его изображение удваивается: ''''.

Если символ, который нужно изобразить, не имеет графического представления, то можно воспользоваться следующей эквивалентной формой записи, состоящей из символа ‘#’ (решетка, диез) и целочисленного кода символа (от 0 до 255): #10, #13.

Операции, возможные над символьными данными:

- операции сравнения – результат операции определяется сопоставлением кодов сравниваемых символов, тот символ больше, чей код больше;

- функция ord ( c ) (с – переменная символьного типа) вычисляет порядковый номер символа с (например, ord (' R ')=82 );

- функция chr ( i ) (i – переменная целого типа) выдает символ с порядковым номером i (например, chr (68)=' D ' );

- функция pred ( c ) выдает предыдущий по отношению к с символ (например, pred ('9')='8' );

- функция succ ( c ) выдает следующий после символа с символ (например, succ (' b ')=' a ' ).

3.7 Булевский тип

Логический тип данных часто называют Булевским типом, по имени английского математика Джорджа Буля, создателя особой области математики – логики. Основу математической логики составляют две константы: True (Истина, 1) и False (Ложь, 0). Логические данные широко используются при сравнении величин. Результат сравнения может быть истинным или ложным.

Примеры.

1) a2 =b2 +c2 – истинно при a=5, b=4, c=3

ложно при a=2, b=3,c=4.

2) x2 <0 – всегда ложно.

В языке Паскаль переменные логического типа могут принимать значения True и False. Значения этого типа занимают 1 байт памяти. Описание переменных логического типа выполняется с помощью служебного слова Boolean.

Var

A, B: Boolean;

В теле программы такой переменной можно присваивать значения логических констант True и False.

Пример.

A:=True;

B:=False;

Логические выражения

Как уже отмечалось выше, логические данные широко используются при сравнении величин. В результате сравнении величин, получается либо ложное, либо истинное значение. В языке Pascal для сравнения данных предусмотрены следующие операции отношения (сравнения):

< - меньше;

> - больше;

= - равно;

<= - меньше или равно;

>= - больше или равно;

<> - не равно.

Отношения можно использовать в правой части оператора присваивания. Например:

A:=3<6; {Всегда False}

A:=x1<>x2;

B:=(x1+x2)<18;

В математической логике имеются специальные логические операции:

Or – логическое сложение (ИЛИ),

And –логическое умножение (И),

Not – логическое отрицание (НЕ).

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

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

Операция отрицания дает ложный результат, если операнд истинный, и, наоборот, истинный результат, если операнд ложный.

Данные о результатах логических операций представлены в таблице 3.4.

Таблица 3.4 – логические операции

A

B

A or B

A and B

Not A

False

False

False

False

True

False

True

True

False

True

True

False

True

False

False

True

True

True

True

False

Примеры.

(A<3)Or(B>2) – при A=4, B=0 – ложно, при A=4, B=3 – истина.

(A<3)And(B>2) – при A=1, B=10 –истина, при A=3, B=3 – ложь.

Not (A<2) – при A=1 – ложь, A=4 – истина.

Таким образом, логические выражения строятся из логических переменных, логических констант, логических операций, операций отношений.

Кроме того, в языке существует система приоритетов , т.е. очередности выполнения операций в выражении. Для изменения очередности предназначены круглые скобки – часть выражения, заключенная в скобки рассматривается как отдельный операнд.

Приоритет операций (от высшего к низшему):

1) not;

2) *, / , and,div, mod;

3) +, -, or;

4) =, <>, <,>, <=, >= .

3. 8 Ограниченные типы

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

Var

х: -1000..1000;

с: ‘ a ’..’ z ’;

y : 0..9.

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

Описанному таким образом типу можно задать идентификатор, который можно использовать при описании переменных и создании новых типов.

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

3.9 Перечислимые типы

Другой способ создания нового типа – перечисление всех возможных его значений, причем каждое такое значение будет определяться именем. Описание этого типа представляет собой набор значений, заключенный в скобки, сами названия значений разделяются запятой. При создании любых новых типов их необходимо описать в разделе описания типов, который начинается со служебного слова type и располагается в соответствии с общей структурой программы. Например:

type

color = ( red, yellow, green );

direction = ( left, right, up, down );

Var

c: color;

d: direction;

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

4 Операторы

Поскольку язык Pascal алгоритмический, то для записи шагов алгоритмов, для наглядного однозначного представления алгоритмов в стиле структурного программирования существует набор операторов. Основные операторы считаются простыми, остальные – структурными, т.е. в их состав могут входить другие операторы, причем глубина "вложенности" операторов не ограничена.

4.1 Основные операторы

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

Предназначен для присваивания переменной значения выражения. Оператор обозначается символом ":=", в левой части указывается имя переменной, в правой – вычисляемое выражение. Оператор считается синтаксически правильным, если тип выражения в правой части совпадает с типом переменной. Допускается использование этого оператора с переменными любого типа, кроме файлового.

Примеры использования оператора присваивания:

с переменными целого типа: x:=200;

вещественного: y := Sin ( Pi /3);

символьного: c :=‘6’;

булевского: test:=false;

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

Для того чтобы программа могла работать в диалоговом режиме (позволяла бы вводить данные и видеть результаты работы на экране) существуют операторы ввода и вывода. Существует две формы оператора ввода: read и readln .

read(x1,x2,x3…);

Оператор read обеспечивает ввод данных разных типов с клавиатуры. В скобках указываются имена переменных, которым присвоятся введенные значения. При вводе нескольких значений с помощью одного оператора они разделяются символом "пробел". Для окончания ввода (завершения работы одного оператора read) нажимается клавиша "Enter". Если же в программе есть несколько подряд идущих операторов read, то данные вводятся потоком , т.е. без нажатия "Enter".

readln(x1,x2,x3…);

Оператор readln аналогичен предыдущему, отличие заключается в том, что при выполнении одного оператора readln курсор на экране монитора переходит на новую строку.

Примеры:

read(a);

read(a,b,c);

readln(x,y).

Аналогично существует две формы оператора вывода:

write(x1,x2,x3…);

В результате выполнения данного оператора значения переменных x1,x2,x3… будут выведены на экран монитора. Если необходимо вывести на экран какой-либо текст, то внутри оператора write этот текст записывается в апострофах:

x:=5;

write(‘x=‘,x);

Результат выполнения этих операторов:

x=5.

writeln(x1,x2,x3…);

Аналогичен оператору write , отличие заключается в том, что после выполнения оператора writeln курсор переходит на одну строку вниз. Оператор writeln может использоваться без каких-либо параметров – в этом случае после выполнения такого оператора курсор просто перемещается на одну позицию вниз, так, например, выполнение последовательности команд

writeln;

writeln;

writeln;

writeln;

writeln;

приведет к тому, что курсор опустится на пять строк вниз.

Примеры:

writeln(‘Hellow World!’);

write(‘a=‘,a,’ b=‘,b,’ c=‘,c);

Операторы вывода обеспечивают вывод на экран не только значений переменных, но также и значения выражений. Например, в результате выполнения следующих операторов:

x:=4;

y:=3;

writeln(‘Значение выражения = ‘, x + sqr( y ));

получим на экране монитора следующее сообщение:

Значение выражения = 13.

В операторах вывода write и writeln имеется возможность установить ширину поля вывода.

Если x и i - целочисленные выражения, а y - вещественное выражение, то вызов

write(x : i, y : i )

печатает значения x и y каждое в крайние правые позиции полей шириной i ;

write(y : i : x)

вызовом в крайние правые позиции поля шириной i символов выводится десятичное представление значения y в формате с фиксированной точкой, причем после десятичной точки выводится x цифр, представляющих дробную часть числа.

4.2 Составной оператор

Для того чтобы задать последовательное выполнение (по порядку, один за другим) нескольких операторов, в языке Pascal существует составной оператор . Операторы, входящие в составной, разделяются символом "; ", в начале ставится служебное слово begin , в конце – end .

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

begin

x:=10;

writeln(‘y=‘,x*sqr(x))

end

Обратите внимание: перед служебным словом end разделитель (символ "; ") не ставится .

4.3 Условный оператор

Очень часто так же, как и в жизни, при решении задач некоторые действия выполняются в зависимости от истинности каких-либо условий. Например, мы берем с собой зонт, если идет дождь или на небе тучи. Или часто встречающиеся в математике определения функций:

если x<0, то f(x)=x+1;

если x>=0, то f(x)=2x.

Здесь значение функции f вычисляется в зависимости от величины x по разным формулам.

Для задания выбора того или иного действия в зависимости от условия в языке Pascal предназначен условный оператор , который имеет две формы: полную и сокращенную.

Полная форма: if <условие> then <оператор1>

else <оператор2>;

В качестве условия используется значение логического выражения, в качестве операторов – любой простой или составной оператор, в том числе и сам условный оператор.

Если значение логического выражения – true , то выполняется оператор1, если false , то выполняется оператор2.

Часть условного оператора, начинающаяся со слова else , может отсутствовать, такая форма оператора называется сокращенной и выглядит следующим образом:

if <условие> then <оператор>;

Оператор в этом случае выполняется, если условие истинно, иначе программа переходит к следующему оператору.

Для примера полной формы рассмотрим определение функции f(x):

if x<0 then f:=x+1

else f:=2*x;

Если в нашем примере описать логическую переменную В, значение которой будет равно true , если x<0, и false иначе, то можно записать так:

B:=x<0;

If B then f:=x+1

else f:=2*x;

Пример краткой формы:

if not((x<3) and (x>1)) then y:=sqr(x);

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

if <условие1> then if <условие2> then <оператор1> else <оператор2>.

В данном случае необходимо помнить, что служебное слово else всегда ассоциируется с ближайшим по тексту программы словом if , которое еще не связано с else . А чтобы такая двусмысленность не возникала, лучше всего пользоваться составным оператором:

if <условие1> then

begin

if <условие2> then <оператор1>

else <оператор2>

end ;

4.4 Оператор варианта

Более обобщенной формой условного оператора, учитывающей произвольное число альтернатив, является оператор варианта . Использование этого оператора позволяет задавать выполнение некоторых действий для нескольких различных значений одного выражения:

case <выражение> of

<значение1 > : <оператор1 >;

<значение2 > : <оператор2 >;

<значение3 > : <оператор3 >;

… …

else <операторN >

end

<операторN > выполнится только в том случае, если значение выражения не совпадет ни с одним из <значенийi >. В качестве <значения> можно также задать список и(или) диапазон значений. Например:

case x of

1..2 : f:=5;

3, 4, 10..20 : f:=10;

5, 6 : f:=15;

else writeln(‘Введен неправильный параметр!’)

end

4.5 Операторы циклов

Очень часто возникает необходимость выполнить один и тот же оператор (или группу операторов) несколько раз. Для этого в языке Pascal предусмотрены операторы циклов.

Оператор цикла с предусловием .

Блок схема такого оператора:


Форма записи:

while <условие> do <оператор>;

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

Примеры:

Вычисление факториала:

while x <=N do

begin {начало цикла}

Fact := Fact*x;

x := x + 1

end; {конец цикла}

Вычислить у=х2 при х=2, 4, 6, 8, 10:

x:=2;

while x<=10 do

begin {начало цикла}

y:=sqr(x);

writeln(‘x=‘,x:3, ‘y=‘,y:5);

x:=x+2

end; {конец цикла}

Если в операторе цикла условие всегда истинно, то такой цикл называется бесконечным :

t:=true;

while t do x:=x+5;

Оператор цикла с постусловием

Блок-схема оператора:

Форма записи:

repeat

<оператор1 >;

<оператор2 >;

until <условие>;

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

Примеры:

Вычислить у=х2 при х=2, 4, 6, 8, 10.

x:=2;

repeat {начало цикла}

y:=sqr(x);

writeln(x:3,y:5);

x:=x+2

until x>10; {конец цикла}

Вводить символы с клавиатуры до тех пор, пока не будет введен символ "!"

Repeat {начало цикла}

writeln(‘введите символ’);

readln(c)

until c=‘!’; {конец цикла}

Оператор цикла с параметром

Этот оператор используют, когда количество повторений цикла известно заранее или необходимо изменять какую-либо величину на одно и то же значение в определенном диапазоне. Форма записи оператора:

for <параметр> := <начальное значение> to <конечное значение> do <оператор>;

Служебное слово to указывает направление изменения параметра – увеличение на 1 (начальное значение меньше конечного значения; если это условие не выполнится, оператор в теле цикла не выполнится ни разу). Если необходимо, чтобы параметр уменьшался на 1, то используют слово downto (начальное значение больше конечного значения). В качестве оператора можно использовать любой простой или составной оператор.

При использовании этого оператора цикла нужно помнить следующие правила:

1) в качестве параметра можно использовать простую переменную, описанную в этом же блоке;

2) параметр должен иметь дискретный тип;

3) начальное и конечное значения должны иметь тот же тип, что и параметр;

4) в теле цикла (операторе) явное изменение значения параметра (например, оператором присваивания) может привести к бесконечному циклу;

5) нельзя в теле цикла изменить начальное и конечное значения параметра, если они заданы переменными.

6) после завершения работы цикла значение параметра становится равным конечному значению параметра, если цикл не был прерван оператором перехода.

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

Примеры:

Вывести на экран все символы от ‘a’ до ‘z’:

for i := ‘a’ to ‘z’ do write(i, ‘ ‘);

Вычислить у=х2 при х=2, 4, 6, 8, 10.

x:=2;

for i:=1 to 5 do

begin

y:=x*x;

writeln(x:3,y);

x:=x+2

end;

4.6 Пустой оператор

В языке Pascal есть такое понятие, как "пустой оператор" – оператор, который не имеет графического представления и не производит никаких действий. Причин существования такой конструкции несколько. Например, символ ";" синтаксически является разделителем, т.е. оператор, после которого идет служебное слово end , не должен заканчиваться этим символом:

begin

s1; s2; s3

end;

Но если предположить, что после оператора s3 идет пустой оператор, тогда такая форма записи тоже правильна:

begin

s1; s2; s3;

end;

Другой пример использования пустого оператора – бесконечный цикл, не выполняющий никаких действий и завершающийся после нажатия любой клавиши:

repeat until keypressed;

Здесь подразумевается, что между словами repeat и until находится пустой оператор.

5 Некоторые составные типы

Переменные простых типов имеют атомарные (неразделимые) значения. В отличие от них, переменные составных типов имеют "сложные" значения, т.е. представляют собой совокупность нескольких значений другого типа. Таким образом, можно сказать, что составные типы – это еще один способ образования новых типов.

5.1 Регулярные типы (массивы)

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

Массивы характеризуются типом элементов, их количеством и "способом нумерации". Определение массива в программе имеет вид:

type

<имя типа> = array [тип индекса] of <тип элементов>;

Тип индекса – любой дискретный тип, кроме longint .

Поскольку индексов у элементов массива может быть несколько (например, в математике, элементы матриц имеют два индекса), то в описании можно указать не один тип индекса, а несколько, разделенных символом ", ". Примеры описания массивов:

type

letters = array [1..40] of char;

matrix1 = array [1..10] of array [1..5] of integer;

matrix2 = array [1..10,1..5] of real;

var

alf : letters;

A, С : matrix1;

B : matrix2;

Возможно непосредственное описание массивов в разделе описания переменных:

Var

аlf: array [1..40] of char;

А: array [1..10] of array [1..5] of integer;

Тогда обращение к элементам массивов будет выглядеть следующим образом:

alf[1]:=‘a’;

B[1,1]:=14.9;

Элементы массива считаются переменными и могут участвовать в любых операциях, допустимых с элементами данного типа. Над всем массивом в целом возможна операция присваивания, когда типы выражений в обеих частях совпадают:

А := С;

Примеры использования массивов

1. Пусть имеется массив A , состоящий из n элементов с номерами от 1 до n . Найти сумму элементов массива, вывести ее на экран.

Const n=10;

Var А: array [1..n] of integer;

sum,I:integer;

begin

sum:=0;

for i:=1 to n do sum:=sum+A[i];

writeln(‘Сумма элементов массива = ‘ ,sum);

end.

2. Найти произведение матрицы А (размерности m на n) на число k .

for i:=1 to n do

for j:=1 to m do

A[ i , j ] := A[ i , j ] * k;

5.2 Строковый тип

Строковый тип данных используется для представления строк. Любая строка является набором символов, обобщает понятие символьных массивов, позволяя динамически изменять длину строки. В этом состоит главное отличие строк от символьных массивов.

Данные строкового типа – это последовательности (цепочки) символов произвольной длины (от нуля до заданного числа – максимальной длины строки). Т.е. все символы в любой строке нумеруются целыми числами, начиная с единицы.

Определение переменной строкового типа производится с помощью служебного слова string, после которого в квадратных скобках указывается максимальная длина строки (может быть задана константой или отсутствовать, тогда по умолчанию используется максимальное число – 255):

type

slovo = string[10];

var

str1 : slovo;

str2 : string [100];

str3 : string;

str3 := ‘Это строка, а не символьный массив’;

Если строковой переменной присваивается выражение, длина которого больше максимальной длины данной строки, то лишние символы просто отбрасываются, программа при этом не прерывается (т.е. такая ситуация не считается ошибочной).

Операции, определенные над данными строкового типа:

- конкатенация (+) – сложение строк (то же самое выполняет стандартная функция concat ( str 1, str 2, …, strN ) );

Например, возможен такой фрагмент:

str 1:=‘Иван’;

str 2:=‘Петрович’;

str:=str1 + ‘ ‘+ str2 + ‘ Сидоров ’;

writeln ( str );

На экран будет выведена строка: Иван Петрович Сидоров;

- операции сравнения (<, >, =, <>, >=, <= ). Сравнение строк происходит поэлементно, т.е. первый символ одной строки сравнивается с первым второй, если они не равны, то большей считается та строка, символ которой больше, если же символы оказались равными, то сравнивается второй со вторым и так далее пока не встретятся не равные символы.

Например, результат следующих операций – true :

‘Иван’< ‘Иванова’

‘Кот’ > ‘Код’

‘Я’>’Ты’

- доступ к отдельным элементам строки производится аналогично доступу к элементам символьного массива – номер нужного элемента строки указывается после имени строковой переменной в квадратных скобках (например, str 3[4] );

- стандартная функция length ( str ) (str – выражение строкового типа) – вычисление текущей длины строки str ;

- стандартная функция copy ( str , i , j ) (i , j – выражения целого типа) выделяет из строки str подстроку длиной j символов, начиная с позиции i ;

- стандартная процедура delete ( str , i , n ) (i, n – выражения целого типа) удаляет из строки str подстроку длиной n символов, начиная с позиции i (необходимо отметить, что при выполнении данной процедуры строка str изменится, укоротится на n символов, соответственное изменится длина строки);

- стандартная процедура insert ( str 1, str 2, i ) (str 1 , str 2 – выражения строкового типа; i – выражение целого типа) вставляет строку str 1 в строку str 2 , начиная с позиции i (при выполнении данной процедуры строка str 2 изменится и её длина увеличится);

- стандартная функция pos ( substr , str ) (substr, str – выражения строкового типа) находит первое вхождение подстроки substr в строку str , результат – номер позиции строки str , с которого начинается это вхождение.

Рассмотрим примеры перечисленных процедур и функций.

S1:=’algorithm’;

S2:=’go’;

x:=length(S1); {x=9}

S3:=copy(S1, 3, 4); {S3 примет значение ‘gori’}

delete(S1, 4, 2); {S1 примет значение ‘algithm’}

insert(S1, S2, 2); {S1не изменится, а S2 примет значение ‘galgorithm o’}

insert(S2, S1, 2); {S2 не изменится, а S1 примет значение ‘ago lgorithm’}

x:=pos(S2, S1); {x=3}.

5.3 Множественный тип

Понятие множества в математике является одним из основных и обозначает некоторую неупорядоченную совокупность объектов, которые называются элементами множества. Например, множество простых чисел, множество жильцов одной улицы, множество букв алфавита и т.д. Из приведенных примеров видно, что множества могут содержать подмножества (множество жильцов одной улицы состоит из подмножеств людей, живущих в разных домах на этой улице).

Следует обратить внимание на две основных особенности множеств:

1) в множестве могут содержаться элементы только одного, базового типа (например, множество простых чисел не может содержать еще и буквы);

2) порядок элементов множества не фиксируется.

Например, такая совокупность элементов {1, 2, abc, ‘!’} вообще не считается множеством, а совокупности {1, 2, 5, 8} и {8, 1, 5, 2} – эквивалентные множества.

Для представления такого типа данных в языке Pascal существует множественный тип .

Множественный тип задается с помощью двух служебных слов – set и of - и следующего за ним базового типа. В качестве базового типа может быть любой дискретный тип, содержащий не более 256 значений. Если базовый тип – ограниченный целый, то значения должны быть в диапазоне от 0 до 255.

Например:

type

digits = set of 1..5;

var

s:digits;

Переменная s может быть пустым множеством (не содержащим ни одного элемента) либо может принимать значения:

1

2

5

1,2

4,5

1,3,5

и т.д.

Другой пример описания множества:

type

elemcolor = ( red, yellow, blue);

color = set of elemcolor;

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

Например:

[] – пустое множество;

[1,2,5];

[red].

В качестве элементов в изображении множества допускаются выражения, тип которых должен совпадать с базовым типом. Кроме того, можно указывать диапазоны значений. Так например, следующие два множества эквивалентны: [1..3, 5] и [1,2,3,5].

Операции, определенные над множествами:

1. Объединение, пересечение и разность множеств – эти операции обозначаются символами ‘+ ’, ‘* ’, ‘- ’ соответственно и обозначают традиционные действия, принятые над множествами в математике:


- объединение множеств (A+B);


- пересечение множеств (A*B);


- разность множеств (A-B);

Например:

[10]+[100, 1000] = [10, 100, 1000];

[5..10]+[15] = [5, 6, 7, 8, 9, 10, 15];

[1..5]*[3..10] = [3..5];

[-10..10] - [-15..5] = [5..10].

2. Проверка принадлежности элемента множеству( X in A ) – булевская операция, результат которой - true , если элемент X содержится в множестве A , false – если не содержится. X имеет тот же тип, что и элементы множества A.

Например:

100 in [10, 100, 1000] = true;

X in [1,2,10] = true, если X=1 или X=2 или X=10.

Проверка на равенство, неравенство и включение двух множеств . Эти операции обозначаются следующими знаками:

A = B – равенство множеств;

A <> B – неравенство множеств;

A <= B – множество A входит в множество B;

A >= B – множество B входит в множество A.

Например:

операция

результат

[1, 3, 5, 7] = [1, 3, 5]

false

[1, 2, 3] = [3, 1, 2]

true

[2, 6, 18, 56] >= [6, 18]

true

и т.д.

Пример программы с использованием множества

Пусть дана строка символов с точкой в конце строки. Нужно определить число различных букв, входящих в данную строку.

1- й вариант

var

M : set of char;

str : string;

c : char;

i,n : integer;

begin

M := []; {M – пустое множество}

n:=0; {переменная, считающая количество различных букв в строке}

writeln ( ‘ Введите строку ‘ );

readln ( str );

for i:=1 to length(str) do M := M + [str[i]]; {формирование множества, содержащего все буквы, входящие в строку}

for c := ‘A’ to ‘z’ do {Подсчет количества элементов

if (c in M) then n:=n+1; в множестве}

writeln ( ‘ Количество различных элементов в строке равно ‘,n);

end.

2- й вариант

var

M : set of char; str : string; c : char; i,n : integer;

begin

M := []; {M – пустое множество}

n:=0; {переменная, считающая количество различных букв в строке}

writeln ( ‘ Введите строку ‘ );

readln ( str );

for i:=1 to length(str) do

if not( str[i] in M) then

begin

M := M + [str[i]]; {формирование множества, содержащего все буквы, входящие в строку}

n:=n+1;

end;

writeln ( ‘ Количество различных элементов в строке равно ‘,n);

end.

5.4 Комбинированный тип (запись)

В программировании часто приходится использовать модель какого-либо объекта или явления. Для этого необходимо указать его характеристики. Например, характеристики окружности – координаты центра и радиус. Характеристики человека – имя, возраст, адрес и т.д. Данные, представляющие свойства объекта, чаще всего имеют разный тип, но все они логически связаны между собой – представляют один и тот же объект. Объединять данные разного типа в одну группу как раз и позволяет комбинированный тип (запись ).

Описание комбинированного типа представляет собой список описаний его элементов, которые называются полями. Каждое поле имеет свой идентификатор (имя).

Форма описания записей:

type

<имя типа> = record

<имя поля1> : <тип поля1>;

<имя поля2> : <тип поля2>;

.

.

.

end;

Поля могут иметь любой тип, в том числе они могут быть массивом или записью. Пример:

type

round = record

x,y:real;

R:real;

end;

var

circle1, circle2 : round;

Circles : array[1..5] of round;

Переменной типа запись можно присвоить только значение переменной такого же типа, т.е.

сircle1 := сircle2;

сircle2 := Circles[1];

Circles[5]:= Circles[3];

Для того чтобы присвоить значение какому-либо полю, необходимо указать имя переменной и имя поля, разделенные символом ".":

circle1.x := 5;

circle1.y := 8;

circle1.R := 2;

read(Circles[i].R);

writeln(Circles[i].x);

Легко заметить, что постоянно указывать имя записи не очень удобно. Чтобы облегчить работу программиста, существует оператор with . Общий вид оператора with :

with <имя переменной> do

<оператор>;

В качестве оператора используется любой простой или составной оператор. В операторе имя записи указывать не обязательно, достаточно указать имя поля.

Теперь часть программы

circle1.x := 5;

circle1.y := 8;

circle1.R := 2;

можно переписать следующим образом.

with circle1 do

begin

x:=5; y:=8;R:=2;

end;

Пример программы с использованием записи

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

type

student = record

name:string[10];

group:integer;

ball:array[1..5] of 2..5; {массив, содержащий оценки}

srednball:real; {средний балл}

end;

var

st:array[1..10] of student;

I,j,d:integer;

begin

for i:=1 to 10 do

begin

writeln(‘Введите фамилию студента’);

readln(st[i].name);

writeln(‘Введите номер его группы’);

readln(st[i].group);

writeln(‘Введите пять оценок’);

for j:=1 to 5 do readln(st[i].ball[j]);

d:=0;

for j:=1 to 5 do d:=d+ st[i].ball[j];

st[i].srednball:=d/5;

end;

for i:=1 to 10 do

if st[i].srednball >=4 then writeln(st[i].name);

end.

6 Подпрограммы

6.1 Назначение подпрограмм

Понятие "подпрограмма " встречается во многих языках программирования, поскольку является основным средством структурирования языка. Подпрограмма – это обособленная именованная часть программы. Использование подпрограмм позволяет:

1) сделать основную программу более наглядной и компактной;

2) уменьшить объем используемой памяти ЭВМ;

3) сократить время написания и отладки программы, так как различные подпрограммы могут быть написаны различными людьми параллельно.

Таким образом, подпрограмма – это часть операторов программы, выделенных в группу, оформленную в виде отдельной конструкции.

"Вызов подпрограммы" – выполнение действий, заданных в подпрограмме, может быть произведен в некоторой точке программы посредством указания имени этой подпрограммы.

6.2 Структура подпрограмм

Структура подпрограммы почти в точности повторяет структуру всей Pascal-программы.

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

- интерфейс подпрограммы, т. е. информацию, необходимую для ее вызова;

- локальный контекст подпрограммы - совокупность описаний (рабочих) объектов, с которыми осуществляются действия;

- сами действия (операторы), составляющие смысл подпрограммы.

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

Две остальные компоненты называются телом подпрограммы и содержат информацию о том, как выполняется подпрограммой то, что описано в ее заголовке.

В языке Pascal выделяют два вида подпрограмм: процедуры и функции . Различия процедур и функций заключаются в назначении и способе их использования.

Функции нужны для вычисления нового значения некоторого выражения, и вызов функции должен быть операндом в выражении.

Процедуры служат для задания последовательности действий и определения новых значений переменных в программе. Вызов процедуры играет роль оператора.

Описание процедур и функций в общем виде:


Заголовок процедуры:

procedure <имя> (список формальных параметров);

Заголовок функции:

function <имя> (список формальных параметров) : <тип результата>;

Тело подпрограммы – это блок, состоящий из двух частей: описание объектов и группа операторов. Более полный общий вид процедуры (общий вид функции отличается только заголовком):

procedure <имя> (список формальных параметров);

var

 

 

 

 

 

 

 

содержание   ..  461  462  463   ..