Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Поняття алгоритму.doc
Скачиваний:
22
Добавлен:
11.02.2016
Размер:
853.5 Кб
Скачать

Шестиугольник 646

In, ik, di

iПрямая со стрелкой 642Прямая со стрелкой 643Прямая со стрелкой 644Прямая со стрелкой 641n – стратове значення

iПрямая со стрелкой 640k – кінцеве значення

d

тіло циклу

i – крок циклу

іПрямая со стрелкой 638– параметр циклу

Соединительная линия уступом 636Прямая со стрелкой 637

Те, що міститься в тілі циклу, повинно впливати на умову циклу. Умова повинна бути написана із коректних значень і виразів, що визначені ще до першого виконання циклу.

Реалізація алгоритму суми ряду

Як зазначалося раніше, один і той же алгоритм можна представити кількома способами. Для демонстрації цієї особливості алгоритму розглянемо знаходження суми натурального ряду чисел ві 1 до 100. Спочатку зобразимо даний алгоритм у вигляді блок-схеми.

Опишемо даний алгоритм на мові Pascal.

Прямая со стрелкой 613Прямая со стрелкой 601Прямая со стрелкой 602Прямая со стрелкой 603Прямая со стрелкой 604Прямая со стрелкой 605Прямая со стрелкой 608Прямая со стрелкой 606Прямая со стрелкой 607

початок

i:=1;

S:=0

S:=S+i

i:=i+1

i<=100

S

кінець

Спосіб 1.

Program sum1;

const N=100;

var i, S: integer;

begin

i:=1;

S:=0;

while i<=100 do

begin

S:=S+i;

i:=i+1

end;

write(‘S=’,S)

end.

Спосіб 2.

Program sum2;

const N=100;

var i, S: integer;

begin

i:=1;

S:=0;

repeat

S:=S+i;

i:=i+1

until i>N;

write(‘S=’,S)

end.

Спосіб 4.

Program sum4;

const N=100;

var i, S: integer;

begin

S:=0;

for i:=N downto 1 do

S:=S+i;

write(‘S=’,S)

end.

Блок-схема: знак завершения 614

S:=0; i:=1

Шестиугольник 616

i:=1,n

S:=S+i

Блок-схема: данные 619Блок-схема: знак завершения 621Прямая со стрелкой 620Прямая со стрелкой 622Прямая со стрелкой 623Прямая со стрелкой 624Прямая со стрелкой 625Прямая со стрелкой 626Прямая со стрелкой 627Прямая со стрелкой 628Прямая со стрелкой 629Прямая со стрелкой 631Прямая со стрелкой 630Прямая со стрелкой 632

Спосіб 3.

Program sum3;

const N=100;

var i, S: integer;

begin

S:=0;

for i:=1 to n do

S:=S+i;

write(‘S=’,S)

end.

Алгоритм знаходження простих чисел (решето Ератосфена)

Розглянемо алгоритм генерації послідовності простих чисел, що не перевищує заданого довільного числа. Нагадаємо, що простим вважають таке ціле додатнє число, якщо воно має тільки два дільники – саме це число та 1. Число 1 не є простим. Для початку складемо послідовність цілих чисел від 2 до n, із якого ми повинні будемо вибирати прості числа. На першому проході ми видаляємо всі числа, котрі діляться на 2, тобто 4, 6 і т.д. Потім із списку вибирають наступний елемент (в даному випадку 3) та видаляємо із списку всі числа, що діляться на нього. В цій версії простого алгоритму існує деяка накладка, так як деякі із чисел, наприклад 6, повинні видалятися із списку більше одного разу. Для числа 4 не потрібно виконувати спеціальний прохід по циклу, так як число 4 кратне 2, тому воно буде видалене із списку на першому проході. Точно так не потрібно виконувати прохід і для всіх інших чисел, що були видалені із списку в попередніх проходах.

Наступним числом, що залишилось в списку та використовується на третьому проході буде число 5. Робота алгоритму продовжується до тих пір, поки в списку існують числа, які можна видалити. Числа, що залишилися після проходу алгоритму – прості.

Для прикладу розглянемо процес пошуку простих чисел, що не перевищують n=25:

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

