Разработка программы и пользовательского интерфейса

45238
знаков
0
таблиц
3
изображения

3. Разработка программы и пользовательского интерфейса

Компьютерная программа — это набор элементарных команд процессора, представленных в файле в виде последовательности байтов (машинный код). Каждая команда может быть закодирована одним или несколькими байтами. Программы в таком виде можно составлять вручную, но подобная работа человеку просто не под силу из-за неудобства управления процессором напрямую с помощью простых команд. Поэтому программа пишется на одном из языков программирования, как обычный текст. Этот текст называется исходным текстом (или исходным кодом) программы. Команды языка программирования понятны и наглядны.

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

Исходный текст программы автоматически переводится в набор инструкций процессора с помощью специальной программы, называемой компилятором. В среде Delphi 7 для этого достаточно выполнить всего одну команду или нажать одну клавишу. Процесс компиляции — перевода (трансляции) исходного текста в конкретные команды процессора выполняется очень быстро. За секунду программа-компилятор анализирует и транслирует тысячи строк исходного кода. Среда Delphi 7 представляет собой интегрированную оболочку разработчика, в которую входит набор специализированных программ, ответственных за разные этапы создания готового приложения (рис. 1).

Исходный текст программы готовится в среде Delphi 7 с помощью встроенного редактора исходных текстов. Этот редактор специализирован. Он отличается гибкими возможностями цветового выделения различных элементов текста программы (ключевых слов, названий, операций, чисел и строк) и предоставляет возможность быстрого ввода часто встречающихся конструкций.

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

На этапе проектирования форм программа как бы составляется из готовых компонентов — частей машинного кода, которые можно добавлять к ней с помощью всего нескольких щелчков мыши. Компоненты располагаются на палитре компонентов, разделенной на несколько самостоятельных панелей (рис. 2).

Компоненты обладают наборами свойств, характеризующими их отличительные особенности. Некоторые свойства имеются практически у всех компонентов — таково, например, свойство Name (Имя). Другие свойства, например Caption (Заголовок), имеются у большинства компонентов — ведь заголовок необходим и для окна, и для кнопки. Некоторые свойства уникальны для конкретных компонентов, например свойство SimpLeText (Простой текст), содержащее текст для компонента Строка состояния.

Свойства компонентов в процессе проектирования формы настраиваются с помощью Инспектора объектов. Это специальная программа, показывающая список всех свойств данного компонента, отсортированных по категориям или в алфавитном порядке.

Значение любого свойства можно изменить, введя в соответствующее поле Инспектора объектов новую строку или выбрав нужное значение в раскрывающемся списке доступных значений. Некоторые свойства содержат вложенные подсвойства например, свойство Font (Шрифт) характеризуется размером, стилем, цветом, гарнитурой. Такие свойства удобнее редактировать с помощью специальных редакторов, как стандартных (шрифт), так и специально разработанных для конкретного компонента.

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

В системе Delphi 7 существуют сотни готовых компонентов, и при решении многих задач бывает полезно предварительно поискать нужный компонент (например, в Интернете), вместо того чтобы выполнять работ; по программированию, возможно, уже сделаную другими людьми. Компонентный подход к созданию программ позволяет повторно использовать готовые разработки и во многих случаях значительно повышает эффективность труда.

С помощью системы Delphi 7 можно создавать не только обычные программы (ЕХЕ-файлы), но и динамически подключаемые библиотеки DLL [своеобразные хранилища кода и ресурсов), новые элементы управления, а также компоненты, отвечающие требованиям различных стандартов но компонентные технологии (COM, ActiveX, CORBA и так далее).

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

Паскаль и Delphi (Object Pascal).

В системе Delphi 7 используется специализированная, постоянно совершенствуемая версия языка программирования Паскаль, которая называется Delphi (в шестой и более ранних вариантах системы Delphi она называлась Object Pascal, «Объектный Паскаль»). Эта версия включает набор расширений, ориентированных только на применение в рамках среды Delphi 7 и предназначенных для ускоренного создания приложений.

В комплект системы Delphi 7 входит компилятор командной строки dcc32.exe для этого языка. Кроме того, выполнять компиляцию можно непосредственно из интегрированной оболочки.

Запись программы

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

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

..

//

:

=

<>

Программа содержит ключевые (или зарезервированные) слова, как стандартные, так и пользовательские (включаемые в программу разработчиком), а также идентификаторы и выражения.

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

