2008/10/22

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

Өмнөх нөхцөлт давталт нь дараах хэлбэртэй байна.
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

Миний бичсэн бичлэг танд өчүүхэн ч болтугай хэрэг болсон бол сэтгэгдлээ бичиж үлдээхийг хүсье. Баярлалаа :)