Алгоритми

     Алгоритъм – система, която описва последователност от елементарни действия и реда на тяхното изпълнение, за получаване на определен резултат.
  Стъпка - изпълнението на едно елементарно действие.
    Терминът алгоритъм произлиза от Абу Джафар Мохамед ибн Муса ал-Хорезми арабски математик, роден е в региона на град Хорезми. Живял и работил в Багдат в периода: 783 - 840г.
Известен с научния си трактат, как да бъдат представяни числата в десетична бройна система и да се извършват пресмятания с нея. От него в Европа започва използването на десетичната бройна система или така наречените "арабски цифри". Смята се, че той е поставил основите на алгебрата.
Jafar Mohamed
Абу Джафар Мохамед ибн Муса ал-Хорезми

Алгоритми се използват от дълбока древност за описание на сложни действия.
Например: извършване на аритметични действия с многоцифрени числа, изчисление лица на фигури и др. Когато се пресича улица също се спазват определена последователност от действия. Спираме оглеждаме се първо наляво, после надясно и ако няма движеща се кола пресичаме. Не всяка последователност от елеменарни действия е алгоритъм. За да бъде алгоритъм, тази последователност трябва да отговаря на следните изисквания: Дискретност, яснота, формалност определеност, масовост, крайност, резултатност.

I. Свойства на алгоритмите

      Дискретност - алгоритъм трябва да бъде описан от краен брой последователни стъпки.
      Яснота – всяка стъпка да бъде точно определена и еднозначно да посочва всяка следващата стъпка на изпълнителя.
     Формалност – стъпките да се извършват, механично, без нужда от допълнителна информация.
     Определеност – един и същ алгоритъм при едни и същи входни данни винаги да връща един и същ резултат, без изключение..
     Масовост – един и същ алгоритъм решава еднотипни задачи различаващи се само по входните данни.
     Крайност – изпълнението на алгоритъма завършва след краен брой стъпки.
      Резултатност – изпълнението на алгоритъма завършва след краен брой стъпки, като дава един или много резултати.
     Ефективност – сравняване на алгоритмите решаващи една и съща задача (проблем) на базата за ефективното използване на компютърните ресурси и времето необходимо за изпълнение на алгоритъма.
II. Описание на алгоритмите

     Описанието на алгоритмите чрез естествените езици, дава възможност за грешно интерпретиране, двусмислие или неразбиране, поради тези причини алгоритмите се представят чрез:
      псевдо код - смесица от совесен език и общо приети математически означения. Използва се за най-общо представяне на алгоритмите;
      блок-схема - използват се графично представени геометрични фигури за основните действия, за връзките между тях се използват стрелки. Много добър нагледен начин представяне и изучаване на алгоритмите. Представя най-общата идея на алгоритъма.
езици за програмиране -точно и ясно представяне на алгоритмите. За всеки алгоритъм се създава програма, която се изпълнява на компютър. Езиците за програмиране имат точно определени правила за представяне на алгоритмите. Синтаксис (правопис) и семантика (смисълът, значението).

Блок - схема

Блок Описание Пример
nacalo
Начален блок.
Началната точка, от която започва изпълнението на алгоритъмът.Съществува един блок начало, има една изходяша стрелка, няма входящи стрелки.
nacalo
nacalo
Блок за край на алгоритъма. Може да има няколко блока за край. В този блок може да съществуват няколко входящи стрелки, но няма изходящи.
nacalo
nacalo
Блок за обработка на данни.
Присвояват се стойности и изчисляват се изрази. Може да има няколко входящи стрелки и само една изходяща.
nacalo
nacalo
Блок за деклариране на променливи.
nacalo
nacalo
Блок за вход или изход.
В него се представят величините необходими за изпълнение на алгоритъма. Възможно е да има няколко входящи, но само една изходяща стрелка.
nacalo
nacalo
Условен блок.
В него се записва условие, което се проверява. Ако условието е вярно, алг. продължава към стрелка с надпис "да". Ако условието е не вярно, алг. продължава към стрелка с надпис "не". Може да има няколко входящи, но само две изходяща стрелки.
nacalo
nacalo
Блок за подалгоритъм.
Показва, че на това място ще бъде изпълнен друг подалгоритъм. В правоъгълника се записва името на подалгоритъма.
nacalo
nacalo
Блок за връзка.
Използва се за свързване на голям или няколко алгоритъма. Възможно е да има няколко входящи, но само една изходяща стрелка.
nacalo


