WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ Томский политехнический университет _ УТВЕРЖДАЮ Декан АВТФ Мельников Ю.С.

“” 2002 г.

ИСПОЛЬЗОВАНИЕ ЦИКЛОВ В OBJECT PASCAL Методические указания к лабораторной работе № 133 по курсу “Программирование и основы алгоритмизации” для студентов направления 550200 “Автоматизация и управление” Томск - 2002 УДК 681.3 Использование циклов в Object Pascal. Методические указания к лабораторной работе № 133 по курсу “Программирование и основы алгоритмизации ” для студентов направления 550200 “Автоматизация и управление” Составитель Н.М. Семёнов Рецензент к.т.н., доцент Е.И. Громаков Методические указания рассмотрены и рекомендованы методическим семинаром кафедры интегрированных компьютерных систем управления “_” _ 2002 г.

Зав. кафедрой А.М. Малышенко ОГЛАВЛЕНИЕ 1 Пример программы просмотра файлов.................................................. 4 1.1 Создание программы просмотра файлов.................................. 4 1.2 Ввод текста программы просмотра файлов.............................. 6 1.3 Запуск программы просмотра файлов...................................... 8 2 Развитие программы просмотра файлов............................................... 9 2.1 Улучшение внешнего вида программы..................................... 9 2.2 Запуск усовершенствованной программы просмотра файлов..................................................................... 10 3 Создание более сложных циклических конструкций........................... 11 3.1 Настраиваемые циклы................................................................ 11 3.2 Создание бесконечных циклов................................................... 12 3.3 Конструкция цикла с вызовом Break....................................... 12 3.4 Пропуск итераций в цикле......................................................... 13 4 Контрольные вопросы............................................................................ 5 Дополнительные задания........................................................................ 6 Литература.............................................................................................. ИСПОЛЬЗОВАНИЕ ЦИКЛОВ В OBJECT PASCAL Цель работы: познакомить студентов с некоторыми особенностями циклов в языке Object Pascal и развить навыки работы со средой Delphi.

Использование циклов - один из наиболее важных аспектов программирования.

Скучные повторяющиеся действия являются наиболее подходящей работой для компьютеров, и циклические структуры позволяют организовать выполнение таких заданий. Потребность в повторении набора действий возникает часто, и Object Pascal предоставляет по крайней мере три различных управляющих конструкции для работы с повторяющимися действиями: циклы while, repeat и for. Основные правила работы с этими циклами совпадают с языком программирования Turbo Pascal, а на некоторых особенностях мы остановимся в дальнейшем.

Сейчас же вспомним некоторые нюансы использования циклов.

Если начальное значение счётчика цикла for - to больше, чем конечное, то тело цикла выполняться не будет.

Аналогично, если начальное значение счётчика цикла for - downto меньше, чем конечное, то тело цикла выполняться не будет.

Не пытайтесь изменить величину переменной счётчика цикла for внутри цикла.

Транслятор позволит Вам сделать это. Поскольку величина счётчика цикла автоматически увеличивается или уменьшается, изменение её в дополнение к этому может привести к трудно обнаруживаемым ошибкам. Обращайтесь с переменной счётчика цикла как с доступной только для чтения (read - only).

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

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

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

1 Пример программы просмотра файлов Создадим программу с использованием цикла while. Программа просмотра файлов способна прочесть текстовый файл и показать его содержимое в своём окне. Вы можете просматривать файл, используя линейки прокрутки. Содержимое файла отображается в окне списка, каждый элемент которого содержит одну строку файла. В отдельной строке указывается название файла.

1.1 Создание программы просмотра файлов Для создания программы просмотра файлов надо выполнить следующие шаги:

1. Создайте новый проект с пустой формой.

2. Сохраните проект под именем WHILE1.DPR.

3. Разместите в форме следующие компоненты: ListBox, OpenDialog и MainMenu.

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

Рис.1. Внешний вид основной формы программы просмотра файлов в окне Дизайнера форм.

4. Установите свойства формы и её компонентов в соответствии с таблицей номер 1.

Таблица 1. Таблица свойств UNIT1.FRM - основной формы программы просмотра файлов WHILE1.

Kомпонент Свойство Установка Основная форма Name FrmWhileActiveControl ListBoxCaption ‘File Browser’ Height Width Menu MainMenuОкно редактирования Name ListBoxAlign alNone BorderStyle bsNone IntegralHeight False Диалоговое окно Name OpenDialogFilter ‘Pascal source (*.pas,*.dpr) |*.pas;*.dpr |Text (*.txt)|*.txt|All files (*.*)|*.* ‘ Основное меню Name MainMenuItems &File &Open - E&xit Большинство свойств, описанных в таблице 1, Вы можете ввести непосредственно.



