Зеҳн
Алгоритмсозӣ ва барномасозӣ дар забони Go

Китоби таълимии забони Go барои мактабиён, донишҷӯён ва омӯзгорон: аз алгоритм ва блок-схемаҳо то веб-сервер ва боти Телеграм. Таҷдиди китоби А. П. Назаров «Алгоритмсозӣ ва барномасозӣ дар забони Бейсик» (2009).

Агенти Зеҳнӣ · 26 октябри 2026 · 15 саҳифа

МаорифБарномасозӣТехнология
Аз аввал хондан

Боби 2. Асосҳои алгоритмсозӣ ва блок-схемаҳо

Боби 2. Асосҳои алгоритмсозӣ ва блок-схемаҳо

Пеш аз он ки барномасоз кодро дар компютер ворид кунад, ӯ бояд нақшаи дақиқи ҳалли масъаларо дар зеҳни худ ё рӯйи коғаз таҳия намояд. Ин нақшаи қадам ба қадам алгоритм номида мешавад. Дар ин боб шумо меомӯзед, ки алгоритм чист, чӣ гуна хосиятҳо дорад ва чӣ тавр онро ба воситаи блок-схемаҳои графикӣ тасвир кардан мумкин аст.

Дар ин боб меомӯзем

  • Мафҳуми алгоритм ва саҳми Муҳаммад ал-Хоразмӣ дар рушди ҳисоббарорӣ.
  • Хосиятҳои асосии алгоритм (дискретӣ, муайянӣ, оммавият ва натиҷанокӣ).
  • Роҳҳои ифодаи алгоритмҳо (матнӣ, псевдокод ва блок-схемаҳо).
  • Рамзҳои стандартии блок-схемаҳо ва вазифаи ҳар яке аз онҳо.
  • Се навъи асосии алгоритм: хаттӣ, шоханок ва даврӣ.
  • Таҳлили намунавии алгоритмҳо барои масъалаҳои риёзӣ ва физикӣ.

Алгоритм чист?

Истилоҳи «алгоритм» бо номи олими бузурги энсиклопедисти шарқ Муҳаммад ибни Мӯсо Ал-Хоразмӣ (солҳои тақрибан 783–850) алоқаманд аст. Ал-Хоразмӣ дар асари худ «Китоб ал-ҷамъ ва-т-тафриқ би-ҳисоб ал-Ҳинд» қоидаҳои иҷрои амалҳои арифметикиро бо рақамҳои ҳиндӣ (ки имрӯз мо онҳоро рақамҳои арабӣ меномем) ба таври муназзам баён карда буд. Баъдтар, ҳангоми тарҷумаи ин асар ба забони лотинӣ, номи ӯ ба шакли «Algoritmi» навишта шуд («Algoritmi de numero Indorum») ва минбаъд маҷмӯи қоидаҳои пайдарпайи ҳисоббарориро «алгоритм» номиданд.

Таърифи алгоритм: Алгоритм — ин пайдарпайии дақиқ ва қатъии амалҳое мебошад, ки иҷрои онҳо бо тартиби муайян аз додаҳои аввала ба натиҷаи матлуби ҳалли масъала оварда мерасонад.

Мо дар ҳаёти ҳаррӯза низ пайваста бо алгоритмҳо сарукор дорем. Масалан:

  • Дастури пухтани хӯрок (ретсепт).
  • Тарзи истифодаи банкомат барои гирифтани маблағ.
  • Қоидаи гузаштан аз роҳ бо чароғи роҳнамо.

Ин дастурҳо намунаҳои рӯзмарраи тартиби амалҳо мебошанд. Дар компютер алгоритмҳо барои коркарди додаҳо, ҳалли муодилаҳо ва идораи иҷрои барномаҳо истифода мешаванд.


Хосиятҳои алгоритм

Барои алгоритмҳои таълимии ин китоб хосиятҳои зерин муҳиманд:

  1. Дискретӣ будан (Discrete): Алгоритм бояд ба қадамҳои алоҳида, сода ва пайдарпай тақсим шуда бошад. Иҷрои қадами навбатӣ танҳо пас аз анҷоми пурраи қадами қаблӣ сурат мегирад.
  2. Муайянӣ (Determinism): Ҳар як дастур бояд возеҳ ва бе думаъногӣ бошад. Дар алгоритми детерминистӣ додаҳои ибтидоии якхела натиҷаи якхела медиҳанд.
  3. Охирнокӣ ва натиҷанокӣ (Finiteness / Effectiveness): Алгоритм бояд пас аз шумораи ниҳоии қадамҳо ба охир расад ва натиҷаи ҳалли масъаларо пешниҳод кунад ё муайян намояд, ки масъала ҳал надорад.
  4. Оммавият (Generality): Алгоритм на танҳо барои як мисоли алоҳида, балки барои тамоми синфи масъалаҳои якхела бояд кор кунад. Масалан, алгоритми ҳалли муодилаи квадратӣ (ax² + bx + c = 0) бояд барои қиматҳои иҷозатдодашудаи a, b ва c (бо шарти a ≠ 0) дуруст кор кунад, на танҳо барои ададҳои a=1, b=2, c=1.

Тарзҳои тасвири алгоритмҳо

Алгоритмҳоро бо се роҳи асосӣ баён кардан мумкин аст:

  1. Матнӣ (забони гуфтугӯӣ): Қадамҳо бо забони муқаррарӣ навишта мешаванд (масалан: «Адади якумро бигир, ба адади дуюм зам кун ва натиҷаро бинавис»). Ин тарз барои одамон фаҳмост, аммо метавонад дароз ва норавшан бошад.
  2. Псевдокод (забони алгоритмӣ): Шакли кӯтоҳкардашудае, ки ба забони барномасозӣ наздик аст, вале қоидаҳои сахти синтаксисиро талаб намекунад.
  3. Блок-схемаҳо (забони графикӣ): Тасвири алгоритм бо истифода аз шаклҳои геометрии стандартӣ. Ин роҳи беҳтарин ва аёнтарин барои дарки сохтори мантиқии барнома ба шумор меравад.

Рамзҳои асосии блок-схемаҳо

Ҳангоми кашидани блок-схемаҳо шаклҳои геометрии махсус истифода мешаванд, ки ҳар кадоме вазифаи муайян дорад:

  ┌─────────────┐
  │ Оғоз / Анҷом │   Блоки байзашакл (ё росткунҷаи кунҷҳояш гирд):
  └─────────────┘   Ибтидо ва интиҳои алгоритмро нишон медиҳад.

      /     /
     / Ворид /      Параллелограмм:
    /  ё Чоп/       Ворид намудани додаҳои аввала ё чоп кардани натиҷа.
   /_______/

  ┌─────────────┐
  │    Амал     │   Росткунҷа:
  │ (ҳисоббарорӣ)│   Иҷрои амалҳои риёзӣ ё бахшидани қимат (масалан: S = A + B).
  └─────────────┘

        /\
       /  \
      /Шарт\        Ромб:
      \  ? /        Санҷиши шарт (шоханокӣ). Ду баромад дорад:
       \  /         «Ҳа» (агар шарт дуруст бошад) ва «Не» (агар нодуруст бошад).
        \/

        │
        ▼           Тирчаҳо (хатҳои робита):
                    Самти ҳаракати пайдарпайии амалҳоро нишон медиҳанд.

Се навъи асосии алгоритм

Дар барномасозии сохторӣ алгоритмҳо аз се сохтори асосӣ ва омезиши онҳо сохта мешаванд:

flowchart TD
    A["Алгоритмҳо"] --> B["1. Хаттӣ"]
    A --> C["2. Шоханок"]
    A --> D["3. Даврӣ"]
    B --> B1["Қадамҳо пай дар пай ва бе гардиш иҷро мешаванд"]
    C --> C1["Вобаста аз шарт яке аз самтҳо интихоб мешавад"]
    D --> D1["Қисме аз амалҳо якчанд бор такрор меёбад"]

1. Алгоритмҳои хаттӣ

Дар алгоритмҳои хаттӣ тамоми амалҳо пай дар пай, яке паси дигар, аз боло ба поён танҳо як маротиба иҷро мегарданд. Дар ин ҷо ҳеҷ гуна санҷиши шарт ё такроршавӣ вуҷуд надорад.

