REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione...

10
SUPERSINC la rivista per gli utenti del prodotti SINCLAIR Anno 2 n° 4 - Aprile 1985 L. 7.500 Spedizione in abbonamento postale Gruppo 111/70 Una pubblicazione della d SOftEDITRICE In collaborazione con 77- GRUPPO EDITORIALE \ JACKSON I I _ L. rc RE i M mi "-- Al RIEZI M - r -111lI,_111 _l . - T- r -40». .610"' -40 rECTRUIR SHOPÌ'ING 2 CORSO DI L/M: 2a PARTE EMA SIST SOLARE PER ZX81 410, vr\ii .41111 2'21 ILY PER\\SPEC "'RUM A D %t INIOLO - A, od PS MSI, \qin PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Transcript of REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione...

Page 1: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

SUPERSINCla rivista per gli utentidel prodotti SINCLAIR

Anno 2n° 4 - Aprile 1985

L. 7.500

Spedizione inabbonamentopostale Gruppo 111/70

Una pubblicazione della

d SOftEDITRICEIn collaborazione con 77-

GRUPPOEDITORIALE \

JACKSON

II_L.

rcRE i

M mi "-- AlRIEZIM

-r -111lI,_111_l

. -

T-

r

-40». .610"'-40

rECTRUIR SHOPÌ'ING 2

CORSO DI L/M: 2a PARTE

EMASIST SOLARE PER ZX81410,

vr\ii

.41111 2'21ILY PER\\SPEC "'RUM

AD %t INIOLO

-

A,

od

PS

MSI, \qin

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 2: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

Anno 2 - n° 4 Aprile 1985

EH

5ED I O P.

POINTFAREa cura di Pietro Dell'Orco

7LA POSTA DEI LETTORI

9SPECTRUM SHOPPING 2trad. e adatt.di Marcello Spero

1 LA CULTURA INFORMATICA

A

DAL BASIC AL PROLOG:LA BABELEELETTRONICAdi Marcello Spero

19 REM:HWESTENDIAMO LEPOSSIBILITÀ DELLANOSTRA INTERFACCIACON UN CONVERTITOREANALOGICO/DIGITALEdi Marcello SperoPrima parte

31

L'ASSEMBLYASSIEMEdi Marcello SperoSeconda parte

ALLACCIAMO LESTRINGHEdi Carlo Panzalis

3939

51

GITA TURISTICAdi Colin Goochtrad. e adatt.di Carlo Panzalis

RACERdi David Pricetrad. e adatt.di Marcello Spero

SINC 3Ddi Martin Claytontrad. e adatt.di Marcello Spero

57 SISTEMA SOLAREdi Guido Bertolotti

62 TRADUZIONENUMERIdi Guido Bertolotti

66 MUSICdi GiovanniBenintende

70

73

PESI MOLECOLARIdi Antonio Motta

RECENSIONI LIBRIdi Lucio Bragagnolo

75 zxauB

81

I CLUBSINCLAIR

PICCOLI ANNUNCI

J. soft s.r.l.DIREZIONE, REDAZIONE,AMMINISTRAZIONEViale Restelli, 520124 MILANOTel. (02) 68.88.228-68.37.9768.80.841/2/3

DIRETTORE RESPONSABILE:Pietro Dell'Orco

COORDINAMENTO TECNICO:Riccardo Paolillo

REDAZIONE:Lucio BragagnoloMarcello Spero

HANNO COLLABORATO AQUESTO NUMERO

Giovanni BenintendeGuido BertolottiAntonio MottaCarlo Panzalis

GRAFICA E IMPAGINAZIONE:Margherita La NoceNana RossiRaffaella Toffolatti

FOTOCOMPOSIZIONE:Graphotek Via Astesani, 16Tel. 02/64.80.39720161 MILANO

CONTABILITÀ:Giulia PedrazziniFlavia Bonaiti

AUTORIZZAZIONE ALLAPUBBLICAZIONE:Tribunale di Milano n° 199del 14.04.1984

STAMPA:Litografia del SoleAlbairate (MI)

PUBBLICITÀConcessionaria per l'Italia el'Estero J. Advertising s.r.l.Viale Restelli, 520124 MilanoTel. 102) 68.82.895-68.80.606-68.87.233Tlx. 316213 REINA I

Concessionaria esclusivo per laDIFFUSIONE in Italia e Estero:SODIP Via Zuretti, 2520125 MILANO

Spedizione in abbonamentopostale Gruppo 111/70Prezzo della rivista L. 7.500Numero arretrato L. 15.000Abbonamento annuo: L. 82.500(11 numeri con cassetta) L. 38.500(11 numeri senza cassetta) per l'estero:L. 110.000 (11 numeri con cassetta)L. 50.000 (11 numeri senza cassetta)i versamenti devono essere indirizzati a:J. soft s.r.l.Viale Restelli, 520124 MILANO

mediante emissione di assegnobancario, cartolina, vaglia outilizzando il c/c postalen. 19445204.Per i cambi di indirizzo indicare,oltre al nuovo, anche l'indirizzoprecedente ed allegare allacomunicazione l'importo dl L. 500,anche in francobolli

