### 1. My First Program

```Okay, Okay, maybe it's not that much to get excited over, but it IS
my first one. You're probably asking: "So what is it?" My reply is

Star Date Converter 1.0

It is a program to take TNG, DS9, and VOY stardates and turn them
into self-respecting Julian dates. If anyone would like to see it let
me know and I'll post it.

I do have one minor question about one of my routines. It recieves a
value of the number of days since the first of the year and
calculates the month and day. Right now it works, but is a bit longer
than I would like. If anyone has any ideas I how to make it smaller I
would appreciate it.

--Begin Code Cut--

global function day2month(atom day, atom year)

sequence month
atom leap
leap = remainder(year,4) --check to see if it's a leap year

if leap = 0 then --if yes then
if compare(day, 1) > -1 and compare( day,  31) < 1 then
month = "January"
return{month,day}
elsif compare(day, 32) > -1 and compare( day,  60) < 1 then
month = "February"
day = day - 31
return{month,day}
elsif compare(day, 60) > -1 and compare( day,  91) < 1 then
month = "March"
day = day - 59
return{month,day}
elsif compare(day, 91) > -1 and compare( day,  121) < 1 then
month = "April"
day = day - 90
return{month,day}
elsif compare(day, 121) > -1 and compare( day,  152) < 1 then
month = "May"
day = day - 120
return{month,day}
elsif compare(day, 152) > -1 and compare( day,  182) < 1 then
month = "June"
day = day - 151
return{month,day}
elsif compare(day, 182) > -1 and compare( day,  213) < 1 then
month = "July"
day = day - 181
return{month,day}
elsif compare(day, 213) > -1 and compare( day,  244) < 1 then
month = "August"
day = day - 212
return{month,day}
elsif compare(day, 244) > -1 and compare( day,  274) < 1 then
month = "September"
day = day - 243
return{month,day}
elsif compare(day, 274) > -1 and compare( day,  305) < 1 then
month = "October"
day = day - 273
return{month,day}
elsif compare(day, 305) > -1 and compare( day,  335) < 1 then
month = "November"
day = day - 304
return{month,day}
elsif compare(day, 335) > -1 and compare( day,  366) < 1 then
month = "December"
day = day - 334
return{month,day}
end if
else --otherwise
if compare(day, 1) > -1 and compare( day,  31) < 1 then
month = "January"
return{month,day}
elsif compare(day, 32) > -1 and compare( day,  59) < 1 then
month = "February"
day = day - 31
return{month,day}
elsif compare(day, 60) > -1 and compare( day,  90) < 1 then
month = "March"
day = day - 59
return{month,day}
elsif compare(day, 91) > -1 and compare( day,  120) < 1 then
month = "April"
day = day - 90
return{month,day}
elsif compare(day, 121) > -1 and compare( day,  151) < 1 then
month = "May"
day = day - 120
return{month,day}
elsif compare(day, 152) > -1 and compare( day,  181) < 1 then
month = "June"
day = day - 151
return{month,day}
elsif compare(day, 182) > -1 and compare( day,  212) < 1 then
month = "July"
day = day - 181
return{month,day}
elsif compare(day, 213) > -1 and compare( day,  243) < 1 then
month = "August"
day = day - 212
return{month,day}
elsif compare(day, 244) > -1 and compare( day,  273) < 1 then
month = "September"
day = day - 243
return{month,day}
elsif compare(day, 274) > -1 and compare( day,  304) < 1 then
month = "October"
day = day - 273
return{month,day}
elsif compare(day, 305) > -1 and compare( day,  334) < 1 then
month = "November"
day = day - 304
return{month,day}
elsif compare(day, 335) > -1 and compare( day,  365) < 1 then
month = "December"
day = day - 334
return{month,day}
end if
end if
end function

--End Code Cut--

~~>Joseph Martin
~~>Personal: joe at cyber-wizard.com
~~>Web:  jam.net at poboxes.com
~~>URL: http://users.exis.net/~jam/
```

### 2. Re: My First Program