Мисоли 1: Ёфтани масоҳат ва периметри росткунҷа бо тарафҳои додашудаи a ва b.

Формулаҳо:

  • Периметр: P = 2 · (a + b)
  • Масоҳат: S = a · b
       ┌──────────┐
       │   Оғоз   │
       └────┬─────┘
            │
         /  ▼  /
        / a, b /
       /______/
            │
       ┌────▼─────────────┐
       │ P = 2 * (a + b)  │
       │ S = a * b        │
       └────┬─────────────┘
            │
         /  ▼  /
        / P, S /
       /______/
            │
       ┌────▼─────┐
       │  Анҷом   │
       └──────────┘

Дар ин мисол аввал қиматҳои a ва b ворид мешаванд, сипас аз рӯи формулаҳо P ва S ҳисоб карда мешаванд ва дар охир чоп мегарданд.

Ҳамин алгоритмро бо псевдокод чунин навиштан мумкин аст:

алгоритм МасоҳатиРосткунҷа
    ворид кун: a, b
    P ← 2 · (a + b)
    S ← a · b
    чоп кун: P, S
анҷом

Аломати ← маънои «қимат бахшидан»-ро дорад: масалан, S ← a · b яъне «ҳосили зарби a ва b-ро ҳисоб карда, дар S нигоҳ дор». Дар боби 3 мо мебинем, ки дар Go ин амал бо аломатҳои := ва = навишта мешавад.

Мисоли 2 (физика): Ҷисм дар хати рост бо суръати ибтидоии v₀ ва шитоби доимии a ҳаракат мекунад. Суръат (v) ва ҷойивазкунии онро (s) пас аз t сония ёбед. Агар самти ҳаракат тағйир наёбад ва суръат ғайриманфӣ бошад, s ба масофаи тайшуда баробар аст.

Формулаҳо:

  • Суръат: v = v₀ + a · t
  • Ҷойивазкунӣ: s = v₀ · t + a · t² / 2
       ┌──────────┐
       │   Оғоз   │
       └────┬─────┘
            │
         /  ▼       /
        / v0, a, t /
       /__________/
            │
       ┌────▼────────────────────────┐
       │ v = v0 + a * t              │
       │ s = v0 * t + a * t * t / 2  │
       └────┬────────────────────────┘
            │
         /  ▼  /
        / v, s /
       /______/
            │
       ┌────▼─────┐
       │  Анҷом   │
       └──────────┘

Масалан, барои v₀ = 2 м/с, a = 0,5 м/с² ва t = 10 с: v = 2 + 0,5 · 10 = 7 м/с ва s = 2 · 10 + 0,5 · 10² / 2 = 20 + 25 = 45 м. Ин алгоритм низ хаттӣ аст: ҳар як амал танҳо як маротиба ва бе ягон шарт иҷро мешавад.


2. Алгоритмҳои шоханок

Дар алгоритмҳои шоханок иҷрои амалҳо ба якчанд шоха тақсим мешавад. Вобаста ба он ки шарти санҷидашаванда иҷро мешавад («ҳа») ё не («не»), танҳо яке аз шохаҳо интихоб ва иҷро мегардад.

Мисоли 3: Ёфтани калонтарини ду адади ҳақиқии a ва b (max(a, b)).

             ┌──────────┐
             │   Оғоз   │
             └────┬─────┘
                  │
               /  ▼  /
              / a, b /
             /______/
                  │
                 / \
         Ҳа     /   \     Не
       ┌───────   a>b ?  ───────┐
       │        \   /           │
       │         \/             │
  ┌────▼────┐              ┌────▼────┐
  │ max = a │              │ max = b │
  └────┬────┘              └────┬────┘
       │                        │
       └──────────┬─────────────┘
                  │
               /  ▼  /
              / max /
             /______/
                  │
             ┌────▼─────┐
             │  Анҷом   │
             └──────────┘

Агар шарти a > b дуруст бошад, шохаи чап иҷро шуда, қимати a ба тағйирёбандаи max бахшида мешавад. Агар нодуруст бошад, шохаи рост иҷро шуда, max = b мегардад.