2 3 5 7 9 11 13 15 17 19 21 23 25

2 3 5 7 11 13 17 19 23 25

2 3 5 7 11 13 17 19 23

Для цього прикладу не потрібно більшої кількості проходів по списку, так як із нього на розглянутих проходах видалені всі складені числа. Таким чином, в списку залишились тільки впорядковані прості числа, менші або рівні 25.

Виникає питання: при якому найбільшому значенні числа p в списку ще залишаються кратні йому числа? Якщо p – число, кратні якому підлягають видаленню із списку на даному проході, то почати розгляд слід з числа p*p, оскільки всі менші кратні йому числа - 2p, …, (p-1)p вже були видалені на попередніх проходах. Це спостереження дозволить запобігти видаленню із списку одного і того ж числа більше одного разу. Очевидно, що p*p не повинно перевищувати n, тому значення p не повинно перевищувати , заокруглення до цілого числа в нижню сторону. На математичній мові це записується як, тобто за допомогою функції, що називають «підлога» (заокруглення вниз,floor).

Намалюємо блок-схему алгоритму «Решето Ератосфена».

Блок-схема: знак завершения 468Блок-схема: данные 466Блок-схема: решение 453Блок-схема: процесс 469Блок-схема: процесс 470Блок-схема: процесс 452Блок-схема: процесс 460Блок-схема: решение 544Блок-схема: решение 547Блок-схема: процесс 479Блок-схема: процесс 592Блок-схема: решение 551Блок-схема: процесс 552Блок-схема: процесс 561Блок-схема: решение 461Блок-схема: решение 462Блок-схема: процесс 463Блок-схема: процесс 576Блок-схема: знак завершения 584Прямая со стрелкой 467Прямая со стрелкой 465Прямая со стрелкой 464Прямая со стрелкой 472Прямая со стрелкой 471Прямая со стрелкой 473Прямая со стрелкой 474Прямая со стрелкой 475Прямая со стрелкой 476Прямая со стрелкой 478Прямая со стрелкой 477Прямая со стрелкой 545Прямая со стрелкой 546Прямая со стрелкой 548Прямая со стрелкой 590Прямая со стрелкой 594Прямая со стрелкой 596Прямая со стрелкой 595Прямая со стрелкой 549Прямая со стрелкой 550Прямая со стрелкой 562Прямая со стрелкой 591Прямая со стрелкой 553Прямая со стрелкой 554Прямая со стрелкой 555Прямая со стрелкой 556Прямая со стрелкой 557Прямая со стрелкой 558Прямая со стрелкой 559Прямая со стрелкой 560Прямая со стрелкой 563Прямая со стрелкой 564Прямая со стрелкой 565Прямая со стрелкой 566Прямая со стрелкой 580Прямая со стрелкой 567Блок-схема: данные 443Прямая со стрелкой 574Прямая со стрелкой 586Прямая со стрелкой 585

початок

n>=2

p<=n

A[p]:=p

p:=p+1

p:=2

p*p<=n

A[p]<>0

Прямая со стрелкой 423

p:=p+1

j:=p*p

j<=n

A[j]:=0;

j:=j+p

i:=2;

p:=2

p<=n

A[p]<>0

L[i]:=A[p]

i:=i+1

p:=2

Блок-схема: процесс 446

p:=p+1

Прямая со стрелкой 579

L[i]

кінець

+

-

+

-

+

-

+

-

+

-

+

-

Прямая со стрелкой 583Прямая со стрелкой 578Прямая со стрелкой 582Прямая со стрелкой 445Прямая со стрелкой 581

Program resheto_Eratosphena;

const n=100;

var i, j, p: integer;

A: array[2..n] of integer;

L: array[2..n] of integer;

begin

for p:=2 to n do

begin

A[p]:=p;

write(A[p],’ ‘)

end;

writeln;

for p:=2 to trunc(sqrt(n)) do

if A[p]<>0 then

begin

j:=p*p;

while j<=n do

begin

A[j]:=0;

j:=j+p

end

end;

i:=2;

for p:=2 to n do

if A[p]<>0 then

begin

L[i]:=A[p];

write(L[i],’ ‘);

i:=i+1

end;

writeln;

readln;

end.