TUTTI I DIRITTI DIRIPRODUZIONE O TRADUZIONEDEGLI ARTICOLI PUBBLICATISONO RISERVATI

GLI ARTICOLI TRADOTTI SONOTRATTI DALLA RIVISTAZX COMPUTING ARGUSSPECIALISTPUBLICATION L.T.D.1 GOLDEN SQUARE LONDONW IR3AB

Rivista associataall'UnioneStampaPeriodicaItaliana

SUPERSINCS 4/85 3

ananIMIIIMEMOnnan-a

m ~saIasun amo mon Unsana :una amo aTam a In

ei o amosaa unannannommmacommasamensmannminmemsnmainnimannamnannannwann sa

EIMMORMIHIElow

111 miasma mioaREMI N

NoIl Mi

siasa

RERE

----Itt3A9VVRITL

L OPEN

-elt -

23 LimumtPi

1.OAD

I N T

.

C

r i

/11

1:531

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 3: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

1 Ma MI MI IERI IRE ME MIE ME EP"'

di Guido Bertolotti

Con questo programma astrono-mi dilettanti e.... chiunque lo vo-glia potranno ottenere dal loroZX81 risultati sorprendenti!

uesto programma si propone di de-scrivere, prima in forma numerica

e poi graficamente, i moti di corpi inorbita intorno al Sole, siano essi pianeti,asteroidi, comete, meteoriti o sondespaziali.La completa comprensione del pro-gramma richiede alcune conoscenze digeometria analitica: il presente testo èridotto all'indispensabile, mentre le di-dascalie delle figure contengono qual-che richiamo più preciso sugli algoritmie sulle formule usate.Il programma utilizza nei suoi calcoli letre leggi di Keplero, scoperte nei primianni del XVII secolo da questo grandeastronomo che, insieme a Galileo eNewton, è considerato un pioniere dellamoderna ricerca scientifica.La pima legge di Keplero afferma che"le orbite dei pianeti sono ellissi, dellequali il Sole occupa uno dei fuochi".Un'elisse (v. fig. 1) è simile ad una cir-conferenza un po' schiacciata. Il "gradodi schiacciamento" è detto eccentricitàed è un numero che può variare fra O(ellisse non schiacciata) e 1 escluso(massimo schiacciamento).La seconda legge afferma che "la lineache congiunge un pianeta col Sole (ilraggio vettore) copre aree uguali intempi uguali". Se il pianeta percorreun'orbita non circolare (cioè con eccen-tricità diversa da O), la lunghezza delraggio vettore varia: di conseguenza,per coprire la stessa area nello stessotempo varia anche la velocità del piane-ta: essa è massima al perielio (puntodi minima distanza dal Sole) e minimaall'afelio (punto di massima distanza) (v.fig. 2 e 3).La terza legge si può enunciare così: "iquadrati dei periodi orbitali dei vari pia-neti sono proporzionali ai cubi dei se-miassi maggiori delle rispettive orbite"o, in forma più compatta: T2=ka3, doveT è il periodo orbitale, k una costantee a il semiasse maggiore dell'orbita.Vediamo ora il programma: esso com-

gloteOlia

(

solaA

MEI EIM Mi ERE 1~

Tabella 1: alcuni dati sui pianetidel sistema solare

Pianeta Periodo Dist. media Eccentricitàorbitale dal Sole orbita

Mercurio 88 d 58 Gm 0,186Venere 224 d 108 Gm 0,007Terra la 149,7 Gm 0,017Marte 687 d 228 Gm 0,09Giove 11 a 308 d 778 Gm 0,048Saturno 29 a 167 d 1427 Gm 0,056Urano 84 a 2870 Gm 0,044Nettuno 165 a 4494 Gm 0,007Plutone 248 a 5900 Gm 0,248

SUPERSINC® 4/85 57

IMME EIMìs

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 4: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

prende una breve routine in linguaggiomacchina, che serve per generare rapi-damente un cielo stellato, utilizzato co-me sfondo nella presentazione e nel-l'animazione dei pianeti. Per ottenerequesta routine è necessario battere illistato 1 e dare RUN. Se appare uncielo stellato con report 0/130, è tuttook. Cancellate allora tutte le linee,adeccezione della REM iniziale (che consi-gliamo vivamente di non EDITare), bat-tete il resto del programma e date RUN1900 per salvarlo su cassetta.Il programma parte da solo. Dopo lapresentazione esso richiede i dati, chepossono essere, a scelta, il periodo orbi-tale e l'eccentricità dell'orbita, oppureil semiasse maggiore dell'orbita e l'ec-centricità (v. tabella 1). I dati numericidevono essere seguiti dai simboli delleloro unità di misura, come del resto ap-pare chiaro dagli esempi di input che fail computer. E possibile infatti specifica-re i periodi in anni e/o giorni e le distan-ze in milioni di chilometri oppure in uni-tà astronomiche (l'unità astronomica,usata per misurare le distanze nel Siste-ma solare, venne definita come la di-stanza media fra il centro della Terra eil centro del Sole. Il valore per essaadottato è di 149,504201 milioni di chi-lometri, anche se, con osservazioni piùrecenti, si è scoperto che la distanzaTerra -Sole è leggermente superiore).Si passa poi all'output, che fornisce varidati, calcolati naturalmente secondo leleggi di Keplero, e (dulcis in fundo) al-l'animazione, che è decisamente la par-te più bella del programma. Se provatea introdurre i dati di un corpo che ruotasu un'orbita molto eccentrica (per es.l'asteroide Icaro, che ha il semiassemaggiore dell'orbita pari a 161 milionidi chilometri e l'eccentricità di 0,8), lovedrete chiaramente accelerare quan-do si avvicina al Sole e rallentare quan-do se ne allontana, come diretta conse-guenza della seconda legge di Keplero.Dobbiamo dire, per la verità, che il mo-to del pianeta nell'animazione non è cal-colato rigorosamente secondo la leggedelle aree, ma con un procedimentosemplificato (v. fig. 4), che comunque,specie se teniamo conto dei limiti di riso-luzione grafica dello ZX81, serve ugual-mente ai nostri scopi.Le opzioni che si possono scegliere du-rante l'animazione sono: rallentamentodel pianeta, fermata, ripartenza, dise-gno dell'orbita, ritorno alla visione deidati, COPY dello schermo su carta, in-troduzione dei dati di un nuovo pianeta.

