Структурированные типы данных



Лабораторная работа № 1

 

Программирование на языке Object Pascal

 

Введение

Целью настоящей лабораторной работы является знакомство с основными особенностями и возможностями языка программирования Object Pascal, который занимает центральное место в системе программирования DELPHI.

Язык Object Pascal является дальнейшим развитием языка Turbo/Borland Pascal, но, при сохранении многих общих элементов, имеет ряд отличительных особенностей. Они определяются, главным образом, работой пакета DELPHI в операционной системе Windows и потребностями визуального программирования.

В лабораторной работе относительно подробно рассматриваются основные элементы, актуальные для Object Pascal (за исключением элементов объектно-ориентированного программирования, чему посвящена отдельная лабораторная работа), и опускаются все те, которые присутствуют в обычном Паскале. Рассмотрение сопровождается примерами простых программ, которые составляют практическую часть работы и должны выполняться в ходе лабораторной работы. Невысокая сложность, а в ряде случаев даже примитивность примеров объясняются тем, что они служат лишь для целей иллюстрации тех или иных особенностей языка. Все примеры практической части должны выполняться в среде DELPHI. Их содержание в описании лабораторной работы выделены курсивом.

 

Алфавит языка Object Pascal

Алфавит языка (набор символов) Object Pascal является подмножеством набора символов кода ASCII и по сравнению с алфавитом обычного Паскаля имеет следующие особенности:

q введен еще один вид комментария, признаком которого служит двойная косая черта //. Все символы после этого признака до конца строки являются комментарием;

q добавлены следующие новые зарезервированные слова: as, class, except, finalization, finally, initialization, is, on, property, raise, threadvar, try.Их смысл и назначение раскрываются в дальнейшем при рассмотрении соответствующих конструкций языка;

q введены следующие новые директивы: abstract, automated, cdecl, default, dispid, dynamic, message, nodefault, override, pascal, protected, published, read, register, stdcall, stored, write. Лексемы private, protected, published и automated внутри описания классов действуют как ключевые слова, а во всех остальных случаях – как стандартные директивы.

 

Структура программы

Программа на языке Object Pascal имеет типичную структуру, включающую:

1) заголовок;

2) раздел указания используемых модулей;

3) раздел описаний;

4) операторный раздел.

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

Типы данных

В языке Object Pascal по сравнению с Turbo/Borland Pascal пересмотрена концепция построения основных типов. Группы целых, символьных и строковых типов подразделяются на две категории:

1.Фундаментальные (fundamental) типы, формат представления которых в памяти строго фиксируется и будет выдерживаться неизменным во всех последующих реализациях Object Pascal для любых операционных систем и компьютерных платформ.

2.Родовые (generic) типы, формат представления которых в памяти не фиксируется и будет устанавливаться наиболее оптимальным способом для конкретной операционной системы и компьютерной платформы.

К фундаментальным типам относятся:

  • целые типы Shortint, Smallint, Longint, Byte, Word;
  • символьные типы AnsiChar и WideChar;
  • строковые типы ShortString и AnsiString.

К родовым типам относятся:

  • целые типы Integer и Cardinal;
  • символьный тип Char;
  • строковый тип String.

Для вещественных и булевских типов разделение на фундаментальные и родовые типы отсутствует. В целом, как и ранее, все типы разделяются на стандартные (предопределенные) и пользовательские.

В группу стандартных целых типов добавлены два новых типа: Smallint и Cardinal. Их характеристики приведены в табл. 1.

 

 

Таблица 1. Целые типы Smallint и Cardinal

Имя типа Диапазон представления Формат Размер в байтах
Smallint -32768 .. 32767 Знаковый 2
Cardinal 0 .. 2147483647 Беззнаковый 4

При написании программ рекомендуется отдавать предпочтение типам Integer и Cardinal, так как их использование процессором более эффективно.

В группу вещественных типов по сравнению с реализациями Turbo/Borland Pascal добавлен тип Currency. Его характеристики представлены в табл. 2.

