|
Este programa no es mio. Es de William S. Maddux y lo tengo hace muchos años en mi librería de programas; yo sólo he puesto los textos en español, he corregido un pequeño error matemático y he decidido que los resultados salgan por la impresora en lugar de escribirse en la pantalla. 9 REM Reloj de Sol Declinante 10 OPEN "lpt1" FOR OUTPUT AS #2 11 INPUT "¿Latitud Norte del lugar (en grados)"; b: IF b < 0 THEN 11 12 INPUT "¿Longitud del lugar (desde Greenwhich hacia el Oeste)"; l 13 INPUT "¿Meridiano central del huso horario (en grados)"; l0 14 INPUT "¿Azimut de la pared (Norte A=0)"; f 15 IF f <= 0 OR f >= 270 THEN 14 16 pi = 3.14159265#: rl = pi/180 17 bl = b*rl: s = 0 18 INPUT "¿Líneas de mañana o de tarde"; s$ 19 IF s$ = "mañana" THEN s = -1 20 IF s$ = "tarde" THEN s = 1 21 IF s = 0 THEN 18 22 INPUT "¿Altura del reloj"; hs 23 INPUT "¿Anchura de la mitad del reloj"; ws 24 INPUT "Tiempo entre líneas (en minutos)"; g 25 fl = pi/2 + s*rl*(180 - f): PRINT #2, "" 26 rs = ws/hs: zs = s*rl*(l0 - l) 27 PRINT #2, "Latitud = "; b; ", Longitud = "; l 28 PRINT #2, "Meridiano central = "; l0 29 PRINT #2, "Azimut de la pared = "; f 30 GOSUB 73 31 PRINT #2, "Sol de la "; s$ 32 PRINT #2, "Reloj de "; ws; " de ancho por "; hs; " de alto": PRINT #2, "" 33 h = 12 - s: g = s*g/60 35 REM cálculo de las líneas 36 q = zs*s*pi*(h - 12)/12 37 IF q < 0 THEN 47 38 IF h < 4 OR h > 20 THEN 48 39 IF q <> 0 THEN 41 40 k = 0: GOTO 45 41 ko = SIN(fl)*TAN(pi/2 - q) 42 kl = COS(fl)*SIN(bl) + ko 43 IF kl = 0 THEN kl = 1*E-10 44 k = COS(bl)/kl 45 GOSUB 52 46 IF k >= 0 THEN GOSUB 57 47 h = h + g: GOTO 35 48 PRINT #2, "" 49 INPUT "¿Otra vez? (s o n)"; q$ 50 s = 0: IF q$ = "s" THEN 18 51 END 52 REM cálculo de X o de Y 53 d = s*k*hs: d$ = " X = " 54 IF k < rs THEN 56 55 d = -ws/k: d$ = " Y = " 56 RETURN 57 REM dibujo de las líneas 58 ho = h + .002 59 hl = INT(ho): ml = INT(60*(ho-hl)) 60 ml$ = STR$(1000 + ml) 61 ml$ = ":" + RIGHT$(ml$, 2) 62 p$ = " PM " 63 IF hl < 12 THEN p$ = " Mañana" 64 IF hl <> 12 THEN 66 65 IF ml = 0 THEN p$ = " Mediodía" 66 IF hl > 12 THEN hl = hl - 12 67 hl$ = STR$(hl) 68 IF hl < 10 THEN hl$ = " " + hl$ 69 d = INT(d*1000 + .5)/1000 70 PRINT #2, hl$; ml$; p$; 71 PRINT #2, TAB(15); d$; d 72 RETURN 73 REM cálculo de la punta del estilo 74 ps = TAN(pi/2 - bl)*hs 75 z = SIN(fl)*ps 76 z = INT(z*1000 + .5)/1000 77 x = s*TAN(pi/2 - fl)*z 78 x = INT(x*1000 + .5)/1000 79 y = -hs 80 PRINT #2, "Coordenadas de la punta del estilo: " 81 PRINT #2, " X = "; x; " Y = "; y; " Z = "; z 82 RETURN |