Unitl

Integer

х

for

There_are_Dates

Go478

Модули. Программа на Паскале состоит из набора модулей (Unit), в каждом из которых содержится описание логически независимой части программы (например, описание работы конкретного окна или описание алгоритма вычисления сложной математической функции). Расширение имени файлов, содержащих модули — .PAS. Модули программы часто создаются системой Delphi 7 автоматически, например при добавлении новой формы. При этом происходит автоматическая генерация исходного текста соответствующего модуля, что избавляет программиста от рутинной работы.

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

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

В реальности исходные тексты компонентов Delphi 7 представляют собой обычные модули Паскаля, содержащие описание логики работы и способа отображения на экране соответствующих компонентов,

Главный файл

В программе может быть любое количество модулей (несколько сот или вообще ни одного), но только один главный файл проекта. Этсп файл чаше всего невелик и содержит обращения к модулям. Он имеет расширение .DPR и создается средой Delphi 7 автоматически. Начинается этот файл с ключевого слова program (программа), за которым следует название программы и точка с запятой.

program DemoProgram,-

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

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

Комментарии в Паскале бывают двух типов: многострочные и однострочные.

С помощью системы Delphi 7 можно создавать приложения Windows практически неограниченной сложности, использующие графический интерфейс. Однако для тех, кто только начинает знакомство с основными операторами Паскаля, имеется возможность создания простых программ в стиле MS-DOS (в качестве учебных).

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

Чтобы создать консольное приложение, надо дать команду File > New > • Other (Файл > Создать > Другое) и в диалоговом окне New Items (Создание программы) выбрать значок Console Application (Консольное приложение) (рис. 3) . Система автоматически сгенерирует в текстовом редакторе исходный код заготовку будущего приложения.

Обмен информацией

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

В Паскале имеются две стандартные процедуры ReadLn (для ввода данных) и Write Ln (для записи данных), которые могут использоваться в консольных приложениях. Первая процедура выполняет ввод значения с клавиатуры и его передачу в переменную, которая указана в качестве параметра (можно указать и список переменных — тогда при вводе соответствующие им значения надо разделять пробелами).Вторая процедура выводит одно или несколько значений переменных или выражений в текущую строку экрана, разделяя их пробелами. Процедура ReadLn требует, чтобы человек после окончания ввода нажал клавишу

ENTER, а процедура WriteLn после окончания вывода значений осуществляет перевод курсора на следующую строку. Другая процедура вывода, Write, не выполняет такого перевода и продолжает вывод данных в текущую строку.

Сохранение программы

Перед первым запуском программы ее исходный текст необходимо сохранить. Для этого щелкните на командной кнопке Save All (Сохранить все) напанели инструментов.

Система Delphi 7 попросит указать место для сохранения главного файла Projectl.

Укажите любую подходящую папку.

Компиляция и запуск программы

Чтобы откомпилировать и сразу запустить данную программу, достаточно нажать клавишу F9. В папке, где был сохранен файл с исходным текстом, появится исполнимый файл программы — Projectl.exe. Она будет тут же автоматически запущена из среды Delphi 7. На экране откроется окно консольного приложения.

После нажатия клавиши ENTER управление будет передано обратно в оболочку Delphi 7. Обойтись только простыми — линейными типами в большой программе довольно сложно. Желательно, чтобы структура данных прикладной программы отвечала структуре данных решаемой задачи. Для этого в Паскале есть набор структурных типов данных.

Массивы

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

Описание массива имеет вид:

type имя-типа-маесива = array[ диапазон ] of тип-элемента;

Запись — это структура данных, доступ к элементам которой осуществляется по имени (названию элемента). Элементы записи могут иметь разный тип, поэтому при описании записи надо указывать и название каждого элемента, и его тип.

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

Указатели можно складывать (операция «+») друге другом и с целыми числами, а также вычитать (операция «-»). Смысл этих операций состоит либо в сдвиге (смещении) адреса памяти на заданное целое число единиц соответствующего типа вперед или назад, либо в определении разности (числа единиц данных) между двумя указателями. Складывать два указателя в языке Паскаль не разрешается.

Подпрограммы

