You are on page 1of 47

ВИРТУАЛ ТЕХНОЛОГИЙН ТЭНХИМ,

Е-НЭЭЛТТЭЙ ИНСТИТУТ

Алгоритм ба програмчлал

Лекц - 4

www.emust.edu.mn
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
U.CS101- Алгоритм ба програмчлал

Сэдэв: Давталт, түүний төрөл, энгийн


давталт боловсруулалт, түүний хэрэглээ

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


www.emust.edu.mn
Агуулга:

01 Давталт
01
02
Өмнөх нөхцөлт давталт

Дараах нөхцөлт давталт

02 Нэмэлт

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


www.emust.edu.mn
Давталт
Бүлэг үйлдлийг давтан биелүүлэх процессийг давталт
буюу цикл гэнэ.
* Алгоритмын нэг юмуу хэсэг алхам хэд хэдэн удаа
давтагдан биелэгдэж байвал уг алгоритмыг давталттай
алгоритм гэнэ.
* Давтагдан биелэгдэж байгаа алхмуудыг давталтын бие
буюу цикл гэж нэрлэдэг. Өөрөөр хэлбэл: Давталтын бие
нь нэг буюу хэд хэдэн алхмуудын дараалал байна.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Давталт
*Давталтын хувьд давталтыг төгсгөх нөхцөл, уг нөхцлийг
үнэн худлаас хамааран биелэгднэ.
*Давталтыг төгсдөг болгохын тулд нөхцөл шалгах
үйлдлийг ашигладаг.
*Давталтыг төгсгөх нөхцөл нь давталтын төгсгөлгүй
үргэлжлэх үйл ажиллагааг зогсоох үүрэгтэй.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Давталт

*Аливаа бодлогын алгоритмыг зохиохдоо түүнийг


давталттайгаар хурдан, хялбар илэрхийлэх зорилго тавьж
сурах хэрэгтэй.
*Алгоритмд давталт хэрэглэснээр алгоритм, програм
зохиох ажил хөнгөвчлөгддөг. Энэ бол програмчлалын нэг
үндсэн зарчим юм.
*Гэхдээ шаардлагагүй олон давталтаас зайлсхийх
хэрэгтэй.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Давталт

Давталтыг ажиллаж байгаа хэлбэрээс нь хамааруулан 3


ангилдаг. Үүнд:
1. Өмнөх нөхцөлт давталт
2. Дараах нөхцөлт давталт
3. Параметрт давталт

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Өмнөх нөхцөлт давталт

*Төгсгөх нөхцлийг давталтын


бие биелэгдэхийн өмнө шалгаж төгсгөх 0
нөхцөл
байгаа давталтыг өмнөх
нөхцөлт давталт гэнэ. 1
* Өмнөх нөхцөлт давталтыг Давталтын бие
алгоритмд зурган дээрхи
хэлбэрээр дүрсэлнэ.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Өмнөх нөхцөлт давталт
• Төгсгөх нөхцлийг
шалгана.
төгсгөх 0
• Хэрэв “үнэн” утгатай
нөхцөл
буюу нөхцөл биелж
1
байвал давталтын бие
алхам 1 биелэгдэнэ.
...
алхам n • Харин төгсгөх нөхцөл
биелэгдэхгүй болсон
тохиолдолд давталт
дуусна.
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Өмнөх нөхцөлт давталт
Өмнөх нөхцөлт давталт хэрэглэхдээ дараах шинжүүдийг
анхаарах хэрэгтэй. Үүнд:
1. Төгсгөх нөхцлийг шалгаж давталт эхэлдэг учир
нөхцөл нь давталт эхлэхээс өмнө тодорхой утгатай
болсон байх ёстой.
2. Төгсгөх нөхцлийг шалгаж давталт эхэлдэг учир
анхнаасаа биелэгдэхгүй буюу нөхцөл худал утгатай
байвал давталтын бие биелэгдэхгүй шууд давталтын
дараах үйлдэлд шилжинэ.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Өмнөх нөхцөлт давталт
3. Давталтын төгсгөх нөхцөлд нөлөөлөх, Өх түүний утга
өөрчлөгдөхөд нөлөөлөх ямар нэг алхам давталтын бие
дотор заавал орсон байх ёстой. Ороогүй үед нөхцөл
үргэлж “үнэн” утгатай байж үргэлжилсэн давталт
үүсэхэд хүрнэ.
4. Давталтын бие биелэгдэх бүрд түүнийг төгсгөх
нөхцлийн утга өөрчлөгдөх учраас (зөв нөхцөл бичсэн
тохиолдолд) нөхцлийн утга “худал” болсон үед
давталт төгсөж давталтын дараах үйлдэлд шилжинэ.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Өмнөх нөхцөлт давталт