3. Алгоритмҳои даврӣ (сиклӣ)

Дар бисёр масъалаҳо лозим меояд, ки як гурӯҳи амалҳо барои қиматҳои гуногун даҳҳо, ҳазорон ва ё миллионҳо маротиба такрор шаванд. Алгоритме, ки дар он як қисми амалҳо якчанд маротиба такрор меёбад, алгоритми даврӣ номида мешавад.

Маҷмӯи амалҳое, ки дар дохили давр такрор мешаванд, баданаи давр (loop body) номида мешавад.

Мисоли 4: Ёфтани суммаи ададҳои натуралӣ аз 1 то N: S = 1 + 2 + 3 + … + N

             ┌──────────┐
             │   Оғоз   │
             └────┬─────┘
                  │
               /  ▼  /
              /  N  /
             /______/
                  │
            ┌─────▼─────┐
            │ S=0, i=1  │  (Қимати ибтидоии сумма ва ҳисобкунак)
            └─────┬─────┘
                  │◄──────────────┐
                  │               │
                 / \              │
         Ҳа     /   \             │
       ┌─────── i<=N ?            │
       │        \   /             │
       │         \/               │
       │          │ Не            │
       │          ▼               │
       │       /     /            │
       │      /  S  /             │
       │     /_____/              │
       │          │               │
       │     ┌────▼─────┐         │
       │     │  Анҷом   │         │
       │     └──────────┘         │
  ┌────▼────────┐                 │
  │  S = S + i  │                 │ (Баданаи давр)
  │  i = i + 1  │─────────────────┘
  └─────────────┘

Тарзи кори ин алгоритм:

  1. Ба тағйирёбандаи S қимати 0 ва ба ҳисобкунаки давр i қимати 1 дода мешавад.
  2. Санҷида мешавад: оё i ≤ N аст?
  3. Агар «ҳа» бошад, ба S қимати ҷории i зам мешавад, баъд i ба андозаи 1 зиёд шуда (i = i + 1), иҷрои кор боз ба санҷиши шарт бармегардад.
  4. Ҳамин тавр даврзанӣ давом мекунад, то он даме ки i аз N калон шавад. Ҳангоми иҷро нашудани шарт («не»), давр қатъ гашта, суммаи ҳосилшудаи S чоп карда мешавад.

Худатон бисанҷед

2–1. Алгоритми хаттӣ: Барои масъалаи зерин блок-схема тартиб диҳед: катетҳои секунҷаи росткунҷа a ва b дода шудаанд. Гипотенуза (c = √(a² + b²)) ва масоҳати онро (S = a · b / 2) ёбед.

2–2. Алгоритми шоханок: Барои муайян кардани он ки адади додашудаи бутуни n мусбат аст, манфӣ аст ва ё сифр, блок-схема созед.

2–3. Алгоритми даврӣ: Блок-схемае тартиб диҳед, ки ҳосили зарби ҳамаи ададҳои тоқро аз 1 то 15 ҳисоб кунад (P = 1 · 3 · 5 · … · 15).

2–4. Масъалаи рӯзмарра: Алгоритми тайёр кардани як пиёла чойро бо қадамҳои дискретӣ нависед. Дар он ҷо кадом шартҳо ва такрорҳо метавонанд бошанд?


Хулоса

Дар ин боб шумо фаҳмидед, ки алгоритм мағзи асосии ҳар як барнома мебошад. Шумо бо таърифи алгоритм ва хосиятҳои он шинос шудед, шаклҳои стандартии блок-схемаҳоро омӯхтед ва дидед, ки чӣ тавр масъалаҳои мухталиф тавассути се сохтори бунёдӣ — хаттӣ, шоханок ва даврӣ — ҳал карда мешаванд.

Дар боби 3 мо омӯзиши худи забони Go-ро оғоз намуда, бо тағйирёбандаҳо ва навъҳои асосии додаҳо шинос мешавем, то ин алгоритмҳоро ба коди воқеӣ табдил диҳем.

пешина
аз 15
навбатӣ