Описание подпрограммы состоит из трех частей: заголовка подпрограммы, локального описания и тела подпрограммы. Заголовок используется, чтобы явно ввести в программу новую подпрограмму и обозначить начало ее описания. Локальные описания представляют собой набор описаний типов, переменных, констант и других подпрограмм, которые действуют только в рамках данной подпрограммы. Тело подпрограммы — это логический блок begin/end, содержащий операторы и команды Паскаля и реализующий нужную логику работы.

Описание подпрограммы — это только описание, которое никогда не выполняется само по себе и может располагаться в любом месте исходного текста (но обязательно до первого вызова подпрограммы). Вызывается процедура или функция только внутри логического блока begin/end с указанием конкретных значений для каждого из ее параметров.

Способы вызова подпрограмм

Подпрограммы с точки зрения прикладного программиста вызываются всегда одинаково, но машинный код, который создается компилятором, для разных подпрограмм может отличаться. Это зависит от целей применения конкретной подпрограммы. Она может использоваться:

- в рамках разрабатываемой прикладной программы;

- как функция, доступная из динамической библиотеки .DLL;

- как процедура, вызываемая из внешних программ или из Windows и т. д.

Для каждого из таких нестандартных случаев вслед за заголовком подпрограммы (за точкой с запятой) должно следовать одно из ключевых слов. Хотя в Паскале не допускается использование одинаковых названий для переменных, констант и других идентификаторов, для локальных переменных и подпрограмм делается исключение. Так как в Паскале предъявляются строгие требования к типам данных, обращаться к подпрограмме, формальные параметры которой имеют тип Integer, с фактическими параметрами, имеющими тип Real, нельзя. Однако при решении задачи подчас бывает необходимо, чтобы подпрограмма с одним и тем же именем работала с разными типами данных. Когда в тексте программы указывается имя ранее описанной подпрограммы с фактическими параметрами, то выполнение основной части программы останавливается и управление передается подпрограмме, до тех пор пока в ходе работы не будет достигнут ее конец (зарезервированное слово end). После этого управление передается обратно в программу (или другую подпрограмму), вызывавшую данную подпрограмму.

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

Операторы

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

Условный оператор

Один из важнейших операторов Паскаля — условный оператор. Он позволяет изменить порядок выполнения операторов в зависимости от некоторого условия, представляющего собой логическое выражение типа Boolean. Если это значение равно True, то выполняется одна группа операторов, если оно равно False, то выполняется другая группа операторов или не выполняется ничего.

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

Оператор цикла

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

Оператор перехода

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

goto метка;

Компоненты первостепенной важности расположены на панели Standard (Стандартные) палитры компонентов (рис. 4).

Они соответствуют основным элементам управления Windows, без которых не обходится ни одна программа.Все компоненты Delphi 7 хранятся в библиотеке визуальных компонентов Visual Component Library (VCL). Каждый из компонентов, а также форма (будущее окно) описаны соответствующими классами Паскаля: к названию компонента добавляется буква Т; например, форма описывается классом TForm, кнопка (компонент Button) — классом TButton и так далее.

Создаваемая в среде Delphi 7 программа состоит из нескольких файлов. Это файлы с исходными текстами на Паскале и файлы описаний форм. Все они связаны друг с другом. Кроме того, в среде Delphi 7 имеется множество настроек, которые желательно сохранять на жестком диске в промежутках между сеансами работы с системой.

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

Чтобы сохранить текущий проект, надо выполнить команду File > • Save Al l (Файл > • Сохранить все) или щелкнуть на одноименной командной кнопке. Сначала разработчику будет предложено сохранить файл с исходным текстом (Unitl.pas), а затем — файл проекта Project! с расширением .DPR. Сохранять их лучше в отдельном каталоге, специально отведенном для данного проекта. В этом же каталоге компилятор в будущем создаст и исполнимое приложение. Теперь можно приступать к этапу проектирования пользовательского интерфейса — подготовке внешнего вида окна программы и размещению на нем элементов управления. Для этого надо переключиться в Проектировщик форм с помощью клавиши F12 или командной кнопки Toggle Form/Uni t (Выбрать Форму/Модуль). Проектировщик форм работает по принципу WYSIWYG, в соответствии с которым окно созданной программы будет выглядеть в точности так, как оно было подготовлено в Проектировщике форм. Например, изменить размер формы можно стандартным способом для системы Windows — протягиванием мыши. Создаваемая в Проектировщике форма — это только внешнее представление будущего окна, а не работоспособное приложение.

