Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 1 Основы программирования

____________________________________________________________________

Подробный анализ отрезков пути.

Мы написали "вычисление отрезка xi". Но как все-таки вычислять эти от-

резки? Вот тут многие "застревают" не в силах придумать что-либо. Единого рецепта как дальше придумывать алгоритм не существует. Ответ один – надо

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

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

– с трудом и долго, ну а третьи вообще не могут придумать даже простейшие алгоритмы. Так что, уважаемый читатель, не всякий может стать программи-

стом! Для этого тоже нужны определенные способности к творчеству, если хо-

тите – талант! Программист – это творческая профессия! Разумеется, как и во всякой другой творческой профессии, знания тоже играют немаловажную роль!

Вернемся к нашей задаче. Нарисуем график для облегчения.

В

d y1

y3

y2

А 0

6

10

15

t

 

Рис. 1.5. График движения поездов

 

 

Будем рассуждать, используя элементарные законы физики о прямолиней-

ном равномерном движении тел, которые изучаются в школе.

Когда муха в первый раз полетит в направлении к поезду из пункта А, то до встречи с этим поездом пройдет время:

21

1.1 Понятие алгоритма.

____________________________________________________________________

t1

 

d

 

;

(1.1)

 

 

 

 

 

 

 

(v

 

v2 )

 

В момент встречи мухи и поезда В (будем для краткости называть поезд,

вышедший из пункта В поездом В, а поезд, вышедший из пункта А, поездом А)

расстояние между поездами составит:

y1 d t1 (v1 v2 );

(1.2)

а муха пролетит расстояние:

x t1v;

(1.3)

И соответственно, при полете мухи в обратном направлении имеем:

 

 

t2

 

 

 

 

 

y1

 

,

y2 y1 t2 (v1 v2 ),

x t2v;

(1.4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(v v1 )

 

 

 

Отсюда можно вывести общую формулу:

 

 

t

 

 

y

 

 

;

x

tv при полете мухи из А к В.

 

(1.5)

 

 

 

 

 

 

 

 

 

 

 

v

v2

 

 

 

 

 

 

t

 

y

 

 

 

;

x

 

tv при полете мухи из В к А.

 

(1.6)

 

 

 

 

 

 

 

 

 

 

 

 

v

 

v1

 

 

 

 

 

 

y y

t(v1

v2 )

 

 

 

 

(1.7)

Нарисуем блок-схему с учетом полученных формул:

22

Глава 1 Основы программирования

____________________________________________________________________

 

 

 

начало

 

 

 

 

Ввод d,v,v1 ,v2 , n

 

 

 

 

Sстар=0

 

 

 

 

 

 

i=1

 

 

 

 

 

 

y=d

 

 

t

 

y

 

t

 

y

v

v2

 

v

v1

 

 

 

 

 

 

xi

t v

 

 

 

 

Sнов=Sстар+xi

 

 

 

 

 

Sстар=Sнов

 

 

 

 

y

y

t(v1 v2 )

 

 

 

 

 

Sнов, xi

 

 

 

 

 

i=i+1

 

 

 

 

 

i≤n

да

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

конец

 

 

 

Рис. 1.6. Четвертый вариант алгоритма

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

что нужно попеременно проходить через эти ветви? Используется прием, кото-

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

"семафора". Будем считать что, если флажок поднят, то нужно идти по левой веточке, если опущен, то по правой. В качестве флажка принято использовать либо целочисленную переменную, либо булевую переменную, которая может принимать только два значения:

0 – означает, что флажок опущен, 1 – означает, что флажок поднят, если

23

1.1 Понятие алгоритма.

____________________________________________________________________

это переменная целого типа и false – флажок опущен, true – флажок поднят,

если это булевая переменная.

Перерисуем блок-схему

 

 

 

 

 

 

 

 

 

 

 

 

 

начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод d,v,v1 ,v2 , n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sстар=0, i=1, F=1,y=d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

F=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F 0

 

 

 

 

 

 

 

 

 

 

 

F 1

 

 

 

 

 

 

t

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

t

 

y

 

 

 

v v2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v v

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xi

 

 

 

t v

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sнов=Sстар+xi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sстар=Sнов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

y t(v1 v2 )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sнов, xi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=i+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i≤n

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

конец

 

 

 

 

 

 

 

 

Рис. 1.7. Пятый вариант алгоритма

Построив один вариант блок-схемы, всегда нужно посмотреть, нельзя ли ее упростить?

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

S = S + xi

Далее: критерий окончания алгоритма мы определили не совсем хорошо.

24

Глава 1 Основы программирования

____________________________________________________________________

Действительно не ясно, чему равно n. Может 100, а может 1000. Допустим, мы приняли n=100, а на самом деле число отрезков оказалось равным 10, тогда 90

раз алгоритм будет работать «впустую», т.к. полученные результаты будут бес-

смысленными. Как быть? Не лучше ли определить конец алгоритма по y. Дей-

ствительно из рисунка видно, что y→0. Будем считать, что поезда встретились,

если y≤10-2. Кроме того, мы видим, что и значение очередного отрезка xi после вывода его на экран, нам не нужно, т.е. параметр i можно совсем убрать. Окон-

чательно получаем:

начало

 

 

Ввод d,v,v1 ,v2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y=d, S=0,F=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

нет

F=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F=0

 

 

 

 

 

 

F=1

t=y/(v+v2)

 

 

t=y/(v+v1)

 

 

 

 

 

 

 

 

 

 

 

 

x t v

S=S+x

y y t(v1 v2 )

S, x

нет

y≤10-2

да

конец

Рис. 1.8. Окончательная блок-схема алгоритма

Будем считать, что алгоритм больше не упростить. В следующей главе,

когда будем изучать язык программирования Pascal, мы напишем программу для этого алгоритма (см. главу 2, раздел 2.2).

25

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773