Өмнөх нөхцөлт давталт нь дараах хэлбэртэй байна.
while (давталтыг төгсгөх нөхцөл)
{
үйлдэл1;
үйлдэл2;
...
үйлдэлN;
}
Төгсгөх нөхцөлийг шалгаж эхэлж байгаа учир түүн доторхи хувьсагч давталт эхлэхээс өмнө ямар нэгэн утга авсан байна.
Жишээлбэл үйлдлийг n удаа давтаад зогсох бол
int a=0
while(a<=n)
{
үйлдлүүд;
a++;
}
хэлбэртэй байна.
Үүнийг ашиглан жишээ болгож Фибоначчийн дарааллын эхний N гишүүнийг хэвлэх програм бичье.
Фибоначчийн дараалал нь 1, 1-ээр эхлэн 1, 1, 2, 3, 5, 8... гэх мэтчилэн гишүүн бүр нь өмнөх 2 гишүүний нийлбэрээр илэрхийлэгддэг натурал тоон дараалал юм.
Эхний гишүүнийг 0, дараагийхыг 1 гэж үзээд 0, 1, 1, 2, 3, 5...-ийн эхний гишүүнийг алгасан хэвлэнэ. int last=1 зарласан ба printf("%d",last) гэсэн учир бидний програм зөв ажиллаж чадна.
#include "stdio.h"
main()
{
int n;
int c=1;
int next=0; // Дараагийн гишүүнийг гаргах нэмэгдэхүүнүүдийн эхний нэмэгдэхүүнийг 0 гэж сэтгэе.
int last=1; // 2 дах нэмэгдэхүүнийг 1 гэж үзье.
int sum; // 2 гишүүнийг нэмж гарсан нийлбэрийг тэмдэглэе.
scanf ("%d",&n); //гараас N тоог авна.
while (c<=n) // с тоог 1-ээс эхлэн нэмэгдүүлэх буюу дарааллын дараалсан 2 гишүүнийг нэмж дараагийн гишүүнийг гаргах үйлдэл n-1 хийгдэнэ гэсэн үг.
{
printf("%d ",last); // Нэмэх үйлдэл хийж гаргасан гишүүдийг хэвлэх үйлдэл
sum=next+last; //Өмнөх 2 гишүүнийг нэмж дараагтийн гишүүнийг гаргана.
next=last; //Өмнөх үйлдэл хийхэд оролцсон сүүлчийн гишүүнийг дараагийн үйлдлийн эхний нэмэгдэхүүн гэж үзнэ.
last=sum; //Түрүүчийн үйлдлийг хийгээд гарсан үр дүнг дараагийн үйлдлийн 2 дахь нэмэгдэхүүн болгон санах ойд хадгална.
c++; //Хэдэн удаа үйлдэл хийхийг заах үйлдэл. Өмнөх нөхцөл шалгахдаа c<=n гэж зааж өгсөн
}
}
Жишээ нь:
Оролт:
6
Гаралт:
1 1 2 3 5 8
No comments:
Post a Comment
Миний бичсэн бичлэг танд өчүүхэн ч болтугай хэрэг болсон бол сэтгэгдлээ бичиж үлдээхийг хүсье. Баярлалаа :)