Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика,методичка

.pdf
Скачиваний:
86
Добавлен:
20.04.2015
Размер:
626.21 Кб
Скачать

Продолжение приложения В Основные стандартные функции описаны в таблице В.3.

 

 

 

 

Таблица В. 3

 

 

 

 

Функция

Тип аргумента

Тип результата

Математическая запись, комментарий

abs(x)

integer; real

integer; real

|x|

 

arctan(x)

integer; real

real

arctg(x)

 

cos(x)

integer; real

real

cos(x)

 

sin(x)

integer; real

real

sin(x)

 

exp(x)

integer; real

real

ex

 

ln(x)

integer; real

real

ln(x), x>0

sqrt(x)

integer; real

real

x ,

x 0

sqr(x)

integer; real

integer; real

x2

 

round(x)

real

integer

округляет число x до целого

trunc(x)

real

integer

отбрасывает дробную часть x

frac(x)

real

real

Дробная часть числа x

int(x)

real

real

отбрасывает дробную часть x

random(x)

integer

integer

генерирует случайное число

 

 

 

в диапазоне от 0 до x

Остальные математические функции можно выразить через основные, например:

 

tg(x)=sin(x)/cos(x);

 

 

xa =exp(a*ln(x)), x

 

Основные операции описаны в таблице В.4.

Таблица В.4

 

 

 

 

 

Приоритет

Операция

Действие операции

1

+,

Присваивание знака

 

not

Логическое отрицание

2

*, /

Умножение, деление

 

div, mod

Целочисленные операции

 

and

Логическое произведение

3

+,

Сложение, вычитание

 

or, xor

Логические суммы

4

<>, <, >, <=, >=, =

Отношения (сравнения)

 

in

Принадлежность

 

 

к множеству

Операции выполняются с учетом их приоритета (1 – самый высокий). Результатом операции div является частное от деления двух чисел, а mod

остаток, например: (9-2) div 2=3;

7 mod 2=1.

 

31

Продолжение приложения В

1. Программирование алгоритмов линейной структуры

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

1.1. Вычислить высоты треугольника со сторонами a,b,c по формулам:

ha ( 2 / a ) p( p a )( p b )( p c ); hb ( 2 / b ) p( p a )( p b )( p c );

hc ( 2 / c ) p( p a )( p b )( p c ), где p ( a b c ) / 2.

Для решения любой задачи может иметь место несколько алгоритмов. Из всех возможных алгоритмов следует выбирать наилучший в смысле некоторого критерия. Часто в качестве критерия используют либо оценку точности решения задачи, либо затраты времени на ее решение. При организации решения задачи 1.1 для исключения повторений вычислять высоты следует не по приведенным выше формулам, а используя промежуточную переменную:

t 2

p( p a )( p b )( p c ) , ha t / a,

hb t / b,

hc t / c.

С учетом преобразований схема алгоритма решения задачи будет иметь

вид, представленный на рис. В.1

 

Начало

 

 

 

 

Начало

 

Начало

 

a, b, x

 

 

 

 

a, b, c

 

x, n

да

x a

 

 

 

 

p=(a+b+c)/2

 

y=sin x + 0,5

 

нет

 

 

 

 

 

 

 

t=2 p(p-a)(p-b)(p-c)

да

 

нет

z=sin x

y=0

 

 

 

 

 

 

 

 

да

x b

ha=t/a

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

z=x3/y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hb=t/b

 

 

 

 

 

 

 

 

 

 

z=tg x

 

 

 

 

 

z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hc=t/c

 

 

 

 

 

 

 

 

z=cos x

 

 

 

y=0

 

 

 

 

 

 

 

 

z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ha , hb ,

hc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

конец

конец

 

 

 

 

 

 

 

 

 

 

 

конец

 

 

 

 

 

Рис.В.1. Рис.В.2. Рис.В.3. 32

Продолжение приложения В

1.2. Вычислить площадь поверхности и объем усеченного конуса по следующим формулам:

S=π(R+r)l+πR2+πr2;

V=(1 / 3 ) (R2+r2+Rr)h.

1.3. Вычислить координаты центра тяжести трех материальных точек с массами m1,m2 ,m3 и координатами (x1,y1 );(x2 ,y2 );(x3 ,y3 )по формулам:

xс=(m1x1+m2 x2+m3x3 ) /(m1+m2+m3 ); yс=(m1 y1+m2 y2+m3 y3 ) /(m1+m2+m3 ).

1.4. Вычислить координаты точки, делящей отрезок a1a2 в отношении n1:n2 по формулам:

x=(x1+ x2 ) /( 1+ );

 

y=(y1+ y2 ) /( 1+ ),

где =n1 / n2 .

1.5. Вычислить медианы треугольника со сторонами a,b,cпо формулам:

ma=0,5 2b2+2c2 a2 ; mb=0,5 2a2+2c2 b2 ;

mc=0,5 2a2+2b2 c2 .

1.6. Вычислить значение функции

y=ae axsin( ω x ),

при x=(π / 2 f) / ω.

1.7. Вычислить значения функций:

 

 

y=(e x1+e x2 ) / 2; z=(a

x

b x ) / c,

 

1

2

где x1=(b+ b2 4ac ) / 2a,

x2=(b b2 4ac ) / 2a.

1.8. Определить высоту треугольника, если его площадь равна S, а основание больше высоты на величину a.

33

Продолжение приложения В

2. Программирование алгоритмов разветвляющейся структуры

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

2.1. Вычислить значение функции

z=x3 / y, где y=sin( n x )+0,5.

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

Действительно, если y=0 , задача не может быть решена, так как деление

на 0 невозможно. Поэтому в алгоритме необходимо предусмотреть этот случай и выдать в качестве результата информацию о том, что y=0 . Таким образом, рассматриваемый вычислительный процесс должен иметь две ветви: в одной, если y 0 , необходимо вывести и отпечатать значение переменной z , а в

другой – вывести на печать информацию, что y=0 . Блок-схема алгоритма

решения этой задачи представлена на рис. В.2. Этот вычислительный процесс можно описать условным выражением:

Вычислить z=x3/y, если y 0. Вывести y=0, если y=0.

В блоксхеме до блока номер 4 располагаются блоки сначала одной ветви (блоки 5,6), а затем второй ветви (блок 7). Поскольку после выполнения блоков первой ветви нет необходимости выполнять блоки второй ветви, осуществляется переход сразу к концу алгоритма (к блоку 8).

В алгоритме дважды нарушается естественный порядок выполнения

блоков: 1) при проверке условия y=0 (условный переход); 2) после выполнения блоков первой ветви (безусловный переход).

2.2. Вычислить значение функции:

z=sin x , если x a; z=cos x , если a<x<b; z=tg x , если x b.

34

Продолжение приложения В

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

Блок 3 проверяет условие x a, а в случае его выполнения осуществляется переход к блоку 4, вычисляющему z=sin x. Если x>a, то блок 5 проверяет условие x b. Если это условие выполняется, то осуществляется переход к блоку 6, вычисляющему z=tg x. В противном случае x лежит в интервале

между a и b и происходит переход к блоку 7, вычисляющему z=cos x.После вычисления по любой из формул осуществляется переход в общую ветвь к блоку печати.

2.3. Вычислить корни квадратного уравнения ax2+bx+c=0. Если d=b2 4ac 0, то корни действительные; следовательно, необходимо

вычислить x1,2=e f. Если d<0, то корни мнимые; следовательно, необходимо вычислить e и f по формулам e= b/(2a), f= |b2 4ac|/(2a).

2.4. Вычислить значение функции

 

z=3,67e x , если

n2 x 0;

z=0,89ex , если

n2 x<0

2.5. Найти квадрат наибольшего из двух чисел a и bи вывести на печать признак N=1, если наибольшим является a , и N=2, если наибольшим является b.

2.6. Определить, попадает ли точка с координатами x0 ,y0 в круг

радиусом r . Присвоить признаку N=1, если точка находится внутри круга, и

N=0 , если точка вне круга.

2.7. Вычислить значение функции:

z=ln x , если x 1;

z=1, если 1<x<1; z=ex , если x 1.

35

Продолжение приложения В

2.8.Определить, в каком квадранте находится точка с координатами x,y ,

ивывести на печать номер квадранта.

2.9.Округлить действительное положительное число x , меньшее 5, до ближайшего целого числа:

NX=0,если x<0,5;

NX=1,если 0,5 x<1,5; NX=2,если 1,5 x<2,5; NX =3,если 2,5 x<3,5; NX=4,если 3,5 x<4,5;

NX =5,если x 4,5.

2.10. Составить программу для решения квадратного уравнения

ax2+bx+c=0

2.11.Определить максимальное четное число из двух введенных.

2.12.Определить, можно ли из отрезков с длинами a,b,cпостроить треугольник.

2.13.Для двух чисел x,y определить, являются ли они корнями уравнения:

ax4+by2+c=0.

2.14. Вычислить значения функции z в зависимости от значения x :

z=1+ sin x , если x< 0,8; z=1 x1,7 , если x>1;

z=x+1, в противном случае.

2.15.Если среди трех чисел x,y,z имеется хотя бы одно четное, то найти максимальное число, иначе – минимальное.

2.16.Ввести два числа a и b. Меньшее заменить полусуммой, а большее удвоенным произведением.

3.Программирование алгоритмов циклической структуры

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

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

36

Продолжение приложения В

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

Если число повторений тела цикла заранее известно, то чаще всего применяется оператор цикла с параметром:

FOR<параметр цикла>:=<нач. знач.>TO<кон. знач.>DO<оператор>

FOR<параметр цикла>:=<нач. знач.>DOWNTO<кон. знач.>DO<оператор>

Где <параметр цикла> – величина, которая изменяется в цикле (переменная типа Integer);

<нач. знач.> – величина, задающая начальное значение параметра цикла; <кон. знач.> – величина, задающая конечное значение параметра цикла.

Шаг наращивания параметра цикла строго равен 1. При замене зарезервированного слова TO на DOWNTO шаг наращивания параметра цикла равен (-1).

3.1. Осуществить ввод с клавиатуры целого числа N и вычислить суммы всех целых чисел от 1 до N.