Выберите подходящий компонент, щёлкнув на нём в Дизайнере форм, затем введите свойство в таблице Инспектора объектов.

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

Введите значение свойства Caption для первого (и единственного в этом случае) выбора меню - &File, после чего нажмите Enter. Снова нажмите на Enter. При этом будет создано подменю, и курсор укажет на его первую пустую строку. Введите &Open... и нажмите Enter.

Для введения разделяющей линии в подменю занесите в свойство Caption знак “минус”. Нажмите Enter. Щёлкните на появившейся снизу прямоугольник. Закончите создание подменю введением третьего поля с названием E&xit и закройте окно Дизайнера меню.

В дополнение к пиктограмме основного меню, показываемой в процессе разработки формы, в Вашей форме появится также действующая модель только что созданного меню. Каждый раз, когда Вы будете выбирать определённую команду меню, в окне редактора кода (Code Editor) будет появляться заготовка соответствующего обработчика событий OnClick.

1.2 Ввод текста программы просмотра файлов Для ввода текста программы просмотра файлов выполните следующие шаги:

1. Создайте обработчик события OnClick для команды Exit своего меню, выбрав строку Exit в модели меню File в Дизайнере форм. Delphi ответит вызовом редактора кода с заготовкой для программы метода TFrmWhile1.Exit1Click.

2. Вставьте в метод Exit1Click строку Close;

Назначение метода Close - закрыть окно основной формы и завершить работу программы.

3. Создайте обработчик события OnClick для команды Open своего меню, выбрав строку Open в модели меню File в Дизайнере форм. Delphi ответит вызовом редактора кода с заготовкой для подпрограммы метода TFrmWhile1.Open1Click.

4. Введите текст метода Open1Click, показанный в листинге 1.

5. Не забудьте сохранить проект перед испытанием программы.

Листинг 1. Обработчик событий OnClick для пункта меню Open программы просмотра файлов WHILE1.

_ 1: procedure TFrmWhile1.Open1Click(Sender: TObject);

2: var 3: AtextFile:System.Text;

4: TextLine:String;

5: begin 6: if OpenDialog1.Execute then begin 7: ListBox1.Clear;

8: Caption:='File Browser: ' + OpenDialog1.FileName;

9: System.Assign(ATextFile,OpenDialog1.FileName);

10: Reset(ATextFile);

11: while not Eof(ATextFile) do begin 12: Readln(ATextFile,TextLine);

13: ListBox1.Items.Add(TextLine);

14: end;

15: System.Close(ATextFile);

16: end;

17: end;

_ В листинге 1 приведён текст обработчика событий OnClick, вызываемого при выборе команды Open в меню File. В этом обработчике событий заключено основное содержимое программы просмотра файлов.

Сначала в строке 6 выполняется метод OpenDialog1.Execute. Здесь OpenDialog1 - компонент, который Вы добавили в форму в Дизайнере форм, и который содержит в себе стандартное диалоговое окно Windows Open File. Работа этого компонента позволяет пользователю выбирать файл для просмотра. Имя выбранного файла, если такой есть, передаётся через свойство FileName компонента OpenDialog1.

После того, как метод OpenDialog1.Execute выполнен, может случиться одна из двух вещей: или пользователь выберет файл и щёлкнет на кнопке ОК, либо он щёлкнет на кнопке Cancel в диалоговом окне Open File.

Оператор if в строке 6 проверяет, какое событие из этих двух произошло. Если метод OpenDialog1.Execute вернул значение False, то есть если была нажата кнопка Cancel, программа не делает ничего. Управление просто передаётся на строку 17 с командой end, которая завершает работу обработчика событий OnClick.

Если OpenDialog1.Execute в строке 6 вернул значение True, будут выполняться команды внутри блока begin - end в строках с 6 по 16.

В строке 7 очищается содержимое окна списка. Изначально ни один файл в окно не загружен, так что при открытии первого файла оператор в строке 7 в действительности ничего не делает, но впоследствии, когда пользователь загрузит следующий файл, это окно должно быть предварительно очищено. Оператор ListBox1.Clear именно это и делает.

Обычно в приложениях Windows принято показывать имя открытого в настоящее время файла. Команда в строке 8 добавляет надпись, содержащую имя выбранного файла. Имя файла берётся прямо из свойства FileName компонента OpenDialog1 и добавляется к надписи ‘File Browser: ’.

Строки с 9 по 15 содержат операторы, в которых Вы должны сразу узнать стандартный алгоритм чтения текстового файла. Команды Assign в строке 9 и Reset в строке 10 открывают внешний файл, заданный свойством FileName компонента OpenDialog1, связывая его с файловой переменной ATextFile.

