2011/09/04

Programa en Basic para calculo de cuspides mediante interpolacion


cls
    d1$="  ##     ##    ##     ##  "
    d2$="  MC     ##    ##     ##  "
pi#=4*atn(1)
a#=2*pi#/360
ce#=(23+27/60)*a#  ' constante ecliptica en radianes


input "Horasideral ",hs$
'hs$="163913"
  hs=val(left$(hs$,2))+(val(mid$(hs$,3,2)))/60+(val(right$(hs$,2)))/3600
input "latitud ",la$
  la=val(left$(la$,2))+(val(mid$(la$,3,2)))/60+(val(right$(la$,2)))/3600
  if la>60 then la=60

x=hs*360/24
print "Hora sideral en grados ";x

' calculo del medio cielo
aa=x+2.5*2*sin(x*a#)*(cos(x*a#))
a0=aa
gosub signos
print using d2$;s+1;g;m

 'ascendente a 0 grados
 'primera correccion
  x0=x-2.5*2*sin(x*a#)*(cos(x*a#))
  aa=x0
  g0=x0+3*30
  gosub signos
  print "           Ascendnte"
  print "Latitud Signo Grado Minuto"

print using d1$;0;s+4;g;m

open "casadato.dat" for input as #1
input #1, nd
for n=1 to nd
'  g0a=g0p
  g2a=g2p
  g4a=g4p
  g5a=g5p
  g6a=g6p
  ha =hp  'hacemos igual la hora anterior a la posterior leida antes

  input #1, ht$   'hora sideral de la tabla de datos
    ht=val(left$(ht$,2))+(val(mid$(ht$,3,2)))/60+(val(right$(ht$,2)))/3600
  input #1, g0$   ' grado 0
'    g0=val((left$(g0$,2))-1)*30+(val(mid$(g0$,3,2)))+(val(right$(g0$,2)))/60
  input #1, g2$   ' grado 20
    g2=(val(left$(g2$,2))-1)*30+(val(mid$(g2$,3,2)))+(val(right$(g2$,2)))/60
  input #1, g4$   ' grado 40
    g4=(val(left$(g4$,2))-1)*30+(val(mid$(g4$,3,2)))+(val(right$(g4$,2)))/60
  input #1, g5$   ' grado 50
    g5=(val(left$(g5$,2))-1)*30+(val(mid$(g5$,3,2)))+(val(right$(g5$,2)))/60
  input #1, g6$   ' grado 60
    g6=(val(left$(g6$,2))-1)*30+(val(mid$(g6$,3,2)))+(val(right$(g6$,2)))/60

'  g0p=g0
'  if g0p<g0a then g0p=g0p+12*30
  g2p=g2
  if g2p<g2a then g2p=g2p+12*30
  g4p=g4
  if g4p<g4a then g4p=g4p+12*30
  g5p=g5
  if g5p<g5a then g5p=g5p+12*30
  g6p=g6
  if g6p<g6a then g6p=g6p+12*30

  hp=ht  ' hacemos igual la hora posterior a la hora leida en ese momento
  ' si la hora sidral esta comprendida entre dos consecutivas de la tabla
  ' podemos hacer el calculo de interpolacion con esos dos datos.

  if hs>=ha and hs<=hp then
'    call inter(g0a,g0p,hp,ha,hs)
'    a0=aa
aa=g0
a0=g0
gosub signos
    print "Ascendente a  0 grados ";aa$

    call inter(g2a,g2p,hp,ha,hs)
    a2=aa
    print "Ascendente a 20 grados ";aa$

    call inter(g4a,g4p,hp,ha,hs)
    a4=aa
    print "Ascendente a 40 grados ";aa$

    call inter(g5a,g5p,hp,ha,hs)
    a5=aa
    print "Ascendente a 50 grados ";aa$

    call inter(g6a,g6p,hp,ha,hs)
    a6=aa
    print "Ascendente a 60 grados ";aa$

  if           la<=20 then call inter(a0,a2,20,0 ,la)
  if la>20 and la<=40 then call inter(a2,a4,40,20,la)
  if la>40 and la<=50 then call inter(a4,a5,50,40,la)
  if la>50            then call inter(a5,a6,60,50,la)

  al=aa
  print "-------------------------------------"
  print "ASCENDENTE A";int(la);"GRADOS ";aa$

    goto fuera
  end if
next n
close #1
fuera:


end


sub inter(ga,gp,p,a,s)
shared gs,aa$,aa
    i=p-a
    if abs(gp)<=abs(ga) then aa=((ga-gp)*(p-s))/i+gp
    if abs(gp)> abs(ga) then aa=((gp-ga)*(s-a))/i+ga
    if aa>12*30 then aa=aa-12*30
call s
    gosub signos
end sub

signos:
s=int(aa/30)     ' signo
g1=(aa-s*30)
g=int(g1)       ' grado
m=int((g1-g)*60)     ' minuto
aa$=str$(s+1)+str$(g)+str$(m)
return


sub s
while inkey$="":wend
end sub

No hay comentarios: