A Digital Age Deserves A Digital Leader

Determine a leap year

Determine a leap year

Postby marathonman » Thu Jan 06, 2005 5:24 pm

I'm useless at maths, could somebody help?

I need to check if a year is a leap year, within a BASIC program. It's actually Liberty BASIC v4.01 but the syntax is more or less standard BASIC. In fact a coded example is probably not neccessary, I just need to know mathematically how to do it.

Thanks for any help with this. My brain hurts after a lot of coding today & my mind has gone completely blank.

There's some VB code at http://www.freevbcode.com/ShowCode.asp?ID=391 but I'm not sure what it's on about, can anyone tell me what it is doing (just the guts that do the actual determination of leap year/not leap year?)

[edit]

Eh up. here's a QBASIC example which is closer to Liberty BASIC's syntax: (Liberty is basically QBASIC with a GUI)

Code: Select all
C. LEAP YEAR:
------------
To determine if a year is leap year, is actually a simple matter.
The rule is as folows:
If the year is evenly divisible by 4
and not divisible 100,
or if the year is evenly divisible by 400,
then it's a leap year.

Sample usage of ISLEAPYEAR function below:
Assume we looked up the maximum number of days per month in a table.
Now, if the month is February and the year is a leap year,
we want to add 1 to the maximum days per month.

IF MM=2 AND ISLEAPYEAR(YYYY) THEN MAXDAYS=MAXDAYS+1

The following is the function:
Note: It returns -1 when true (leap year), or 0 if false.

FUNCTION IsLeapYear (Z) STATIC
   IsLeapYear = (Z MOD 4 = 0 AND Z MOD 100 <> 0) OR (Z MOD 400 = 0)
END FUNCTION



I guess my question boils down to, what does:

Code: Select all
(Z MOD 4 = 0 AND Z MOD 100 <> 0) OR (Z MOD 400 = 0)


...mean in english ? (can someone explain the math terms..)

..guess this further boils down to, what is the MOD term?

There doesn't seem to be a MOD operator in Liberty BASIC :dontgetit

These are the math functions I have available in Liberty:

Arithmetic

Arithmetic operators are as follows:

+ addition
- subtraction
* multiplication
/ division
^ power

Examples:

print 2 + 3 'addition

print 6 - 2 'subtraction

print 4 * 7 'multiplication

print 9 / 3 'division

print 2 ^ 3 'power - (two to the third power)


print (4+2)*6^2 'multiple expressions are evaluated according to the following rules of order:

Order
Expressions are evaluated in this order:

( ) expressions within parentheses are evaluated first

^ exponents are evaluated next

* / multiplication and division are evaluated next

+ - addition and subtraction are evaluated last


See also:

SIN
COS
TAN
ASN
ACS
ATN
ABS
EXP
LOG
HEXDEC
DECHEX$
INT
MAX
MIN
RND
SQR
VAL
STR$
USING


Found some info here http://www.asp101.com/articles/steven/mod/default.asp about 'MOD' (??) but could still do with some help putting it all together, if someone would know how to do it :confused

I wonder if I could use Liberty's INT function:

Description:
This function removes the fractional part of "n" (a number), leaving only the whole number part behind. The fractional part is the part of the number after the decimal point.

Usage:

[retry]
input "Enter an integer number>"; i
if i<>int(i) then bell: print i; " isn't an integer! Re-enter.": goto [retry]


i.e. to check a year is 'evenly divisible', could I do the calculation, then compare the result with the "INT'ed" result, and if they're the same, it has been an 'even' division.. oh I dunno, am I making it too complicated.

Any math experts your opinion appreciated :lol:
marathonman

Postby ZeroByte » Thu Jan 06, 2005 8:13 pm

I think it would be pretty easy if your follow these rules.

'True if it is divisible by 4
'False if it is divisible by 100
'TRUE if it is divisble by 400

I'll try to come up with something for this.
ZeroByte
PRO Level 15
User avatar
Posts: 1199
Joined: Thu Aug 01, 2002 2:12 am
Location: Mexico, NY
Real Name: Mike Sheats

Postby marathonman » Thu Jan 06, 2005 8:27 pm

Does this look valid? Like, assuming the syntax is okay, it would give an accurate answer..

Code: Select all
Function IsLeapYear(Z)
    IsLeapYear = ((mod(Z, 4) = 0) AND (mod(Z, 100) <> 0)) OR (mod(Z, 400) = 0)
End Function