fig. 1 1 punti di un'ellisse hanno unaparticolare proprietà: la somma delle di-stanze di ciascuno di essi dai due fuochiè costante e pari all'asse maggiore:

F1P + PF2 = FIP' + P'F2 = F1P" + P-,F =22a.

L'eccentricità è definita come il rapportofra la distanza di un fuoco dal centro del-l'ellisse e il semiasse maggiore:

Descrizione del programmaLinee1

60-220230-790800-10301040-1245

1250-13501360-15401750-1770

1780-1830

1900-1910

Commentocontiene il linguaggio macchina per generare un cielostellatopresentazioneinput datioutput daticalcolo e memorizzazione delle posizioni del pianeta perl'animazionepreparazione dello schermo per l'animazioneanimazionesubroutine per il calcolo dell'equivalenza unità astrono-miche -milioni di chilometrisubroutine per il calcolo della velocità istantanea in pe-rielio e in afelioSAVE e autostart

Descrizione delle variabiliABB2

C

CSD

D$

EF6

L,M,N

M2

P

P$

R

X,Y

XO, Yu

semiasse maggiore dell'orbita (in unità astronomiche)semiasse minore dell'orbita (in unità astronomiche)definita alla linea 1110, è il quadrato del semiasse mino-re di un'orbita di eccentricità E e semiasse maggiore paria 1 (v. fig. 4)distanza di un fuoco dal centro dell'ellisse (in unità astro-nomiche) (v. fig. 1)memorizza il tasto premuto per la scelta di un'opzionevariabile di loop, rappresenta l'angolo formato dalla ret-ta con l'asse delle ascisse (v. fig. 4)utilizzata nella prima parte del programma per ('inputdei dati, sotto forma di stringa, contiene in seguito, dallalinea 800 in poi, il nome del pianeta in inverse video.eccentricità dell'orbitavariabile di loop, usata per scopi varinella sezione di input viene utilizzata come puntatorenella stringa D$ quando essa contiene il periodo orbitaledel pianeta; in seguito, durante il calcolo delle posizionidel pianeta, G è il numero d'ordine della posizione esvolge il ruolo di "subscript" dei vettori X() e YOcoefficienti dell'equazione risolvente del sistema per ilcalcolo dell'intersezione della retta con l'ellisse (v. fig. 4)definita alla linea 1160, è il quadrato del coefficienteangolare della retta (v. fig. 4)è una costante definita alla linea 1070 e contiene ilnumero di posizioni del pianeta da calcolare per l'anima-zione. Può essere variata a piacerecontiene "SI" o "NO" e permette di saltare il calcolodelle posizioni del pianeta, se esso è stato già effettuatovariabile utilizzata per fornire alle subroutine1750-1770 e 1780-1830 la distanza del pianeta dalSole (in unità astronomiche)segno, vale -1 o +1 per selezionare l'intersezione sinistrao destra della retta con l'ellisse nel calcolo delle posizionidel pianetaperiodo orbitale (in anni)coordinate del punto d'intersezione della retta con l'ellis-se (v. fig. 4)vettori contenenti le ascisse e le ordinate delle P posizionisuccessive del pianeta, opportunamente moltiplicate eincrementate per renderle compatibili con la risoluzionegrafica dello ZX81

e=c/a

Da queste due relazioni, e osservandoche P"F1 = P"F = a, si ricava facilmentel'altra, usata nel programma (linea 710):

semiasse minore = b \,/,2 c2 =a -e2.

fig. 2 - Seconda legge di Keplero:

se il tempo impiegato dal pianeta perspostarsi da A a B è pari al tempo impie-gato per spostarsi da C a D, allora l'areaSCD è pari all'area SAB (e viceversa).

fig. 3 - È possibile calcolare, in base allaseconda legge di Keplero, la velocitàistantanea in un punto qualunque dell'or-bita. Il calcolo è particolarmente sempli-ce per la velocità in perielio e in afelio.

