IlmHamroh
JavaScript Full-stack/3-qism. Dasturchi asboblari va fikrlash3/21-dars15 daqiqa
Mundarija (35)

Pseudokod va uch g'isht: ketma-ketlik, shart, takror

Qisqacha: Pseudokod — algoritmni oddiy so'zlar bilan, lekin dasturga o'xshash tartibda yozish. Uni kompyuter bajarmaydi — u odam uchun reja. Har qanday dastur uchta g'ishtdan quriladi: ketma-ketlik (qadamlar birin-ketin), shart (agar ... bo'lsa) va takror (qayta-qayta bajarish).

Bu darsda

  • Pseudokod nima ekanini va nega koddan oldin yozilishini tushunasiz.
  • O'zgaruvchi g'oyasini va hisob = hisob + 1 qatorining ma'nosini tushuntira olasiz.
  • Ketma-ketlik, shart va takrorni pseudokodda yoza olasiz.
  • Pseudokodni qo'lda, qadamma-qadam "bajarib" natijasini topa olasiz.
  • Pseudokod haqiqiy kodga qanday aylanishini ko'rasiz.

Oldin bilishingiz kerak: Kompyutercha fikrlash. Foydali, lekin shart emas: Shell skript yozish asoslari.

1. Nega bu kerak?

Oldingi darsda katta muammoni bo'laklab, algoritm tuzishni ko'rdik. Endi algoritmni qanday yozib qo'yish kerak degan savol qoladi.

Boshlovchi vazifani eshitishi bilan kod yozishga tashlanadi. Shunda u bir vaqtda ikki og'ir ishni qiladi:

  1. Masalani qanday yechishni o'ylaydi.
  2. Tilning qavslari, nuqta-vergullari va qoidalarini eslaydi.

Miya bu ikkisini birga yaxshi bajara olmaydi. Natijada qavs bilan ovora bo'lib, asosiy fikr yo'qoladi.

Maktabda insho yozishdan oldin reja tuzganmiz: kirish, asosiy qism, xulosa. Reja tayyor bo'lsa, insho tez yoziladi. Dasturchilar ham avval algoritmni oddiy so'zlar bilan yozib oladi. Bu "reja" pseudokod deyiladi.

2. Pseudokod nima?

2.1 Birinchi misol

Choyxonada chek hisoblash kerak:

text
KIRIT narx
KIRIT soni
jami = narx * soni
CHIQAR jami

Buni har kim o'qiy oladi: narx va sonni oling, ularni ko'paytiring, natijani chiqaring. * — ko'paytirish belgisi, dasturlashda × o'rniga shu yoziladi.

Bu — pseudokod (pseudocode). "Pseudo" so'zi "soxta" degani. Pseudokod kodga o'xshaydi, lekin uni hech bir kompyuter bajarmaydi. U odamlar uchun yozilgan reja.

2.2 Pseudokodning uch foydasi

  1. Fikrni tildan ajratadi. JavaScript'ni ham, Python'ni ham o'ylamaysiz — faqat yechimni o'ylaysiz.
  2. Xato arzon tuzatiladi. Pseudokoddagi xatoni bir daqiqada o'chirib yozasiz. Yozilgan yuzlab qator kodni qayta qurish esa soatlab vaqt oladi.
  3. Hamkasb bilan umumiy til. Pseudokodni istalgan tilni biladigan dasturchi tushunadi.

2.3 Bu kursdagi yozuv qoidalari

Pseudokod uchun rasmiy standart yo'q. Lekin hamma bir-birini tushunishi uchun qulay odatlar bor. Bu kursda shunday yozamiz:

Kalit so'z Inglizcha kitoblarda Ma'nosi
KIRIT x INPUT x Foydalanuvchidan qiymat olish
CHIQAR x OUTPUT x, PRINT x Natijani ekranga chiqarish
AGAR ... BO'LSA IF ... THEN Shart
AKS HOLDA ELSE Shart bajarilmasa
TOKI ... EKAN WHILE ... DO Shart rost ekan, takrorla
HAR BIR x UCHUN FOR EACH x Ro'yxatdagi har biri uchun

