HP35s per astronomia, astrofisica e calcolo scientifico

a cura di Paolo Botton
aggiornato: 15 dicembre 2014


A partire dal mese di novembre 2014 è stata avviata la progettazione di una serie di programmi, per la calcolatrice scientifica programmabile HP35s, che possano tornare utili nel settore di ricerca in cui operiamo, ogni qualvolta che non sia possibile ricorrere ad un computer o alla più massiccia HP50g.
La HP35s è una calcolatrice scientifica programmabile con doppia notazione, RPN e SOA, e memoria interna di 31kByte; mette a disposizione 26 etichette da A-Z, 4 flag ad uso generico, 7 flag specifici di sistema, indirizzamento indiretto con i registri I e J, gestione delle iterazioni controllate (DSE, ISG) e dei salti condizionati e incondizionati, 20 livelli di subroutine, 999 instruzioni per programma e 800 possibili registri di memoria indiretta condivisi con la memoria di programmazione.
Il firmware residente permette la verifica della checksums di ogni routine inserita ed il riordino automatico delle linee di programma, compresi i salti incondizionati e condizionati, in caso di inserimento o cancellazione di linee di codice.

I programmi sono di libero dominio ma forniti così come sono, senza alcuna garanzia implicita o esplicita. Sono stati ampiamente provati, ma chi li utilizzerà lo farà a proprio rischio e si assumerà tutte le responsabilità.
La rete SideroGRID ed i suoi membri non saranno responsabili di eventuali danni diretti o indiretti, di qualsiasi natura o entità provocati o imputabili ai programmi qui descritti
.

Programmi disponibili alla data dell'aggiornamento della pagina:

19.11   Conversione da data civile a data giuliana
21.11   Calcolo del Tempo medio siderale locale (TSML)
24.11   Calcolo delle ore medie di luce in un dato giorno dell'anno
25.11   Calcolo del numero di giorni tra due date
26.11   Conversione da data giuliana a data civile
27.11   Algoritmo ALBA-TRAMONTO corretto solo un commento il 30.11.2014
08.12   Radici di un'equazione di secondo grado. 2 programmi: didattico (08.12) e subroutine (13.12)
15.12   Calcolo della data della Pasqua per un determinato anno


Conversione da data civile a data giuliana

Per i dettagli della data giuliana, cortesemente accedere al menu a tendina [Documentazione] —› [La misura del tempo].
Il programma ci torna utile quando sia necessario etichettare un istante preciso durante una sessione di osservazione sia visuale, sia fotografica.
In genere è utilizzato quando si acquisiscono i dati fotometrici delle stelle variabili oppure nelle riprese a grande campo o deep-sky durante la ricerca dei fenomeni astronomici transitori (novae, supernovae), per assegnare un tempo di riferimento allo scatto.
È importante ricordare che questo algoritmo funziona per date posteriori al 15 ottobre 1582 e che il giorno giuliano è sempre intero a mezzogiorno (JD,00), ed è JD,50 a mezzanotte.

Formule utilizzate:
a = INT((14 − mese) ÷ 12)
y = anno + 4800 − a
m = mese + 12 × a − 3
Data Giuliana = giorno + INT((153 × m + 2) ÷ 5) + 365 × y + INT(y ÷ 4) − INT(y ÷ 100) + INT(y ÷ 400) − 32045
Data Giuliana = Data Giuliana + ((ora − 12) ÷ 24)

NOTA BENE: INT indica il quoziente di un'operazione di divisione che comprende due numeri interi, ossia la parte intera del quoziente senza alcuna approssimazione.
Tale operatore, nella HP35s, è INT÷.

Come usare il programma
    Precaricare le seguenti informazioni nei registri, come indicato:
    H = ora del giorno in notazione sessagesimale ore.minuti
    ora.minuti       STO       H
    NOTA: 7h 3m 5s deve essere inserito come 7.0305 e non come 7.35

    D = data del giorno
    data       STO       D

    M = mese (1 = gennaio... 12 = dicembre)
    mese       STO       M

    Y = anno, a 4 cifre (ad esempio 2014)
    anno       STO       Y
    avviare il programma e attenderne la conclusione:
    XEQ       G       ENTER
    A fine calcolo, a video sarà mostrata la data giuliana e la stessa sarà memorizzata nel registro J
    ad esempio:
    J =
                2457111.2792
    Premere R/S per terminare l'esecuzione.

Registri di appoggio durante i calcoli: U e W, dove:
U = a = INT((14 − mese) ÷ 12)
W = y = anno + 4800 − a

Programma:

G001     LBL G             +
G002     14             |
G003     RCL− M             | calcolo [a] e lo salvo in [U]
G004     12             |
G005     INT÷             |
G006     STO U             +
G007     4800             +
G008     RCL+ Y             |
G009     RCL− U             | calcolo [y] e lo salvo in [W]
G010     STO W             +
G011     RCL D            
G012     STO J             Data Giuliana = giorno
G013     12             +
G014     RCL× U             |
G015     RCL+ M             | calcolo [m]
G016     3             |
G017     −             +
G018     153             +
G019     ×             |
G020     2             | INT((153 × m +2)
G021     +             |
G022     5             |
G023     INT÷             +
G024     STO+ J             Data Giuliana = Data Giuliana + INT((153 × m +2) ÷5)
G025     365            
G026     RCL× W            
G027     STO+ J             Data Giuliana = Data Giuliana + 365 × y
G028     RCL W            
G029     4            
G030     INT÷            
G031     STO+ J             Data Giuliana = Data Giuliana + INT(y ÷ 4)
G032     RCL W            
G033     100            
G034     INT÷            
G035     STO− J             Data Giuliana = Data Giuliana − INT(y ÷ 100)
G036     RCL W            
G037     400            
G038     INT÷            
G039     STO+ J             Data Giuliana = Data Giuliana + INT(y ÷ 400)
G040     RCL J            
G041     32045            
G042     −            
G043     STO J             Data Giuliana = Data Giuliana − 32045
G044     RCL H            
G045     HMS—›            
G046     12            
G047     −            
G048     24            
G049     ÷            
G050     RCL+ J            
G051     STO J            
G052     VIEW J            
G053     RTN            
                        Codici di verifica del programma: LN=194 CK=EE79

Esempi di verifica:

5 febbraio 1963, ore 19:30 ha data giuliana 2438066.3125

    19.30     STO       H
    5             STO       D
    2             STO       M
    1963       STO       Y
    XEQ       G       ENTER
    ... RUNNING ...
    J =
                2438066.3125
    Premere R/S per terminare l'esecuzione
2 marzo 2001, ore 12:00 ha data giuliana 2451971.0000
    12         STO       H
    2           STO       D
    3           STO       M
    2001    STO       Y
    XEQ     G       ENTER
    ... RUNNING ...
    J =
                2451971.0000
    Premere R/S per terminare l'esecuzione
18 novembre 2014, ore 8:15 ha data giuliana 2456979.8438
    8.15        STO       H
    18           STO       D
    11           STO       M
    2014      STO       Y
    XEQ       G       ENTER
    ... RUNNING ...
    J =
                2456979.8438
    Premere R/S per terminare l'esecuzione

Calcolo del tempo siderale medio locale (TSML)

Questo programma permette di calcolare il TSML, inserendo longitudine, ora locale e fuso orario.
Poiché la longitudine è espressa in <gradi><gradi>.<primi><primi><secondi><secondi>, e le procedure di calcolo operano su dati normalizzati in decimale, è necessaria una subroutine (invocata con la direttiva XEQ L001) in grado di convertire tale valore nel formato <ore><ore>.<minuti><minuti><secondi><secondi>.
Inoltre è necessaria la data giuliana, pertanto si deve inserire nella calcolatrice anche il precedente programma, che sarà espressamente richiamato con la direttiva XEQ G001.
L'algoritmo TSML prevede che la data giuliana locale JD1 sia riferita all'ora 0 (zero), mentre il il programma che la calcola (G001) produce un valore riferito all'ora impostata, pertanto nella routine di calcolo del TSML ho dovuto sottrarre alla data giuliana J la frazione di 24 dovuta proprio dall'ora impostata H.
INT indica il quoziente di un'operazione di divisione che comprende due numeri interi, ossia la parte intera del quoziente senza alcuna approssimazione; tale operatore, nella HP35s, è INT÷.

Formule utilizzate:

T = (JD1 − JD0) ÷ 36525
    T sarà anche un registro di appoggio; qui conserva il numero di secoli giuliani trascorsi dal 13 Dicembre 1899 alla data del giorno inserita per il calcolo.

TS = 6.6460656 + (2400.051262 × T) + (0.00002581 × T2)
        Tempo siderale trascorso dal 1899

TSMG = ((TS ÷ 24) − INT(TS ÷ 24)) × 24
        Tempo siderale medio di Greenwich TSMG alle ore 0

TSMLo = TSMG + L
        Tempo siderale medio alla longitudine di riferimento alle ore 0 (zero)

TSML = TSMLo + (H − F) × 1.002737908
        Tempo siderale medio locale all'ora desiderata. (H − F) è il T.U.

Costanti:

2415020.00         JD0: tempo di riferimento riferito al 31 Dicembre 1899 alle 12h TU
6.6460656           TSMGo: tempo Siderale medio a Greenwich il 31 Dicembre 1899 alle 12h TU (6.6460656 = 6h 38m 45s)
36525                     1 secolo giuliano = 36525 giorni giuliani

Come usare il programma

    Precaricare le seguenti informazioni nei registri, come indicato:
    L = longitudine del luogo di osservazione in notazione sessagesimale <gradi><gradi>.<primi><primi><secondi><secondi>
    <gradi><gradi>.<primi><primi><secondi><secondi>       STO       L
    NOTA: 7° 3' 5" deve essere inserito come 7.0305 e non come 7.35

    F = Fuso orario per l'Italia: +1 con ora solare, +2 con ora legale
    fuso       STO       F

    H = ora del giorno in notazione sessagesimale <ore><ore>.<minuti><minuti><secondi><secondi>
    <ore><ore>.<minuti><minuti><secondi><secondi>       STO       H
    NOTA: 7h 3m 5s deve essere inserito come 7.0305 e non come 7.35

    D = data del giorno
    data       STO       D

    M = mese (1 = gennaio... 12 = dicembre)
    mese       STO       M

    Y = anno, a 4 cifre (ad esempio 2014)
    anno       STO       Y
    avviare il programma :
    XEQ       S       ENTER
    Apparirà la scritta RUNNING, poi, a video sarà mostrata la data giuliana e la stessa sarà memorizzata nel registro J
    ad esempio:
    J =
                2457111.2792
    Premere R/S per proseguire.
    Apparirà la scritta RUNNING, poi, a video sarà mostrato il TSML nel formato HH.mmssd
    ad esempio:
    T =
                3.27127
    Premere R/S per terminare.

Programma:

S001     LBL S            
S002     XEQ G001             subroutine di calcolo della data giuliana.
S003     RCL H             +
S004     HMS—›             | recupera l'ora impostata e la converte nel formato decimale.
S005     24             | calcola quindi la frazione di giorno da sottrarre alla data giuliana
S006     ÷             | in modo che sia riferita alle ore 0 (zero), come richiesto dall'algoritmo del TSML.
S007     −             |
S008     STO J             +
S009     XEQ L001             subroutine di trasformazione Longitudine in HH,mmss
S010     RCL J             recupera la data giuliana
S011     2415020.00             +
S012     −             |
S013     36525.0             | secoli giuliani trascorsi dal 13 Dicembre 1899
S014     ÷             |
S015     STO T             +
S016     x2             +
S017     0.00002581             |
S018     ×             |
S019     RCL T             |
S020     2400.051262             | calcola TS
S021     ×             |
S022     +             |
S023     6.6460656             |
S024     +             |
S025     STO T             +
S026     24             +
S027     ÷             |
S028     RCL T             |
S029     24             | calcola TSMG
S030     INT÷             |
S031     −             |
S032     24             |
S033     ×             +
S034     RCL L             +
S035     +             | calcola TSMLo
S036     STO T             +
S037     RCL H             +
S038     HMS—›             |
S039     RCL F             |
S040     −             |
S041     1.002737908             | calcola TSML
S042     ×             |
S043     RCL+ T             |
S044     —›HMS             |
S045     STO T             +
S046     24             +
S047     RCL T             |
S048     x>y?             | veridica se TSML > 24 ed eventualmente riduce
S049     XEQ S054             +
S050     FIX 5             +
S051     VIEW T             | visualizza TSML HH.mmss
S052     ALL             |
S053     RTN             +
S054     24             +
S055     −             | riduce TSML alle 24 ore
S056     STO T             |
S057     RTN             +
                        Codici di verifica del programma: LN=241 CK=42B0

Subroutine di trasformazione Longitudine da sessagesimale in decimale HH.mmss

Chiamata dal calcolo del tempo siderale medio locale (TSML), preleva la Longitudine L espressa in <gradi><gradi>.<primi><primi><secondi><secondi>, e la trasforma nel formato decimale <ore><ore>.<minuti><minuti><secondi><secondi>, sapendo che, per effetto della rotazione terrestre, si ha 1° = 4min, 1' = 4sec, 1" = 1/15sec.
L'equazione per la trasformazione è:
(gradi × 4) ÷ 60 + (primi × 4) ÷ 3600 + (secondi × 1/15) ÷ 3600

es: 7° 45' 5" —› 7,4505 = 0,51675926

Subroutine:

L001     LBL L            
L002     0             azzera variabile di appoggio
L003     STO T            
L004     RCL L             preleva la longitudine
L005     IP             separa i gradi dai primi e secondi
L006     4             +
L007     ×             |
L008     60             | (gradi × 4) ÷ 60
L009     ÷             |
L010     STO T             +
L011     RCL L             +
L012     FP             |
L013     100             |
L014     ×             |
L015     IP             | (primi × 4) ÷ 3600
L016     4             |
L017     ×             |
L018     3600             |
L019     ÷             |
L020     STO+ T             +
L021     RCL L             +
L022     FP             |
L023     100             |
L024     ×             |
L025     FP             |
L026     100             | (secondi × 1/15) ÷ 3600
L027     ×             |
L028     15             |
L029     1/x             |
L030     ×             |
L031     3600             |
L032     ÷             |
L033     STO+ T             +
L034     RCL T             +
L035     STO L             | ritorna Longitudine in decimale
L036     RTN             +
                        Codici di verifica del programma: LN=132 CK=C8BE

Esempio di verifica:

19 novembre 2014, ore 20:30, longitudine 7° 45' 5" (fuso orario +1)

    20.30      STO       H
    1               STO       F
    7.4505    STO       L
    19            STO       D
    11             STO       M
    2014       STO       Y
    XEQ       S       ENTER
    ... RUNNING ...
    J =
                2456981.3548
    Premere R/S per proseguire l'esecuzione
    ... RUNNING ...
    T =
                23.55597 —› 23h55m59,7s
    Premere R/S per terminare l'esecuzione

Calcolo delle ore medie di luce in un dato giorno dell'anno

Il programma fornisce un valore approssimato del numero di ore di luce in base alla latitudine L impostata e alla data di uno specifico giorno dell'anno in corso. Ho scritto approssimato perché il calcolo è effettuato tenendo in considerazione la stima della declinazione del sole ed il numero di giorni D trascorsi dall'equinozio di primavera (21 marzo), assumendo un anno pari a 365 giorni.
Per un calcolo più preciso occorre utilizzare l'Algoritmo ALBA-TRAMONTO (A001) che si trova sempre all'interno di questo articolo.
Alcune avvertenze...
La latitudine L si presume espressa in <gradi>.<primi><secondi>, con segno positivo per l'emisfero Boreale e negativo per quello Australe.
È necessario inserire la latitudine nel formato GG.ppss; ad esempio:
7° 3' 8" deve essere scritta come 7.0308.
Per esigenze computazionali, la data per cui si richiede il calcolo della durata delle ore di luce deve essere inserita nel formato <MESE>.<GIORNO><ANNO>, dove ANNO deve essere un numero a 4 cifre ed il numero del giorno deve essere completato con uno zero in testa, in caso di valori < 10; esempi:
2 marzo 2014 deve essere scritta come 3.022014 e NON come 3.22014
16 dicembre 2014 deve essere scritta come 12.162014.
Per il conteggio delle ore di luce, il programma richiama la procedura che calcola il numero di giorni tra due date (vedere più sotto i programmi D001 e N001).

Formule utilizzate:

Le formule usano la stima della declinazione del Sole, pertanto, dato che si ha:
360° ÷ 365.25giorni ˜0.985626283368°g-1
allora...
d = 23.45 sin(D × 0.985626283368°)
θ = arcos(−tg L × tg d)
ore di luce = 24 × θradianti ÷ π

Come usare il programma

    Precaricare le la latitudine L del luogo di osservazione in notazione sessagesimale, con la notazione riciesta.
    GG.ppss       STO       L
    RICORDA: 7° 3' 5" deve essere inserito come 7.0305 e non come 7.35
    avviare il programma inserendo la data del giorno per cui si vole calcolare la durata delle ore di luce:
    MM.ggAAAA       XEQ       O       ENTER
    RICORDA: 7° marzo 2014 deve essere inserito come 3.072014 e non come 3.72014
    Apparirà la scritta RUNNING, poi, nella riga in basso del display sarà mostrata la durata media delle ore di luce.
    esempio:
    0.12345             stack, registo Y = non significativo.
    8.27142           stack, registo X = ore medie di luce.

Programma:

O001     LBL O            
O002     ENTER             copia della data inserita nel registo Y
O003     FP             +
O004     100             | sostituisce MESE e GIORNO con marzo e 21
O005     ×             | dato che servono i giorni trascorsi dal
O006     FP             | 21 marzo per il calcolo delle ore di luce
O007     100             | in base alla declinazione media del sole
O008     ÷             |
O009     3.21             |
O010     +             +
O011     x<>y             registro X data inserita, Y data al 21 marzo
O012     XEQ D001             calclola il giorni trascorsi dal 21 marzo
O013     DEG             +
O014     0.985626283             |
O015     ×             |
O016     SIN             |
O017     23.45             |
O018     ×             |
O019     RCL L             |
O020     HMS—›             |
O021     TAN             |
O022     x<>y             |
O023     TAN             | procedura di calcolo delle ore medie di luce
O024     ×             |
O025     +/−             |
O026     ACOS             |
O027     —›RAD             |
O028     24             |
O029     ×             |
O030     π             |
O031     ÷             |
O032     —›HMS             |
O023     FIX 6             +
O034     RTN            
                        Codici di verifica del programma: LN=130 CK=5B20

Esempio di verifica:

19 novembre 2014, latitudine +45° 6' 9"

    45.0603         STO       L
    11.192014       XEQ      O       ENTER
    ... RUNNING ...
    0.1234567         stack, registo Y = dato irrilevante.
    9.0635484     ⇐ stack, registo X = 9h 6m 35s di luce (circa).

Calcolo del numero di giorni tra due date

Il programma fornisce il numero di giorni compreso tra due date ed è composto da due funzioni D001 e N001.
Per esigenze computazionali, le date per cui si richiede il calcolo del numero di giorni che intercorrono, devono essere inserite nel formato <MESE>.<GIORNO><ANNO>, dove ANNO deve essere un numero a 4 cifre ed il numero del giorno deve essere completato con uno zero in testa, in caso di valori < 10. Esempi:
2 marzo 2014 deve essere scritta come 3.022014.
16 dicembre 2014 deve essere scritta come 12.162014.
Avvertenze...
La procedura qui riportata è presente come esempio nei manuali HP di alcune calcolatrici scientifiche datate; io l'ho modificato e adattato alla HP35s, di cui non esiste - che sappia - un analogo nei manuali utente ufficiali.

Come usare il programma
    Quando questo programma è invocato come subroutine dal precedente programma di calcolo della durata delle ore di luce (O001), i parametri alla funzione (le due date richieste) sono passati automaticamente, in modo del tutto trasparente all'utente.
    Quando questo programma è utilizzato per il solo calcolo dei giorni che intercorrono tra due date, è necessario inserire le date in formato mm.ggaaaa e MM.GGAAAA nella stack geristri Y e X, inserendo quindi prima quella temporalmente minore, poi quella maggiore.
    mm.ggaaaa           ENTER
    MM.GGAAAA       XEQ       D       ENTER
    dove, se ad esempio le date sono 7 marzo 2014 e 12 novembre 2014, deve essere:
    mm.ggaaaa = 3.072014
    e
    MM.GGAAAA = 11.122014
    Apparirà la scritta RUNNING, poi, nella riga in basso del display sarà indicato il numero di giiorni intercorsi tra le due date.
    esempio:
    0.12345                     stack, registo Y = non significativo.
    250.00000           stack, registo X = numero dei giorni tra le due date.

Programma:

D001     LBL D             Fornite due date nella stack (reg x e y) calcola i giorni che le separano
D002     STO Z             Salva la seconda data (dalla stack, registro x)
D003     x<>y             Preleva la prima data (quella minore)
D004     XEQ N             Calcola i giorni della prima data
D005     STO K             Salva i giorni della prima data
D006     RCL Z             Preleva la seconda data (quella maggiore)
D007     XEQ N             Get day number for second date
D008     RCL− K             Sottrae il numero di giorni della prima data a quelli della seconda
D009     RTN            
                        Codici di verifica del programma D: LN=27 CK=9BE3

N001     LBL N             Trasforma una data in un numero di giorni
N002     ENTER             salva una copia della data nella stack
N003     IP             +
N004     9             | preleva la parte intera dalla data, ossia MM, effettua i calcoli
N005     +             | quindi ne salva una copia in M
N006     12             |
N007     RMDR             | ⇐ RMDR è il modulo tra due interi
N008     STO M             +
N009     x<>y             Recupera la copia della data dalla stack, registro Y
N010     ENTER             e ne salva una nuova copia nel registro Y della stack
N011     FP             +
N012     100             | preleva la parte frazionaria,
N013     ×             | ed isola la data del giorno GG
N014     IP             +
N015     STO D             Salva il valore del giorno in D
N016     R⇓             Recupera la copia della data dalla stack
N017     100             +
N018     ×             |
N019     FP             | isola l'anno AAAA
N020     10000             |
N021     ×             +
N022     RCL M             Utilizza il mese salvato
N023     10            
N024     INT÷            
N025     −            
N026     STO Y             Salva il valore dell'anno in Y
N027     365            
N028     ×            
N029     RCL Y             Utilizza l'anno salvato
N030     4            
N031     INT÷            
N032     +            
N033     RCL Y             Utilizza l'anno salvato
N034     100            
N035     INT÷            
N036     −            
N037     RCL Y             Utilizza l'anno salvato
N038     400            
N039     INT÷            
N040     +            
N041     RCL M             Utilizza il mese salvato
N042     306            
N043     ×            
N044     5            
N045     +            
N046     10            
N047     INT÷            
N048     +            
N049     RCL D             Utilizza il giorno salvato
N050     1            
N051     −            
N052     +            
N053     RTN             Ritorna il numero dei giorni della data sulla stack, registro X
                        Codici di verifica del programma: LN=192 CK=EF03

Esempio di verifica:

Calcolare quanti giorni ci sono tra il 7 marzo 2014 e il 12 novembre 2014

    7 marzo 2014           ⇒ 3.072014       ENTER
    12 novembre 2014 ⇒ 11.122014       XEQ       D       ENTER
    ... RUNNING ...
    0.12345                     stack, registo Y = non significativo.
    250.00000           stack, registo X = numero dei giorni.

Conversione da data giuliana a data civile

Per i dettagli della data giuliana, cortesemente accedere al menu a tendina [Documentazione] —› [La misura del tempo].
Il programma (che probabilmente potrebbe essere ottimizzato come codice macchina) permette di etichettare con la data civile, ossia espressa in giorno-mese-anno ore-minuti-secondi, dati fotometrici, riprese a grande campo o deep-sky, immagni o riprese planetarie che siano state precedentemente marcate con una data giuliana.
È importante ricordare che questo algoritmo funziona con date giuliane che abbiano un reale riscontro e che siano maggiori o uguali a 2299160 (4715 a.C)... Ho infatti omesso il controllo dato che gestiamo date decisamente più prossime ai nostri giorni.

Formule utilizzate:
JD è la data giuliana che si vuole trasformare in data civile
I = IP( JD + 0.5 )
F = JD + 0.5 − I
A = IP( ( I − 1867216.25 ) ÷ 36524.25 )
se I ≤ 2299160 ⇒ B = 1, altrimenti B= I + 1 + A − IP(A ÷ 4)
C = B + 1524
D = IP( ( C − 122.1 ) ÷ 365.25 )
E = IP( 365.25 × D )
H = IP( ( C − E ) ÷ 30.6001 )
giorno = IP( C − E + F − IP( 30.6001 × H ) )
se H < 14 ⇒ mese = H − 1, altrimenti mese = H − 13
se mese < 3 ⇒ anno = D − 4715, altrimenti anno = D − 4716
ora = FP( C − E + F − IP( 30.6001 × H )) × 24
minuti = FP( ora ) × 60
secondi = FP( minuti ) × 60
NOTA: IP indica la parte intera di un'espressione numerica, FP la parte decimale.

Come usare il programma

    Precaricare la data giuliana sulla stack
    data_giuliana       ENTER
    esempio: 2456979.8438       ENTER
    avviare il programma e attenderne la conclusione:
    XEQ       C       ENTER
    Apparirà la scritta RUNNING poi, sulle due righe del display, saranno mostrati ora e data equivalenti alla data giuliana inserita.
    ad esempio:
    8.150432        8h 15m 04s
    18.112014      18 novembre 2014

Programma:

C001     LBL C            
C002     ENTER             salva copia di JD sulla stack
C003     0.5             +
C004     +             | calcola il coefficiente I
C005     IP             |
C006     STO I             +
C007     x<>y             recupera JD dalla stack
C008     0.5             +
C009     +             | calcola il coefficiente F
C010     FP             |
C011     STO F             +
C012     RCL I             +
C013     1867216.25             |
C014     −             |
C015     36524.25             |
C016     ÷             |
C017     IP             |
C018     ENTER             |
C019     RCL+ I             | calcola A e C
C020     1             |
C021     +             |
C022     x<>y             |
C023     4             |
C024     ÷             |
C025     IP             |
C026     −             |
C027     1524             |
C028     +             |
C029     STO C             +
C030     122.1             +
C031     −             |
C032     365.25             | calcola D
C033     ÷             |
C034     IP             |
C035     STO D             +
C036     365.25             +
C037     ×             |
C038     IP             | calcola E
C039     STO E             +
C040     RCL C             +
C041     x<>y             |
C042     −             | calcola H
C043     30.6001             |
C044     ÷             |
C045     IP             |
C046     STO H             +
C047     RCL C             +
C048     RCL− E             |
C049     RCL+ F             |
C050     RCL H             | calcola il giorno
C051     30.6001             |
C052     ×             |
C053     IP             |
C054     −             +
C055     ENTER             salva una copia del giorno sulla stack
C056     FP             +
C057     24             | usa la parte decimale del giorno per
C058     ×             | ricavare Ore.minuti_secondi
C059     —›HMS             | e salva il risultato in O
C060     STO O             +
C061     R⇓             + recupera il giorno dalla stack
C062     IP             | e salva la parte intera in G
C063     STO G             +
C064     14             +
C065     RCL H             |
C066     x<y?             |
C067     GTO C069             |
C068     GTO C071             | calcolo del mese
C069     1             |
C070     GTO C072             |
C071     13             |
C072     −             |
C073     ENTER             | qui salva una copia del mese sulla stack
C074     100             | e poi lo aggiunge come decimale al
C075     ÷             | giorno G, e si ha: gg.mm
C076     STO+ G             +
C077     R⇓             recupera la copia del mese dalla stack
C078     3             +
C079     x≥y?             |
C080     GTO C082             |
C081     GTO C084             |
C082     −4715             | calcolo dell'anno
C083     GTO C085             |
C084     −4714             |
C085     RCL+ D             |
C086     1E6             | e suo inserimento come decimale al
C087     ÷             | giorno G, e si ha: gg.mmaaaa
C088     STO+ G             +
C089     RCL O             visualizza ORE hh.mmss
C090     RCL G             visualizza DATA GG.MM.AAAA
C091     RTN            
                        Codici di verifica del programma: LN=358 CK=98E3

Esempio di verifica:

Convertire la data giuliana 2456987.30938 in data civile.

    2456987.30938         ENTER
    XEQ       C       ENTER
    ... RUNNING ...
    19.253043      stack, registo Y, si legge 19h 25m 30s
    25.112014       stack, registo X, si legge 25 novembre 2014

Algoritmo ALBA-TRAMONTO

Le formule utilizzate sono indicate nell'articolo Algoritmo ALBA-TRAMONTO, che si può leggere dal menu a tendina [Studio e Ricerca]—›[Algoritmo Alba-Tramonto]
IMPORTANTE: il programma necessita delle coordinate geografiche del luogo, quali Longitudine e Latitudine; in questo esempio ho inserito quelle approssimative del posto in cui vivo, pertanto ognuno dovrà inserire quelle compatibili con l'area in cui si trova.
Le righe di codice A010 e A012 devono essere personalizzate, come indico anche nei commenti a tergo.
Ricordo solo che cambieranno anche i codici di controllo LN (lunghezza) e CK (checksum).

FLAG della calcolatrice utilizzati:
0       se SET allora è richiesto il calcolo dell'ora del tramonto
          se CLEAR allora è richiesto il calcolo dell'ora dell'alba

Registri della calcolatrice utilizzati:
A     Latitudine
O     Longitudine
U     Offset da UTC (ora locale) o fusoORARIO
N     Numero dei giorni dall'inizio dell'anno
Z     Zenith
G     Longitudine trasformata in Angolo Orario (angoloORARIO)
T     Tempo approssimativo calcolato (t)
M     Anomalia media del Sole(M)
L     Longitudione reale del Sole (L)
R     Ascensione Retta (AR)
S     Declinazione del Sole (senDEC)
C     Declinazione del Sole (cosDEC)
H     Angolo Orario H del Sole (H)
B     Registro di appoggio per salvare il primo dei valori calcolati tra alba o tramonto

Come usare il programma

    avviare il programma e attenderne la conclusione:
    data del giorno in notazione MM.GGAAAA       XEQ       A       ENTER
    NOTA: 2 marzo 2014 deve essere inserito come 3.022014
    A fine calcolo, la stack offre i seguenti valori:
    Y: Ora dell'alba
    X: Ora del tramonto

Programma:
È composto da due routines: A001 e Y001 e necessita anche della procedura D001 "Calcolo del numero di giorni tra due date".

A001     LBL A            
A002     DEG            
A003     CF 0             azzera FLAG 0 (casomai non lo fosse)
A004     XEQ Y001             Calcola il giorno dell'anno di una specifica data MM.GGAAAA
A005     STO N             salva il numero dei giorni dall'inizio dell'anno nel registro N
A006     1             Offset da UTC (ora locale) fusoORARIO per l'Italia = 1 con ora solare, 2 con ora legale
A007     STO U             ...memorizzato nel registro U
A008     90.83333333             Valore del sole allo zenith 90° 50', ossia 90.833333333333
A009     STO Z             salvato in Zenith "Z"
A010     45.0957             Latitudine locale... [MODIFICARE IN BASE ALLA PROPRIA]
A011     STO A             salvata in A
A012     7.5939             Longitudine locale... [MODIFICARE IN BASE ALLA PROPRIA]
A013     STO O             salvata in O
A014     15             +
A015     ÷             | angoloORARIO = Longitudine / 15
A016     STO G             +
A017     SF 0             Se FLAG 0 = true si calcola l'ora del tramonto
A018     XEQ A028             Calcola l'ora del tramonto
A019     STO B             Salva l'ora del tramonto
A020     CF 0             Se FLAG 0 = false si calcola l'ora dell'alba
A021     XEQ A028             Calcola l'ora dell'alba finisce sulla stack Y
A022     RCL B             Richiama l'ora del tramonto finisce sulla stack X
A023     SF 10             +
A024     ALBA-TRAMONTO             | visualizza la scritta
A025     CF 10             +
A026     CF 0             azzera FLAG 0 (ripristina il default)
A027     RTN             Fine programma: alba e tramonto sono sullo schermo
               
A028     6             + SUBROUTINE DELL'ALGORITMO DI CALCOLO ALBRA-TRAMONTO
A029     FS? 0             | parte con ore 6 per alba, ma se FLAG 0 = true
A030     18             | allora calcola l'ora del tramonto e usa ore 18
A031     RCL− G             | calcola e salva tempo approssimativo
A032     24             | 6
A033     ÷             | t = N + (( - angoloORARIO G) / 24)
A034     RCL+ N             | 18
A035     STO T             +
A036     0.9856             +
A037     ×             |
A038     3.289             | M = (0.9856 * t) - 3.289 calcola e salva l'anomalia M media del Sole
A039     −             |
A040     STO M             +
A041     SIN             +
A042     1.916             |
A043     ×             |
A044     RCL+ M             |
A045     2             |
A046     RCL× M             |
A047     SIN             |
A048     0.02             |
A049     ×             | L = M + (1.916 * sen(M)) + (0.020 * sen(2 * M) + 282.634
A050     +             | calcola la Longitudine reale del Sole in L
A051     3             |
A052     RCL× M             |
A053     SIN             |
A054     0.0003             |
A055     ×             |
A056     +             |
A057     282.634             |
A058     +             |
A059     360             | L è ora normalizzata tra [0, 360], aggiungendo/sottraendo 360
A060     RMDR             | in base al valore sulla stack e questo si ottiene con una
A061     STO L             + operazione MODULO che ritorna il resto del rapporto tra due numeri interi
A062     TAN             +
A063     0.91764             | AR = atan(0.91764 * tan(L)) calcola Ascensione retta AR del Sole in R
A064     ×             |
A065     ATAN             | AR è ora normalizzata tra [0, 360], aggiungendo/sottraendo 360
A066     360             | in base al valore sulla stack e questo si ottiene con una
A067     RMDR             | operazione MODULO che ritorna il resto del rapporto tra due numeri interi
A068     STO R             +
A069     RCL L             +
A070     90             | L'ascensione retta del Sole deve essere traslata nello stesso quadrante
A071     INT÷             | della Longitudine:
A072     90             | quadranteL = INTG( L / 90) * 90
A073     ×             | quadranteAR = INTG(AR / 90) * 90
A074     +             |
A075     RCL R             | AR = AR + (quadranteL - quadranteAR)
A076     90             |
A077     INT÷             |
A078     90             |
A079     ×             |
A080     −             +
A081     15             +
A082     ÷             | AR = AR / 15 conversione in angolo orario (ore)
A083     STO R             +
A084     RCL L             +
A085     SIN             |
A086     0.39782             | senDEC = 0.39782 * sen(L) declinazione del sole (seno)
A087     ×             |
A088     STO S             +
A089     ASIN             +
A090     COS             | cosDEC = cos( asen( senDEC) ) declinazione del sole (coseno)
A091     STO C             +
A092     RCL Z             +
A093     COS             | Calcolo dell'angolo orario locale del Sole
A094     RCL A             | (cos(zenith) - (senDEC * sen(Latitudine)))
A095     SIN             | cosH = ------------------------------------------
A096     RCL× S             | (cosDEC * cos(Latitudine))
A097     −             |
A098     RCL A             | se cosH > 1 il sole non sorge mai
A099     COS             | se cosH < -1 il sole non tramonta mai
A100     RCL× C             |
A101     ÷             +
A102     ACOS             | per calcolare H e convertirla in ore, si deve sapere se calcolarlo per alba o tramonto
A103     FS? 0             | se FLAG 0 = true -> calcola per il tramonto, altimenti per l'alba
A104     GTO A108             |
A105     360             | per alba -> H = 360 - acos(cosH)
A106     x<>y             | tramonto -> H = acos(cosH)
A107     −             +
A108     15             H = H / 15 converte H nell'angolo orario (in ore)
A109     ÷            
A110     RCL+ R             +
A111     0.06571             | calcola il tempo medio locale dell'alba o tramonto usando il
A112     RCL× T             | tempo approssimativo precedentemente calcolato T
A113     −             |
A114     6.622             | T = H + AR - (0.06571 * T) - 6.622
A115     −             +
A116     24             + T è ora normalizzata tra [0, 24], aggiungendo/sottraendo 24
A117     RMDR             | in base al valore sulla stack e questo si ottiene con una
A118     RCL− G             | operazione MODULO che ritorna il resto del rapporto tra due numeri interi
A119     RCL+ U             | UT = T - angoloORARIO della Longitudine G
A120     —›HMS             | OraLocale = UT + fusoORARIO ossia l'Offset da UTC (ora locale)
A121     RTN             + trasformata in HH.mmss
                        Codici di verifica del programma: LN=492 CK=9CFB

LBL Y preleva dalla stack una data nel formato MM.GGAAAA e restituisce il numero del giorno di quella data.
Richiama a sua volta la procedura D001 "Calcolo del numero di giorni tra due date".

Y001     LBL Y             Calcola il giorno dell'anno di una specifica data
Y002     ENTER            
Y003     ENTER            
Y004     100            
Y005     ×            
Y006     FP            
Y007     0.0001            
Y008     −            
Y009     100            
Y010     ÷            
Y011     12.31            
Y012     +            
Y013     x<>y            
Y014     XEQ D001            
Y015     RTN            
                        Codici di verifica del programma: LN=62 CK=4005

Esempi di verifica:

Calcolare l'ora di levata e tramonto del Sole per il giorno 21 dicembre 2014

    12.212014       XEQ       A       ENTER
    ... RUNNING ...
    ALBA-TRAMONTO
    premere C e saranno visualizzate le ore di levata e calata del Sole.
    8.04558397812            ora dell'alba
    16.05025274858          ora del tramonto

    Per calcolare il numero delle ore di luce, si potrebbero aggiungere alcune righe al programma, oppure, manualmente:
    Premere HMS—›
    Premere il tasto x<>y       si scambiano i registri X e Y della stack
    Premere HMS—›
    Sui registri X e Y della stack si hanno i valori decimali delle due ore
    16.1048712664        ora del tramonto
    8.02441023211            ora dell'alba
    Premendo il tasto [] si ottiene il numero di ore di luce.
    8.08046103429
    Premere —›HMS
    Si ottiene il valore sessagesimale delle ore di luce
    8.04496597234

Calcolare l'ora di levata e tramonto del Sole per il giorno 21 giugno 2014

    6.212014       XEQ       A       ENTER
    ... RUNNING ...
    ALBA-TRAMONTO
    premere C e saranno visualizzate le ore di levata e calata del Sole.
    4.422028177             ora dell'alba
    20.2015421662             ora del tramonto

    Per calcolare il numero delle ore di luce, si potrebbero aggiungere alcune righe al programma, oppure, manualmente:
    Premere HMS—›
    Premere il tasto x<>y       si scambiano i registri X e Y della stack
    Premere HMS—›
    Sui registri X e Y della stack si hanno i valori decimali delle due ore
    20.3376171283        ora del tramonto
    4.705633825            ora dell'alba
    Premendo il tasto [] si ottiene il numero di ore di luce.
    15.6319833033
    Premere —›HMS
    Si ottiene il valore sessagesimale delle ore di luce
    15.3755139892

Radici di un'equazione di secondo grado

La soluzione di un'equazione di secondo grado nella nota forma ax2 + bx + c = 0 è:

−b ± √   b2 − 4ac 
              2a              
dove     b2 − 4ac     è noto con il termine di discriminante, (ma anche determinante) e generalmente indicato con la lettera greca Δ (Delta).
Se Δ è positivo, allora l'equazione ha due soluzioni (due radici reali).
Se Δ = 0, l'equazione ha un'unica soluzione (unica radice reale).
Se Δ è negativo, l'equazione ha due radici complesse.
Il programma permette di fornire le tre possibili soluzioni.

Se la soluzione ammessa è una sola, il registro D conterrà 0 (zero) e sarà visualizzato solo il valore del registro P nella prima riga in basso del display. La seconda riga conterrà sempre 0 (zero).
Nel caso classico di due possibili soluzioni, la prima radice è inserita nel registro P e la seconda nel registro Q. Entrambe le soluzioni sono sempre a disposizione sulla stack (registri Y e X al termine del programma).
NOTA: il programma è nato per scopi didattici, per insegnare la programmazione a mio figlio, ma l'ho inserito perché può essere chiamato come subroutine da altri programmi che necessitino di dati provenienti dalla risoluzione di equazioni di secondo grado (vedi più in basso lo stesso programma modificato ad hoc).

FLAG della calcolatrice utilizzati:
Flag 10, per trattare le equazioni come stringhe di testo. Il Flag è alzato all'avvio e riazzerato al termine.

Registri della calcolatrice utilizzati:
A     valore del coefficiente a dell'equazione di secondo grado
B     valore del coefficiente b dell'equazione di secondo grado
C     valore del coefficiente c dell'equazione di secondo grado
D     discriminante Δ
P     prima soluzione
Q     seconda soluzione

Come usare il programma
coefficiente a       ENTER
coefficiente b       ENTER
coefficiente c       XEQ       Q       ENTER
Sarà visualizzato RUNNING.

Se l'equazione ammette l'esistenza di due soluzioni reali, il programma visualizza per 1 secondo la scritta I RAD REALE, quindi propone la prima soluzione:
P=
            valore della prima soluzione.
Premere R/S e sarà proposta la seconda soluzione... La calcolatrice visualizza II RAD REALE per un secondo, poi:
Q=
            valore della seconda soluzione.
Premere R/S per terminare.

Se le soluzioni sono due numeri complessi, sarà visualizzata la scritta I RAD COMPL e a seguire il suo valore numerico:
P=
            valore di una delle radici, in forma complessa. —› un numero nella forma 0.25000i-0.66144 è letto come 0.25000-i0.66144.
Premere R/S e sarà proposta la seconda soluzione... La calcolatrice visualizza II RAD COMPL, per un secondo, poi:
Q=
            valore dell'altra radice, in forma complessa.
Premere R/S per terminare.

Nel caso di una singola soluzione, sarà indicato RAD UNICA, e proposta l'unica soluzione sul display, con 0 (zero) nel registro Y e la soluzione nel registro X:
[Y] 0
[X] valore della soluzione.
Premere R/S per terminare.

Programma:

Q001     LBL Q            
Q002     STO C             +
Q003     R⇓             |
Q004     STO B             | Salva i coefficienti
Q005     R⇓             |
Q006     STO A             +
Q007     SF 10            
Q008     RCL B             +
Q009     x2             |
Q010     RCL A             |
Q011     RCL× C             | calcola Δ
Q012     4             |
Q013     ×             |
Q014     −             |
Q015     STO D             +
Q016     x<0?             Δ<0?
Q017     GTO Q041             SI: salta al calcolo di 2 radici complesse
Q018     x=0?             Δ=0?
Q019     GTO Q069             SI: salta al calcolo di 1 radice reale
Q020     √x             + Δ>0
Q021     RCL− B             | 2 RADICI REALI
Q022     RCL÷ A             |
Q023     2             |
Q024     ÷             |
Q025     STO P             |
Q026     I RAD REALE             |
Q027     PSE             |
Q028     VIEW P             |
Q029     RCL D             |
Q030     √x             |
Q031     RCL+ B             |
Q032     RCL÷ A             |
Q033     2             |
Q034     ÷             |
Q035     +/−             |
Q036     STO Q             |
Q037     II RAD REALE             |
Q038     PSE             |
Q039     VIEW Q             +
Q040     GTO Q080             salta a fine programma
Q041     RCL D             + 2 RADICI COMPLESSE
Q042     ABS             |
Q043     √x             |
Q044     i             |
Q045     ×             |
Q046     RCL− B             |
Q047     RCL÷ A             |
Q048     2             |
Q049     ÷             |
Q050     STO P             |
Q051     I RAD COMPL             |
Q052     PSE             |
Q053     VIEW P             |
Q054     RCL D             |
Q055     ABS             |
Q056     √x             |
Q057     +/−             |
Q058     i             |
Q059     ×             |
Q060     RCL− B             |
Q061     RCL÷ A             |
Q062     2             |
Q063     ÷             |
Q064     STO Q             |
Q065     II RAD COMPL             |
Q066     PSE             |
Q067     VIEW Q             +
Q068     GTO Q080             salta a fine programma
Q069     RCL B             + 1 RADICE REALE
Q070     +/−             |
Q071     RCL÷ A             |
Q072     2             |
Q073     ÷             |
Q074     STO P             |
Q075     RAD UNICA             |
Q076     PSE             |
Q077     CLSTK             |
Q078     RCL P             +
Q079     CF 10            
Q080     RTN            
                        Codici di verifica del programma: LN=303 CK=9787

Esempi di verifica:
Imposto la visualizzazione in FIX con 5 decimali...

L'equazione 8x2+ 2x + 1 = 0 ha due soluzioni (o radici) complesse:
      8       ENTER
      2       ENTER
      1       XEQ       Q       ENTER
RUNNING
P =
                -0.12500i0.33072, ossia -0.12500 + i0.33072
Q =
                -0.12500i-0.33772, ossia -0.12500 - i0.33772

L'equazione 2x2 + 8x - 1 = 0 ammette due soluzioni reali:
      2       ENTER
      8       ENTER
      -1       XEQ       Q       ENTER
RUNNING
P =
                0.12132
Q =
                -4.12142

L'equazione x2 + 2x + 1 = 0 ha un'unica soluzione:
      1       ENTER
      2       ENTER
      1       XEQ       Q       ENTER
RUNNING
0.00000
-1.00000

Programma modificato e usabile come SUBROUTINE:

Come usare il programma
È necessario che il programma che sfrutta questa procedura inserisca nei registri A, B e C i 3 coefficienti, quindi usi l'istruzione XEQ Q007.
È possibile sfruttare il programma ridotto come programma a se stante (rispetto all'originale non mostra le indicazioni prolisse ma termina lasciando sul display le radici dell'equazione).
Per usarlo da utente e non da un programma...
inserire il coefficiente a       ENTER
inserire il coefficiente b       ENTER
inserire il coeffciente c       XEQ       Q       ENTER

Q001     LBL Q            
Q002     STO C             +
Q003     R⇓             |
Q004     STO B             | Salva i coefficienti
Q005     R⇓             |
Q006     STO A             +
Q007     RCL B             +
Q008     x2             |
Q009     RCL A             |
Q010     RCL× C             | calcola Δ
Q011     4             |
Q012     ×             |
Q013     −             |
Q014     STO D             +
Q015     x<0?             Δ<0?
Q016     GTO Q034             SI: salta al calcolo di 2 radici complesse
Q017     x=0?             Δ=0?
Q018     GTO Q056             SI: salta al calcolo di 1 radice reale
Q019     √x             + Δ>0
Q020     RCL− B             | 2 RADICI REALI
Q021     RCL÷ A             |
Q022     2             |
Q023     ÷             |
Q024     STO P             |
Q025     RCL D             |
Q026     √x             |
Q027     RCL+ B             |
Q028     RCL÷ A             |
Q029     2             |
Q030     ÷             |
Q031     +/−             |
Q032     STO Q             +
Q033     GTO Q064             salta a fine programma
Q034     RCL D             + 2 RADICI COMPLESSE
Q035     ABS             |
Q036     √x             |
Q037     i             |
Q038     x             |
Q039     RCL− B             |
Q040     RCL÷ A             |
Q041     2             |
Q042     ÷             |
Q043     STO P             |
Q044     RCL D             |
Q045     ABS             |
Q046     √x             |
Q047     +/−             |
Q048     i             |
Q049     ×             |
Q050     RCL− B             |
Q051     RCL÷ A             |
Q052     2             |
Q053     ÷             |
Q054     STO Q             +
Q055     GTO Q064             salta a fine programma
Q056     RCL B             + 1 RADICE REALE
Q057     +/−             |
Q058     RCL÷ A             |
Q059     2             |
Q060     ÷             |
Q061     STO P             |
Q062     CLSTK             |
Q063     RCL P             +
Q064     RTN            
                        Codici di verifica del programma: LN=200 CK=7E39
Calcolo della data della Pasqua per un determinato anno

Il programma, inserito un anno, calcola il mese ed il giorno in cui cadrà la Pasqua.
Può sembrare alieno all'astronomia, ma in realtà il giorno della Pasqua è frutto di una serie di calcoli astronomici legati alla data dell'ultimo plenilunio dell'anno precedente a quello per cui si cerca la data della festività.

Equazioni utilizzate:
NOTA: le divisioni sono tutte con numeri interi, pertanto va considerato solo il quoziente.
G = AAaa modulo 19         è il numero aureo - 1
C = AAaa ÷ 100                   è il secolo dell'anno
H = (C − (C ÷ 4) − ((8 × C) + 13) ÷ 25 + 19 × G + 15) modulo 30         è (23 − Epatta) modulo 30
I = H - (H ÷ 28) × (1 - (H ÷ 28) × (29 ÷ (H + 1)) × ((21 - G) ÷ 11)         sono i giorni tra il 21 marzo e il plenilunio pasquale
J = (AAaa + (AAaa ÷ 4) + I + 2 − C + (C ÷ 4)) modulo 7                            giorno della settimana del plenilunio pasquale 0=domenica, 1=lunedì, ecc.
L = I − J                                           giorno dal 21 marzo alla domenica del plenilunio pasquale o precedente il plenilunio
M = 3 + (L + 40) ÷ 44                 Mese della Pasqua
D = L + 28 − 31 × (M ÷ 4)         Giorno della Pasqua

Registri della calcolatrice utilizzati:
Y     l'anno inserito per cui si cerca la data della Pasqua
G     numero aureo − 1
C     il secolo dell'anno inserito
H     (23 − Epatta) modulo 30
I     sono i giorni tra il 21 marzo e il plenilunio pasquale
J     giorno della settimana del plenilunio pasquale 0=domenica, 1=lunedì, ecc.
L     giorno dal 21 marzo alla domenica del plenilunio pasquale o precedente il plenilunio
M     mese della Pasqua
D     giorno della Pasqua

Come usare il programma
Conviene fissare il display per la visualizzazione in formnato FIX 0 (ossia intero senza cifre decimali)
anno nel formato AAAA       XEQ       P       ENTER
Sarà visualizzato RUNNING
al termine il risultato sarà mostrato sulla stack (display)...
[Y] contiene il giorno della Pasqua
[X] contiene il mese della Pasqua

Programma:

P001     LBL P            
P002     STO Y             +
P003     19             |
P004     RMDR             | calcola G
P005     STO G             +
P006     RCL Y             +
P007     100             | calcola C
P008     INT÷             |
P009     STO C             +
P010     4             +
P011     INT÷             |
P012     +/−             |
P013     RCL+ C             |
P014     RCL C             |
P015     8             |
P016     ×             |
P017     13             |
P018     25             |
P019     √x             |
P020     INT÷             | calcola H
P021     −             |
P022     RCL G             |
P023     19             |
P024     ×             |
P025     +             |
P026     15             |
P027     +             |
P028     30             |
P029     RMDR             |
P030     STO H             +
P031     29             +
P032     x<>y             |
P033     1             |
P034     +             |
P035     INT÷             |
P036     RCL H             |
P037     28             |
P038     INT÷             |
P039     ×             |
P040     21             |
P041     RCL− G             |
P042     11             |
P043     INT÷             | calcola I
P044     ×             |
P045     +/−             |
P046     1             |
P047     +             |
P048     RCL H             |
P049     28             |
P050     INT÷             |
P051     ×             |
P052     +/−             |
P053     RCL+ H             |
P054     STO I             +
P055     RCL Y             +
P056     4             |
P057     INT÷             |
P058     RCL+ Y             |
P059     RCL+ I             |
P060     2             |
P061     +             | calcola J
P062     RCL− C             |
P063     RCL C             |
P064     4             |
P065     INT÷             |
P066     ÷             |
P067     7             |
P068     RMDR             |
P069     STO J             +
P070     RCL I             +
P071     x<>y             |
P072     −             | calcola L
P073     STO L             +
P074     40             +
P075     +             |
P076     44             |
P077     INT÷             | calcola M
P078     3             |
P079     +             |
P080     STO M             +
P081     4             +
P082     INT÷             |
P083     31             |
P084     ×             |
P085     +/−             | calcola D
P086     28             | e lo lascia
P087     +             | sulla stack [Y]
P088     RCL+ L             |
P089     STO D             +
P090     RCL M             visualizza M in [X]
P091     RTN            
                        Codici di verifica del programma: LN=316 CK=7B7F

Esempi di verifica:
Imposto la visualizzazione in FIX con 0 decimali...

Calcolo la Pasqua per l'anno 2014       2014       XEQ       P       ENTER
RUNNING
        20.
        4.      ossia 20 aprile

Calcolo la Pasqua per l'anno 2015       2015       XEQ       P       ENTER
RUNNING
        5.
        4.      ossia 5 aprile


© Paolo B.
www.000webhost.com