Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы_Информатика.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.08 Mб
Скачать

Тула 2014 г.

1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ

Изучить реализацию задач с циклами в приложении Borland Delphi.

2. ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ

Сущность задач с циклами

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

Циклы используются в трех случаях.

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

2. Возврат «вверх» (к началу программы). Например, после выдачи результата программа спрашивает пользователя "Повторить?" и при утвердительном ответе повторяет расчет. Это реализуется только с помощью цикла.

3. Повторение операторов до наступления какого-то заданного условия (нажатия клавиши, достижения требуемой точности вычислений и т.д.)

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

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

Наиболее общим в Delphi является цикл с предусловием, реализуемый оператором WHILE…DO. Вот его общий вид:

WHILE условие DO

оператор;

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

В качестве условия может выступать любое логическое выражение или переменная типа BOOLEAN. Работает такой цикл следующим образом. Сначала проверятся условие (отсюда и название – цикл с предусловием). Если условие истинно, то выполняется оператор (он называется "тело цикла"), а затем программа "пятится назад", снова оказывается на операторе WHILE..DO, снова проверяет условие… и так далее до тех пор, пока условие не станет ложным. Как только это случится, цикл прекращается, и начинает выполняться оператор, следующий за телом цикла.

Таким образом, инструкции, находящиеся между begin и end, выполняются до тех пор, пока условие истинно (значение выражения условие равно true)

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

Рассмотрим пример использования цикла WHILE. Пусть мы суммируем ряд натуральных чисел 1+2+3+… и хотим узнать, на каком числе этого ряда сумма превысит 100. Программа будет выглядеть следующим образом:

VAR s:WORD; { сумма }

i: WORD; { текущее число ряда }

BEGIN

s:=0; { сумму обязательно обнуляем!!! }

i:=1; { начинаем суммировать с единицы }

WHILE s<100 DO

BEGIN

s:=s+i;

i:=i+1

END;

Label1.Caption:='Сумма превысит 100 при i='+IntToStr(i)

end;

Кстати, сумма превысит 100 при i=15, так как . Обратите внимание на операторные скобки BEGIN..END. Они позволяют поместить в тело цикла более одного оператора (разумеется, если в теле цикла только один оператор, BEGIN…END не нужны).

Рис. 1. Обозначение цикла с предусловием на блок-схемах.

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

Следующая программа вычисляет значение числа  с задаваемой пользователем точностью. В основе алгоритма вычисления лежит тот факт, что сумма ряда 1-1/3+1/5-1/7+1/9+, если взять достаточно много его членов, приближается к значению /4. В программе очередной член ряда, с номером n, вычисляется по формуле: 1/(2*n-1) и умножается на минус один, если его номер четный (определить, является ли n четным можно, например, проверкой остатка от деления n на 2). Вычисление заканчивается тогда, когда значение очередного члена ряда становится меньше, чем заданная точность вычисления. Вид диалогового окна программы приведен на рис.

Пользователь вводит точность вычисления в поле ввода (Edit1). После щелчка на командной кнопке Вычислить (Buttoni) программа вычисляет значение числа  и выводит результат в поле метки (Label2).

Как и в предыдущих примерах, основную работу выполняет процедура обработки события onClick, текст которой приведен ниже.

{Вычисление числа  с заданной точностью}

procedure TFonnl.ButtonlClick(Sender: TObject);

pi: real; {вычисляемое значение }

t: real; {точность вычисления}

n: integer; {номер члена ряда}

elem:real; { значение члена ряда}

begin

pi:=0; n:=l; t:=StrToFloat(Edit1.Text); elem:=t+l; {чтобы начать цикл}

While elem >= t do begin

elem:=l/(2*n-l) ;

if (n MOD 2) = 0 then pi:=pi-elem else pi:=pi+elem;

n:=n+l;

end;

pi:=pi*4;

Label2.Caption:= 'ПИ равно '+ FloatToStr(pi) + #13

+ 'Просуммировано '+IntToStr(n)+' членов ряда.';

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]