Основные конструкции языка. Условные операторы. Операторы циклов. Вложенные арифметические циклы. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Основные конструкции языка. Условные операторы. Операторы циклов. Вложенные арифметические циклы.



 

Оператор условия if.

if < логическое условие > then

< оператор >

Else

< оператор >;

 

Сокращенная форма:

if < логическое условие > then

< оператор >;

 

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

Оператор условия может работать в 2 формах: полная и сокращенная.

 

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

 

Сокращенная форма предполагает наличие только секции then.

 

При использовании вложенных операторов предпочтительнее использовать схему else if, так как при этом происходит вложение во внешнюю ветку. При использовании then if возможны трудности восприятия кода программы. Связано это с тем, что предложение else всегда связывается с ближайшим if, поэтому схема then if является трудночитаемой.

 

Оператор выбора (case):

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

1 часть – выражение-селектор. В качестве такого выражения может быть представлено любое выражение порядкового типа.

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

 

case Var of // Var – выражение-селектор

1:; // оператор 1

2:; // оператор 2

3:; // оператор 3

else; // оператор по умолчанию

end;

 

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

 

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

 

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

 

Набор операторов, выполняющийся в цикле, является телом цикла.

 

В языке Pascal существуют 3 вида циклов: цикл с параметром (с известным числом повторений), цикл с постусловием, цикл с предусловием.

 

Цикл с параметром:

for Счетчик:= Начальное значение to Конечное значение do

< оператор >;

Используется в программе, когда заранее известно число повторений тела цикла, при этом каждое повторение цикла приводит к увеличению или уменьшению счетчика цикла. Счетчик – переменная, имеющая начальное и конечное значение.

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

Изменение счетчика происходит автоматически после завершения тела цикла.

 

Возможно использование ключевого слова downto, тогда счетчик цикла будет уменьшаться.

 

 

Цикл с предусловием:

while < логическое выражение > do

< оператор >;

 

Выход из цикла происходит, когда логическое выражение равно False.

 

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

 

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

 

 

Цикл с постусловием:

Repeat

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

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

until < логическое выражение >;

 

Выход из цикла происходит, когда логическое выражение равно True.

 

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

 

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

 

Вложенный арифметический цикл.

 

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

Пример:

for I:= 1 to 10 do

for J:= 1 to 2 do

 

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

 

Возможно до трех десятков вложенностей.

 

При выходе из цикла значение параметра цикла становится неопределенным.

 

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

 

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

Рекуррентное соотношение – соотношение, связывающее одни и те же функции, но с различными аргументами.

Правильное рекуррентное соотношение – соотношение, у которого количество или значения аргументов у функций в правой части меньше количества или значений аргументов функций в левой части соотношения. Если аргументов несколько, то достаточно уменьшения одного из аргументов.

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

Yi = F(Yi-1, Yi-2, …, Yi-k),

т.е. для вычисления i-го члена последовательности используются k предыдущих членов последовательности.

 

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

 

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

 

(пример с tg: tg(x)=x/(1-(x^2/(3-(x^2/(5-…) … /(9-x^2))

 

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

 

Работа с одномерными и двумерными массивами. Понятие массива, размерность массива, индекс массива. Размещение массивов в памяти. Способы инициализации массивов. Открытые массивы.

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

 

Основные характеристики: тип данных и размерность.

 

Размерность массива – количество индексов у каждого элемента массива. Существуют одномерные, двумерные и n-мерные массивы.

 

Положение элемента в массиве однозначно определено его индексом.

 

Type

TArray = array [1..10] of Integer;

 

Var

A: TArray;

B: array [1..5] of Integer;

 

Возможно также описание массива без предварительного определения собственного типа, однако при этом следует помнить о возможном нарушении правил соответствия и эквивалентности.

 

Массивы могут быть одномерными, многомерными и открытыми.

 

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

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

 

В памяти массив представлен как линейная последовательность элементов определенного размера.

 

Статические массивы.

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

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

 

Пример:

var A: array [0..5, 1..15] of Byte;

A[1, 10] – элемент на 2 строчке, 10 столбце

 

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

 

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

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

 

Addr(C[I]) = Addr(C) + I * SizeOf(Char)

 

Инициализация массива может осуществляться 3 способами:

- Если значения элементов массива определены до начала работы программы:

const A: array [1..3] of Integer = (1, 2, 3);

- Если исходные данные необходимо внести с клавиатуры в процессе выполнения программы

for I:= 1 to 2 do

for J:= 1 to 3 do

Read(A[I, J]);

- Прямое присвоение в теле программы значений элементам массива

A[10]:= 1.2;

 

Для обнуления массива используется процедура FillChar.

 

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

 

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

Addr(A[I, J]) = Addr(A) + (J * Cols + I) * SizeOf(Integer)

 

Всякий массив можно создать несколькими способами:

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

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

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

 

Динамические массивы.

 

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

 

A2: array of Integer;

 

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

Особенность таких массивов – их индексы всегда начинаются с нулевого элемента.

 

SetLength(var A, Count): принимает имя переменной открытого массива и устанавливаемое количество элементов.

До тех пор, пока не выполнена установка длины массива, обращаться к его элементам нельзя.

 

High – возвращает индексный номер последнего элемента массива.

 

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

 

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

 

Пустой открытый массив занимает столько же памяти, сколько и нетипизированный указатель (на 32-битных платформах – 4 байта).

 



Поделиться:


Последнее изменение этой страницы: 2016-08-26; просмотров: 1422; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.46.36 (0.043 с.)