III. Представяне на алгоритмите

Представяне на алгоритмите чрез блок-схеми е от голямо занчение в обучението. T е са прегледни, подредени, дават възможност за визуално представяне на алгоритмите. След това като знаем алгоритъмът, можем да напишем програма на някой език за програмиране: с++, java, pyton и т.н.
    В зависимост от последователността на изпълнение на елементарните действия алгоритмите биват: линейни, разклонени и цикични.

  •   Линеен е този алгоритъм, при който елементарните действия се изпълняват последователно.
  •    Разклонен е този алгоритъм, при който част от елементарните действия се изпълняват ако е изпълнено дадено услвие, а друга част - ако не е изпълнено условието.
  •   Цикличен е този алгоритъм, при който част от елементарните действия се изпълняват многократно.
      Пример за линеен алгоритъм: Нека създадем алгоритъм за събиране на две числа. Ще ги представим чрез:
псевдо код, блок-схема и програма на с++. След това да сравним и обясним, кой е най-ясен и разбираем.

Псевдо код Блок-схема Програма на с++
1. Начало
2. Деклариране на a, b, c - цели числа
3. Въведи a,b
4. c=a+b
5. Изведи с
6. Край
sum

int main ()
        {
           int a,b,c;
           cin>>a>>b;
           c=a+b;
           cout<< c;
           return 0;
       }






      Пример за разклонен алгоритъм: Нека да състави алгоритъм за намиране на по-голямото от две числа a и b.

Псевдо код Блок-схема Програма на с++
1. Начало
2. Деклариране на А, B, MAX - цели числа
3. Въведи A,B
4. Докато А ≠ B повтаряй
5. Ако A > B то MAX = A иначе MAX = B 6. Изведи MAX
7. Край
nod

int main ()
        {
           int a,b,c;
           cin>>a>>b;
           c=a+b;
           cout<< c;
           return 0;
       }





      Пример за цикличен алгоритъм: Съставете алгоритъм за намиране на най-голям общ делител (НОД) на две числа А, В. Много често в литературата този алгоритъм се употребява под името: "алгоритъм на Евклид" .
"Блок-схема алгоритъм на Евклид"
sum




Псевдо код Програма на с++
1. Начало
2. Деклариране на A, B - цели числа
3. Въведи A, B
4. Докато А ≠ B повтаряй
5. Ако A > B то A = A-B иначе B = B-A 5. Изведи A
6. Край

int main ()
        {
           int a,b;
           cin>>a>>b;
           while (a!=b)
        {
        if(a> b) a=a-b;
        else b=b-a;
        }
           cout<< a;
           return 0;
       }





Връзка с платформата подкрепяща учебния процес LearningApps.org

       Задание 1: свойства на алгоритмите и основни блокове.
Описание: Свързване на свойство с описанието му и блок с името му.


       Задание 2: Съставяне на блок-схема.
Описание : Подредете елементите в реда на изпълнението им.


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





Задачи за самостоятелна работа:

   1. Създайте блок-схема на алгоритъм за покупка на чаша горещ шоколад от машина за топли напитки.
  2. Създайте блок-схема на алгоритъм за намиране на най-малкото от 3 числа.
  3. Създайте блок-схема на алгоритъм за намиране на сумата на числата от 1 до 10.


       Използвана литература
     1. Учебник по информатика за 9 клас профилирана подготовка "Информатика +" автори: проф. Петър Бърнев, доц. Георги Тотков, доц. Росица Донева, доц. Владимир Шкуртов, гл. ас. Коста Гъров. Издателство "Летра"- Пловдив 2001 г.

    2.Учебник по "Информационни технологии" за 9 клас. автори: Николина Николова, Елиза стефанова, Мирослава Николов, Диана Петрова, Дафинка Митева, Красен Стефанов. Издателство "Просвета-София" АД - 2018 г.