58 SUPERSINC® 4/85

= -

'

8

T

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 5: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

fig. 1

fig. 3

Infatti, se consideriamo un triangolinoSAB, di area: A(saa) -

n ab

REN1:11W

dove itab è l'area dell'ellisse e n un nume-ro molto grande, la lunghezza della baseAB (corta al punto di confondersi con unpezzetto As di ellisse) è:

2a_SA DJ_AB = As =

2n ab

rn

dove r è pari all'altezza SH.

D'altra parte, il tempo impiegato dal pia-neta per percorrere il tratto As è, per laseconda legge di Keplero:

t = T/n

dove T è il periodo orbitale.La velocità istantanea è quindi:

v, = lim As/ At = lim (2nahn)/(Trn) =

(2nab)/(Tr)

che è la formula usata nella subroutine1780-1830.Se esprimiamo a, b, r in unità astronomi-che e T in anni, otteniamo la velocitàespressa in unità astronomiche/anno. Ilprogramma la trasforma in km/s, molti-plicandola per un'opportuna costante.

fig. 4 - Il programma (linee 1040-1245)calcola le successive posizioni di un pia-neta, facendo uso di una legge che venivautilizzata in luogo della seconda legge diKeplero quando non era necessaria unagrande precisione di calcolo.Si consideri una retta passante per F2 (ilfuoco non occupato dal Sole) e ruotanteintorno a F2 con velocità angolare co-stante: le successive posizioni del piane-ta sono rappresentate da uno dei duepunti d'intersezione della retta con l'el-lisse.Il computer esegue i suoi calcoli usandoun'ellisse con semiasse maggiore pari ad1 ed eccentricità E, di equazione:

x2 + y2/(1 - E2) = 1.

La retta ha equazione:

y = tan D (x -E)

dove D è l'angolo variabile formato dallaretta con l'asse delle ascisse.Le due equazioni messe a sistema dannola risolvente:

(1 - E2 + tan2 D)x2 - 2(E tan2D)x (-1+E2+ E2 tan2 D) = O

i cui termini fra parentesi sono chiamatinel programma (linea 1170 e seguenti) L,M ed N.Il programma calcola quindi le coordina-te di uno dei due punti d'intersezione,chiamate X e Y, e le memorizza (dopoaverle moltiplicate e incrementate perrenderle direttamente utilizzabili inistruzioni PLOT e UNPLOT) negli arrayX() e Y().

SUPERSINCS 4/85 59

r :HA

-e

e .e°l- 1

ig. 4-.M1,..

n

+

peitho

fig. 2

n- x

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 6: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

Sistema solareversione per ZX81 16Kcaricature Linguaggio macchina

1 REM +++++++±10++++++j±20++++++++30++++++++40++++++++50

10 REM Cnr,TCT TN t M rFr rTrLn3TEILnTri fa.'S corTrTì

20 FAST30 LET M$="062,000050034J0e4

,033,000,000,014,024,006,032,030,125,125,230,052,032,015,030,155)126,230,012,032,005,030,142,203,070,040,002,030,139,123,215,035,01C,229,013032,224,201"40 LET 1=1651450 LET 5=060 FOR D=1 TO LEN M$ STEP 470 LET U=UAL MCD TO D+2)80 POKE I.090 LET S=S+U100 LET 1=1+1110 NEXT D120 IF 5<>3299 THEN PRINT "CONT

ROLLA I CODICI: C' E' UN ERRORE"130 IF 5=3299 THEN RAND USR 165

14

Sistema solareversione per ZX81 16Kprogramma principale

1 REM Y M6RNDS :j42111,9NRC5eg2W7NOT 7( FAST $4 STEP HN +++++:70

5 REM10 REM

REM30 REM >BY GUIDO BERTOLOTTI40 REN > 12/1954sO REM50 REN i PESENTA"I70 SLOW

RAND90 PR NT

** 513 MA IL.P-E **

USRAT

165146 " "'TAB 2

110 FuR F=1 O 2120 NEXT F130 CL5140 PRINT "QUESTO PROGRAMMA CAL

COLA E- DISEGNA L-ORBITA DI

UN PIANETA DEL SISTEMA SOLARESECONDO LE TRE LEGGI DI KEPLERO:"150 PRINT160 PRINT "1)

PIANETI SONOLI IL SOLEOCHI;"170 PRINT180 PRINT "2)

ONGIUNGE UNCOPRE AREEGUALI: DIANETA SIEMENTE QUANDOAL SOLE E PIU'

ANDO E"" PIU""190 PRINT200 PRINT "3)PERIODI

LE ORBITE DEIELLISSI DELLE QUAOCCUPA UNO DEI FU

LA LINEA CHE CPIANETA COL SOLEUGUALI IN TEMPI UCONSEGUENZA UN PIMUOVE PIU"" UELOCE"" PIU"" UICINO

LENTAMENTE QULONTANO;"

I QUADRATI DEIORBITALI DEI VARI

PIANETII AI CUBIIORI DELLE

.1 PRINT " COMANDI C=