Өмнөх нөхцөлт давталтын хувьд давталтын бие төгсгөлөг


удаа биелэгдэхэд “худал” утгатай болдог тийм нөхцлийг
зөв нөхцөл гэнэ.
5. Давтах үйлдэл төгсгөх нөхцөл “ худал ” утгатай болох
хүртэл давтагддаг учир хэдэн удаа давтагдах нь
алгоритмыг биелүүлэхээс өмнө тодорхойгүй байдаг.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Жишээ 1
Энэ давталтын төгсгөх нөхцөл эхлэл
нь
* i<=n ба i хувьсагчийн утга S=0, i=1, n

n-ийн утгаас бага юмуу


- +
тэнцүү бол S=S+i, i=i+1 i<=n
үйлдлийг давтан биелүүлнэ. S=S+i
S
* Тэгээд i хувьсагчийн утга i=i+1

n-ийн утгаас их болоход


давталт төгсөнө.
төгсөв

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Дараах нөхцөлт давталт

*Төгсгөх нөхцлийг давталтын бие


биелэгдсэний дараа шалгаж Давталтын бие
байгаа алгоритмыг дараах
нөхцөлт давталт гэнэ.
0 1
төгсгөх
нөхцөл
*Дараах нөхцөлт давталтыг
алгоритмд зураг дээрхи хэлбэрээр
дүрсэлнэ.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Дараах нөхцөлт давталт
Дараах нөхцөлт давталтанд:
алхам 1
...
* Давталтын биеийг биелүүлнэ. алхам n
* Дараа нь төгсгөх нөхцлийг
шалгана. 0 1
төгсгөх
* Хэрэв “худал” утгатай байвал нөхцөл
давталтыг үргэлжлүүлнэ.
* “үнэн” бол дуусгана.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Дараах нөхцөлт давталт
Дараах нөхцөлт давталт доорх онцлог шинжтэй байна.
Үүнд:
1. Давталтын бие биелсэний дараа төгсгөх нөхцлийг
шалгаад дахин давтах эсэхийг тогтоох учир түүний бие
ядаж нэг удаа заавал биелэгддэг.
2. Нөхцөлд нөлөөлөх. (нөхцлийн утгыг өөрчлөх ямар нэг
алхам давталтын бие дотор заавал бичигдсэн байх
ёстой).

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Дараах нөхцөлт давталт
3. Дараах нөхцөлт давталтын хувьд түүний бие
төгсгөлөг тооны удаа биелэгдэхэд “үнэн” утгатай
болж чадах тийм зөв нөхцлийг сонгож бичсэн байх
ёстой.
4. Төгсгөх нөхцөл үнэн утгатай болж давталт дуусахад
давталтын дараах үйлдэлд шилжинэ.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Жишээ 1-г дараах нөхцөлт давталтаар бодъё.
Энд бичсэн давталтанд: эхлэл
• i-ийн утга n-ээс их болтол
S=0, i=1, n
S=S+i, i=i+1 үйлдлийг
давтан биелүүлнэ. S=S+i
• Өх: i-ийн утга n-ийн утгаас i=i+1
их болоход давталт төгсөнө. -
+
• Үр дүнд 1+2+…+n i>n
нийлбэрийн утга S S
хувьсагчид гарна.

төгсөв

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Жишээ 2
Өгөгдсөн тоо анхны тоо мөн эсэхийг шалгах алгоритм
зохио.
Бодолт
* Давталтын хувьсагч I-ийн утгыг 2-оос N-1 хүртэл
давтана.
* Энэ давталт дотроо N нь I-д хуваагдаж байвал is_prime
хувьсагчид худал гэсэн утгыг өгнө.
* i-ийн бүх утгуудын хувьд үлдэгдэлгүй хуваагдах нэг ч
тохиолдол гарахгүй бол үүнийг анхны тоо гэж үзнэ.
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Жишээ 3 (итерацийн давталт)
S=sinx+sin(2*x)/2 + sin(3*x)/3+…= ∑sin(i*x)/i дарааллын гишүүдийн
хувьд |F(i)|<℮ нөхцөл биелэгдэх хүртэлх нийлбэрийг олох.