Таблица 2. Вещественный тип Currency

Название типа Диапазон представления Значащие цифры мантиссы Размер байт
Вещественный повышенной точности в формате с фиксированной точкой 922337203685477.5808.. 922337203685477.5807 19 .. 20 8

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

Object Pascal так же, как и Turbo/Borland Pascal, поддерживает четыре булевских типа Boolean, ByteBool, WordBool и LongBool.

В Object Pascal расширена группа символьных типов: к традиционному типу добавлены типы AnsiChar и WideChar (табл. 3).

 

Таблица 3. Символьные типы AnsiChar, WideChar

Имя типа Размер в байтах Кодировка
AnsiChar 1  
WideChar 2 Unicode

 

Тип AnsiChar по своим характеристикам совпадает с типом Char. Первые 256 символов кодировки Unicode в типе WideChar совпадают с символами ANSI-кодировки, но сами типы AnsiChar и WideChar непосредственно несовместимы.

Задание 1. Подготовить и выполнить программу вывода на экран символов ANSI-кодировки, за исключением служебных символов с кодами от 0 до 31.

Примечание. В программе использовать форму, содержащую кнопки “Операция” и “Закрыть” Эту же форму использовать как исходную во всех последующих заданиях, взяв в качестве ее заголовка текст “Задание № “ с указанием текущего номера задания. Для вывода символов использовать компоненту Memo стандартной страницы палитры компонент.

В группу пользовательских типов введены два новых типа: вариантный тип – Variant и тип указателей на классы, описания которых вводятся ключевыми словами class of. Вариантные типы используются для работы с переменными, тип которых на этапе компиляции неизвестен, а также для динамического изменения типа этих переменных во время выполнения. Подробнее о вариантных типах см. [1, п.4.3.7].

В ряде случаев требуется преобразовать переменную одного типа в переменную другого типа. В Object Pascal имеется несколько стандартных подпрограмм, выполняющих преобразование типов данных. Основные сведения о них приведены в приложении 1.

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

Примечание. Ввод данных осуществить с помощью компоненты Edit.

 

Выражения и операции

Язык Object Pascal полностью поддерживает все возможности предыдущих версий Паскаля по обработке выражений и множеству используемых для этого операций. Имеются два нововведения:

  • операции as и is, позволяющие осуществить доступ к информации о типах времени выполнения (RTTI – Run Time Type Information) для классов и объектов;
  • правила преобразования типов и выполнения операций при вычислении выражений, в которых присутствуют операнды нового типа Variant.

Операции as и isпозволяют определять во время выполнения принадлежность объектов к определенному классу или одному из его потомков, а также осуществлять безопасное преобразование классовых типов. Такие действия широко используются при работе с компонентами DELPHI. Они рассматриваются в лабораторной работе № 3, посвященной изучению основ объектно-ориентированного программирования в языке Object Pascal.

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

Задание 3. В программе заданы 4 подряд идущих переменных X,Y,Z,W, имеющих типы соответственно Byte, Word, Longint, Integer. Подготовить и выполнить программу вывода адресов и размеров памяти (в байтах) этих переменных в виде таблицы следующей формы:

  Адрес Размер
Byte    
Word    
Longint    
Integer    

.

Примечание. Для вычисления адресов можно воспользоваться операцией @. Чтобы вывести значение адреса на экран, следует преобразовать адрес в целое число, например типа Longint, с помощью функции IntToStr.

Чтобы найти размеры областей памяти, отводимых под переменные, следует сравнить адрес текущей переменной и адрес следующей переменной. Для нахождения размера памяти последней переменной нужно после нее записать какую-либо дополнительную переменную.

Для создания таблицы в форме следует использовать компоненту StingGird, которая расположена на странице Additional. С помощью инспектора объектов удалить линейку скроллинга таблицы и задать ее размеры с помощью свойств RowCount и ColCount.

