Практикум по информатике
Скачать 7.84 Mb.
|
Глава 6 Программирование в среде Delphi §1. Разработка линейных программ В этом параграфе рассматриваются следующие вопросы: алгоритм и программа; этапы разработки программы; типы дан- ных языка Object Pascal, переменные и константы, оператор при- сваивания; некоторые процедуры преобразования, простейшие приемы создания окна в среде Delphi, структура процедуры обра- ботки события, создание и сохранение простейшего проекта, компиляция, запуск на выполнение. Теория Алгоритм и программа Алгоритм — это точная последовательность действий, преоб- разующих исходные данные в нужный результат. Алгоритм дол- жен обладать тремя свойствами: однозначностью, массовостью и результативностью. Однозначность — это единственность толко- вания правил и порядка выполнения действий. Массовость — это возможность применения алгоритма для решения класса задач, что предполагает его правильную работу при меняющихся в за- данных пределах значениях исходных данных. 285 Алгоритм решения задачи может быть представлен в виде словесного описания или графически в виде блок–схемы. В блок– схемах используются следующие специальные символы: начало/конец ввод/вывод преобразование проверка данных (обработка) условия Программа — это последовательность команд, описывающих алгоритм на языке программирования. Этапы разработки программы 1.Определение требований к программе. На этом этапе под- робно описывается исходная информация и формулируются тре- бования к результату, описывается поведение программы в осо- бых случаях. Разрабатываются диалоговые окна, обеспечиваю- щие взаимодействие пользователя и программы. 2.Разработка алгоритма. Определяется последовательность действий, которые надо выполнить для получения результата. Ре- зультатом этапа разработки алгоритма является подробное сло- весное описание алгоритма или его блок-схема. 3.Кодирование. Алгоритм записывается на выбранном языке программирования . 4. Отладка — это процесс поиска и устранения ошибок. Ошибки в программе разделяются на две группы: синтаксические (ошибки в тексте) и алгоритмические (логические). 5. Тестирование. На этом этапе проверяют, как ведет себя программа на как можно большем количестве входных наборов данных, в том числе и на заведомо неверных. Типы данных языка Delphi Мы рассмотрим здесь те типы данных, которые необходимы для обучения программированию на начальном уровне. Замечание. Так как данная глава рассчитана на специали- стов, которые в своей работе не будут непосредственно зани- маться программированием, то мы рассмотрим небольшую часть типов данных Delphi версии 6. В Delphi простые типы данных разбиты на две группы: поряд- ковые, представляющие данные разных объемов, которыми про- цессор может легко манипулировать, и действительные, пред- 286 ставляющие приближенно математические действительные чис- ла. В порядковых типах информация представляется в виде от- дельных элементов. Связь между отдельными элементами и их представлением в памяти определяет естественные отношения порядка между этими элементами. В Delphi определены три группы порядковых типов и два типа, определяемых пользовате- лем. Группы — это целые, символьные и булевы типы. Порядко- вые типы, задаваемые пользователем, — это перечисления и под- диапазоны. Все значения любого порядкового типа образуют упорядо- ченную последовательность, и значение переменной порядкового типа определяется его местом в этой последовательности. За ис- ключением переменных целых типов, значения которых могут быть как положительными, так и отрицательными, первый эле- мент любого порядкового типа имеет номер 0, второй элемент — номер 1 и т.д. Целые типы В переменных целых типов информация представляется в ви- де целых чисел, т.е. чисел, не имеющих дробной части. Таблица 1.1. Целые типы Тип Диапазон значений Физический формат Int64 -2 63 ..2 63 -1 64 ,бит, со знаком Byte 0..255 8 бит, без знака Word 0..65 535 16 бит, без знака Integer -32 768..32 767 16 бит, со знаком Символьный тип Delphi поддерживает универсальный символьный тип —char. В Delphi char соответствует типу данных AnsiChar. Булевый тип В Delphi информация о чем-либо, что можно представить как ИСТИНА (True) или ЛОЖЬ (False), хранится в переменных буле- вых типов. Всего таких типов четыре, но для Delphi предпочтите- лен тип Boolean, остальные определены для совместимости с другими языками программирования и операционными система- ми. Переменным типа Boolean можно присваивать только зна- чения True (истина) и False (ложь). 287 Перечислимые типы Перечислимый тип можно объявить следующим образом: Type enum type = (first value, value2, value3, last value); . Обычно данные перечислимых типов содержат дискретные значения, представляемые не числами, а именами. Тип Boolean — простейший перечислимый тип в Object Pascal. Булевы перемен- ные могут принимать два значения, выражаемые именами True и False, а сам тип определен в Object Pascal так, как будто он объ- явлен следующим образом: Type Boolean = (False, True); . С помощью типа Boolean в Object Pascal выполняются срав- нения, большинство же перечислимых типов — это просто спи- ски уникальных имен или идентификаторов, зарезервированных с конкретной целью. Например, можно создать тип MyColor (мой цвет) со значениями myRed, myGreen и myBlue (мой красный, мой зеленый, мой синий). Это делается совсем просто: Type MyColor = (myRed, myGreen, myBlue); . В этой строке объявлены четыре новых идентификатора: MyColor, myRed, myGreen и myBlue. Идентификатором MyColor обозначен порядковый тип, следовательно, в синтаксисе Object Pascal можно применять этот идентификатор везде, где разреше- ны перечислимые типы. Остальные три идентификатора — это значения типа MyColor. Подобно символьным и булевым типам перечислимые типы не являются числами, и использовать их на- подобие чисел не имеет смысла. Однако перечислимые типы от- носятся к порядковым, так что значения любого такого типа упо- рядочены. Идентификаторам в списке присваиваются в качестве порядковых номеров последовательные числа. Первому имени присваивается порядковый номер 0, второму — 1 и т.д. Действительные типы 288 В переменных действительных типов содержатся числа, со- стоящие из целой и дробной частей. В Delphi определено шесть действительных типов. Все типы могут представлять число 0, од- нако они различаются пороговым (минимальным положитель- ным) и максимальным значениями, которые могут представлять, а также точностью (количеством значащих цифр) и объемом. Действительные типы описываются в табл. 1. Таблица 6.1. Действительные типы Тип Диапазон значений Количество значащих цифр Объем (байт) Real 5.0E-324..1.7Е308 15-16 8 Extended 3.6E-4932 ..1.1E4932 19-20 10 Currency -922337203685477.5808.. ..922337203685477.5807 19-20 8 Строковый тип В Delphi для обозначения строкого типа допускается, при- шедшее из Pascal, название String. Тип String — это статически размещаемые в памяти компьютера строки длиной от 0 до 255 символов. Первый его элемент задает динамическую длину стро- ки, которая может принимать значения от 0 до 255 символов. Переменные и константы Переменная — это ячейка памяти компьютера, в которой на- ходятся данные. Чтобы программа могла обратиться к перемен- ной (получить данные для расчета, запомнить результат вычис- лений), переменная должна иметь имя. Имена переменных со- ставляют из последовательности букв латинского алфавита, цифр и некоторых специальных символов. Первой в имени обязательно должна быть буква. Пробел в имени переменной использовать нельзя. Прописные и строчные буквы в именах переменных ком- пилятором Object Pascal не различаются. Имена переменных же- лательно задавать так, чтобы они соответствовали логическому смыслу переменной. Например: Summa, x1, skidka. Все перемен- ные должны быть описаны в разделе описания переменных (Var). Например: Var Summa : Integer; Skidka : Real; Flag : Boolean; 289 Константы подразделяются на обычные и именованные. Обычная константа представляет собой целое или дробное число, строку символов или отдельный символ, логическое значение. Числовые константы могут выглядеть в программе так: 45 0.001 3.14 -347 0 -1.2456000000E+06 // запись в форме с плавающей точкой. Строковые и символьные константы заключаются в апостро- фы. Примеры строковых и символьных констант: ′Язык программирования Object Pascal′ ′3,14′ ′e′ Логическая константа может принимать только одно значе- ние из двух: ложь (False) и истина (True). Именованная константа описывается в разделе описания кон- стант и в программе используется уже ее имя. Например, Const Bound =10; Flag = True; Pi = 3.1415926; W = ′ WORD′; . Оператор присваивания В общем виде оператор присваивания выглядит так: <Имя переменной >:= <Выражение>; . В результате выполнения оператора присваивания перемен- ная, стоящая в левой части, получает значение выражения, стоя- щего справа (часто формула). Пример: Skidka := 12.5; Flag := False; S:=1/2*a*b; . Выражение состоит из операндов и операторов. Операндами обычно бывают переменные, константы, функции. Операторы находятся между операндами и обозначают действия: + сложение - вычитание 290 * умножение / деление DIV деление нацело MOD остаток от деления нацело Примеры выражений: A+B/C+0.1*C Summa*0.85 Cena MOD 100 Структура программы на языке Delphi Исходный текст программы состоит из последовательности строк, в которой строка может начинаться с любой позиции. Структурно программа состоит из заголовка и блока. Заголовок находится в начале программы и имеет вид: Program <Имя программы>; . Блок состоит из двух частей: описательной и исполнитель- ной. В описательной части содержится описание элементов про- граммы, в исполнительной части указываются действия с раз- личными элементами программы, позволяющие получить тре- буемый результат. В общем случае описательная часть состоит из следующих разделов: — подключения модулей; — объявления меток; — объявления констант; — описания типов данных; — объявления переменных; — описания процедур и функций. В конце каждого из перечисленных разделов указывается точка с запятой. Структуру программы в общем случае можно представить сле- дующим образом: Program <Имя программы>; Uses <Список модулей>; Label <Список меток>; Const <Список констант>; Туре <Описание типов>; Var <Объявление переменных>; <Описание процедур>; 291 <Описание функций>; Begin <операторы>; End. В структуре конкретной программы любой из разделов опи- сания и объявления может отсутствовать. Разделы описаний и объявлений, кроме раздела подключения модулей, который рас- полагается сразу после заголовка программы, могут встречаться в программе произвольное число раз и следовать в произвольном порядке. При этом все описания и объявления элементов про- граммы должны быть сделаны до того, как они будут использо- ваны. Рассмотрим отдельные разделы программы. Раздел подключения модулей состоит из зарезервированного слова Uses и списка имен подключаемых стандартных и пользо- вательских библиотечных модулей. Формат этого раздела: Uses <Имя1>, <Имя2>, ... , <ИмяN>; . Пример. Подключение модулей. Uses Crt, Dos, MyLib; Раздел объявления меток начинается зарезервированным словом Label, за которым следуют имена меток, разделенные за- пятыми. Формат этого раздела: Label <Имя1>, <Имя2>, ... , <ИмяN>; . Пример. Объявление меток. Label metkal, metka2, 10, 567; . В разделе объявления констант производится присваивание идентификаторам констант их постоянных значений. Раздел на- чинается ключевым словом const, за которым следует ряд конст- рукций, присваивающих константам значения. Эти конструкции представляют собой имя константы и выражение, значение кото- рого присваивается константе. Имя константы отделено от выра- жения знаком равенства, в конце конструкции ставится точка с запятой. Формат этого раздела: Const <Идентификатор1> = <Выражение>; <ИдентификаторN> = <Выражение>; . Пример. Объявление констант. Const stl = 'WORD'; ch = '5'; n34 = 45.8; . Тип константы распознается компилятором автоматически на ос- новании типа выражения. 292 В Delphi имеется большое количество констант, которые можно использовать без их предварительного объявления, на- пример False и True. В разделе описания типов описываются типы данных пользо- вателя. Этот раздел не является обязательным, и типы могут быть описаны неявно в разделе объявления переменных. Раздел описа- ния типов начинается ключевым словом Tуре, за которым распо- лагаются имена типов и их описания, разделенные знаком равен- ства. Каждое имя типа и его описание отделяется точкой с запя- той. Формат раздела: Туре <Имя типа1> = <Описание типа>; <Имя типаN> = <0писание типа>; . Пример. Описание типов. Type char2 = ('а' .. 'z') ; NumberArray = array[l .. 100] of real; Month = 1 .. 12; . В Delphi имеется много стандартных типов, не требующих предварительного описания, например, Real, Integer, Char или Boolean. Каждая переменная программы должна быть объявлена. Объ- явление обязательно предшествует использованию переменной. Раздел объявления переменных начинается с ключевого слова Var, после которого через запятую перечисляются имена переменных и через двоеточие их тип. Формат раздела: Var <Идентификаторы> : <Тип>; <Идентификаторы> : <Тип>; . Пример. Объявление переменных. Var a, bhg, u7: real; symbol: char; nl, n2: integer; . Подпрограммой называют логически законченную и специ- альным образом оформленную часть программы, которая по ее имени может вызываться для выполнения из других точек про- граммы неограниченное число раз. Подпрограммы в Delphi раз- деляются на два вида: процедуры и функции. Каждая подпро- грамма представляет собой блок и должна быть определена в 293 разделе описания процедур и функций. Описание процедур и функций рассматривается ниже. Раздел операторов начинается с ключевого слова Begin, по- сле которого следуют операторы языка, разделенные точкой с за- пятой. Завершает этот раздел ключевое слово End, после которо- го указывается точка. Формат раздела: Begin <Оператор1>; <0ператорN>; End. Некоторые функции преобразования типов — IntToStr (Value: integer): string — преобразование значения це- лочисленного выражения value в строку; — StrToInt (s: string): integer — преобразование строки s в целое число; — FloatToStr(Value: Extended): string — преобразование значения вещественного выражения value в строку; — StrToFloat (s: string): Extended — преобразование строки s в вещественное число. Среда программирования Delphi Главные составные части среды программирования Ниже перечислены основные составные части Delphi: — Дизайнер Форм (Form Designer); — Окно Редактора Кода (Editor Window); — Палитра Компонентов (Component Palette); — Инспектор Объектов (Object Inspector); — Дерево Объектов (Object Tree View); — Справочник (On-line help). Есть, конечно, и другие важные составляющие Delphi, вроде ли- нейки инструментов, системного меню и т.д., необходимые для точной настройки программы и среды программирования. Дизайнер Форм показан на рис. 6.1, окно Редактора - на рис. 6.2. 294 Рис. 6.1. Дизайнер Форм Дизайнер Форм первоначально состоит из одного пусто- го окна, которое заполняется всевозможными объектами, выбранными на Палитре Компонентов. Рис. 6.2. Окно Редактора Кода Палитра Компонентов (рис. 6.3) позволяет выбрать нужные объекты для размещения их на Дизайнере Форм. Для использо- вания Палитры Компонентов просто первый раз щелкните мыш- кой на одном из объектов и потом второй раз — на Дизайнере Форм. Выбранный объект появится на проектируемом окне и им можно будет манипулировать с помощью мыши. Палитра Компонентов использует постраничную группиров- ку объектов. Внизу Палитры находится набор закладок — 295 Standard, Additional, Dialogs и т.д. Если щелкнуть мышью на од- ной из закладок, то можно перейти на соответствующую страни- цу Палитры Компонентов. Рис. 6.3: Палитра Компонентов — место, где выбираются объек- ты, которые будут помещены на форму. Ниже перечислены стандартные компоненты Delphi непосредст- венно используемые при изучении темы 1 с некоторыми коммен- тариями по их применению. Курсор - не компонент, просто пиктограмма для быстрой отмены выбора какого-либо объекта. TLabel служит для отображения текста на экране. Можно изменить шрифт и цвет метки, если дважды щелкнуть на свойст- во Font в Инспекторе Объектов. TEdit - стандартный управляющий элемент Windows для ввода. Он может быть использован для отображения корот- кого фрагмента текста и позволяет пользователю вводить текст во время выполнения программы. TButton позволяет выполнить какие-либо действия при нажатии кнопки во время выполнения программы. В Delphi все делается очень просто. Поместив TButton на форму, по двойному щелчку можно вызвать заготовку обработ- чика события нажатия кнопки. Далее нужно заполнить заготовку кодом. Предположим, нужно поместить компонент TEdit на форму. Можно двигать его с места на место. Можно также использовать границу, прорисованную вокруг объекта для изменения его раз- меров. Большинством других компонентов можно манипулиро- вать тем же образом. Слева от Дизайнера Форм можно видеть Инспектор Объектов (рис. 6.4). Информация в Инспекторе Объектов меняется в зави- симости от объекта, выбранного на форме. Каждый компонент является настоящим объектом, можно менять его вид и поведе- ние с помощью Инспектора Объектов. 296 Инспектор Объектов состоит из двух страниц, каждую из ко- торых можно использовать для определения поведения данного компонента. Первая страница — это список свойств, вторая — список событий. Если нужно изменить что-нибудь, связанное с определенным компонентом, то обычно это делается в Инспекто- ре Объектов. Например, можно изменить имя и размер компо- нента TLabel, изменяя свойства Caption, Left, Top, Height и Width. Рис. 6.4. Инспектор объектов Можно использовать закладки Инспек- тора Объектов для переключения между страницами свойств и событий. Страница событий связана с Редактором; если два- жды щелкнуть мышкой на правую сто- рону какого-нибудь пункта, то соответ- ствующий данному событию код автома- тически запишется в Редактор, сам Ре- дактор немедленно получит фокус, и можно сразу добавить код обработчика данного события. Последняя важная часть среды Delphi — Справочник (on-line help). Для доступа к этому инструменту нужно просто вы- брать в системном меню пункт Help (F1). Справочник является контекстнозависимым; при нажатии клавиши F1 на экране появляется подсказка, соответствующая текущей ситуации. Например, находясь в Инспекторе Объектов, выберите какое-нибудь свойство и нажмите F1 — получите справку о назначении данного свойства. Если в любой момент работы в среде Delphi возникает неясность или затруднение, жмите F1 и необходимая информация появится на экране. Дополнительные элементы В этом разделе внимание фокусируется на двух инструмен- тах, которые можно воспринимать как вспомогательные для сре- ды программирования: — Меню (Menu System); 297 — Панель с кнопками для быстрого доступа (SpeedBar). Меню предоставляет быстрый и гибкий интерфейс к среде Delphi, потому что может управляться по набору «горячих» кла- виш. Это удобно еще и потому, что здесь используются слова или короткие фразы, более точные и понятные, нежели иконки или пиктограммы. SpeedBar (панель кнопок быстрого доступа) находится непо- средственно под меню, слева от Палитры Компонентов (рис.6.5). SpeedBar выполняет много из того, что можно сделать через ме- ню. Если задержать мышь над любой из иконок на SpeedBar, то появится подсказка, объясняющая назначение данной иконки. Рис.6.5: SpeedBar (находится слева от Палитры Компонентов) Структура проекта Создаваемое в среде Delphi приложение состоит из несколь- ких элементов, объединенных в проект. В состав проекта входят следующие элементы (в скобках указаны расширения имен фай- лов): — код проекта (DPR); — описания форм (DFM); — модули (PAS); — параметры проекта (DOF); — описание ресурсов (RES); — исполняемый файл (EXE). В зависимости от сложности проекта могут присутствовать еще другие файлы. Любой проект всегда содержит главный модуль (файл с рас- ширением .dpr). Помимо главного модуля любая программа включает в себя как минимум один модуль формы (файл с рас- ширением .pas). Сложные проекты состоят из нескольких моду- лей. Главный модуль можно увидеть, выбрав в главном меню ко- манду Project → View Source. Главный модуль программы “Бак для летнего душа”, которая будет рассмотрена ниже в этой главе, выглядит так: program Project2; uses 298 Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Текст программы начинается зарезервированным словом program и заканчивается словом end с точкой за ним. После слова uses указываются модули, которые используют- ся в программе. Модуль Forms является уже известным Delphi, а модуль Unit1 — новым, ранее неизвестным, и система поэтому указывает также имя файла с текстом модуля ( in 'Unit1.pas' ) и имя связанного с модулем файла описания формы {Form1} Тело программы начинается со слова begin (начать) и огра- ничивается end с точкой. В теле записываются операторы. Каж- дый из них обращается к одному из методов объекта Application. Объект — это специальным образом оформленный фрагмент программы, состоящий из данных и подпрограмм для их обра- ботки. Данные называются полями объекта, а подпрограммы — методами. Назначение метода Application.Initialize — выполнить подпрограмму, имя которой размещается в системной перемен- ной InitProc. Фактически этот метод ничего не делает. Метод Ap- plication.CreateForm(TForm1, Form1); создает и показывает на эк- ране окно главной формы. Метод Application.Run; получает и об- рабатывает поток поступающих от Windows сообщений о дейст- виях пользователя. Файл проекта формируется самой средой Delphi и в боль- шинстве случаев не подлежит редактированию. Сохранение проекта Для каждого проекта рекомендуется создавать отдельную папку. Для сохранения проекта из меню File нужно выбрать команду Save Project As. Если проект сохраняется первый раз, то Delphi сначала предложит сохранить содержимое окна Редактора Кода, поэтому на экране появится окно Save Unit1 As. В этом окне надо 299 выбрать папку, предназначенную для файлов проекта, ввести имя модуля. Начинающим программистам советуют оставлять имя модуля сгенерированное компьютером. После нажатия кнопки Сохранить , появляется следующее окно, в котором необходимо задать имя файла проекта. Имена файлов модуля (pas–файл) и проекта (dpr – файл) должны быть разными. Начинающим сове- туют оставить данное системой имя проекта — обычно Project1. Часто для избежания путаницы программисты пользуются командой Save All из меню File или кнопкой быстрого доступа Особенно это важно при сохранении проектов, состоящих из не- скольких форм и модулей. Переписать проект в другое место или под другим именем можно с помощью двух команд — Save Project As (сохранить как) и Save As (сохранить как). Структура модуля Начинается модуль со служебного слова Unit Модуль состоит из трех разделов: интерфейса, реализации и инициализации. В разделе интерфейса (начинается словом interface) компиля- тору сообщается, какая часть является доступной для других мо- дулей программы. В этом разделе подключаются библиотечные модули (после Uses) , используемые данным модулем. В нем на- ходится сформированное Delphi описание формы, которое следу- ет за словом type. Раздел реализации открывается словом implementation и со- держит объявления локальных переменных, процедур и функций, поддерживающих работу формы. Начинается раздел реализации директивой {$R *.dfm}, указывающей компилятору, что в про- цессе генерации выполняемого файла надо использовать описа- ние формы. Описание формы находится в файле dfm, имя которо- го совпадает с именем модуля. Файл описания формы генериру- ется средой Delphi на основе внешнего вида формы. За директивой {$R *.dfm} следуют процедуры обработки со- бытий для формы и ее компонентов. Сюда же программист мо- жет помещать другие процедуры и функции. Третий раздел начинающими программистами обычно не ис- пользуется. 300 Компиляция и выполнение проекта В процессе компиляции проекта создается готовый к исполь- зованию файл, которым может быть приложение (ЕХЕ). Запуск процесса компиляции выполняется по команде Project | Compile (Проект | Компилировать <проект>) или нажатием комбинации клавиш «Ctrl+F9». В этой команде содержится имя проекта, разработка которого выполняется в настоящий момент, первоначально это Projectl. При сохранении проекта под другим именем соответственно должно измениться имя проекта в команде меню. Выполнение проекта из среды Delphiосуществляется коман- дой Run (Выполнить) или нажатием клавиши «F9». При этом — созданное приложение начинает свою работу. Часто используют быструю кнопку на панели кнопок быстрого доступа (на ней изо- бражена зеленая стрелка). Если в файлы проекта вносились изме- нения, то предварительно выполняется компиляция проекта. Практика Задача Разработать проект для вычисления объема бака для душа на даче с заданными сторонами: a, b, c (в метрах) и определения ко- личества материала, которое пойдет на изготовление такого бака. Метод решения: V=abc — объем бака; S=2(ab+bc+ca) — площадь поверхности бака (количество ма- териала в квадратных метрах). Компоненты: Имя компонента Свойства компонента Значение Назначение Form1 Caption БАК для летнего душа Заголовок формы Label1 Caption Программа рассчитывает объем бака для душа и оп- ределяет количество мате- риала, которое пойдет на его изготовление Справочная ин- формация для пользователя программы Label2 Caption Сторона А (м) Подсказка поль- зователю Label3 Caption Сторона В (м) Подсказка поль- зователю Label4 Caption Сторона С (м) Подсказка поль- зователю Label5 Caption Поле для вывода 301 объема Label6 Caption Поле для вывода количества мате- риала Edit1 Text ….. Поле для ввода стороны А Edit2 Text ….. Поле для ввода стороны В Edit3 Text ….. Поле для ввода стороны С Button1 Caption ВВОД ДАННЫХ Кнопка для ввода данных Button2 Caption ОБЪЕМ БАКА Кнопка для вы- числения объема бака Button3 Caption НЕОБХОДИМОЕ КОЛИЧЕСТВО МАТЕРИАЛА Кнопка для вы- числения необхо- димого количест- ва материала Button4 Caption ВЫХОД Кнопка закрытия формы и выхода из программы Button5 Caption НОВЫЕ ДАННЫЕ Кнопка для очист- ки полей ввода для новых данных Переменные Обозначение в про- грамме Содержание Тип a сторона А Вещественный b сторона В Вещественный c сторона С Вещественный V объем бака Вещественный S Площадь поверхности — количество материала Вещественный 302 Проект формы Замечание В текстах модулей во всем учебном пособии описания и опе- раторы, генерируемые самой системой, выделены курсивом. В следующих темах в задачах приведены не все инструкции, генерируемые системой. Бездумное удаление инструкций, гене- рируемых самой системой, приводит к возникновению ошибок в проекте. Текст модуля unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Label5: TLabel; 303 Label6: TLabel; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; a,b,c,V,S: real; {a, b, c — стороны бака; V — объем бака; S — площадь поверхности} implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin // ввод из полей формы значений сторон бака a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); c:=StrToFloat(Edit3.Text); end; procedure TForm2.Button1Click(Sender: TObject); begin // вычисление объема V:=a*b*c; // вывод значения объема на форму Label5.Caption:=FloatToStrF(V,Fffixed,8,2)+' куб. м' end; procedure TForm1.Button3Click(Sender: TObject); begin // вычисление площади поверхности бака S:=2*(a*b+b*c+c*a); // вывод значения поверхности бака на форму Label6.Caption:=FloatToStrF(S,Fffixed,9,2)+'кв. мì' end; procedure TForm1.Button4Click(Sender: TObject); begin // закрытие формы 304 Form1.Close end; procedure TForm1.Button5Click(Sender: TObject); begin // очистка полей формы для ввода новых данных Edit1.Clear; Edit2.Clear; Edit3.Clear; Label5.Caption:=' '; Label6.Caption:=' '; end; end. Результаты работы программы Задачи для самостоятельного решения Группа А № 1.1. Дан радиус сферы (R) в метрах. Составить программу для вычисления площади полной поверхности 2 4 R S π = и объема 3 / 4 3 R V π = № 1.2. Известны значения хорды шарового сектора (a в см), ра- диуса шара (R в см) и стрелы шарового сектора (h в см). Cоставить программу для вычисления площади полной поверх- ности шарового сектора ) 2 ( a h R S + = π 305 и объема шарового сектора 3 / 2 2 h R V π = № 1.3. Дан круговой, прямой цилиндр. Известен радиус цилиндра R (м). Составить программу для вычисления площади боковой поверхности , 2 Rh M π = площади полной поверхности ), ( 2 h R R S + = π и объема 2 h R V π = № 1.4. Дан усеченный круговой цилиндр. Известны: радиус осно- вания цилиндра — R (м); h 1 и h 2 — высоты усеченного цилиндра (м). Написать программу для вычисления площади боковой по- верхности ), ( 2 1 h h R M + = π площади полной поверхности ] 2 [ 2 1 2 2 2 1 ) ( h h R R h h R S − + + + + = π , и объема 2 2 1 h h R V + = π № 1.5. Известны: r и R — внутренний и внешний радиусы круго- вого кольца в метрах; центральный угол ϕ (в градусах) части кольца. Составить программу для вычисления площади кругово- го кольца (S 1 ) и площади части кольца (S 2 ) с заданным централь- ным углом по формулам ) ( 2 2 1 r R S − = π , ) ( 360 2 2 2 r R S − = ϕπ № 1.6. Составить программу для вычисления объема трехгранной усеченной пирамиды. Если известны стороны оснований пира- миды a 1 , b 1 , c 1 a 2 , b 2 , c 2 , высота пирамиды h, объем вычисляется по формуле , 3 / ] [ Ff f F h V + + = где F — площадь нижнего основания; f — площадь верхнего основания. Площади оснований рассчитать по формуле Герона. 306 № 1.7. Написать программу для вычисления расстояния S между двумя населенными пунктами, если автомобиль со скоростью V км/час проезжает его за T часов. Расстояние S между населенными пунктами равно S = V*T. Предусмотреть запросы при вводе исходных данных: Скорость автомобиля км/час: Время проезда в часах: Форма вывода результата: Расстояние между населенными пунктами равно <значение S> км. № 1.8. Составить программу для вычисления силы тока I = q/t, где q — величина электрического заряда (измеряется в кулонах); t — время прохождения заряда через поперечное сечение про- водника (в секундах). № 1.9. Написать программу для определения объема усеченного конуса высотой H м и параллельными основаниями с радиусами R 1 м и R 2 м. В программе предусмотреть округление объема до 0,001 м 3 . Формула для вычисления объема , где ), ( 3 / 2 2 2 2 1 1 2 2 1 1 R R S S S S S S H V π π = = + + = Форма выдачи результата: ОБЪЕМ КОНУСА= значение V КУБ.М. № 1.10. Дан обелиск. Нижнее и верхнее основание являются пря- моугольниками, расположенными в параллельных плоскостях; противоположные боковые грани одинаково наклонены к осно- ванию, но не пересекаются в одной точке. Даны a, b и a1, b1 — стороны оснований, h — высота. Найти объем обелиска по фор- муле V=h[ab+(a+a 1 )(b+b 1 )+a 1 b 1 ]/6. Форма выдачи результата: ОБЪЕМ ОБЕЛИСКА= значение V КУБ.М. Группа Б № 1.11.Составить программу для исследования величины по- правки ( ΔS) за редуцирование расстояния (S в м) при переходе с эллипсоида на плоскость в проекции Гаусса. Для этого рассчи- тать поправку: 307 для случаев : 1) линия располагается на осевом меридиане (y = 0 км); 2) линия находится на краю шестиградусной зоны (y ≈330км). R — радиус Земли. R ≈6371,1 км. y — ордината середины редуцируемого отрезка в км. Поправку вычислить в метрах с точностью до 0,1 м. № 1.12. Составить программу для вычисленияпоправки ΔP в площадь за переход с поверхности шара на плоскость в проекции Гаусса: P — площадь участка на поверхности шара (га). R — радиус Земли. R ≈6371,1 км. y — ордината середины редуцируемой площади (0–300 км). Поправку округлить до 0,01 га. № 1.13. Составить программу для расчета цены деления уровня по формуле: где l 1 –l 2 — разность отсчетов по рейке в мм; n — число делений, на которое сместился пузырек уровня; d — расстояние от нивелира до рейки в м. Перевод мм в м в рабочей формуле учтен константой 206''. Результат вывести с точностью до 0,01 секунды. № 1.14. Дана арифметическая прогрессия 1-го порядка. Извест- ны: первый член a 1 арифметической прогрессии, d — разность арифметической прогрессии. Составить программу для вычисле- ния суммы S n n-членов арифметической прогрессии: 2 / ) 1 ( 1 nd n na S n − + = № 1.15. Дана геометрическая прогрессия. Известны первый член геометрической прогрессии b 1, q (q ≠1) — знаменатель геометри- 2 2 2R y S S = Δ 2 2 R y P P = Δ , 6 20 ) ( 2 1 nd l l ′′ − = ′′ τ 308 ческой прогрессии. Составить программу для вычисления суммы геометрической прогрессии: № 1.16. Написать программу для вычисления поправки за кри- визну Земли в длину измеренной линии где S — длина линии в метрах, R — радиус Земли. R ≈6371,1 км. Поправку вычислить в см и округлить до 0,1 см. Перевод в единые единицы измерения предусмотреть в формуле самостоятельно. № 1.17. Если известны координаты двух точек X 1 Y 1 и X 2 Y 2 (рис. 7–1), то координаты X, Y точки, делящей отрезок 1–2 в отноше- нии n m , можно определить по формулам n m mY nY Y n m mX nX X + + = + + = 2 1 2 1 , X 2 Y 2 n m X Y X 1 Y 1 Рис. 6.6 Написать программу для определения X, Y. Значения X 1 , Y 1 , X 2 ,Y 2 вводить в метрах. Координаты X, Y выводить в метрах с точностью до 0,1м. Форма выдачи результата: КООРДИНАТЫ ДЕЛЯЩЕЙ ТОЧКИ: X = значение X, Y = значение Y. № 1.18. Написать программу для вычисления поправки превыше- ния за кривизну Земли и рефракцию: , 2 2 R S k = 1 1 1 − − = q q a S n n 309 f— поправка измеряется в метрах. Рефракция — преломле- ние светового луча в атмосфере (поправку вычисляют для рас- стояний более 300 м); R — радиус Земли (R ≈6371,1 км); S i — длина линии в метрах между точками, где измеряется превышение. Поправку округлять до 0,01 м. Форма вывода результата: ПОПРАВКА= значение (м). № 1.19. Написать программу для расчета общих годовых издер- жек на 1 га угодий в зависимости от площади территории P и пространственного расположения земель и хозяйственного цен- тра: где K1 — коэффициент, характеризующий конфигурацию земельной площади и положение хозяйственного центра; K2 — коэффициент, показывающий, во сколько раз путь по дорогам к данному участку длиннее, чем путь по прямой. Значение Z округлить до 0,01. Форма вывода результата: ГОДОВЫЕ ИЗДЕРЖКИ= значение Z руб./га. № 1.20. Составить программу для вычисления площади сегмента S 1 и площади сектора S 2 , если известны r — радиус круга, α — центральный угол (в градусах) по формулам: Форма вывода результатов: ПЛОЩАДЬ СЕГМЕНТА КРУГА = значение S 1 ПЛОЩАДЬ СЕКТОРА КРУГА = значение S 2 Радиус круга задан в м. Площади определить с точностью до 0,1 м 2 , 42 , 0 2 R S f i = , 4 , 67 48 , 1 2260 2 1 + + = P K K P Z 360 / ; 2 / ] sin ) 180 / [ 2 2 2 1 α π α πα r S r S = − = |