Re: Perceptron in Euphoria

new topic     » goto parent     » topic index » view thread      » older message » newer message

On Sun, 29 Nov 1998 00:33:02 -0500, Alfredo Brand <abrand at ALUMINA.COM.CO>
wrote:

>my first contibution to this list.
>If you think It, you can make it.
>After several days of programming I finally got It,
>enjoy it.

Congratulations! You tackled some difficult areas: numeric input,
for example, and got them to work. No small feat.

If I were using this in a programming class, I would use your
code to discuss several ideas:

1. Is there an easier and shorter way to write the date displays?
2. Following up on Ralf's comment ("It's in Spanish!";), is there
an easy way to internationalize this program?
3. There is a lot of repetition of the tasks:
   SetColors
   SetPosition
   puts(1,something)
   Perhaps we could combine those into a one-liner?

We can solve 1 and 2 with a single concept: The days never change.
There are always seven. Day[2] is (in Euphoria) always Monday/Lunes.
The months never change, month 1 is always January/Enero.
They are - umm...constant.
Why not put them into a list, and reference them by number?
What's more, if we put the list at the top of our program, it will
be easy for anyone to change the names of days and months into the
language of their choice.

Doing this will also simplify our logic quite a bit. See below.

Problem 3 is even more easily solved, resulting in shorter code.
See the Display() function below:

-- Ingenieria de Sistemas III
-- Inteligencia Artificial
-- Profesor : Ricardo Chavarriaga
-- Alfredo Brand
-- albrand65 at hotmail.com
-- brand
-- Funciones
--- with modifications by Irv Mullins

constant month = {"Enero","Febrero","Marzo","Abril",
                  "Mayo","Junio","Julio","Agosto",
                  "Septiembre","Octubre","Noviembre","Diciembre"}

constant days =  {"Dom","Lun","Mar","Mie","Jue","Vie","Sab"}

global procedure Display(sequence coords, sequence colors, sequence text)
   position(coords[1],coords[2])
   text_color(colors[2])
   bk_color(colors[1])
   puts(1,text)
end procedure

global procedure fecha_hora()
sequence dt, colors, ampm
integer mo, da, yr, hr, min, sec
   colors = {BLACK,WHITE}
   Display({4,02},colors,"Inteligencia Artificial")
   Display({5,02},colors,"Ingenieria de Sistemas")
   for i =  1 to 3 do
     Display({5,i+24},{BLACK,i+1},"I") -- trick
   end for
   Display({6,02},colors,"Alfredo Brand")
   Display({7,02},colors,"Profesor")
   Display({8,02},colors,"Ricardo Chavarriaga")

   dt = date() -- convert the date
   yr = dt[1] mo = dt[2] da = dt[3]
   hr = dt[4] min = dt[5] sec = dt[6]
   if compare(dt[4..6],{12,0,0}) = 1 then -- anyone see an error here?
    if hr > 12 then hr = hr - 12 end if
    ampm = "pm"
   else ampm = "am"
   end if

      position(1,1) -- display the days of the week
      for d = 1 to 7 do
          if d = dt[7] then
          text_color(BRIGHT_RED)
          bk_color(RED)
          else text_color(RED)
          bk_color(BLACK)
          end if
          printf(1," %3s ",{days[d]})
      end for

      Display({1,40},{BLUE,YELLOW},
         sprintf(" %s %d, %d ",{month[mo],da,yr+1900}))
         -- note: you cannot use "19%d",yr here! Why not?
      Display({2,40},{BLUE,WHITE},
         sprintf(" %02d:%02d %s",{hr,min,ampm}))

end procedure

This is only a first attempt. No doubt there are easier ways to do
some of this. Any takers?
And does anyone not know why the year must be displayed as shown
above?

Irv

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu