You are on page 1of 40

Алгоритми

Ще разгледаме:
 Същност на алгоритмите
 Свойства на алгоритмите
 Видове алгоритми
 Структура на алгоритмите – величини, изрази и
оператори.
Задача: Баща и двамата му сина тръгнали
на пътешествие, но неочаквано се озовали
пред пълноводна река. Намерили лодка, която
вози не повече от 100 кг. Как да постъпят за
да преминат реката, ако бащата тежи 100
кг, а синовете му по 50 кг?
1. С1, С2 – преминават реката;
2. С1 се връща;
3. Б – преминава реката;
4. С2 се връща;
5. С1, С2 – преминават реката;

Това са пет указания, които, ако


бъдат изпълнени, задачата ще
бъде решена.
Задача: Нека е дадена отсечката АВ. Опишете
последователност от стъпки, по които трябва да се
премине, за да се построи симетралата на дадената
отсечка.
1. Построяваме окръжност k1(A, r), r > 0,5AB
2. Построяваме окръжност k2(B, r)
3. Построяваме пресечните точки Т1, Т2 = k1k2
4. Построяваме SAB = Т1 Т2 – симетралата на АВ.

При тази задача описахме система от


указания, упътвания, които, ако бъдат
изпълнени ще построим симетралата на
отсечката АВ.
 Точното и разбираемо за изпълнителя описание на
действията, които трябва да се извършат, за да се постигне
определен резултат, се нарича алгоритъм.

 Действието, което изпълнителя може да извърши


самостоятелно без допълнителни пояснения, се нарича
елементарно действие.

 Извършването на едно елемнтарно действие от


изпълнителя, се нарича стъпка.
Произход на думата алгоритъм

 Мохамед ибн Муса ал Хорезми


 Арабски математик описал
 представянето на числата в 10-ична БС
 извършването на аритметичните операции
с тях
Характеристики на алгоритъма
 За създаване на алгоритъм е необходимо множество от
обекти и операции с тях. Например, естествените
числа с аритметичните операции и сравняването.
 Алгоритъмът решава някаква задача само с помощта
на избраните операции. Задаваните обекти се наричат
входни данни или вход, а получаваните обекти –
резултат или изход. Например: „Дадени са числата 12
и 30. Намерете техния НОД.“
 Алгоритъмът е процедура, задаваща последователност
от операции, която изпълнена над входните данни на
екземпляр на задачата, дава очаквания резултат.
 Процедурата трябва да е детерминирана – който и да
я изпълни над едни и същи входни данни, трябва да
получи един и същ резултат.
 Процедурите, които наричаме алгоритми, трябва да
водят до намиране на резултата чрез краен брой
стъпки. Този брой определя бързодействието на
алгоритъма.
 В алгоритъма е възможно някои последователности от
операции да бъдат повтаряни многократно. Такива
повторения се наричат цикли.
Видове алгоритми
 Линейни
 Разклонени
 Циклични
Линейни алгоритми
Когато броят на указанията е равен на броя действия, които се
извършват при изпълнение на алгоритъма, говорим за линейни
алгоритми.
 При тях елементарните действия се извършват
последователно, едно след друго, следвайки номерацията си.

Пример: Да се опише алгоритъм, който намира сумата на две числа


X и Y.
1. Начало
2. Въведи X
3. Въведи Y
4. Пресметни S = X +Y;
5. Изведи S;
6. Край
Разклонени алгоритми
Когато броят на указанията е по-голям от броя действия, които се извършват
при изпълнение на алгоритъма, говорим за разклонени алгоритми.
При този вид алгоритми в някое от указанията има поставено условие. Ако
това условие е изпълнено се изпълняват определени елементарни действия, а
ако условието не е изпълнено, се изпълняват други елементарни действия,т.е.
възможно е някои от указанията да бъдат прескочени.

Пример: Да се опише алгоритъм чрез който се решава линейно


уравнение ax + b = 0
1. Начало
2. Въведете a и b;
3. Ако a = 0, то отиди на стъпка 4, иначе – на стъпка 5;
4. Ако b = 0, то изведи “всяко х е решение”, иначе изведи “няма решение”.
Отиди на стъпка 7;
5. x = -b/a
6. Изведи х
7. Край
Циклични алгоритми
 Когато броят на указанията е по-малък от броя действия, които се
извършват при изпълнение на алгоритъма, говорим за циклични
алгоритми.
 В този случай някои указания се изпълняват многократно.

Пример: Да се опише алгоритъм чрез който се пресмята сумата на


първите N естествени числа.
1. Начало
2. Въведете N
3. I = 1
4. S = 0
5. S = S + I
6. I = I + 1
7. Ако I <= N отиди на стъпка 5, иначе отиди на стъпка 8
8. Отпечатай S.
9. Край
Представяне на алгоритми

 словесно
 блок – схеми
 език за програмиране
Словесно

 Казваме, че пресметнатата
стойност на израза се
присвоява на
променливата.
Блок-схеми
 Блок-схемният език е използван много в зората на
прогромирането. Днес той е позагубил своето
практическо значение, но остава най-подходящото
средство за обучение в техниката на разработване и
описване на алгоритми.
 Основното му качество е, че е графичен и позволява
да се представят по-лесно разклоненията в
алгоритъма.
 Всеки блок определя действие, а когато действието е
изпълнено, работата на алгоритъма продължава с
блока, до който води излизащата стрелка.
Основни блокове, използвани в блок-
схемите

 Блок за начало на блок-схемата

Начало

Всяка блок-схема трябва да


съдържа точно един такъв
блок.
Основни блокове, използвани в блок-
схемите
 Блок за вход или изход