Yana ikki odat:

  • Kalit so'zlar KATTA harflar bilan yoziladi. Shunda ular o'zingiz tanlagan nomlardan ajralib turadi.
  • Shart yoki takror ichidagi qadamlar 4 ta bo'sh joy bilan o'ngga suriladi. Bu chekinish (indentation) deyiladi. Chekinish qaysi qadam qaysi blok ichida ekanini ko'rsatadi.

Inglizcha ustun nega kerak? Internetdagi darsliklar va intervyularda pseudokod ko'pincha inglizcha kalit so'zlar bilan yoziladi. Ularni ko'rsangiz, tanib olasiz.

3. O'zgaruvchi g'oyasi

3.1 Nomli quti

Chek misolida narx, soni va jami so'zlari bor edi. Ular qiymatni eslab turadi.

O'zgaruvchi (variable) — qiymat saqlanadigan nomli joy. Uni usti yozilgan quti deb tasavvur qiling. Qutining ustiga "narx" deb yozdingiz va ichiga 3 000 soldingiz. Keyin "narx" desangiz, ichidagi 3 000 olinadi.

Siz o'zgaruvchini allaqachon ko'rgansiz. Muhit o'zgaruvchilari darsida terminalda PORT=3000 deb yozib, keyin $PORT bilan o'qigan edingiz. G'oya aynan shu.

3.2 = — "qutiga sol" degani

Pseudokodda = belgisi matematikadagi tenglik emas. U "o'ng tomondagi qiymatni chap tomondagi qutiga sol" degani:

text
yosh = 20

"yosh qutisiga 20 ni sol." Nom o'zgarmaydi, lekin ichidagi qiymat o'zgarishi mumkin — shuning uchun u "o'zgaruvchi" deyiladi.

3.3 hisob = hisob + 1 nimani anglatadi?

Bu qator matematikada ma'nosiz: hech bir son o'zidan 1 ga katta bo'lolmaydi. Lekin pseudokodda u juda ko'p ishlatiladi. Keling, sekin ko'ramiz.

Kompyuter bu qatorni ikki qadamda bajaradi:

  1. Avval o'ng tomonni hisoblaydi: hisob qutisidagi qiymatni oladi va unga 1 qo'shadi.
  2. Keyin natijani yana hisob qutisiga soladi. Eski qiymat o'chadi.
text
hisob = 5
hisob = hisob + 1
CHIQAR hisob

Qo'lda bajaramiz:

Qadam Nima bo'ladi hisob ichida
1 5 ni solamiz 5
2 5 + 1 = 6, uni solamiz 6
3 Chiqaramiz 6

Natija: 6. Bunday jadval tuzib, algoritmni qo'lda "bajarish" qo'lda kuzatish (tracing) deyiladi. Dasturchilar buni doim qiladi.

Tekshirib ko'ring: Quyidagi pseudokod nima chiqaradi?

text
x = 5
x = x + 3
x = x * 2
CHIQAR x

Javobingiz:

Javob

16. Avval x = 5. Keyin 5 + 3 = 8, x = 8. Keyin 8 × 2 = 16, x = 16. Har qatorda o'ng tomon eski qiymat bilan hisoblanadi, keyin natija qutiga tushadi.

4. Birinchi g'isht: ketma-ketlik

Ketma-ketlik (sequence) — qadamlar yuqoridan pastga, birin-ketin bajariladi. Hech bir qadam tashlab ketilmaydi.

text
KIRIT ism
KIRIT shahar
CHIQAR "Salom, " + ism + "! " + shahar + "dan xush kelibsiz."

Agar ism ga "Malika", shahar ga "Samarqand" kiritilsa, natija:

text
Salom, Malika! Samarqanddan xush kelibsiz.

Bu yerda + matnlarni bir-biriga ulaydi. Qo'shtirnoq ichidagi matn o'zgarmasdan chiqadi, qo'shtirnoqsiz so'z esa o'zgaruvchi — uning ichidagi qiymat olinadi.

