Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_ЛР1,2_A5_Часть1.doc
Скачиваний:
35
Добавлен:
08.11.2019
Размер:
1.7 Mб
Скачать

8. Организация ввода-вывода

В языке Object Pascal ввод-вывод информации осуществляется тремя способами:

  1. Ввод-вывод с использованием интерфейсных элементов типа строк и окон ввода, меток, окон сообщений и т. д.

  2. Традиционный ввод-вывод с использованием файлов и файловых переменных.

  3. Ввод-вывод основанный на применении дескрипторов файлов.

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

Простейшими средствами ввода данных являются компоненты Edit (строка ввода) и Memo (редактор текста)4. В первом случае ввод осуществляется с помощью свойства Text компоненты, во втором – свойства Lines. В обоих случаях вводимые значения имеют строковый тип. Поэтому если в результате ввода надо получить значение целого или вещественного типа, то введенная строка должна быть преобразована в число с помощью соответствующей функции преобразования.

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

Подпрограмма InputBox(Caption, Prompt, Default) размещает на экране диалоговое окно с заголовком Caption типа string для ввода строки символов. Параметр Prompt типа string содержит пояснение, какую информацию следует вводить, параметр Default (также типа string) – текст, находящийся в строке ввода в момент появления окна ввода на экране. Кроме строки ввода диалоговое окно содержит кнопки OK (Ввод) и Cancel (Отмена), а также кнопку закрытия окна на его верхней строке. Подпрограмма возвращает введенную строку, если окно закрыто кнопкой OK, и исходную строку, если окно закрыто кнопкой Cancel.

Подпрограмма InputQuery(Caption, Prompt, Value) выполняет по существу ту же самую функцию, но ее результат имеет логический тип. Параметр Value представляет собой текст, набранный в строке ввода. Возвращаемое значение имеет тип True, если окно закрыто кнопкой OK, и False, если окно закрыто кнопкой Cancel.

Простейшим средством текстового вывода данных является компонента Label (метка). Чтобы вывести текстовую строку на экран, следует присвоить ее в качестве значения свойству Caption метки. Если требуется вывести числовое значение, то предварительно его необходимо преобразовать в строку символов с помощью функции IntToStr или FloatToStr.

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

Функция MessageBox(Text, Caption, Flags), являющаяся методом класса TApplication, позволяет вывести сообщение Text (типа Pchar) в окно с заголовком Caption (также типа Pchar). Параметр Flags (типа Longint) задает способ оформления окна с помощью различных управляющих кнопок и значков. Описание значений этого параметра приведено в [2, с.364].

Процедуры ShowMessage(Msg) и ShowMessagePos(Msg, X, Y) предназначены для вывода на экран сообщения Msg (типа String) в виде информационного окна. Отличие этих процедур состоит в том, что первая выводит окно в центр экрана, а вторая – таким образом, что его левый верхний угол имеет координаты X и Y.

Помимо сообщения Msg, окно имеет кнопку OK и кнопку закрытия на заголовке. Заголовок окна совпадает с названием приложения, из которого оно вызвано.

Подпрограммы-функции MessageDlg(Msg, Type, Buttons,) и MessageDlgPos(Msg, Type, Buttons, Help, X, Y) выводят диалоговое окно с сообщением Msg (типа String) и набором кнопок. Их отличие такое же, что и процедуры ShowMessage и ShowMessagePos.

Параметр Type определяет вид выводимого окна и задается следующими именованными константами:

  • mtWarning – окно с предупреждением, содержит желтый восклицательный знак;

  • mtError – сообщение об ошибке, содержит белый крест в красном круге;

  • mtInformation – информационное сообщение, содержит синий знак i;

  • mtConfirmation – запрос подтверждения, содержит зеленый знак вопроса;

  • mtCustom – обычное сообщение без значка.

Параметр Buttons задает число и вид кнопок в окне. Он может состоять из нескольких разделенных запятыми именованных констант, записанных в квадратных скобках. Константы образуют следующее множество: mbYes, mbNo, mbOk, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbHelp. Названия кнопок совпадают с именами соответствующих констант, но без префикса mb. Помимо списка из констант можно использовать также следующие стандартные константы-множества: mbOkCancel, mbYesNoCancel и mbAbortRetryIgnore. Они задают наиболее часто используемые в диалоговых окнах комбинации командных кнопок.

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

Значение, возвращаемое функцией MessageDlg или MessageDlgPos после щелчка по одной из кнопок, позволяет определить эту кнопку. Ниже приведен список констант, идентифицирующих нажатую кнопку.

Константа

Нажатая кнопка

mrNone

кнопка не нажата

mrOk

OK

mrCancel

Cancel

mrAbort

Abort

mrRetry

Retry

mrIgnore

Ignore

mrYes

Yes

mrNo

No

mrAll

All

Задание 10. Подготовить и выполнить программу решения квадратного уравнения. Ввод исходных данных выполнить с помощью подпрограммы InputBox, а вывод результатов – с помощью процедуры ShowMessage. В программе предусмотреть все варианты результатов, в том числе когда уравнение не имеет корней.