Бодолт
• Нийлбэрийн дүнг хадгалах S хувьсагчид 0 гэсэн анхны утгыг
өгнө.
• Давталт функцын утгын абсолют хэмжээ e-гээс бага болтол
үргэлжилнэ.
• Давталт дотор функцын утгыг бодож гарсан дүнг нийлбэрийн S
хувьсагч дээр нэмж өгнө.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
Жишээ 4
Хоёр цифр нь ялгаатай байх бүх хоёр оронтой тоог олох
алгоритмыг блок схемээр илэрхийлэх.
Бодолт:
* Өмнөх нөхцөлтэй давталт тул давталтын нөхцөлийг эхэнд
шалгана.
* Давталтын хувьсагч j-д 10 гэсэн анхны утга өгөөд j<100 гэсэн
нөхцөл биелэж байвал давталтыг үргэлжлүүлнэ.
* Учир нь хоёр оронтой тоо нь 10-аас 99 хүртэлх тоо байна.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


* Давталт дотор эхний ба
сүүлийн цифрийг олж
хооронд харьцуулна.
* Тэнцүү биш байвал ийм
утгын тоог хадгалах соunt
хувьсагчийг нэгээр нэмнэ.
*Нөхцөл биелэхгүй
болмогц count-ийг
хэвлэнэ.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


ВИРТУАЛ ТЕХНОЛОГИЙН ТЭНХИМ,
Е-НЭЭЛТТЭЙ ИНСТИТУТ

Нэмэлт: C++ Давталтууд

www.emust.edu.mn
Давталт
Давталт нь программын нэг хэсгийг тодорхой тоогоор давтаж биелүүлэх зорилгоор
ашиглагдана. Нөхцлийн үр дүн үнэн байгаа тохиолдолд давталт биелэгдсээр байх
болно. Харин нөхцөл худлаа болоход давталт зогсож удирдлага давталтын
дараагийн коммандад шилжих болно. C++ нь for, while, do гэсэн 3 төрлийн
давталттай байна.

FOR Давталт

Энэ давталт нь C++-ийн болон аливаа хэлний энгийн давталт юм. Ер нь for давталт нь
программчлалын бараг бүх хэлүүдэд байх бөгөөд хэсэг командууд болон блокт
байгаа үйлдлүүдийг давтан биелүүлнэ.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


for /параметрт/ давталт

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


For давталт
For( анхны утга оноох, нөхцөл шалгах, утга өөрчлөх) {
команд 1 .. n
үйлдэл 1 .. n
бусад 1 .. n }
Анхны утга оноох. / Энэ үйлдэл нь зөвхөн давталт эхлэх үед ганцхан удаа
биелэгдэнэ.
Нөхцөл шалгах. / Энэ үйлдэл нь ихэвчлэн харьцуулах операторыг ашиглана.
*Давталт бүрийн өмнө биелэх ба давталт дахин хийгдэх эсэхийг
тогтоох үүрэгтэй.
*Нөхцлийн үр дүн үнэн бол давталт дахин биелэгдэж, эсрэг тохиолдолд
давталт дуусна.
Утга өөрчлөх. / Энэ үйлдэл давталтын хувьсагчийн утгыг өөрчлөх
Жишээлбэл : ++j & --j / j=j+1 эсвэл j=j-1
мөн j+=3 & j-=5 / j=j+3 эсвэл j=j-5

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