Ketma-ketlikda tartib muhim. CHIQAR qatorini KIRIT ism dan oldin qo'ysangiz, chiqariladigan ism hali yo'q bo'ladi.

5. Ikkinchi g'isht: shart

5.1 AGAR va AKS HOLDA

O'zbekistonda saylovda 18 yoshdan ovoz berish mumkin. Buni pseudokodda yozamiz:

text
KIRIT yosh
AGAR yosh >= 18 BO'LSA
    CHIQAR "Ovoz bera olasiz"
AKS HOLDA
    CHIQAR "Hali erta"

Shart (selection) — algoritm shartga qarab ikki yo'ldan birini tanlaydi. Shart rost bo'lsa — birinchi blok, yolg'on bo'lsa — AKS HOLDA bloki bajariladi. Ikkalasi birga hech qachon bajarilmaydi.

yosh = 20 bo'lsa: "Ovoz bera olasiz". yosh = 16 bo'lsa: "Hali erta". yosh = 18 bo'lsa-chi? >= "katta yoki teng" degani. 18 ga teng — demak "Ovoz bera olasiz".

AKS HOLDA qismi majburiy emas. "Shart rost bo'lsa nimadir qil, bo'lmasa hech narsa qilma" degan holatlar ham ko'p.

5.2 Taqqoslash belgilari

Shartlarda sonlar shu belgilar bilan solishtiriladi:

Belgi Ma'nosi Misol (rost)
> katta 5 > 3
< kichik 2 < 7
>= katta yoki teng 18 >= 18
<= kichik yoki teng 4 <= 9
== teng 3 == 3
!= teng emas 3 != 4

Nega tenglik uchun == (ikkita)? Chunki bitta = allaqachon band — u "qutiga sol" degani. Tekshirish va solishni aralashtirmaslik uchun tenglikni tekshirish ikki belgi bilan yoziladi.

5.3 Ko'p tarmoqli shart

Tanlov ikkitadan ko'p bo'lsa, AKS HOLDA AGAR ishlatiladi. Taksi tarifini tanlash:

text
KIRIT yolovchilar
AGAR yolovchilar <= 4 BO'LSA
    CHIQAR "Oddiy mashina"
AKS HOLDA AGAR yolovchilar <= 7 BO'LSA
    CHIQAR "Miniven"
AKS HOLDA
    CHIQAR "Ikki mashina chaqiring"

Shartlar yuqoridan pastga tekshiriladi. Birinchi rost chiqqan shart bloki bajariladi, qolganlari o'tkazib yuboriladi.

O'zgaruvchi nomini yolovchilar deb apostrofsiz yozdik. Dasturlash tillarida nomda apostrof va bo'sh joy bo'lmaydi — pseudokodda ham shu odatni saqlaymiz.

Tekshirib ko'ring: Yuqoridagi taksi pseudokodiga yolovchilar = 5 kiritildi. Nima chiqadi va nega?

Javob

"Miniven". Birinchi shart: 5 <= 4 — yolg'on, o'tkazib yuboriladi. Ikkinchi shart: 5 <= 7 — rost, "Miniven" chiqadi. Shundan keyin qolgan AKS HOLDA tekshirilmaydi.

6. Uchinchi g'isht: takror

6.1 TOKI ... EKAN

Jasur telefon olmoqchi. Telefon 3 000 000 so'm turadi, Jasur har oy 500 000 so'm yig'adi. Necha oyda yig'adi?

text
yigilgan = 0
oylar = 0
TOKI yigilgan < 3000000 EKAN
    yigilgan = yigilgan + 500000
    oylar = oylar + 1
CHIQAR oylar

Takror (iteration) — bir xil qadamlarni shart rost ekan qayta-qayta bajarish. Dasturchilar buni sikl (loop) ham deyishadi. TOKI shartni har aylanish boshida tekshiradi. Shart yolg'on bo'lishi bilan takror to'xtaydi va keyingi qatorga o'tiladi.

