Файл: Соловейчик, Р. Э. Программирование на АЛГОЛ-60 учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.10.2024

Просмотров: 96

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

42

Ввиду валкости оператора цикла, приведем еще несколько приме­ ров.

Требуется составить программу, вычисляющую функцию

и > x f

е -У

 

для значений х0(ьх )х

и yQ(h ) у

, т.е. шаговую

таблицу значений функции двух переменных с разными шагами по

этим переменным.

 

 

 

 

 

Строим эту программу в виде цикла по переменной у ,

как бы вложенной в цикл по переменной *

:

begin reel хО, xinc, xlest, х, уо, yinc, ylset, у, z ;

ВВОД (хО,

x l n c , x l e s t ,

у о ,

y i n c , у

l a s t ) ;

f o r

xt

=

xO step

x l n c

u n t il

x l e s t

do

f o r

yi

=

y f ) step

y ln c

u n t il

y l e s t

do

begin z: = x t 2 * exp ( - y ) •

печать (x.y.z )

end

end

Заметим, что внутренний оператор цикла не нужно заключать в операторные скобки begin и end , так как действие слова

ао_ наружного оператора распространяется на один оператор - это и есть внутренний оператор цикла; тот факт, что этот опе­

ратор может быть составным, не имеет значения.

 

 

Требуется составить

программу, вычисляющую функцию

 

 

т (со) =

 

к

 

 

 

 

 

 

-------------------------

>

 

 

 

 

 

110(1+1^ 0) ) (1+ 1

TgftJ)

 

 

где ^

и

Т2

- постоянные; к

- коэффициент пропорцио­

нальности;

СВ

- переменная угловая частота;

I

- переда­

точная функция;

1 -

 

.

 

 

 

 

Поставим требование составить программу так, чтобы она

вычисляла значение

т

как самую обычную шаговую таблицу и

вместе

с тем вычисляла таблицу значений

т

для

значений


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

он может быть сделан как постоянным,

так и

непостоянным. В

первом

случае возьмем шаг равным

ь.

, а

во втором случае -

равным

Ь u) - W

 

 

 

Прежде чем составлять програюау,

нужно преобразовать ис­

ходную формулу, потому что в. нее входят комплексные величины, и разделить вещественную и мнимую части:

 

 

+ Та)

" _

-

___*(1

 

А

т ы

(1+^-12^

25(i +t|(jJ2)

и ) (и -ш12л '2)(1+

 

 

Все это реализовано в следующей программе:-

 

 

•begin real

K,W ,T2,omegastart, omega

last,omega ,h,I,D,

 

 

 

T real, T imag

;

 

 

 

 

 

I

ВВОД

(K,Ti ,T2,omegastartt omega

lest, h, b )j

 

 

 

for omega«=omegastart step If J,sO then h

else

 

 

 

 

h * omega-omega until omegalast do

 

 

 

begin Di=(1+(T1

* omega )f 2)* (1+(T2 * omega)f

2)

»

 

 

T real«= -k

* (21 ♦

T2)

/ H ;

 

 

 

 

ф imags= -к *(1-T1 *

T2

* omega f 2)/(omege

ж

D)f

 

печать

(к, W,T2,

omegB.T reel,- 2 lmag)

 

 

end

end

Если требуется, чтобы эта программа давала обычную шаго­ вую таблицу, то нужно ввести ь = 0, а в противном случае - ь 4 0. Отметим, что введен специальный идентификатор для


44

знаменателя

т real

 

 

Требуется составить программу для нахождения суммы ряда

ч (}>,&)• ^ [ ( ^ г )

B in d - ^ 2 ( w f sin3® +

sin5® •••]'»

причем f

и 6

ограничены о ^ / ’^ ю и о 4

2J7".

Сподобным рядом сталкиваемся в теории теплопроводности.

Впервом варианте составляемой программы мы примем "на глаз"» что можно ограничиться суммированием сорока членов ряда, но, по всей вероятности, этого более чем достаточно.

Тогда

-

40

 

 

 

 

 

 

 

 

 

800

V

( - 1 )

i*1‘

1 _

Р 21-1

л

,

Т (р е )= 5 тГ

L

( 2i

-i'}2

)

aln(2 i - i ) 6>'

 

j_;

 

 

 

Го

 

 

 

 

причем так как нас интересует

значение

 

т (f,$)

в конкрет­

ной точке, то будем считать заданными

значения /

и

0

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

нее, чем возведение

_ 1

в степень.

 

 

Решение будет давать следующая программа:

begin real rho,

thete .slgnfaetor,

sum,

temp; Integer 1 ;

ВВОД

(rho,

theta

 

)

;

 

 

 

signfactor s = i ;

 

 

 

 

 

 

sum s = 0 ;

 

 

 

 

 

 

 

 

for

i:= 1

step 1

until

4 0

4o

 

begin sum; = sum + slgnfector

/

(2 *

i —1

2*

*(rh o/10 )t

(2

* 1 -1

)

x

sin ( (2 x

i~ l)* theta) ;

i


S i q n f a c t o r : = ” signiaotor

end ;

temp s = 800 / 9«8692 “ sum f

печать ( rho, thete, temp )

snfl

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

синуса, например, больше

10 . Затем можно упростить опера­

цию возведения

7ГГ

в

степень, что легко осуществляется

 

 

______

в операторе цикла,

если

заметить, что соответствующие степе­

ни у двух последовательных членов ряда отличаются на (»£ )2 Аналогично можно поступить и с углом, задав его начальное

значение

6

и затем последовательно прибавляя к нему

по 2 Q . Такой же прием можно применить при вычислении мно­

жителя ( 2jZ T f2

 

' *Ф°ме Torot полезно специально обозна­

чить некоторые промежуточные величины.

 

 

 

 

Тогда можно написать

 

 

 

 

 

 

 

•begin reel

rho,

theta,

signfactor,

sum, x ,

x 2 , angle,deno*

 

 

test,

temp j

 

 

 

 

 

 

.

ВВОД

( rho,

theta

) ;

 

 

 

 

 

 

signfactor:

=1 ;

sums

= О ;

xs

= r h o /

10.0

{

x2t

=

x

x

; angle': =

theta

;

denom:

=

1.0

j


46

f o r te n t:

x/1enom t 2 wh lie test <

-4 .1 o

begin sur1* =sura + signfactor * test x sin (pngle) •

x: = x * x2 •

angles = angle + 2 * theta ; denoms = denom + 2 ; '’Ingfector: = “ sthgfector

enfl •

temp; = Я00 / 9.°696 * sum ;

печать ( rh o , th e ta , temp )

end

В качестве последнего примера применения оператора цикла рассмотрим вычисление определенного интеграла и приведем два варианта этой программы. При этом будем исходить из формулы Симпсона

f (x)dxSJcsfз

[I f (a )+4f (a ♦ h)+

2f(et2h)*....*2f(b-2h) +

 

Ъ

-

л

♦4fO>-h) +

f(hjj ,

где

 

 

h=

n

, a n

- четное число,

и применим

ее к

вычислению интеграла

 

 

 

 

 

=

1т .

 

°" 4

Впервом варианте программы мы будем находить в одном цикле слагаемые, умножаемые на'4 и на 2. Но при этом возни­

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

f ( а ) + f ( h ) + 4 f ( b - h ) .

4 7 --

Цвкл проще всего организовать, каждый раз прибавляя

?h

к

управляющей переменной, начиная со

значения а + h

. В

этом

случае

х

будет определять слагаемое,

которое умножается

на 4 и

суммируется в sum 4

, a i t h

будет определять

 

слагаемое, которое умножается на 2

и суммируется в

sum 2 .

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

цикле. Так как вначале находится

sum 4

, а затем

sum

г

,

то последнее интересующее нас

значение аргумента будет

ъ-зь .

Тогда, программа, реализующая предлагаемую последовательность вычислений, будет следующей:

begin real

 

е ,

Ъ,

n,

sum 4,

sum 2,

h,

х ,

Jo;

 

 

ВВОД

 

( а, Ь, n ) ;

 

 

 

 

 

 

 

h; =

(Ъ - а )

/

n

j

 

 

 

 

 

 

 

sum 4: =

sum 2:

=

О ;

 

 

 

 

 

 

 

fo r

X!

=

а +

h

step 2 * h until

b

- 3

* h

do

 

begin

sum 4s

=

sum 4 4 1 . 0 /

(1

 

t 16)

;

 

 

 

sum 2»

=

sum 2 t

1 .0 /

(1

*

(x

+ h )t

16

)

end

;

 

 

 

 

 

 

 

 

 

 

 

 

,t„ . =h/3

* (4

*

sum 4f2

* sum 2

+1 .0 /

( 1 + a f

16)

 

 

 

4 . 0 /

(1 > ( b - h ) f l 6)

+

1 . 0 /

(1+

b f

16)) ;

печать

 

(,То)

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

 

 

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

f

t(a )4 4 f(s+ h )t f(a t 2h)] + . . . t

 

«

Тогда легко образовать цикл, начиная со значения управляю­

щей переменной,

равного а

, с шагом 2h

и конечным

зна­

чением ъ - 2h

. В этом случае мы избежим

вычислений

эн»-