function mod(a,b)
    mod = (a/b - int(a/b)) * b
end function

marathonman

Postby poisonbl » Sun Jan 09, 2005 4:25 pm

i haven't even looked at basic in years but as for the programming and math of that, it looks like it should work, ... good implementation of the modulus function, ...but why multiply by "b" ?
Image
Image
PRO Level 10
User avatar
Posts: 432
Joined: Mon Nov 15, 2004 10:02 pm
Location: WVU -- Morgantown, WV. -- USA (TZ: -5 hrs GMT, -4 DST)

Postby Neuromancer » Sun Jan 09, 2005 5:08 pm

Okay its been 20 years since I programmed in BASIC but... I imagine something like this would work (I cant remember how to make it sort whole numbers (INT?) So I did it the long way

Code: Select all
10 input "Please type year.";a$
20 a$/4=b$
30 for c = 1 to 1000
40 if c=B$ then goto 70
50 next c
70 if b$=100 then goto 100
71 ib b$=200 then goto 100
72 if b$=300 then goto 100
73 if b$=400 then goto 100
74 if b$=500 then goto 100
75 if b$=600 then goto 100
76 ib b$=700 then goto 100
77 if b$=800 then goto 100
78 if b$=900 then goto 100
79 if b$=1000 then goto 100
80 print "This is a leap year."
90 Goto 110
100 print "This is not a leap year."
110 END



Well dont know if it helps but it was fun!

Oh BTW thats not liberty BASIC I never heard of that...
Thats basic BASIC ;)
Image

"The spirit of resistance to government is so valuable on certain occasions, that I wish it to be always kept alive. It will often be exercised when wrong, but better so than not to be exercised at all. I like a little rebellion now and then. It is like a storm in the atmosphere."--Thomas Jefferson
PRO GOLD
User avatar
Posts: 5756
Joined: Sun Mar 28, 2004 5:19 am
Location: West Virginia

Postby marathonman » Sun Jan 09, 2005 9:19 pm

why multiply by "b" ?


I don't know. I found it on a webpage. You're right, it shouldn't need it should it.. not simply to determine if mod is zero.. maybe non-zero mod values are mathematically incorrect without it. This is where my maths goes down the pan, I can count up to ten ok but further than that it's a struggle lol

Wow Neuro.. line numbers? they're antiques now aren't they? I remember feeling a bit lost at the point when BASIC moved away from them.. that was the point at which I entered a 10-year exile from the computer world, until the 'net started to become popular, whereupon I came back into the fold (and had to spend the next 5 years learning how to program all over again - scary how times change so fast)

Line numbers were great :yesnod: you can still use them in most modern BASICS I think, but it seems to be discouraged, certainly uncommon in the code I've seen recently. But if it does the job all's good!
marathonman

Postby Neuromancer » Sun Jan 09, 2005 9:27 pm

marathonman wrote:Wow Neuro.. line numbers? they're antiques now aren't they? I remember feeling a bit lost at the point when BASIC moved away from them.. that was the point at which I entered a 10-year exile from the computer world, until the 'net started to become popular, whereupon I came back into the fold (and had to spend the next 5 years learning how to program all over again - scary how times change so fast)

Line numbers were great :yesnod: you can still use them in most modern BASICS I think, but it seems to be discouraged, certainly uncommon in the code I've seen recently. But if it does the job all's good!


Ahh I told you I had not used BASIC in 20 years ;)

I have worked with vbs scripts a little bit, but it was mostly cut n paste and VERY little editing..

I will write a little DOS here and there, but programming isn't really my thing.

Is web design considered programming? I knew very little HTML and now am trying to find info on CSS, XHTML, PHP and eventually XML... my new site is incorporating a few of these and though I have GUI methods to take care of everything I always liked doing things the hardway. Got me in trouble a lot in school, when ever a teacher would tell me something I would ask why. And they would get really pissed if they did not know. "You just have to accept it dammit!"

LOL
Image

"The spirit of resistance to government is so valuable on certain occasions, that I wish it to be always kept alive. It will often be exercised when wrong, but better so than not to be exercised at all. I like a little rebellion now and then. It is like a storm in the atmosphere."--Thomas Jefferson
PRO GOLD
User avatar
Posts: 5756
Joined: Sun Mar 28, 2004 5:19 am
Location: West Virginia

Return to HTML, CSS, and Scripts

Who is online

Users browsing this forum: Yahoo [Bot] and 0 guests