СОДЕРЖАНИЕ
ВВЕДЕНИЕ 1.Постановка задачи 2. Разработка алгоритма 3. Разработка программы и пользовательского интерфейса
4.Отладка программы
ВЫВОДЫ
ПЕРЕЧЕНЬ ССЫЛОК
ПРИЛОЖЕНИЯ
ВВЕДЕНИЕ
Тема курсовой работы «Обработкаматриц».
Цель работы — научиться анализировать задание иопределить перечень вопросов, которые будут решаться в данной работе, создаватьсписок функциональных требований к программе, то есть определение того, что,собственно, будет выполнять разрабатываемая программа, не рассматриваяконкретную реализацию этих функций, в задачах лексического и синтаксическогоанализа, уметь определять возможные ошибки в записи операторов, описыватьинтерфейс программы и те функции, которые она будет выполнять.
О стремительном темперазвития информационных технологий мы с вами читаем и слышим почти каждый день.Эти темпы действительно впечатляют. Однако в компьютерном мире остается однасамая важная область, изменения в которой происходят крайне медленно.Программирование, кодирование, составление исходных текстов — ключевой элементв создании любого приложения сегодня происходит так же, как и сорок лет назад.Разработчик применяет крайне ограниченный набор логических конструкций(условный оператор и операторы присваивания и цикла) и небольшое числостандартных типов данных. Причем такой подход ничуть не изменился, хотясменилось уже не одно поколение языков программирования. Например, на смену Сии Паскалю пришла Java.
Delphi– это среда разработки программ,ориентированных на работу в операционных системах семейства Windows. Программы в Delphi создаются на основе современнойтехнологии визуального проектирования. С помощью Delphi можно создать удобный интерфейс программы, в которыймогут входить различные меню, окна для ввода и вывода текстовой информации ит.п. Такие оконные приложения – основной вид приложений, используемых воперационных системах семейства Windows.
Delphi только упрощает процесс созданияинтерфейса, но не заменяет собой собственно программирования. Программы в Delphi пишутся на языке Object Pascal, который является преемником и развитием языка Turbo Pascal.
1.Постановказадачи
Дана целочисленная матрица порядка т х п. Найтиматрицу, получающуюся из данной перестановкой столбцов — 1-го с последним. 2-гос предпоследним и т.д. В каждой матрице определить количество«особых» элементов, считая элемент «особым», если в егостроке слева от него находятся элементы меньшие, а справа — большие. В матрицес наибольшим числом «особых» элементов упорядочить элементы строк поубыванию.
Для ввода ивывода данных использовать компоненты Delphi.
На первом этапе выполнения курсовой работы необходимопроанализировать задание и определить перечень вопросов, которые будут решатьсяв данной работе. Основное назначение этого этапа – создание спискафункциональных требований к программе, то есть определение того, что,собственно, будет выполнять разрабатываемая программа, не рассматриваяконкретную реализацию этих функций. Для программы постановка задачи являетсясамым высшим уровнем абстракции, или самым общим представлением требований кней.
Разбираем суть задания и на этой основе разрабатываемалгоритм программы, определяя в каждой матрице количество «особых» иупорядочиваем элементы строк по убыванию и лишь после этого находим матрицу,получающуюся перестановкой столбцов, согласно заданию.
При разработке программ обработки типизированныхфайлов большее внимание следует уделить описанию интерфейса программы и темфункциям, которые она будет выполнять.
В любом случае следует помнить, что постановка задачи– это первый и ответственный этап разработки, после которого составляетсяалгоритм программы.
2. Разработка алгоритма
Перед тем как начатьсоставлять программу, надо предварительно придумать и продумать (лучше всего,записать на бумаге) алгоритм ее работы, представляющий собой строгое,формальное, не допускающее неоднозначностей и двусмысленностей описаниепроцесса решения задачи. После того как алгоритм готов, на его основе исоставляется (кодируется) программа.
Процесс созданияалгоритма — самый важный. Если здесь допущены ошибки, то устранить их на этапекодирования весьма трудно.
Алгоритм работы программызаключается в следующем:
1) Ввод размерностиматрицы №1 и значений её элементов
2) Формируем матрицу№2 из матрицы №1 перестановкой столбцов — 1-го с последним. 2-го спредпоследним и т.д. Для этого организуем цикл по количеству столбцов 2.Внутренний цикл по количеству строк выполняет занесение элемента во вторуюматрицу
3) В каждой матрицеопределяем количество «особых» элементов, считая элемент«особым», если в его строке слева от него находятся элементы меньшие,а справа — большие. Для этого организовываем два вложенных цикла (по строкам истолбцам матрицы) и третий вложенный цикл по столбцам и проверяем на выполнениеусловий «особого элемента».
4) Сравниваемколичество особых элементов в обоих матрицах. И производим упорядочиваниеэлементов строк по убыванию в той матрице, в которой число особых больше.
Схема алгоритма программыпредставлена в Приложении А.
3.Разработка программы и пользовательского интерфейса
Компьютерная программа —это набор элементарных команд процессора, представленных в файле в видепоследовательности байтов (машинный код). Каждая команда может бытьзакодирована одним или несколькими байтами. Программы в таком виде можносоставлять вручную, но подобная работа человеку просто не под силу из-занеудобства управления процессором напрямую с помощью простых команд. Поэтому программапишется на одном из языков программирования, как обычный текст. Этот текстназывается исходным текстом (или исходным кодом) программы. Команды языка программированияпонятны и наглядны.
Полужирным шрифтомвыделены названия команд. Основные, наиболее часто используемые команды языкапрограммирования называются операторами и обычно записываются с помощьюспециально пред назначенных для этого символов или ключевых слов. Например,занесение результата вычисления выражения в некоторую ячейку памяти компьютераобычно производится с помощью оператора присваивания соответствующего значения.Действия, выполняемые над имеющимися в программе значениями, называются операциями.Они отображаются в тексте с помощью специальных символов. Комбинации данных иопераций над ними называются выражениями.
Исходный текст программыавтоматически переводится в набор инструкций процессора с помощью специальнойпрограммы, называемой компилятором. В среде Delphi 7 для этого достаточновыполнить всего одну команду или нажать одну клавишу. Процесс компиляции —перевода (трансляции) исходного текста в конкретные команды процессоравыполняется очень быстро. За секунду программа-компилятор анализирует и транслируеттысячи строк исходного кода. Среда Delphi 7 представляет собой интегрированнуюоболочку разработчика, в которую входит набор специализированных программ,ответственных за разные этапы создания готового приложения (рис. 1).
Исходный текст программыготовится в среде Delphi 7 с помощью встроенного редактора исходных текстов.Этот редактор специализирован. Он отличается гибкими возможностями цветовоговыделения различных элементов текста программы (ключевых слов, названий,операций, чисел и строк) и предоставляет возможность быстрого ввода частовстречающихся конструкций.
Левая панель редакторапредставляет собой Проводник, позволяющий быстро перемещаться между частямиисходного текста и по структуре создаваемой программы. Важнейшая характеристикаразрабатываемой программы — удобство ее пользовательского интерфейса, наличие идоступность необходимых элементов управления. В системе Delphi 7имеетсяспециальный проектировщик форм, с помощью которого окна будущей программыподготавливаются в виде форм. Проектировщик позволяет подобрать оптимальныеразмеры окон, разместить и настроить всевозможные элементы управления и меню,добавить готовые изображения, указать заголовки, подсказки, подписи и такдалее.
На этапе проектированияформ программа как бы составляется из готовых компонентов — частей машинногокода, которые можно добавлять к ней с помощью всего нескольких щелчков мыши.Компоненты располагаются на палитре компонентов, разделенной на несколькосамостоятельных панелей (рис. 2).
Компоненты обладают наборамисвойств, характеризующими их отличительные особенности. Некоторые свойстваимеются практически у всех компонентов — таково, например, свойство Name (Имя).Другие свойства, например Caption (Заголовок), имеются у большинствакомпонентов — ведь заголовок необходим и для окна, и для кнопки. Некоторые свойствауникальны для конкретных компонентов, например свойство SimpLeText (Простойтекст), содержащее текст для компонента Строка состояния.
Свойства компонентов впроцессе проектирования формы настраиваются с помощью Инспектора объектов. Этоспециальная программа, показывающая список всех свойств данного компонента,отсортированных по категориям или в алфавитном порядке.
Значение любого свойстваможно изменить, введя в соответствующее поле Инспектора объектов новую строкуили выбрав нужное значение в раскрывающемся списке доступных значений.Некоторые свойства содержат вложенные подсвойства например, свойство Font(Шрифт) характеризуется размером, стилем, цветом, гарнитурой. Такие свойстваудобнее редактировать с помощью специальных редакторов, как стандартных(шрифт), так и специально разработанных для конкретного компонента.
Помимо свойств,компоненты содержат.методы — программный код, обрабатывающий значения свойств(например, устанавливающий переключатель в нужное положение), а также события —сообщения, которые компонент принимает от приложения, если во время работыпрограммы выполняется определенное действие (например, изменяется состояниефлажка). Программист может самостоятельно формировать реакции программы налюбые события каждого компонента. Правильно подбирая компоненты и настраивая ихсовместную работу путем использования свойств, предназначенных для связикомпонентов друг с другом, нередко удается создать приложение, не написав вручнуюни строчки исходного текста.
В системе Delphi 7существуют сотни готовых компонентов, и при решении многих задач бывает полезнопредварительно поискать нужный компонент (например, в Интернете), вместо тогочтобы выполнять работ; по программированию, возможно, уже сделаную другимилюдьми. Компонентный подход к созданию программ позволяет повторно использоватьготовые разработки и во многих случаях значительно повышает эффективностьтруда.
С помощью системы Delphi7 можно создавать не только обычные программы (ЕХЕ-файлы), но и динамическиподключаемые библиотеки DLL [своеобразные хранилища кода и ресурсов), новые элементыуправления, а также компоненты, отвечающие требованиям различных стандартов нокомпонентные технологии (COM, ActiveX, CORBA и так далее).
Потребность в ручномпрограммировании возникает, только когда обойтись готовыми компонентами неудается.
ПаскальиDelphi (Object Pascal).
В системе Delphi 7используется специализированная, постоянно совершенствуемая версия языкапрограммирования Паскаль, которая называется Delphi (в шестой и более раннихвариантах системы Delphi она называлась Object Pascal, «Объектный Паскаль»).Эта версия включает набор расширений, ориентированных только на применение врамках среды Delphi 7 и предназначенных для ускоренного создания приложений.
В комплект системы Delphi7 входит компилятор командной строки dcc32.exe для этого языка. Кроме того,выполнять компиляцию можно непосредственно из интегрированной оболочки.
Запись программы
Программа на Паскалезаписывается с помощью набора символов, включающего латинские буквы (регистр неимеет значения), цифры, символ подчеркивания и стандартные знаки препинания.Элементы программы отделяются друг от друга с помощью произвольного числапробелов и пустых строк.
Некоторые элементы языказаписываются путем комбинации двух специальных символов, например:
..
//
:
=
Программа содержитключевые (или зарезервированные) слова, как стандартные, так и пользовательские(включаемые в программу разработчиком), а также идентификаторы и выражения.
В качестве идентификатораможет выступать любая последовательность из букв, цифр и символа подчеркивания,начинающаяся не с цифры. Например:
Unitl
Integer
х
for
There_are_Dates
Go478
Модули. Программа на Паскале состоит изнабора модулей (Unit), в каждом из которых содержится описание логическинезависимой части программы (например, описание работы конкретного окна илиописание алгоритма вычисления сложной математической функции). Расширение именифайлов, содержащих модули — .PAS. Модули программы часто создаются системойDelphi 7 автоматически, например при добавлении новой формы. При этомпроисходит автоматическая генерация исходного текста соответствующего модуля,что избавляет программиста от рутинной работы.
Вносить изменения висходный код программы, созданный автоматически, в большинстве случаев неразрешается. Это может при вести к возникновению серьезных ошибок на этапекомпиляции.
Модули могут иметь связьдруг с другом, то есть из одного модуля разрешается обращаться к функциямдругих модулей. Применение модулей во время разработки программы напоминаетприменение компонентов во время проектирования экранных форм в том плане, чтопозволяет повторно использовать программный код, созданный ранее.
В реальности исходныетексты компонентов Delphi 7 представляют собой обычные модули Паскаля,содержащие описание логики работы и способа отображения на экранесоответствующих компонентов,
Главный файл
В программе может бытьлюбое количество модулей (несколько сот или вообще ни одного), но только одинглавный файл проекта. Этсп файл чаше всего невелик и содержит обращения кмодулям. Он имеет расширение .DPR и создается средой Delphi 7 автоматически.Начинается этот файл с ключевого слова program (программа), за которым следуетназвание программы и точка с запятой.
program DemoProgram,-
Для вычисления значенийпо формулам в Паскале применяются выражения, состоящие из операндов (данных,констант и переменных), связанных между собой арифметическими операциями.Каждая арифметическая операция имеет два операнда, расположенных слева и справаот знака операции.
Программа на Паскалеможет снабжаться комментариями разработчика к своему исходному тексту.Желательно всегда сопровождать тексты своих программ комментариями, даже еслиалгоритм кодируется с помощью довольно простых операторов. Обычно трудно сразупонять, что делает участок программы из нескольких десятков операторов,особенно если реализуемая ими логика достаточно сложна.
Комментарии в Паскалебывают двух типов: многострочные и однострочные.
С помощью системы Delphi7 можно создавать приложения 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, в точностисоответствующих своему внешнему виду в работающей про-грамме. Это означает, чтохотя он виден на форме как небольшой квадрат, в окне созданной программы втаком виде компонент не появится. Представление его на форме в миниатюрном видепросто указывает на наличие в программе объекта, ответственного за меню. Асоздается меню с помощью специального редактора. Некоторые компоненты называютсяневизуальными потому, что, во-первых, ряд элементов управления невозможно разместитьна форме без специальной подготовительной работы, а во-вторых, в системе Delphi7 имеется ряд компонентов, которые не предназначены для отображения на экране,хотя их свойства можно настраивать с помощью Инспектора объектов. Подобныекомпоненты используются, например, для обращения к базам данных, для установкисвязи с Интернетом и прочего.
Редактор меню вызываетсядвойным щелчком на объекте 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 toN do
Arrfi ] := 0;
Он неверен, потому что вконце цикла произойдет обращение к одиннадцатому элементу массива, что приведетк выходу за границу массива и возникновению ошибки. Подобные вещи компиляторотследить и обнаружить не в силах, и процесс поиска и устранения ошибок такогорода, называемый отладкой, полностью возлагается на программиста.
Синтаксические ошибки
Синтаксические ошибкиобнаруживаются компилятором автоматически. Сообщения о найденных ошибкахотображаются в нижней части редактора, в небольшом окне:
При двойном щелчке настроке с сообщением об ошибке система Delphi 7 переключится в редактор, гдеподсветит строку, в которой эта ошибка обнаружена. Само сообщение (наанглийском языке) описывает ошибку достаточно подробно, чтобы можно было понятьее причину.
Например:Undeclaredidentifier: '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;
procedureFormCreate(Sender: TObject);
procedurebuRazmerClick(Sender: TObject);
procedurebuRandomClick(Sender: TObject);
procedure buPerestClick(Sender:TObject);
procedurebuOsobClick(Sender: TObject);
procedurebuZapolnClick(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}
procedureTForm1.FormCreate(Sender: TObject);
begin
Randomize; // включить генераторслучайных чисел
end;
procedureTForm1.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;
procedureTForm1.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;
procedureTForm1.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;
procedureTForm1.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;
procedureTForm1.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 thenfLev:= false;
end;
// сравнение справа от текущегоэлемента (если он не последний)
fPrav:= true;
for l:= j+1 to m do
if matr1[i, l]
if fLev and fPrav thenosob1:= 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 thenfLev:= false;
end;
// сравнение справа от текущегоэлемента (если он не последний)
fPrav:= true;
for l:= j+1 to m do
if matr2[i, l]
if fLev and fPrav thenosob2:= 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]
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.