Содержимое каждой ячейки таблицы задается свойством Cells. При этом положение каждой ячейки определяется двумя индексами, задающими номер столбца и строки. Нумерация столбцов и строк начинается с нуля.

 

Операторы

По сравнению с версией Turbo/Borland Pascal в Object Pascal в операторах языка сделаны следующие дополнения:

1. В семантике оператора case введены два изменения, которые позволяют получить на этапе компиляции более эффективный машинный код для этого оператора:

4 диапазоны, задаваемые списками констант, не должны пересекаться;

4 списки констант в альтернативных ветвях оператора case должны располагаться в возрастающем порядке.

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

2. Введен новый оператор try, который предназначен для обработки исключительных ситуаций и имеет две разновидности. Конструкция try…except служит для обработки конкретных исключительных ситуаций. Конструкция try…finally обеспечивает выполнение группы операторов вне зависимости от возникновения исключительной ситуации.

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

Состав основных групп операторов языка и их функции не претерпели изменений.

Задание 4. Подготовить и выполнить программу, выполняющую ввод целого числа и вывод символа в ANSI-коде, соответствующего этому числу. Если символа нет, то должно быть выведено сообщение “Символа нет”. Управляющие символы не учитываются.

Примечание. Ввод числа и вывод результата выполнить с помощью компонент типа Edit. Строку ввода исходного числа пометить текстом “Число”, а строку вывода результата – текстом “Символ”.

Задание 5. Внести изменения в предыдущую программу, чтобы она при вводе каждого очередного знака распознавала его тип и выдавала следующие сообщения: “Цифра”, “Строчная буква”, “Прописная буква”, “Управляющий символ”, “Другой символ”.

Задание 6. Подготовить и выполнить программу нахождения всех положительных делителей целого числа (кроме единицы и самого числа).

Примечание 1. Использовать следующий алгоритм: исходное число делится на все целые числа, начиная с двух и кончая числом, равным половине заданного числа. Если остаток при делении будет равен нулю, то делитель найден.

Примечание 2. Для ввода исходного числа в форме использовать строку ввода Edit, которую пометить текстом “Целое число”. Для вывода делителей числа использовать компоненту ListBox (Список) страницы Standard. [1] Выполнение программы начать нажатием кнопки “Операция”. Для вывода элементов списка использовать свойство Items. компоненты ListBox. С целью многократного использования программы без перезагрузки перед началом поиска делителей очистить список с помощью метода Clear свойства Items. При обнаружении очередного делителя записывать в список его порядковый номер и значение с помощью метода Add. Если делителей у числа нет, вывести сообщение “Исходное число – простое”.

Структурированные типы данных

Структурированные типы данных определяют наборы однотипных (однородных) или разнотипных (неоднородных) элементов, типы которых образуются из других типов (простых, структурированных, указателей и т. д.).

Структурированные типы Object Pascal включают в себя все типы этого класса, существующие в версиях Turbo/Borland Pascal, к которым добавлены следующие новые типы:

Ÿ две разновидности строкового типа ShortString и AnsiString;

Ÿ тип указатель на класс class of.

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

Тип class of, как и тип class, связан с объектно-ориентированной методологией разработки программ, которой посвящена отдельная лабораторная работа.

Строки типа ShortString (“короткая” строка) и AnsiString (“длинная” строка) могут использоваться наряду с основным строковым типом String и типом Pchar, описывающим строку, которая оканчивается нулем. Универсальная строка типа String может использоваться и как “короткая” строка, и как “длинная” строка в основном в зависимости от директивы компилятора {$H} или параметра Project|Options|Compiler|Huge strings главного меню. Если задана директива {$H+} или установлен указанный параметр, строка типа String ведет себя как “длинная”. В противном случае – как “короткая”. Строки типа String с явно заданным размером всегда являются “короткими”.

Строка типа ShortString представляет собой одномерный массив, в который можно поместить до 255 символов. Однако, в отличие от обычного массива, ShortString-строка имеет не фиксированную длину, а две разновидности длины:

4 общую длину строки, которая определяет размер памяти, выделяемый короткой строке при ее описании;

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

Текущая длина ShortString-строки указывается в нулевом (то есть имеющем индекс 0) элементе строки. В него записывается символ, код которого равняется значению текущей длины. Нулевой элемент строки при этом сделан невидимым для программиста, однако использовать его в программах допускается.

Строка ShortString совместима со строками любых других типов. Ей можно присваивать значение другой строки или строкового выражения. При этом другие типы строк приводятся к типу ShortString. Значение строки ShortString также допускается присваивать строке другого типа за исключением строки типа Pchar.

Строка типа AnsiString (строка для размещения символов ANSI-кодировки) представляет собой массив, в который можно поместить любое количество символов. В отличие от ShortString-строк память под такие строки выделяется не статически, а динамически. “Длинные” строки не имеют максимальной длины, устанавливаемой при объявлении, а только динамическую текущую длину. Переменная, соответствующая такой строке, фактически является указателем на динамически выделенную под эту строку область памяти. Если строка является пустой, этот указатель имеет значение nil[2].

Строки типа AnsiString обладают такими же свойствами совместимости со строками других типов, что и ShortString-строки.

В операциях со строками широко используются различные стандартные подпрограммы, краткие описания которых приведены в приложении 2.

Задание 7. Подготовить и выполнить программу определения текущих характеристик строки типа ShortString.

Примечание. Для решения задачи использовать программу задания 6, внеся в нее некоторые изменения. В разделе объявления переменных ввести строковую переменную Str типа ShortString и инициализировать ее значением “Короткая строка”. Компоненту Edit формы пометить текстом “Строка”. Ее следует использовать в процессе работы программы для ввода новых строк.

В процедуре обработчика событий, инициируемой нажатием кнопки “Операция”, разместить операторы, выполняющие следующие действия:

 1. Ввод новой строки.

 2. Очистка списка.

 3.Добавление в строки списка параметров текущей строки: общего и текущего размеров строки, текста строки и ее первого символа. Значение каждого параметра сопроводить текстом, поясняющим его название.

Для получения общего размера строки использовать стандартную функцию SizeOf, определяющую размер аргумента в байтах, а для получения текущего размера – стандартную функцию Length.

Добавить в создаваемый программный модуль процедуру обработчика событий FormCreate, обрабатывающего событие OnCreate, которое возникает при создании формы и по которому начальное значение строки Str присваивается свойству Text строки ввода Edit1.

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

Задание 8. Подготовить и выполнить программу определения текущих характеристик “длинной” строки AnsiString.

Примечание. Для решения задачи использовать программу задания 6, внеся в нее соответствующие изменения. Вместо переменной Str типа ShortString ввести новую инициализированную переменную типа AnsiString. Дополнительно для текущей строки определить еще один параметр: код символа завершения строки, идущего за последним помещенным в строку символом и имеющего номер, равный значению выражения Length(Str)+1.

Аналогично заданию 6 получить характеристики нескольких “длинных” строк. По результатам выполнения заданий 7 и 8 сопоставить характеристики строк типа ShortString и AnsiString между собой.

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

Примечание. Ввод строки символов выполнить с помощью компоненты Edit. Название кнопки “Операция” изменить на “Проверка”. При проверке введенных символов совокупности правильных символов представить с помощью конструктора множеств диапазонов этих символов. При обнаружении неверного символа осуществить активизацию строки ввода с помощью метода SetFocus и выделить этот символ путем задания свойствам SelStart и SelLength[3] соответствующих значений. Для вывода сообщений использовать компоненту Label.

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

В языке 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 определяет вид выводимого окна и задается следующими именованными константами:

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

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

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

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

4 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 состоят в следующем:

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

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

4 в обычных приложениях 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.


Дата добавления: 2018-04-15; просмотров: 851; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!