Переменная ATextFile определена в строке 3. Обратите внимание на особенность этого определения. Вместо обычного описания ATextFile: Text;

к имени типа добавлен префикс System. Почему Он включен сюда потому, что форма уже имеет свойство с названием Text. Поскольку обработчик OnClick является методом этой формы, возникает конфликт между именем этого свойства и объявленным ранее именем Text. Для разрешения этого конфликта имён Вы должны пояснить, что Вы имеете в виду, указав квалификатор System, то есть, написав System.Text;





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

Однако сообщение транслятора “Error in type” не такое информативное, как Вам хотелось бы. Следовательно, Вы всегда должны помнить о возможности конфликта при использовании стандартного файлового типа Text. При всяком использовании имени Text для чего - нибудь ещё (а это очень популярное имя), возникает угроза конфликта.

Просто не забывайте всегда использовать квалификатор System перед указанием типа Text при описании текстового файла.

Эти же правила применимы к оператору Close в строке 15. Заметим, что Вы уже ввели оператор Close в методе OnClick для команды меню Exit, где под Close подразумевается соответствующий метод формы.

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

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

Файловая переменная, объявленная в строке 3 листинга 1, существует только в данной конкретной процедуре. Файл открывается, обрабатывается и закрывается внутри одного короткого метода. Этот подход к работе с файлами является наиболее предпочтительным в Windows - не держите файлы открытыми в течение длительного времени, закрывайте их, как только представится такая возможность.

Строки с 11 по 14 содержат цикл while, выполняющий основную работу этой программы - чтение содержимого выбранного файла.

В начале каждой итерации проверяется условие цикла - достижение конца файла. Если достигнут конец файла, то работа цикла прекращается. В противном случае очередная строка файла считывается в переменную TextLine. Переменная TextLine объявлена в строке 4 программы как переменная типа String.

Строка 13 иллюстрирует динамическое добавление содержимого к окну списка.

Вызвав метод Add свойства Items компонента ListBox, Вы визуально добавили в Дизайнере форм компонент ListBox1 к своей форме. Теперь Вы можете ссылаться на свойство Items компонента ListBox1, которое состоит из списка строк, содержащихся в данный момент в окне списка.

Метод Add ожидает строку в качестве параметра, и TextLine каждый раз передаёт ему новую строку текста, прочитанную из файла.

1.3 Запуск программы просмотра файлов Для испытания программы проделайте следующие шаги:

1. Запустите программу WHILE1.

2. В меню File выберите команду Open. Появится стандартное диалоговое окно Open File.... После того, как Вы выбрали файл и щёлкнули мышью на ОК, файл загрузится и его содержимое будет показано в текстовом окне.

3. В меню File выберите команду Exit для завершения работы программы.

2 Развитие программы просмотра файлов Добавим в разрабатываемую программу WHILE1 возможность записи текстовых файлов с произвольным именем. Будет использован цикл for для работы с содержимым окна списка. Окно содержит строки текста, предназначенные для записи в файл.

2.1 Улучшение внешнего вида программы Для улучшения внешнего вида программы просмотра файлов выполните следующие операции:

1. Откройте созданный ранее файл проекта WHILE1.DPR.

2. Добавьте к форме компонент SaveDialog страницы Dialogs палитры компонентов Delphi.

3. Измените свойство Filter вновь добавленного диалогового окна SaveDialog1на такое же, как у OpenDialog1. Щёлкните на OpenDialog1 для выбора его, затем нажмите клавишу Shift и щёлкните на компоненте SaveDialog1. После этого щёлкните на свойстве Filter в инспекторе объектов и нажмите Enter. Теперь оба диалоговых окна должны иметь одинаковые свойства Filter.

4. Добавьте команду Save As... в меню File. Для этого сначала дважды щёлкните на компоненте MainMenu1 в Дизайнере формы для вызова редактора меню. В редакторе меню щелкните на разделительной линии между командами Open и Exit.

Нажмите клавишу Insert. Введите Save &As... в свойство Caption нового пункта меню.

Нажмите Enter. Закройте редактор меню. Теперь Вы можете проверить, что команда Save As... появилась в меню File, щёлкнув мышью на модели основного меню в Дизайнере форм.

5. Находясь в Дизайнере форм, щёлкните на строке Save As... меню File. Система Delphi создаст заготовку метода обработки событий OnClick и покажет её в окне редактора кода.

6. Введите метод TFrmWhile1.SaveAs1Click, как показано на листинге 2.

Листинг 2. Обработчик события OnClick для команды меню Save As программы просмотра файлов While1.

_ 1: procedure TFrmWhile1.SaveAs1Click(Sender: TObject);

2: var 3: LineNo:Integer;

4: ATextFile: System.Text;

5: TextLine: String;

Pages:     || 2 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

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