Файловый ввод-вывод в Object Pascal базируется на использовании файлов трех категорий: типизированных (file of <тип>), текстовых (стандартный тип TextFile) и файлов без типа (file). Работа с каждой из этих категорий имеет свои особенности и основывается, прежде всего, на использовании стандартных процедур и функций для файлов5. Нововведения в работе с файлами в языке Object Pascal состоят в следующем:

  • процедуры Assign и Close заменены соответственно процедурами AssignFile и CloseFile;

  • при объявлении текстовых файлов используется стандартное имя типа TextFile, так как предопределенный идентификатор Text применяется в большинстве случаев как имя свойства некоторых компонент (например, TEdit.Text);

  • в обычных приложениях DELPHI обращения к файлам Input и Output вызывают ошибку ввода-вывода. Если же приложение компилируется в так называемом консольном режиме6, который устанавливается опцией Generate console application на вкладке Linker диалогового окна ProjectOptions, то файлы стандартного ввода-вывода Input и Output автоматически связываются с консольным (т.е. DOS-окном) этого приложения и могут использоваться так же, как и раньше. Кроме того, в этом режиме могут использоваться процедуры Assign, Close и имя типа Text.

Консольный режим следует использовать также при выполнении ввода-вывода на экран с помощью стандартных процедур Read (ReadLn) и Write (WriteLn), поскольку эти процедуры предполагают ввод-вывод символов, а DELPHI работает в графическом режиме. Определенные сложности возникают также с выводом на экран текстов, содержащих символы кириллицы, или с чтением их из файла, созданного в MS DOS. Объясняется это тем, что в текстовом режиме (и в MS DOS) используется ASCII-кодировка, а в DELPHI (и в WINDOWS) – ANSI-кодировка, у которых коды символов кириллицы не совпадают.

Задание 11. Подготовить и выполнить программу чтения с экрана двух чисел и вывода на экран их суммы.

Примечание. Для решения задачи следует использовать эмуляцию текстового режима. В этом случае приложение компилируется в консольном режиме и работа программы будет протекать так же, как в MS DOS.

Для решения необходимо выполнить следующие действия:

  1. Открыть новый проект командой File|New Application главного меню.

  2. Установить консольный режим компиляции так, как это было пояснено выше.

  3. Открыть текст программы-проекта командой View|Project Source.

  4. Скорректировать текст этой программы, удалив из него строки между операторными скобками begin и end.

  5. Ввести новый текст программы, поместив описание переменных перед begin. В тексте для ввода исходных чисел использовать оператор Readln, сопровождая ввод предварительным выводом на экран имени вводимой переменной. Для вывода суммы использовать оператор Writeln.

  6. Запустить программу командой главного меню Run|Run. Учитывая подсказки программы, ввести значения исходных чисел, заканчивая каждый ввод нажатием Enter.

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

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

Примечание. Для решения задачи рекомендуется следующая последовательность действий:

  1. С помощью текстового редактора DELPHI создать текстовый файл, в который поместить 5-6 пар положительных и отрицательных целых чисел, отделяя их друг от друга хотя бы одним разделителем. Файл сохранить в текущем каталоге.

  2. В разделе объявления переменных интерфейсной части ввести файловую переменную типа TextFile.

  3. В конце модуля формы перед end. разместить секции инициализации и завершения, записав в них операторы, выполняющие стандартные начальные и завершающие действия с исходным файлом.

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

  5. Выполнить компиляцию программы и проверить ее выполнение.

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

Примечание. Для решения задачи следует использовать программу предыдущего задания, внеся в нее следующие изменения и дополнения:

  1. В исходный текстовый файл вместо целых чисел записать вещественные.

  2. Дополнить форму приложения кнопкой “Проверка”, с помощью которой будут проверяться результаты работы программы, компонентой Memo, в которую результаты будут записываться и выводиться на экран, и меткой для вывода сообщений о ходе работы программы.

  3. В разделе объявления типов модуля формы ввести тип комплексных чисел Complex, используя для этого тип record. В разделе var добавить файловую переменную типа файла комплексных чисел.

  4. Секции инициализации и завершения дополнить операторами открытия и закрытия файла комплексных чисел.

  5. Для кнопки “Операция” подготовить текст обработчика, с помощью которого вывести сообщение о начале работы программы, организовать попарное чтение чисел из исходного файла, формирование комплексных чисел и их запись в выходной файл. Момент окончания формирования выходного файла отметить сообщением “Файл комплексных чисел подготовлен”, которое вывести на экран в поле метки, заменив в ней прежний текст на новый (для перерисовки метки после изменения ее текста можно использовать стандартный метод Repaint).

  6. Для кнопки “Проверка” подготовить текст обработчика событий, с помощью которого выполняются чтение файла комплексных чисел, преобразование действительной и мнимой составляющей каждого числа в символьную форму, дополнение каждой из них пояснениями типа ‘Re=’ и ‘Im=’ и вывод полученной строки символов в компоненту Memo.

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