For давталт
Жишээлбэл: 0-оос 14 хүртэлх тооны квадратуудыг дэлгэцэнд харуулдаг Fordemo.cpp гэсэн
жишээ байна. Энэ программ яаж ажиллаж байна вэ?
* For давталт нь for гэсэн үг ба хаалт бүхий 3 үйлдлээс тогтжээ.
//Fordemo.cpp * Эдгээр нь харгалзан анхны утга олгох, нөхцөл шалгах, утгыг
#include <iostream> өөрчлөх үйлдлүүд юм.
using namespace std; * Жишээний хувьд давталтын хувьсагч нь j юм.
* Давталтын бие нь cout << j*j <<” ” гэсэн ганцхан командаас
int main() бүрдсэн байна.
{ * Энэ команд нь j-ийн квадрат тоог зайгаар тусгаарлан дэлгэцэнд
int j; хэвлэж байна.
for (j=0; j<=15; ++j) * Давталт биелэхэд j нь 0, 1, 2, 3 гэх мэтчилэн утгуудыг дараалан
авах бөгөөд тэр бүрд квадратууд нь хэвлэгдсээр дээр харуулсан
cout << j*j <<" ";
үр дүнг хэвлэж гаргана.
}
Анхаарах зүйл: For гэсэн мөрийнхөө төгсгөлд ( ; ) тавьдаггүй.
Учир нь энэ мөр ба давталтын бие нь нэг бүхэл команд гэсэн
Үр дүнд: утгыг илэрхийлэх юм.
0 1 4 9 16 25 36 49 64 81 100 121 144 169 196
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
For давталт
Жишээлбэл: 1-ээс 10 хүртэлх тоонуудын кубуудыг дэлгэцэнд хоёр багана ашиглан
хэвлэнэ. Давталтын бие дэх бүлэг үйлдлүүд
//cubelist.cpp
#include <iostream.h> * Программчлах явцад давталтын биед нэг биш хэд
#include <iomanip.h> хэдэн үйлдлүүдийг ( { } ) хашиж бичиж болно.
* Хааж байгаа хаалтны дараа цэгтэй таслалыг тавих
шаардлагагүй.
void main() * Жишээнд давталтын биед гурван команд
1 1
{ агуулагдсан 2 8
байна. Энэ жишээ нь 1-ээс 10 хүртэлх тоонуудын 3 27
int numb; кубуудыг дэлгэцэнд хоёр багана ашиглан 4 64
for (numb=1; numb<=10; numb++) хэвлэнэ.
Анхаарах зүйл : Сүүлийн жишээнд int төрлийн cube 5 125
{
гэсэн хувьсагч тодорхойлогдсон билээ. 6 216
cout << setw(4) << numb; 7 343
int cube=numb*numb*numb; int cube=numb*numb*numb;
8 512
cout << setw(6) << cube << endl; 9 729
Энэ хувьсагчид та уг блокийн гадна талд утга олгож
} болохгүй. 10 1000
}
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
For давталт. давталтын хувилбарууд.
Жишээлбэл: n-ийн факториал олох.
• Давталтын хувьсагчийн анхны утга нь numb,
//factor.cpp • Давталтын эцсийн утга 1 (numb > 0), давталт бүрд
#include <iostream> давталтын утга 1-ээр буурч байна.
#include <iomanip> • Тооны факториалыг олоход unsigned long төрлийн
хувьсагч ашиглаж байна.
using namespace std;
int main() FOR давталтын бичлэгт хувьсагч тодорхойлох нь
{
unsigned int numb; Энэ жишээнд бас нэгэн шинэ бичиглэл буюу
давталтын хувьсагч j давталтын бичиглэл дотор шууд
unsigned long fact=1; зарлагдсан байна.
cout << “Too oruulna uu: "; for (int j=numb; j>0; j--)
cin >> numb;
for (int j=numb; j>0; j--) Үр дүнд:
fact*=j; Too oruulna uu : 10
cout << "Factorial ni " << fact; Factorial ni 3628800
} Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
For давталт
Хэд хэдэн анхны утга оноох ба нөхцөл шалгах

For давталтын бичиглэлд хэд хэдэн утга оноох ба нөхцөл шалгах үйлдлүүдийг нэг
зэрэг хийж болно. Үүний тулд таслал ( , ) - ыг ашиглана. Эсвэл утга өөрчлөх үйлдлийг
ч хэд хэдээр нь хийж болно. Доорх жишээнд энэ тухай үзүүлж байна.

For (j=0, alpha=100; j<50; j++, beta--)

Энэ жишээнд j гэсэн энгийн давталтын хувьсагч байгаа боловч мөн alpha хувьсагчид
анхны утга оноож, beta хувьсагчийн утгыг өөрчилж байна. Энд байгаа j болон alpha,
beta хувьсагчууд заавал бие биетэйгээ холбоотой буюу харилцаж байх шаардлагагүй.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


While давталт

Өмнө үзсэн for давталт нь нэгэн бүлэг тодорхой тоогоор давтан биелүүлдэг. Гэтэл
давталт хэдэн удаа биелэх нь огт мэдэгдэхгүй байх тохиолдолд яах вэ? .

