Monday, August 23, 2010

അധിവര്‍ഷം കാണാന്‍ ഒരു C function

ഒരു വര്‍ഷം കിട്ടിയാല്‍ അത് അധിവര്‍ഷം(leap year) ആണോ അല്ലയോ എന്ന് നോക്കാനുള്ള ഒരു കൊച്ചു C function.

int Isleap(unsigned int year)
{
/*Return 1, if it is a leap year. return 0 if it is not a leap year*/
return ( !(year % 4) && ((year % 100) || !(year % 400)));
}

ഈ function ഉപയോഗിച്ച് നിരവധി ഉപയോഗങ്ങളുണ്ട്. ഉദാഹരണമായി, 1990 എന്ന വര്‍ഷത്തിലെ ദിവസങ്ങളുടെ എണ്ണം കാണണം എന്നിരിക്കട്ടെ, താഴെ കൊടുത്തിരിക്കുന്ന ഒരൊറ്റ ലൈന്‍ കോഡ് മതിയാവും.

noofdays = 365 + Isleap(1990);

പ്രോഗ്രാമിലെ യുക്തി:

താഴെ പറയുന്ന വസ്തുതകള്‍ പരിഗണിക്കുക.

1) ഒരു വര്‍ഷത്തെ 4 കൊണ്ട് ഹരിക്കാന്‍ കഴിയുമെങ്കില്‍, അത് 100 കൊണ്ട് ഹരിക്കാന്‍ പറ്റാതിരിക്കുകയോ 400 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുകയോ ചെയ്യുകയാണെങ്കില്‍ അത് അധിവര്‍ഷം ആണ്.
2) ഒന്നാമത്തെ വിഭാഗത്തില്‍ പെടാത്തതൊന്നും അധിവര്‍ഷം അല്ല.
3) ( divisor % divident) = 0 , ആണെങ്കില്‍ divident devisorഇന്‍റെ ഒരു ഘടകം(factor) ആണ്.
4) expression1 അല്ലെങ്കില്‍ expression2, ഇവയില്‍ ഏതെങ്കിലും ഒന്ന് പൂജ്യം ആയാല്‍ (expression1) && (expression2) ഉം പൂജ്യം ആയിരിക്കും.

ഇനി പ്രോഗ്രാമിലേക്ക്..

ചുവട് 1:
!(year % 4) : year എന്നത് 4 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുമെങ്കില്‍ ഇത് 1 ആണ്. ഇല്ലെങ്കില്‍ ഇത് 0 ആണ്. വസ്തുത 4-ഇല്‍ പറഞ്ഞ expression1 ആണിത്.

ചുവട് 2:
ചുവട് 1 ലെ ഉത്തരം പൂജ്യം ആണെങ്കില്‍ ഈ ചുവടിനു പ്രസക്തി ഇല്ല(വസ്തുത 4 നോക്കുക). അതായത്, 4 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുമെങ്കില്‍ മാത്രം ഈ ചുവട് ചെയ്‌താല്‍ മതി.
(year % 100) || !(year % 400): 100 കൊണ്ട് ഹരിക്കാന്‍ പറ്റാതിരിക്കുകയോ 400 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുകയോ ആണെങ്കില്‍ ഇത് 1 ആണ്. 4 കൊണ്ട് ഹരിക്കാന്‍ പറ്റുന്നതാണ് എന്ന് നേരത്തെ ഉറപ്പുള്ള സ്ഥിതിക്ക്, വസ്തുത 1 പ്രകാരം ഇത് അധിവര്‍ഷം ആയി കണക്കാക്കാം.

ഇനിയും ലളിതമായ വഴികള്‍ കണ്ടേക്കാം. പങ്കു വെക്കുമല്ലോ..