ашиглаж ирсэн билээ. Харин хэрэглэгч өөрийн сонирхолд нийцүүлэн, олон давтагдах үйлдэлийг товчлох, бичлэгийг хэмнэх зорилгоор функц үүсгэн ашиглаж болдог. Ямар ч програмчлалын хэлэнд функц үүсгэн ашиглах ерөнхий зарчим нь адилхaн байдaг.
С хэлний функцын ерөнхий бичлэг нь:
<Буцаах утгын төрөл><Функцийн нэр>(<Төрөл><Зарлалт>)
<Хувьсагчдыг зарлах>
{
<Дотооод хувьсагчдыг зарлах>
<Командууд>
...
return (Буцаах утга);
}
Хэрвээ функц утга буцаах шаардлагүй бол түүний нэрийн өмнө void түлхүүр үгийг бичиж өгөх буюу ямар ч түлхүүр үг бичихгүй байж болно. (void гэсэн түлхүүр үгийг бичиж өгөөгүй үед return 0; гэсэн бичлэгийг ашигласан байдгийг анзаарсан байх.)
Функц руу утга дамждаг бол тухайн хувьсагчдыг функцийн нэрийн ард хаалтан дотор төрөлийн хамт бичнэ.
Хэрэв функц утга хүлээн авдаггүй бол хаалтан дотор юу ч бичихгүй.
Харин одоо функц ашиглан бодсон бодолтыг сонирхъё.
SPOJ-ын бодлогын архив2222. Бутархай
Бодлогын дугаар: CSMS0010
Энгийн бутархайн хүртвэр нь хуваариасаа бага бол зөв бутархай гэнэ. Мөн өгөгдсөн бутархайгаас хүртвэр болон хуваариараа бага бөгөөд түүнтэй тэнцүү бутархай байхгүй бол анхны бутархайг үл хураагдах бутархай гэнэ. Хүртвэр болон хуваарийнх нь нийлбэр n-тэй тэнцүү байх хамгийн их утгатай зөв, үл хураагдах бутархайг ол.
Input
ганц n бүхэл тоо байна (3 <= n <= 1000)
Output
олдсон бутархайн хүртвэр болон хуваарийг гаргана
Example
Input:
10
Output:
3 7
Input:
23
Output:
11 12
Өгүүлбэрээс бутархайн хуваарь, хүртвэрийг нийлбэр нь n, тэдгээрийн ялгавар нь хамгийн бага, ХИЕХ нь 1-тэй тэнцүү байхаар авах нь тодорхой байна. Хүртвэрийг n/2-оос эхлэн нэг нэгээр бууруулж, хуваарийг нэг нэгээр нэмэгдүүлэх үйлдлийг ХИЕХ нь 1 болтол хийх шийдлийг сонгоё. Харин ХИЕХ=1 эсэхйиг шалгахдаа Евклидийг алгоритмийг ашиглан 2 тооны ХИЕХ-ыг олох функц үүсгэн ашиглая.
#include <stdio.h>
long int XIEX(long int a,long int b)
{
while(a!=0 && b!=0)
{
if(a>b) a%=b;
else b%=a;
}
if (a!=0 && b==0) return a;
if (b==0 && a!=0) return b;
}
void main()
{
long int n;
long int x,y;
scanf("%ld",&n);
for(x=n/2; x>0; x--)
{
y=n-x;
if(XIEX(x,y)==1)/**/
{
printf("%ld %ld\n",x,y);
break;
}
}
}
Hi Hanoi tower n tuhai tawj ugj tuslaash plse
ReplyDelete