Главная страница
Навигация по странице:

  • Теория Некоторые стандартные библиотечные функции

  • FloatToStrF(n,f,l,m)

  • Некоторые функции и процедуры даты

  • TDateTime

  • Константа Тип сообщения

  • Константа Кнопка Константа Кнопка

  • Замечание Переменная r должна быть описана типом Word. Практика Задача

  • Замечание 325

  • точки по координатам исходной точки, горизонтальному проложению + и дирекционному углу.+13 +Дирекционный угол задается в градусах, минутах и секундах. Коор-ты в

  • Практикум по информатике


    Скачать 7.84 Mb.
    НазваниеПрактикум по информатике
    АнкорPraktikum_2008.pdf
    Дата21.09.2017
    Размер7.84 Mb.
    Формат файлаpdf
    Имя файлаPraktikum_2008.pdf
    ТипКнига
    #8906
    страница15 из 21
    1   ...   11   12   13   14   15   16   17   18   ...   21
    §2. Стандартные и библиотечные функции
    в линейных программах
    В данном параграфе рассматриваются следующие вопросы:
    некоторыестандартные библиотечные функции (их библиотеки подключены автоматически), библиотечные функции (некоторые математические функции), функции даты, использование окна ввода, процедура и функции вывода окон сообщений пользовате- лю.
    Теория
    Некоторые стандартные библиотечные функции
    Таблица 6.2
    Стандартные математические функции
    Функция
    Возвращаемое значение
    Abs(x)
    Абсолютная величина х
    АгсТаn(х)
    Арктангенс х (результат в радианах)
    Dec(n)
    Аналогична оператору n:=n-1
    Cos(х)
    Косинус х (х выражается в радианах, а не в граду- сах)
    Ехр(х)
    Экспоненциальная функция от х (e x
    )
    Inc(n)
    Аналогична оператору n:=n+1
    Frac(x)
    Дробная часть х
    Int(х)
    Целая часть х. Несмотря на название, возвращает действительное значение (с плавающей запятой), т.е. просто устанавливает нуль в дробной части
    Ln(х)
    Натуральный логарифм от х pi
    Константа
    π
    Round(х)
    Ближайшее к х целое значение. Возвращает значе- ние целого типа. Условие "ближайшее к х" не рабо- тает, если верхнее и нижнее значения оказываются равноудаленными (например, если дробная часть точно равна 0,5). В этих случаях Delphi переклады- вает решение на операционную систему. Обычно процессоры Intel решают эту задачу в соответствии с рекомендацией IEEE округлять в сторону ближайше- го четного целого числа. Иногда такой подход на- зывают "банкирским округлением"
    Sin(x)
    Синус х (х выражается в радианах)
    Sqr(x)
    Квадрат х, т.е. X*X
    Sqrt(х)
    Квадратный корень от х
    Тrunc(х)
    Целая часть х. В отличие от Int, возвращающей дей-

    311
    ствительное значение, Trunc возвращает целое
    Замечание.
    В библиотеках Delphi, которые автоматически подключаются к модулю присоздании формы, нет арифметиче- ского действия «возведение в степень». Поэтому для возведения числа a в степень x можно воспользоваться следующими функ- циями
    x
    a
    соответствует exp(x*ln(a)).
    См. также раздел «Некоторые математические функции».
    Таблица 6.3.
    Функции преобразования
    Функция
    Значение
    Chr(n)
    Символ с номером n.
    IntToStr(n)
    Строка, являющаяся изображением значения целого n.
    FloatToStr(n)
    Строка, являющаяся изображением значения веще- ственного n. Различие между функциями описано ниже.
    FloatToStrF(n,f,l,m)
    Строка, являющаяся изображением значения веще- ственного n с форматом. Различие между функция- ми описано ниже.
    StrToInt(s)
    Целое, изображением является строка s.
    StrToFloat(s)
    Вещественное, изображаемое строкой s.
    DateToStr (Date)
    Преобразование Значения даты в выражении Date в строку
    TimeTostr(Time)
    Преобразование значения времени в выражении
    Time в строку
    StrToDate(S)
    Преобразование СтрокиS в дату
    StrToTime(S)
    Преобразование строкиS во время
    Pred(n)
    Возвращает предыдущее значение n
    Функция FloatToStrF(n,f,l,m) обеспечивает возможность форматного вывода вещественных чисел. Её аргументы имеют следующий смысл:
    n
    — преобразуемое значение;
    f
    — формат (способ изображения);
    l —
    точность (общее количество цифр);
    m
    — количество цифр после десятичной точки.
    Поле «формат» может принимать следующие значения
    ffGeneral
    — общий числовой формат. Значение преобразо- вывается в изображение десятичного числа либо с фиксирован- ной точкой, либо записанного в научном формате. Лишние нули удаляются из результирующей строки, и в случае необходимости

    312
    вставляется десятичная точка. Запись числа с фиксированной точкой используется, если количество цифр в числе не превыша- ет общее количество цифр, заданное пользователем, а само число не меньше 0.00001. В противном случае используется научный формат.
    ffExponent
    — научный формат. Число преобразовывается в строку вида "-d.ddd...E+dddd". Если число отрицательное, строка начинается знаком минус. Количество цифр в показателе экспо- ненты от 0 до 4.
    ffFixed
    — формат с фиксированной точкой. Число преобразу- ется в строку вида: "-ddd.ddd...". Если число отрицательное, строка начинается знаком минус. Количество цифр после деся- тичной точки не более 18. Если количество цифр превышает ве- личину, указанную пользователем, изображение числа преобра- зуется в научный формат.
    ffNumber
    — числовой формат. Возвращает строку в виде
    "-d,ddd,ddd.ddd..."
    . Он отличается от формата с фиксированной точкой только разделителями групп разрядов.
    ffCurrency
    — денежный формат. Преобразует результат и представляет его в виде суммы денег.
    Некоторые строковые функции
    Таблица 6.4.
    Функция
    Описание
    Concat(sl, s2, s3)
    Возвращает последовательное соединение строк.
    Эквивалентна оператору sl+s2+s3
    Copy(s, pos, len)
    Возвращает подстроку длиной максимум len симво- лов, начинающуюся в позиции pos строки s
    Delete(s, pos, len)
    Удаляет максимум len символов из строки s, начиная с позиции pos
    Insert(sourse, target, pos)
    Вставляет строку source в строковую переменную target, начиная с позиции pos
    Length(s)
    Возвращает динамическую длину строки.
    Pos(substring, s)
    Возвращает место первого вхождения подстроки substring в строку s.
    Str(x, s)
    Преобразует численное значение х в строковую пе- ременную s
    Val(s, v, code)
    Преобразует строку s в соответствующее численное представление v. Если преобразование успешно code=0.

    313
    Некоторые библиотечные математические функции
    Библиотечные математические функции находятся в библио- теке Math. Библиотеку Math нужно обязательно подключить в разделе Uses:
    Uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms,
    Dialogs, StdCtrls, Math;
    Таблица 6.5.
    Функция
    Возвращаемое значение
    АгсТаn2(y/x)
    Арктангенс y/x (результат в радианах). Возвращает значение угла в несущем квадранте от -
    π до π. Зна- чение x не может быть нулем
    ArcCos(x)
    Арккосинус x (результат в радианах)
    ArcSin(x)
    Арксинус x (результат в радианах)
    Log10(x)
    Десятичный логарифм от x
    Tan(x)
    Тангенс x (х в радианах)
    Power(X,Y)
    Возведение X в вещественную степень Y
    RadToDeg
    Перевод радиан в градусы, аналогично преобразо- ванию: degrees = radians(180/pi)
    DegToRad
    Преобразует углы, заданные в градусах, в радианы, аналогично преобразованию: radians = degrees(pi/180)
    Некоторые функции и процедуры даты
    Функции даты находятся в библиотеке SysUtils, которая под- ключается автоматически самой системой.
    Таблица 6.6
    Функция
    Возвращаемое значение
    Date
    Возвращает текущую дату, установленную на ком- пьютере. Функция не имеет аргументов
    DecodeDate(Dat, Y,M,D)
    Процедура возвращает дату в виде трех величин
    Y(год), M(месяц), D(день)
    EncodeDate(Y,M,D)
    Функция преобразует три величины Y(год),
    M(месяц), D(день) в дату
    YearsBetween (An,At)
    Функция возвращает количество прошедших лет между двумя датами An и At
    DaySpan(An,At)
    Функция возвращает количество дней, прошедших между двумя датами An и At.
    Если в программе необходимо использовать переменные, со- держащие дату, то их нужно описать типом TDateTime в разделе

    314
    описания переменных. TDateTime — это стандартный объект
    Delphi.
    Ввод из окна ввода
    Функция InputBox выводит на экран стандартное диалоговое окно — окно ввода. Значение функции InputBox — строка, кото- рую ввел пользователь. Формат функции InputBox следующий:
    Переменная:= InputBox(Заголовок, Подсказка, Значение); где:
    Переменная — переменная строкового типа, значение кото- рой должно быть получено от пользователя;
    Заголовок — текст, выводимый в заголовок окна;
    Подсказка — текст поясняющего сообщения;
    Значение — текст, который будет находиться в поле ввода, когда окно ввода появится на экране.
    Например, следующая инструкция вызывает появление на экране окна ввода, показанного ниже.
    S:=InputBox('Фунты в килограммы,'Введите вес в фунтах','0'); funt:=StrToFloat(S);
    Если во время работы программы пользователь введет строку и щелкнет на кнопке OK, то значением функции InputBox будет введенная строка, если — на кнопке Cancel, то значением функ- ции будет строка, переданная функции в качестве параметра
    «Значение» (в примере 0).
    Вывод в окно сообщения
    Вывести на экран окно с сообщением можно при помощи процедуры ShowMessage или функции MessageDlg.
    Процедура ShowMessage выводит на экран окно с текстом и командной кнопкой OK.
    Формат процедуры ShowMessage :
    ShowMessage (Сообщение); где Сообщение — текст, который будет выведен в окне.
    Например,

    315
    ShowMessage ('Введите вес в фунтах');
    Функция MessageDlg позволяет поместить в окно с сообщением один из стандартных значков, задать коли- чество и тип командных кнопок и оп- ределить, какую из кнопок нажал пользователь. Формат функции
    MessageDlg следующий:
    Выбор:=MessageDlg(Сообщение, Тип, Кнопки, КонтекстСправки);
    Где Сообщение — текст сообщения; Тип — тип сообщения.
    Тип сообщения задается именованной константой:
    Константа
    Тип сообщения
    MtWarning
    Внимание
    MtError
    Ошибка
    MtInformation
    Информация
    MtConfirmation
    Подтверждение
    MtCustom
    Обычное
    Кнопки — список кнопок, отображаемых в окне сообщения. Спи- сок может состоять из нескольких разделенных запятыми имено- ванных констант. Весь список заключается в квадратные скобки.
    Константа
    Кнопка
    Константа
    Кнопка
    mbYes Yes mbAbort
    Abort mbNo No mbRetry
    Retry mbOk Ok mbIgnore
    Ignore mbCancel Cancel mbAll
    All mbHelp Help
    Например, оператор r:=MessageDlg('Файл'+ Fname + ' будет удален', mtWarning, [mbOk,mbCancel], 0); вызовет появление на экране окна:
    Замечание
    Переменная r должна быть описана типом Word.
    Практика
    Задача

    316
    Дано: гипотенуза и прилежащий к гипотенузе угол прямо- угольного треугольника. Составить программу для вычисления катета, противолежащего заданному углу. Формула из тригоно- метрии: a=c*sin A.
    Компоненты
    Имя компонента
    Свойства компонента
    Значение
    Назначение
    Form1 Caption Катет прямоугольного тре- угольника
    Заголовок формы
    Label1 Caption
    WordWrap
    Программа вычисляет ка- тет прямоугольного тре- угольника по гипотенузе и противолежащему углу
    True
    Справочная ин- формация для пользователя программы
    Перенос не уме- стившихся слов на новую строку
    Label2 Caption
    Гипотенуза=
    Подсказка поль- зователю
    Edit1 Text
    Поле для ввода значения гипоте- нузы
    Label3 Caption
    Противолежащий угол (гр., мин., сек.)=
    Подсказка поль- зователю
    Edit2 Text
    Поле для ввода градусов
    Edit3 Text
    Поле для ввода минут
    Edit4 Text
    Поле для ввода секунд
    Label4 Caption
    Поле для вывода результата
    Button1 Caption ВЫЧИСЛИТЬ
    Кнопка вычисле- ния катета
    Button2 Caption ОЧИСТИТЬ
    Кнопка для очи- щения полей для ввода новых дан- ных
    Button3 Caption ВЫХОД
    Кнопка прекра- щения выполне- ния программы и закрытия формы
    Переменные

    317
    Обозначение в про- грамме
    Содержание
    Тип a
    Определяемый катет прямоугольного тре- угольника
    Вещественный c
    Гипотенуза
    Вещественный
    G
    Градусы противолежа- щего определяемому ка- тету угла
    Целый
    M
    Минуты противолежаще- го определяемому катету угла
    Целый
    S
    Секунды противолежа- щего определяемому ка- тету угла
    Вещественный
    Проект формы
    Текст модуля
    unit Unit1;
    …………………..
    var
    Form1: TForm1;
    a:Real;// катет прямоугольного треугольника c:Real;// гипотенуза прямоугольного треугольника
    G,M:Integer;
    S:Real;
    Rad:Real;
    implementation
    {$R *.dfm}

    318
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    c:=StrToFloat(Edit1.Text);
    G:=StrToInt(Edit2.Text);
    M:=StrToInt(Edit3.Text);
    S:=StrToFloat(Edit4.Text);
    Rad:=(G+(M+S/60)/60)*PI/180; a:=c*sin(Rad);
    Label4.Caption:='Катет прямоугольного треугольника= '+FloatToStr(a);
    end;
    //процедура для очистки полей формы для новых данных
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Edit1.Clear;
    Edit2.Clear;
    Edit3.Clear;
    Edit4.Clear;
    Label4.Caption:= ' '
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Form1.Close
    end;
    end.
    Результаты работы программы

    319
    Задача
    Составить программу, определяющую сколько дней прожил пользователь программы.
    Компоненты
    Имя компонента
    Свойства компонента
    Значение
    Назначение
    Form1 Caption Сколько дней прожил поль- зователь программы
    Заголовок формы
    Label1 Caption
    WordWrap
    Программа подсчитывает, сколько дней прожил поль- зователь программы
    True
    Справочная ин- формация для пользователя программы
    Перенос не уме- стившихся слов на новую строку
    Label2 Caption
    Введите дату вашего рож- дения
    Подсказка поль- зователю
    Edit1 Text
    Поле для ввода даты рождения
    Label3 Caption
    Сегодня
    Подсказка поль- зователю
    Edit2 Text
    Поле, в которое выводится дата, установленная на компьютере
    Label4 Caption
    Поле для вывода результата

    320
    Button1 Caption ВЫЧИСЛИТЬ
    Кнопка вычисле- ния количества дней
    Button2 Caption ВЫХОД
    Кнопка прекра- щения выполне- ния программы и закрытия формы
    Button3 Caption ОЧИСТИТЬ
    Кнопка для очи- щения полей для ввода новых дан- ных
    Переменные
    Обозначение в про- грамме
    Содержание
    Тип
    USER_DAT
    Дата рождения пользо- вателя программы
    TDateTime
    USER_DAY
    Количество дней, прожи- тых пользователем про- граммы
    Длинный целый

    321
    Проект формы
    Текст модуля
    unit Unit1;
    ……………….. var
    Form1: TForm1; implementation
    {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
    Var USER_DAT:TDateTime;
    USER_DAY:INT64; begin
    Edit2.Text:=DateToStr(Date());
    Label4.Caption:='ВЫ ПРОЖИЛИ '+
    FloatToStr(DaySpan(Date(),StrToDate(Edit1.Text)))+' дней' end; procedure TForm1.Button2Click(Sender: TObject); begin
    Form1.Close end; procedure TForm1.Button3Click(Sender: TObject); begin
    Edit1.Clear;
    Label4.Caption:=' '; end;

    322
    end.
    Результаты работы программы
    Задача
    Составить программу для решения прямой и обратной геоде- зических задач.
    Прямая геодезическая задача состоит в том, что по координа- там одного конца А (X
    А
    , Y
    А
    ) линии АВ, по дирекционному углу этой линии α
    АВ
    и ее горизонтальному проложению S
    АВ
    вычисля- ют координаты другого конца В этой линии (X
    В
    , Y
    В
    ).
    X
    B
    =X
    A
    +S
    AB
    cos α
    АВ
    ,
    Y
    B
    =Y
    A
    +S
    AB
    sin α
    АВ.
    Обратная геодезическая задача состоит в том, что по коорди- натам концов линии АВ вычисляют дирекционный угол и гори- зонтальное проложение этой линии. То есть известны X
    A
    , Y
    A
    , X
    B
    ,
    Y
    B.
    Надо вычислить α
    АВ
    и S
    АВ
    A
    B
    A
    B
    AB
    X
    X
    Y
    Y
    tg


    =
    α
    ,
    2 2
    )
    (
    )
    (
    A
    B
    A
    B
    AB
    Y
    Y
    X
    X
    S

    +

    =
    Компоненты
    Имя компонента
    Свойства компонента
    Значение
    Назначение
    Form1 Caption Прямая и обратная геоде- зические задачи
    Заголовок формы
    Label1 Caption Обратная геодезическая Справочная ин-

    323
    Visible задача — вычисление по координатам двух точек го- ризонтального проложения линии между ними и дирек- ционного угла
    False формация для пользователя программы
    Невидимый
    Label2 Caption
    Visible
    XA
    False
    Подсказка поль- зователю
    Невидимый
    Label3 Caption
    Visible
    YA
    False
    Подсказка поль- зователю
    Невидимый
    Label4 Caption
    Visible
    XB
    False
    Подсказка поль- зователю
    Невидимый
    Label5 Caption
    Visible
    YB
    False
    Подсказка поль- зователю
    Невидимый
    Label6 Caption
    Visible
    Горизонтальное проложе- ние линии АВ в метрах
    False
    Подсказка поль- зователю
    Невидимый
    Label7 Caption
    Visible
    False
    Поле для вывода горизонтального проложения
    Невидимый
    Label8 Caption
    Visible
    Дирекционный угол (гр. мин. сек.)
    False
    Подсказка поль- зователю
    Невидимый
    Label9 Caption
    Visible
    False
    Поле для вывода дирекционного угла (градусы)
    Невидимый
    Label10 Caption
    Visible
    False
    Поле для вывода дирекционного угла (минуты)
    Невидимый
    Label11 Caption
    Visible
    False
    Поле для вывода дирекционного угла (секунды)
    Невидимый
    Edit1 Text
    Visible
    …..
    False
    Поле для ввода координаты XА
    Невидимый

    324
    Edit2 Text
    Visible
    …..
    False
    Поле для ввода координаты YА
    Невидимый
    Edit3 Text
    Visible
    …..
    False
    Поле для ввода координаты XB
    Невидимый
    Edit4 Text
    Visible
    …..
    False
    Поле для ввода координаты YB
    Невидимый
    Button1 Caption ПРЯМАЯ
    ГЕОДЕЗИЧЕСКАЯ ЗАДАЧА
    Кнопка запускает на выполнение прямую геодези- ческую задачу
    Button2 Caption ОБРАТНАЯ
    ГЕОДЕЗИЧЕСКАЯ ЗАДАЧА
    Кнопка делает видимыми поля для решения об- ратной геодези- ческой задачи
    Button3 Caption ВЫХОД
    Кнопка закрытия формы и выхода из программы
    Button4 Caption
    Visible
    Вычислить
    False
    Кнопка вычисле- ния обратной геодезической задачи
    Невидимый
    Переменные
    Обозначение в про- грамме
    Содержание
    Тип
    XA
    Координата X точки А
    Вещественный
    YA
    Координата Y точки А
    Вещественный
    XB
    Координата X точки B
    Вещественный
    YB
    Координата Y точки B
    Вещественный
    G
    Часть дирекционного уг- ла линии АВ в градусах
    Целый
    M
    Часть дирекционного уг- ла линии АВ в минутах
    Целый
    S
    Часть дирекционного уг- ла линии АВ в секундах
    Вещественный
    L
    Горизонтальное проло- жение лини АВ
    Вещественный
    DX
    Приращение координат по оси X
    Вещественный
    DY
    Приращение координат по оси Y вещественный
    DU
    Дирекционный угол в градусах
    Вещественный
    Замечание

    325
    При проектировании компонентов для решения обратной геодезической задачи на той же форме свойство Visible компо- нентов целесообразно установить в положение False.
    Текст модуля
    unit Unit1;
    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics,
    Controls, Forms,
    Dialogs, StdCtrls, Math;
    { библиотечный модуль Math нужно добавить в стандартный набор модулей для подключения математической библиотеки }
    ………………………..
    var
    Form1: TForm1;
    XA,YA:Extended; //координаты точки A
    XB,YB:Extended; // координаты точки B
    G:Integer; // дирекционный угол в градусах
    M: Integer; // часть дирекционного угла в минутах
    S:Real; // часть дирекционного угла в секундах
    L:Extended; // горизонтальное проложение линии AB
    DX, DY:Extended;// приращения координат по осям X,Y
    DU:Extended;// дирекционный угол в радианах
    implementation
    {$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage('Прямая геодезическая задача - определение координаты'+
    ' точки по координатам исходной точки, горизонтальному проложению '
    + ' и дирекционному углу.'+#13
    +'Дирекционный угол задается в градусах, минутах и секундах. Коор-ты в метрах.');
    // ввод координат исходной точки, дирекционного угла
    // и горизонтального проложения линии AB из окон ввода
    XA:=StrToFloat(InputBox('Прямая геодезическая задача',
    'Введите координату X точки A','0'));
    YA:=StrToFloat(InputBox('Прямая геодезическая задача',
    'Введите координату Y точки A','0'));
    G:=StrToInt(InputBox('Прямая геодезическая задача',
    'Введите часть дирекционного угла линии AВ в градусах' +#13
    +'Значение < 360','0'));
    M:=StrToInt(InputBox('Прямая геодезическая задача',

    326
    'Введите часть дирекционного угла линии AВ в минутах'+
    #13+'Значение <60','0'));
    S:=StrToFloat(InputBox('Прямая геодезическая задача',
    'Введите часть дирекционного угла линии AВ в секундах'
    +#13+'Значение <60','0'));
    L:=StrToFloat(InputBox('Прямая геодезическая задача',
    'Введите горизонтальное проложение линии AВ в метрах','0'));
    // вычисление координат точки B
    // в ниже приведенном преобразовании можно использовать
    // функцию преобразования DegTORad
    XB:=XA+L*cos((g+m/60+s/3600)/180*pi);
    YB:=YA+L*sin((g+m/60+s/3600)/180*pi);
    {XB:=XA+L*cos(DegToRad(g+m/60+s/3600));
    YB:=YA+L*sin(DegToRad (g+m/60+s/3600));}
    //округление вычисленных координат
    // до двух знаков после запятой
    XB:=Trunc(XB*100+0.5)/100;
    YB:=Trunc(YB*100+0.5)/100;
    // вывод координат точки B окно сообщения
    ShowMessage('Прямая геодезическая задача ' +#13 +'XB='
    +FloatToStrF(XB,Fffixed,10,2)+ #13
    + 'YB='+FloatToStrF(YB,Fffixed,10,2))
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Form1.Close
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    // сделать видимыми компоненты, относящиеся к обратной
    // геодезической задаче
    Label1.Visible:=True;
    Label2.Visible:=True;
    Label3.Visible:=True;
    Label4.Visible:=True;
    Label5.Visible:=True;
    Label6.Visible:=True;
    Label7.Visible:=True;
    Label8.Visible:=True;
    Label9.Visible:=True;
    Label10.Visible:=True;
    Label11.Visible:=True;
    Edit1.Visible:=True;

    327
    Edit2.Visible:=True;
    Edit3.Visible:=True;
    Edit4.Visible:=True;
    // перенести фокус в первое поле ввода на форме
    Edit1.SetFocus;
    Button4.Visible:=True;
    end;
    procedure TForm1.Button4Click(Sender: TObject);
    Var
    begin
    // ввод координат точек A и B из полей ввода на форме
    XA:=StrToFloat(Edit1.Text);
    YA:=StrToFloat(Edit2.Text);
    XB:=StrToFloat(Edit3.Text);
    YB:=StrToFloat(Edit4.Text);
    DX:=XB-XA;
    DY:=YB-YA;
    // вычисление горизонтального проложения линии AB
    L:=Sqrt(Sqr(DX)+Sqr(DY));
    // округление горизонтального проложения
    // до двух знаков после запятой
    L:=Trunc(L*100+0.5)/100;
    // вычисление дирекционного угла и перевод
    // его значения из радиан в градусы
    DU:=ArcTan2(DY,DX)/Pi*180;
    {в данном преобразовании можно было использовать функцию
    RadToDeg: DU:= RadToDeg (ArcTan2(DY,DX));}
    // ArcTan2(Y/X) - библиотечная функция находит угол X/Y
    // в несущем квандарте по знакам X и Y от -Pi до Pi в радианах.
    // если угол со знаком минус к нему прибавляется 360 градусов if DU<0 Then DU:=360+DU;
    //выделение градусной части дирекционного угла
    G:=Trunc(DU);
    // выделение минутной части дирекционного угла
    M:=Trunc((DU-G)*60);
    // выделение секундной части дирекционного угла
    S:=((DU-G)*60-M)*60;
    {вывод горизонтального проложения и дирекционного угла в поля вы- вода}
    Label7.Caption:=FloatToStrF(L,Fffixed,10,2);
    Label9.Caption:=IntToStr(G);
    Label10.Caption:=IntToStr(M);
    Label11.Caption:=FloatToStrF(S,Fffixed,5,1);

    328
    end;
    end.
    Такие окна будут появляться на экране при выполнении проекта:

    329
    Задачи для самостоятельного решения
    Группа A
    № 2.1. Даны x, y, z. Составить программу для вычисления a, b по формулам:
    ).
    (
    ,
    4 2
    1
    |
    |
    |
    1
    |
    )
    3
    (
    2 2
    3
    +

    +
    =
    +
    +


    =
    x
    e
    arctgz
    x
    b
    y
    x
    y
    x
    a
    № 2.2. Даны x, y, z. Составить программу для вычисления a, b по формулам:
    3
    |
    |
    2
    )
    (
    |
    |
    1
    ,
    |
    |
    1 3
    3 2
    2 1
    x
    y
    x
    y
    x
    y
    b
    tgz
    y
    x
    e
    a
    y

    +

    +

    +
    =

    +
    +
    =

    № 2.3. Даны x, y, z. Составить программу для вычисления a, b по формулам:

    330
    sin
    2
    /
    )
    2
    cos(
    1
    ,
    )
    4
    /(
    1
    )
    4
    /(
    )
    1
    (
    2 4
    2 2
    2
    z
    x
    y
    b
    x
    e
    x
    y
    x
    y
    a
    x
    +

    +
    =
    +
    +
    +
    +
    +
    =


    № 2.4. Даны x, y, z. Составить программу для вычисления a, b по формулам:
    ).
    2 1
    (
    ,
    |
    3
    /
    |
    2 3
    2 2
    z
    tg
    b
    x
    y
    x
    y
    x
    y
    a
    +
    =
    +
    +
    +
    =
    № 2.5. Даны x, y, z. Составить программу для вычисления a, b по формулам:
    5
    /
    3 1
    ,
    sin
    2
    /
    1
    )
    6
    /
    cos(
    2 2
    2 2
    z
    z
    b
    y
    x
    a
    +
    +
    =
    +

    =
    π
    № 2.6. Даны x, y, z. Составить программу для вычисления a, b по формулам:
    ).
    1
    (
    cos
    ,
    |
    )
    1
    /(
    2
    |
    2
    )
    (
    sin
    1 2
    2 2
    2
    z
    arctg
    b
    x
    y
    x
    x
    x
    y
    x
    a
    =
    +
    +

    +
    +
    +
    =
    № 2.7. Составить программу, подсчитывающую сколько дней ос- талось до каникул.
    № 2.8. Даны действительные числа
    δ и σ. Найти p(δ) по формуле:
    2 2
    2 2
    1
    )
    (
    σ
    δ
    π
    σ
    δ

    =
    e
    p
    № 2.9. Составить программу, подсчитывающую количество сим- волов в полном имени пользователя программы, включая пробе- лы.
    № 2.10. Составить программу, определяющую, сколько лет про- жил пользователь программы.
    Группа Б
    № 2.11. Написать программу для решения прямой геодезической задачи: по заданным координатам точки А(X
    А
    , Y
    А
    ), горизонталь- ному проложению (L в м) от точки A до точки B и дирекционно- му углу (
    α) этого проложения найти координаты точки B:
    α
    α
    sin cos

    +
    =

    +
    =
    L
    Y
    Y
    L
    X
    X
    A
    B
    A
    B

    331
    Угол вводить в градусах, минутах и секундах, координаты вводить с точностью до 1м.
    В программе предусмотреть следующие запросы при вводе исходных данных:
    XA =, YA =
    ПРОЛОЖЕНИЕ AB =
    ДИР. УГОЛ AB: G, M, S =
    Форма вывода результата:
    XB = значение XB YB = значение YB.
    Примечание
    Горизонтальное проложение — ортогональная проекция ли- нии местности на горизонтальную плоскость.
    Дирекционный угол — это горизонтальный угол, отсчитывае- мый от северного направления линии, параллельной оси абсцисс, по ходу часовой стрелки до направления данной линии.
    №2.12. Написать программу, которая по заданному значению вертикального угла
    ν и расстоянию S (в м) между точками A и B определяет превышение точки B над точкой A
    ν

    =
    sin
    S
    R
    и горизонтальное проложение между A и B
    ν
    cos

    = S
    D
    Значение R округлять до 0,01 м, значение D — до 0,1 м.
    ВЕРТИКАЛЬНЫЙ УГОЛ: G, M, S =
    РАССТОЯНИЕ =
    Форма вывода результатов:
    ПРЕВЫШЕНИЕ = значение R
    ГОР. ПРОЛОЖЕНИЕ = значение D
    (См. примечание к задаче 2.11).
    № 2.13. Написать программу для вычисления поправки дирекци- онного угла в сек. по значениям дирекционного угла
    α, расстоя- ния S в метрах и поправок координат концов отрезка y
    x y
    x
    ,
    ,
    ,
    δ′′
    δ′′
    δ′
    δ′
    в метрах:
    )).
    (
    cos
    )
    (
    (sin
    206000
    y
    x
    y
    x
    S
    δ
    δ
    α
    δ
    δ
    α
    δ
    α
    ′′

    ′′

    +




    =
    Поправку округлить до 0,01 сек.
    В программе предусмотреть следующие запросы при вводе исходных данных:

    332
    ДИР. УГОЛ: ГР., МИН., СЕК. =
    РАССТОЯНИЕ =
    ПОПРАВКИ КООРДИНАТ:
    DX1 = вводить x
    δ′
    DY1 = вводить y
    δ′
    DX2 = вводить x
    δ′′
    DY2 = вводить y
    δ′′
    Форма вывода результата:
    ПОПРАВКА ДИР. УГЛА= значение в сек.
    (См. примечание к задаче 2.11).
    № 2.14. Написать программу для вычисления площади треуголь- ного участка по длине стороны A и прилежащих к ней углов
    β и
    γ. Значения углов вводить в градусах, минутах и секундах, длину стороны A — в метрах. Площадь вывести в гектарах с точностью до 0,1 га.
    Формула для вычисления площади:
    В программе предусмотреть следующие запросы при вводе исходных данных:
    УГОЛ B: ГР., МИН., СЕК. =
    УГОЛ C: ГР., МИН., СЕК. =
    СТОРОНА A =
    Форма вывода результата:
    ПЛОЩАДЬ УЧАСТКА = значение S га.
    № 2.15. Написать программу для перевода декартовых координат
    (X,Y) некоторой точки в полярные (
    ρ,Θ) при условии, что полюс совпадает с началом декартовой системы, а полярная ось совпа- дает с ось OX:
    2 2
    X
    Y
    arctg
    Y
    X
    =
    Θ
    +
    =
    ρ
    ,
    Значение
    ρ округлять до 0,1 м. Значение Θ выводить в граду- сах, минутах и секундах, округляя секунды до 0,1.
    )
    sin(
    2
    sin sin
    2
    γ
    β
    γ
    β
    +



    =
    A
    S

    333
    В программе предусмотреть следующие запросы при вводе исходных данных:
    ДЕКАРТОВЫ КООРДИНАТЫ (X,Y) =
    Форма вывода результатов:
    ПОЛЯРНЫЕ КООРДИНАТЫ:
    УГОЛ (ГР., МИН., СЕК.) = значение
    РАССТОЯНИЕ = значение.
    №2.16 Написать программу для перевода координат точки M из полярной системы в декартову, считая, что полюс совпадает с на- чалом декартовых координат, а полярная ось совпадает с осью
    OX: sin
    ,
    cos
    Θ
    =
    Θ
    =
    ρ
    ρ
    Y
    X
    Здесь
    ρ и Θ — координаты точки M в полярной системе, где
    Θ выражается в градусах, минутах и секундах.
    Значения X,Y при выводе округлить до 0,01 м.
    В программе предусмотреть следующие запросы при вводе исходных данных:
    ПОЛЯРНЫЕ КООРДИНАТЫ:
    УГОЛ (ГР., МИН., СЕК.) =
    РАССТОЯНИЕ (МЕТРЫ) =
    Форма вывода результатов:
    ДЕКАРТОВЫ КООРДИНАТЫ:
    X = значение X МЕТРОВ Y=значение Y МЕТРОВ.
    №2.17. Написать программу для вычисления коэффициента на- грузки лесной полосы (R) по заданному значению угла
    α, обра- зуемого осью лесной полосы и направлением ветра:
    )).
    2 45
    (
    1
    )(
    6
    sin(
    α
    α

    °

    °
    +
    =
    tg
    R
    Значение
    α вводить в градусах и минутах.
    В программе предусмотреть следующие запросы при вводе:
    УГОЛ (ГР., МИН.) =
    Форма вывода результатов:
    КОЭФФИЦИЕНТ НАГРУЗКИ = значение R.
    № 2.18. Написать программу для вычисления площади треуголь- ного участка по длине стороны A и прилежащих к ней углов
    β и
    γ. Значения углов вводить в градусах, минутах и секундах, длину

    334
    стороны A — в метрах. Площадь вывести в гектарах с точностью до 0,1 га.
    Формула для вычисления площади:
    )
    sin(
    2
    sin sin
    2
    γ
    β
    γ
    β
    +
    =
    A
    S
    В программе предусмотреть следующие запросы при вводе исходных данных:
    УГОЛ В: ГР., МИН., СЕК. =
    УГОЛ С: ГР., МИН., СЕК. =
    СТОРОНА А =
    Форма вывода результатов:
    ПЛОЩАДЬ УЧАСТКА = значение S га.
    № 2.19. Написать программу для определения угла (рис. 6.2) по заданным значениям X и S. Угол
    α определять в градусах, мину- тах и секундах, округлив секунды до 0,1 сек.
    α S
    Y 90
    °
    X
    Рис. 6.2
    В программе предусмотреть запросы при вводе исходных данных:
    ГИПОТЕНУЗА =
    ПРОТИВОЛЕЖАЩИЙ КАТЕТ =
    Форма вывода результата:
    УГОЛ = количество гр., количество минут мин., количество секунд сек.
    № 2.20. Написать программу для определения угла
    α (рис.) по за- данным значениям Y и S. Угол определять в градусах, минутах и секундах, округляя секунды до 0,1.
    В программе предусмотреть запросы при вводе исходных данных:
    ГИПОТЕНУЗА =
    ПРИЛЕЖАЩИЙ КАТЕТ =

    335
    Форма вывода результата:
    Угол = градусы гр., минуты мин., секунды сек.
    1   ...   11   12   13   14   15   16   17   18   ...   21


    написать администратору сайта