Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка

.pdf
Скачиваний:
15
Добавлен:
17.02.2016
Размер:
972.86 Кб
Скачать

for счётчик := выражение1 to выражение2 do действие ;

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

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

Действие – один или несколько операторов Delphi. Если это группа операторов, то они должны быть заключены в логические скобки begin/end.

В начале работы оператора переменная-счётчик получает значение выражения 1. Если при этом значение счётчика окажется меньше или равно значению выражения 2, то выполняются операторы, входящие в действие. Это и есть один цикл. Затем переменная-счётчик принимает значение, следующее за текущим, и начинается новый цикл, то есть сравнение счётчика и выражения 2, выполнение действия, и так далее, до тех пор, пока значение переменной-счётчика не превысит значение выражения 2.

Возможна работа оператора цикла, при котором переменная-счётчик будет не увеличиваться, а уменьшаться. В этом случае ключевое слово to заменяется на downto:

for счётчик := выражение 1 downto выражение 2 do действие ; Соответственно, выражение 1 должно быть больше или равно выра-

жению2.

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

while условие do

тело цикла ;

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

Нужно очень внимательно следить за написанием условия и контролем завершения цикла, так как в результате ошибки цикл while будет повторяться бесконечное количество раз, что приведёт к "зацикливанию" и "зависанию" программы.

Условный оператор повторения сначала выполняет тело цикла, а затем уже проверяет выполнение условия:

repeat

тело цикла until условие ;

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

21

пока условие не станет истинным (т.е. true). Стоит отметить, что это единственный оператор Delphi, в котором тело цикла не требуется заключать в логические скобки begin/end. Начало и конец тела цикла определяются по ключевым словам repeat и until.

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

команда прерывания цикла команда продолжения цикла

Команда прерывания цикла применяется, если в процессе выполнения операторов тела цикла выясняется необходимость его завершения. Вот эта команда:

Break ;

При её выполнении управление передаётся на первый оператор, следующий за оператором цикла.

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

Continue ;

Пример вывода квадратов натурального ряда чисел в таблицу с помощью цикла for

Расположим на форме таблицу StringGrid состоящую из двух столбцов поле ввода текста Edit и кнопку Button.

Рис. 4.1. Форма программы

22

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

Рис. 4.2. Код программы

Рис. 4.3. Результат работы программы

23

Лабораторная работа № 3 Использование циклов в среде Delphi

Цель: Научиться использовать различные виды циклов при разработке приложений в среде Delphi.

Задание: вычислить значения по заданной формуле с помощью циклов for, repeat/until и while/do в заданном диапазоне изменения переменной. Вывести результат в таблицу, состоящую из четырех столбцов, таким образом, чтобы в первом столбце находилось значение переменной, во втором результат вычисления про помощи цикла for, в третьем при помощи цикла repeat/until и в четвертом при помощи цикла while/do.

Варианты индивидуальных заданий

Вариант

Задание

Диапазон

Шаг

 

 

 

 

1

 

0…10

0.5

 

 

 

 

2

 

5…15

0.5

 

 

 

 

3

 

1…2

0.2

 

 

 

 

4

 

4…6

0.25

 

 

 

 

5

 

0…5

0.25

 

 

 

 

6

 

0…10

0.5

 

 

 

 

7

 

0…3

0.3

 

 

 

 

8

 

2…12

0.5

 

 

 

 

9

 

1…20

1

 

 

 

 

10

 

2…4

0.2

 

 

 

 

11

 

0…1

0.05

 

 

 

 

12

 

1…10

1

 

 

 

 

13

 

1…15

1.5

 

 

 

 

14

 

1…3

0.1

 

 

 

 

15

 

0…1

0.1

 

 

 

 

16

 

1…2

0.1

 

 

 

 

Тема 5. Подпрограммы в Delphi. Процедуры и функции

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

24

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

И процедуры, и функции позволяют добиться одинаковых результатов. Но разница всё же есть.

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

Функция Delphi также позволяет выполнить всё перечисленное, но дополнительно возвращает результат в присвоенном ей самой значении. То есть вызов функции может присутствовать в выражении справа от оператора присваивания. Таким образом, функция - более универсальный объект.

Описание подпрограммы состоит из ключевого слова procedure или function, за которым следует имя подпрограммы со списком параметров, заключённых в скобки. В случае функции далее ставится двоеточие и указывается тип возвращаемого значения. Обычная точка с запятой далее – обязательна. Сам код подпрограммы заключается в "логические скобки" begin/end. Для функции необходимо в коде присвоить переменной с именем функции или специальной зарезервированной переменной Result (предпочтительно) возвращаемое функцией значение.

Примеры:

procedure Имя_процедуры(параметры); begin

Код процедуры; end;

function Имя_функции(параметры): тип_результата; begin

Код функции; Result:=результат; end;

Описанная таким образом подпрограмма должна быть размещена в основной программе до первого её вызова. Иначе при компиляции получите извещение о том, что "неизвестный идентификатор..." Следить за этим не всегда удобно. Есть выход – разместить только заголовок подпрограм-