2O IF NKEY$<>"C" THEN GOTO 22

230 REM MEAMEW240 LET P$="NO"250 CL5270 POKE 16418,2290 PRINT "QUALI GRANDEZZE CONO

SCI?"300 PRINT310 PRINT "1) PERIODO ORBITALEED ECCENTRI- CITA"" DELL"" ORBITA"320 PRINT330 PRINT "2) SEMIASSE MAGGIOREDELL-OR- BITA (DISTANZA M

EDIA DAL 50- LE) ED ECCENTRICITA"""

4 PR NT AT 21

SONO PROPORZIONALDEI SEMIASSI MAGGRISPETTIUE ORBITE

O

NK Y$="1" HEN GOTO 480360 IF INKEY$<>"2" THEN GOTO 35

370 CL5380 PRINT "INTRODUCI:"390 PRINT400 PRINT "1) LA DISTANZA MEDIADEL PIANETA DAL SOLE. SPECIFI

CA, DOPO IL DATO, SE SI TRATTA DI UNITA"" ASTRONOMICHE (U.A.) O MILIONI DI CHILOMETRI (GM)(E5:226GM);-410 INPUT 0$420 IF D$ (LEN D$-1 TO LEN D$)="GM" THEN LET D$=STR$ (UPL D$( TOLEN D$-2)/149.504201)+"U.A."426 IF DeLEN D$-3 TO LEN D$)<>"U.P." THEN GOTO 410440 LET A=UAL D$( TO LEN D$-4.)450 REM >>TERZA LEGGE DI K.<<460 LET T=5QR (0.99625936*A**3)470 GOTO 660490 CL5500 PRINT "INTRODUCI:"510 PRINT520 PRINT "1) IL PERIODO ORBITA

LE, IN ANNI E/0 GIORNI. SPECIFICA, DOPO OGNI DATO, ""A""(ANNI) O ""D"" (GIORNI) (ES:1 A 322 D);"530 INPUT D$540 LET G=1550 LET T=0560 FOR F=1 TO LEN D$570 IF DS(F)>="." AND D$(F)

" OR D$(F)=" " THEN GOTO 620580 IF D$(F)="A" THEN LET T=T+U

AL D$ (G TO F-1)590 IF D$(F)="D" THEN LET T=T+U

AL D$ (G TO F-1)/365.2564600 IF D$(F)<>"A" AND D$(F)<>"D" THEN GOTO 530610 LET G=F+1620 NEXT F630 IF T=0 THEN GOTO 530640 REM >>TERZA LEGGE DI K.«650 LET P=(T**2/0.99625936)**(13.I660 PRINT670 PRINT "2) L""ECCENTRICITR""DELL'ORBITA (0<=E:1) (E5: O.09)"680 INPUT E690 IF E<0 OR E>=1 THEN GOTO 68

0

60 SUPERSINC® 4,85

J

2

eo

- %DI

0.2U

5

Ims,

.

-OffigNUT

0

20

IF

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 7: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

700 REM »PRIMR LEGGE DI K.710 LET E=R*: 0P. (1-E**2)720 LET C=R*E730 PRINT740 PRINT -3) IL NOME DEL PIANE

TA (MAX 12 CARATTERI) (E6: MARTE)."750 INPUT D$760 IF LEN D$>12 THEN GOTO 750770 FOR F=1 TO LEN D$780 LET D$(F)=CHR$ (CODE D$(F)+

128)790 NEXT F800 REM !

810 CL5820 POKE 16418830 PR NT "

_UTPUT-, R I

";AT 1,1;D$835 PRINT840 PRINT "SEMIASSE MAGGIORE DELL-ORBITA"542 LET R=R845 GOSUB 1750850 PRINT851 PRINT "5EMIR65E MINORE DELL

-"ORBITA"852 LET R=B853 GOSUB 1750855 PRINT860 PRINT "PERIELIO: DISTANZA D

AL SOLE"862 LET R=A -C865 GOSUB 1750870 GOSUB 1780880 PRINT "AFELIO: DISTANZA DALSOLE"890 LET R=R+C900 GOSUB 1750910 GOSUB 1780920 PRINT "ECCENTRICITA"" DELL""ORBITA; ";E930 PRINT940 PRINT "PERIODO ORBITALE: ";INT T;" A ";INT (365.2564*(T-INTT)+.5);" D"950 PRINT960 PRINT "SOLE (";-C;" U.A.;0

U.A.)"

0 PR NT AT 23,0 CCM.

980 L T C$=INKEY$1000 IF CS="A" THEN GOTO 1040

1010 IF C$="P" THEN COPY1020 IF C$="R" THEN RUN 2301030 GOTO -8A1040 REM __AL7C)L0 5EMPLIFICATO CI

POSIZIONI CEL PIANETAIN G ISTANTI SUCCE51

1050 REM :>"SECONDA" LEGGE1055 IF P$="SI" THEN GOTO1060 FAST1070 LET P=501080 DIM X(P)1090 DIM y(P)1100 LET G=01110 LET 82=1-E**21120 LET 5=-11130 FOR D=.51*PI TO 2.5*PI STEP2+PI/P1140 LET G=G+11150 IF G>P/2 THEN LET 5=11160 LET M2=A85 TAN D**21170 LET L=82+M21180 LET M=E*M21190 LET N=M2-82*M2-821200 LET x=1M+5+5OR (M**2-L*N))/L1210 LET Y=TRN D*(X-E)1220 LET X(G)=INT (X*20+32.5)1230 LET (IG)=INT (Y*20+20.5)1240 NEXT D1245 LET P 5I"1250 REM PPEPAPAZ. SCHERMO1260 REM PER ANIMAZIONE1270 FAST1275 CLS1280 RAND USR 165141290 REM >>PRIMA LEGGE DI1:300 PRINT AT 11,1-20*E+32i/2;"@

1310 PRINTMigi2i"; D$1320 PRINT

DI K.<1250

ANIMAZIONE0,1;" PI

COMAND 5=SLOU B=EPEAV C=CONT O=0REITA p=

D=DAT1mR=PUN

RT

RT 22 0

133e FOR F=1 TO P1340 PRINT AT INTINT (X(Fi/2);"E"1350 NEXT F1360 REM1370 SLOW1380 FOR F=1 TO P1390 UNPLOT X(F),Y(F)1400 IF INKEY$<>"" THEN GOTO 14701410 PLOT X(F),Y(F)1420 NEXT F1430 GOTO 13801440 FOR D=1 TO P1450 UNPLOT XiD),Y(D)1460 NEXT D1470 LET C$=INKEY$1480 IF C$="C" THEN GOTO 14101490 IF C$="0" THEN GOTO 14401500 IF C$="D" THEN GOTO 8001510 IF CS="P" THEN COPY1520 IF C$="R" THEN RUN 23015:30 IF C$="5" THEN GOTO 14101540 GOTO 1470

1760 PRIN-99!!!TM21~.501750 REM

4201;" GM"1770 RETURN1780 REM1790 REM AL H+ E l Yr ,!Lia

1800 REM >>5- PIN, L GE D K.«1810 PRINT "UELOCITA"" ";(2*PI*A*(3)/(T*Ri*4.7374192;" KM/5"1820 PRINT1830 RETURN1900 SAVE "SISTEMA SOLARte1910 RUN

((43-Y(F))/2),

ANIMAZIONE

SUPERSINC® 4/85 61

.10

n

IL

-r.z1Z. 1274.itria7T Wanbtli-~eli ,,, 3 o eu

CI. w 04 . AICI

a *o

11« , O .. t i

,21

e Il.CI

. Ci1. II,

En.3 a OIl

. 1041,, AMie, .'..1111 A

AI'' A"

UATT-RELATI9I ALi A- . E ALLASLIAT RECITA

P2,!ZIONE Pr-'COPJ: P.=PUN

K.

"(

UEL,21=IT-1=1-" ::E.:TAMTH9F1-1

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 8: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

~l MI EMI ERI

di Guido Bertolotti

Una singolare utility per ZX81.

Questo programma insegna al com-puter come scrivere, in italiano cor-

retto, i numeri interi da zero fino a quasiun miliardo. Per far questo si avvaledelle possibilità di elaborazione dellestringhe offerte dal BASIC Sinclair, pos-sibilità queste utilizzate di rado.La traduzione di numeri dalla formaaritmetica a una lingua parlata, in que-sto caso l'italiano, non è un problemadifficile come potrebbe sembrare. Infat-ti, le grammatiche delle varie lingue so-no (in confronto al resto) molto regolariquando si tratta di formare la parolacorrispondente a un numero.Il programma si avvale di una potentesubroutine (linee 8000-9010), che gene-ra la parola corrispondente al numeroche le viene fornito.Questa subroutine, a sua volta, chiamain successione altre subroutine specia-lizzate, ciascuna delle quali pensa a tra-durre una parte del numero e ad ag-giungerla alla sinistra della parte già tra-dotta dalle subroutine chiamate primadi lei. La traduzione inizia dall'ultimacifra e continua via via fino alla prima.Se il numero è formato da una sola ci-fra, il ciclo FOR A.... (linee 8060.8074)chiama una sola subroutine e precisa-mente la "0-19" (linee 8100-8180).Se il numero è formato da due cifre, il

ciclo chiamerà le subroutine "0-19" e"20-90"; se è formato da tre cifre, sa-ranno chiamate la "0-19", la "20-90"e la "100-900", ecc.. Alcune di questesubroutine ne chiamano a loro volta del-le altre (la "1000-19000", ad esempio,sbriga una parte del lavoro chiamandola "0-19").Il programma è suscettibile di vari svi-luppi: si potrebbe ad esempio affianca-re un'altra subroutine alla 8000-9010,che esegua il lavoro inverso, cioè tradu-ca le stringhe in numeri (magari da unalingua diversa dall'italiano), ottenendocosì un programma che traduce numerifra due lingue; oppure scrivere un pro-gramma che genera un numero a caso,lo traduce in due lingue, visualizza unadelle traduzioni e richiede l'altra, con-trollandone poi l'esattezza.

~I IEEE 11~ 'lose11tV3ottle

Descrizione del programma

Linee10-80110-130145-1708000-90109100-92609300-9310

Commentopresentazioneintroduzione del numero da tradurrevisualizzazione del risultatosubroutine per la traduzione del numero in parolainizializzazioneSAVE e autostart

La subroutine 8000-9010 consiste di un loop (linee 8060-8074) che chiamain successione altre subroutine, e precisamente:

Linee Nome Commento8100-8180 0-19 traducono la cifra delle unità (zero -

nove); se la cifra delle decine èuguale a 1, si salta a 8150 (traduco-no le ultime due cifre, dieci -dician-nove)

8200-8260 20-90 traduconc; la cifra delle decine (ven-ti -novanta: "dieci" è esclusa, perchéè già tradotta da 0-19); se la cifradelle unità è pari a 1 o 8, la variabileD viene posta uguale a 1, per comu-nicare alla subroutine ADD (li -

62 - SUPERSINC3 4/85

CB MEI MEI

tioxig7-ri"*.

t

ootm .

I

~I MIMI IME

O

ME MIE

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 9: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

nee 9000-9010) di troncare l'ulti-ma lettera (questo per far sì che, adesempio, venga scritto "trentuno" o"novantotto" anziché "trentauno" o"novantaotto").

8300-8360 100-900 traducono la cifra delle centinaia.Aggiungono alla sinistra di C$"cent" (se la cifra delle decine è un8) o "cento" (se è diversa da 8). Sela cifra delle centinaia è maggioredi 1, poi, fanno aggiungere (chia-mando la subroutine ADD) la corri-spondente traduzione in unità (due -

nove, per formare duecento -novecento)

8400-8460 1000-19000 traducono la cifra delle migliaia. Ag-giungono "mille", se essa è ugualea 1 e le decine e centinaia di miglia-ia sono pari a 0. Se la cifra dellemigliaia è superiore a 1, aggiungono"mila" e chiamano 0-19 (per for-mare duemila -diciannovemila)

8500-8510 20000-90000 chiamano semplicemente 20-90,per aggiungere la traduzione dellacifra delle decine di migliaia

8600-8610 100000-900000 chiamano 100-900, per aggiunge-re la traduzione della cifra delle cen-tinaia di migliaia

8700-8760 1-19 milioni molto simili alle linee della subrouti-ne 1000-19000: anziché aggiunge-re "mille" o "mila", aggiungono "unmilione" o "milioni" e chiamano0-19, se la cifra dei milioni è supe-riore a 1

8800-8810 20-90 milioni chiamano 20-908900-8910 100-900 milionichiamano 100-9009000-9010 ADD vengono chiamate dalle subroutine

0-19, 20-90, 100-900 per ag-giungere alla sinistra di C$ la tradu-zione esatta della cifra corrente.Aggiungono uno -nove, se P=1, die-ci -diciannove, se P=2, venti -novanta, se P=3. Se D=1, troncanol'ultima lettera, evitando di aggiun-gerla a C$

Descrizione delle variabiliA variabile di loop, punta, dall'ultimo al primo, i caratteri di N$. Il

loop chiama, una dopo l'altra, le varie subroutine specializzatenella traduzione di una parte del numero

B,E variabili di loop, usate nella subroutine di inizializzazione per tra-sferire le stringhe da M$ a P$()

C il valore della cifra corrente, cioè VAL N$(A)CS la stringa alla quale vengono aggiunti via via i "pezzi" di numero

tradotti, finché alla fine contiene il numero scritto in italianoD troncatore: può valere 0 o 1: se vale 1, l'ultimo carattere della

stringa da aggiungere alla sinistra di C$ viene eliminatoF,G puntatori della stringa M$ nella subroutine di inizializzazioneL la lunghezza della stringa corrispondente al numero da tradurre

(LEN STR$ N)contiene le lunghezze delle stringhe memorizzate in P$

Mr4 contiene la traduzione delle cifre in italiano. Il suo contenuto, perpoter essere utilizzato, viene trasferito in P$()

N il numero da tradurre in italianoN$ la stringa corrispondente a N: STR$ N. Ad N$ vengono aggiunti

due "0" all'inizio, per impedire un eventuale blocco del program-ma alle subroutine "1000-19000" o "1-19 milioni"

P seleziona i tipi di traduzione di una cifra: ad esempio, se P=1,una cifra C=3 viene tradotta "tre", se P=2, viene tradotta "tredi-ci", se P=3, viene tradotta "trenta"

PS contiene, in ordine, le possibili traduzioni delle cifre. Viene forma-to durante l'inizializzazione, servendosi delle traduzioni memoriz-zate in M$

SUPERSINC' 4/85 63

.

.. -t

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor

Page 10: REM L. od€¦ · svolge il ruolo di "subscript" dei vettori X() e YO coefficienti dell'equazione risolvente del sistema per il calcolo dell'intersezione della retta con l'ellisse

Traduzione numeriversione per ZX81 16K

10 REM20 REM30 REM40 REM

60 PRINT AT 5,0;"OUESTOMMA PERMETTE DITALIANO I NUMERISI FRA O E

TRADUZIONE NAMERIL U J1/1985

TPRDU-IDNF tflJ

PROGRASCRIVERE IN IINTERI COMPRE999999994."

70 PRINT "PER LIMITI PROPRI DELLR PRECISIONE DEL COMPUTER (FUNZIONE 5TR$) I NUMERI SUPERIORI A CENTO MILIONI VENGONO ARROTONDATIALLA DECINA PILla VICINA."80 PRINT "ATTENDI90 GOSUB 9100110 PRINT AT 2103; "DIMMI UN NUM

ERO..."120 INPUT N130 PRINT AT 21,0;

140 GOSUB 8000145 CLS150 PRINT N;" 51 SCRIVE IN ITAL

IANO:"160 PRINT C$170 IF C$="" THEN PRINT "EOH?"180 ,GOTO 110

8000 REM TRADUZIONE IN ITALIANO(STRINGA C$) DEL NUMERO(VARIABILE N)

6005 LET C$="-8010 1F NoD OR N>999999994 OR N<>INT N THEN RETURN8020 LET N$=STR$ N8030 LET L=LEN N$8040 LET N$="00"+N$3060 FOR R=L+2 TO 3 STEP -18070 LET C=CODE N$iA)-288072 GOSUB 100*(L-A)+83008074 NEXT A8080 RETURN8100 REM 0-198110 IF C=0 AND L=1 THEN LET C$=-ZERO"8120 IF N$(9-1)="1" THEN GOTO 61503125 IF C=0 THEN RETURN8130 LET P=18135 GOSUB 90008140 RETURN8150 REM 10-198160 LET P=28170 GOSUD 90008180 RETURN8200 REM 20-908210 IF C<2 THEN RETURN8220 LET P=38230 IF NI(A+1)="1" OR N$ (A+1) ="8" THEN LET D=18240 GOSUB 90008250 LET D=08260 RETURN8300 REM 100-9008310 IF C=0 THEN RETURN8315 IF N$(R+1)<>"8" THEN LET Ci

6320 LET C$="CENT"+Ci8330 IF C=1 THEN RETURN8340 LET P=18350 GOSUB 90008360 RETURN8400 REM 1000-190008410 IF NeR-2 TO R)="000" THEN

64 SUPERSINC® 4/85

RETURN8420 IF NeR-2 TO A)="001" THENLET C$="MILLE"+C$8430 IF NS(R-2 TO A)="001" THENRETURN6440 LET C$="MILA"+Ci8450 GOSUB 81008460 RETURN8500 REM 20000-900008505 GOSUB 82008510 RETURN8600 REM 100000-9000008605 GOSUB 83008610 RETURN8700 REM 1 MILIONE -19 MILIONI8710 IF N$ig-2 TO R)="000" THENRETURN8720 IF N$ 01i-2 TO R)="001" THENLET C$= -UN MILIONE "+C$8730 IF N$(A-2 TO R)="001" THENRETURN8740 LET C$=" MILIONI "+C$8750 GOSUB 81008760 RETURN8800 REM 20-90 MILIONI8805 GOSUB 82008810 RETURN8900 REM 100-900 MILIONI8905 GOSUB 83008910 RETURN9000 REM AGGIUNGE ALLA SINISTRA

DI C$ L'OPPORTUNO NOMEDELLA CIFRA

9005 LET C$=P$(P,C+1) i TO M(P,C+1)-D)+C$9010 RETURN9100 REM INIZIALIZZAZIONE9110 LET M$="ZERO,UNO,DUE,TRE,(DURTTRO.CINOUE,SEI,SETTE,OTTO,NOVE,DIECI,UNDICI,DODICI,TREDICI,OURTTORDICI:QUINDICI,SEDICI,DICIASSETTE,DICIOTTO,DICIANNOUE,ZERO,DIECI,UENTI,TRENTR,QUARANTR,CINOURNTR,SESSANTR,SETTANTR,OTTRNTA,NOUANTR,CENTO"9120 DIM P$(3,10,11)9130 DIM Mi3,10)9140 LET G=191509160917091809190o

LET F=3FOR E=1 TO 3FOR 8=1 TO 10LET F=F+1IF M$(F)< THEN GOTO 918

9200 LET P$(E,6)=M$(G TO F-1)9210 LET M(E,B)=F-G9220 LET G=F+19230 NEXT9240 NEXT E9250 LET D=09260 RETURN9300 SAVE "TRADUZIONE NUMERia"9310 RUN

L

~1.1.111111~121.11k141.01~11111~1111

ougslo PRot.RoNNN PERNETTE DIè9CRIVERE IN ITPLIANO I NUNERI

reRx CNNPREusI FRP O E9999994.R LINITI PROPRI DELLP

c-PLt IJ,IONE DEL CONPUTER.ri'NZIONE STRs) I NUNERI.Ub-LRIOPI R CENTO NILIONILr.10NO PRROTONDPTT caLLP DECINR

VICINP.-TTENDI

1'lf1211 UN NUIICP0...

D.

SO PRINT

IO

="0"+C$

5

PDF compression, OCR, web optimization using a watermarked evaluation copy of CVISION PDFCompressor