MC - SCHEDA 1                   [schede: 1 2 3 4 5 6 7 8]     [indice schede]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Linguaggi della matematica, manipolazione delle espressioni e
calcolo numerico: che cosa cambia con l'avvento del computer? 
[Prima parte]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Indice:
1.1  Calcolo di termini con un linguaggio di programmazione (QBASIC).
     Linguaggi formali. Modi in cui dare i comandi. Help. Equivalenza
     algebrica e altre equivalenze. Numeri reali (R) e numeri-macchina (NM).
     es.1  es.2
1.2  Rappresentazione grafica e calcolo di x -> f(x) con l'applicazione
     GRAFUN. Punti di R^2 <-> punti di NM^2 <-> punti dello schermo (pixel).
     es.3
1.3  Uso delle CALCOLATRICI tascabili. Precisione dei calcoli.
     es.4
1.4  Quesiti e spunti per riflessioni didattiche.
     es.5
1.5  Commenti ad alcuni esercizi proposti.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


Con questa scheda, introduttiva, avvieremo all'uso di alcune applicazio-
ni-software e incominceremo a mettere a fuoco alcune questioni didattiche.
  
===== 1.1 ==================== [inizio scheda] Prendiamo confidenza con un'applicazione (quali forme hanno i comandi, in che modo avere "aiuti" su come procedere, ...?). Consideriamo un ambiente abbastanza semplice ma generale: il linguaggio di programmazione QBASIC (versione "free" - senza licenza - del QuickBasic) fornito insieme al sistema operativo DOS (e incluso nel software MaCoSa). Partiamo da un esempio elementare: tabulare la funzione x -> x^3 (x alla 3). Possiamo impiegare il programma: 10 INPUT ; x PRINT , x^3 GOTO 10 ottenendo ad es.: ? 4 64 ? 5 125 ? 4.5 91.125 ? 4.7 103.823 ? 4.6 97.33599 da cui potremmo dedurre che 4.6 è il troncamento ai decimi di Rad3(100) (con RadN(x) conveniamo di indicare la radice n-esima di x). Nel directory MC è presente INIZIO.BAS, versione abbellita del precedente programma. ** ES.1 ******* 1) Per eseguire il programma INIZIO.BAS devi aprire QBASIC. Per farlo puoi, ad es., attivare MaCoSa.exe (cliccando sulla sua icona) e dal suo menu aprire il Qbasic. NOTA: Se windows è male installato può accadere che la pressione dei tasti in Dos dia luogo sullo schermo a caratteri diversi (ciò può accadere per le parentesi, due punti, qualche lettera, ...); per risolvere il problema vedi l'help di MaCoSa. 3) Hai avviato il QBasic. Ora: - Leggi la "finestra di dialogo" che compare e chiudila premendo <Esc> - Osserva la barra di riferimento in fondo allo schermo per avere informa- zioni sullo stato del computer, su alcune abbreviazioni da tastiera e sulla posizione del cursore. - Premi il tasto <Alt>. Osserva sia la barra di riferimento che (in alto) la barra dei menu. Ripeti una o più volte la cosa - Con la barra dei menu attivata, premi <F1>. Leggi la finestra di dialogo. Premi <Esc> per abbandonare questa finestra (o, che in questo caso è lo stesso, premi <Enter>: cosi` confermi l'OK, che appare evidenziato nella finestra) - Con la barra dei menu attivata prova a usare i 4 tasti freccia e osserva la barra di riferimento. Alla fine premi <Esc>. 4) Ora dovresti essere in grado di azionare in vari modo il comando APRI presente nel menu FILE. Fallo nel modo che preferisci. - Ti compare una finestra di dialogo organizzata in campi all'interno dei quali puoi selezionare (o scrivere, in alcuni casi) nomi od opzioni. Per cambiare campo e muoverti in un campo puoi seguire le indicazioni presenti nella barra di riferimento o puoi usare il mouse. (premi anche il tasto F1, per avere altre informazioni; premi poi <Esc> per chiudere questa finestra di aiuto) - A questo punto apri il directory MC (seleziona MC nel riquadro "directory e drives" e premi <Enter> o fai un doppio clic su MC) e, poi, apri il file INIZIO.BAS (nel riquadro "file", selezionando e premendo <Enter> o con un doppio clic). - Con la barra dei menu disattivata premi <Shift+F1> (che cosa ti aspetti che accada?) NOTA: con <Tasto1+Tasto2> indichiamo: tenendo premuto Tasto1 premere Tasto2; con <Tasto1>+<Tasto2> indichiamo: premere Tasto1 e, poi, premere Tasto2. Shift (o Maius o "freccia grossa in su") è il tasto per le maiuscole. - Esamina il Sommario (per scegliere una opzione vacci sopra con <Tab> o con i tasti freccia o con il mouse o, più velocemente, premendo la lettera maiuscola con cui inizia o che compare in essa, e premi <Enter>); dopo aver "aperto" il sommario, esamina in particolare la voce "Parole chiave ..." (premi più volte <P> fino a che il cursore arriva sulla voce e poi premi <Enter>). Poi torna al sommario (premendo cosa? vedi la barra di riferimento) ed esamina la voce "Set di caratteri ..". - Che cosa accade se premi più volte <F6>? 5) Hai imparato a navigare nell'help. È utile per conoscere le caratteri- stiche del linguaggio (come dare i comandi, come si scrivono - sintassi - e a che azioni danno luogo - semantica - le varie istruzioni, ...). Prova a usarlo. - Prova ad eseguire il programma. Lo si può fare con <Alt>+<..>+<..> - Per interrompere l'esecuzione premi <Ctrl+C>. - Usa l'help per capire le righe 1, 10 e 11 di inizio.bas (esamina "Conven- zioni per la sintassi" in Sommario e le parole chiave CLS, PRINT e INPUT). Una istruzione di stampa può avere la forma seguente (e altre ...): PRINT [Termine] [{,|;} Termine] ... Un termine può avere la forma seguente: {TermineNumerico|TermineStringa} PRINT parola chiave TermineNumerico metavariabile (o segnaposto): variabile del metalinguaggio ; simbolo del linguaggio descritto (QBasic) { simbolo metalinguistico ******* END es.1 ** [commenti] Dopo questa familiarizzazione con una ambiente informatico, poniamoci il problema di calcolare il valore dei termini t1 e t2 seguenti per vari valori di x: 1 t1 = Rad2(x^2+1) - x t2 = ----------------- Rad2(x^2+1) + x Vediamo come farlo usando diverse risorse informatiche. Iniziamo con un LINGUAGGIO DI PROGRAMMAZIONE, il già visto QBasic. Usiamo il programma TABULA.BAS presente in MC. ** ES.2 ******* 1) Apri il programma TABULA.BAS. Osservane brevemente la struttura e poi eseguilo. Le uscite ti sembrano corrette? No, ovviamente. Arresta il pro- gramma ed esaminane il testo. 2) Correggi il programma (devi rivedere il termine assegnato a y2 nella riga 13), e prova ad eseguire il programma. Sulle due colonne dovrebbero ottenersi valori uguali, infatti t1 e t2 sono equivalenti (perché?). Se ti sembra che qualcosa non vada arresta il programma e torna al punto 2). 3) Ora prova a dare come input 12345, 123456,..., 1234567890, 12345678901, ... - Che cosa osservi? - Prova a cancellare l'apostrofo in testa alla riga 10 e a rieseguire il programma. Che cosa cambia? - Esamina la parola chiave DEFDBL (Help -> Indice) e "Limiti dell'ambiente Qbasic" (Help -> Sommario). Su questi aspetti torneremo in seguito. ******* END es.2 ** [commenti] ===== 1.2 ==================== [inizio scheda] Abbiamo visto che il programma non svolge esattamente i calcoli. Infatti non lavora sui numeri reali, ma su un insieme finito di numeri (NUMERI-MAC- CHINA). Quindi i risultati sono sempre approssimati. Si può far lavorare il programma con un insieme di numeri più ampio (in "doppia precisione"), ma, nel caso del nostro esempio, le cose non migliorano molto. Perché i due termini t1 e t2 (vedi), che sono algebricamente equivalenti, danno luogo a risultati cosi` diversi? Qual è quello che dà luogo a risultati più precisi? Prima di approfondire la questione vediamo che cosa accade dal punto di vista grafico. ** ES.3 ******* 1) Esci dal Qbasic (con Esci dal menu File, senza registrare le modifiche, in modo che il programma sia riusabile come esercizio). 2) Avvia il programma GRAFUN.EXE (utilizzando il menu di MaCoSa, devi battere >> g << (potresti aprire Grafun.exe anche da Windows). Grafun è una applicazione con finalità didattiche: è in grado di rea- lizzare in modo abbastanza semplice * rappresentazioni grafiche di funzio- ni, equazioni, dati sperimentali, figure, ..., * trasformazioni geometri- che e altre trasformazioni di file, * calcoli di funzioni, sommatorie, aree, * ... Non è sofisticata e non ha un "aspetto" accattivante (finestre colorate e mobili, menu a cascata, ...), ma vuole: * essere abbastanza "trasparen- te", per consentire di comprenderne la logica di funzionamento, per offrire interazioni con l'uso di linguaggi di programmazione e con altre applica- zioni, e * costringere (grazie ai pochi automatismi e alla presenza di sequenze di menu che costringono ogni volta a scegliere tra diverse opzio- ni) a riflettere maggiormente su come procedere. Per avere un'idea delle cose che essa può fare e, soprattutto, per ave- re un'idea dei possibili impieghi del computer in altre aree della matema- tica rispetto a quella affrontata in questo incontro, vediamo un DEMO (un "demo" è una esecuzione dimostrativa animata, che aziona i comandi automaticamente o guida l'utente nella scelta di essi): - aziona il comando RCL (batti >> 8 <<), - poi batti: >> demo.dm << ; - con questo comando stiamo aprendo il demo DEMO.DM presente in GFU, directory a cui GRAFUN accede direttamente anche senza battere il percorso (il directory corrente è MaCoSa). 3) Finito questo demo, riaziona il comando RCL (batti >> 8 <<). Poi batti: >> mc\t1t2.dm << : stiamo aprendo il demo T1T2.DM presente nel directory MC: MACOSA --- MC --- t1t2.dm Questo demo ti guiderà nella rappresentazione grafica di x -> t1 e x -> t2 e all'esame di parte dell'help di Grafun. Osserva che cosa appare sullo schermo e batti man mano, lentamente <Enter>. Alla fine, per uscire da Grafun, scegli END (con 7) e conferma (con 1) che vuoi smettere di usarlo. ******* END es.3 ** [commenti] I grafici che si ottengono con un computer non rappresentano fedelmente le funzioni poiché, oltre alla approssimazione nel calcolo dei valori delle funzioni (R -> NM, dai numeri reali ai numeri macchina), siamo di fronte al fatto che lo schermo è composto da un insieme finito di pixel (picture elements; sono i punti luminosi dello schermo): esiste una seconda approssi- mazione nel passaggio dalla coppia (x,y) di numeri macchina alla coppia di coordinate schermo (R^2 -> NM^2 -> pixel). Comunque, dalle uscite grafiche ottenute, appare chiaro che t2 (il termine che "scolasticamente" sarebbe considerato più brutto: lo si fa razionaliz- zare in t1!) è quello migliore dal punto di vista del calcolo. Si poteva capire qual è il migliore anche analizzando le uscite: x t1 t2 12345 4.050223E-05 4.050223E-05 123456 4.050026E-06 4.050026E-06 1234567 4.050003E-07 4.050003E-07 12345678 4.050526E-08 4.05E-08 123456789 4.081812E-09 4.05E-09 1234567890 2.328306E-10 4.05E-10 12345678901 -5.587935E-09 4.05E-11 Man mano che aumento x, moltiplicando circa per 10, per un po' sia t1 che t2 si riducono, dividendosi circa per 10. Ciò fa supporre che t1 e t2, per x che tende all'infinito ( x -> INF ), si comportino come 1/x (cosa che era deducibile direttamente esaminando la forma di t2). Il fatto che da un cer- to punto in poi t1 si scosti da questo comportamento suggerisce che siano intervenuti errori di approssimazione tali da rendere non attendibili i valori visualizzati. ===== 1.3 ==================== [inizio scheda] Per capire meglio che cosa accade usiamo uno strumento più semplice, di cui ci sia più facile interpretare il comportamento. ** ES.4 ******* Usando una CT (calcolatrice tascabile) o il programma CALCOL.EXE (sele- zionalo dal menu Macosa) per simulare una CT con 8 cifre di mantissa e 2 di esponente (con priorità, senza cifre nascoste), calcola (0.1234567+1234567-1234567)/3 premendo: 0.1234567 [+] 1234567 [-] 1234567 [=] [/] 3 [=] - Ottieni un "buon" arrotondamento di (0.1234567+1234567-1234567)/3 ? - Ripeti il calcolo osservando man mano che cosa appare sul visore - Prova a spiegare il fenomeno osservato ******* END es.4 ** [commenti] Ciò che è all'origine del cattivo comportamento numerico di t1 è la presenta di una differenza tra Rad2(x^2+1) e x che, per x -> INF tendono ad essere uguali e, quindi, a dar luogo al fenomeno della CANCELLAZIONE DELLE CIFRE ora visto. Nel caso del calcolo dell'es.4 avevamo: calcolo 1234567.1234567 CT: 1234567.1 (appross. a 8 cifre) esatto: - 1234567 - 1234567 ------------------ ------------------ = 0.1234567 = 0.1 (appross. a 1 cifra) / 3 / 3 ------------------ ------------------ = 0.0411522333... = 0.0333... Il risultato con la CT era il frutto di una divisione per 3 su un numero che era già stato approssimato ad una sola cifra. Dal calcolo con la CT (fatto in questo modo, senza manipolare prima a mano 0.1234567+1234567-1234567) potrei solo dedurre che il risultato è circa 0.03. Una situazione analoga si presenta tutte le volte che (all'interno di un calcolo) compare la somma tra numeri discordi approssimati a N cifre (nell' es. N=8) che abbia un risultato con ordine di grandezza più piccolo del massimo tra gli ordini di grandezza dei due numeri (nell'es. l'ord. di gr. del risultato è -1). Se le cifre "buone" erano N, con la riduzione dell' ordine di grandezza, ad es. con lo spostamento a destra di 3 posti della prima cifra non nulla, le cifre "buone" diventano N-3 (nell'es. l'o.d.g. si riduce di 7 per cui le cifre buone sono N-7). Le altre operazioni danno luogo ad approssimazioni che, in genere, lavo- rando con un mezzo di calcolo che approssimi con 7 o più cifre, non incido- no in maniera decisiva sulla precisione dei risultati. Esaminiamo meglio questo aspetto, anche in modo da poter valutare la bon- tà di t2. Prima richiamiamo un po' di terminologia: 1234.56 = 1.23456 * 1000 = 1.23456 * 10^3 -> 1234.5 troncamento notaz. scientifica 1234.6 arrotondamento 3=ord. di grandezza approssimazioni a 5 cifre o ai decimi Errore = deviazione di ValoreApprossimato da ValoreEsatto = = ValoreApprossimato - ValoreEsatto Precisione = maggiorante di |Errore| Es.: π = 3.14159... π' = 3.14 Errore = -0.00159... - Se non conosco il valore esatto di π ma so che 3.14 è un troncamento a 3 cifre, posso concludere che 3.14 ≤ π ≤ 3.15, cioè che -0.01 ≤ Errore ≤ 0; è una approssimazione per difetto con preci- sione 0.01 (1 centesimo). - Se so che 3.14 è un arrotondamento posso concludere che 3.135 ≤ π ≤ 3.145, cioè che -0.005 ≤ Errore ≤ 0.005; è una approssimazione con precisione di 0.005. Nota: π = 3.14 ± 0.005 è una abbreviazione di 3.14-0.005 ≤ π ≤ 3.14+0.005, cioè di |π-3.14| ≤ 0.005 ErroreRelativo = Errore / |ValoreApprossimato| PrecisioneRelativa = Precisione / |ValoreApprossimato| Se so che 4.17 è un arrotondamento a 3 cifre, la precisione relativa è: 0.005/4.17 = 1/2/417 = 1.19...*10^-3 = 0.119... centesimi = 0.12% Lo stesso otterrei per la precisione relativa di 417: la precisione relativa non dipende dall'ordine di grandezza ma solo dal numero delle cifre a cui si arrotonda. Qual è la precisione relativa di un numero arrotondato a 7 cifre? - se il numero è 1 000 000 la precisione (assoluta) è 0.5, quella relativa è: 0.5 / 1 000 000 = 5*10^-7. - se il numero è 9 999 999 la precisione relativa è 0.5/9999999 = (circa) 0.5 / 10 000 000 = 0.5*10^-7. - mediamente è circa 10^-7 (lo si può stimare a partire dalle valutazioni precedenti; se no si può osservare che l'integrale tra 1 000 000 e 10 000 000 di 0.5/x/9 000 000 è uguale a quello tra 1 e 10 di 0.5/x/0.9 diviso per 10 000 000, cioè, fatti i conti, a 1.28*10^-7). Più in generale un arrotondamento a N cifre comporta una precisione relativa di circa 10^-N (ma può variare da 0.5*10^-N a 5*10^-N). Nel caso del troncamento si possono fare considerazioni analoghe. La SOMMA di due numeri CONCORDI approssimati ha risultato con precisione maggiore (cioè peggiore) degli addendi (è la loro somma); ma anche il risultato ha valore assoluto maggiore, per cui la precisione relativa non peggiora in modo significativo: se i numeri erano arrotondati a N cifre anche il risultato è arrotondabile a N cifre (l`ultima cifra potrebbe dif- ferire al più di 1 dal valore corretto). Consideriamo il PRODOTTO di due numeri X e Y. Siano X' e Y' loro approssi- mazioni, EX e EY gli errori (assoluti) e RX (=EX/X') e RY (=EY/Y') gli erro- ri relativi. X = X' + EX = X' * (1+RX), Y = Y' + EY = Y' * (1+RY) X*Y = X'*Y'* (1 + RX + RY + RX*RY) = [circa] X'*Y'* (1 + RX + RY) cioè R(X*Y) = [circa] RX+RY infatti RX*RY è trascurabile rispetto a RX e RY (se RX=RY=1% RX*RY=0.01%). Su un esempio: se X=Y=101 e lo approssimo con 100, |ErroreRelativo| = 1%. Se approssimo X*Y= 101*101 = 10201 con 100*100 = 10000, |ErroreRelativo| è 201/10000 = 2.01% = [circa] 2% = 1%+1%. Quindi facendo un prodotto le precisioni relative si sommano, per cui per perdere una cifra significativa, cioè per passare dalla precisione relativa 10^-N alla precisione relativa 10^-(N+1), ci vogliono mediamente 9 moltipli- cazioni (cioè una moltiplicazione tra 10 termini). Anzi, se il computer ar- rotonda, ce ne vogliono di più, poiché gli errori di segno diverso si com- pensano parzialmente. E se faccio il RECIPROCO di X? 1/X = 1 / (X'*(1+RX)) = 1/X'* (1+?) dove ? = R(1/X) = ErroreRelativo di 1/X 1+? = 1/(1+RX) ? = - RX/(1+RX) = [circa] -RX (se RX << 1). L'errore relativo di 1/X è circa uguale in valore assoluto a quello di X, quindi come precisione di 1/X si può assumere quella di X. Su un esempio: se X=101 e lo approssimo con 100, |ErroreRelativo| = 1%. Se approssimo 1/X = 1/101 = 0.00990099... con 1/100 = 0.01, |ErroreRelativo| è circa 0.0001/0.01 = 1%. Dunque, facendo il reciproco non si perdono cifre significative. Le DIVI- SIONI sono moltiplicazioni per reciproci quindi, come nel caso del prodotto, avremo che ci vogliono almeno 9 divisioni per correre il rischio di perdere una cifra significativa. Per la RADICE QUADRATA possiamo pensare che è l'inverso dell'elevamento al quadrato: X*X ha circa la precisione relativa di X moltiplicata per 2. Se ne può dedurre che la radice ha circa la precisione relativa di X divisa per 2. Quindi anche il calcolo della radice quadrata non peggiora la preci- sione relativa, anzi. Queste valutazioni possono essere fatte anche ricorrendo al concetto di differenziale (del resto i conti che abbiamo fatto sono analoghi a quelli che si usano per individuare le derivate delle funzioni di base); vediamolo per il reciproco e per il prodotto: d(1/x) = -1/x^2*dx -> d(1/x)/(1/x) = - dx/x d(x*y) = y*dx + x*dy -> d(x*y)/(x*y) = dx/x + dy/y NOTA: (1) d(x^n)/x^N = N * dx/x (la precisione relativa è circa N volte quella di x) per cui, calcolando x^N, se N è molto grande si possono perde- re varie cifre significative. (2) Ci sarebbe da tener presente anche il fatto che x^y viene calcolato at- traverso uno sviluppo in serie con un algoritmo che, anche se x e y sono esatti, può dar luogo a risultati che non hanno tutte le cifre significati- ve; ma ciò accade solo se y è molto grande, quando, se x e y sono arroton- dati, si avrebbe comunque [ -> (1) ] una perdita di cifre significative. (3) Considerazioni analoghe si possono fare per le funzioni trigonometriche; es.: d(sin(x)) = dx * cos(x); se x è vicino a π d(sin(x))/sin(x), che è pari a dx/x * x * cos(x) / sin(x), è molto maggiore di dx/x. Ora possiamo valutare la precisione con cui viene calcolato t2. 1 Elevamento al quadrato e radice raddoppiano e poi di- ---------------- mezzano la precisione relativa, per cui non c'è peg- Rad2(x^2+1) + x gioramento. Poi viene effettuata una somma, che può dar luogo alla perdita di una frazione di cifra signi- ficativa (se x>0, quando gli addendi a denominatore hanno lo stesso segno). Il reciproco non peggiora la precisione significativamente. In definitiva al peggio possiamo perdere una cifra significativa. Concludendo, se il nostro programma arrotonda a 7 cifre, possiamo arroton- dare i risultati a 6 cifre e prendere questi come buoni arrotondamenti. Nel caso si usi la precisione doppia, per cui venivano visualizzate 16 ci- fre, possiamo prendere come buone 15 cifre. Ma ... ===== 1.4 ==================== [inizio scheda] ... come mai, tabulando t1 per input man mano maggiori, prima di arrivare a 0 abbiamo ottenuto valori strani, anche negativi, invece che valori con man mano una cifra in meno? Dopo la sottrazione non c'erano altre operazioni, come accadeva invece nel caso del calcolo con la CT (la differenza dava luogo a 0.1; era la presenza di "/3" che faceva comparire più cifre). Per capire meglio la cosa affronta il seguente esercizio. ** ES.5 ******* Esegui (da QBasic) i programmi NONASSO.BAS e DIFFER.BAS (sono in MC). Che cosa osservi? Prova a interpretare questo fenomeno. ******* END es.5 ** [commenti] Già queste prime attività offrono occasioni per alcune riflessioni didattiche. Ad esempio: - dagli esempi visti ti sembra che emergano spunti per come l'uso del computer possa interagire con l'insegnamento della matematica nel senso sia di facilitare lo studio di alcuni argomenti che in quello di motivare lo studio di alcuni argomenti? - le attività svolte sono state affrontate a "livello adulto"; ti sembra tuttavia che offrano più o meno direttamente suggerimenti per attività affrontabili in classe? (su quali temi? in quali anni?) Pensa a questi punti (oltre che all'es. 5) prima del prossimo incontro. ===== 1.5 ==================== [inizio scheda] ** Su Es.1 Per approfondimenti sul QBasic puoi vedere gli Oggetti Matematici. Qui sotto sono riprese le convenzioni per la descrizione della sintassi usate nell'help del QBasic: PAROLE CHIAVE Le voci in maiuscolo sono parole chiave di BASIC. segnaposto Le voci in minuscolo sono dei segnaposto, come nomefile$, o "metavariabile" ad es., per le informazioni che devono essere specificate con una istruzione. La sintassi di QBASIC utilizza come segnaposto dei suffissi per il tipo di dati, purché i segnaposto si riferiscano ad un tipo di dati specifico. [elemento facoltativo] Le voci all'interno di parentesi quadre sono facoltative {opzione1 | opzione2} Le parentesi graffe ed una barra verticale indicano la possibilità di scegliere tra una o più opzioni. elementi ripetuti... I puntini di sospensione dopo una voce indicano che la voce stessa può essere ripetuta più volte parola chiave d'inizio . Tre punti in colonna indicano istruzioni su più righe (o . istruzioni a blocchi). Ciò significa che possono essere . inserite altre istruzioni tra l'inizio e la fine del blocco. parola chiave di fine
** Su Es.2 - Il programma va modificato così: 'DEFDBL X-Y Calc: INPUT ; x y1 = SQR(x^2+1) - x: y2 = 1/(SQR(x^2+1)+x) PRINT TAB(25); y1; TAB(55); y2 GOTO Calc - Commenti sulle uscite sono presenti nei paragrafi successivi della scheda. - Togliendo l'apice davanti a DEFDBL per le variabili inizianti con x, y o z vengono impiegate piu' cifre. Si ottengono comunque, da un certo punto, uscite "strane" per t1: ? 12345678 4.050525603815913D-08 4.05000033210002D-08 ? 123456789 4.038156475871801D-09 4.050000036855001D-09 ? 1234567890 5.820766091346741D-10 4.050000036855D-10 ? 12345678901 2.793967723846436D-09 4.050000036526951D-11 ? 123456789012 -2.980232238769531D-08 4.05000003646134D-12 Dall'HELP del QBasic: DEFTipo: Imposta il tipo di dati predefinito per le variabili DEFINT IntervalloLettere [,IntervalloLettere]... DEFLNG IntervalloLettere [,IntervalloLettere]... DEFSNG IntervalloLettere [,IntervalloLettere]... DEFDBL IntervalloLettere [,IntervalloLettere]... DEFSTR IntervalloLettere [,IntervalloLettere]... IntervalloLettere Una lettera o un intervallo di lettere (A-M). QBASIC imposta il tipo di dati predefinito per le variabili, secondo lo schema seguente: DEFINT Intero DEFLNG Intero LONG DEFSNG Precisione semplice DEFDBL Doppia precisione DEFSTR Stringa L'indicazione del tipo di dati di una variabile mediante suffisso (%, &, !, # o $, rispettivamente) ha sempre la precedenza su un'istruzione DEF. Se non viene specificata un'istruzione di tipo DEF, e non viene usato un suffisso, il tipo di dati predefinito è la precisione semplice. Massimo Minimo ----------------------- --------------------- Lunghezza stringa 32,767 caratteri 0 caratteri Interi 32,767 -32,768 Intero LONG 2,147,483,647 -2,147,483,648 Numeri in prec. semplice: Positivi 3.402823E+38 2.802597E-45 Negativi -2.802597E-45 -3.402823E+38 Numeri in doppia prec.: Positivi 1.79769313486231D+308 4.940656458412465D-324 Negativi -4.940656458412465D-324 -1.79769313486231D+308 ** Su Es.3 Per approfondimenti su Grafun puoi vedere l'Help. ** Su Es.4 Per "mantissa" ed "esponente" puoi vedere gli Oggetti Matematici. Commenti al quesito sono presenti subito dopo il testo del quesito stesso. ** Su Es.5 NONASSO.BAS: PRINT " N"; TAB(12); "0.1^N + (1 - 1)"; TAB(42); "(0.1^N + 1) - 1" PRINT FOR N = 1 TO 21 PRINT N; TAB(10); .1 ^ N + (1 - 1); TAB(40); (.1 ^ N + 1) - 1 NEXT Uscite: N 0.1^N + (1 - 1) (0.1^N + 1) - 1 1 .1 .1 2 .01 .01 3 .001 .001 4 .0001 .0001 5 .00001 .00001 6 .000001 .000001 7 .0000001 .0000001 8 1E-08 1E-08 9 1E-09 1E-09 10 1E-10 1E-10 11 1E-11 1E-11 12 1E-12 1E-12 13 1E-13 9.999998E-14 14 1E-14 1.000003E-14 15 1E-15 9.999597E-16 16 1E-16 9.996344E-17 17 1E-17 9.97466E-18 18 1E-18 9.75782E-19 19 1E-19 1.084202E-19 20 1E-20 0 21 1E-21 0 DIFFER.BAS: PRINT "1024.35-1024.33 ="; 1024.35 - 1024.33 Uscite: 1024.35-1024.33 = 2.001953E-02 L'es. 5 è discusso nella Scheda 2. [inizio scheda] [schede: 1 2 3 4 5 6 7 8] [indice schede]