Happy valentine's day. while давталтын тухай.
Уншиж байгаа бүхнийгээ өөрийн болгох нь хамгийн чухал болхоор олон бодлого бодож байгаарай. Доорх кодыг урьдын адил энэ сайтад байрласан байгаа. Энэд бичсэн өгөгдсөн тооны цифрийн нийлбэрийг олох бодлогын санаа бол өгөгдсөн тооны хамгийн сүүлийн цифрийг олоод нэг хувьсагчид утгыг нэмнэ. Дараа нь энэ цифрийн урд талын цифрийг нэмнэ. Дараа нь тэрний урд талын гэх мэт гэхдээ энийг яаж нэмэх вэ? гэвэл бид хамгийн ард талын цифрийг олж чадна. Энэ нь тэр тоог 10д хуваасан үлдэгдэл юм. Харин тэрний урд талын цифрийг яаж олох вэ? гэвэл тэр тоог 10д хуваагаад гарсан хариуг 10д хуваасан үлдэгдэл юм. Гэх мэтчилэн энэ тоо 0-ээс их бол энэ үйлдлүүдийг үргэлжлүүлээд л хийгээд байх болно. Үүнийг while давталт ашиглана. Жишээ нь : 142 гэсэн тооны хувьд бодоцгооё.
Уншиж байгаа бүхнийгээ өөрийн болгох нь хамгийн чухал болхоор олон бодлого бодож байгаарай. Доорх кодыг урьдын адил энэ сайтад байрласан байгаа. Энэд бичсэн өгөгдсөн тооны цифрийн нийлбэрийг олох бодлогын санаа бол өгөгдсөн тооны хамгийн сүүлийн цифрийг олоод нэг хувьсагчид утгыг нэмнэ. Дараа нь энэ цифрийн урд талын цифрийг нэмнэ. Дараа нь тэрний урд талын гэх мэт гэхдээ энийг яаж нэмэх вэ? гэвэл бид хамгийн ард талын цифрийг олж чадна. Энэ нь тэр тоог 10д хуваасан үлдэгдэл юм. Харин тэрний урд талын цифрийг яаж олох вэ? гэвэл тэр тоог 10д хуваагаад гарсан хариуг 10д хуваасан үлдэгдэл юм. Гэх мэтчилэн энэ тоо 0-ээс их бол энэ үйлдлүүдийг үргэлжлүүлээд л хийгээд байх болно. Үүнийг while давталт ашиглана. Жишээ нь : 142 гэсэн тооны хувьд бодоцгооё.
- Хамгийн арын цифр 2 энэ тоог хариунд нэмээд 10д хуваана. Одоо энэ тоо 14 болно. Хариу нь 2 болно.
- Хамгийн арын цифр 4 энэ тоог хариунд нэмээд 10д хуваана. Одоо энэ тоо 1 болно. Хариу нь 6 болно.
- Хамгийн арын цифр 1 энэ тоог хариунд нэмээд 10д хуваана. одоо энэ тоо 0 болно. Хариу нь 7 болно.
- Энэ тоо 0тэй тэнцүү тул цааш бодох шаардлагагүй юм ингээд давталт зогсоно. Тэгээд хариуг хэвлэнэ.
while( нөхцөл ) {
хэрвээ while-ын хаалтан доторхи нөхцөл үнэн бол
{} доторхи үйлдлүүд хийгдэнэ.
}
- // Энэ удаад while давталтын тухай орууллаа.
- #include <stdio.h>
- int main() {
- // Энэ нь мөн байнга ашиглагдах зүйлсийн нэг мөн.
- // Бодлого. Нэг бүхэл тоо өгхөд 1-ээс тэр тоо хүртэл 1 мөрөнд хэвлээд
- // дараагийн мөрөнд тэр тооны цифрүүдийн нийлбэрийг ол.
- /*
- while( нөхцөл ) {
- хэрвээ while-ын хаалтанд байгаа нөхцөл үнэн бол
- {} доторх үйлдлүүд хийгдэнэ.
- эсрэг тохиолдолд давталт зогсоно.
- }
- Ерөнхийдөө нэг ийм.
- */
- int n, i, s; // хувьсагчдаа зарлаж байна.
- scanf("%d", &n); // Оролтонд өгөх нэг тоогоо уншиж байна.
- i = 1; // бид 1-ээс эхлээд хэвлэх тул i = 1;
- while( i <= n ) {
- // Хэрвээ i гэсэн хувьсагчийн утга n-ээс бага буюу тэнцүү бол бид
- // хэвлэсээр байх болно. Тиймээс бидний нөхцөл бол i <= n
- printf("%d ", i); // i нь нөхцлийг биелүүлж байгаа тул хэвлэнэ.
- i += 1; // i = i + 1 гэсэнтэй адил. мөн i++ гэж болно.
- // i-ын утгыг нэгээр нэмэгдүүлнэ. Дараагийн тоог шалгаж үзнэ гэсэн үг юм.
- // бид i-ын утгыг өөрчлөхгүй бол хязгааргүй давталт болох юм.
- // Тиймээс нөхцөл болон өөрчлөгдөх утгаа зөв тооцох ёстой.
- }
- printf("\n"); // мөр шилжиж байна.
- s = 0; // одоо цифрүүдийн нийлбэрийг олно. Тэр утгыг s-д хадгалы.
- // s = 0 гэж өгөхгүй бол бид s хэд гэдгийг хэлж мэдэхгүй.
- while( n > 0 ) {
- // Хэрвээ n тоо тэгээс их бол энэ давталт үргэлжлээд л байна.
- s = s + (n%10);
- // s нь одоогийн n тооны 10д хуваасан үлдэгдэл буюу сүүлийн цифрээр нэмэгдэнэ.
- n /= 10; // n = n/10 гэсэнтэй адил
- // n тооны сүүлийн цифрийг бид нэмсэн тул энэ тооныхоо сүүлийн цифрийг хасах ёстой.
- // тэгхийн тулд энэ тоог 10-д хуваахад хангалттай юм.
- }
- printf("%d\n", s); // хариу болох s-ыг хэвлэнэ.
- return 0;
- }
Comments
Post a Comment