Pseudokodda sonlar bo'sh joysiz yoziladi (3000000). Kompyuter tillarida ham shunday: bo'sh joy sonni ikkiga bo'lib yuboradi.

Qo'lda kuzatamiz:

Aylanish Shart yigilgan oylar
Boshida — 0 0
1 0 < 3 000 000 — rost 500 000 1
2 500 000 < 3 000 000 — rost 1 000 000 2
3 rost 1 500 000 3
4 rost 2 000 000 4
5 rost 2 500 000 5
6 rost 3 000 000 6
7 3 000 000 < 3 000 000 — yolg'on — —

Takror to'xtadi. Natija: 6 oy.

6.2 HAR BIR ... UCHUN

Ko'pincha ro'yxatdagi har bir element bilan bir xil ish qilish kerak bo'ladi. Masalan, menyudagi har bir taomni e'lon qilish:

text
menyu = [osh, somsa, manti]
HAR BIR taom UCHUN menyu ichida
    CHIQAR "Menyuda: " + taom

Natija:

text
Menyuda: osh
Menyuda: somsa
Menyuda: manti

[ ... ] — ro'yxat, ya'ni tartiblangan qiymatlar to'plami. Takror har aylanishda taom qutisiga ro'yxatdagi keyingi elementni soladi. Elementlar tugagach, takror o'zi to'xtaydi.

Bu sizga tanish bo'lishi mumkin. Shell skriptdagi for taom in osh somsa manti aynan shunday ishlagan edi.

6.3 Takror albatta tugashi kerak

TOKI ichida shartga ta'sir qiladigan narsa o'zgarishi shart. Jasur misolida yigilgan = yigilgan + 500000 qatorini o'chirib ko'ring: yigilgan doim 0 qoladi. Shart doim rost, takror hech qachon tugamaydi.

Bu — algoritm darsidagi cheklilik belgisining buzilishi. Bunday takror cheksiz sikl deyiladi.

Tekshirib ko'ring: Quyidagi pseudokod necha marta "Salom" chiqaradi?

text
i = 1
TOKI i <= 3 EKAN
    CHIQAR "Salom"
    i = i + 1
Javob

3 marta. i 1, 2, 3 bo'lganda shart rost. i 4 ga yetganda 4 <= 3 yolg'on bo'ladi va takror to'xtaydi.

7. Uch g'isht birga

7.1 Har qanday dastur shu uchtadan quriladi

1966-yilda italyan olimlari Korrado Byom va Juzeppe Yakopini muhim narsani isbotladi. Har qanday algoritmni faqat uch qurilish bilan yozish mumkin: ketma-ketlik, shart va takror.

