Основы Object Pascal, страница 8

2015-11-14СтудИзба

Описание файла

Файл "Основы Object Pascal" внутри архива находится в папке "Основы Object Pascal". Документ из архива "Основы Object Pascal", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "информатика" в общих файлах.

Онлайн просмотр документа "Основы Object Pascal"

Текст 8 страницы из документа "Основы Object Pascal"

Y := 60;

DoSomething(Y);

end;

end;

end else if X < -100 then begin

Y := -20;

if X < -200 then begin

Y := -40;

if X < -400 then begin

Y := -60;

DoSomething(Y);

end;

end;

end;

ПРИМЕЧАНИЕ. Если фрагмент кода содержит две и более последовательностей условий, проверяющих значения одной и той же переменной, то вместо условного оператора лучше применить оператор case (см. ниже).

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

if (X = 20) and (Y = 50) then DoSomething;

Циклы

Элементы структуры цикла

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

В этом разделе мы рассмотрим общие понятия и типы циклов Object Pascal: for, while и repeat.

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

В любом цикле присутствуют:

  • Точка начала цикла.

  • Тело цикла. Обычно это блок begin – end, содержащий многократно выполняемые операторы.

  • Точка окончания.

  • Условие окончания цикла.

  • Средства принудительного окончания цикла .

Точкой начала цикла является одно из ключевых слов for, while, или repeat.

Тело цикла состоит из операторов, которые выполняются на каждой итерации цикла. В теле цикла могут присутствовать любые допустимые операторы Object Pascal и в количестве от одного до нескольких. Если тело цикла образовано несколькими операторами, их необходимо ограничить словами begin и end (за исключением цикла repeat). Если тело цикла – один оператор, begin – end не нужны.

Точкой окончания цикла является либо ключевое слово end (for- или while- циклы) или ключевое слово until (цикл repeat). Если тело цикла состоит из единственного оператора, то точка окончания цикла есть (;).

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

Исключением из этого правила является цикл repeat, который проверяет условие в точке окончания цикла, а не в начале.

Условие цикла необходимо для определения момента выхода из него, например: «Это надо повторять до тех пор (until) когда X станет равным 10», или «Продолжать чтение файла пока (while) есть непрочитанные записи».

ПРЕДУПРЕЖДЕНИЕ. Очень легко создать «бесконечный» цикл. При входе в бесконечный цикл программа перестает реагировать на внешние воздействия – «зависает». Если это случилось, нажмите Ctrl+Alt+Del. Появится диалоговое окно Close Program ( в Windows NT – Task Manager) с сообщением «Программа не отвечает». Выберите имя программы и нажмите кнопку End Task («Снять задачу»).

Если вы запустили программу из среды Delphi кнопкой Run (F9) и программа зависла, попробуйте в главном меню Delphi выбрать Run | Program Reset или нажмите Ctrl+F2. Учтите, что Windows 95 реагирует на команду Program Reset не совсем адекватно и может зависнуть сама. В этом смысле Windows NT более надежна. По возможности дайте своей программе доработать до конца, особенно в среде Windows 95.

Теперь рассмотрим каждую разновидность цикла более подробно.

Цикл for…

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

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

Цикл for с увеличением счетчика синтаксически определен как

for initial_value to end_value do begin statements; end;

Начальное значение счетчика цикла устанавливает выражение initial_value. Повтор выполнений блока statements (т.е. тела цикла) заканчивается сразу как только счетчик цикла превысит end_value. По окончании каждой итерации переменная целого типа в выражении initial_value увеличивается на единицу.

Ключевые слова begin и end в цикле с единственным оператором не обязательны.

Цикл for с уменьшением счетчика в общем случае имеет следующий вид

for initial_value downto end_value do begin statements; end;

Начальное состояние счетчика цикла устанавливает выражение initial_value. Повтор выполнений блока statements (т.е. тела цикла) заканчивается когда счетчик цикла станет меньше чем end_value. По окончании каждой итерации переменная целого типа в выражении initial_value уменьшается на единицу.

Ключевые слова begin и end в цикле с единственным оператором не обязательны.

Для пояснения синтаксических формул обратимся к примерам. Сначала рассмотрим цикл с увеличением счетчика цикла:

var

I : Integer;

begin

for I := 0 to 4 do

begin

Memo1.Lines.Add(’Это итерация ’ + IntToStr(I));

end;

end;

В этом фрагменте оператор

Memo1.Lines.Add(’Это итерация ’ + IntToStr(I));

выполняется 5 раз. Назначение оператора – добавить строку к тексту, отображаемому компонентном TMemo на форме приложения. В результате выполнения данного фрагмента программы в компонент Memo1 будут добавлены строки (Lines)

Это итерация 0

Это итерация 1

Это итерация 2

Это итерация 3

Это итерация 4

Выражение initial_value (в данном случае это I:=0) задает начальное значение счетчика цикла. Счетчиком цикла является переменная целого типа I. Выраженим end_value является константа 4. Таким образом, цикл закончится когда счетчик цикла, т.е. переменная I, будет равна 4.

Теперь рассмотрим цикл с уменьшением счетчика:

var

I : Integer;

begin

for I := 4 downto 0 do

begin