Любой объект Проектировщика форм доступен в исходном тексте программы по его имени. Имя (или название) объекта — это одно из его свойств, которые можно изменять и настраивать в Инспекторе объектов. Соответствующее свойство называется Name (Имя). Оно имеется у всех объектов без исключения и расположено в Инспекторе объектов в категории Miscellaneous (Дополнительныв) (рис. 5).

Первоначально значением этого свойства является строка Forml, сгенерированная системой Delphi 7 автоматически. Если ее изменить, например на MyForm, и нажать клавишу ENTER, то в проекте произойдут следующие изменения.

- Заголовок формы изменится с Forml на MyForm. Система Delphi 7 считает, что заголовок окна совпадаете его названием, пока разработчик не изменит заголовок явно.

- Тип формы в файле Unitl.pas изменится с TForml наТтуРогт.

- Имя переменной Forml изменится на MyForrn.

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

Заголовок формы — это свойство Caption (Заголовок). В Инспекторе объектов оно находится в категории Visua l (Внешний вид). Здесь можно ввести строку

Пример. В свойстве Name (Имя) можно использовать только латинские буквы и цифры, так как содержимое этого свойства соответствует названию переменной Паскаля — идентификатору. Заголовок — это произвольная строка, не имеющая прямого отношения к программированию.

На форме размешаются объекты, соответствующие компонентам с палитры компонентов. Чтобы создать на форме текстовое ноле, надо:

- выбрать панель Standard (Стандартная);

- щелкнуть на кнопке Edit (Текстовое поле);

- щелкнуть на том месте формы, где требуется поместить текстовое ноле.

В этом месте появится новый элемент управления (рис. 6).

Черные маркеры по контуру объекта указывают, что он выделен. Эти маркеры предназначены для изменения размеров объекта с помощью мыши. По умолчанию в системе Delphi 7 принято, что название нового объекта совпадает с его заголовком. Это название создается средой Delphi по следующему принципу.

Берется название компонента (для формы это Form, для текстового поля — Edit и так далее), и к нему добавляется порядковый номер, начиная с единицы. Если теперь на форму поместить еще одно текстовое поле, то его названием будет Edit2,

Если теперь взглянуть на исходный текст класса TMyForm, то окажется, что в разделе private появилось новое поле:

Editl: TEdit;

Оно было добавлено средой Delphi 7 в описание класса TMyForm автоматически.

Создание работоспособной программы

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

Чтобы контролировать ход компиляции и создания готового приложения, надо в настройках среды Delphi 7 включить флажок Show compiler progress (Отображать ход компиляции) (рис. 7). Соответствующее диалоговое окно открывается командой TooU x Environment Options > Preferences (Сервис > Настройки среды > Предпочтения разработчика).

Компиляция программы выполняется командой Project > Compile Project (Проект > Компилировать проект) или нажатием комбинации клавиш CTRU-F9. При этом на экране появляется диалоговое окно, в котором отображаются:

- название главного файла проекта — в строке Project (Проект);

- имя компилируемого файла — в строке Compiling (Компиляция) ;

- номер текущей строки компилируемого исходного текста — в строке Current Line (Текущая строка);

- общее число строк с учетом других откомпилированных модулей — в строке

Total lines (Всего арок);

- число советов, генерируемых компилятором для подскачки разработчику о двусмысленных местах в исходном тексте, например когда переменная перед ее первым использованием не имеет значения — в строке Hints (Подсказки);

- число предупреждений, выдаваемых компилятором при обнаружении мест в программе, которые могут служить потенциальным источником ошибок - в строке Warnings (Предупреждения);

- число ошибок, возникающих, когда компилятор не может определить, что означает некоторая строка исходного текста, — в строке Errors (Ошибки)

Если в процессе компиляции встретились подсказки и предупреждения, работоспособная программа все равно будет создана. Если же встретились ошибки, этого не произойдет, а система Delphi 7 во второй строке информационного окна сообщит об их обнаружении Done: There are errors (Готово: Найдены ошибки) . Ошибки надо исправить и выполнить процесс компиляции заново.

Компонент Меню (TMainMenu)

Компонент TMainMenu предназначен для добавления к программе главного меню, без которого не обходится практически ни одно из приложенийWindows.

Способ создания

