Практикум по информатике
Скачать 7.84 Mb.
|
§8. Разработка внутренних процедур и функций В данном параграфе рассматриваются следующие вопро- сы: понятие подпрограммы, процедуры, функции. Теория Подпрограмма представляет собой группу операторов, логи- чески законченную и специальным образом оформленную. Под- программу можно вызывать неограниченное число раз из различ- ных частей программы. Использование подпрограмм позволяет улучшить структурированность программы и сократить ее раз- мер. По структуре подпрограмма почти полностью аналогична программе и содержит заголовок и раздел операторов (блок), од- нако в блоке подпрограммы отсутствует раздел подключения мо- дулей. Кроме того, заголовок подпрограммы по своему оформле- нию отличается от заголовка программы. Работа с подпрограммой состоит из двух этапов: — описание подпрограммы; — вызов подпрограммы. Любая подпрограмма должна быть предварительно описана, после чего допускается ее вызов. При описании подпрограммы указывается ее имя, список параметров и выполняемые подпро- граммой действия. При вызове подпрограммы указываются имя подпрограммы и список аргументов (фактических параметров), передаваемых подпрограмме для работы. В различных модулях Delphi имеется большое число стан- дартных подпрограмм, которые можно вызывать без предвари- тельного описания. Кроме того, программист может создавать свои подпрограммы, которые также называют пользовательски- ми. Подпрограммы делятся на процедуры и функции, которые имеют между собой много общего. Основное различие между ними заключается в том, что функция может возвращать под сво- им именем в качестве результата значение и соответственно мо- жет использоваться в качестве операнда выражения. С подпрограммой взаимодействие осуществляется по управ- лению и по данным. Взаимодействие по управлению заключается в передаче управления из программы в подпрограмму и органи- 439 зации возврата в программу. Взаимодействие по данным заклю- чается в передаче подпрограмме данных, над которыми она вы- полняет определенные действия. Этот вид взаимодействия может осуществляться следующими основными способами: — с использованием файлов; — с помощью глобальных переменных; — с помощью параметров. Наиболее часто используется последний способ. При этом разли- чают параметры и аргументы. Параметры (формальные пара- метры) являются элементами подпрограммы и используются при описании алгоритма, выполняемого подпрограммой. Аргументы (фактические параметры) являются элементами вызывающей программы. Они замещают параметры при вызове подпрограм- мы. При этом осуществляется проверка на соответствие типов и количества параметров и аргументов. Имена параметров и аргу- ментов могут различаться, однако их количество и порядок сле- дования должны совпадать, а типы параметров и соответствую- щих им аргументов должны быть совместимыми. Для прекраще- ния работы подпрограммы можно использовать процедуру Exit, которая прерывает выполнение операторов подпрограммы и воз- вращает управление вызывающей программе. Подпрограммы можно вызывать не только из программы, но и из других подпро- грамм. Процедуры Описание процедуры включает в себя заголовок и блок, кото- рый, за исключением раздела подключения модулей, не отлича- ется от блока программы. Заголовок состоит из ключевого слова procedure, имени про- цедуры и необязательного списка параметров в круглых скобках с указанием типа каждого параметра. Заголовок имеет формат: Procedure <Имя> [ (формальные параметры) ]; Для обращения к процедуре используется оператор вызова процедуры. Он включает имя процедуры и список фактических параметров, заключенный в круглые скобки. Например, Test(a,b,c), Test — имя вызываемой процедуры, a, b, c — факти- ческие параметры. Процедура Test должна быть описана с помо- щью подобного заголовка: Procedure Test(a:integer;b:Real; var c:Real); 440 где a, b — исходные данные, передаваемые процедуре из вызы- вающей процедуры; с — результат работы процедуры, возвращаемый в вызывающую процедуру. Функции Описание функции состоит из заголовка и блока. Заголовок включает ключевое слово Function, имя функции, необязатель- ный список формальных параметров, заключенный в круглые скобки, и тип возвращаемого функцией значения. Заголовок име- ет формат: Function <Имя> [ (Формальные параметр) ] : <Тип результата>; Возвращаемое значение может иметь любой тип, кроме фай- лового. Блок функции представляет собой локальный блок, по структуре аналогичный блоку процедуры. В теле функции дол- жен быть хотя бы один оператор присваивания, в левой части ко- торого стоит имя функции. Именно он и определяет значение, возвращаемое функцией. Если таких операторов несколько, то результатом функции будет значение последнего выполненного оператора присваивания. В этих операторах вместо имени функ- ции можно указывать переменную Result, которая создается в ка- честве синонима для имени функции. В отличие от имени функ- ции, переменную Result можно использовать в выражениях блока функции. С помощью переменной Result можно в любой момент получить внутри блока доступ к текущему значению функции. Замечание Имя функции можно использовать в выражениях блока функции, однако это приводит к рекурсивному вызову функцией самой себя. Вызов функции осуществляется по ее имени с указанием в круглых скобках списка аргументов, которого может и не быть. При этом аргументы должны попарно соответствовать парамет- рам, указанным в заголовке функции, и иметь те же типы. В от- личие от процедуры, имя функции может входить как операнд в выражения. Например, T:=Factor(n)/(n-k); где Factor(n) вызов функции для вычисления факториала. Функция Factor(n) должна быть описана примерно таким заголовком: Function Factor(i:Integer):Int64; Задача 441 Текст модуля unit Unit1; …………………. var Form1: TForm1; implementation {$R *.dfm} {процедура выделяет из угла в градусах целые градусы, це- лые минуты и секунды} procedure GMS(Ugol:real;var G,M:Integer; S:Real); begin G:=Trunc(Ugol+0.1); M:=Trunc((Ugol-G)*60); S:=((Ugol-G)*60-M)*60; end; procedure TForm1.Button1Click(Sender: TObject); Var a,b,c: Real; p : Real; G,M : Integer; S : Real; Tan_Pol_Ugla, Ugol_b_Rad,Ugol_b_Grad:Real; begin a:=StrToFloat(Edit1.Text); 442 b:=StrToFloat(Edit2.Text); c:=StrToFloat(Edit3.Text); p:=(a+b+c)/2; If (a+b>c) and (a+c>b) and (b+c>a) Then begin Tan_Pol_Ugla:=Sqrt((p-a)*(p-b)/(p*(p-c))); Ugol_b_Rad:=Arctan(Tan_Pol_Ugla)*2; Ugol_b_Grad:=Ugol_b_Rad/pi*180; GMS(Ugol_b_Grad,G,M,S); Label5.Caption:='Угол, противолежащий стороне c, равен'+#13+IntToStr(G)+'гр. ' +IntToStr(M)+'мин. '+FloatToStrF(S,ffFixed,3,1)+'сек.' end Else Label5.Caption:='ТРЕУГОЛЬНИК НЕ СУЩЕСТВУЕТ'; end; procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Text:=' '; Edit2.Text:=' '; Edit3.Text:=' '; end; procedure TForm1.Button3Click(Sender: TObject); begin Form1.Close end; end. Возможный результат решения: 443 Задача Текст модуля unit factor_; …………………………… var Form1: TForm1; implementation {$R *.DFM} // рекурсивная функция function factorial(n: integer): integer; begin if n > 1 then factorial := n * factorial(n-1) // функция вызывает сама себя else factorial:= 1; // факториал 1 равен 1 444 end; procedure TForm1.Button1Click(Sender: TObject); var k:integer; // число, факториал которого надо вычислить f:integer; // значение факториала числа k begin k := StrToInt(Edit1.Text); f := factorial(k); label2.caption:='Факториал числа '+Edit1.Text +' равен '+IntToStr(f); end; end. Возможный результат решения: Задача Составить программу для вычисления значений выражений P=(x1+y1)/2 и Q=(x2+y2)/2, где x1 и x2 — корни квадратного уравнения с коэффициентами A, B, C, а y1 и y2 — корни квад- ратного уравнения с коэффициентами D, F, G. Если хотя бы одно из уравнений не имеет действительных корней выдать на экран сообщение об этом и прекратить выполнение программы. В программе разработать функцию для проверки введенных в поле ввода данных. Вводить в поле ввода можно только числа. Десятичным разделителем является запятая. Для вычисления корней квадратного уравнения разработать процедуру. Компоненты Имя компонента Свойства компонента Значение Назначение Form1 Caption Выражение Заголовок формы Label1 Caption Программа вычисляет значение выражений: Справочная ин- формация для 445 WordWrap P=(X1+Y1)/2 и Q=(X2+Y2)/2, где X1 и X2 – корни квадратного урав- нения с коэффициентами A, B, C , а Y1, Y2 – корни квадратного уравнения с коэффициентами D, F, G True пользователя программы Перенос не уме- стившихся слов на новую строку Label2 Caption WordWrap Если хотя бы одно из уравнений не имеет дей- ствительных корней, то об этом выдается сообщение и выполнение программы прекращается True Подсказка поль- зователю Перенос не уме- стившихся слов на новую строку Label3 Caption Уравнение 1 Подсказка поль- зователю Label4 Caption Уравнение 2 Подсказка поль- зователю Label5 Caption A= Подсказка поль- зователю Label6 Caption B= Подсказка поль- зователю Label7 Caption C= Подсказка поль- зователю Label8 Caption D= Подсказка поль- зователю Label9 Caption F= Подсказка поль- зователю Label10 Caption G= Подсказка поль- зователю Label11 Caption Поле для вывода результата Label12 Caption Для ввода чисел нажимай- те клавишу ENTER Подсказка поль- зователю Edit1 Text ….. Поле для ввода коэффициента A Edit2 Text ….. Поле для ввода коэффициента B Edit3 Text ….. Поле для ввода коэффициента C Edit4 Text ….. Поле для ввода коэффициента D Edit5 Text ….. Поле для ввода коэффициента F Edit6 Text ….. Поле для ввода 446 коэффициента G Button1 Caption ВЫЧИСЛИТЬ Кнопка для вы- числения Button2 Caption ВЫХОД Кнопка закрытия формы и выхода из программы Переменные Обозначение в программе Содержание Тип A Коэффициент первого квад- ратного уравнения Вещественный B Коэффициент первого квад- ратного уравнения Вещественный C Коэффициент первого квад- ратного уравнения Вещественный D Коэффициент второго квад- ратного уравнения Вещественный F Коэффициент второго квад- ратного уравнения Вещественный G Коэффициент второго квад- ратного уравнения Вещественный S Строка символов, передавае- мая из поля ввода Строковый i Номер по порядку символа в строке символов Локальная переменная. Це- лый Z Счетчик запятых Локальная переменная. Це- лый DT Дискриминант Локальная переменная. Вещественный R Признак решения уравнения Локальная переменная. Ло- гический R1 Признак решения уравнения 1 Логический R2 Признак решения уравнения 2 Логический Key Ключ — какая клавиша нажата Слово, целый беззнаковый X1 1 корень уравнения 1 Вещественный X2 2 корень уравнения 1 Вещественный Y1 1 корень уравнения 2 Вещественный Y2 2 корень уравнения 2 Вещественный P P=(X1+Y1)/2 Вещественный Q Q=(X2+Y2)/2 Вещественный Проект формы 447 Текст модуля unit Unit1; ……….. var Form1: TForm1; A,B,C:Real;// коэффициенты первого квадратного уравнения D,F,G:Real;// коэффициенты второго квадратного уравнения implementation {$R *.dfm} {Функция проверяет, является ли введенное значение числом. Допус- тимыми значениями в числе являются цифры от 0 до 9, минус в качест- ве первого символа, одна десятичная запятая. Функция принимает зна- чение Истина, если в строке встретился запрещенный символ.} function CheckEdit(s:string):boolean; // s строка символов, передаваемая из поля ввода Var i:integer;// номер по порядку символа в строке символов Z:integer;// счетчик запятых begin CheckEdit:=False;// значению функции присваивается ЛОЖЬ Z:=0;// обнуление счетчика десятичных запятых // цикл выполняется столько раз, сколько символов // во введенной строке for i:=1 to Length(S) do Begin // если в строке встречается запятая, счетчик увеличивается на 1 if s[i]=',' Then Z:=Z+1; // если символ не относится к числу допустимых, значение // функции принимает значение ИСТИНА 448 if not(s[i] in ['0'..'9','-',','])Then CheckEdit:=True //иначе, если не первый символ равен минусу или счетчик // запятых больше или равен 2, // значение функции принимает значение ИСТИНА else if ((i<>1) and (S[i]='-')) or (Z>=2) Then CheckEdit:=True end; end; // процедура вычисления корней квадратного уравнения procedure Root(A,B,C:Real;Var R:Boolean;Var X1,X2:Real); Var DT:Real;//дискриминант begin // признак действительных решений у уравнения // принимает значение ИСТИНА R:=True; DT:=sqr(B)-4*A*C; if DT>0 Then begin X1:=(-B-sqrt(DT))/(2*A); X2:=(-B+sqrt(DT))/(2*A); end else // признак действительных решений у уравнения // принимает значение ЛОЖЬ R:=False; end; procedure TForm1.Button2Click(Sender: TObject); begin Form1.Close end; // процедура обработки события — переход вниз из поля ввода procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin // если была нажата клавиша «ENTER», то если значение вызванной // функции проверки допустимости символов в строке, которой // в качестве фактического параметра передается содержимое поля //ввода, равно истине (символ недопустим), то поле ввода // очищается и фокус остается в нем if Key=VK_RETURN then if CheckEdit(Edit1.Text) Then begin Edit1.Clear; Edit1.SetFocus end // иначе фокус переносится в следующее поле ввода 449 Else Edit2.SetFocus; end; // процедура аналогична процедуре // procedure TForm1.Edit1KeyDown procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_RETURN then if CheckEdit(Edit2.Text) Then begin Edit2.Clear; Edit2.SetFocus end Else Edit3.SetFocus; end; // процедура аналогична procedure TForm1.Edit1KeyDown procedure TForm1.Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key=VK_RETURN then if CheckEdit(Edit3.Text) Then begin Edit3.Clear; Edit3.SetFocus end Else Edit4.SetFocus; end; // процедура аналогична procedure TForm1.Edit1KeyDown procedure TForm1.Edit4KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key=VK_RETURN then if CheckEdit(Edit4.Text) Then begin Edit4.Clear; Edit4.SetFocus end Else Edit5.SetFocus; end; // процедура аналогична procedure TForm1.Edit1KeyDown procedure TForm1.Edit5KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key=VK_RETURN then if CheckEdit(Edit5.Text) Then begin Edit5.Clear; 450 Edit5.SetFocus end Else Edit6.SetFocus; end; // процедура аналогична procedure TForm1.Edit1KeyDown procedure TForm1.Edit6KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If Key=VK_RETURN then if CheckEdit(Edit6.Text) Then begin Edit6.Clear; Edit6.SetFocus end Else Button1.SetFocus; end; // процедура связанная с кнопкой вычислить procedure TForm1.Button1Click(Sender: TObject); Var R1,R2:Boolean;{признаки решения первого и второго квадратных уравнений } P,Q:Real;// значения вычисляемых выражений X1,X2:Real;// корни первого уравнения Y1,Y2: Real;// корни второго уравнения begin // инициализация переменных X1:=0;X2:=0; Y1:=0;Y2:=0; // ввод из полей ввода коэффициентов уравнений A:=StrToFloat(Edit1.Text); B:=StrToFloat(Edit2.Text); C:=StrToFloat(Edit3.Text); D:=StrToFloat(Edit4.Text); F:=StrToFloat(Edit5.Text); G:=StrToFloat(Edit6.Text); // вызов процедуры вычисления корней квадратного уравнения // (для двух уравнений), если уравнение не имеет // действительных корней, признак решения // принимает значение ложь Root(A,B,C,R1,X1,X2); Root(D,F,G,R2,Y1,Y2); if not(R1) Then begin ShowMessage('Уравнение 1 действительных корней не имеет'); Exit // прекращение выполнения программы 451 end else if not(R2) Then begin ShowMessage('Уравнение 2 действительных корней не имеет '); Exit end // если оба уравнения имеют действительные решения, // то вычисляются значения P и Q, их значения выводятся // на форму в поля вывода else begin P:=(X1+Y1)/2; Q:=(X2+Y2)/2; Label11.Caption:='P= '+FloatToStrF(P,Fffixed,10,2)+ ' Q= '+FloatToStrF(Q,Fffixed,10,2); end; end; end. Результаты работы программы 452 Задачи для самостоятельного решения Группа А № 8.1. Составить программу для вычисления u= min (a, b), v=min(min(ab, a+b), min (u, 3.14)), где a и b — действительные числа. Нахождения минимума оформить как функцию. № 8.2. Даны действительные числа s, t. Получить h (s, t) + max (h 2 (s, st), h 2 (s–t, s+t)), где Вычисление h(a,b) и max оформить в виде процедур. № 8.3. Даны действительные числа s, t. Получить f(t, -2s, 1.17) + f(2.2, t, s-t), где Для вычисления f(a,b,c) в программе предусмотреть процедуру. № 8.4. Даны действительные числа s, t. Получить 3 2 ) ( 2 1 1 ) , ( b a a b b a b a h − − + + + = | | 5 sin 2 ) , , ( c c b a c b a f + − − = 453 g(1.2, s) + g(t, s)-g(2s-1,st), где g(a,b) = 4 3 2 2 2 2 2 + + + + b ab a b a Вычисление g в программе оформить в виде процедуры. № 8.5. Составить программу для вычисления суммы ряда где x — вещественное число; n, m — натуральные числа. Для возведения в степень и вычисления факториала разрабо- тать функции. № 8.6. Даны натуральные числа m и n. Получить Для вычисления факториала в программе предусмотреть функцию. № 8.7. Даны коэффициенты двух квадратных уравнений a 1 x 2 +b 1 x+c 1 =0 и a 2 x 2 +b 2 x+c 2 =0. Составить программу для вычисления значений: где x 1 и y 1 — корни 1-го уравнения; x 2 и y 2 — корни 2-го уравнения. Для решения квадратного уравнения предусмотреть в про- грамме процедуру. № 8.8. Даны действительные числа a, b, c, d. Найти площадь пя- тиугольника, изображенного на рисунке ниже. Определить про- цедуру вычисления площади треугольника по трем сторонам. a 1 2 b 2,5 d c № 8.9. Составить программу для вычисления , 2 ) ! ( ) 1 ( 0 2 2 2 ∑ = − m n n n n n x )! ( ! ! n m n m + + , 2 ; 2 2 2 2 1 1 1 y x Z y x Z + = + = 454 Q= 1 ) 1 ( 2 1 − − n x n с , где ( 1 ≥ n ). Возведение в степень оформить в виде функции. Группа Б № 8.10. Написать программу для определения взаимного распо- ложения точек с координатами X 1 , Y 1 и X 2 , Y 2 по отношению к прямой, которая задается уравнением AX+BY+C=0. Для этого в программе необходимо сравнить знаки выражений, вычисляемых по формулам AX 1 +BY 1 +C=0 и AX 2 +BY 2 +C=0. При этом возмож- ны следующие ситуации: — если знаки обоих выражений совпадают, то обе точки ле- жат по одну сторону от прямой, — если знаки у выражений различны, то точки лежат по раз- ные стороны от прямой, — если одно или оба выражения равны нулю, то соответст- венно одна или обе точки лежат на прямой. Для вычисления выражений вида AX+BY+C=0 разработать функцию. В программе предусмотреть следующую форму запросов при вводе данных: A, B, C= X1, Y1= X2, Y2= В качестве результата выводить одно из следующих сообще- ний «ПО РАЗНЫЕ СТОРОНЫ» или «ПО ОДНУ СТОРОНУ» или «ТОЧКА номер точки ЛЕЖИТ НА ПРЯМОЙ». № 8.11. Написать программу для определения углов треугольни- ка α, β, γ по заданным значениям сторон A, B, C, используя тео- рему косинусов: 2 cos , 2 cos , 2 cos 2 2 2 2 2 2 2 2 2 AB C B A AC B C A BC A C B − + = − + = − + = γ β α 455 В программе предусмотреть проверку существования тре- угольника с заданными сторонами. Условие существования: (A+B>C) ∧(A+C>B) ∧(B+C>A). Если указанное условие не выполняется, выдавать сообщение «ИЗ ВВЕДЕННЫХ СТОРОН ТРЕУГОЛЬНИК ПОСТРОИТЬ НЕЛЬЗЯ», затем передавать управление оператору ввода исход- ных данных. Для определения угла использовать преобразование cos cos 1 2 α α α − = tg В этом случае: ⎪ ⎩ ⎪ ⎨ ⎧ = = < + − > − 0 cos , 90 0 cos , 180 cos cos 1 0 cos , cos cos 1 2 2 α α α α α α α α если если arctg если arctg Аналогично для β и γ . Значения углов выводить в градусах, минутах и секундах, округляя до 1 сек. Для определения и вывода значения углов в гр., мин., сек. использовать процедуру. В программе предусмотреть следующую форму запросов при вводе исходных данных: СТОРОНЫ A, B, C = Форма вывода результатов: УГОЛ АЛЬФА = значение α в гр., мин., сек. УГОЛ БЕТА = значение β в гр., мин., сек. УГОЛ ГАММА = значение γ в гр., мин., сек. № 8.12. Написать программу вычисления площади треугольного участка по известному значению боковой стороны A в метрах и углов при основании α, β в градусах, минутах и секундах. 2 ) sin (cos sin 2 α β β β ctg A S + = 456 Площадь вычислять в гектарах с точностью до 0,1 га. В программе предусмотреть проверку α+ β <180 (для этого углы необходимо предварительно перевести в градусы). В случае нарушения указанного соотношения, вывести сообщение «УГЛЫ НЕРЕАЛЬНЫ» и передать управление оператору ввода исходных данных. В программе воспользоваться функцией пользователя для перевода углов из градусной меры в радианную. Форма запросов при вводе исходных данных: СТОРОНА = ПЕРВЫЙ УГОЛ: ГР., МИН., СЕК = ВТОРОЙ УГОЛ: ГР., МИН., СЕК = Форма вывода результата: ПЛОЩАДЬ = значение S ГА. № 8.13. Написать программу для вычисления площади треуголь- ного участка по известному значению основания C в метрах и уг- лов при основании α, β в градусах, минутах и секундах. Площадь определить в гектарах с точностью до 0,01 га. В программе предусмотреть проверку соотношения α+β<180° (для этого α и β необходимо предварительно перевести в градусы с десятичной дробной частью). В случае невыполнения этого соотношения вывести сообщение «СУММА УГЛОВ ПРЕВОСХОДИТ 180 ГР.» и передать управление оператору вво- да исходных данных. Формула для вычисления площади: ( ) sin 2 sin sin 2 β α β α + = C S В программе воспользоваться внутренней функцией для пе- ревода угла из градусной меры в радианную. Форма запросов при вводе исходных данных: СТОРОНА= ПЕРВЫЙ УГОЛ: ГР., МИН., СЕК.= ВТОРОЙ УГОЛ: ГР., МИН., СЕК.= Форма вывода результата: ПЛОЩАДЬ= значение S ГА. 457 № 8.14. Написать программу для вычисления площади четырех- угольного участка по заданным значениям двух противолежащих углов α, β и образующих эти углы сторон А, В и С, D 2 / ) sin sin ( β α D C B A S ⋅ + ⋅ = Углы вводить в градусах, минутах и секундах, стороны — в метрах, значение площади выводить в гектарах, округляя до 0,01 га. В программе предусмотреть проверку существования четы- рехугольника с указанными значениями сторон и противолежа- щих углов. 1 , 0 | cos 2 cos 2 | 2 2 2 2 < + − − − + β α CD D C AB B A Если указанное неравенство не выполняется, вывести сооб- щение «УЧАСТОК С УКАЗАННЫМИ ПАРАМЕТРАМИ НЕ СУЩЕСТВУЕТ» и передать управление операторам ввода ис- ходных данных. В программе предусмотреть следующие запросы при вводе исходных данных: СТОРОНЫ A, B= УГОЛ МЕЖДУ A, B: ГР., МИН., СЕК.= СТОРОНЫ C, D= УГОЛ МЕЖДУ C, D: ГР., МИН., СЕК.= Форма вывода результата: ПЛОЩАДЬ= значение S ГА. В программе воспользоваться функцией для перевода угла из градусной меры в радианную. № 8.15. Из вершины О участка, изображенного на рис. 6.7, изме- рены расстояния A, B, C до остальных его вершин и углы α 1 α 2 Написать программу для вычисления площади этого участка по формуле 2 ) sin sin ( 2 1 α α C A B S + = 458 A B α 1 α 2 С Рис. 6.7 Расстояния A, B, C измерены в метрах, углы α, β в градусах, минутах, секундах. Площадь вычислить в гектарах с точностью до 0,01 га. В программе предусмотреть следующие запросы при вводе: A, B, C= УГОЛ МЕЖДУ A и B: ГР., МИН., СЕК.= УГОЛ МЕЖДУ C и D: ГР., МИН., СЕК.= Для вычисления синусов углов, заданных в градусах, мину- тах и секундах разработать функцию. Форма вывода результата: ПЛОЩАДЬ= значение S ГА. № 8.16. Написать программу, которая определяет, как располо- жена точка с координатами X 3 , Y 3 по отношению к прямой, про- веденной через точки X 1 ,Y 1 и X 2 , Y 2 и точке с координатами X 0 , Y 0 (рис. 6.8). • X 0 Y 0 • X 3 Y 3 • X 2 Y 2 (R 1 ⋅R 2 >0) • X 3 Y 3 (R 2 =0) • X 3 Y 3 • X 1 Y 1 (R 1 ⋅R 2 <0) Рис. 6.8 Для этого программа должна вначале вычислить величину , 1 2 1 0 1 2 1 0 1 X X X X Y Y Y Y R − − − − − = Предусмотреть проверку знаменателя на равенство 0. Если знаменатель оказался нулевым ввести другие координаты точек. Затем проверить условие R 1 =0. Если это условие выполняет- ся, необходимо вывести сообщение «КОНТРОЛЬНАЯ ТОЧКА 459 ЛЕЖИТ НА ПРЯМОЙ» и передать управление операторам ввода X 0, Y 0 для исправления координат контрольной точки. Если условие R 1 =0 не выполняется, необходимо вычислить величину 1 2 1 3 1 2 1 3 2 X X X X Y Y Y Y R − − − − − = Если R 1 и R 2 совпадут, значит, точки лежат по одну сторону от прямой, если не совпадут, значит, точки лежат по разные сто- роны от прямой, если R 2 =0, значит, точка X 3 Y 3 лежит на прямой. Для вычисления R 1 и R 2 использовать внутреннюю функцию. Форма запросов при вводе: X1, Y1= X2, Y2= X0, Y0= X3, Y3= В качестве результата выводить одно из следующих сообще- ний: «ТОЧКА номер точки ЛЕЖИТ ПО ОДНУ СТОРОНУ С КОНТРОЛЬНОЙ ТОЧКОЙ» или «ТОЧКА номер точки ЛЕЖИТ ПО РАЗНЫЕ СТОРОНЫ С КОНТРОЛЬНОЙ ТОЧКОЙ» или «ТОЧКА номер точки ЛЕЖИТ НА ПРЯМОЙ». № 8.17. Написать программу для вычисления по формуле : ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ + − + − − = + ⋅ ⋅ − + ∑ ∞ = + ⋅ + 7 5 3 2 1 2 ) 1 ( 2 7 5 3 0 1 2 1 x x x x n x n n n π π Для │x│<1. Для возведения в степень разработать функцию пользователя. Число членов в разложении должен задать пользо- ватель программы. № 8.18. Написать программу для вычисления по формуле: ⎟ ⎠ ⎞ ⎜ ⎝ ⎛ + − + − − = ⋅ + ⋅ ⋅ − + ∑ ∞ = + ⋅ + 7 1 5 1 3 1 1 2 ) 1 2 ( 1 ) 1 ( 2 7 5 3 0 1 2 1 x x x x x n n n n π π Для │x│>1. Число членов в разложении должен задать пользова- тель программы. Для возведения в степень разработать функцию пользователя. № 8.19. Написать программу для вычисления по формуле: 460 ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ + ⋅ − ⋅ + ⋅ − ⋅ − = ⋅ ⋅ ⋅ − − ∑ ∞ = ⋅ − ⋅ + ! 8 2 ! 6 2 ! 4 2 ! 2 2 1 )! 2 ( 2 ) 1 ( 1 8 7 6 5 4 3 2 1 1 2 1 2 1 x x x x n x n n n n Для x<1. Число членов в разложении должен задать пользователь программы. Для возведения в степень и вычисления факториала разработать функции пользователя. Оглавление ВВЕДЕНИЕ .......................................................................................................................................... 3 180> |