Memo1.Lines.Add(’Это итерация ’ + IntToStr(I));

end;

end;

В результате выполнения этого фрагмента компонент Memo1 будет содержать строки

Это итерация 4

Это итерация 3

Это итерация 2

Это итерация 1

Это итерация 0

Упражнение.

1. Создайте новую программу (File | New Application).

2. Поместите на форму командную кнопку.

3. На странице Standard найдите компонент Memo и перенесите его на форму.

4. Придайте компоненту Memo1 необходимые размеры. В инспекторе объектов придайте свойству ScrollBars компонента Memo1 значение ssVertical.

5. Дважды щелкните на кнопке Button1 для создания обработчика события OnClick. Придайте обработчику события следующий вид:

procedure TForm1.Button1Click(Sender: TObject);

var

I : Integer;

begin

Memo1.Lines.Clear;

for I := 0 to 5 do

Memo1.Lines.Add(’Это итерация ’ + IntToStr(I));

Memo1.Lines.Add(’ ’);

for I := 5 downto 0 do

Memo1.Lines.Add(’Это итерация ’ + IntToStr(I));

Memo1.Lines.Add(’––-Выполнено––-’);

end;

Откомпилируйте программу (F9).

Нажмите кнопку Button1.

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



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

var

I : Integer;

X : Integer;

begin

X := 0;

Memo1.Lines.Clear;

for I := 0 to 9 do

begin

Memo1.Lines.Add(’Счетчик = ’+ IntToStr(X));

Inc(X, 10);

end;

end;

Этот код выводит в Memo1:

Счетчик = 0

Счетчик = 10

Счетчик = 20

Счетчик = 30

Счетчик = 40

Счетчик = 50

Счетчик = 60

Счетчик = 70

Счетчик = 80

Счетчик = 90

ПРИМЕЧАНИЕ. Обратите внимание на то, что для увеличения значения переменной X используется процедура Inc. Эта функция увеличивает значение переменной (X в этом фрагменте) на заданную величину (10). Если приращение не указано, значение переменной увеличивается на 1. Например:

Inc(X); { X увеличивается на 1. То же, что и X := X + 1 }

У функции Inc есть «двойник» с именем Dec. Ниже дан пример с функцией Dec:

Dec(X); { X уменьшается на 1 }

Dec(X, 10); { X уменьшается на 10 }

Используйте функции Inc и Dec вместо операторов вроде X := X + 1;

Функции Pred и Succ

Функции Pred и Succ применяются к данным перечислимого типа, например – Char, byte, integer и т.д. Функция Pred возвращает значение, которое предшествует значению ее аргумента. Например, Pred(10) вернет число 9, Pred(100) вернет 99, и т.д.

Следующие три цикла идентичны:

var

X : Integer;

begin

X := 10;

for I := 0 to 9 do DoSomething;

for I := 0 to X - 1 do DoSomething;

for I := 0 to Pred(X) do DoSomething;

end;

Когда счетчик цикла изменяется от 0 и надо сделать 10 итераций, легко ошибиться в сторону «лишней» итерации. Использование Pred с одной стороны, может решить проблему с лишней итерацией, а с другой стороны, Pred(X) элегантней чем X – 1.

Функция Succ возвращает значение, которое следует за ее аргументом. В циклах с уменьшением счетчика полезно применять Succ так:

for I := 100 downto Succ(X) do DoSomething;

Цикл while

Условие цикла while проверяется перед очередной итерацией. Итерации повторяются пока условие истинно.

var

X : Integer;

begin

X := 0;

while X < 1000 do

begin

X := DoSomeCalculation;

DoSomeMore;

end;

{ ...продолжение }

end;

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

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

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

var

Stop : Boolean;

begin

Stop := False;

while not Stop do begin

DoSomeStuff;

Stop := SomeFunctionReturningABoolean;

DoSomeMoreStuff;

end;

end;

Если в какой–то момент времени выполнения программы переменная Stop примет значение true – выполнение цикла прекратится.

Применение цикла while иллюстрирует следующая программа. Создайте новый проект и поместите на форму кнопку (Button) и блокнот (Memo). Дважды щелкните на кнопке и напишите следующий код обработчика события:

procedure TForm1.Button1Click(Sender: TObject);

var

I : Integer;

begin

I := 5;

Memo1.Lines.Clear;

while I > -1 do

begin

Memo1.Lines.Add('До перехвата '+

IntToStr(I) + ' сек.');

Dec(I);

end;

Memo1.Lines.Add('Цель с радара исчезла');

end;

Запустите программу и в окне блокнота увидите текст:

До перехвата 5 сек.

До перехвата 4 сек.

До перехвата 3 сек.

До перехвата 2 сек.

До перехвата 1 сек.

До перехвата 0 сек.

Цель с радара исчезла

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

Нетрудно сообразить, что точно такого же результата можно добиться и с помощью цикла for . . . downto.

Строго говоря, область применения цикла while (repeat) – реализация итерационных вычислений когда число шагов (итераций) заранее неизвестно.

Рассмотрим подпрограмму, которая реализует итерационный метод решения уравнения Кеплера

Ee sin(E) = M

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5231
Авторов
на СтудИзбе
424
Средний доход
с одного платного файла
Обучение Подробнее