Чтобы добавить к разрабатываемой программе меню, надо выбрать на панели компонентов Standard (Стандартные) компонент TMainMenu и поместить его на форме в

•f. MyForm.MainMemi!

Компонент TMainMenu — нееизуалъпый, в отличие от визуальных компонентов TEdit и TLabel, в точности соответствующих своему внешнему виду в работающей про-грамме. Это означает, что хотя он виден на форме как небольшой квадрат, в окне созданной программы в таком виде компонент не появится. Представление его на форме в миниатюрном виде просто указывает на наличие в программе объекта, ответственного за меню. А создается меню с помощью специального редактора. Некоторые компоненты называются невизуальными потому, что, во-первых, ряд элементов управления невозможно разместить на форме без специальной подготовительной работы, а во-вторых, в системе Delphi 7 имеется ряд компонентов, которые не предназначены для отображения на экране, хотя их свойства можно настраивать с помощью Инспектора объектов. Подобные компоненты используются, например, для обращения к базам данных, для установки связи с Интернетом и прочего.

Редактор меню вызывается двойным щелчком на объекте MainMenul . Первоначально меню пустое.

В Инспекторе объектов надо открыть категорию Localizable (Настраиваемые) и в свойстве Caption (Заголовок) ввести название первого пункта, например стандартную команду &Файл с указанной горячей клавишей, а затем нажать клавишу ENTER. Редактор меню переключится обратно в проектируемое меню, где уже появится первый пункт. Теперь надо опять нажать клавишу ENTER, и система Delphi 7 переключится к заголовку Caption для нового пункта. В него вводится очередное название (например, &Сложить), опять нажимается клавиша ENTER, и цикл формирования меню повторяется.

Компонент Флажок (TCheckBox)

Данный компонент используется для фиксации включенного или выключенного состояния (одного из двух). После размещения компонента Флажок на форме подпись к этому элементу управления можно задать в свойстве Caption. Расположение этой подписи определяется свойством Alignment: значение taRightHustify означает расположение подписи справа, а значение taLeftJustify — слева. Главное свойство флажка называется Checked. Оно доступно для изменения и на этапе проектирования, и на этапе работы программы. Это свойство принимает значение True, если флажок включен, и False, если он сброшен. Некоторые флажки могут находиться в третьем, «частично установленном» состоянии, когда признак установки флажка отображается приглушенным цветом. Такая возможность нужна, когда требуется сообщить пользователю о неполном соответствии указанному статусу (например, в ходе установки программ таким образом сообщается, что для установки выбраны не все доступные средства). Если для свойства AllowGrayed задано значение True, то флажок при последовательных щелчках на нем будет поочередно принимать состояния «сброшен», «установлен частично», «установлен». Определить текущее состояние или задать новое из числа доступных можно, проверив или изменив свойство State. Чтобы реагировать на изменение состояния флажка, надо создать обработчик события OnCLkk (При щелчке).

Форма в режиме дизайна при выполнении задания представлена на Рис. 11, а в режиме выполнения на Рис. 12- Рис. 14.

Листинг программы приведен в Приложении Б.

 

4.Отладка программы

Программ без ошибок не существует. Синтаксические ошибки, связанные с неверным вводом команд в редакторе, неверной записью идентификаторов и другими некорректными действиями, можно обнаружить простым анализом исходного текста, и они почти всегда фиксируются компилятором Delphi 7.

В некоторых случаях выдаются предупреждения или подсказки. Желательно устранять их источники, руководствуясь принципом «дыма без огня не бывает». Однако ошибки, связанные с неверной реализацией алгоритма (например, когда вместо символа > ошибочно введен символ <, что не является синтаксической ошибкой), могут привести к возникновению ошибок уже во время работы программы. Кроме того, неверная реализация исходного алгоритма не обязательно приводит к нарушению работоспособности приложения, но может повлечь за собой выдачу неверных результатов или выполнение ошибочных действий.

Рассмотрим следующий фрагмент исходного текста, выполняющий инициализацию массива А гг.

var Arr : array[1..10] of integer;

N := 11;

for i := 1 to N do

Arrfi ] := 0;

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

Синтаксические ошибки

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

При двойном щелчке на строке с сообщением об ошибке система Delphi 7 переключится в редактор, где подсветит строку, в которой эта ошибка обнаружена. Само сообщение (на английском языке) описывает ошибку достаточно подробно, чтобы можно было понять ее причину.

Например:Undeclared identifier: 'X '

В данном случае указано, что идентификатор X не объявлен.

Логические ошибки

Существует несколько способов предотвращения, выявления и устранения логических ошибок. Все они используются программистами, как правило, в комбинации друг с другом. За наиболее часто встречающимися ошибками можно заставить следить саму программу. Для этого в настройках проекта — соответствующее диалоговое окно вызывается командой Project > Options (Проект > • Настройки) — на вкладке Compiler (Компилятор) надо выполнить следующие действия (рис. 16).

На панели Code generation (Генерация машинного кода) сбросьте флажок Optimization (Оптимизация). Когда компилятор создает оптимизированный код, он нередко вносит существенные улучшения в детали алгоритма, реализованного на Паскале. Например, если программист вводит в процедуре локальную переменную X для хранения промежуточных результатов:

Выполнение по шагам

Обычно разработчику приблизительно известно, в какой подпрограмме возникает ошибка, однако обнаружить ее быстро, просто рассматривая исходный текст, не всегда удается, особенно новичкам в программировании (хотя просмотр исходных тестов признан наиболее эффективным средством обнаружения ошибок). Поэтому возникает необходимость выполнить эту подпрограмму по шагам: каждый оператор по очереди, с возможностью контроля значений используемых переменных.

Рассмотрим пример, связанный с проектом Projectl (предварительно в Менеджере проектов его надо сделать активным).

Точки прерывания можно ставить не в любой строке исходного теста, а только там, где выполняются какие-то действия. Такие строки помечены на левом поле в редакторе синими круглыми маркерами, которые появляются после успешно выполненной компиляции. В нашем случае точку прерывания можно поставить в строке с оператором цикла. Это делается нажатием клавиши F5 или щелчком мыши на синем маркере. При этом соответствующая строка выделяется красным цветом (рис. 18). Снимается точка прерывания аналогичным способом.

Если теперь запустить программу и выполнить операцию сложения (щелкнув на кнопке Сложить или выбрав соответствующий пункт в строке меню или в контекстном меню), то программа остановится и управление будет передано в систему Delphi 7, где строка с точкой прерывания помечается зеленой стрелкой на левом поле.

В заголовке главного окна системы Delphi 7 появится информационное сообщение Projectl [Stopped] (Выполнение проекта Projectl остановлено).Далее выполнение метода AddActionExecute можно продолжить по шагам.  Для этого используются команда Run > Step Over (Запуск > • Перешагнуть), клавиша F8 или кнопка Step Over (Перешагнуть). Если выполнить очередной шаг, то в редакторе подсвечивается голубым цветом и помечается зеленой стрелкой следующий оператор, ожидающий выполнения.

Просмотр и изменение значений

Помимо простого просмотра различных значений во время работы программы иногда требуется какое-нибудь значение изменить. Пусть, например, в процессе отладки по тагам обнаружена ошибка, но выполнение программы желательно продолжить. Чтобы обойти ошибку, неверное значение можно исправить вручную. Это делается в окне быстрого просмотра значений, которое открывается командой Run > Evaluate/ Modufy (Запуск > Определить/Изменить) или комбинацией клавиш CTRL+F7 (рис. 20).

В поле Expression (Выражение) вводится вычисляемое выражение. По щелчку на кнопке Evaluate (Вычислить) в поле Result (Результат) появится его значение. Это поле (панель) сделано таким большим, потому что в нем отображаются не только отдельные значения, но и массивы, и записи. В поле New value (Новое значение ) выводится измененное значение. С помощью кнопки Watch (Следить) выражение, указанное в поле Expression (Выражение) , можно добавить в окно слежения.


ВЫВОДЫ

 

В процессе выполнения курсовой работы были выполнено:

- на первом этапе работы было проанализировано задание и определен перечень вопросов, которые были решены в данной работе, определение того, что, собственно, будет выполнять разрабатываемая программа, не рассматривая конкретную реализацию этих функций;

- разработка алгоритма разрабатываемой программы;

- разработка программы и пользовательского интерфейса;

- произведена отладка программы.


ПЕРЕЧЕНЬ ССЫЛОК

1.  Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988.

2.  Довгаль С.И., Литвинов Б.Ю., Сбитнев А..И. Персональные ЭВМ : Турбо Паскаль V7.0, объектное программирование, локальные сети. – Киев: Информсиситема сервис, 1993.