*EndOn0 гэх дараагийн жишээнд хэрэглэгчээс тоо оруулж, хэрэглэгч 0 гэсэн утга
өгтөл давталтыг үргэлжлүүлэх юм.
*Энэ программын хувьд хэрэглэгч хэдэн удаа тэгээс ялгаатай утга өгөх нь тодорхой
биш юм.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


while / өмнөх нөхцөлт/давталт

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


while / өмнөх нөхцөлт/давталт
Тайлбар:
– for ( ; нөхцөл ; ) while (нөхцөл)
үйлдлүүд; үйлдлүүд;

– for (илэр1; илэр2; илэр3) үйлдлүүд;

илэр1;
while(илэр2) { үйлдлүүд; илэр3; }

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


While давталт
* While давталт нь for давталтын хялбар хувилбар нь гэж ойлгож болох юм.
* Учир нь энэ давталтанд шалгах нөхцлөөс өөр ямар ч анхны утга оноох ба утга
өөрчлөх үйлдлүүд байхгүй юм.
//EndOn0.cpp * Нөхцөл л үнэн байвал давталт үргэлжилсээр л байх болно.
#include <iostream> * Дээрх жишээнд хэрэглэгч 0 гэсэн утга оруултал n!=0 гэсэн нөхцөл үнэн
хэвээрээ байх болно.
#include <iomanip>
using namespace std; Анхааруулах зүйл:
int main() - Давталтын хувьсагчийн анхны утга давталт эхлэхээс өмнө өгөгдөнө.
- Харин давталт дотор давталтын хувьсагчийн утгыг өөрчлөх ямар нэгэн үйлдэл
{ хийж өгөх ёстой
int n=99; - Ингээгүй тохиолдолд энэ нь үл дуусах давталт болно.
while (n!=0) cin>>n;
Дээрх жишээнд давталтын утга өөрчлөх үйлдэл нь cin >> n юм.
}
Үр дүнд:
Энд үзүүлсэн мөрийн тоо
хэд ч байж болно.
1
27
33
144
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 9
While давталт. While давталтаар бүлэг үйлдэл хийх.
Жишээлбэл: Cubelist жишээг өргөтгөж үр дүнг ердөө 4 тэмдэгтийн зайнд
хэвлэх, тоонууд маань 4 зэрэг нь 9999-ээс хэтрэхгүй байх ёстой гэж үзвэл:
//while4.cpp
#include <iostream>
#include <iomanip>
using namespace std; - pow хувьсагч нь
int main() Numb-ийн 4 зэргийг Үр дүнд:
{ хадгалах бөгөөд
1 1
int pow=1; давталтын нөхцөлд
2 16
int numb=1; numb-ийг биш, pow
3 81
while (pow<9999) хувьсагчийг шалгаж
4 256
{ байна.
cout << setw(2) << numb; 5 625
cout << setw(5) << pow << endl; 6 1296
++numb; 7 2401
pow=numb*numb*numb*numb; 8 4096
} 9 6561
}
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ
While давталт. Арифметик үйлдэл болон харьцуулах үйлдлийн биелэх эрэмбэ.
//fibo.cpp Жишээлбэл: Фибаноччийн цувааг дэлгэцэнд хэвлэн гаргах.
(1 1 2 3 5 8 13 21 34 55 г.м.)
#include <iostream>
using namespace std; Анхаарах зүйл :
int main() Програмд (next<limit/2) гэж тодорхойлсон байна.
{ Уг нь бид үйлдлийг зөв хийлгэхийн тулд
(next<(limit/2)) гэж бичих ёстой.
const unsigned long limit=4294967295;
unsigned long next=0; ? Гэтэл дээрх жишээнд яагаад ингэж бичилгүйгээр зөв үр
unsigned long last=0; дүнд хүрсэн бэ?
while (next<limit/2) *Учир нь арифметик үйлдэл нь биелэх эрэмбээрээ
{ харьцуулах үйлдлээс өндөр байдагт байгаа юм.
cout << last << " "; Үр дүнд:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
long sum=next+last; 987 1597 2584 4181 6765 10946 17711
next=last; 28657 46368 75025 121393 196418
317811 514229 832040 1346269 2178309
last=sum; 3524578 5702887 9227465 14930352
} 24157817 39088169 63245986 102334155
165580141 267914296 433494437
} 701408733 1134903170 1836311903
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ 2971295073
Do .. While давталт

Өмнөх while давталтын хувьд давталтын нөхцлийг эхэнд нь шалгаж байна.