```Joseph Martin wrote:
>
>---------------------- Information from the mail header -----------------------
>Sender:       Euphoria Programming for MS-DOS <EUPHORIA at
>MIAMIU.ACS.MUOHIO.EDU>
>Poster:       Joseph Martin <jam at EXIS.NET>
>Subject:      My First Program
>-------------------------------------------------------------------------------
>
>Okay, Okay, maybe it's not that much to get excited over, but it IS
>my first one. You're probably asking: "So what is it?" My reply is
>
>Star Date Converter 1.0
>
>It is a program to take TNG, DS9, and VOY stardates and turn them
>into self-respecting Julian dates. If anyone would like to see it let
>me know and I'll post it.
>
>I do have one minor question about one of my routines. It recieves a
>value of the number of days since the first of the year and
>calculates the month and day. Right now it works, but is a bit longer
>than I would like. If anyone has any ideas I how to make it smaller I
>would appreciate it.
>
great program! also, I caught a bug that you should be aware of.  Did you know
that your day2month function returns the same day/month even if its a leap year?
try year = 1996 and day = 130.  the answer should be may 9, but your code
returns
may 10.  I have put comments into your code where it should be fixed.

>--Begin Code Cut--
>
>global function day2month(atom day, atom year)
>
>sequence month
>atom leap
>leap = remainder(year,4) --check to see if it's a leap year
>
>if leap = 0 then --if yes then
>  if compare(day, 1) > -1 and compare( day,  31) < 1 then
>   month = "January"
>   return{month,day}
>  elsif compare(day, 32) > -1 and compare( day,  60) < 1 then
>   month = "February"
>   day = day - 31
>   return{month,day}
>  elsif compare(day, 60) > -1 and compare( day,  91) < 1 then
^^^^^^^  should be compare(day, 61)
>   month = "March"
>   day = day - 59
^^^^^ should be -60
>   return{month,day}
>  elsif compare(day, 91) > -1 and compare( day,  121) < 1 then
^^^^^   compare(day, 92)
>   month = "April"
>   day = day - 90
^^^^^ - 91
>   return{month,day}
>  elsif compare(day, 121) > -1 and compare( day,  152) < 1 then
>   month = "May"
>   day = day - 120
>   return{month,day}
<snip>

anyway, for the very first if section (that is, the isleap section), the first
compare(day, X) should be compare(day, X+1) for all months after feb.
and the day=day - X should be day=day - X+1 for all months after feb.
the rest of the code (that is, the standard year if part) is ok.

anyway, as far as a smaller routine, you dont have to perform all those if's
twice!
just check for the standard year, and get your day & month. then, if it is a
leap year
decrease the day by 1. if the day is then = to 0, decrease the month by 1,
and set the
day = to the max days in that month!  simple, yes?  heres some sample code

<Begin code>
constant maxdays = {{"January", 31}, {"February", 29}, {"March", 31}, {"April",
30}, {"May", 31}, {"June", 30}, {"July", 31}, {"August", 31}, {"September", 30},
{"October", 31}, {"November", 30}, {"December", 31}}

global function day2month(atom day, atom year)
atom leap
object month

leap = remainder(year, 4) -- check to see if it is a leap year

if day < 32 then
month = 1
elsif day < 60 then
month = 2
day = day - 31
elsif day < 91 then
month = 3
day = day - 59
elsif day < 121 then
month = 4
day = day - 90
elsif day < 152 then
month = 5
day = day - 120
elsif day < 182 then
month = 6
day = day - 151
elsif day < 213 then
month = 7
day = day - 181
elsif day < 244 then
month = 8
day = day - 212
elsif day < 274 then
month = 9
day = day - 243
elsif day < 305 then
month = 10
day = day - 273
elsif day < 335 then
month = 11
day = day - 304
elsif day < 366 then
month = 12
day = day - 334
end if

if leap = 0 then
if month > 2 then
day = day - 1
end if
if day = 0 then
month = month - 1
day = maxdays[month][2]
end if
end if
month = maxdays[month][1]
return {month, day}
end function

<END CODE>

as you can see, this is about half the size of your original function.  as
for speed,
when finished, ok?
James Powell
```

### 3. Re: My First Program

```James Powell wrote:

> if leap = 0 then
>     if month > 2 then
>         day = day - 1
>     end if
>     if day = 0 then
>         month = month - 1
>         day = maxdays[month][2]
>     end if
> end if

Why not factor the rest of the code? This stuff:

> if day < 32 then
>     month = 1
> elsif day < 60 then
>     month = 2
>     day = day - 31
> elsif day < 91 then
>     month = 3
>     day = day - 59
> elsif day < 121 then
>     month = 4
>     day = day - 90
> elsif day < 152 then
>     month = 5
>     day = day - 120
> elsif day < 182 then
>     month = 6
>     day = day - 151
> elsif day < 213 then
>     month = 7
>     day = day - 181
> elsif day < 244 then
>     month = 8
>     day = day - 212
> elsif day < 274 then
>     month = 9
>     day = day - 243
> elsif day < 305 then
>     month = 10
>     day = day - 273
> elsif day < 335 then
>     month = 11
>     day = day - 304
> elsif day < 366 then
>     month = 12
>     day = day - 334
> end if

can be replaced with a loop similar to the one you already have, and use the
array of months:

-- START OF CODE

-- sum of days that past, not including current month
daysPast = 0

-- cycle through the months
for i = 1 to length( maxdays ) do

-- does the day fall within this month?
if day <= daysPast + maxdays[i][2] then
-- save the month
month = i

-- calculate the day
day = day - daysPast

-- leave the loop
exit

else

-- add the total of prior days
daysPast = daysPast + maxdays[i][2]

end if

end for

-- END OF CODE

I haven't bothered to test it, but you get the idea.

-- David Cuny
```