3.  Епанешников А.М., Епанешникова В.А. Программирование в среде Turbo Pascal 7.0.-М.: Диалог –МИФИ,1999.

4.  Зуев Е.А. Программирование на языке Turbo Pascal 6.0,7.0. – М.: Радио и связь, Веста,1993.

5.  Кандзюба С.П., Громов В.Н. Delphi 7.Базы данных и приложения. Лекции и упражнения. – К.: Издательство "ДиаСофт", 2001.

6.  Климова Л.М. Pascal 7.0. Практическое программирование. Решение типовых задач. –М.:КУДИУ ОБРАЗ, 2000.

7.  Марченко А. И., Марченко Л.А.. Программирование в среде Turbo Pascal 7.0.-К.: Век+,1999.

8.  Фаронов В.В. Turbo Pascal 7.0. Начальный курс. - М.: Нолидж, 2000.

9.  Методические указания к выполнению курсовой работы по дисциплине "Программирование" /Сост.: Н.С. Семенова, С.А. Сафонова – Северодонецк: Изд-во СТИ ВНУ, 2006. - 37с.


ПРИЛОЖЕНИЯ

 

Приложение А

Схема алгоритма программы


Приложение А (продолжение)

 


Приложение А (продолжение)

 


Приложение Б

 

Листинг программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

gbRazmer: TGroupBox;

lbN: TLabel;

lbM: TLabel;

edN: TEdit;

edM: TEdit;

buRazmer: TButton;

gbMatrix1: TGroupBox;

sgMatrix1: TStringGrid;

buRandom: TButton;

gbMatr2: TGroupBox;

sgMatrix2: TStringGrid;

buPerest: TButton;

gbOsob: TGroupBox;

buOsob: TButton;

lbOsob1: TLabel;

lbOsob2: TLabel;

buZapoln: TButton;

sgMatrix3: TStringGrid;

procedure FormCreate(Sender: TObject);

procedure buRazmerClick(Sender: TObject);

procedure buRandomClick(Sender: TObject);

procedure buPerestClick(Sender: TObject);

procedure buOsobClick(Sender: TObject);

procedure buZapolnClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

n,m : integer;

matr1, matr2, matr3: array [1..20, 1..20] of integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

Randomize; // включить генератор случайных чисел

end;

procedure TForm1.buRazmerClick(Sender: TObject);

var i: integer;

begin

// установить размер матрицы

n:= StrToInt(edN.Text);

m:= StrToInt(edM.Text);

// визуальное отображение

sgMatrix1.RowCount:= n+1;

sgMatrix1.ColCount:= m+1;

for i:= 1 to n do

sgMatrix1.Cells[0, i]:= IntToStr(i);

for i:= 1 to m do

sgMatrix1.Cells[i, 0]:= IntToStr(i);

sgMatrix2.RowCount:= n+1;

sgMatrix2.ColCount:= m+1;

for i:= 1 to n do

sgMatrix2.Cells[0, i]:= IntToStr(i);

for i:= 1 to m do

sgMatrix2.Cells[i, 0]:= IntToStr(i);

sgMatrix3.RowCount:= n+1;

sgMatrix3.ColCount:= m+1;

for i:= 1 to n do

sgMatrix3.Cells[0, i]:= IntToStr(i);

for i:= 1 to m do

sgMatrix3.Cells[i, 0]:= IntToStr(i);

end;

procedure TForm1.buRandomClick(Sender: TObject);

var i, j: integer;

begin

for i:= 1 to n do

for j:= 1 to m do

begin

matr1[i, j]:= random(11);

sgMatrix1.Cells[j, i]:= IntToStr(matr1[i, j]);

end;

end;

procedure TForm1.buZapolnClick(Sender: TObject);

var i, j: integer;

begin

for i:= 1 to n do

for j:= 1 to m do

begin

matr1[i, j]:= StrToInt(sgMatrix1.Cells[j, i]);

end;

end;

procedure TForm1.buPerestClick(Sender: TObject);

var i, j, k: integer;

begin

// формирование переставленной матрицы

for j:= 1 to (m div 2) do

for i:= 1 to n do

begin

matr2[i, j]:= matr1[i, m-j+1];

matr2[i, m-j+1]:= matr1[i, j];