• Хэрвээ давталт эхлэхэд давталтын нөхцөл худал утгатай байвал уг давталт огт
биелэхгүй юм.
• Гэтэл зарим тохиолдолд нөхцөл ямар байхаас хамааралгүйгээр давталтын бие ядаж
нэг удаа биелэх шаардлага гарч болно.
• Энэ тохиолдолд та нөхцлөө төгсгөлд нь шалгадаг do ... while гэсэн давталтыг
ашиглах нь илүү зохимжтой.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


do ... while /дараах нөхцөлт/давталт

Дараах нөхцөлт давталт


• while давталттай адилхан боловч, нөхцөл нь ардаа байна.
• Дор хаяж нэг удаа биелэгддэг.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


do ... while /дараах нөхцөлт/давталт

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


do ... while /дараах нөхцөлт/давталт

Бичигдэх хэлбэр:
do
үйлдлүүд;
while (нөхцөл);

do...while давталт нь
1. Үйлдлүүдийг биелүүлнэ.
2. Нөхцөл шалгана.
3. Хэрэв нөхцөл үнэн бол 1-р алхамд шилжинэ.
4. Дараагийн үйлдэл

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Do давталт
Жишээлбэл: Divdo гэсэн дараагийн жишээнд хэрэглэгчийн оруулж өгсөн эхний тоог хоёр дахь тоонд хувааж,
ногдвор болон үлдэгдлийг нь дэлгэцэнд хэвлэж байна.
//divdo.cpp
#include <iostream> * Энэ программ ердөө ганцхан do давталтаас тогтож
using namespace std; байна.
int main() { * Do гэсэн үг давталтын эхлэлийг зааж, давталтын бие {}
long dividend, divisor; хаалтаар хашигдсан байна.
char ch; * Харин давталтын төгсгөлийг while мөр илэрхийлж
do байгаа юм.
{ * Давталтын төгсгөлд бичигдсэн тул хойно нь ( ; ) тавина.
cout << “Хуваагдагч: “; cin >> dividend; * ‘n’-ээс ялгаатай үсэг дарвал нөхцөл үнэн утга авч
cout << “Хуваагч: “; cin >> divisor; давталт дахин биелэх юм.
cout << “Бүхэл нь “ << dividend/divisor; Үр дүнд:
cout << “, үлдэгдэл нь “ << dividend%divisor; Хуваагдагч: 11
cout << “\nҮргэлжүүлэх үү? (Y/N): “; Хуваагч: 3
cin >> ch; Бүхэл нь 3, үлдэгдэл нь 2
Үргэлжлүүлэх үү? (Y/N) y
}
Хуваагдагч: 222
while (ch!=’n’); } Хуваагч: 17
Бүхэл нь 13, үлдэгдэл нь 1
Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ Үргэлжлүүлэх үү? (Y/N) n
break команд
Break , continue командуудыг ашиглан давталтын урсгалыг өөрчлөх
боломжтой байдаг.
break командын тусламжтайгаар давталтаас гарна.
– Зарим тохиолдолд давталтын төгсгөх нөхцөлөөс шатгаалахгүйгээр
давталтаас гарах шаардлагатай байдаг.
– Жишээ нь:
for (x=0; x<10000; x++) {
if ( x*x % 5==1) break;
... үйлдэл 1
}
… үйлдэл 2
– хэрэв x*x % 5 == 1 үед давталт зогсоно.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


continue команд

continue команд нь тухайн утганд дахь давталтыг зогсоож, дараагийн


утгаас цааш үргэлжлүүлдэг команд юм.
– Жишээ нь:
for (x=0; x<10000; x++) {
if (x*x % 5 == 1) continue;
x=x+ x*x % 5;

}

– x*x % 5 == 1 үед давталтыг гүйцэтгэхгүй бусад тохиолдолд биелүүлнэ.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


goto команд #include <iostream>
goto команд нь програмын using namespace std;
аль нэг хэсэг рүү шилжихэд int main()
хэрэглэгддэг. { int sum=0;
Энэ командыг зайлшгүй for(int i = 0; i<=10; i++){ sum =
шаардлагатай тохиолдолд sum+i;
хэрэглэнэ. if(i==5){
goto addition;
}
}

addition:

}

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ


Давталт
Зөвлөмж : Давталтуудыг хэрхэн ашиглавал зохимжтой вэ?