flowchart LR
    subgraph K[Ketma-ketlik]
        K1[1-qadam] --> K2[2-qadam]
    end
    subgraph S[Shart]
        S1{Rostmi?} -- Ha --> S2[A yo'l]
        S1 -- "Yo'q" --> S3[B yo'l]
    end
    subgraph T[Takror]
        T1{Davom etamizmi?} -- Ha --> T2[Qadam]
        T2 --> T1
    end

Telegram, bank ilovasi, o'yin — hammasi ichida minglab marta shu uch g'isht turli tartibda ulangan. Bunday chizmalarni keyingi darsda o'zingiz chizasiz.

7.2 To'liq yechilgan misol: eng arzon narx

Bozorda to'rt sotuvchi pomidor sotyapti. Eng arzon narxni topamiz:

text
narxlar = [9000, 7500, 8000, 7000]
eng_arzon = narxlar ichidagi birinchi narx
HAR BIR narx UCHUN narxlar ichida
    AGAR narx < eng_arzon BO'LSA
        eng_arzon = narx
CHIQAR eng_arzon

Uchala g'isht ham shu yerda: qadamlar ketma-ket, ichkarida shart, tashqarida takror. Nomda bo'sh joy bo'lmasligi uchun so'zlarni pastki chiziq bilan uladik: eng_arzon.

Qo'lda kuzatamiz:

narx Shart eng_arzon
— boshida 9 000
9 000 9 000 < 9 000 — yo'q 9 000
7 500 7 500 < 9 000 — ha 7 500
8 000 8 000 < 7 500 — yo'q 7 500
7 000 7 000 < 7 500 — ha 7 000

Natija: 7000.

7.3 Pseudokoddan haqiqiy kodga

Pseudokod tayyor bo'lsa, uni istalgan tilga o'girish oson. Siz bash'ni bilasiz — xuddi shu algoritm bash'da:

bash
#!/usr/bin/env bash
eng_arzon=9000
for narx in 9000 7500 8000 7000; do
  if [ "$narx" -lt "$eng_arzon" ]; then
    eng_arzon=$narx
  fi
done
echo "$eng_arzon"
text
7000

Soddalik uchun birinchi narxni (9000) boshlang'ich qiymatga qo'lda yozdik. Qatorma-qator solishtiring: HAR BIR ... UCHUN — for ... do ... done, AGAR ... BO'LSA — if ... then ... fi, < — -lt. Mantiq bir xil, faqat yozuv boshqa.

JavaScript'da ham g'oya aynan shu, faqat so'zlar va qavslar boshqacha. Uni if / else va for sikli darslarida yozasiz — hozir bilish shart emas.

7.4 Qisman yechilgan misol: sovuq kunlar

Yanvar oyining 5 kunlik harorati: -3, 2, -7, 0, 1. Nechta kun noldan sovuq bo'lgan?

text
haroratlar = [-3, 2, -7, 0, 1]
sovuq = 0
HAR BIR t UCHUN haroratlar ichida
    AGAR t < 0 BO'LSA
        sovuq = sovuq + 1
CHIQAR sovuq

O'zingiz kuzating: har bir t uchun shartni tekshiring va sovuq qanday o'zgarishini yozing. Natija nechchi?

0 ni sanamadik — chunki 0 < 0 yolg'on. "Noldan sovuq" va "noldan sovuq yoki nol" — ikki xil savol. Bunday nozik joylarga chegaraviy holatlar darsida qaytamiz.

8. Ko'p uchraydigan xatolar

8.1 Pseudokodda sintaksis bilan ovora bo'lish

Boshlovchi pseudokodga ham nuqta-vergul, qavs va maxsus belgilar qo'shadi. Bu shart emas. Pseudokodning maqsadi — mantiq. Odam o'qib tushunsa — yetarli.

8.2 Hisoblagichni o'zgartirishni unutish

text
i = 1
TOKI i <= 3 EKAN
    CHIQAR "Salom"

Bu yerda i = i + 1 yo'q. i doim 1 bo'lib qoladi va "Salom" cheksiz chiqaveradi. Har bir TOKI ni yozgach, o'zingizdan so'rang: "Ichkarida shartni yolg'onga yaqinlashtiradigan qator bormi?"

8.3 Noto'g'ri boshlang'ich qiymat

Eng arzon narxni topishda eng_arzon = 0 deb boshlasangiz nima bo'ladi? Birorta narx 0 dan kichik emas. Shart hech qachon rost bo'lmaydi va natija 0 chiqadi — bunday narx yo'q-ku!

Shuning uchun boshlang'ich qiymat sifatida ro'yxatning birinchi elementi olinadi.

8.4 Chekinishni aralashtirish

Quyidagi ikki pseudokod faqat bitta qatorning chekinishi bilan farq qiladi:

text
HAR BIR taom UCHUN menyu ichida
    CHIQAR taom
    CHIQAR "---"
text
HAR BIR taom UCHUN menyu ichida
    CHIQAR taom
CHIQAR "---"

Birinchisida chiziq har taomdan keyin chiqadi — u takror ichida. Ikkinchisida bir marta, eng oxirida — u takrordan tashqarida. Chekinish — bezak emas, u ma'noni o'zgartiradi.

9. Mashqlar

1-mashq (oson): Pseudokodni o'qing

Quyidagi pseudokod nima chiqaradi?

text
x = 10
y = 20
AGAR x > y BO'LSA
    z = x - y
AKS HOLDA
    z = y - x
CHIQAR z
Yechim

10. Shart 10 > 20 — yolg'on, shuning uchun AKS HOLDA bloki ishlaydi: z = 20 − 10 = 10. Bu algoritm ikki son orasidagi farqni doim musbat qilib chiqaradi.

2-mashq (o'rta): Qimmat mahsulotlar

Do'kondagi mahsulotlar narxi ro'yxat sifatida berilgan: 45 000, 120 000, 30 000, 75 000. 50 000 so'mdan qimmat mahsulotlar nechtaligini sanaydigan pseudokod yozing. Keyin uni qo'lda kuzating.

Ishora: "Sovuq kunlar" misolidagi HAR BIR ... UCHUN va sanagich (sovuq = sovuq + 1) g'oyasini ishlating.

Yechim
text
narxlar = [45000, 120000, 30000, 75000]
qimmat = 0
HAR BIR narx UCHUN narxlar ichida
    AGAR narx > 50000 BO'LSA
        qimmat = qimmat + 1
CHIQAR qimmat

Kuzatish: 45 000 — yo'q (0). 120 000 — ha (1). 30 000 — yo'q (1). 75 000 — ha (2). Natija: 2.

3-mashq (qiyin): Raketa uchirish

KIRIT n bilan son olinadi. Algoritm n dan 1 gacha kamayib sanasin, oxirida "Uchdik!" chiqarsin. Masalan, n = 3 bo'lsa:

text
3
2
1
Uchdik!

TOKI ... EKAN bilan pseudokod yozing. Ishora: hisoblagich bu safar oshmaydi, kamayadi: n = n - 1.

Yechim
text
KIRIT n
TOKI n >= 1 EKAN
    CHIQAR n
    n = n - 1
CHIQAR "Uchdik!"

n = 3 bilan kuzatish: 3 >= 1 rost → 3 chiqadi, n = 2. 2 >= 1 rost → 2, n = 1. 1 >= 1 rost → 1, n = 0. 0 >= 1 yolg'on → takror to'xtaydi. "Uchdik!" takrordan tashqarida — shuning uchun bir marta chiqadi.

Agar n = 0 kiritilsa-chi? Shart birinchi tekshiruvdayoq yolg'on. Takror bir marta ham aylanmaydi va darhol "Uchdik!" chiqadi. Bu ham to'g'ri xatti-harakat.

10. Real ishda

  • Rejalashtirish. Tajribali dasturchilar murakkab vazifada avval izoh sifatida pseudokod yozadi, keyin uni qatorma-qator kodga aylantiradi.
  • Intervyu. Texnik suhbatda "avval yechimni so'z bilan tushuntiring" deyishadi. Pseudokod aynan shu. Qolgani live coding intervyu darsida.
  • Hujjatlar. Algoritmlar haqidagi kitob va maqolalarda yechim ko'pincha pseudokodda beriladi — chunki uni istalgan til dasturchisi o'qiy oladi.
  • Uch g'isht har bir dasturlash tilida bor. JavaScript'da ular if, for va while deb ataladi.

Xulosa

  • Pseudokod — algoritmni oddiy so'zlar bilan, lekin dasturga o'xshash tartibda yozish. Uni kompyuter emas, odam o'qiydi.
  • O'zgaruvchi — nomli quti. = — "qutiga sol", == — "tengmi?".
  • hisob = hisob + 1: avval o'ng tomon hisoblanadi, keyin natija qutiga tushadi.
  • Ketma-ketlik — qadamlar birin-ketin; shart — AGAR ... BO'LSA; takror — TOKI va HAR BIR.
  • Har bir takrorda shartni tugatadigan qadam bo'lishi shart.
  • Qo'lda kuzatish jadvali — xatoni kod yozmasdan topish usuli.

Keyingi dars: Blok-sxema va diagramma vositalari — shu uch g'ishtni shakllar va strelkalar bilan chizishni va Mermaid, draw.io, Excalidraw vositalarini o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Pseudokod va uch g'isht: ketma-ketlik, shart, takror — IlmHamroh