Составим программу: Var i,N,S: integer; Begin

Write ('введите N'); Readln (N); S:=0;

FOR i:=1 TO N DO

S:=S+i; Writeln ('S=',S); End.

3.2. Вычислить и вывести на печать значения функции y=a3 /(a2+x2 )

при x изменяющемся от 0 до 3 с шагом 0,1.

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

формуле:

n=](xк x0 ) / h[+1;

где x0 и xк – соответственно начальное и конечное значение аргумента;

h – шаг изменения аргумента.

Перед первым выполнением цикла необходимо задать начальное значение, равное 0, а затем организовать 31 раз вычисление и печать значений функции. При каждом новом выполнении цикла необходимо изменять аргумент на шаг равный 0,1. Чтобы процесс был конечным, необходимо задать условие окончания цикла.

Таким образом, для организации цикла необходимо: 37

Продолжение приложения В

1.Задавать перед циклом начальное значение переменной, изменяющейся в цикле.

2.Изменять значение переменной перед каждым новым повторением цикла.

3.Проверять условие окончания цикла.

4.Управлять циклом, т. е. переходить к его началу, если он незакончен, или выходить из него по окончании.

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

Схема алгоритма приведена на рис. В.4 На схеме блок 3 выполняет первую функцию, необходимую для

организации цикла, блок 6 – вторую, блок 7 – третью и четвертую функции. Схема алгоритма получается во многих случаях более компактной и наглядной, если для ее построения использовать блок начала цикла, который выполняет все функции, необходимые для его организации (рис. В.5).

3.3. Вычислить значения членов бесконечного ряда xn/n! .

Здесь имеет место итерационный цикл, так как заранее не известно, при

каком n выполняется условие xn/n! . Для итерационных циклов число повторений зависит от некоторого промежуточного или окончательного результата, а не от параметра цикла.

Сравнивая два соседних члена ряда, видим, что yn/yn-1=x/n. Поэтому для уменьшения времени счета, при вычислении текущего члена ряда

целесообразно использовать в цикле рекуррентную формулу yn=yn-1 x/n. Чтобы использовать эту формулу для вычисления значения первого члена

ряда y1=y0(x/1), необходимо, чтобы заданное начальное значение y0 было

равно 1. Параметром, изменяющимся в этом цикле, будет номер n члена ряда.

Тогда формула для вычисления значения текущего члена ряда будет иметь вид

y=yx/n.

Схема алгоритма такого вычислительного процесса приведена на рис. В.6. Если использовать для организации цикла блок начала цикла, то в нем надо указать в качестве последнего значения параметра цикла некоторое большое

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

Оператор цикла с предпроверкой условия:

WHILE <условие>DO<оператор>

Указанный оператор выполняется повторно до тех пор, пока условие истинно. Действие его таково: если при выполнении этого цикла условие ложно сразу же, то оператор, стоящий после DO , не выполняется ни разу.

38

Продолжение приложения В

Оператор цикла с постпроверкой условия:

REPEAT<группа операторов>UNTIL<условие>

В этом операторе, в отличие от оператора цикла с предусловием, условие проверяется после выполнения тела цикла. При этом тело цикла выполняется хотя бы один раз и до тех пор, пока условие ложно. Если в цикле WHILE выполняется несколько операторов, то они объединяются в один составной и заключаются в операторные скобки BEGIN и END, а в цикле REPEAT это не делается.

Начало

a

x=0

y=a3/(a2+x)

y

 

x=x+0,1

да

нет

 

x 3

конец

Начало

Начало

a

x,

 

x = 0..3,0.1

y=1

 

y=a3/(a2+x2)

n=1

 

y

y=y x/n

y

n=n+1

конец

 

да

y>

 

 

нет

 

конец

Рис. В.4. Рис. В.5. Рис. В.6.

3.4. Вычислить значение функции y= x3 4x+1 , пользуясь оператором

|x|+1

цикла WHILE, при x , изменяющемся в диапазоне xнач x xкон с шагом

x .

Представим решение этой задачи в виде блок-схемы (рис. В.7).

39

Составим программу:

Var x,y,xN,xK,dx:real; Begin

Writeln ('введите xN,xK,dx); Read (xN,xK,dx);

X:=xN;

WHILE x<=xK DO begin Y:=(x*sqr(x)-4*x+1)/(abs(x)+1); Writeln('x=',x,' y=',y); X:=x+dx;

End;

End.

Продолжение приложения В

Начало

xN,xK,dx

X = xN

X

x

нет

 

 

 

да

 

 

 

y=(x3-4x+1)/|x|+1

x, y

x=x+dx конец

Рис. В.7

3.5. Вычислить сумму целых четных чисел до 10 включительно. Представим решение этой задачи в виде блок-схемы (рис. В.8).

Составим программу:

Var S,i:integer; Begin

S:=0; i:=0; Repeat S:=S+i; i:=i+2 Until (i>10);

Writeln ('i=',i' S=',S); End.

Начало

S=0

i=0

S=S+i

i=i+2

нет

i>10

i,S

конец

Рис. В.8

40