В блока за вход се въвеждат В блока за изход се


величините, които са изписва крайният резултат
необходими за изпълнението от изпълнението на
на алгоритъма. алгоритъма.
Основни блокове, използвани в блок-
схемите
 Блок за обработка (изчисления)

Изчисляват се изрази и стойността им се присвоява на


променлива.
Съдържанието на блока има вида:
променлива = израз
“=“ е команда за присвояване (а не знак за равенство)
Основни блокове, използвани в блок-
схемите
 Условен блок

да

не

В блока се записва логически израз – условие. Ако това


логическо условие има стойност “да” се изпълняват
блоковете, сочени от стрелката “да”. Ако логическото
условие има стойност “не” се изпълняват блоковете,
сочени от стрелката “не”.
Основни блокове, използвани в блок-
схемите
 Блок за край

Край

Определя края на алгоритъма.


Всяка блок-схема трябва да съдържа
точно един такъв блок.
Основни блокове, използвани в блок-
схемите
 Свързваща стрелка

Осъществява връзка между


блоковете и е прието да е
хоризонтална или вертикална.
Решаване на линейно уравнение
ВИДОВЕ БЛОК-СХЕМИ
 Линейни

 Разклонени

 Циклични
ЛИНЕЙНИ

При тях липсва условен блок и при


изпълнението на алгоритмите се
преминава задължително през всички
блокове.

Линейните блок-схеми описват


линейни алгоритми.
ЛИНЕЙНИ
Задача: Опишете алгоритъм чрез блок-схема, който
пресмята и извежда лице на кръг и дължина на
окръжност, по зададен радиус.
ЛИНЕЙНИ
Начало

Въведи R

C = 2*3.14*R;
S = 3,14 * R;

Изведи C, S

Край
РАЗКЛОНЕНИ

При този вид блок-схеми винаги има поне един


условен блок, който разклонява алгоритъма. В
зависимост от стойността на логическия израз
(условието) се изпълняват различни блокове от
блок-схемата.
РАЗКЛОНЕНИ
Задача: Опишете алгоритъм чрез блок-схема за пресмятане
на лице на триъгълник по страна и височина към нея, като
използвате условна команда.
РАЗКЛОНЕНИ

Начало

Въведи a и h

a<=0 да
или
h<=0
не
S = a * h / 2;

Изведи S

Край
ЦИКЛИЧНИ

При този вид блок-схеми съществува група от


блокове, които са описани веднъж, но се
изпълняват многократно (циклично) за
различни стойности на някои от участващите
в тях величини.
Самият цикъл може да бъде описан чрез блок-схема по един от
следните начини:

Задаване на начални
Задаване на начални
стойности стойности

не
тяло
условие

да
модификация
тяло

да
условие модификация

не

Цикъл с постусловие Цикъл с предусловие


Използвани са следните означения:
1. начални стойности – задават се начални стойности на величини,
участващи в цикъла.
2. тяло – група от блокове, които ще се изпълняват многократно.
3. модификация – променя се стойността на поне една величина,
участваща в условието на цикъла.
4. условие – този блок определя дали да се изпълни тялото на цикъла
още веднъж или не.
Циклични блок-схеми
Пресмятане на произведението F=1.2.3.4…n

начало Това е цикъл с предусловие, но


може да се направи и с цикъл с
постусловие (следусловие).
вход: n Тогава условието трябва да се
промени на i > n. Изходът от
цикъла е при стойност на
F:=1 условието “да”, а тялото се
i:=1 i:=i + 1 повтаря при “не”.

да F:=F*i
i<=n
не
изход: F
Известни алгоритмични задачи:
1. Вълк, коза и зеле да преминат
от другата страна на реката с 1 лодка.
 В лодката може да се вози само 1 обект.
 На един бряг не могат да седят ВК, КЗ
2. Имаме три съда с вместимост 8, 5 и 3 литра.
Съдът от 8л. е пълен с вода.
Разделете водата на 2 равни части.
1) 8 0 0
2) 3 5 0
3) 3 2 3
4) 6 2 0
5) 6 0 2
6) 1 5 2
3л. 7) 1 4 3
8л.
8) 4 4 0
5л.
4л.
3л. 3л.
2л.
1л.
Задача за ханойските кули:
 На 3 пилона има 3 диска.
 Прехвърлете ги от левия на десния пилон.
 Можете да поставяте само по- малък диск върху по- голям
диск.

1
2

Ляв пилон Среден пилон Десен пилон


Охлюв в кладенец:
 Охлюв се катери от дъното на кладенец дълбок 6
м - нагоре.
За 1 денонощие минава 2м нагоре и 1м надолу.
За колко денонощия ще се изкачи?

1 • Колко пъти се повтарят дей ствията


6 м. 1 изкачване 2м и слизане 1м?
• Колко пъти ще се повторят ако
1 кладенеца е дълбок 12м?
1

1
Задача
 Опишете алгоритъм за размяна на стойностите на две
променливи като използвате трета променлива.
 Опишете алгоритъм, който решава квадратното
уравнение ax2+bx+c=0
 Да се опише алгоритъм, чрез който се пресмята
произведението на първите N естествени числа
 Съставете блок-схема на алгоритъм за намиране на
лицето и периметъра на правоъгълник със страни А и
В (линеен алгоритъм).
 Съставете блок-схема на алгоритъм за проверка дали
три дадени числа А, В и С са страни на триъгълник.
Задача
 Имаме две точки M(x,y) и N(x,y), за които са въведени
координатите им в равнината. Търсим тяхното
разстояние. Да се състави линеен алгоритъм за
изчисляване разстояние между две точки и се изчертае
блок схема за него.

You might also like