ketma-ketlik (chiziqli) , tarmoqlanish, takrorlanish (takrorlash)
1. Chiziqli algoritm tuzilmasi ketma-ket bajariladigan buyruqlar tizimidan iborat bo‘ladi:
Amallar | Blok-sxema |
1-amal
2-amal. . . .
.
n-amal
|
|
2. Tarmoqlanish. Bu tuzilma shart bajarilishi natijasiga qarab (ha yoki yo‘q) algoritmni bajarish yo‘nalishini belgilaydi.
Tarmoqlanish tuzilmasi to‘rtta ko‘rinishda bo‘lishi mumkin:
agar-u holda;
agar-u holda-aks holda;
shartlar ketma-ketligi agar-u holda;
shartlar ketma-ketligi agar-u holda-aks holda.
Algoritmik til
|
Blok-sxema
|
1. agar-u holda
|
agar shart
u holda amal
tamom
|
|
2. agar-u holda-aks holda
|
Agar shart
u holda 1-amal
aks holda 2-amal
tamom
|
|
3. tanlash
|
Tanlash
agar 1-shart: 1-amal
agar 2-shart: 2-amal
. . . . . . . . . . . .
agar N-shart: N-amal
tamom
|
|
4. tanlash-aks holda
|
Tanlash
Agar 1-shart: 1-amal
Agar 2-shart: 2-amal
. . . . . . . . . . . .
agar N-shart: N-amal
aks holda N+1 amal
tamom
|
|
Agar buyrugʻiga misollar
Algoritmni so‘zlar yordamidagi ifodasi
|
Blok-sxema ko‘rinishidagi ifodasi
|
Agar x > 0
u holda y := sin(x)
tamom
|
|
Agar a > b
u holda a := 2*a; b := 1
aks holda b := 2*b
tamom
|
|
Tanlash
Agar n = 1: y := sin(x)
Agar n = 2: y := cos(x)
Agar n = 3: y := 0
Tamom
|
|
Tanlash
agar a > 5: i := i+1
agar a = 0: j := j+1
aks holda i := 10; j:=0
tamom
|
|
3. Takrorlash tuzilmasi buyruq, ko‘rsatma va amallarni ko‘p marotaba bajarilishini ta’minlaydi. Takrorlashni ta’minlashning asosiy turlari ushbu jadvalda ko‘rsatilgan:
Ogʻzaki so‘zlar orqali
|
Blok-sxema tilida
|
Toki takrorlash turi
Toki so‘zidan keyin keluvchi shart bajarilgunga qadar takrorlash tanasida ko‘rsatilgan buyruqlar bajariladi.
|
Takrorlash boshi toki shart
Takrorlash tanasi (buyruqlar ketma-ketligi)
Takrorlash oxiri
|
|
Uchun takrorlash turi
Takrorlash o‘zgaruvchisi (takrorlash parametri) barcha qiymatlarni qabul qilgunga qadar takrorlash tanasida ko‘rsatilgan buyruqlar bajariladi.
|
Takrorlash boshi i uchun 1 dan 2 gacha
Takrorlash tanasi (buyruqlar ketma-ketligi)
Takrorlash oxiri
|
|
Toki va uchun buyruqlariga misollar
So‘zlar orqali
|
Blok-sxema orqali
|
Takrorlash boshi toki i <= 5
S := S+A[i]
i := i+1
takrorlash oxiri
|
|
Takrorlash boshi i uchun 1 dan 5 gacha
X[i] := i*i*i
Y[i] := X[i]/2
takrorlash oxiri
|
|
Binar amallar additiv ya’ni + qo‘shish va – ayirish amallariga, hamda multiplikativ, ya’ni * ko‘paytirish, / bo‘lish va % modul olish amallariga ajratiladi.
Butun sonni butun songa bo‘lganda natija butun songacha yaxlitlanadi.
Misol uchun, 20/3 = 6; (-20)/3 = -6; 20/(-3) = -6.
Unar amallarga ishorani o‘zgartiruvchi unar minus “–” va unar plyus “+” amallari kiradi. Bundan tashqari inkrement “++” va dekrement “--” amallari ham unar amallarga kiradi.
(C / C ++) Ternar operatori:
Ternar operatori quyidagi shaklga ega:
amal1 : amal2 : amal3
exp1 ifodasi har doim baholanadi. amal2 va amal3 bajarilishi amal1 natijasiga bogʻliq. Agar exp1 natijasi nolga teng bo‘lmasa, exp2 baholanadi, aks holda exp3 baholanadi.
Kamchiliklari:
amal1 har qanday kamchiligi amal2 yoki amal3 dan oldin darhol baholanadi va yangilanadi. Boshqacha qilib aytganda, holatni uchlamchi nuqtai nazardan baholaganingizdan keyin ketma-ketlikda nuqta bor. Agar exp2 yoki exp3 kamchiligi bo‘lsa, ulardan faqat bittasi baholanadi.
Qaytish turi:
Ternar operatori qaytish turiga ega. Qaytish turi odatiy \ ortiqcha yuklangan konversiya qoidalariga muvofiq exp2 ga va exp3 ning exp2 ga konvertatsiyasiga bogʻliq. Agar ular o‘zgartirilmasa, kompilyator xato tashlaydi. Quyidagi misollarga qarang.
Quyidagi dastur xatosiz kompilyatsiya qiladi. Uchlamchi iboraning qaytish turi float(exp2 dagiday) bo‘lishi kutilmoqda va exp3 (ya'ni, haqiqiy nol - turi int) noaniq ravishda float shaklga o‘tkaziladi.
#include
using namespace std;
int main()
{
int test = 0;
float fvalue = 3.111f;
cout << (test ? fvalue : 0) << endl;
return 0;
}
Quyidagi dastur kompilyatsiya qilmaydi, chunki kompilyator uchlamchi iboraning qaytariladigan turini topa olmaydi, yoki exp2 (belgilar qatori) va exp3 (int) o‘rtasida yashirin konversiya mavjud emas.
#include
using namespace std;
int main()
{
int test = 0;
cout << test ? "A String" : 0 << endl;
return 0;
}
Quyidagi dastur kompilyatsiya qilishi “mumkin” yoki ish vaqtida ishlamay qolishi mumkin. Uchinchi iboraning qaytish turi (char *) turi bilan cheklangan, ammo int ni qaytaradi, shuning uchun dastur xato bilan tugaydi. Haqiqatan ham, dastur ish vaqtida 0-chi manzilga bir qatorni bosib chiqarishga harakat qiladi.
#include
using namespace std;
int main()
{
int test = 0;
cout << (test ? "A String" : 0) << endl;
return 0;
}
Dostları ilə paylaş: |