*For давталт нь уг блок хэдэн удаа биелэх шаардлагатайг мэдэж байгаа тохиолдолд
ашиглахад зохимжтой юм.

*Харин үлдсэн хоёр давталтыг давталт хэдийд дуусах нь тодорхойгүй тохиолдолд


ашиглана.

*Давталт дор хаяж нэг удаа биелэх шаардлагатай бол do ..while давталтыг, харин
эсрэг тохиолдолд while давталтыг ашиглах нь зүйтэй.

*Гэхдээ эдгээр нь зөвхөн зөвлөгөө бөгөөд зохицуулж чадвал аль ч тохиолдолд ямар ч
давталтыг нь ашиглаж болох юм.

Виртуал Технологийн Тэнхим, Е-НЭЭЛТТЭЙ ИНСТИТУТ

You might also like

  • Lec1-1 Corporate Activity Shine
    Lec1-1 Corporate Activity Shine
    Document61 pages
    Lec1-1 Corporate Activity Shine
    Amarsaikhan Tuvshinbayar
    0% (1)
  • Lecture 15
    Lecture 15
    Document40 pages
    Lecture 15
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 9
    Lecture 9
    Document46 pages
    Lecture 9
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 6 2018
    Lecture 6 2018
    Document50 pages
    Lecture 6 2018
    Amarsaikhan Tuvshinbayar
    100% (3)
  • Lecture 13
    Lecture 13
    Document46 pages
    Lecture 13
    Amarsaikhan Tuvshinbayar
    100% (2)
  • Lecture 5 2018
    Lecture 5 2018
    Document54 pages
    Lecture 5 2018
    Amarsaikhan Tuvshinbayar
    100% (2)
  • Lecture - 10
    Lecture - 10
    Document35 pages
    Lecture - 10
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 6
    Programming Lec 6
    Document51 pages
    Programming Lec 6
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 12
    Lecture 12
    Document34 pages
    Lecture 12
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 11
    Lecture 11
    Document24 pages
    Lecture 11
    Amarsaikhan Tuvshinbayar
    100% (2)
  • Lecture 7 20108
    Lecture 7 20108
    Document47 pages
    Lecture 7 20108
    Amarsaikhan Tuvshinbayar
    75% (4)
  • Lecture 8 2018
    Lecture 8 2018
    Document54 pages
    Lecture 8 2018
    Amarsaikhan Tuvshinbayar
    100% (3)
  • Lecture 2 2018
    Lecture 2 2018
    Document33 pages
    Lecture 2 2018
    Amarsaikhan Tuvshinbayar
    100% (1)
  • Lecture 3 2018
    Lecture 3 2018
    Document42 pages
    Lecture 3 2018
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • IT101 Lecture 4
    IT101 Lecture 4
    Document72 pages
    IT101 Lecture 4
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Baikal Hotolbor
    Baikal Hotolbor
    Document2 pages
    Baikal Hotolbor
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 3
    Lecture 3
    Document72 pages
    Lecture 3
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 1 2018
    Lecture 1 2018
    Document39 pages
    Lecture 1 2018
    Amarsaikhan Tuvshinbayar
    100% (6)
  • Lecture 3
    Lecture 3
    Document72 pages
    Lecture 3
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 2
    Lecture 2
    Document80 pages
    Lecture 2
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 7
    Programming Lec 7
    Document57 pages
    Programming Lec 7
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Lecture 1
    Lecture 1
    Document54 pages
    Lecture 1
    Amarsaikhan Tuvshinbayar
    100% (2)
  • Programming Lec 4
    Programming Lec 4
    Document39 pages
    Programming Lec 4
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 9
    Programming Lec 9
    Document39 pages
    Programming Lec 9
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 6
    Programming Lec 6
    Document51 pages
    Programming Lec 6
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Koosen 2018 Algorithm 2
    Koosen 2018 Algorithm 2
    Document48 pages
    Koosen 2018 Algorithm 2
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Programming Lec 8
    Programming Lec 8
    Document32 pages
    Programming Lec 8
    Amarsaikhan Tuvshinbayar
    100% (1)
  • PL - 3
    PL - 3
    Document47 pages
    PL - 3
    Amarsaikhan Tuvshinbayar
    No ratings yet
  • Koosen 2018 Algorithm Programming 3
    Koosen 2018 Algorithm Programming 3
    Document46 pages
    Koosen 2018 Algorithm Programming 3
    Amarsaikhan Tuvshinbayar
    100% (1)