25

мы там, где размещают описания всех данных программы.

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

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

Теперь нужно ввести понятие локальных данных. Это данные – переменные, константы, подпрограммы, которые используются и существуют только в момент вызова данной подпрограммы. Они так же должны быть описаны в этой подпрограмме. Место их описания - между заголовком и началом логического блока – ключевым словом begin. Имена локальных данных могут совпадать с именами глобальных. В этом случае используется локальная переменная, причём её изменение не скажется на глобальной с тем же именем.

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

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

Вычислить значение определенного интеграла .

Определённый интеграл численно равен площади фигу-

ры, ограниченной осью абсцисс, прямыми x = a и x = b и графиком функции f(x).

Рис. 5.1. Геометрическая интерпритация определенного интеграла

Для приближенного вычисления определенного интеграла, участок

26

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

Определенный интеграл вычисляется приближенно по формуле

где

– нижний предел интегрирования, – верхний предел интегрирова-

ния

– количество узлов,

– шаг разбиения,

– подынтегральная

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

Чем меньше шаг и, соответственно, больше интервалов, на которые был разбит участок (a, b), тем выше точность вычисления.

Создадим форму с тремя полями Edit для ввода нижнего и верхнего предела интегрирования, Label для вывода результата и кнопку Button, по нажатию на которую будут происходить вычисления.

Рис. 5.2. Окно формы программы для вычисления определенного интеграла

Опишем функцию в разделе private. private

function y(x:real):real;

27

Поставив курсор на код с именем функции, нажмем «Ctrl+Shift+C» и перейдем в тело функции. Здесь, между логическими скобками begin/end присвоим результату выполнения функции значение x2.

function TForm1.y(x: real): real; begin

result:=sqr(x);

end;

А в обработчике события нажатия на кнопку напишем код метода приближенного вычисления определенного интеграла.

Рис. 5.3. Код программы : 1 –описание функции, 2 – переход в тело функции, 3 – написание кода, исполняемого при вызове функции; 4 – вызов функции

28

Лабораторная работа № 4 Подпрограммы в среде Delphi

Цель: Научиться использовать процедуры и функции при разработке приложений в среде Delphi.

Задание: Написать программу, в которой реализованы заданные функции или процедуры.

Варианты индивидуальных заданий

1.Создайте процедуру, печатающую слово «Hello» заданное число раз. Количество раз передавайте в процедуру как параметр-значение.

2.Создайте процедуру, увеличивающую заданный параметр на 1, а затем и умножающую ее на 5, заданное количество раз.

3.Создайте процедуру, меняющую значения двух параметров места-

ми.

4.Создайте процедуру, выводящую три текстовых параметра по ал-

фавиту.

5.Создайте процедуру, упорядочивающую три числа по возраста-

нию.

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

7.Создайте процедуру, для возведения числа в целую степень.

8.Создайте функцию, перемножающую сумму квадратов двух чисел.

9.Создайте функцию, возвращающую квадратный корень суммы двух чисел.

10.Создайте функцию возвращающую факториал.

11.Создайте функцию возвращающую остаток от деления.

12.Создайте функцию возводящую параметр в степень 2,5.

13.Создайте функцию округляющую аргумент до сотых.

14.Создайте функцию, увеличивающую значение аргумента на единицу, до тех пор, пока его значение не станет кратным 10.

15.Создайте функцию, возвращающую логарифм 64 по заданному основанию.

16.Создайте функцию, увеличивающую параметр на единицу, до тех пор, пока его значение не будет в 20 больше чем начальное.

29

Тема 6. Массивы

Массив – это набор однородных элементов, к которым можно обратиться по их порядковому номеру (индексу).

Объявление массива. Массив, как и любая переменная программы, перед использованием должен быть объявлен в разделе объявления переменных.

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

Имя: array [нижний_индекс. .верхний_индекс] of тип имя – имя массива;

array – зарезервированное слово языка Delphi, обозначающее, что объявляемое имя является именем массива;

нижний_индекс и верхний_индекс – целочисленные константы, определяющие диапазон изменения индекса элементов массива и, неявно, количество элементов (размер) массива;

тип – тип элементов массива.

Например, записи a:array[1..31] of real; b:array[0. .2] of integer;

объявляют одномерные массивы с данными типов real и integer соответственно.

В общем виде инструкция объявления двумерного массива выглядит

так:

Имя: array[НижняяГраница1..ВерхняяГраница1, НижняяГраница2.

.ВерхняяГраница2] of Тип

Имя – имя массива; array – слово языка Delphi, указывающее, что объявляемый элемент данных является массивом; НижняяГраница1, ВерхняяГраница1, НижняяГраница2, ВерхняяГраница2 – целые константы, определяющие диапазон изменения индексов и, следовательно, число элементов массива; Тип – тип элементов массива.

Например, запись a:array[1..10,1..15] of real;

объявляет двумерный массив размерностью 10x15.

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

a[5]:=2;

обращается к пятому элементу массива с именем a, и присваивает ему значение 2.

Если массив не является локальным, т.е. объявлен не в процедуре

30