end;

// проверка если стобцов нечетное число, то средний столбец остается без изменений

if (m mod 2)<>0 then

for i:= 1 to n do

matr2[i, m div 2+1]:= matr1[i, m div 2+1];

// отображение переставленной матрицы

for i:= 1 to n do

for j:= 1 to m do

begin

sgMatrix2.Cells[j, i]:= IntToStr(matr2[i, j]);

end;

end;

procedure TForm1.buOsobClick(Sender: TObject);

var

i, j, l, osob1, osob2, k: integer;

fLev, fPrav: boolean;

begin

// подсчет особых в 1 матрице

osob1:= 0;

for i:= 1 to n do

for j:= 2 to m-1 do

begin

k:= matr1[i, j];

// сравнение слева от текущего элемента (если он не первый)

begin

fLev:= true;

for l:= 1 to j-1 do

if matr1[i, l]>=k then fLev:= false;

end;

// сравнение справа от текущего элемента (если он не последний)

fPrav:= true;

for l:= j+1 to m do

if matr1[i, l]<=k then fPrav:= false;

if fLev and fPrav then osob1:= osob1+1;

end;

lbOsob1.Caption:= 'Число "особых" элементов в матрице1 = '+ IntToStr(osob1);

// подсчет особых вo 2 матрице

osob2:= 0;

for i:= 1 to n do

for j:= 2 to m-1 do

begin

k:= matr2[i, j];

// сравнение слева от текущего элемента (если он не первый)

begin

fLev:= true;

for l:= 1 to j-1 do

if matr2[i, l]>=k then fLev:= false;

end;

// сравнение справа от текущего элемента (если он не последний)

fPrav:= true;

for l:= j+1 to m do

if matr2[i, l]<=k then fPrav:= false;

if fLev and fPrav then osob2:= osob2+1;

end;

lbOsob2.Caption:= 'Число "особых" элементов в матрице2 = '+ IntToStr(osob2);

// формирование отсортированной матрицы

if osob1>= osob1 then

matr3:= matr1

else

matr3:= matr2;

for i:= 1 to n do

for j:= m downto 2 do

for l:= 1 to m-1 do

if matr3[i, l] < matr3[i, l+1] then

begin

k:=matr3[i, l] ;

matr3[i, l]:=matr3[i, l+1];

matr3[i, l+1]:=k;

end;

// отображение переставленной матрицы

for i:= 1 to n do

for j:= 1 to m do

begin

sgMatrix3.Cells[j, i]:= IntToStr(matr3[i, j]);

end;

end;

end.


Информация о работе «Обработка матриц»
Раздел: Информатика, программирование
Количество знаков с пробелами: 45238
Количество таблиц: 0
Количество изображений: 3

Похожие работы

Скачать
107588
68
16

... 7 0,8 Сверление, зенкерование, развертывание. 34 12 12,5 Растачивание 36,37,46 11 12,5 Сверление Данные методы реализованы при разработке технологического маршрута изготовления матрицы. Разработка технологического маршрута изготовления матрицы При разработке маршрута в среднесерийном производстве придерживались следующих правил: 1.Технологические операции разрабатывали по принципу ...

Скачать
158931
0
1

... дискретного программирование для решения задач проектирование систем обработки данных. -  Сформулированы задачи диссертационного исследования. 2. БЛОЧНО-СИММЕТРИЧНЫЕ МОДЕЛИ И МЕТОДЫ ПРОЕКТИРОВАНИЯ СИСТЕМ ОБРАБОТКИ ДАННЫХ В данном разделе рассматриваются общая постановка блочно-симметричной задачи дискретного программирования, её особенности и свойства. Разработан общий подход решения задач ...

Скачать
305550
1
104

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

Скачать
21761
0
1

... волна распространяется по матрице по мере того, как обрабатываются входные данные, и затем результаты этой обработки передаются другим процессорам в матрице. АВТОМАТИЗАЦИЯ ПРОЕКТИРОВАНИЯ ЦИФРОВЫХ СБИС НА БАЗЕ МАТРИЦ ВАЙНБЕРГЕРА И ТРАНЗИСТОРНЫХ МАТРИЦВведение. Все большую долю в общем объеме ИС составляют заказные цифровые ИС, выполненные в основном, по МОП-технологии. Сокращение сроков ...

0 комментариев


Наверх