Pagina HP48
GX
(Visualizza pagina con frames)
Corso di programmazione User RPL
Versione 1.1.0
Copyright © 1998 - 1999, Salvatore Miano (e-mail panmol@iol.it)
Avvertenze:
Il numero della versione che si legge subito dopo il titolo vuol essere un'indicazione di
eventuali aggiornamenti o revisioni (più che altro spiegazioni relative all'uso di nuovi
comandi non presenti nella versione precedente o aggiunta di nuovi argomenti).
Lo scopo precipuo di questo "corso" sul linguaggio di programmazione User RPL adoperato dai calcolatori della famiglia HP48, è quello di fornire a chiunque adoperi un tale tipo di calcolatore le nozioni per la realizzazione di più o meno semplici programmi.
Ho dato per scontato che chi utilizzerà queste pagine per imparare a programmare il calcolatore, o semplicemente per ripassare o approfondire quel che già sa, abbia già una certa familiarità con i comandi basilari (tipo somma o elevamento a potenza) e con la notazione polacca inversa RPN.
Il lavoro nasce da degli appunti presi qualche anno fa quando venni in possesso di un HP48 GX, quindi queste pagine HTML in realtà sono una versione riesumata riveduta ampliata pubblicata di quegli appunti. Ho usato, per quel che concerne gli esempi, dei programmi elementari, e questo per consentire a chiunque di non "perdersi durante il cammino", una volta acquisite le nozioni e una certa dimestichezza si possono prendere come altri esempi i programmi riportati nell'appendice A, alla fine di questa pagina, o quelli pubblicati nell'area del sito dedicata appunto ai programmi.
Ho constatato che alcuni colleghi universitari non possiedono il manuale d'uso in lingua italiana fornito assieme al calcolatore e quand'anche lo hanno a causa delle scarne informazioni riportate su di esso a proposito della programmazione, vengono scoraggiati ad esplorare le varie funzionalità dei molteplici comandi programmabili.
Mia gratitudine andrà a coloro i quali segnaleranno suggerimenti e migliorie.
Un generico programma consiste in un oggetto delimitato dagli identificatori « » il simbolo « indica l'inizio del programma, il simbolo » la fine.
All'interno del programma possono coesistere nomi, stringe, comandi, strutture, oggetti grafici, altri programmi... e quant'altro lo HP48 consente di manipolare.
Un programma una volta creato viene messo in catasta e memorizzato con un nome, oppure direttamente eseguito senza essere memorizzato premendo il tasto EVAL. Per eseguire un programma memorizzato premere il tasto di menu corrispondente al nome con cui l'abbiamo salvato. Memorizzandolo ovviamente non si corre il rischio di perderlo, mentre eseguendolo senza averlo salvato prima accertarsi che siano abilitati i comandi per richiamare in catasta gli ultimi oggetti cancellati.
I programmi si possono memorizzare sia nella memoria RAM (memoria utente) che nella memoria di porta. Per memorizzare un programma nella memoria RAM mettere il programma nel primo livello della catasta, scrivere un nome opportuno (vedi queste regole) quindi premere STO. Per memorizzare un programma nella memoria di porta, nella porta zero ad esempio, inserire il programma nel primo livello della catasta e digitare :0: Nomedelprogramma (chiaramente sostituire a Nomedelprogramma il nome che si è scelto) quindi premere STO. Per cancellare un programma in memoria RAM agire come quando si vuol cancellare un oggetto purchessia memorizzato. Mentre per cancellare un programma dalla memoria di porta inserire all'interno dei separatori :: rispettivamente il numero della porta e il nome del programma e digitare (o premere) PURGE: nell'esempio precedente :0: Nomedelprogramma PURGE.
Se si sanno manipolare gli elementi presenti nella catasta allora si hanno già delle buone basi per la programmazione.
Come detto in premessa, alcuni programmi possono essere costruiti proprio allo scopo di manipolare gli elementi in catasta.
Esempio:
« + »
Questo programma equivale a premere il tasto +. Quindi si aspetta che nei primi due livelli della catasta vi siano due oggetti suscettibili ad essere sommati (due numeri, due liste, una lista e una stringa ecc.)
Esempio:
« SWAP »
Questo programma equivale a premere il tasto del cursore a destra (SWAP). Quindi se nei primi due livelli della catasta vi sono due elementi il programma li inverte.
Esempio:
« + 2 ^ »
Il programma somma due elementi, eleva al quadrato tale somma e mette il risultato in catasta.
Esempio:
« PROOT »
Questo programma utilizza il comando PROOT e quindi consente di trovare le radici di un polinomio numerico del tipo [a1 a2 ... an].
Esempio:
« "Io sono una stringa di testo" »
Quest'altro mette nel primo livello della catasta la stringa "Io sono una stringa di testo".
Esempio:
« DUP2 2 ^ SWAP 2 ^ 4 ROLL 4 ROLL * 2 * + + »
Questo programma e un po' più complesso ( quando si saranno apprese le nozioni sulla programmazione non apparirà più tale!), esso esegue il prodotto di un binomio i cui due componenti si trovano nei primi due livelli della catasta.
Come si può capire i programmi che agiscono solamente manipolando gli elementi in catasta hanno dei limiti, ebbene, ecco che allora si ricorre all'uso delle variabili.
Si possono utilizzare tre tipi di variabili:
Una variabile è dunque un oggetto generico creato da un programma che viene memorizzato nella memoria utente con un nome (variabile statica), o un oggetto generico sempre cerato da un programma che "esiste" solamente all'interno del programma stesso (variabile locale).
Per creare una variabile statica si adopera massimamente il comando STO preceduto dall'oggetto, che quindi sarà la variabile statica, e dal nome che le si vuol attribuire.
I nomi delle variabili, sia statiche che locali sono case sensitive, vale a dire che una lettere minuscola si distingue da una lettera maiuscola (ad esempio la variabile di nome CAVOLO è diversa dalla variabile di nome Cavolo o cavolo o CaVoLo) inoltre esse devono rispettare i seguenti requisiti:
Lunghezza massima 127 caratteri
Non sono ammessi i caratteri: spazio, virgola, punto, punto e virgola, @. Ed inoltre tutti i simboli dei separatori usati per definire i vari oggetti (ad esempio «» {} [] " ' ecc.)
Il nome di una variabile non può iniziare con un numero
Il nome di una variabile non può essere uguale ad una variabile riservata (ad esempio: PPAR)
Il nome di una variabile non può essere un nome già assegnato ad un comando predefinito (Es: SIN, ^, +)
Il nome di una variabile statica che usa dei caratteri minuscoli compare nel menu con i caratteri in maiuscolo
Eseguiamo il seguente programma:
« 'A1' STO 'A2' STO A1 A2 + »
Esso memorizza due oggetti (ad esempio già presenti nella catasta) nella memoria RAM, rispettivamente con i nomi A1 e A2, successivamente richiama tali oggetti esegue la loro somma e mette il risultato in catasta. Se alla fine, le variabili A1 e A2 non servono più si possono eliminare dalla memoria, ed in tal caso il programma precedente potrebbe essere trasformato nel seguente:
« 'A1' STO 'A2' STO A1 A2 + 'A1' PURGE 'A2' PURGE »
o nel seguente (risparmiando qualche byte):
« 'A1' STO 'A2' STO A1 A2 + { A1 A2 } PURGE »
Per creare (definire) una variabile locale all'interno di un programma (esse infatti al contrario delle precedenti esistono soltanto per la durata del programma) si usa il comando ®
Tale comando non fa altro che togliere gli elementi dalla catasta e memorizzarli temporaneamente con dei nomi che lo seguono.
Esempio:
« ® A1 A2 « A1 A2 + » »
Questo programma è funzionalmente uguale al precedente. Esso quindi prende due oggetti (presenti in catasta) assegna loro i nomi A1 e A2 e successivamente richiama tali oggetti e li somma mettendo in catasta il risultato dell'operazione.
Vale la seguente regola per identificare le variabili e i nomi quando se ne definiscono più di una: all'oggetto immesso per primo (che sta nel livello più alto della catasta) viene attribuito il primo nome della serie delle variabili.
Le variabili locali sono da preferire alle variabili statiche in quanto fanno un uso più limitato della memoria RAM, perché non lasciano traccia della loro esistenza una volta eseguito (o anche nell'eventualità che venga interrotto) il programma, e perché si accede ad esse più rapidamente.
Le variabili locali compilate sono delle particolari variabili locali. Esse si identificano facendole precedere dal simbolo della freccia a sinistra ¬ (Es. ¬X). Vengono utilizzate, come le variabili locali, all'interno di un programma o di un sottoprogramma, con la sola differenza che se esse vengono richiamate al di fuori del programma o sottoprogramma per cui sono state dichiarate producono un messaggio d'errore (le variabili locali invece quando vengono richiamate dopo che la loro vita si è esaurita (!) non danno nessun messaggio di errore ma il loro nome viene considerato come fosse un nome globale)
Esempio:
Il programma « ® a « a 2 ^ » a » esegue il quadrato della variabile locale a e dopo aver eseguito l'operazione richiama a. Essendo però a dichiarata solamente per esistere all'interno del sottoprogramma « a 2 ^ » il richiamo dà come risultato il nome 'a'; mentre il programma « ® ¬ a « ¬ a 2 ^ » ¬ a » produce un messaggio d'errore in quanto la variabile locale compilata ¬ a non può esistere al di fuori del programma « a 2 ^ » e neppure il suo nome con cui è stata identificata.
Detto ciò ritengo che l'uso delle variabili statiche debba essere fatto solamente quando strettamente indispensabile, preferendo ad esse le variabili locali.
Come in quasi tutti i linguaggi di programmazione, anche nell'User Rpl si possono usare i commenti all'interno dei programmi. I commenti sono delle informazioni supplementari che servono a chi ha elaborato il programma (in genere un programma complesso) di raccapezzarsi qualora debba ritornare ad occuparsi di tale programma a distanza di molto tempo. I commenti non hanno alcuna funzione particolare nel programma, e infatti vengono ignorati.
Per inserire un commento usare il carattere @, quindi far seguire ad esso ciò che si vuol commentare o specificare e concludere il commento sempre con il carattere @. E' da precisare che il commento sparisce una volta che il programma viene immesso in catasta o memorizzato. Per conservare un programma con tutti i commenti inserirlo in una stringa prima di metterlo in catasta.
Le librerie sono degli speciali oggetti che possono essere memorizzati nella memoria di porta, dunque anche in schede estraibili. L'unica porta disponibile se non si hanno schede di espansione RAM è la porta zero.
Le librerie sono da preferire ai programmi, soprattutto se si tratta di pacchetti di programmi. Alcuni dei vantaggi delle librerie sono elencati di seguito:
Maggiore rapidità di esecuzione - Questo perché le variabili si "muovono" con maggiore velocità
Possibilità di nascondere nomi di programmi - In definitiva nel menu della libreria si possono visualizzare soltanto i nomi dei programmi che occorrono e così mantenerlo pulito
Protezione da accidentali cancellazioni - Infatti è molto più complicato disinstallare una libreria che cancellare un programma residente in memoria RAM (consiglio di memorizzare un programma prezioso nella memoria di porta onde evitare appunto una cancellazione fortuita)
Svantaggi delle librerie:
Essendo la libreria un insieme di programmi, non tutti i programmi contenuti in essa possono servire. Questo vuol dire che se ad esempio su 10 programmi totali contenuti in una libreria se ne utilizzano soltanto 4, 6 rimangono inutilizzati e occupano memoria.
Per installare una libreria occorre naturalmente che la libreria sia presente nel calcolatore. Mettere la libreria nel primo livello della catasta, scrivere 0 (numero zero) e premere STO. Il numero 0 può essere sostituito con altri numeri soltanto se si hanno una o più schede di espansione RAM installate (ho constatato che alcune librerie non funzionano quando vengono installate in porte diverse dalla 0). Spegnere e riaccendere il calcolatore o in alternativa premere contemporaneamente i tasti ON e C e quindi rilasciarli.
Per disinstallare una libreria inserire l'oggetto numero di libreria: numero di porta, (accertarsi che l'indice corrente sia HOME e di non avere in catasta la libreria da disinstallare) eseguire il comando DETACH, rimettere l'oggetto numero di libreria: numero di porta nel primo livello della catasta e usare il comando PURGE. L'oggetto numero di libreria: numero di porta è dunque composto da due numeri in mezzo all'identificatore : : Se ad esempio la libreria da rimuovere dalla memoria di porta 0 ha per numero 1604 digitare : 0 : 1604
Alle volte risulta difficile disinstallare una libreria, a questo proposito prima della procedura precedente eseguire un arresto manuale del calcolatore premendo contemporaneamente e rilasciando i tasti ON e C.
COSTRUIRE UNA LIBRERIA PASSO PER PASSO
Due programmi che servono per compilare una libreria sono usrlib.zip (30,8 KB) e lib.zip (14,3 KB). Il primo è un programma da utilizzare su computer, il secondo invece consente di creare le librerie direttamente sul calcolatore :-)
Seguire le seguenti istruzioni:
Creare una directory (directory base)
In tale directory inserire:
1) Tutti i programmi che debbono far parte della libreria
2) Una lista con i nomi dei programmi che si vogliono far apparire nel menu della
libreria, quindi memorizzare tale lista con il nome '$VISIBILE'
(il simbolo $
si ottiene premendo nell'ordine: il tasto alfa la freccia
a sinistra e il 4)
3) Una stringa che rappresenti il titolo della libreria ed
eventuali informazioni, tipo l'autore o la Versione, e memorizzare tale stringa con il
nome '$TITLE'
4) Un numero identificativo per la libreria (vedi tabella
seguente) e memorizzare tale numero con il nome '$ROMID'
Numero '$ROMID' |
Spiegazione |
0000-0256 |
Librerie interne usate dal calcolatore (non usare questi numeri) |
0257-0512 |
Applicazioni basate su ROM (non usare questi numeri) |
0513-0768 |
Applicazioni basate su RAM (non usare questi numeri) |
0769-1536 |
Numeri disponibili per le librerie (si possono usare questi numeri) |
1537-1792 |
Programmi sperimentali (usare preferibilmente questi numeri) |
1793-2047 |
Nuovi comandi (non usare questi numeri) |
5) Il programma « numero di libreria ATTACH » (sostituendo a numero di libreria il numero che si è scelto al punto
4) e memorizzarlo con il nome '$CONFIG'
6) (Facoltativo) Se si vuol nascondere qualche nome di
programma nel menu della libreria onde evitare di affollarlo, inserire all'interno di una
lista i nomi di tali programmi e memorizzare la lista con il nome '$HIDDEN'
7) (Facoltativo) Ordinare i nomi che si è scelto di far
comparire nel menu della libreria mediante l'uso del comando ORDER incorporato nella ROM,
in quanto l'ordine delle etichette di menu è dato proprio dalla posizione iniziale dei
programmi all'interno della directory base.
A questo punto si decide di compilare la libreria direttamente sul calcolatore o sul
computer.
Se si vuol compilare la libreria sul computer, trasferire la directory base nella medesima
cartella contenente il programma USRLIB.EXE, quindi digitare la riga di comando:
[posizione programma USRLIB.EXE] [nome directory base] [nome libreria].
(Es. Se il programma si trova nella cartella usrlib posizionata sul desktop di Windows, se
la directory base ha il nome PROVA, la libreria la si vuol chiamare PROVA.LIB, scrivere
nella riga di comando C:\WINDOWS\Desktop\usrlib\usrlib.exe PROVA PROVA.LIB e quindi
eseguire tale istruzione.
Se si vuol creare la libreria direttamente sullo HP48, trasferire ed installare la
libreria LIB.LIB.
Eseguire i punti precedenti.
Andare nella directory base e successivamente premere D®LIB (directory a library)
Il programma speculare LIB®D permette di disassemblare una libreria. Inserire in tal caso il numero identificativo della libreria (che dev'essere installata) e premere appunto LIB®D
Non resta quindi che verificare che tutto
funzioni perfettamente. Anche se può apparire superflua la verifica consiglio di
eseguirla sempre.
STRUTTURE DI CONTROLLO DECISIONALI
Le strutture di controllo decisionali assieme alle
strutture cicliche, sono elementi portanti di qualsiasi linguaggio di programmazione.
Esse permettono di far compiere al programma delle determinate istruzioni al verificarsi
di certe condizioni, o di reiterare esecuzioni automatiche senza che il programma venga
riavviato di nuovo manualmente.
IF CONDIZIONE THEN ESPRESSIONE END
E' il costrutto basilare dell'istruzione IF.
Il funzionamento è il seguente:
Viene valutata CONDIZIONE, che può essere un'espressione aritmetica o logica, o un programma, o comunque un qualcosa che fornisce dei valori logici, cioè 0 e 1 (un valore > 1 vale un 1 logico): se quindi CONDIZIONE risulta vera, vale a dire produce un 1 logico, allora viene eseguita (valutata) ESPRESSIONE, che può essere come al solito un comando o un programma o altro, altrimenti se essa risulta 0, ESPRESSIONE viene ignorata e quindi tutto il costrutto IF CONDIZIONE THEN ESPRESSIONE END non produce alcunché. La parola END stabilisce la fine del costrutto.
Esempio:
« ® a b « IF a b == THEN 1 END » »
Il programma verifica che due numeri inseriti in catasta siano uguali fornendo in tal caso un 1, se non sono uguali in uscita non viene dato nulla.
IF CONDIZIONE THEN ISTRUZIONE1 ELSE ISTRUZIONE2 END
E' il costrutto completo dell'istruzione IF.
Il funzionamento è il seguente:
Viene valutata CONDIZIONE, che può essere un'espressione aritmetica o logica, o un programma, o comunque un qualcosa che fornisce dei valori logici, cioè 0 e1 (un valore > 1 vale un 1 logico): se quindi CONDIZIONE risulta vera, vale a dire produce un 1 logico, allora viene eseguita (valutata) ISTRUZIONE1, che può essere come al solito un comando o un programma o altro, altrimenti se essa risulta 0,ISTRUZIONE1 viene ignorata e viene valutata ISTRUZIONE2. La parola END stabilisce la fine del costrutto.
Esempio:
« ® a b « IF a b > THEN a "Il maggiore è" ®TAG ELSE b "Il maggiore è" ®TAG END » »
Il programma confronta due numeri diversi (a priori) e stabilisce quali di essi è il maggiore.
CASE ESPRESSIONE1 THEN ISTRUZIONE1
END
CASE ESPRESSIONE2 THEN ISTRUZIONE2 END
.
.
CASE ESPRESSIONEn THEN
ISTRUZIONEn END
ISTRUZIONE PREDEFINITA (Opzionale) END
E' una struttura che ci permette di eseguire decisioni multiple. Il primo test che ha successo fa cessare l'esecuzione di tutta la struttura e fa eseguire l'istruzione ad esso associata, mentre se nessun test è soddisfatto viene eseguita (se è presente) ISTRUZIONE PREDEFINITA. Il funzionamento è il seguente: viene valutata ESPRESSIONE1 se essa fornisce un risultato vero allora viene eseguita ISTRUZIONE1 altrimenti se ESPRESSIONE1 dà un risultato non vero viene valutato ciò che contenuto nella prossima ESPRESSIONE che fornisce un risultato vero e di conseguenza eseguita l'ISTRUZIONE corrispondente appunto ad ESPRESSIONE. Se si prende in considerazione l'ipotesi o si sa che c'è la possibilità che nessuna condizione verrà soddisfatta si può aggiungere un'ISTRUZIONE PREDEFINITA che verrà quindi eseguita solo in tal caso.
Esempio:
« ® a b « CASE a b == THEN "I numeri sono uguali" END CASE a b > THEN a "Il maggiore è" ®TAG END CASE b "Il maggiore è" ®TAG END END END » »
Il programma confronta due numeri e dice se essi sono uguali o quale di loro è il maggiore. Si noti l'ISTRUZIONE PREDEFINITA CASE b "Il maggiore è" ®TAG END che verrà eseguita soltanto se a e b non sono uguali e se a non è maggiore di b.
STRUTTURE DI CONTROLLO ITERATIVE
VALORE INIZIALE VALORE FINALE START ESPRESSIONE NEXT
La struttura esegue ESPRESSIONE che può essere un comando (o una serie di comandi o una serie di programmi) un numero di volte compreso tra VALORE INIZIALE e VALORE FINALE. Il numero di volte della reiterazione va quindi dal VALORE INIZIALE (compreso) al VALORE FINALE (compreso) e avviene con un incremento di un'unità.
Esempio:
« ® a « 1 3 START sin(a) NEXT » »
Il programma prende un valore a dal primo livello della catasta e per tre volte esegue il comando sin(a), se ad esempio a = 90 (con la modalità per gli angoli impostata in radianti) si ottengono i tre numeri identici: 1 1 1, cioè il programma ha eseguito sin(a) tre volte. La struttura va da
VALORE INIZIALE a VALORE FINALE con un incremento di un'unità
VALORE INIZIALE VALORE FINALE START ESPRESSIONE INCREMENTO STEP
La struttura è simile alla precedente (è equivalente se si pone un INCREMENTO uguale a 1). Essa esegue ESPRESSIONE che può essere un comando (o una serie di comandi o una serie di programmi) un numero di volte compreso tra VALORE INIZIALE e VALORE FINALEcon incrementi di valori arbitrari definiti da INCREMENTO. Il numero di volte della reiterazione va quindi dal VALORE INIZIALE (compreso) al VALORE FINALE (compreso) e avviene con un incremento di un'unità espressa da INCREMENTO.
VALORE INIZIALE VALORE FINALE FOR CONTATORE ESPRESSIONE NEXT
E' uno dei costrutti ciclici più utili. La struttura esegue
ESPRESSIONE che può essere un comando (o una serie di comandi o una serie di programmi) un numero di volte compreso tra VALORE INIZIALE e VALORE FINALE incrementando di un'unità la variabile CONTATORE (che eventualmente si può richiamare in qualsiasi momento e quindi utilizzarla all'interno di ESPRESSIONE). Il nome della variabile CONTATORE è un nome di una generica variabile. Il numero di volte della reiterazione va quindi dal VALORE INIZIALE (compreso) al VALORE FINALE (compreso)e avviene incrementando di un'unità la variabile CONTATORE.
Esempio1:
« 1 SWAP FOR p p NEXT »Questo programma mette in catasta la variabile contatore p, dal suo valore iniziale al suo valore finale. Inserire un numero in catasta e usare il programma. Il numero inserito in questo caso è il valore massimo (ultimo) che la variabile p assumerà.
Esempio2:
« 1 1 3 ROLL FOR p p * NEXT »
Questo programma calcola il fattoriale di un numero intero presente nel primo livello della catasta (vedi il comando incorporato: !)
VALORE INIZIALE VALORE FINALE FOR CONTATORE ESPRESSIONE INCREMENTO STEP
E' il costrutto ciclico più utile (è equivalente al precedente se si pone un INCREMENTO uguale a 1). La struttura esegue ESPRESSIONE che può essere un comando (o una serie di comandi o una serie di programmi) un numero di volte compreso tra VALORE INIZIALE e VALORE FINALE incrementando di un'unità definita da INCREMENTO la variabile CONTATORE (che eventualmente si può richiamare in qualsiasi momento e quindi utilizzarla all'interno di ESPRESSIONE). Il nome della variabile CONTATORE è un nome di una generica variabile. Il numero di volte della reiterazione va quindi dal VALORE INIZIALE (compreso) al VALORE FINALE (compreso)e avviene incrementando di un'unità definita da INCREMENTO la variabile CONTATORE.
DO ESPRESSIONE UNTIL ESPRESSIONE TEST END
Il comando o i comandi, il programma o i programmi contenuti in ESPRESSIONE vengono eseguiti ripetutamente, fino a quando il loro risultato non è uguale (o non verifica) ciò che è contenuto (o quel che è richiesto) in ESPRESSIONE TEST
WHILE ESPRESSIONE TEST REPEAT ESPRESSIONE END
Il comando o i comandi, il programma o i programmi contenuti in ESPRESSIONE vengono eseguiti solo se ESPRESSIONE TEST fornisce un risultato vero (un 1 logico)
STRUTTURE PER LA CATTURA DEGLI ERRORI
IFERR ESPRESSIONE1 THEN ESPRESSIONE2 END
Se si genera un errore nei comandi o nei programmi contenuti in ESPRESSIONE1 vengono eseguite le istruzioni contenute in ESPRESSIONE2, mentre se ESPRESSIONE1 dà un risultato privo di errore allora il costrutto fornisce un 1. In genere questa struttura si usa per evitare di far comparire un messaggio di errore e quindi interrompere consequenzialmente il programma. Se ad esempio si sa a priori che un certo programma può generare un errore, si inserisce il comando come ESPRESSIONE1. Se non si verifica alcun errore, il comando viene eseguito regolarmente, mentre se si verifica l'errore il comando non viene eseguito ma viene eseguita ESPRESSIONE2.
Esempio:
Il programma seguente cattura l'errore 0/0 (zero diviso zero) fornendo in tal caso (se a e b sono contemporaneamente nulli) il messaggio "Forma indeterminata". Se non viene rilevato alcun errore si ha il valore logico 1.
« ® a b « IFERR a b / THEN "Forma indeterminata" END » »
IFERR ESPRESSIONE THEN ESPRESSIONE1 ELSE ESPRESSIONE2 END
Se si verifica un errore nei comandi o nei programmi contenuti in ESPRESSIONE l'errore viene ignorato e viene eseguita ESPRESSIONE1. Se invece in ESPRESSIONE non si verifica alcun errore viene eseguita sia ESPRESSIONE che successivamente ESPRESSIONE2
Esempio:
« ® a b « IFERR a b / THEN "Programma1" ELSE "Programma2" END » »
Esporrò adesso di seguito il funzionamento di molti (ma non di tutti) comandi incorporati nella ROM del calcolatore e in linea di massima accessibili da qualche menu. Se non si ricorda il menu dove essi risiedono non c'è nulla di più semplice che digitarli così come sono scritti. In questa pagina essi sono elencati in ordine alfabetico, ho fatto in modo tuttavia che essi siano consultabili sia appunto in ordine alfabetico che per per tipo di oggetti a cui si riferiscono (considerare il frame di sinistra).
Con questo comando si possono sommare tra di loro gli elementi di due liste aventi lo stesso numero di elementi. In pratica al primo elemento della prima lista (presente nel secondo livello della catasta) viene sommato il primo elemento della seconda lista (presente nel primo livello della catasta), al secondo elemento della prima lista viene sommato il secondo elemento della seconda lista... e così via per tutti gli altri elementi
Esempio:
Se si hanno in catasta le due liste dell'immagine:
usando ADD otteniamo la nuova lista:
Il comando permette di far emettere un bip (un suono più o meno prolungato) ad una determinata frequenza f in Hertz per un certo numero n di secondi. Inserire un numero che indica la frequenza del suono e un altro numero che indica la durata del suono e premere BEEP.
Esempio:
« 1000 1 BEEP »
Il programma emette un suono alla frequenza di 1000 Hz per un secondo.
Si possono costruire mediante questo comando dei motivi musicali, come il seguente da copiare, o da scaricare e trasferire al calcolatore
« 165 .25
BEEP .25 WAIT 185 .125 BEEP 196 .25 BEEP .25 WAIT 156 .125 BEEP 165 .125 BEEP .125 WAIT
185 .125 BEEP 196 .125 BEEP .125 WAIT 262 .125 BEEP 247 .125 BEEP .125 WAIT 165 .125 BEEP
196 .125 BEEP .125 WAIT 247 .125 BEEP 233 .75 BEEP 220 .125 BEEP 196 .125 BEEP 165 .125
BEEP 147 .125 BEEP 165 .5 BEEP .5 WAIT 156 .125 BEEP 165 .25 BEEP .25 WAIT 185 .125 BEEP
196 .25 BEEP .25 WAIT 156 .125 BEEP 165 .125 BEEP .125 WAIT 185 .125 BEEP 196 .125 BEEP
.125 WAIT 262 .125 BEEP 247 .125 BEEP .125 WAIT 196 .125 BEEP 247 .125 BEEP .125 WAIT 330
.125 BEEP 311 .75 BEEP .5 WAIT 156 .125 BEEP 165 .25 BEEP .25 WAIT 185 .125 BEEP 196 .25
BEEP .25 WAIT 156 .125 BEEP 165 .125 BEEP .125 WAIT 185 .125 BEEP 196 .125 BEEP .125 WAIT
262 .125 BEEP 247 .125 BEEP .125 WAIT 165 .125 BEEP 196 .125 BEEP .125 WAIT 247 .125 BEEP
233 .75 BEEP 220 .125 BEEP 196 .125 BEEP 165 .125 BEEP 147 .125 BEEP 165 .5 BEEP .5 WAIT
330 .125 BEEP .125 WAIT 294 .125 BEEP 247 .125 BEEP .125 WAIT 220 .125 BEEP 196 .125 BEEP
.125 WAIT 165 .125 BEEP 233 .125 BEEP 220 .125 BEEP .125 WAIT 233 .125 BEEP 220 .125 BEEP
.125 WAIT 233 .125 BEEP 220 .125 BEEP .125 WAIT 233 .125 BEEP 220 .125 BEEP .125 WAIT 196
.125 BEEP 165 .125 BEEP 147 .125 BEEP 165 .125 BEEP 165 .5 BEEP .75 WAIT »
Il comando consente di creare una finestra rettangolare di selezione partendo da una stringa, una lista e un numero. La lista può contenere altre liste o stringhe. La stringa rappresenta il titolo della finestra, gli elementi contenuti nella lista le varie righe della finestra; il numero può assumere i valori 1 e qualsiasi numero minore o uguale a zero. Selezionando una riga e premendo ENTER o OK viene inserita nel secondo livello della catasta ciò che è contenuto nella riga e nel primo livello della catasta il valore 1, mentre uscendo viene messo nel primo livello cella catasta uno zero. Con il numero minore o uguale a zero, il rettangolo viene sì visualizzato avendo la possibilità di far scorrere in rassegna le eventuali scritte di ogni riga ma non di immettere sul primo livello della catasta nessuna di tali righe. Il numero massimo di caratteri visualizzati completamente per ogni riga è 15.
Esempio1:
« "Titolo" { RIGA1 RIGA2 RIGA3 RIGA4 RIGA5 } 1 CHOOSE »
Esempio2:
« "Titolo" { RIGA1 RIGA2 RIGA3 RIGA4 RIGA5 } 0 CHOOSE »
Il calcolatore ha un set di 256 caratteri (in realtà essi possono sembrare 222 o 223!). Si può accedere ad essi con varie combinazioni dei tasti, oppure accedendo alle schermate che li visualizzano tutti premendo il TASTO DI COMMUTAZIONE A DESTRA quindi PRG (vedi NUM).
Il comando CHR converte un numero in una stringa contenente il carattere corrispondente. Il numero massimo di caratteri diverso è 256, dopo si ricomincia con periodicità 256.
Esempio1:
« 145 CHR »
Esempio2:
« 401 CHR »
Esempio3:
Il seguente programma mette nei vari livelli della catasta tutti i caratteri del calcolatore in ordine crescente
« 0 255 FOR c c CHR NEXT »
Consente di visualizzare lo schermo della catasta vuoto con le etichette di menu attuale (ciò che è contenuto in catasta non viene cancellato, bensì solamente non visualizzato).
« CLLCD »
Mediante questo comando si possono convertire unità di misura congruenti. Se ad esempio si vuol sapere quanti centimetri sono contenuti in un metro, vale a dire un metro a quanti centimetri equivale, inseriamo l'unità 1_m nel secondo livello della catasta e l'unità 1_cm nel primo livello quindi premiamo CONVERT. Per vedere a quanti centimetri equivale un pollice inseriamo nell'ordine 1_in e 1_cm, premiamo CONVERT ed otteniamo 2,54_cm.
Il comando prende il nome di una variabile numerica (cioè di un numero memorizzato con un nome) e la decrementa di un'unità, fornisce la variabile decrementata e rimemorizza la variabile numerica decrementata di 1.
Esempio: se N è il nome della variabile 25, inserendo il nome 'N' nel primo livello della catasta e premendo DECR otteniamo il numero 24 nel primo livello della catasta ed N memorizzata con il nuovo valore 24.
Il comando calcola il determinante di una matrice a coefficienti numerici (ovviamente quadrata) presente nel primo livello della catasta mettendo il valore del determinante nel primo livello al posto della matrice di origine.
Il comando visualizza istantaneamente un oggetto b in una riga n dello schermo. Le linee sono 7, quindi n va da 1 a sette. Se n=1 l'oggetto sarà visualizzato nella riga superiore dello schermo, se n=2 l'oggetto verrà visualizzato nella seconda riga e così via. Se l'oggetto è una stringa i separatori non vengono visualizzati.
Il numero massimo di caratteri visualizzati per ogni riga è 22.
Si usa spessissimo assieme a FREEZE e a CLLCD.
Esempio1:
« "1234567891234567891234" 1 DISP 3 FREEZE »
Esempio2:
« CLLCD "1234567891234567891234" 1 DISP 3 FREEZE »
Esempio3:
« CLLCD "1 2 3" 1 DISP "2 4 6" 2 DISP "3 6 9" 3 DISP 3 FREEZE »
Esempio4:
« CLLCD "1-sin(x)" 1 DISP 3 FREEZE »
Il comando consente di abbandonare l'esecuzione di un programma e di visualizzare un messaggio nelle prime due righe del display rappresentato da una stringa (contenente un numero massimo di 44 caratteri) emettendo nel contempo anche un effimero bip, in pratica si usa come messaggio di errore.
Esempio1:
« ® a b « IF a TYPE b TYPE == THEN a TYPE Tipo ®TAG ELSE "Attenzione: elementi di diverso tipo" DOERR END » »
Il comando può visualizzare pure dei messaggi di errore incorporati nella memoria ROM del calcolatore. In questo caso far precedere il comando DOERR da un numero n compreso tra gli intervalli:
1 £ n £ 16
513 £ n £ 520
257 £ n £ 317
1281 £ n £ 1286
o che vale 2812 2817 58368 58372 ecc...
N.B.
Tali numeri si possono "scovare" eseguendo il programmino « ERRM ERRN » subito dopo che si presenta un errore ;-)
Esempio2 :
« 1 DOERR »
Il comando applica (esegue) un comando o un programma agli elementi di un certo numero di liste aventi tutte la medesima dimensione, e fornisce un'unica lista con gli elementi delle tre liste combinati. Inserire nell'ordine: le liste, un numero intero che indica a quante liste applicare il comando o il programma, e quindi il comando o il programma.
In pratica il comando o il programma viene applicato "verticalmente" ai primi, ai secondi, ai terzi... ecc. elementi del numero di liste specificato.
Esempio1:
Inserire nella catasta nell'ordine:
{A B C}
{D E F}
{G H I}
2
« + »
Premere DOLIST
Esempio2:
Inserire nella catasta nell'ordine:
{A B C}
{D E F}
{G H I}
3
« + + »
Premere DOLIST
Esempio3:
Inserire nella catasta nell'ordine:
{A B C}
{D E F}
2
« IF SAME THEN "El. uguali" ELSE
"El. diversi" END »
Premere DOLIST
Il comando appplica un programma o un comando (inserito entro gli indicatori di programma) ad un determinato numero di elementi inseriti in una lista. Inserire quindi nell'ordine: una lista, il numero di elementi a cui applicare il comando o il programma e quindi il programma o il comando.
In pratica il numero che bisogna inserire indica il numero di elementi presi per volta (a partire dal primo) cui applicare il programma o il comando.
Esempio:
Si abbia la lista { A B C D } ed il programma « 1 + » Se come numero inseriamo 1 otteniamo la lista { 'A+1' 'B+1 'C+1' 'D+1' }, vale a dire che il il programma « 1 + » viene applicato ad un elemento a partire dal primo, ad un elemento a partire dal secondo, ad un elemento a partire dal terzo, ad un elemento a partire dal quarto, ovvero ad ogni elemento della lista, ed in questo caso equivale ad usare DOLIST. Se invece usiamo il numero 2 otteniamo la lista { A 'B+1' B 'C+1' C 'D+1' } cioè significa che prendiamo i primi due elementi A e B e applichiamo il programma, poi prendiamo gli elementi B e C e applichiamo il programma, poi prendiamo gli elementi C e D ecc (cioè come se si eseguissero « ® A B « 1 + » » « ® B C « 1 + » » « ® C D « 1 + » » all'interno della lista). Se inseriamo il numero 3 otteniamo la lista { A B 'C+1' B C 'D+1' } cioè significa che prendiamo gli elementi A B C ed applichiamo loro il programma, poi prendiamo gli elementi B C D ed applichiamo loro il programma (cioè come se si eseguissero « ® A B C « 1 + » » « ® B C D « 1 + » » all'interno della lista). Infine se usiamo il numero 4 otteniamo la lista { A B C 'D+1' }, vale a dire abbiamo preso tutti gli elementi A B C D ed abbiamo applicato loro il programma (cioè come se si eseguisse « ® A B C D « 1 + » » all'interno della lista)
Il comando duplica un qualsiasi oggetto presente nel primo livello della catasta e mette l'originale nel secondo livello e la copia nel primo (equivale a premere ENTER quando si usa la catasta)
Il comando duplica due oggetti presenti nei primi due livelli della catasta. Esso fornisce le due copie nei primi due livelli e gli originali nei livelli 3 e 4.
Dati N oggetti presenti in catasta, il comando effettua la copia degli N oggetti fornendo nei livelli da 1 a N le copie e nei livelli da N a 2*N gli originali oggetti.
Il comando permette di determinare gli autovettori e gli autovalori di una matrice quadrata a coefficienti numerici. Inserire la matrice e premere EGV.
Data una matrice quadrata di ordine n a coefficienti numerici il comando fornisce un vettore di n elementi che rappresentano gli autovalori della matrice.
Es:
Se la matrice è questa rappresentata nell'immagine
usando EGVL otteniamo il risultato riportato nell'immagine seguente
Il comando blocca (congela) una schermata finché non si preme un tasto. Inserire un numero, (3 generalmente), e premere FREEZE. Se si ha visualizzato l'orologio si noterà che questo si ferma. Utilizzato assieme al comando DISP permette di mantenere sullo schermo un determinato messaggio indefinitamente. Utilizzato assieme al comando CLLCD consente di visualizzare delle scritte sopra uno schermo vuoto.
Esempio:
« CLLCD "Ma mi faccia il piacere!" 1 DISP 3 FREEZE »
Il comando estrae un elemento contenuto in una lista o in una matrice. Se si deve estrarre un elemento da una lista o da un vettore utilizzare nell'ordine: la lista (o nome della lista se questa è memorizzata con tale nome) e un numero che indica la posizione dell'elemento da estrarre (1 = primo elemento, 2 = secondo elemento ecc...)
Esempio1:
« { 1 3 g k } 3 GET »
Fornisce la lettera g, cioè il terzo elemento della lista.
Per una matrice bidimensionale invece usare nell'ordine: la matrice (o nome della matrice se questa è memorizzata con tale nome) e una lista contenente due numeri, il primo indica la riga e il secondo la colonna in cui si trova l'elemento da estrarre.
Esempio2:
« [[1 2] [4 5]] { 1 2 } GET »
Fornisce l'elemento 2 (a12)
Il comando permette di tirare fuori (estrarre) il primo elemento di una lista o di una stringa contenenti almeno un elemento. Inserire la lista o la stringa e premere HEAD
Il comando prende il nome di una variabile numerica (cioè di un numero memorizzato con un nome)e la incrementa di un'unità, fornisce la variabile incrementata e rimemorizza la variabile numerica incrementata di 1.
Esempio: se N è il nome della variabile 25, inserendo il nome 'N' nel primo livello della catasta e premendo INCR otteniamo il numero 26 nel primo livello della catasta ed N memorizzata con il nuovo valore 26.
Il comando consente di creare uno schermo di inserimento valori (tipo numeri, espressioni algebriche o altro). Per funzionare necessita di 5 elementi, che sono nell'ordine:
I valori inseriti vengono poi immessi in una lista, se un elemento non viene inserito entro la lista compare il nome NOVAL.
Esempio1:
« "Schermo inserimento valori" { "valore1" "valore2" "valore3" } { 3 1} {} {} INFORM »
Esempio2:
« "Schermo inserimento valori" { "valore1" "valore2" } { 1 2 } { A B } {} INFORM »
Il comando interrompe l'esecuzione di un programma, prende due stringhe, una con scritto qualcosa e una vuota, e visualizza uno schermo contenente lo scritto dentro la prima stringa, sopra la catasta, e il cursore lampeggiante che richiede di immettere un valore.
Esempio:
Premendo INPUT si ottiene:
Il comando prende una lista dal primo livello della catasta contenente n elementi (minimo due elementi), e fornisce una nuova lista di n-1 elementi, in cui ognuno di essi risulta essere la differenza tra l'elemento che sta a destra e quello che sta alla sua immediata sinistra, iniziando a sottrarre dall'ultimo elemento della lista iniziale. Gli elementi contenuti nella lista di partenza possono essere numeri (reali o complessi), unità di misura, oggetti algebrici, matrici (naturalmente aventi tutti la medesima dimensione).
Esempio1:
si abbia la lista { 1 2 3 4 } premendo il comando DLIST otteniamo la nuova lista { 1 1 1 }Esempio2:
si abbia la lista { 12_cm 2_m } premendo il comando DLIST otteniamo la nuova lista { 188_cm }
Esempio3:
si abbia la lista { 'x-2' 'ln(x-2)' } premendo il comando DLIST otteniamo la nuova lista { 'ln(x-2)-(x-2)' }
Esempio4:
si abbia la lista { 'A' 'B' 'C' 'D' 'E' } premendo DLIST otteniamo la nuova lista { 'B-A' 'C-B' 'D-C' 'E-D' }
Il comando consente di sostituire una sottoespressione
Esempio1:
Il programma seguente sostituisce l'espressione o la sottoespressione INV(&A)(cioè INV di un elemento generico) con 1/&A (cioè con uno diviso lo stesso elemento generico:
« { 'INV(&A}' '1/&A' } MATCH »Il programma è utile quando si vuol avere un' espressione senza INV
Esempio2:
Quest'altro programma prende un generico numero complesso (a, b) e lo mette nella forma a+i*b.
« { &A 'RE(&A)+i*IM(&A)'MATCH DROP EVAL »Ad esempio se si ha un'espressione contenente molti numeri complessi, applicando il programma, si ottiene l'espressione con tutti i numeri complessi nella forma simbolica a+i*b
Esempio3:
« { '&A^&B' '(1/&A)^-&B' '&B<0'MATCH DROP EVAL »
Il programma trasforma le espressioni con esponente numerico negativo, in espressioni con esponente numerico positivo. Si noti la presenza della condizione, che fa sì che la sostituzione avvenga solo se l'esponente è negativo.
Il comando è perfettamente analogo al precedente, con l'unica differenza che la sostituzione avviene per prima nelle espressioni di livello superiore, cioè quelle che contengono le sottoespressioni.
Consente di creare una finestra con un messaggio racchiuso dentro una stringa. La finestra mostrerà un massimo di 5 righe contenenti ognuna un massimo di 15 caratteri. Si possono visualizzare più finestre, in questo caso inserire le stringhe entro una lista: premendo ok si visualizza la finestra successiva.
Esempio:
Memorizzare questo programma con un nome
« "Attenzione ad inserire i dati corretti" MSGBOX » eseguendolo si crea la finestra
Il comando permette di identificare il codice di un carattere: il carattere deve essere contenuto dentro una stringa. Se nella stringa sono presenti più caratteri, di questi viene fornito il codice soltanto del primo. Per accedere alle schermate con tutti i caratteri premere il TASTO DI COMMUTAZIONE A DESTRA (il tasto verde con la freccia) quindi PRG.
Nota: Attenzione al carattere di a capo che ha valore di codice 10!
Esempio:
Il programma seguente permette di distinguere un carattere entro una stringa.
« NUM IF 82 THEN "Si tratta di una R" END »
Di un oggetto, dà i componenti che lo costituiscono, cioè in pratica lo scompone.
OBJ® può sostituire i comandi più specifici LIST® ARRY® STR®, usati per decomporre rispettivamente liste, matrici (vettori), stringhe. Consiglio di adoperare i comandi più appropriati al posto del generico OBJ® sfruttando così quest'altra potenzialità e specificità.
Il comando consente di ottenere la copia di un oggetto che si trova nel secondo livello della catasta direttamente nel primo livello (naturalmente in catasta si devono avere almeno due elementi)
Esempio:
Premendo OVER si ha:
Il comando consente di ottenere la copia di un oggetto che si trova nel livello n della catasta direttamente nel primo livello (naturalmente in catasta si devono avere almeno n elementi)
Esempio:
Premendo 3 PICK si ottiene
Il comando fornisce la posizione di una sottostringa o carattere contenuto in una stringa, o di un oggetto contenuto in una lista. Se quanto cercato viene trovato si ottiene la sua posizione, altrimenti uno zero logico.
Ad esempio se inseriamo la stringa "Oggi c'è bel tempo" e subito dopo la stringa "tempo" otteniamo come risultato il numero 14, che indica che la dicitura "tempo" si trova nella stringa a partire dalla posizione 14. Se inseriamo la lista {a b c) e quindi il nome a, premendo POS otteniamo 1:
Il comando consente di sostituire un elemento all'interno di una lista o di una matrice (o di un vettore) con un altro elemento. In pratica il nuovo elemento andrà a situarsi al posto dell'altro. Per quel che concerne le liste inserire nell'ordine: una lista, l'oggetto da inserire al posto di un altro presente in lista, e un numero che indica la posizione dell'oggetto da sostituire.
Esempio:
Nella lista { 1 2 3 4 } sostituiamo il secondo elemento, cioè il numero 2 con il numero 9. Inserendo la lista, il numero 9, il numero 2 premiamo PUT otteniamo la nuova lista { 1 9 3 4 }
Per quel che concerne le matrici inserire nell'ordine: la matrice, una lista formata da due numeri che indicano le coordinate (riga e colonna) dell'elemento da sostituire (se si ha un vettore riga o colonna, al posto della lista inserire un numero soltanto), e l'elemento da inserire al posto di un altro presente nella matrice,.
Esempio:
Se si ha la matrice rappresentata dall'immagine:
e vogliamo sostituire l'elemento a22 4 con il numero 8 inseriamo quindi la matrice, la lista { 2 2 } e il numero 8 creando in catasta la situazione rappresentata dall'immagine:
premendo PUT otteniamo la matrice:
Il comando permette di sostituire una parte di un oggetto - posizionato nel terzo livello della catasta - a partire da una posizione iniziale espressa da un numero - posizionato nel secondo livello della catasta - con un opportuno oggetto - posizionato nel primo livello della catasta.
Gli oggetti che il comando tratta sono: liste, stringhe, matrici, oggetti grafici.
E' da precisare che l'oggetto che risiede nel primo livello e che vogliamo inserire nell'oggetto iniziale deve essere contenuto entro lo stesso tipo di simboli identificatori dell'oggetto del livello 3.
Esempio:
Se nel terzo livello posizioniamo la stringa "Ciao ciao ciao" (dove tra il secondo e il terzo ciao sono inseriti due spazi), nel secondo livello il numero 6 e nel primo livello la stringa "salve", premendo REPL otteniamo la nuova stringa "Ciao ciao salve".
Esempio:
Se nel terzo livello posizioniamo la lista { 1 2 3 4 }, nel secondo livello il numero 3 e nel primo livello la lista { a }, premendo REPL otteniamo la nuova lista { 1 2 a 4 }
Il comando inverte la posizione degli elementi entro una lista. Se ad esempio la lista è {A B C} esso dà come risultato la lista {C B A}. In pratica il primo elemento della lista viene scambiato con l'ultimo, il secondo con il penultimo e così via.
Il comando si applica a tre elementi, messi in catasta ad esempio, e permette di ruotarli (equivale a 3 ROLL)
Esempio:
premendo ROT si ottiene:
Il comando prende il nome X di una variabile, applica il comando CONJ (coniugato) al contenuto della variabile e memorizza la nuova variabile coniugata con lo stesso nome iniziale X
Esempio:
Se EQ è il nome dell'espressione algebrica '(x2-a)' inserendo il nome 'EQ' e premendo SCON si ottiene l'espressione 'CONJ(x2-a)' memorizzata in 'EQ'
Il comando crea una lista (genera una sequenza di valori) in base ad un'espressione contenuta nel quinto livello della catasta la quale espressione sia rispetto ad una variabile specificata nel quarto livello della catasta, partendo da un valore iniziale inserito nel terzo livello della catasta fino ad un valore finale inserito nel secondo livello della catasta con incremento di un determinato valore inserito nel primo livello della catasta.
In pratica vengono attribuiti dei valori incrementali ad un'espressione in una (o più variabili) che viene valutata di volta in volta e ogni valutazione costituisce un elemento della lista finale.
Esempio:
5: 'X'
4: 'X'
3: 1
2: 5
1: 1
Premendo SEQ otteniamo la lista { 1 2 3 4 5 }
Esempio:
5: 'X^2'
4: 'X'
3: 1
2: 5
1: 1
Premendo SEQ otteniamo la lista { 1 4 9 16 25 }
Il comando consente di valutare solo le variabili non specificate di un'espressione algebrica o anche quelle locali che sono richiamate da un'espressione in un programma.
Inserire l'espressione nel secondo livello della catasta e inserire nel pimo livello una lista contenente i nomi (o il nome) delle variabili da non valutare.
Esempio:
Sia 'EQ' l'espressione 'A+B+C'. Dopo aver memorizzato i valori 1, 2 ,3 rispettivamente con i nomi 'A' 'B' 'C', inseriamo l'espressione nel secondo livello della catasta e la lista {A B } nel primo livello. Premendo SHOW otteniamo l'espressione 'A+B+3' cioè l'espressione con A e B non valutate numericamente.
Esempio:
Il programma seguente prende due numeri dalla catasta e fornisce un'espressione con una variabile locale valutata in un numero (che è quello che prende dalla catasta) e una variabile locale non valutata
« ® a b « 'a^2+b^2' { a } SHOW » »
Inserendo 1 e 2 in catasta ed eseguendo il programma otteniamo 'a^2+4'
Il comando prende il nome X di una variabile, applica il comando INV al contenuto della variabile e memorizza la nuova variabile invertita con lo stesso nome iniziale X
Esempio:
Se EQ è il nome dell'espressione algebrica '(x2-x-a)' inserendo il nome 'EQ' e premendo SINV si ottiene l'espressione 'INV(x2-x-a)' memorizzata in 'EQ'
Il comando fornisce il numero di elementi di:
Un oggetto algebrico (un'espressione algebrica)
Una matrice
Una lista
Una stringa
Un oggetto grafico
Immettere l'oggetto adatto quindi e premere SIZE
Il comando prende il nome X di una variabile, applica il comando NEG (negazione, cioè cambio del segno) al contenuto della variabile e memorizza la nuova variabile cambiata di segno con lo stesso nome iniziale X
Esempio:
Se EQ è il nome dell'espressione algebrica '(x2-x-a)' inserendo il nome 'EQ' e premendo SNEG si ottiene l'espressione '-(x2-x-a)' memorizzata in 'EQ'
Il comando apre il programma di risoluzioni di un insieme di equazioni contenute nella libreria di equazioni incorporate nella ROM del calcolatore. Inserire nel livello 3 un numero che rappresenta l'argomento, nel secondo livello un numero che rappresenta il titolo dell'argomento, e nel primo livello della catasta il numero uno o zero - tale numero stabilisce se un eventuale immagine associata all'argomento che si sta trattando deve o meno essere copiata nell'ambiente PICTURE: uno sì, zero no. Gli argomenti e i loro relativi numeri si possono ottenere aprendo la libreria di equazioni.
Esempio:
Inserendo i numeri 2, 6, 1, cioè facendo in modo che la catasta corrisponda a:
3:
2
2: 6
1: 1
e premendo SOLVEQN si apre il risolutore di equazioni con l'argomento riguardante le resistenze in serie e in parallelo. Andando nell'ambiente PICTURE inoltre si può vedere l'immagine associata all'argomento.
Il comando prende una lista e la riordina partendo dal più piccolo elemento al più grande. Se ad esempio la lista iniziale è formata dai seguenti numeri: { 1 6 -5 0 -10 }, usando il comando SORT otteniamo la lista {-10 -5 0 1 6 }. All'interno della lista possono essere contenute anche stringhe o semplicemente dei nomi di lettere senza alcun separatore, in questo due casi gli elementi verranno ordinati alfabeticamente considerando le iniziali di tali stringhe o nomi senza separatori.
Equivale a SORT
Il comando permette di moltiplicare una variabile memorizzata con un nome per un opportuno oggetto, vale a dire una variabile che può essere moltiplicata. Ho scritto opportuno in quanto la variabile naturalmente deve essere un oggetto cui è possibile essere un fattore senza che si abbia errore.
Esempio:
Se EQ è il nome di una variabile che contiene l'espressione algebrica 'x-f', possiamo moltiplicare essa per una costante o per un'altra espressione, ad esempio 'x2-x-a' semplicemente inserendo 'EQ' 'x2-x-a' e premendo STO*, otteniamo allora una nuova espressione algebrica memorizzata con il nome EQ avente valore '(x-f)*(x2-x-a)'. Se inseriamo invece nell'ordine 'x2-x-a' 'EQ' e premiamo STO+, otteniamo l'espressione algebrica memorizzata con il nome EQ avente invece valore '(x2-x-a)*(x-f)'
Il comando permette di aggiungere un opportuno oggetto ad una variabile memorizzata, con un nome. Ho scritto opportuno in quanto la variabile naturalmente deve essere un oggetto cui è possibile "sommare" un altro oggetto.
Esempio:
Se EQ è il nome di una variabile che contiene l'espressione algebrica 'x-2', possiamo aggiungere ad essa una costante o un'altra espressione, ad esempio 'x2-1' semplicemente inserendo 'EQ' 'x2-1' e premendo STO+, otteniamo allora una nuova espressione algebrica memorizzata con il nome EQ avente valore 'x-2+(x2-1)'. Se inseriamo invece nell'ordine 'x2-1' 'EQ' e premiamo STO+, otteniamo l'espressione algebrica memorizzata con il nome EQ avente invece valore '(x2-1)+(x-2)'
Il comando permette di togliere un opportuno oggetto ad una variabile memorizzata, con un nome. Ho scritto opportuno in quanto la variabile naturalmente deve essere un oggetto cui è possibile "sottrarre" un altro oggetto.
Esempio:
Se EQ è il nome di una variabile che contiene l'espressione algebrica 'x-2', possiamo togliere ad essa una costante o un'altra espressione, ad esempio 'x2-x-a' semplicemente inserendo 'EQ' 'x2-x-a' e premendo STO-, otteniamo allora una nuova espressione algebrica memorizzata con il nome EQ avente valore 'x-2-(x2-x-a)'. Se inseriamo invece nell'ordine 'x2-x-a' 'EQ' e premiamo STO+, otteniamo l'espressione algebrica memorizzata con il nome EQ avente invece valore '(x2-x-a)-(x-2)'
Il comando permette di dividere una variabile memorizzata con un nome per un opportuno oggetto, vale a dire una variabile che può essere un divisore. Ho scritto opportuno in quanto la variabile naturalmente deve essere un oggetto cui è possibile essere un divisore senza che si abbia errore.
Esempio:
Se EQ è il nome di una variabile che contiene l'espressione algebrica 'x-f', possiamo dividere essa per una costante o per un'altra espressione, ad esempio 'x2-x-a' semplicemente inserendo 'EQ' 'x2-x-a' e premendo STO/, otteniamo allora una nuova espressione algebrica memorizzata con il nome EQ avente valore '(x-f)/(x2-x-a)'. Se inseriamo invece nell'ordine 'x2-x-a' 'EQ' e premiamo STO+, otteniamo l'espressione algebrica memorizzata con il nome EQ avente invece valore '(x2-x-a)/(x-f)'
STREAM può essere usato in due modi.
1° uso
Esso applica un programma o un comando (inserito entro gli indicatori di programma) ad ogni elemento di una lista meno il primo.
Esempio:
Se la lista è { A B C D } ed il programma è « 1 + » STREAM fornisce il risultato:
4: 'A'
3: 'B+1'
2: 'C+1'
1: 'D+1'
2° uso
Prende i primi due elementi di ogni lista e applica loro un programma o un comando generico (tipo + ,*, -, ^) ossia un programma o un comando che richiede due elementi, poi prende questo elemento ed il successivo della lista e applica nuovamente il programma o il comando. Il processo continua fino all'esaurimento degli elementi entro la lista.
Esempio:
Se la lista è { A B C D } e il programma è « * » STREAM fornisce il risultato: 20, vale a dire moltiplica tra di loro tutti gli elementi della lista.
Si noti che il 1° e il 2° uso dipendono da quanti elementi servono al programma contenuto nel primo livello per funzionare, cioè uno o più di uno.
Il comando permette di tirare fuori una parte di una stringa o di una lista o di un matrice o di un oggetto grafico (x) da una posizione iniziale (i) ad una posizione finale (f). Inserire dunque nell'ordine l'oggetto di cui si vuol estrarre una sua porzione, un numero che indica la posizione iniziale e un altro numero che indica la posizione finale
Esempio1:
« "Mi piacciono le patte fritte" 1 12 SUB »
Il programma dà come risultato:
Questo comando consente di dare un nome (un'etichetta più tecnicamente) ad un oggetto, creando un nuovo oggetto così formato: NOME:OGGETTO. Il nome deve essere una stringa. Inserire l'oggetto e poi la stringa, quindi premere ®TAG
Esempio:
Se si ha il vettore [ 2 3 -5] nel secondo livello della catasta e la stringa "Vettore" nel primo livello otteniamo premendo ®TAG:
Prende una lista o una stringa con almeno un elemento e fornisce un nuova lista o stringa con tutti gli elementi della lista o della stringa iniziale meno il primo elemento (meno il primo carattere nel caso si tratti di stringa)
Ad esempio se la lista è {A B C}, TAIL fornisce {B C}, mentre se si ha la stringa "sono nato uomo" TAIL fornisce "ono nato uomo"
Il comando crea automaticamente una directory chiamata EXAMPLES dentro cui sono contenuti degli esempi di programmi e di grafici
Di un oggetto ne individua il tipo dando un numero che lo identifica. Il seguente elenco enumera gli oggetti più comuni e il numero che TYPE fornisce:
TYPE
TIPO DI OGGETTO
0 Numero reale
1 Numero complesso
2 Stringa
3 Matrice a coefficienti reali
4 Matrice contenente coefficienti complessi
5 Lista
6 Nome glogale
7 Nome locale
8 Programma
9 Oggetto algebrico
10 Numero intero binario
11 Oggetto grafico
12 Oggetto ottenuto con ®TAG
13 Unità di misura
14 Il nome XLIB
15 Directory
16 Libreria
17 Oggetto di backup
25 Oggetto Code
26 Library Data
Con questo comando si converte un'unità di misura qualsiasi nelle unità base del Sistema Internazionale.
Es:
Se si ha l'unità Newton per Metro, 1_N*m, inserendo tale unità nel primo livello della catasta e pemendo UBASE otteniamo 1_kg*m^2/s^2
Di un oggetto unità di misura fornisce soltanto la parte numerica eliminando le unità di misura. Se si ha 34.1_erg usando UVAL otteniamo 34,1
Il comando fornisce due stringhe contenenti la versione della memoria ROM incorporata nel calcolatore e l'anno di fabbrica.
Esempio:
In quest'appendice ho inserito dei programmi. Mediante essi esemplifico l'uso dell'User RPL e fornisco degli "esercizi svolti". Il metodo fondamentale per imparare un qualsiasi linguaggio di programmazione è quello di esercitarsi, cioè di realizzare molti programmi: l'esercizio continuo (l'allenamento) affina le capacità (le prestazioni). Cliccando sul nome del programma è possibile scaricarlo e, successivamente inviandolo al calcolatore, provarlo. Naturalmente essi si possono copiare sulla calcolatrice così come sono scritti. In quest'ultimo caso è utile controllare il loro checksum, che riporto. Per far ciò inserire il programma nel primo livello della catasta e premere il comando BYTES.
Il programma inverte i membri di un'equazione presente nel primo livello della catasta
checksum: # 50176d
bytes: 17,5
« EQ® SWAP =
»
Il programma calcola il determinante di una matrice di ordine 2 i cui 4 elementi sono inseriti nei primi 4 livelli della catasta.
checksum: # 1346d
bytes: 61
« ® A B C D
« A D * B C * -
»
»
Il programma calcola il determinante di una matrice di ordine 3 i cui 9 elementi sono inseriti nei primi 9 livelli della catasta, per funzionare necessita del precedente programma D.2.
checksum: # 1574d
bytes: 160
« ® A B C D E F G H I
I
« B C
E F D.2 G *
A C D F D.2 NEG H *
A B D E D.2 I * + +
»
»
Il programma calcola il determinante di una matrice di ordine 4 i cui 16 elementi sono inseriti nei primi 16 livelli della catasta, per funzionare necessita dei precedenti programmi D.2 e D.3.
checksum: # 33403d
bytes: 320.5
« ® A B C D E F G H
I L M N O P Q R
«
B C D F G H L M
N D.3 O * A C D E G
H I M N D.3 NEG P *
A B D E F H I L N
D.3 Q * A B C E F G
I L M D.3 NEG R * +
+ + NEG
»
»
Il programma calcola il determinante di una qualsiasi matrice anche a coefficienti simbolici. Inserire nel primo livello della catasta la matrice sotto forma di lista avente gli elementi delle varie righe a sua volta racchiuse entro liste.
Es: per calcolare il determinante della seguente matrice di ordine 2 riportata nell'immagine
i cui elementi sono quindi: a11=(X-3)^3, a12=7, a21=a^2, a22=X,
inseriamo la lista: { {'(X-3)^2' 7 } {'a^2' X } }.
checksum: # 28491d
bytes: 341
« DUP
SIZE ® A
B
«
0 1 B
FOR i A i GET 1
GET A i 1 3 PICK
SIZE
IF 1 ==
THEN 3 DROPN
1
ELSE ® r c
« DUP SIZE
® m s
« 1 s
FOR p m
p DUP
IF r
==
THEN
DROP2
ELSE
GET ® l
« 1 s
FOR q l q DUP
IF c ==
THEN DROP2
ELSE GET
END
NEXT s 1 ®LIST
»
END
NEXT s
1 - ®LIST
»
» Det
END * -1 i 1
+ ^
IF 1 ³
THEN +
ELSE -
END
NEXT
»
»