Sei sulla pagina 1di 169
Carlo Sintini e Costantino Mustacchio Ascuola con il Commodore 64 I piacere del computer 1 Tom Rugg e Phil Feldman 32 programmi con il PET 2. Rich Didday Intervista sul personal computer, hardware 3 Tom Rugg e Phil Feldman 32 programmi con I’Apple 4 Ken Knecht Microsoft Basic Paul M. Chirlian Pascal 6 Tom Rugg e Phil Feldman 32 programmi con il TRS-80 7 Rich Didday Intervista sul personal computer, software 8 Herbert D. Peckham Imparate il Basic con il PET/CBM 9 Karl Townsend e Merl Miller I personal computer come profession 10 Karen Billings e David Moursund Te ne intendi di computer? 1 Thomas Dwyer e Margot Critchfield It B uno: introduzione 12 Don Inman e Kurt Inman Imparate il linguagsio dell’Apple 13. Thomas Dwyer e Margot Critchfield Il Basic ¢ il personal computer, due: applicazioni 14 Luigi Pierro II manuale del CP/M 15 Carlo Sintini A scuola con il PET/CBM 16 David Johnson-Davies Il manuale dell’ Atom 17 David E. Schuliz M1 libro det Commodore VIC 20 18 Jim Huffman e Robert Bruce 11 “debug’ nei personal computer 19 John M. Nevison Programmazione in Basic per I'uomo d’affari 20. Mark Harrison Imparate il Basic con lo ZX81 21 Ronald W. Anderson Dal Basic al Pascal 22. Herbert D. Peckham Imparate il Basic con il Texas TI 99/44 23. Sergio Borsani A scuola con il Texas TI 99/48 24 Jerry Willis e Deborrah Willis Come usare il Commodore 64 25 Mark Harrison Imparate il Basic con lo Spectrum 26 Carlo Sintini e Costantino Mustacchio A scuola con il Commodore 64 27. David A. Lien Imparate il Basic con IBM PC 28 Ken Tracton introduzione al Lisp 29. Fabio Mavaracchio Programmi in Basic per I'elettronica personal computer, Indice generale 7 La grafiea a bassa risoluzione Tracciamento assi cartesiani Numeri frazionari Tracciamento di una retta Rettenel pianocartesiano Intersezioni fra rette Parabo- ae retta 26 La grafica ad alta risoluzione 32 Matematica elementare Sistemi di numerazione Area e perimetro dei poligoni 50 Ancora matematica Soluzione delle equazioni algebriche Disposizioni e permutazioni Calcolo delle probabilita Matematica per i pili esperti Calcolo con le matrici Coniche generiche 81 Fisica Unité di misura Teoria degli errori Cinematic BalisticaRelati- vita 115 Miscellanea Frasiinutili Eliza Fratrie 130 Analisi matematica Integrali definiti Integrali doppi Integral tripli_ Calcolo delle aree on il metodo di Montecarlo 145 Ancora fisica Analisi di Fourier Resistenze e capacita Polinomio approssimante 156 Per finire CAPITOLO PRIMO La grafica a bassa risoluzione Lo schermo del Commodore 64 & costituito da 1000 quadratini o caselle, disposti a formare un rettangolo con 25 righe e 40 colonne. In ciascuno di essi pud essere sistemato uno dei caratteri della tastiera (ettere, numeri o simboli grafici), ed ogni casella corrisponde ad un in- dirizzo di memoria secondo lo schema indicato nella figura 1. La numerazione comincia con la casella nell'angolo superiore sinistro (1024) termina con ta casella dell’angolo inferiore destro (2023). Ogni volta che termina una riga, la numerazione procede con la prima casella della riga successiva. Si noti che le caselle appartenenti ad una stessa colonna differiscono fra loro di 40 unita in piti o in meno, a se- conda che si percorra la colonna in verso discendente o ascendente. | caratteri della tastiera, a loro volta, corrispondono ciascuno ad un nu- mero compreso fra 0 ¢ 255, secondo il codice indicato nella figura 2. 1 numeri 32 € 96 cortispondono a uno spazio vuoto. Aggiungendo 128 ai numeri suddetti, si hanno in corrispondenza gli stes- si caratteri stampati in REVERSE. ‘A questo punto siamo in grado di far comparire sullo schermo un carat- tere qualsiasi su una casella a piacere, per mezzo del comando POKE A.B dove A ¢ B indicano rispettivamente l'inditizzo corrispondente alla casel- la e il codice corrispondente al carattere. LA GRAFICA A BASSA RISOLUZIONE. +79 s10pouNOD jap ouNOUDS “y e”nBiy ‘GE BE LE OF SE PE CE Ze LE OF OF AC LZ 9Z SE HE EL ZZ IZ OF OI 81 LI 9T ST PT ELT O16 eL9SPETIO IA GRAFICA A BASSA RISOLUZIONE o=8 1-A 0 2=B 8H 921 1880 16=P 18=R 245% 2652 24=" 424 58-2 11524 1161 12351 1245" Figura 2 Per esempio il comando POKE 1024,83 fara comparire il cuoricino nell'angolo superiore sinistro dello schermo, mentre POKE 1025,211 fara comparire il cuoricino in reverse (83 +128 = 211) nella casella im- mediatamente successiva. Questo metodo per stampare i caratteri sul vi- deo puo all’inizio sembrare macchinoso, ma é estremamente utile per realizeare programmi che prevedano il tracciamento di grafi In un’altra regione della memoria esistono altri indirizzi che immagazzi- nano il colore con cui deve essere visualizzato il carattere in ciascun qua- dratino dello schermo. ‘Questi indirizzi vanno dal $5296 al 56295 e sono ripartiti in 25 righe e 40 colonne con lo stesso criterio visto per i caratteri I colori possono essere scelti con il comando POKE nc dove n @ il numero corrispondente al quadratino cui ci si vuole riferire, ¢ © uno dei 16 colori disponibili nel Commodore 64, con il criterio seguen- te: LA GRAFICA A BASSA RISOLUZIONE nero 8 = arancio bianco 9 = marrone 0380 10 = rosa ciano 11 = grigio 1 viola 12 = grigio 2 verde 13 = verde chiaro blu 14 = celeste siallo 16 = grigio 3 Quindi per ogni casclla dello schermo esistono due indirizzi di memoria: uno (1024-2023) per stabilire quale carattere deve apparire, ed un altro (65296-56295) per stabilirne il colore. Per esempio, con il comando POKE 55296,2 il cuoricino nell'angolo superiore sinistro dello schermo diverra rosso, mentre con il comando POKE 55297,5 lo sfondo del cuoricino in reverse diventera verde. Talvolta per brevita si pud omettere la POKE del colore (ed & cid che fa- remo nel presente capitolo): il carattere apparira celeste su fondo blu. Pud avvenire, se per esempio si é cambiato il colore dello sfondo, che il carattere non sia visibile perché del suo stesso colore: in tal caso é suffi- ciente posizionarsi con il cursore sul carattere per rendersi conto se sia effettivamente nel posto giusto. I colori dello sfondo ¢ della cornice possono essere modificati a piacere POKE 53280,¢ per la cornice POKE 53281,c per lo sfondo dove ¢ é uno dei sedici colori visti precedentemente. Proseguiamo ora il discorso della grafica con le POKE tralasciando le POKE del colore (65296-56295) e occupiamoci soltanto di quelle dei ca- ratteri (1024-2023), Prendiamo in considerazione una casella qualsiasi, per esempio la 1523 che si trova all'incirca in mezzo allo schermo, ¢ battiamo sul C-64 il ci- clo seguente 10 FOR K = 0 TO 39 20 POKE 1823+K,42 30 NEXT K LA GRAFICA A BASSA RISOLUZIONE Figura 3 Sul video compariranno, a partire dalla casella 1523, quaranta asterischi allineati che procedono verso destra. Alla fine della riga la serie di asterischi si interrompe ¢ riprende all’inizio della riga successiva (figura 3). Sostituendo la linea 20 con 20 POKE 1823-K,42 si ottiene una serie di asterischi che partono dalla stessa casella, ma pro- cedono in verso contrario (figura 4). Proviamo ora a battere il ciclo 10 FOR K = 0 TO 12 20 POKE 1523 + 40°K,42 30 NEXT K Ogni volta che K viene incrementato di una unita, V'indirizzo aumenta di 40 e quindi gli asterischi procederanno verso il basso lungo la stessa co- Jonna (figura 5). Contrariamente @ quanto aveniva per gli spostamenti orizzontali, se K aumentasse oltre il valore 12 gli asterischi non continuerebbero a scorre- re lungo la colonna adiacente. u 12 LA GRAFICA A BASSA RISOLUZIONE TEE lasella 1484 finale T easella 1523 inizio Figura 4 casella 1523 @'inizio Figura 5 LA GRAFICA A BASSA RISOLUZIONE 2B easella 1523 CTinizio_ Figura 6 Per I'uso che faremo delle “poke grafiche dovremo quindi fare atten- Zione @ non superare gli indirizzi che compaiono nella figura 1 Infine, con il ciclo 10 FOR K = 0 TO 12, 20 POKE 1523-40"K 30 NEXT K si avr una colonna di asterischi che procede verso l'alto lungo una stes- sa colonna. TRACCIAMENTO ASI CARTESIAN! Come semplice applicazione iniziale proviamo a battere il programmino seguente. 10000 REM LISTATO 1 10010 REM TRACCIAMENTO ASSI CARTESTANT 19020 POKES3201,9 10022 POKES3290,19 10024 PRINT "aR NUMERI FRAZIONARI LA GRAFICA A BASSA RISOLUZIONE 10030 FoRK=aT0339 10040 POKELaZdeK- 46 19050 NEXT K 1ovsa FORK=Bro24 10078 POKELO4S+408K 115 10050 NExTK. 10030 FoRK=0TO39 10100 POKEISO4¢K 114 10110 NEXTK. 10120 FOKEIS23-91 10130 PoKE1oai ;25 s0140 PokE1623;24 10150 GoTo1e150 Dopo Ia sistemazione dei colori dello schermo, nelle linee 10030-10050 vengono fatti stampare mille punti consecutivi che riempiono tutto il vi- dco ¢ che costituiscono una specie di “‘quadrettamento” dello schermo. Le linee 10060 ¢ 10110 tracciano i due assi coordinati, mentre le line 10120-10140 stampano rispettivamente l’incrocio dei due assi, ¢ i nomi Y ¢ X di ciascun asse. La linea 10180 € un artificio che impedisce al C-64 di stampare il REA- DY alla fine del programma, finché non viene premuto il tasto STOP. Sospendiamo un attimo il discorso sulle poke grafiche ed elaboriamo una piccola routine che ci permetta di trasformare un numero razionale sotto forma di frazione con numeratore e denominatore interi. Per esempio i servira in seguito per alcuni programmi, ed é utile dal punto di vista didattico perché gli studenti sono abituati a mettere i risultati algebrici appunto sotto questa forma. Battete il seguente listato 10 REM LisTATO 2 2 REM TRASFORMAZIONE IN FRAZTONE 30 POKESS201,3 40 POKESS200/10 59 PRINT Ga" 82 INPUT*EBRTT UN NUMERO OECIMALE” 26 70 GOsuBDOa00 88 PRINT"MCORRISPONDE A “N"/"D 98 coToEe 20006 REM SUBROUTINE DI TRASFORIMAZTONE 29818 KB LA GRAFICA A BASSA RISOLUZIONE 20020 Kak 20030 T=N¥K :TFT-INTCT><. OB01 THENCOO7E 20049 IFK=1G0THENPRINT"ALN MOMENTO..." 20058 IFK>300THEND=1 :RETURN 2e06@ coTo2aE20 2OG76 NeNeK :D-K sRETURN Le linee fino alla 60 non hanno bisogno di particolari commenti. La su- broutine 20000 esegue Ia trasformazione richiesta. Dopo aver azzerato la variabile K, in 20020 & posto un contatore K = K+1, che ad ogni passaggio aumenta di una unita. Viene anche istituita la nuova variabile T moltiplicando N per K. ‘A questo punto viene presa in esame la differenza tra T ¢ la sua parte imera. Se per esempio K = 3ed N = 3.2allora T = 9.6 ¢ la parte intera di Té uuguale a 9: la differenza é .6 ¢ il programma salta la condizione posta nella linea 20030. Alla linea 20060 si ha un ritorno indietro fino a quando T ¢ INT(T) risul- tano uguali: in questo caso K @ il multiplo che rende intero N e si ha uscita alla linea 20070 dove N ¢ D assumono il significato di numerato- re e denominatore della frazione finale. Invece della condizione IF T-INTIT) = 0 THEN & necessario usare la condizione IF T-INT(T) >.00001 THEN perché i calcolatori talvolta presentano piccole imprecisioni sulle ultime cifre decimali La linea 20050 é un‘uscita necessaria per interrompere il loop quando K supera 300 (valore fissato ad arbitrio). La linea 20040 ha I'unico scopo di avvertire 'operatore che il calcolatore sta ricereando la frazione, Nel caso in cui si voglia utilizzare questa subroutine in programmi pitt complessi, dove i! numero decimale in entrata @ il risultato di un calcolo, © quindi pud contenere diverse cifre decimali, 0 essere addirittura irra- tionale, pud essere utile limitare il numero di cifre decimali prima dell’uscita alla linea 20050 modificando la stessa nel modo seguente: 20050 IF K>300 THEN N=INT(N*100+.5)/100:D = 1:RETURN 1s 16 LA GRAFICA A BASSA RISOLUZIONE TRACCIAMENTO D1 UNA RETTA Riprendiamo ora la parte grafica ed occupiamoci di una subroutine che tracci sullo schermo una retta la cui equazione sia nella forma ysmerg La posizione degli assi coordinati sara owiamente quella fissata nella prima routine. | coefficienti m e q rappresentano rispettivamente il coef- ficiente angolare della retta e il termine noto, 10 REN LrstaTo 3 20 FEN TRACCIFMENTO RETTA 38 POKESS2¢1-3 40 POKES3220,10 Se PRINT" 6 INPUT"APOEFFICIENTE ANGOLARE™ 2H ‘0 INPUT" ATERMINE NOTO" 70 Se PRINT" GOSUEsB0ee 96. INPUT" BRHICORR" FRE 100 IFLEFT#120RVC-12THEN3AASO 20040 POKEIS449KVedO,42 30050 NEWTK 20060 RETURN In 60 70 vengono introdotti nel Commodore 64 i valori dim e q, ¢ le Tinee 80 © 90 non hanno bisogno di ulteriori spiegazioni. Si noti che la 100 permette di accettare sia la risposta SI per esteso che semplicemente Ja S (perché viene considerata solo la prima lettera). In 30010 viene istituito un ciclo FOR NEXT con K che varia da 0 a 39, € viene introdotta una nuova variabile X che varia da -19 a +20, e tali valori rappresentano le ascisse dei punti che compariranno sullo scher- mo. In 30020 viene ogni volta (per ciascun valore di K e quindi di X) caleola- ta la corrispondente ordinata. Essa pud essere positiva 0 negativa, e si noti che viene trasformata in valore numerico intero. Quando tale ordinata ¢ maggiore di 12 0 minore di 12, non potendo essere rappresentata sullo schermo (vedi listati rela tivi alle figure 5 e 6), la Tinea 30030 impone un salto che evita la stampa del punto della retta. La linea 30040 stampa un asterisco in corrispondenza del punto della retta, LA GRAFICA A BASSA RISOLUZIONE "7 Liindirizzo di memoria iniziale (1544) corrisponde al primo punto a sini- stra dell’asse delle ascisse. Ad ogni scatto unitario di K viene presa in considerazione la casella delle ascisse immediatamente successiva, ¢ al valore cosi ottenuto viene colta la quamtita (Y*40) se la Y & positiva (in- fatti se l'ordinata é positiva I'asterisco si deve spostare verso V'alto in di- rezione verticale). Invece viene aggiunta la quantita (Y*40) se la Y é ne- gativa (e Vasterisco si sposta in verticale verso il basso), Quando K hha raggiunto il suo valore massimo si ha il RETURN. Si noti che il programma non permette di tracciare rette verticali perché ‘m non pud assumere valore infinito, mentre non ¢’é alcun impedimento a tracciare rette orizzontali ponendo m = 0. RETTE NEL PIANO CARTESIANO. Applichiamo le semplici routine precedenti al primo programma comple- to del volume. Per questo e per i successivi si tenga presente che talvolta sarebbe possi- bile ottenere gli stessi risultati con variazioni al listato che permettereb- bero un certo risparmio di memoria o una esecuzione pid rapida, ma ho preferito quasi sempre adottare procedimenti che risultassero maggior- mente chiari per il lettore alle prime armi 100 118 120 138 140 152 162 170 18@ 198 200 216 2268 230 240 REM COPYRIGHT IN BRSIC REN VIR SEZZE 22 LATINA REM TEL 487631 CLR: POKES3280, 10: POKES3261 , 3: PRINT" PRINTTAB(?>"SRETTE NEL PIANG CARTESTAN PRINT" QUESTO PROGRAMMA. TI PERMETTE D: PRINT"OTTENERE “L“EQUAZIONE DI UNA RETTAY PRINT"CONOSCENDO LE COORDINATE DI TUE SUOT PRINTPUNTILED INFINE TI MOSTRERA’ IL GRAFICO PRINT"DELLA RETA." PRINTTAB(11)" MM PREME UN TRSTOD" GETRS: IFRS=""THENZIO PRINT*COCOORDINATE PRIMO PUNTO WEF K2 INPUT" =" 2 IEXS=x2ANDY1=¥2THEN220 IFXS ORQTHENS20 PRINT"LA RETTA E” VERTICALE™ eoToseae TF¥3Ov2THENSSO PRINT*LA RETTR E’ ORIZZONTALE™ soToseae, D=SOR(C2-K1) 12+(¥2-¥1) 92) Nal GosuBzee88 PRINT"MMLA DISTANZA FRA I DUE PUNTI E’ :* PRINTTAB(1@)"Ma"H"2"D 18 LA GRAFICA A BASSA RISOLUZIONE 390 REM CALCOLO DELL “EQUAZIONE 482 M=cyo-9192CK2-R1) |= Y1- CHL 418 M=INTCH¥100+.5)/16G: Q=INT (o#100+,5)/100 422 PRINT" ML“EQUAZIONE DELLA RETTA E” :" 432 IFSGN(G)<@THEN4SO 442 PRINTTAB(S) "MY X + "o:G0TO469 452 PRINTTABCS) "MW ="N" X "G 460 INPUT" @IVUOT IL_GRAFICO" IRS 470_IFLEFTS(RS, 1)="S"THENGOSUB1 0000: OOSUESO0EG 3220 REM RICHIESTA DI PROSEGUIMENTO 3210 INPUT"WMMVUOT CONT INUARE "RS 5220 IFLEFTS(RS, 1)="S"THENRUN 5220 PRINT'MDK CIAO 1 /"sEND 10000 REN TRACCIANENTO ASSI CARTESTANI 10016 PRINT"=" FORK=0T0993 10920 POKE19244K, 46:NEXTK 10930 FORK=2T024 10846 POKE1043+40MK, 115 10050 NEXTK 10866 FORK=27029 10976 POKEISE4sK, 114 10086 NEXTK’ 10896 POKE1523, 91 10100 POKEL@41,25 1@110 POKELEz3, 24 10120 RETURN. 200 REM TRASF. IN FRAZIONE 22018 K=o 22020 KeK+1 20838 T=NAK : IFT-INT(T)<. 00001 THENZ0978 2ee48 IFK=1Q0THENPRINT"MUN MOMENTO. 22058 IFK>30QTHEND=| 'N=INTCN#100+. 537100: RETURN 22860 coToza020 22870 NeNWK: DK: RETURN 32200 REM TRACCIANENTO RETTA 32019 FORK=2T039 32028 X=k-19 30038 Y=nax+a: Y=INT CY) 32249 IF ¥>120R¥<-12THEN3@260 32050 POKE1S44+K-Yaae. 42 30060 NEXTK 32070 FORK=1T05@@8: NEXTK 32080 RETURN Fino alla linea 270 non occorrono molte spiegazioni: un CLR azzera tut- te le variabili, viene cancellato il video, appare il titolo del programma e un breve commento esplicativo, In 200 il programma si ferma in attesa che venga premuto un tasto, € poi devono essere battute sulla tasticra le coordinate di due punti della retta. In 280, 300, 330 vengono selezionati i casi in cui la retta é indetermina- ta, orizzontale o verticale e, quando una delle tre situazioni si verifica, si ha un salto alla parte finale del programma (senza esecuzione del graf co). In realta il grafico della retta orizzontale potrebbe essere eseguito senza difficolta e, con una semplice modifica, si potrebbe tracciare anche la LA GRAFICA A BASSA RISOLUZIONE 19 retta verticale, ma ho preferito considerate banali questi due casi ¢ ren- co solo quando la retta non é parallela agli assi In 350 viene caleolata la distanza fra i due punti che individuano la ret- ta; tale distanza (D) viene posta uguale ad N e inviata alla subroutine 20000 che la trasforma in frazione decimale (se il denominatore ¢ minore di 300, altrimenti restituisce il numero con la virgola, ¢ due cifte decima- li). Le linee 370 ¢ 380 stampano il risultato della distanza. Successivamente si passa al calcolo dei coefficienti m e g dell'equazione della retta in forma esplicita (linea 400). Si noti che nel calcolo di m sarebbe necessario prevedere ed impedire che il denominatore x,-x,, possa assumere il valore zero, altrimenti il pro- gramma si fermerebbe segnalando un errore a causa della divisione per zer0. Avendo perd gia eliminata la trattazione delle rette verticali (linea 300), tale precauzione é inutile. In 410 i valori di m e q vengono limitati a due cifre decimali. In 440 0 450 viene stampata lequazione della retta in forma esplicita a seconda del segno del termine noto, verificato nella linea 430. Dalla linea 5000 in poi c’é la richiesta di proseguimento. Le subroutine 10000, 20000, 30000, sono quelle gid viste per il traccia- mento degli assi cartesiani, per la trasformazione di un numero decimale in frazione, e per il tracciamento della retta. Nella linea 30070 ¢ stato inserito un ciclo di ritardo sufficientemente lun- 0 per dare il tempo all'operatore di osservare la retta prima della ri- chiesta di. proseguimento, INTERSEZIONI FRA RETTE E un arricchimento del precedente ed offre la possibilita di trattare tracciare contemporancamente due rette, dopo aver calcolato il loro punto di intersezione. 1@ REM COPYRIGHT IN Es: 45 REM VIR SEZZE 22 CATING 18 REM TEL, 487631 20 PRINT #28" 25 POKESS200, 10:PoKESS2e1, 3 32 PRINTTABCS) "MROFATNTERSEZIONI FRA RETTER" 48 PRINT"MOQUESTO PROGRAMA TI PERMETTE DI OTTENERE* 32 PRINT'LE EQUAZIONI DI DUE RETTE , DI CHLCOLARE 6@ PRINTVLE COORDINATE MEL LORO PUNTO DI~INTE 28 PRINT'SEZIONE | ED INFINE TI MOSTRERA’ TL" 89 PRINTGRAFICO DELLE QUE RETTE. 98 PRINTTABCL2) "MMMPREME UN TRSTOD LA GRAFICA A BASSA RISOLUZIONE 109 GETAS: IFRS=""THENLEE 419 CLR 120 PRIN 190 PRINT*No' SMP RET 140 PRINT" MDAMME LE COORDINATE DEL PRING PUNTO" 190 INPUT@KI=" 41D 460 INPUT" E=" 1D) 470 PRINT'ME QUELLE DEL SECONDO PUNTO: 180 INPU RAD 190 INPUT*YZ="/¥ZCd) 200 NEXTS 218 PRINT"DDK ~ UN ATTIMO DI PRQIENZA! 220 FORJ=1T02 RETTR E’ VERTICALE" RETTH E~ ORIZZONTALE™ 250 REM-CALCOLO DELLE ME EO IFFVCID=OTHENM( J>=C¥2(J9=¥1 39) /CXQCF-RI CD? THENDCIY=¥1CF)—cHCI9@KICI)) 280 NEXT) 250 REM-VERIFICA DI PARALLELTSND O PERPENDICOLARITA‘ 25 TFFVC1 )=10RFOC1)=10RF(3)=10RFOC2)=1 THENIBBD S380 TFMCi)=MC2) THENPRINT' MLE RETTE SONO PARALLELE FRA LORO" ‘5070390 BLO TMC )=-1/M(2)THENPRINT!MLE RETTE SOND PERPENDICOLARI FRA LORD" 320 REN-CALCOLO DELL” INTERSEZIONE 33 XXECOCZI“ACLI I7CMCLI=MCZ)) 340 Y=hcL vexxenc1) 392 NEXXGOSUEZO000: XNEN:xD=D 380 Nev. a ep 370 PRINT*MLE RETTE SI INCONTRANG IN* 286 PRINTTAB(S)"ARP=("XN"2"XD"; "WN#/ YD") 390 REN-CALCOLO DELLE EOURZIONI DNC TD=D i eID 440 PRINT*ML“EQURZIONE DELLA RETTA Ev: 456 PS=M" IFSGHCGCI) )=+10R9¢ 19 =OTHENPS="+ 468 PRINTTABCZ) "my=" HMC)" "DMC S9"R"PENC TD "2D? 420 NEXTJ) 480 INPUT"MVUOI IL GRAFICO" RS 490 IFLEFTS Fai GoSUBSee00 520 INPUT MVUO] PROYARE ANCORA™ RE 590 IFLEFTSCRS, 1)="S"THENI 12 ‘543 PRINT"SDK - CIAO!" 559 END 1090 REM-USCITA SE UNA RETTA E’ PARALLELA AD UN ASSE $010 PRINT" MBANALE! UNA RETTA E’ FRRALLELA AD UNO" 1829 PRINT"DEGLI ASSi COORDINATI. " 1030 PRINTPER FAVORE IMPEGNEMI CON GURLCOSA DI” 4040 PRINT"PIU’ SERIO! !"-LoTos20 10000 REM-TRACCIAMENTO ASST. CARTESIANI 18016 PORE 18244K, 4S NEXTIC 10020 FORK=AT024: FOKE1e42e4aek, 115-NEXTC 10030 FORK=OTO39: POKELS@4+k, 114 -HEXTK 10040 POKEIS23, 91 :POKELO41, 25 POKELE23, 24 10850 RETURN 20000 REN-TRASFORMAZIONE IN FRAZIONE 20010 k=o 20028 K=K+1 T=N¥K: IFT-INT(T)<, 09001 THEN20960 LA GRAFICA A BASSA RISOLUZIONE 2eeda IFK<1BOTHENZoEZE 22050 20 30000 REM-TRA 30018 FORK =aT! 30020 Y=INTCHAAD, 30030 1F¥>1208¥<~12THENZa050 30040 POE 1S4d4Kk-¥edn, 42 30050 NEXT 30055 [FF=0THEN3@030 30060 GETRS: 1 "THEN22060 30078 PRINT" 3880 RETURN Fino alla linea 100 ¢’@ il solito preamboto esplicativo ¢ in 110 un CLR che azzera tutte le variabili Da 120 a 200 viene istituito un ciclo FOR NEXT per introdurre le coordi- nate di due punti per ciascuna delle due rette (la variabile & J per evitare confusioni con i cieli FOR NEXT delle subroutine che utilizzano la varia- bile K). Nella subroutine 20000, poiché dovra essere utilizzata diverse volte, & stato ridotto da 300 a 100 (linea 20040) il valore massimo oltre il quale il Commodore 64 rinuncia alla trasformazione in frazione. Cosi i tempi di esecuzione sono pit brevi, ed & possibile eliminare Pav- vertimento intermedio UN MOMENTO. che verrebbe ripetuto quasi ogni volta che venisse utilizzata la subroutine in questione. In compenso @ stata introdotta la linea 210, Da 225 2 240 vengono isti- titi due flag’ per ciascuna delle due rette per riconoscere quando esse sono parallele agli assi coordinati. Nelle linee 250, 260, 270 vengono calcolati i valori di m (se la retta in questione non é verticale) € di a. ‘Quindi, in 280 si chiude il ciclo iniziato in 220, Nella 290 inizia la verifi- a di parallelismo 0 perpendicolarita. Se una delle rette é orizzontale o verticale si ha un salto alla linea 1000 dove, dopo un breve commento, si torna alla 520 per la richiesta di un nuovo problema. Nella 300 viene verificato il parallelismo e, in caso affermativo, viene saltato il ealcolo del punto di intersezione, In 310 infine viene verificata (0 meno) la perpendicolarita, "Un fag ¢ una varibileusata come “segnale": in sorrispondenza di due (0 pid) stuazioni, I suo valore viene posto per esempio uguale a 00 ad 1. Nel seguto del programma, ase onda del valore del flag's! avea' © meno un salto condizionato 21 2 LA GRAFICA A BASSA RISOLUZIONE Infine in 320 inizia il calcolo delle coordinate del punto di intersezione. Dopo averle individuate, esse vengono trasformate in frazione (se possi- bile), © si ha la stampa del risultato. In 390 inizia il calcolo delle equazioni (uguale a quello del programma precedente), inserito in un ciclo FOR NEXT che termina alla linea 470. Finalmente si arriva al grafico che viene eseguito col solito procedimen- to. Si noti alla fine della subroutine 30000 Ia piccola modifica finale: nella linea 500 si ricorre alla subroutine 30000 © poiché la variabile F non & ‘mai stata finora usata, essa ha valore zero. Quando il Commodore 64 arriva alla linea 30056 (cioé dopo aver tracciato la prima retta) é costret- to a saltare le linee 30060 ¢ 30070 rispettivamente di attesa e di cancella- ione dello schermo. Si ha percid un RETURN ed un passaggio alla linea 510. Qui la variabile F (che € dunque un flag) viene posta uguale ad 1, € percid quando il Commodore 64 ha tracciato la seconda retta la linea 30055 viene ignorata ed esso rimarra in attesa che 'operatore prema un tasto, dopo di che cancellera lo schermo ¢ proporra la continuazione 0 meno det programma. PARABOLA E RETTA REM COPYRIGHT IN BRSIC REM VIR SEZ2E 22 LATINA REM TEL. 4a76ai CLR: PRINT" POKES3282, 10: POKESS281,3 ESSS296: TV=1004 PRINTTRE(1@) "SNIPARABOLA E RETA" PRINT"MM JUESTO PROGRAMA CRLCOLA IL VERTICE DI" PRINT"UNA PARABOLA DEL TIPO: PRINTTRB(15) "M2" PRINTTABCLL)"¥=AX_ +BX4C' PRINT"MLE SUE INTERSEZIONI CON GLI ASI. E LE" PRINT"EVENTURLI INTERSEZIONI CON UNA RETR’ PRINT®NELLR FORMA PRINTTRECI2)"mV=HA+0 PRINT"INFINE ESEGUIRA’ IL GRAFICO SIA DELLA" PRINT"PRRAEOLA CHE DELLA RETTA, GOSUESBEO PRINT"SDANNT IL VALORE DEI COEFFICIENTI DELLA" PRINT"PRRABOLA:” INPUT" MRS" 8 IFRSOTHENPRINT"XPARREOLA DEGENERE! NON FARE LO SC1OCCO!*:G0T0170 INPUT" B=" |B INPUT@ p=" 5 PRINT"MINE OUELLI DELLA RETTA:" INPUT" i=" jf INPUT MR=" iQ PRINT"SDK ~ UN ATTIMO DI PAZIENZA!" REM CRLCOLO VERTICE LA GRAFICA A BASSA RISOLUZIONE 250 VK=~B/(24RD :V¥==(CBNB)=C4MRWC) 1/C4#R? 266 NeVx: GOSURZ@000: VI=N:Y2=D 270 Nev¥ GOSUEZORBB: ¥ 280 PRINT" NIL VERTICE DELLA PARREOLA HA COORDINATE" 230 PRINTTABCE)"aV=C"WI"Z*V2", NY3"7"Ya" 300 REM CALCOLO INTERSEZIONI ASST 319 DsE+2-(4anec) 20 IFDCOTHENPRINT"NNON TAGLIA L’RSSE x": GOTO37@ 33 Ki=(~B-SOR(D) )/ (24H) | M2=(~B+SORCD)9/ (HAD TERS =MOTHENPRINT"NE’ TANG.ALL’ASSE X IN X="43"/"X4:GOTOG7A 50 PRINT" NTAGLIF L“ASSE x NEL PUNTI" 360 PRINT" MCS" "4" 8) "SPLCS)" CNS" XE)" 378 PRINT" NTAGLIA L“ASSE Y NEL PUNTO 38 PRINTTAB(16)"MCQ;"C")" 390 GOSUBSEER 420 PRINT*SRNCORR UN PO’ DI PRZIENZA!" 405 REM-RICERCR INTERSEZIONI PAR. -RETTA 410 DD=(B=M) 12-40n(C-0) 420 IFDDCOTHENPRINT"HRETTA PARABOLA NON SI. INCONTRAND" :GOTOSZE 430, IFDD=OTHENGOSUR6929 GOTOS26 SORDID) “N= / (WR) :N=T%: GOSURZA009T1=N:T2=D) 6230 TY=H#TX+0 NETY | GOSUEZBABO: TZ=N: T4=D 6040 PRINTTRBC LO)" MT=C°TL "712" "137" TS" 9" 250 RETURN 10800. REN-TRACCIAM. UADRO 40010 FRINT"= FORK=070993: POKEBE+K, 5: POKETV4K, 46:NEXTK 19820 FORK=BT02¢ POKERE+ 19¢40MK,2: POKETY+19¢408K, 115: NEXTK 10035 FORK=BT03S' POKEBE*4a0¢k 2: POKETV+4800K, 114: NEXTK 10640 FOKEBR+439,2'POKETV*435,31 /POKEBE+17,9 ‘POKETY#1? 25 10b45 FOKEBE+SSS, 0: POKETV+339, 24 10058 RETURN 20000 REN-TRASFORMAZIONE IN FRAZIONE 20016 K=9 2BO20 K=K+L T=NWK: JFT-INT(T)<. 0801 THENZ0068 20840 IFKCSOTHENZ2029 20050 D=1 “NeINTCN#IO9+.5)/ 188: RETURN 20060 NSNWK:D=K: RETURN, 30000 REM-TRACCIAN. RETTA 30018 FORK=OT033:H2K-19, I2=D LA GRARICA A BASSA RISOLUZIONE 30826 Y=INT«ten+0> 50036 IF¥>120Rv<~12THENSe=S0 30835 POKEBE+490+K~ 4o0a0 TFy>1z0R¥<=1ZTHENSeRS 40a25 POKEBE+sa0eK~<¥a40).6, 4004 POKETV+4306K~<¥edO 42 40056 NEXT 40060 RETURN Fino alla linea 230 viene deseritto cosa fa il programma, ¢ sono richiesti i coefficienti a, & € c di una parabola del tipo y= ar tbxte © i coefficienti m eq di una retta nella forma yemetg In 175 viene eliminato il caso in cui a = 0 (che causerebbe in seguito luna divisione per zero), con la richiesta di un nuovo valore. Si ha poi il calcolo del vertice della parabola, e le coordinate VX e VY vengono rese frazionarie (per mezzo della solita subroutine 20000) ¢ trasformate in Mt v2 In 310 viene calcolato il discriminante D det secondo membro dell’equa- zione della parabola. Poi, se D & negativo (¢ quindi la parabola non ta- alia Masse 2), sifha un salto in 370 dove si passa al caleolo dell'interse- zione con l’asse y. In 380 si determinano le ascisse X1 ¢ X2 dei due punti di intersezione della parabola con I'asse x, ¢ nelle due linee successive esse vengono ti spettivamente trasformate nella forma frazionaria X3/X4 e X5/X6. In 340, se X1 = X2 (e quindi la parabola é tangente all'asse 2), si ha di nuovo un salto in 370. "Nelle linee 360 e 360 viene dato l'ordine di stampare le coordinate dei ddue punti distinti di intersezione con I'asse x. In 370 ¢ 380 si ha la stampa delle coordinate del punto di intersezione della parabola con I'asse y.! Esso ha coordinate (Oc, € non Ko ritenuto necesario trasfarmae ¢ in frazione dato he «quasi sempre esio & gia in forma intra (almena neh normal exmpl dati, LA GRAFICA A BASSA RISOLUZIONE Nella 400 inizia il calcolo dei punti di intersezione fra parabola e retta: DD é il discriminante del!’equazione di secondo grado in X che si ottiene confrontando i secondi membri delle equazioni della parabola e della retta, Se DD € negativo non si hanno intersezioni e si passa alla richiesta di esecuzione del grafico (linea 620). Se DD é nullo si ha tangenza fra parabola e retta, salto alla subroutine 6000 per il calcolo del punto di tangenza (dove le coordinate vengono trasformate in frazione), ¢ salto alla linea 520 per la esecuzione 0 meno del grafico. Se le prime due ipotesi non sono verificate, allora DD é sicuramente po- sitivo e in 440 DD viene trasformato nella radice quadrata di DD. Poi vengono calcolate le ascisse delle due intersezioni (N1 e N2) che vengono immediatamente trasformate in frazioni Infine (linee 460 ¢ 470) sono calcolate le corrispondenti ordinate N3 ed N4, anch’esse sono trasformate in frazioni e sono stampati i risultati Allla fine le solite subroutine gia note, con l"introduzione della 40000 per tracciare la parabola dopo il tracciamento della retta* 'Sisarebbe anche potuto usareseltanto Ia 20000 con un fag parabola) e con une sdoppiamento della lines 30040, pera retiae = 1 pera 25 CAPITOLO SECONDO_ La grafica ad alta risoluzione Ogni carattere che appare sullo schermo & costituito da una matrice di 8 per 8 puntini o pixel opportunamente accesi o spenti (cioé le stesse di- mensioni de! cursore lampeggiante). Abbiamo gia visto che in condizioni normali lo schermo pud contenere al massimo 1000 caratteri: cid significa che usando pidi razionalmente i pixel che costituiscono lo schermo, abbiamo la possibilita di tracciare grafici utilizzando 100064 = 64000 punt Dalla guida di riferimento della Commodore si pud rivavare la seguente routine che permette di accedere alla grafica ad alta risoluzione, cioé alla possibilita di operare con tutti i 64000 punti precedenti. Provate a batte- re il seguente listato: 109 116 126 130 POKEK, 3:NERT 140, T0278 150 BeBReSZO@INTC¥/8)48#INTCH/8)+ CYRND? > 165 POKER, PEEK(B)OR21C7—(HAND? > 470 NEXT 186 GETAS: IFRg=""THENIEa 150 PRINT!" 208 POKES3255, PEEK«SaE5)ANDZ23 218 POKESS272, PEEK (53272 ANZA? we von von 9 von eunbiy "109 1-109 9109 —__. —. ——. (661 3148 ie 31K | ‘aL aLAE Taine Lata aie aig sane pane Bie x ° 28 LA GRAFICA AD ALTA RISOLUZIONE Dando il RUN al programma vedrete lo schermo pieno di segni indeci- frabili, divenire tutto nero e poi colorarsi gradatamente in colore ciano. Successivamente verra tracciato un segmento orizzontale al centro dello schermo, in alta risoluzione, ‘A causa della linea 180 il programma si ferma in attesa che venga pre~ muto un tasto: poi viene pulito lo schermo e ristabilite le condizioni ini- ziali Cerchiamo di capire come & organizzata Valta risoluzione nel Commodo- re 64, Ogni pixel dello schermo cortisponde a un bit (= 1 se acceso, = 0 se spento), ¢ percid un byte conterra le informazioni riguardanti 8 pixel. Le informazioni relative a tutti i 64000 pixel dello schermo saranno quindi memorizzabili in 8000 byte, secondo lo schema illustrato nella figura precedente. Latta risoluzione permette di operare in un rettangolo (di dimensioni 320x200) con T’origine nell’angolo superiore sinistro. Tornando al listato, nella linea 100, viene indicata con BA la locazione di memoria a partire dalla quale verranno immagazzinati gli $000 byte contenenti le informazioni sui 64000 pixel. La memoria dei caratteri da stampare sullo schermo viene quindi spostata alla locazione 8192. Le lo- cazioni 1024 - 2023 accoglieranno invece le informazioni riguardanti il colore. Nella linea 110 viene attivata I'alta risoluzione. In 120 vengono azzerati tutti gli 8000 byte della nuova memoria dei ca- ratteri, con una operazione analoga al CLEAR di schermo: infatti a que- sto punto vedremo lo schermo annerirsi gradualmente. In 130 vengono invece colorate in ciano le 1000 locazioni che regolano il colore dello schermo. Se si desidera colorare lo schermo con colore di ferente, basta cambiare il secondo argomento della POKE. Siamo ora in grado di operare con I'alta risoluzione. Supponiamo di voler accendere un unico pixel con coordinate X, Y: INTIY/8) serve per determinare a quale delle 25 righe appartie- ne il pixel; INT(X/8) per determinare a quale delle 40 colonne appartiene il, pixel; Y AND 7 per determinare 2 quale degli 8 byte (della matri quadrata 8x8 7 - (CAND 7) per determinare a quale bit del byte appartiene il pi- xel. Battendo le linee 150 e 160 si otterra I'accensione del pixel desiderato. Nella routine precedente é stato inserito un ciclo FOR NEXT con ¥ fissa © X variabile, in modo da tracciare un segmento orizzontale. LA GRAF AD ALTA RISOLUZIONE 29 Le ultime linee 200 ¢ 210 ripristinano le condizioni iniziali riattivando la bassa risoluzione Dopo questa breve introduzione sulla grafica ad alta risoluzione, possia- mo elaborare un programma completo in grado di tracciare grafici di funzioni con risultati nettamente superiori a quelli ottenibili con i listati precedenti, 109 REM COPYRIGHT IN BASIC 105 REM VIR SEZZE 22 LATING 1g8 REM TEL. da7esi 1G CLR:PRINT*"3" RK=@TO1 ‘POKESG2E0+K, 2°NEXT:PRINT Necea Sa 2s" MAM DIg="3 so am 2 wm Pelnriapt io Saemmuansharsus Lause tutes PRINTTAB(S79" a D1S PRINTTAB( 3) "MW" FSHUSUSHENSHSZSHS ISHISOSUSHSSTS PRINT" T FER ISTRUZIONI O UN TASTO QUALSIASI)" GETOS: IFos="" THENZ9O TFOSC>"1"THENGEE, PRINT*2GUANDO TE LO CHIEDERO“BATTI LA FUNZIONE" PRINT*TENENDG PRESENTE CHE L“INCOGNITA DEVE" PRINT"ESSERE SEMPRE K=1T 92806: NEXT PRINT" PRINT"ESPRESSA IN" FORK FORK =1T015 PRINT" Suen" TABC13)" FOR J=1 T0260: NEXT. PRINT" MMMM" TAB C13)" RADIANT I" *FORJ=1TO200° NEXT: HET“ PRINT FORK=1T040:PRINT NEXT PRINT PRINT — QUANDO AVRO” FINITO IL GRAFICO. PREMI" PRINT"IL TASTO" PRINTTABCL2)"@eR UN STO PY PRINTRE DAI UN COLPETTO SECCO SUL TASTO" PRINTTAEC12)"@ek € 5 TO & E" PRINT FORK=17O4@: PRINT "an"; “NEXT PRINT PRINTIABG11)"MCPREMI UN TASTO)" BETOS: 1FOS="" THENG7O DOPO AVERMI DATO LA FUNZIONE, DOVER! TSSARE LE ASCISSE (HININA & MASSINAD" PRINTENTRO CUZ YUOI YEDERE LA FUNZIONE. PRINT!NL¢INTERVALLO SULLE ORDINATE E” AUC PRINT'NATICO “LE ESALTERO” 0 RIDURRO” IN MODI PRINT'DA OTTENERE SEMPRE IL NIGLIOR GRAF ICO’ PRINT"POSSIBILE." PRINT PERO” :FORK=1 05000: NEXT : PRINT FORK=17015 PRINT" SRRDURMAA' THEC 19 os PORJ=1TO200: NEXT PRINT "SDOQUDDUHINY TAEC1G)"ATTENZIONE | | FORJ=1 70200 NEXT NEXT PRINT*# NELLCINTERVALLO CHE DEVO GRAFICHRE 1702699 ‘NEXT 30 LA GRAFICA AD ALTA RISOLUZIONE 598 PRINT 86 PRINT €16 FRINT NON Of TEVOND ESSERE ASINTOTE VERTICALI* GLI ASSI CARTESIAN! LI TRACCERO’" UTOMATICRMENTE NELLA POSIZIONE GIUSTA.* 620 PRINT'M SE NON LI VEORAT VORRA” DIRE CHE ESSI* 620 PRINT*NON RIENTRANG NEL CAMPO VISIEILE. 840 PRINTTAB(S)"NMek PREMT UN TRSTOD" 690 GETOS: IFGS=""THENESA 660 PRINT*ERTTI LR FUNZIONE <* 670 INPUT" my = "ys 680 PRINT*IMN?2O DEFFNACH)="¥S 699 PRINT"GOTO7Zas" 788 POKEISE, 3:FORE 718 END 720 DEFFHACK)=1 12451NCH> 730 POKEI98,0:DIMY<320) 240 PRINT". OK = "ORR DIMMI LE ASCTSSE MINIMA E 250 PRINT*HASSINA CHE VUGI YERERE SuLLG SCHERNO, 102: POKESS14K, 13:NEXT 260 PRINTTABCIS "mb MIN =" INPUTK1=RI=TNTCRL> 2G PRINTTABCAS "RK MAK = © ENPUTR2:R2=INTCX2 > 280 [FR2<=KITHEN?SE 798 PRINTTABCS) "SHIN ATTIMO DY PAZTENZA!™ 800 Dkecxe-Ki>/320 816 FORK=OTOS13 B20 KeL+KEDK 830 VCK)=FHACH) 840, TFVCK) 2HETHENNER YK) 850 TFVCK) CHITHENMT=¥ 866 HET 87 MA=INTCNARLOTS+.5S)/1013 880 MESINTCHI#19 13425971013, 50 Dy=CNA-NID/268 986 PRINT" BAG TFK1C=ORNDX2>=0THENAY=INT(3204H1/CK1-KZ>+.5) :GOTOSE 520 Fyst 599. 1FHRO=oRNDNI: 949 Fx=t 998 BR=162488: POKES3272, PEEK (Se272)0Re 960 POKESS265, PEEK (53265 )0R32 326 FORK=BATOBR+; 993: POKER, O° NEXT 980 FORK= 1624702023: POKER, 3: NEXT 990 TFFX=1THENIGL6 1000 FORM=070319 : Y=AX:GOSUEL11¢:NEXT 1019 IFFW=1THENI039 1026 Keay FOR Y=070199:GOSUBI 110: NEXT 1900 FoRM=aT0319 1049 Y=INTC¥CO/D¥6.5) : [FY C-S8ORYDSSTHENLBES 1059 GoSUB1a98 1050 NEXT 1070 GETRS: IFAS=""THENLA?E 1220 END 1030 REM ROUTINE DI STAMPA 1100 Y=108-4) AL1G BeBA+320KINT(¥/394BKINTCX/8>+ CYAND?? 1120 POKER, PEEK(B)ORZ1C?~CKAND? > > 1130 RETURN y sTHENA NTCZOOKNR/CHR-HID+. 5): GOTOSSO Fino alla riga 290 viene visualizzata la scritta GRAFICO DI FUNZIONI e il programma si arresta in attesa che venga premuto il tasto | (nel caso in cui si desiderino le istruzioni), o un tasto qualsiasi per saltare diretta- LA GRAFICA AD ALTA RISOLUZIONE mente all’introduzione della funzione da presentare graficamente. In 310 - 650 sono contenute le istruzioni che presentano la particolarita di far lampeggiare alcune parole per richiamare I’attenzione del lettore. Nella linea 670 si deve battere la funzione che viene suecessivamente me- morizzata nella linea 720 con il metodo seguente. In 680 viene cancellato ¢ stampata la linea 720; in 690 viene stampata la scritta GOTO 720 ¢ il cursore € riportato in HOME. Nella linea 700 vengono forzati tre RETURN automatici che modificano Ja linea 720 facendo ripartire il programma da quel punto. Nelle linee 740 - 780 sono richiesti i valori delle ascisse entro i quali do- ra essere visualizzata la funzione. In 800 viene calcolato lineremento di ascissa corrispondente a due pixel adiacenti; nelle linee 810 - 880 vengo- no calcolate tutte le ordinate dei punti da visualizzare, ¢ fra essi vengono determinati il valore pid piccolo e quello piti grande. In 890 & calcolato incremento di ordinata corrispondente a due pixel adiacenti. Con que- sto criterio il grafico verra automaticamente dilatato o compresso in di- rezione verticale in maniera da visualizzarlo sempre nel miglior modo possibile Quindi lo schermo viene cancellato ¢ nelle linee 910 - 940 sono istituiti due flag FX ¢ FY per controllare la presenza o meno degli assi coordinati nel campo visibile. Finalmente nelle linee 950 - 1080 si ha la routine per l'alta risoluzione, gid vista nel listato precedente. La subroutine da 1090 alla fine esegue Paccensione di ogni singolo pixel Si noti che abbiamo climinato quella parte della routine precedente che ripristina la bassa risoluzione, in quanto con il RESTORE essa viene riat- tivata automaticamente, 31 CAPITOLO TERZO. Matematica elementare Occupiamoci ora di alcuni programmi di matematica elementare che ossono essere utilizzati con profitto anche a livello didattico in una scuola secondaria inferiore. MASSIMO COMUN DIVISORE & MINIMO COMUNE MULTIPLO. 18 REN COPVRIGHT IN BASIC 12 REN VIR SEZZE 22 LATINA 14 REM TEL. darest 16 CLR: PRINT*=r 18 FORE 95280, 16-POKE S3281,3 38 DINF1(S0),F2¢50),F 3050), FCS8) 40 FRINTTRB( 10) "uEaTHSS IMD CUMLN DIVISORE® 50 PRINTTAB(20)" ame Go PRINTTHBCIO) "OUATINIMO COMUNE MUL TIPLOm 7@ PRINT" RNIN * GUSUE1G900 8 PRINT" OGUESTO PRUGRANA TI SPIEGA COSA SOND IL 98 PRINT"H.C.D. 0 IL M.C.M. DI DUE O TRE NUMERT.” 100 INFUT"ANVUGL TRATTARE 2 0 3 NUMERI"R 119 IFR=3THENF=1 128 IFR>3THEN! 00 130 PRINT"MV/UOI CALCOLARNE IL M.C.D. 0 ILM. 140 INPUT*MBRTTI 1 OPPURE 2°iR 158 IFRDZTHENLA@ 169 IFR=2THENFF=1 17@ INPUT"SQUBL“E/ TL PRIN NUMERO" Nt 188 INPUT"ME TL SECONDO" NZ 190 IFFSLTHENINEUT®ME IL TERZO"/ NE 2060 TFFF=1THENIGRE MATEMATICA ELEMENTARE 3 208 REM-ROUTINE FER M 21 M=Nt -GUSUEL 1200 220 FORK=LTOT FICK) =F°K) (F121 :NEXTKC:T=O, ALL 1 NUNEROM "NI" He "FI" DIVISORT: "PRINT 24g FORK=1 TORI PRINTELCK; °NEXTK 250 NeN2:GOSUBL Loe 260 FURK=1TOT F2CK)=F(K) (F281 °NEXTKT=O 2e5 PRINT ro PRINT MAIL 2° NUMEROM "N2" HA "FZ" DIVISORT:": PRINT eg FORK=1TOR2 :PRINTE2(K) “NEXT. NEXT, G15 PRINT 220 PRINT"'NIE IL 3* NUMEROM "NS" NE HA "FS 380 FORK=1TOF3:PRINTF3CK) 5 NEXT 24Q PRINT: FORK=17040: PRINT" 5 ‘NEXTIC 350 PRINT*MSCRIVILI ORDINATAMENTE SU UN FOGLIO" 369 PRINT"CONE LI VEDI SULLO SCHERMO E, 379 GUSUBLeCOD 380 PRINT"SRLCUNI ADIVISORI@ SONO DOMUNIM A TUTTE E" 390 PRINTF#2" LE LISTE.” 300 PRINT"IL PIU" GRANDE DT ESST E’ IL @yAgSINOm 419 PRINT"CONUN DIVISORE. " 420 PRINT"ML DIVISORI COMUNE SOND: : PRINT PRINT 10> PRINTFLGD -3(H)THENP=F1(K) :PRINTFA(K) 5 5 See NEXTK:NEXTS 51. IFF=1THENNEXTH S20 PRINT FORK=1T040: PRIN NEXTK 520 PRINT'MIL PIU” GRHNDE FRA ESS! E°" 54 PRINTTABC Le)" mms SSO PRINTAMCHE RHPPRESENTA APPUNTO IL M.C.D, SEG PRINT"CERCATD. S7@ INPUT"AVUOT PROVARE ANCORA' RS S80 IFLEFTS(RS, 1)="5!"THENSO 590 FRINT"DK ~ CIRO 608 END 1008 REN-ROUTINE PERM 1010 FRINT'L PRIMI SQ MULTIPLI DET 1023 PRINT"SOND:" 1025 PRINT" MAcOPIALT SU_UN FOGLIO! 1038 D=N1°GUSUE12000 1042 PRINT* MULTIPLY DI “Nimes 1059 FORK=1T050°F1 CK9=F CK) “PRINTF 1.(K)3 °NEXTK 1Q69 PRINT :G0S./B1@a00 :DeN2: GOSUE1 2600 4070 PRINT*MMWULTIPLI DL "NZ": 1880 FORK=1 7059: F 2(K)=F (K) | PRINTF2(K); ‘NEXT 1098 IFF=aTHENL 138 $100 PRINT: GUSUE1GQ9@: D=N3:GOSUB12000 D11G PRINT*MAMLTIPLT DE "N3"ME" 5 1120 FORK 17052 °F 3¢K J=F CK) PRINTF3(K); (NEXT 1120 REM-CALCOLO MULTIPLT CONUNT 1140 PRINT: GOSUE1090@:PRINT'SNELLE "E42" LISTE DI @ULTIPLI® CE NE" 1150 PRINT'SOND ALCUNI aCOMUNTS. 1160 PRINT*MIL PIU’ PICCOLO DI ESST e IL aININOR” 1178 PRINT*COMUNE MULTIPLO CERCATO! 1175 PRINT'MAUN ATTINO DI PAZIENZR! 1180 IFF=1THENFORH=1T05@ #2" NUMERT" 34 MATEMATICA ELEMENTARE 1190 FORJ=1TOSU: FORK=LTOS@ IRNDF 1 CJD=F2¢K )THENPSF 13) :GOTO125@ a NDF. Ck )SF2¢ J ANDF2¢ J) =F 30H) THENP=F 1 (Kk GOTOLZ5 1290 NEXT: NEXTS 1240 NEXTH 1250 LFP=oTHENI400 A260 PRINT FORK=1T040:PRINT"m@" “NEXTI 2 oNEXTK IL M.C.M. E¢ TROPPO GRANDE HRER TROVFRLO DOVRE] PRENDESE IN CONST IERRZICNE PIU’ DEL 58 MULTIPLY PER’ THSCUN NUMERO." =GOTHS7E 10000 PRINTTRECIZ)°MCPREMI UN TRSTO) 10010 GETAE: IFRE=""THENIOO12 19029 RETURN 11909 REM-KICERCA DEI DIVISORT 11G1@ FORJ=MTOLSTEP=1 11020 D=M/J:-DD=INTCD> 11030 TFD=DDTHENT=T#1°FcT =D 11040 NEXTJ:RETURN 12008 REN-RILERCA DEL MULTIPLY 12030 NEXTY RETURN Nella linea 30 vengono dimensionate 3 variabili con indice (una per cia: scun numero che verra preso in considerazione), piti una quarta variabile con indice che servira da variabile provvisoria di lavoro nelle subroutine 11000 e 12000. In 110 e 160 vengono introdotti due flag (F e FF) per stabilire se i nume- ri da trattare sono due 0 tre, e se si deve calcolare il loro massimo co- mun divisore e il loro minimo comune multiplo. Nelle lince 170-200 vengono richiesti i numeri da trattare: nelle linee im- mediatamente successive si ha il calcolo del massimo comun divisore mentre (se FF = 1) si ha un salto alla linea 1000 per il calcolo del mini- mo comune multiplo. Per ciascuno dei numeri da trattare viene adottato per il massimo comun divisore il procedimento seguente: i numero viene posto uguale ad M, & nella subroutine 11000 esso viene diviso successivamente per tutti i nu- meri interi da Mad 1. Ogni volta che il risultato della divisione é uguale alla propria parte inte- ra, allora vuol dire che tale risultato € un divisore di M, In tal caso la sua esistenza viene memorizzata per mezzo del contatore T = T+1, ¢ il suo valore viene immagazzinato nella variabile (ausiliaria) con indice FIT), Dopo il RETURN si ha il trasferimento dei divisori dalla variabile F(T)’ FIT) o FAK) la stews cous: se por ecmmpio T = 5 ¢ K = 5, in ensambi i casi vera ine cata dalkt memoria i lore corvipondenme a FS) MATEMATICA ELEMENTARE alla variabile F1(K) che memorizza percid tutti i divisori del numero NT Poi T viene trasformato in F1 e viene azzerata la T per il ciclo riguar dante il numero successivo N2. A questo punto (linea 230 € linea 240) possono essere stampati tutti gli FI divisori (F1(1), F1(2), F1(3),...) del numero N1 Lo stesso avviene per i numeri N2 € (se devono essere trattati tre numeri) NB. Dopo alcune righe di spiegazione si arriva in 480 dove si ha la ricerca dei divisori comuni e la determinazione del pid grande di essi.. Dalla linea 460 alla 510 si hanno ire cicli FOR NEXT annidati uno den- tro Paltro. I pid estremo di essi (variabile H) agisce solo nel caso che si debbano trattare tre numeri. In 480 si effetiuano i confronti fra i divisori (per individuare quelli co- muni) nel easo che i numeri da trattare siano due, mentre in 490 si effet- twano i confronti nel caso che i numeri siano ire. In entrambi i casi ogni volta che si trova un divisore comune, esso viene posto uguale a P, Alla fine dei cicli automaticamente P corrispondera all'wltimo divisore comune, cioé quello con valore pitt alto. Passiamo ora alla linea 1000 per la ricerca del minimo comune multiplo. La subroutine 12000 determina i primi 50 multipli del numero D, imma- gazzinandoli nella solita variabile (ausiliaria) con indice F(Y). Ogni nu- mero da trattare viene posto uguale a D, inviato alla subroutine 12000, i multiplivengono poi trasferiti rispettivamente nelle F1(K), F2(K) ed FBIK) ¢ stampati Dopo la stampa di ciascuna lista di multipli, per consentire all’operatore i osservarli 0 di copiarli, si ricorre alla subroutine 10000 per fermare il programma, Si tratta ora di individuare i! pitt piccolo dei multipli comuni e nelle li- nee comprese fra la 1180 ¢ la 1240 viene applicato lo stesso procedimen- to di confronti con tre cieli FOR NEXT uno dentro l’altro. AA differenza di prima, i confronti vengono interrotti con un GOTO 1250 non appena viene trovato il primo multiplo comune, cioé il pid piccolo. Pud perd accadere che il minimo comune multiplo non venga trovato perché esso si trova oltre i 5O multipli presi in considerazione per ciascun numero, In tal caso P = 0 € la linea 1250 fa effettuare un salto alla linea 1400 dove si spiega la situazione e si rinvia alla 570 per la richiesta 0 meno di continuare, Mentre la ricerca del massimo comun divisore non presenta alcun pro- blema di scorrimento, consiglio il lettore di usare la routine per la ricer- ca del minimo comune multiplo solo per due numeri, oppure per tre nu- meri piuttosto bass Infatti, malgrado l'apprezzabile velocita operativa del Commodore 64 (come di qualunque home computer), quando vengono eseguiti i con- 35 36 MATEMATICA ELEMENTARE fronti con tre cicli di 50 valori ciascuno, il calcolatore deve eseguire ben, 50' = 125000 confronti, impiegando un tempo di poco pit di un'ora! Per esempio impiega circa 14 minuti per individuare il minimo comune multiplo fra i numeri 36, 25 ¢ 90. Ne impiega invece meno di due per determinare il minimo comune mul- tiplo fra i numeri 5, 6 € 15. Dal punto di vista didattico questa limitazio- ne pud essere utile per mettere in luce la superiorita logica dell'uomo ri- spetto alla machina, straordinariamente veloce ma ottusa. SISTEMI DI NUMERAZIONE Permettono di trasformare un qualsiasi numero intero decimale, binario © esadecimale in una qualsiasi delle altre due basi. Per evitare all’operatore di premere continuamente il tasto RETURN, ab- biamo preferito usare l'istruzione GET tutte le volte che era possibile. Fa eecezione il caso in cui bisogna battere il numero da trasformare, perché esso pud essere costituito da una quantita variabile di cifre, ed dunque necessario ricorrere al solito INPUT. 10 REM COPYRIGHT IN EREIC 12 REM VIR SEZZE 22 LATINA 44 REM TEL. 437031 16 CLR:PRINT "oe 18 POKES3250, 19: POKESSZ81,3 25 DIMECSID 05a), BE CSU), DECSB) SO PRINTTAECS) "MME ISTEM] DI NUMERAZIONER™ TRASFORMARE. UW NUPERU INTER Ii" SE AD) UN“ALTRA TECIMALE FH BINARIU 2 PRINT®A A BINERIO A DECIMBLE” 80 PRINT'N 3-Da DECINALE AD ESADECIMALE" 90 PRINT*H 4-[8 ESALECINALE A Le immLe" 196 PRINT"M SUA BINARIO AD ESADECIMALE™ AMG PRINT'N 6-DR_ESADECINALE A EINARIO! 120 PRINT"MQUALE SCEGLI 130 GETAS: IFRS=""THENI 30 149 AEVAL CRE): [FADETHEN LD 190 ONAGOTO1G00, 2000, 2600, 4000, Sa00, couD 160 GoTOIa Zu REN-RICHIESTA DI COWTINUAZTONE 210 PRINT "MN 20 GETRS IFRS=' 230 IFRS="S"THEMLG 249 PRINT'DDK = CIAD!" 250 END 1000 RLM-TRASF . DECIMALE-BINARLO 1910 INPUT*IBRTTI IL NUMERO DECIMBLE":N 1920 GOSUBLOB00 INTE MATEMATICA ELEMENTARE 37 1096 PRINT*MIL_CORRISPONDENTE NUMERO BINARIO E:* A040 PRINTTHECS) "HES 1058 GoTaZaE 2000 REN-TRHSF. BINARIO DECIMALE 2010 INPUT"OBATTI IL HUN, BINAR TO" NS 2020 GUSUBL BBE 2036 PRINT" MIL CORRISPONDENTE HUMERO DECIMALE E” :* 2040 PRINTTABCS) "HN 2250 GuTU2eG S000 REN-TRASF DECIMALE-ESATECIMALE S010 INPUT*OBATTI IL NUMERO DECTMALE" iN 3020 GUSUBLa000 3030 NE=BS :GOSUEISaa9 S040 PRINT'MIL CORRISP. HUMERO ESADECIMALE E* 3050 PRINTTHE(S) "NEES. S660 ooTo2e 4000 REM-TRRSF . ESADECINALE-DECIMALE 4019 INPUT"SBATTI IL MUM, ESRBECIMALE" R$ 4820 GOSUB1G000 4930 NS=HE 'GOSUE 1000 4040 PRINT*NIL_CORRISP. NUMERO DECIMALE E* : 4950 PRINTTRECS) "AH 4960 GOTO2ae ‘SGU REN-TRASE, BINARIO-ESADECINALE 2010 INPUT"IBATTI IL NUMERO EINARIONiNS 5828 GUSUE1S5000 5020 PRINT"NIL CORRISP. NUMERO ESADECIMALE E° ° ‘S040 PRINTTBE(S )"APEES S250 GOTOLES G00 REN-TRASF , ESADECIMALE-BINARIO 6810 INPUT"IBATTI IL NUMERO ESADECINALE” RE 6228 GOSUBLS000 SUSU PRINT"SIL CORRISPONDENTE HUMERO BINARIO E* :* S840 PRINTTAB(S) "RP WE e586 GOTu2aa 10000 REN-TRASF. DECIMALE-BINARIO 10010 K=O" IFHeLTHENES="1" RETURN 10028 N=N/Z 1030 Kekel 10040 IFN=INT CN) THENECK: 19080 Eck: 10060 NEINT 11@20 FoR 11830 Bc coTaLa8Ee: sorozee aL cask)» eritis) 11080 NEXTK 11930 RETURN 19000 REN-TRASF, FINARLO-ESADECIMALE 15910 CELENCNS) 18011 CI=L/4:L2e1NTCLL> LL=Lt-L2 38 MATEMATICA ELEMENTARE 15012 1FLL=OTHENLL: 15014 15016 15018 ‘7STHENLLSS 15020 NS="ORO" NE 15030 FoeK=aTOLZ 15040 BS=HIDS(NE-LLedek,4) 15050 soroiszie 15060 GoroiSzi6 15076 goTo1sz19 15080 soroiszie 15038 soroiszie 15100 BoTOIS216 15110 soraiszia 15120 soToIsz1¢ 15130 soroiszie 15143 Goraiszia 15150 GoToiszia 15160 1011 goroiszie 15170 1100" THENE: GoroiSz16 15180 11001 “THENE! poTaiszie 15138 1110" THENE: gorois2ia 15200 LU" THENE eoraiszia 15205 ‘ISERRORE! 1" GOTNZAG 15210 EES=EESES. 15220 NEXTK 15238 RETURN 16000 FEN-TRRGE ESADECINELE-BINARIO isola tenza tease tevso rew goTaieza0 renee SOTDI6200 16070 coToiE2a0 ise5a coTole2a0 tue GuTo162280 16100 coTuLe2a0 iei1a coTatezee 15128 guTuiez29 16138 GuToleze0 ieiaa Goroiezee 16139 goToiezes teieu GoTulezen 16178 coToiezaa isiga soroiezea 16130 cuToie2ae 16195 PR: coTozee 16200 16210 NEXTK 16220 RETURN In 25 vengono dimensionate con una certa larghezza quattro variabili (due numeriche ¢ due di stringa), poi viene stampato un quadro in cui viene assegnato un numero a ciascuna delle sei trasformazioni che @ pos- sibile richiedere operando sulle tre basi di numerazione, e viene posta la domanda sull’opzione desiderata, MATEMATICA ELEMENTARE La linea 130 costituisce un ciclo che il Commodore 64 percorre comti- ‘nuamente (dando impressione che il programma si fermi), fino a quan- do non viene premuto un tasto. In 140 la stringa AS viene trasformata in variabile numerica ¢ se il suo valore supera il numero di opzioni possibili si ha un salto in 10 e il pro- gramma ricomincia da capo." Se cid non avviene, a seconda del valore di A si ha un salto alle linee 1000, 2000 etc. Esaminiamo anzitutto le subroutine di trasformazione situate dopo la li- nea 10000. In 10000 si entra dopo aver battuto il numero decimale N. Se N = 1, viene posto BS = 1 (B é il numero binario che Ia subroutine deve elaborare), ¢ si ha il RETURN. In caso contrario viene applicato I'algoritmo classico usato per trasfor- mare in binario un numero decimale: quello della divisione successiva per 2. Se per esempio il numero decimale da trasformare é N = 13, si avr 13 [2 1612 o 312 ‘Tutti i resti (presi al contrario come indicato dalla freccia), preceduti dalla cifra 1, costituiscono il numero binario cercato. Nel nostro caso si avra B$ = 1101. Vediamo ora come questo procedi- mento é stato tradotto in istruzioni Basic. Non si pud usare un ciclo FOR NEXT perché non si conosce la lunghezza del numero decimale N.? 11 numero N viene diviso per 2 ¢ il contatore K registrera via via il nume- ro di divisioni effettuate. Poi (linea 10040) vengono confrontati fra loro i risultato della divisione € la propria parte intera: se sono uguali vuol dire che il resto della divi- sione é nullo, viene memorizzata la cifra 0 in B(KI, ¢ si ha un salto in 10060. In caso contrario c’é resto uno, ¢ viene memorizzata la cifra 1 in BIK). Poi viene presa in considerazione solo la parte intera di N (cio® isulta- Si noti che a ‘i potrebbe perd irasformare N in stinga, ma ho preferito seguire altra via perché cos! se il numero N contiene un caratere non numerico, sto automaticamente non viene aecet- sa del CLR si evita Terrore di idlmensionamento delle varabili con indi- 39 MATEMATICA ELEMENTARE to della divisione) e, se N = 1) si ha un salto in 10090 e le divisioni sono terminate. Se invece N é maggiore di uno, si torna indietro in 10020 e si ripete il ci- alo. Quando arriviamo in 10090 le divisioni sono terminate ¢ i K valori BIT) B12) BB) ... BIK) raccolgono ordinatamente i resti (0 0 1) di ciascuna divisione nell'ordine con cui sono state eseguite, Con un ciclo FOR NEXT che va da K ad 1 questi resti vengono trasfor- mati in stringa, uno alla volta, ¢ l'istruzione BS(J) = RIGHTSIBS(J),1) & necessaria per fare in modo che ogni ccarattere.' Viene contemporaneamente formata una stringa finale (B8) che contiene tutti questi resti uno dopo I’altro, ma con ordine invertito. Nella linea 10110 si ha infine l'aggiunta iniziale della cifra 1 alla stringa precedente. Dopo il RETURN B§ ¢ il numero binario che doveva essere caleolato, Passiamo ora alla subroutine 11000 che trasforma un numero binario in decimale. Anche qui ho usato l’algoritmo classico che consiste nel far corrispondere a ogni cifra binaria una potenza di 2, nel moltiplicare poi ogni cifra per la potenza corrispondente, ¢ nell’eseguire infine la somma dei prodotti cost ottenuti. Per esempio si abbia il numero binario: tringa sia costituita da un solo ‘numero binario iniziale 1 1 0 1 0 1 potenze corrispondenti 2° 11 numero decimate & 1-3241-16+0-841-440-24161 Applichiamo il metodo alla subroutine 11000: anzitutto viene individua- Infati tusformando un numero in strings eso risulla preveduto da uno spavio (net revenue seeno meno), questo eosituirebbe un impestimento per Fuso della subroutine nla rasformavione di un numero decimate in sadecimale, come si ved in seguito MATEMATICA ELEMENTARE ta Ia lunghezza L del numero binario NS battuto in precedenza. Poi in un ciclo FOR NEXT viene generata la potenza di 2 corrispondente a ciascuna cifra (linea 11030), ed essa & memorizzata nella variabile BK). Si noti che l'esponente di 2 & L-K per cui le potenze hanno esponente decrescente da L-1 a 0. Nella linea 11040 vengono invece memorizzate ordinatamente in DS(K) tutte le cifre del numero binario NS, una alla volta In 11045 vengono rilevati eventuali errori: se la cifra é maggiore di 1, il calcolo si interrompe ¢ si salta alla linea 200 per la richiesta di prosegui- mento. Quindi Ia cifra viene comunque trasformata in variabile numeric 11060 la potenza di 2 ¢ la cifra corrispondente (0 0 1) sono molti fra loro ed il prodotto @ indicato con la variabile C. Ignoriamo per wn attimo la linea 11070: arrivati al NEXT si ricomineia il ciclo € viene calcolato il prodotto C della seconda potenza con la secon- da cifra. E cosi via per tutte le cifre del numero binario. ‘Ad ogni passaggio per la linea 11070 la variabile N somma, al preceden- te valore di N, Pultimo prodotto C calcolato. Quindi alla fine del ciclo FOR NEXT in N saré memorizzato il numero decimale corrispondente al numero binario NS iniziale. Passiamo ora alla subroutine 15000 dove NS rappresenta il numero bina rio iniziale che per6 deve essere trasformato in esadecimale. Le cifre esadecimali, come ¢ noto, sono 0123456789ABCDEF corrispondenti ai valori decimali da 0 a IS. Ciascuna di esse corrisponde ad un numero binario secondo Ia seguente tabella 4 2 MATEMATICA ELEMENTARE cifre corrispondente esadecimali numero binario 0000 001 oo10 oon 100 ono o110 oun 1000 1001 1010 1011 1100 1101 110 mu mM MONE dem aHEUnns Cioé ogni combinazione possibile di quattro cifre binarie corrisponde sempre @ una e una sola cifra esadecimale. Ora consideriamo un generico numero binario 1011001000 liamo in gruppi di quattro cifre a partire da destra 10-1100-1000 € completiamo (quando é necessario) il primo gruppo a sinistra con degli zeri iniziali in modo che anch’esso sia formato da quattro cifre (0010-1100-1000 Allora, sostituendo a ogni gruppo la cifra esadecimale ad esso corrispon- dente in base alla tabella precedente, si ottiene 2c8 che @ il numero esadecimale corrispondente a quello binario. Ebbene, nella linea 15010 viene indicata con L la lunghezza del numero binario N$, poi csso viene diviso per quattro e il risultato viene chiamato L1, mentre la sua parte intera viene chiamata L2, MATEMATICA ELEMENTARE La differenza fra L1 ed L2 pud essere 0 oppure .25 oppure . 5 oppure .75 ced essa viene indicata con LL. Ora possiamo dividere il numero binario in gruppi di quattro cifre, ed (2 rappresenta il numero di gruppi completi, mentre LL (grazie alla tra: sformazione imposta nelle linee 15012-15018) rappresenta il numero di cifre del primo gruppo a sinistra.” In 15020 vengono aggiunti tre zeri iniziali ad NS allo scopo di poter completare in ogni caso il primo gruppo quando esso non & completo. Finalmente da 15030 a 15220, con un ciclo FOR NEXT vengono presi in considerazione tutti i gruppi di quattro cifre, uno alla volta, e trasfor- mati nella corrispondente cifra esadecimale. Se un gruppo contiene altri caratteri che non siano 0 0 1, si arriva in 18205 dove si ha la segnalazione di errore, In caso contrario le cifre esadecimali E$ vengono sommate una all’altra in modo da costruire alla fine \'intero numero esadecimale EES (linea 16210). Rimane da esaminare 1a subroutine 16000. Dopo aver calcolato la lunghezza L del numero esadecimale RS, con un iclo FOR NEXT vengono poste uguale a PS tutte le sue cifre una dopo Valtra a partire dalla sinistra Con un procedimento di trasformazione contrario al precedente ciascuna di esse € sostituita da gruppi di quattro cifre binarie, che sono poi som- mate ordinatamente fino a costituire il numero binario W$ che doveva essere determinato. ‘Anche qui (linea 16195) c'é la segnalazione di errore nel caso che al po- sto della cifra esadecimale ci sia un carattere illegale. Dopo questa lunga parentesi sulle subroutine possiamo tornare ad esa- minare le routine 1000, 2000, 5000, 6000, 3000 e 4000. Per le prime quattro, dopo aver battuto il numero da trasformare si ha tun salto alla subroutine relativa, la stampa del risultato e V'invio alla li- nea 200 per la richiesta di procedimento (con il solito procedimento del comando GET). Per le ultime due invece si ricorre successivamente a due subroutine. Cosi nella 3000 il numero decimale viene prima trasformato in binario e poi da binario in esadecimale. °Nel caso in cui la differenza LI-L2 = 0, dovrebbe essere LL = 0, ma cid provocherebbe una segnalazione di errore in 15040 quando anche K = 0. Ho superate Fostacolo ponendo LL = 4 diminuendo ai 1 | numero L2 di gruppi complet 4B MATEMATICA ELEMENTARE Per inciso é proprio per quest’ultima trasformazione che le cifre del nu- mero binario sono state private in precedenza (ultima istruzione della li- ‘nea 10090) dello spazio vuoto iniziale. Analogamente nella 4000 il numero esadecimale viene prima trasformato in binario poi da binario in decimale. Il programma precedente risulta abbastanza prolisso perché costituisee luna mera trasposizione degli algoritmi normalmente usati quando si de- ve operare manualmente un cambiamento di base. Spesso € invece pili conveniente adoperare algoritmi completamente dif ferenti, che risultano pitt adatti alla logica di un calcolatore. Vediamo come sia possibile ideare una routine per le trasformazioni di base, molto pit rapida, concisa ed efficiente della precedente. Dall’algcbra é noto che una frazione N/D puo essere sempre scritta nella forma N/D = Q+R/D dove N e D rappresentano il numeratore e il denominatore di una fra- zione 0, cid che ¢ lo stesso, il rapporto tra due numeri. Q é il quoziente © Ril resto, In altre parole cid equivale a dire, per esempio, che 2 = 3412 Moltiplichiamo i due membri della prima uguaglianza per D e risolvia- mo rispetto a R. Si ottiene R= N-OxD Ora osserviamo i listato seguente: 10 REM TRASFORINE 20 CLR-PRINT "3" 38 HE="1 23456729 RCDEF 30 INPUT "NUMERO DECIMBLE" 5D 58 AEINT CD16) 68 HESHTDSCIS, D4I-16HR, L>shie 7 80 IFIDOTHENSO PRINTHS 100 PRINT ANCOR 7 110 GETOE: IFOS=""THENL 16 120 IFOS="S"THENSO ONE DECIN, /ESHDECIM, Nella linea 30 vengono definite in una stringa le 16 cifre della numera- zione esadecimale, e in 40 viene richiesto il numero decimale D da tra- sformare. MATEMATICA ELEMENTARE 4s Il numero viene diviso per 16 ¢ nella variabile viene immagazzinata la parte intera della divisione (corrispondente alla lettera N dell'uguaglian- za prima ricavata, mentre il divisore D corrisponde ora al numero 16). Nella linea 60 viene estratta da N8, con il MIDS, la cifra opportuna uti- lizzando la suddetta uguaglianza. In 70 € 80 viene continuato il ciclo di divisioni successive, dopo aver seambiato D con A, fino a quando la variabile A diviene nulla. In 60 ogni cifra H8 ri in precedenza Alla fine si avra in $0 la stampa di tutto il numero esadecimale HS. Si noti che cambiando i due numeri 16 nelle line 50 ¢ 60 si pud utilizea- Fe questa stessa routine anche per trasformare un numero decimale in un’altra base qualsiasi. avata viene accumulata prima di quelle calcolate AREA E PERIMETRO DEI POLIGONI Pensiamo anche ai pit piccoli (molti lettori avranno figli o nipoti che frequentano le scuole medie) con un programmino sonoro che non man- chera di stupirli. 1 programma permette di calcolare rapidamente area e perimetro di un MATEMATICA ELEMENTARE 4qualsiasi poligono (purché non intrecciato), con un qualsiasi numero di lat Basta fornire al Commodore 64 le coordinate di tutti i suoi ver Prima di affrontare il listato analizziamo Palgoritmo usato per il calcolo delParea. Consideriamo per esempio un quadrilatero generico ABCD (figura 8), del quale conosciamo tutte le coordinate dopo aver fissato arbitraria- mente un sistema cartesiano di riferimento. Risultano determinati quattro trapei rettangoli ABFE, BCHF, DCHG, ADGE la cui area, come @ noto, é data dalla semisomma delle basi per I'altez~ L’area del quadrilatero puo essere ottenuta per mezzo della somma alge- brica — Sro0e S= YAM Oma) + BAY (ey —ay) — HM (yxy) + LO Gey) + 52 Germs) — EM yay) + YAP Grama) Cio’ Qity2) (i=) V2 +)9) (es =) tutti i termini in cui x ed y hanno indici uguali, si elidono fra loro e ri- ssulta z che pud anche essere seritta Si pud facilmente gono di rt lati) limostrare che generalizzando si ottiene (per un poli- MATEMATICA ELEMENTARE a7 FIN) + XIX formula scarsamente utile per calcoli “a mano", ma molto adatta per tun computer. 1 quattro termini a numeratore possono essere indicati con ay = Sx Get ye ay = Ex mes 498) =X Yn de = Xn € quindi area é data da Si noti che scambiando le x con le y' si ottiene lo stesso risultato ma con segno negativo, Un tale scambio si verifica se consideriamo i vertici del poligono ruotan- do in verso contrario. Ora possiamo passare all‘analisi det listato. 12 REM COPYRIGHT IN BASIC OREN VIR SEZZE 22 LATINA So REN TEL, 45 6 CLROPRINT "CEE" Se54272 56 PUKESS290, 10: PIRESazet 3 © ASSWAHRER E PERIMETEO DET POL B FORK=1 1022 86 PRINT AMNINSPOCSOMIDECRS, 1-9 96 GOSUB1908 169 NEXTK 119 PRINT* I TISEGNA SU UN FOGLIO UN POLIGONG" 129 PRINT" MRURLSIASI (CONCAY CONVESSO, PURCHE 139 PRINT*NON INTRECCINTOD.POL TRACCIA UN SISTEMA 149 PRINT*DI ASST CARTESIAN! CAREITRARIO?,€ BATTL PRINT'LE COORDINATE DEI VERTICI, ORDINATAMENTE” 159 PRINT*INA DOPD L’ALTRA.* 179 PRINT* ” PER FIVIRE RIBATTI LE COORDINATE DEL" 180 PRINT"PRIMD VERTICE." GOSUB2009 25 REM INGRESSO COORDINATE 268 LIMKc199>,¥<100) 2e8 T=T+1: IFFSOTHENSIO 280 PRINT'PRICORDA!! PER CHIUNERE IL POLIGONO DEVI" 258 PRINT*ERTTERE |" PRINTSPC(S)" ME ="X0, SPCCZO)"Y ="¥a © GUSUEAOBO 219 PRINT*MECOORDINATE DEL*T"* PUNTO: Nol senso di scambis ahhonivy alle due vat MATEMATICA ELEMENTARE 359 REM CONTR 360 LFT>IANDACT HIUSURA PoLTGONO (SANDY CT >=YOTHENSOS TOT=1 1 #x¢K=1 DAY CK: 24 vk 1 IARCKD 546 NEXTK S50 AS-KCT-1#¥a S66 Ady oT-1 eso SPo HeABS (CAL -A24AS-A4)/2 be PRINT*SIMML “FRER DEL POLIGOND E” <" EG PRINTSPC( 12)" ="R €20 PRINT: GOSUB400 E40 REN CALCOLO PERTMETRO £56 FORK=1TOT=1 BEG KISCKCK#L )-XcK) 12 Ere YiscyckeL “vey 12 B86 L=S0RCx1+¥1) 630 PR=PF+L ‘PRB NEXTK 78 PRINT"MNE IL SUO PERIMETRO E’ :" 71S PRSINTCPP#199+.5)/198 720 PRINTSFCC1S)"MaeF ="PP ‘730 PRINT: GOSUES900 ‘74a PRINT"MNGVUOT PROVARE RNCORR 7" 10 PRINT'SUDIDK = CIAO 111" 30 END 19am REM SCALA INIZIALE 1919 FOKES*24,15) 1028 POKES#5 9 1030 POKES+4, 33, 1040 RERDA:RERDE 1098 IFE=-1THENRESTORE ‘G0TO1040 1950 FOKES*1/ 8 POKES, B 1065 FORJ=1T01@0:NEXTI 1978 POKES*4, 32: RETURN 1080 DATAI?, 27, 13,63,21,154,22,227, 1098 DATAZ, 177,28, 214, 32,94) 34,175 1109 DATA=1.-1 2002 REM ATTESAL 2018 FRINTSPCC12)"MMCPREMI UN TRSTOD" 2020 GETOS: IFOS=""THENZA20 2030 PRINT" RETURN 3000 REN BEEP 3010 POKES+24, 15 :POKES*23.0 B20 POKES+S, 25 POKES*E, 65 3838 POKES+1, 63: POKES, 99 3040 POKES#4, 33 3050 FORJ=170100:NEXTI 5060 POKES+4,9 POKES*5,0 3070 POKES#5, 0: RETURN 4000 REN BARRA ORIZZONTALE 4010 PRINT" -FORK=1T040 PRINT 4220 RETURN NEXT©PRINT MATEMATICA ELEMENTARE Dando il RUN al programma vedrete comparire il titolo, ma una lettera alla volta, mentre vengono eseguite delle scale musical Dopo una breve spiegazione si devono batiere le coordinate dei vert del poligono, e per ciascuna di esse viene emesso un beep sonoro, Non appena il poligono & chiuso (quando sono ribattute le coordinate del primo vertice), si ha il calcolo dell’area e del perimetro. Infine si ha la richiesta di procedere o no per un secondo calcolo e, in caso negativo, viene visualizzata la solita siringa finale OK-CIAO. Essendo questo il primo programma contenente delle routines sonore, analizziamo brevemente i criteri che le regolano, Nella linea 40 viene memorizzato nella variabile $4272: occupiamoci pi ma della subroutine 3000. ‘Nella linea 3010 con la prima POKE viene regolato al massimo il volume sonoro, mentre con la seconda POKE si effettua il reset dei controlli di filtro € di voce. In 3020 si fissano i parametri (ATTACK ~ DECAY - SUSTAIN - RE- LEASE) che costituiscono le caratteristiche dell’onda sonora Nella Tinea 3030 vengono stabilite le frequenze massima e minima (in al- tre parole la nota) che dovranno essere emesse In 3040 viene invece fissata come forma d’onda quella a dente di sega. In 3050 é introdotto un ciclo di ritardo che costituisce la durata tempo- rale della nota. Infine il suono viene azzerato ¢ si ha il RETURN. Nella subroutine 1000 @ invece generata la scala musicale che accompa- gna il titolo: il procedimento di generazione del suono é analogo al pre~ cedente, con I'unica differenza che i due valori di frequenza (A = alta, B = bassa) vengono letti ogni volta dai DATA e dopo la lettura dell’ul- tima coppia di valori (-1, =1) si ha in 1050 un RESTORE € quindi una rilettura dei DATA dall’inizio. Cid permette di eseguire pit volte la stes- sa scala musicale, Torniamo ora al programma con alcuni rapidi commenti In 265 vengono dimensionate le variabili con indice X ed Y e possono es- sere trattati poligoni con un massimo di 100 vertici. Quindi, dopo aver definito AS, in un ciclo FOR NEXT sono prese in considerazione successivamente le prime K battute di A8, viene emessa una nota per mezzo della subroutine 1000, e viene cancellato lo scher- mo. II calcolo dell'area @ ottenuto col procedimento gia visto, mentre quello del perimetro si ottiene semplicemente calcolando per ciascuna coppia di vertici consecutivi la lunghezza del lato con la formula della distanza fra due punti. 1 flag F serve per evitare di stampare le coordinate del primo punto (lines 280-300) prima che esse vengano battute (sic!). Infatti ho ritenuto necessario ricordare all’operatore quali sono le coor~ dinate iniziali, perché mi accadeva spesso di dimenticarle e di non riusci- re quindi a chiudere il poligono. 49 CAPITOLO QUARTO. Ancora matematica Proseguiamo la trattazione di programmi su argomenti matematici con la SOLUZIONE DELLE EQUAZIONI ALGEBRICHE Permette di individuare le soluzioni reali (se ce ne sono) di una qualun- que equazione algebrica razionale intera. Cive di tutte quelle equazioni che possono essere poste sotto la forma di un polinomio uguagliato a zero fe) = 0 L’algoritmo che useremo rappresenta una variante semplificata del me- todo di Newton (o delle tangenti), in cui le soluzioni vengono ottenute lattraverso un processo di approssimazioni successive (iterazioni). Consideriamo una generica funzione algebrica razionale intera vat) Le sue (eventuali) interse dell’equazione ‘on l'asse x rappresentano le radici reali fx) = 0 ANCORA MATEMATICA st Figure 9 Nella curva rappresentata nella figura 8 tali radici sono x=7 Fissiamo a piacere un valore x,: ad esso cortisponde il punto a della cur- va con coordinate A= (65 fl) La retta tangente alla curva nel punto A ha coefficiente angolare m =F) corrispondente anche alla tangente trigonometrica all'angolo 8 ‘Osservando il triangolo rettangolo ABC si ha inoltre che AB m= 90=55 e quindi si puo scrivere che AB S00) =e 32 ANCORA MATEMATICA Consideriamo ora il rapporto Fxo) SC) Si ha, per quanto detto, fsa) AB £'Go) ~ AB CB cB quindi effettuando la differenza fra x, ¢ tale rapporto, si ottiene x, (ascissa del punto C) Sx) = ‘F'Ga) Ripetiamo il procedimento prendendo il valore x, come nuovo valore di partenza, e calcoliamo fe Fe) € cosi via fino ad ottenere una successione di valori Tale successione converge rapidamente verso una delle soluzioni (nel ca- so considerato, verso la soluzione ©). Il procedimento cade in difetto se denominatore /"(x) si annulla per uno dei termini della successione. Pud anche accadere che l'equazione considerata non abbia soluzioni rea- |i, oppure (ma molto raramente) che sia necessario un gran numero di iterazioni, Ora possiamo passare all'analisi del listato. 10 REM COPYRIGHT IN BASIC 12 REM VIA SE2ZE 22 LATINA 14 /REM TEL. 487631 16 CLRSPRINT "a 18 POKEDs280, 1 :POKESSZa1 3 20 PRINT" SOLUZIONE DELLE EQUAZIONI ALGEERICHE™ 5 PRINTTABC7) "ECON TL RETODO OL NEWTON” SE FORK=1 TOAD 2PRINI m7 2NEXT PRINT 48 INPUT" MINDUBL’E” TL GRADO DELL” EGURZIONE" 6 38 LINCO) .BCG-1 68 PRINT'Oik — RIDUCI L“EOURZTONE SOTTO FORNA OT" ANCORA MATEMATICA 3 7e PRINT*POLINOMIO UGURGLIATO A ZERO.ED ORDINA I" 80 PRINT"TERHINI SECONDO LE POTENZE DECRESCENTI 98 PRINTWDELLA x. 100 PRINT"MNPOT FORNISCIMI 1 LORO VALORI + 105 PRINT") CBATTENDO @ AL POSTO DET COEFFICIENTI* Ae? PRINT") EVENTURLMENTE RANCRNTL?" 108 PRINT 110 FORKs@TOG 120 PRINTK¢1"© COEFFICIENTE =": INPUTACK? 130 NEXTK: 140 REM CRLCOLO COEFF. DERIVATA 150 FORK=@TOG—1 160 BcK>=CG-KIAACKD 178 NeNTie 180 PRINT" ORM GATTI UN VALORE DELLA x INTORNO" 198 PRINT"AL QUALE PRESUNIGILNENTE RITIENI Cl SIR" 200 PRINT"UNR SOLUZIONE (OSE NON HRI ALCUNR 216 PRINT*INOICAZIONE, UN YALORE AREITRARIO). 220 INPUT" me" 3% 223 PRINTIAECS)° MAIN ATTING OF PRETENZA z24 T=0 225 Peo PP=0 230 T=T1 240 REM CALCOLO VAL 250 FoRK=0r0o 260 FaPsAcko¥RTCG-KO 25 NEKTK s IFX=OTHENP=ACG? 278 REM CALCOLO VALORE DELLA DERIVATR 275 FORK=0TOO-1 2E8 PPSPP+ECKI#APCO-K-1> S80 NEXTK }1FX=OTHENPP=BCO-1 S16 REN TEST ANMULLANENTO OERIVATR 20. IFFP=OTHENSOR S50 REM NUOVO VALORE PER L’1TERRZTONE 340 Kxex-PePP E50 REM TEST SOLUZIONE ESATTA 560. IFX=xxTHENSSO 30 xenn 300 TFT>100THENSEo 590 GoTyze5 409 PRIRT"IHO TROVATO LA DERIVATA NULLA PER" 410 PRIN DUMB: =x 415 PRINT"M PROVEAMO CON UN ALTRO VALORE INIZIALE" 420 THFUT"DELLA x 7" 3RE 490 IFLEFTS (RS ,19="5" THENZZO 440 REN STAHPR RISULTRTO 450 PRINT"QMSOLUZIONE. X=" 60 PRINT"MORDINATA NEL PUNTO 470 PRINT*MDERIVATA NEL PUNTO =: 475 GOTOS30 450 REM SOLUZIONE NOW TROVATA 485 PRINT"GSORRY 11° 490 PRINT") AL TERMINE DI 160 ITERAZIONT NON HO! 500 PRINT" TROVATO ALCUNA SOLUZIONE, HA SOLTANTO +" Sie PRINT" MR =x 520 PRINT"EF GO ="P 525 PRINTF’) =P 536 INPUTMIMEPROVO CON UN ALTRO VALORE DIK" sR 340 IFLEFT#1 THEN2O@ 218 INPUT™#E IL GURRTO" S45 215. IFLENCS4S)C>1 THENZ10 228 PRINT'SDK ~ HRI SCELTO I SIMBOLI: "isis" "S21 230 PRINT*MORA VEDIANG IN QUANTI MODI DIVERSI &*" 240 PRINT "PUSS {BILE RAGGRUPPARLI 38 3." 258 PRINT" ALUE RAGGRUPPANENTI SONO CONSTRERATI" 260 PRINTDIFFERENTI SE HANNO" 270 PRINT"N I-ALMENO UN ELEFENTO DIVERSO" 280 PRINT” 2-ELENENTI UGUALI NA DISPOSTI 290 PRINT” " ORDINE DIFFERENTE™ 300 PRINT™AMTUTTI I RAGGRUPPAHENTI CHE &~ POSSTRILE" 310 PRINT*FORNARE SOND T SEGUENTI. =” 328 GUSURZZE0 330 PRINT" 340 PRINTSI$52553$,$1$925948,SZ5S3SS45, 915538545 358 PRINTSLSSSSS28, S1SS4S526, S2ES4ES36, S1ES4ES3S 30 PRINTSZS518538 , 528518548, S38S28545, 934519545 370 PRINTSZE535S15, 528545515. S35548S25, S38548515 SEB PRINTSSSS 15528, S48315528, 548528538. S455 19538 399 PRINTS 38528518, 548528518, S45S34S26, S45S3¥S 15 402 PRINT"8S0NO 24 RAGGRUPPANENTI." 410 PRINT*HESSI VENGONO CHIAMATI SDISPOSIZIONIS DI" 42@ PRINT"4 ELEMENTI DI CLASSE 3. 430 PRINT"HPIU” IN GENERALE SE Si HANNO SOG El 449 PRINT"HENTL. TUTTI T RAGORUPPAMENTI CHE ST 450 PRINT"POSSONO OTTENERE PRENDENDO OSNT VOLTA 460 PRINT" DI ESSI/S1 CHIRNANO:" 429 PRINT"MaDISPOSIZIONI DI N ELEMENTI DI CLASSE Ka" 480 GOsUB2268 490 PRINT@AIL NUMERO DET RAGGRUPPAMENTI VIENE’ Soa PRINT"INDICATO BREVENENTE CON IL SIMBOLO 510 PRINTTABC15)"a 520 PRINTTABCI6 "NK" nanectage Ww’ 58 ANCORA MATEMATICA 939 PRINT"MNMEL CASO PRECEDENTEMENTE ESAMINATO, SI HAM 54a PRINTTABCLS) "MD = 24" 390 PRINTTRBCLE)"4, 3! Sea PRINT"AICIUE’, DATE 4 ELEMENTL,PRENDENDOLI fl 3 A" E POSSIBILE COSTITUIRE 24 DISPUSI~' ONL DIVERSE." 399 GOSUEZZ60 809 PRINT'SE’ POSSIBILE CALCOLARE IL NUMERO DI" 619 PRINT"DISPUSIZIONI DI SN ELEMENTI DI CLASSE’ 628 PRINT" CLIUE” PRESI K A K)-APPLICANDO LF 30 PRINT"FORMULA, SEGUENTE:" 649 PRINTTRECS)"HMD. =H#CN=L) #2) RNS). 659 PRINTTRECE) "Nk 660 PRINTTREC 67a PRINTTRE( 17)"MK FRTTORI 889 PRINT" ULTING FATTORE DEL SECONDO MEMERO E*" 698 PRINTIRECIS)"MN-(K= 101" 709 PRINT"M:HE SI PUD’ ANCHE SCRIVERE PIU’ SENPLI-" 719 PRINT" CEMENT 720 PRINTTABCIS)" MCN-K# 1)" 738 GOSUB2260 240 FRINTODUINDI LA FORMULA FER CALCOLARE IL 250 PRINT"NUMERO DI DISPOSIZIONI DIN ELENENTI 769 PRINT"DT CLASSE KE” -* 270 PRINTTABCS>"HMD =NACN=1)RCHH2>. CHEK EL" 788 PRINTTRECS>"N, K 739 INPUT" HWUGL RIVEDERE QUESTT ULTIME PRSSAGBE"IRRE 309 IFLEFTS(PRE,1)="5"THEN230 319 PRINT'SK E” SEMPRE MINORE OTN." E INVECE K=N (CIOE” SEIN CIASCUN* RAGGRUPPANENTO PRENDIANO OGNT VOLTA UTTE_BLI_N ELEMENTIG. >, 1 RAGGRUPER~" 85a PRINT*NENTT STESST PRENDONO IL NOME DI: SeQ PRINTTRECS)"M3PERNUTAZIONT DEGLI N ELEMENTIS 87) PRINT BFOICHE | NELLA FORNUL® FRECEENTE” ULTINO FATTORE EB SEMPRE 1." 898 PRINT" BDUIND! ‘39 PRINTTREC 1G) 31a FRINTTRBC LL? 320 PRINT"MIL RISULTATO DI QUESTA ESPRESSIONE" 332 PRINT"VIENE ANCHE INDICATO CON IL SIMBOLO" 349 PRINTTABCIS) MN 1" 950 PRINT"AEHE SI LEGGE SY FATTTORIALES WCHL 9H Pr 360 GOSUB2260 JIN CLASSICO ESENPIO DI PERMUTAZTONT €7" SQSTITUITO DAGLI ANAGRAMMT DELLE PRROLE" 390 PRINTLE CUE LETTERE SOND TUTTE DIFFERENTI" 1000 FRINT"FEA LORD. 1029 INPUT"STICHE"; 28 1033 Y=LENCZ5> 1119 TFYOSTHENPRINT APERO ‘RTTENCIONE: SOND MCLTE!" 1128 IFYSETHENPRINT*MCAHIME” 1! SOND MOLTISSINE! 19" 1138 GUSUEZ2ER PRINIZS ANCORA MATEMATICA 59 +28 + 1160 IFJCOTHENI22a (41 [EPC DY I=L THEN CJ) 28: Je Jn1 | GOTOL LED FORJ=OTO¥=1 AGE=AGEAMIDTCZZS-PCID4S, LD O ZZH-LEFTH(228,PCI)42)+HINSC22EPESING) 1200 HEXTS PRINTRDS, i219 goTo1isa 4220 PRINT PRINT*HPFULL 111" 1238 PRINT: INPUT*RVUDT PROVARE CON UN-ALTRA PRROLAN: PRE 1240 IFLEPTSCRRS, L>="S"THENCLR: GOTOS7O 1253 GSS" stuusdemUieeei 1250 DATARE, ACE, BAC, BCA, CRB, CBR. ABD ADB, BAD, BDA, DAB, DBA 1270 DATARCD, AGC, CAD, COA, DAL DCR, BCD, BDC, CBD-CUE, DEC» DCB 1280 PRINT"SOCCUPIANOCI ORA DELLE ‘COMBINRZIONIG. 1290 PRINT*HHIN PRECEDENZH FBBIANO VISTO CHE DRT 4° 1300 PRINT"ELENENTI (PER ESEMPIO LE 4 LETTERE" 1319 PRINT'AA EC D@),LE DISPOSIZIONI MI CLASSE 3" 1322 PRINT*SOND 1330 PRINTTAEC15 "0 2am 1340 PRINTTABC 16) "4,2" 4350 PRINT"MCIOE’ SONO 1 24 RAGORUPPAMENTI... 1380 GOSUB2260: GOSURZ290 1378 GOSUBZ358 1988 PRINT'MSSERVANDO LA TABELLA PUDI NOTRRE CHE® 1390 PRINT"IN CIRSCUNA COLONHA CONPAIOND SEMPRE’ 1409 PRINT'GLI STESSI 3 ELEMENTI ORDINNTI IN TUT PRINTE SEI T MODI POSSIBILI. E- IN CIRSCUNA FRINT"PRENTI. 1469 GOSUR2260: GOSUBZ360 1470 PRINT"INVECE [ 4 RAGGRUPPAMENTI ALL’ INIZTO D1* 1480 PRINT"OGHT COLONNR.... ‘GOSUEZ260 1490 GuSUBZ250: GHSURZS50 1900 PRINT"RCOSTITUISCONO LE SDOMBINAZIONIS DEL 4” 1510 PRINT"ELENENTI CR.B)C.) DI CLASSE 3, 1520 PRINT"RLE CONBING2IONI DIFFERISCOND DALE” 1530 PRINT"RAGGEUPPAMENTI SONO DIVERSI ‘850.0 SED 1540 PRINT"SCONTENGONO ALMENO UN ELEMENTO DIVERSOS, * 1550 PRINT"NHEL NOSTRO CASO LE COMBINAZIONI COR" 1560 PRINT"RISPONDONG AI $ RAGGRUPPAMENTE. IN" 1570 PRINT*REVERSE. " : GOSUBZ260: GuSUBZ360 1580 PRINT"GUINDI-OSSERVANDO LA TABELLA,LE 4 COM" 4590 PRINT"EINRZIONI DI CLASSE 3 MOLTIPLICATE FEF 1609 PRINT"LE DISPOSIZIONI DI 3 ELEMENTT CCINE” LE 1618 PRINT"4 COLONNE FER LE 6 RIGHE»,DANNO IN TO: 4620 PRINT"TALE LE 24 DISPOSIZIONI CDI 4 ELEMENTI™ 1690 PRINT"DI CLASSE 3)." DOSUB2260 1648 PRINT"DIUESTO EON RISULTATD CHE PUD” ESSERE 1658 PRINT*ANCHE SCRITTO COSI”: 1660 PRINT “MOL, COMBINAZ, #NUM. PERMUT. =NUM DISPOSTZ. i670 PRINT "Him LE” 1580 PRINTTAECI2>"m>43!=0" 1680 PRINTTAB(I9)"4.3 4.3" $700 PRINT sl) ANCHE iPt0 PRINTTAEC21 1r40 PRINTTABCI6?"4,3 3! 4750 PRINT" MGENERAL I22ANDO, 5 $760 PRINT*2" PRINTTABC24 )"D! =" G08UB2260 178 1780 1730 1820 1810 1328, 1830 1840 1850 1850 1878 1338 1238 1300 1310 1320 1330 1340 1358 1360, 1370 1330, 1338 2000 2a1a 2220 2030 2040 2050 2e60 200 2080 2090 2100 zie 2128 ANCORA MATEMATICA, PRINITABC22 "N/K" PRINTTRECIS)"C =——* PRINTTRECIE)"N-K __K! PRINT"MICHE PERNETTE DI CALCOLARE TL NUNERO DI PRINT*COMBINAZIONI DI 8S ELENENTI DI CLASSE SKS! PRINT*MIL RISULTRTO DEL CALCOLO VIENE ANCHE" PRINT"DETTO |CGEFFICIENTE BINOMIFLES ED INDI~ PRINT"CATO_CON IL SIMBOLO :" PRINTTRECIS)"#/ N \" PRINTTREC 15) PRINTTAECIS)"\ K 7” PRINT*MCHE SI LEGGE SN SU Ka." BOSUB2260 GUSURAI5 PRINT*AMOLTIPLICANDO NUNERATORE © DENOMINATORE PRINT"DI GUESTR FORMULA FER" PRINTTRECIS) "RCH-K>!™ PRINT"MSI OTTIENE. PRINTTREC13)""/ HS, Nt PRINTTRE¢13) re PRINTTRECI2)"\ K 7 KIGNCK)!" BOSUB260 -BUSUEZSER PRINT'NPER CONVENZIONE $1 PONE :" PRINTTRECE "8 @ \ ZAN yu PRINITARCS)"I = 1 PELL PRINTTRECE)"\ 8 / NA Sr Gusunze6a INFUT*GvUOL RIVEDERE CUESTI ULTINI PASSAOEI" RS IFLEFTS(RS, 1)="S" THENI259 PRINT"OK ~ GRA VEDIFNO SE SAL APPLICARE LA PRINT®FORMULA PER OTTENERE IL NUMERO DI COM PRINT"EINRZIONT ‘805UB2350: PRINT Ne INT CLS#RND C141): KeINTCLS#RNDCL) +1) TENCKTHENZOS6 PRINT"MINSE N="N" E K="K PRINT"MQURNTE SONO LE COMBINAZIONT DI “H PRINT*ELEMENTI DI CLASSE "K "7" FaN'G08UB2420° X=NF F=K: GOSUE2420: YF FN-K :G0SUB2420:2=HF ReK/Cy#Z) INPUT" NMRISULTATO. ="3RR. IFRR=RTHENGOSUB2360 ‘PRINT :OOSUB2490 :D0TD2220 GOSUEZS69:GOSLEZSO0:PRINT"ALA RISPOSTA GIUSTA EX PRINTTAEC18) "HR PRINT :GoTG2223 INPUT" MVUOT PROVARE ANCORA RE IFLEFTS(RE, 1 HENPRINT"20" PRINT: GOTOZO49 PRINT"SDK ~ CIAO!" END PRINT'NCPREMT UN TASTOD" GETRS: IFAS=" "THENZZ79 RETURN REM-STANPA DELLE DISPOSI PRINT!" :FORK=1104: PRINT" IFF=1ANDJ=1THENREANCS :F RINTTABCEAK) READCS PRINTTABCEMOCS NEATJ:NEXTK. RESTORE: RETURN FORK=11040: PRINT" REM-CANCELLAZIONE. as PRINT" Stone ce"e" G0T023360 NEXTK RETURN ANCORA MATEMATICA 6 2390 FORK=1TO15:-PRINTOS NEXT 2400 PRINT *Sieeeeee” 2416 RETURN 2420 REM-CALC. FATTORIALI 2430 2440 2458 T=141 2460 IFI<=FTHEN2440 2478 RETURN, 2480 FORJ=1T010: PRINTOS"GIUSTO!":FORY=1TO100 NEXT | PRINTOS 2430 FORY=1T0100: NEXT: PRINTOS "CHERT: RETURN, 2500 FORJ=1TO1G. PRINTES"SBAGLIATO! ":FORY=1T0100: NEXT PRINTOS" RSBAGLIATO! 2518 FORY=1 T0100: NEXT PRINTOS" NEXT RETURN p1USTO! = In questo programma vengono dapprima spiegati i concetti di disposizio- ni e di permutazioni. Dopo che loperatore ha introdotto quattro simboli (letterali, numerici o graficly AS, BS, C$ e DS (linee 160-190), si ha la stampa della tabella contenente tutte le disposizioni dei 4 elementi di classe 3. Poi viene for- nita la formula che permette di calcolare il numero di disposizioni di N elementi di classe K. Come caso particolare delle disposizioni (quando N = K) si perviene alle permutazioni e al concetto di fattoriale. ‘A questo punto, come applicazione, battendo sulla tastiera una qualsiasi parola, il Commodore 64 fornisce tutti i possibili anagrammi (cio® le permutazioni) della parola dopo aver calcolato quanti essi siano. Per l'elaborazione degli anagrammi (linee 1140-1220) abbiamo usato una ingegnosa routine ideata da S.H. Binns.! La parola da anagrammare é 28 Essa viene trasformata in una seconda stringa ZZ8 uguale alla precedente ‘ma preceduta da due asterischi (che hanno lo scopo di impedire che l'ar~ gomento di LEFTS nella linca 1190 divenga nullo). La variabile J corrisponde alla lunghezza della parola iniziale, meno uno. La variabile P(J) non @ dimensionata, e se desiderate anagrammare pa- role composte da pit di 10 lettere non avete che da introdurre il dimen- sionamento. In 1180 anagramma AGS viene “azzerato"’ prima di passare all'elabo- razione dell’anagramma successivo. L’elaborazione termina non appena la variabile J assume il valore ~ La trattazione del calcolo combinatorio viene completata in questo programma con lo studio delle combinazioni. Questa volta il quadro delle disposizioni viene eseguito con la tecnica dei DATA, in modo da poterle stampare una volta in modo normale (con XE pubblicata nella posta dei letori della rivstainglese Procical computing hago 1980), 62 ANCORA MATEMATICA due cieli FOR NEXT uno dentro altro), ed una seconda volta con i rag- gruppamenti all'inizio di ogni colonna stampati in reverse per metterli in evidenza. id si ottiene con i flag F = 1 nella linea 1480. La parte deserittiva in cui si spiega come si perviene al calcolo dei coefficienti binomiali, sfrut- ta la subroutine 2360 nella quale lasciando intatta la meta superiore del- lo schermo, viene cancellata solo quella inferiore. Cid é utile quando, scritta una formula o una tabella, 1a si vuole com- mentare in modo che essa rimanga visibile durante il commento. Alla fi- ne, scelti due numeri (Ne K con N2K) a caso, il Commodore 64 propo- ne all’operatore di calcolare il numero di combinazioni di N elementi di classe K. Dopo aver controllato se la risposta & giusta 0 sbagliata, a cau- sa delle subroutine 2480 ¢ 2500, si ha una conferma lampeggiante. CALCOLO DELLE PROBABILITA Questa é la seconda ¢ ultima “lezione" sul calcolo delle probabilita. La considero un completamento della precedente perché spesso il nume- ro di eventi possibili favorevoli si ottiene applicando i concetti det cal- colo combinatorio. Sarebbe forse stato opportuno, per esaurire l'argomento, sviluppare an- che un programma che trattasse le disposizioni e combinazioni con ripe- tizione. Lascio al lettore volonteroso questo compito del resto non difficile. 10 REM COPYRIGHT IN ERSIC 12 REM VIW-SEgzE 22 LATINA 14 REM TEL. 45763 5 CLR:PRINT "Fa" POKES2280.10 POKES3281,3 PRINT" S690 +RRpRERRAI IH KRHA RAE RKAME HAHAHA! PRINT" pm S PRINT" i AQ PRINT" BSB Ow BS Oe 45 PRINT" = MBE OB Sse 8 Hie eae i DELLE PRINT" 4m 50 PRINT! 24 85 PRINT" PRINT"26M i ap 30 PRINT" ae 55 PRINT" RARER EERE Kare 100 PRINTTABCLL) "NK PREME UN TRS I> 105 GETAS IFAS=*" THENIGS 118 PRINT'CKPRENDIAMO IN CONSTDERAZIOHE UN EvENTO™ ANCORA MATEMATICA 63 139 149 159 160 178 180 198 208 21a 228 238 240 250, 258 278 2e0 238 308 318 328 338 8 350 368 378 PRINT"LA CUI POSSIBILITA’ DI AYVENIRE DIPENDAM PRINTESCLUSIVARIENTE [AL CASO." PRINT"PER ESENPIO LA POSSIBILITA’ CHE GETTAH PRINT"DO.IN ARIA UNA HIGHETA ESCA TESTA, 0 CHE” PRINTTIRANDO UN DADO ESCA S. BOSUEGOBGD PRINTS" PRINT'INDICHIANG CON SVE IL NUMERO DI TUTTI" PRINT"GLE EVENTI POSSIBILI <2 NEL CRED DELLAY PRINT'HONETA € 6 NEL CASO DEL fiRlO), & CON 3 PRINT"IL NUMERO DI EVENTI FRVOREVOLT FRA” PRINT"TUTT QUELLI POSSIBILI (F=1_ SIA HEL" PRINT"CASO DELLA MONETA CHE TEL DADO). "” PRINT PRINTSI DEFINISCE SPROBABILITA” DI UN EVENTOS" PRINT"CIOE’ UA FROBRBILIVA’ CHE ESS0 HA DL" PRINT!VERIFICARSI, IL RAPPORTO" PRINT:PRINT:PRINTSPC(19)°F" PRINTSPCCL4)"P = —" PRINTSPC (13) "N" PRINT PRINT PRINT"IL RISULTATO DI TALE PRINT"NUNERO CHE RISULTA PRINT"ZERO Ell UNO." GOSUBSOBR: PRINT" PRINT*NEL PRIMO CASO LIMITE AVKEND LAY PRINT"CERTEZ2A CHE L/EVENTO NON POTRH” VERI~* PRINT!FICARS] MAI, HENTRE NELL’ALTRO CASO" PRINT*LIMITE CP=1) L’EVENTO ANVERRA’ SICURR: PRINT*HENTE. PRINT"#ESEGUENDO LA DIVISIONE E/N LE PRIME! PRINT*DUE CIFRE DOPO LA VIRGOLA RAPSRESENTAN( PRINT*LA PROBREILITA’ IN PERCENTURLE. PRINT!MSESENP LO" PRINT"@CRLCOLIANG LA PROBABILITA’ CHE GETTAN= PRINT"DO UN DRDO ESCH UN NUMERO MAGGIORE DI 4" APPORTO E* UN MPHE COMPRESO FRA PRINTTAB(S)"MGLI EVENTI FAVOREVOLI SOND 2" PRINTTAR(12>" IU CINGUE E IL SEI)" PRINTTRECS)"NENTRE GLI EVENTI POSSIBILI SONO 6 PRINTTHECLe>"<(LE SEL FACCE DEL DRiO)" GosuzeeaGa. PRINTVCLA PROBABILITY E” GUINDI * PRINT “A PRINT? PRINT! PRINT "M010 «circa PRINT*MINFATTI LE PRIME DUE CIFRE DOPO LA VIR-" PRINT"GULA ESPRINONO LA PROBABILITA IN PER" PRINTCENTURLE, " PRINT*MMIUESTHE’ LA DEFINIZIONE TEORICAS DI" PRINT*FROBHEILITA’ © PUD" ESSERE CALCULATH™ PRINT"SPRIMAG CHE L’EVENTO SI VERIFICHI. PRINT*ARCCINGIAMOCT ORR A VERIFICARE SPERIMEN~ PRINT"TALMENTE QUANTO ABBIANG ASSERITO.” ‘posUBEBeB PRINT'SFRENDIANO UN DADO € LANCIAMOLO UN" PRINTCERTO NUMERO DI VOLTE." INPUT"GURNTE YOLTE LO YUOT LANCIARE":A DINvGRD PRINT*MK — PREM ABPECES PER LANCIARE IL DADO" GETIS: IFIS=""THEN6?0 PRINT: PRINT: PRINT GUSUBSae28 PRINT" TTTTITY" GoToe7 Pome 19999393, ANCORA MATEMATICA 700 PRINT"AMMMNHAT LANCTATO TL DADO": "VOLTE TOTALIZ-" 219 PRINT"ZANDO I SEGUENTI RISULTATI 215 PRINT: PRINT 72 FORK=ATOT~2:PRINTD(K): 723 IEDCK)>4THENI= IHL 724 NEXTK 725 PRINT 730 GOSUBso@0R 258 PRINT"OB0ND STATI ESEGUITI FL; "LANCI -QUINDI" e0 PRINTTAR< 1S) "a=" A P70 PRINT*MNDET QUALI, SOLYANTO" J; "ERRNO SUPERTORT 780 PRINT" 4 QUINDE™ 290 PRINTTABC 1S)" MME=" 5 J BBO PRINT"MMIL RAPPORTO FAN FORNISCE COME RISULTATO" 810 G=J/A, 20 PRINTTAB( 1a) "FCN =" 50 800 PRINT'NMCHE VIENE DEFINITA SFREOUENZAG DEL-" B49 PRINT"L“EVENTO SU SN PROVE." 850 GuSuUBSg009 Se0 PRINTISLA PROBABILITA’ (CALCOLABILE, SERINE" S60 PRINTHFREQUCIIN LELU/EVENITO. GU" sr “PROVE © 690 PRINT” AFFERHA CHE:® 340 PRINT"ARPIU ALTO E” IL NUMERO MDI PROVE" 388 PRINTEFFETTURTO E PIU? LA FRECUENZA Fan)" 60 PRINT"SI AVVICINA AL VALORE TEDRICD P™ 320 PRINT"SMGVUCL RIPROVARE ALANCIARE IL DADO PER’ 380 PRINT*UN NUMERO MAGGIORE DI VOLTE,PER VERIFI- 390 INPUT"CARE CHE FQN) —o PMRS. 1000 IFLEFTS(RE, 1)="3"THENCLR: GOTOE20 1918 GOSUESBaRO 1020 PRINT*SPERO’ SE_IL NUMERD DI LANCI E” BASSO" 1050 PRINT"NON CI POSSIAND ASPETTARE CHE F«H) SIR" 1049 PRINT*UGURLE 0 GURSI 9 PRINT"SONG MAT USCITE NUMERI PIU’ ALTI DI 4" 4030 PRINT"CA PROBABILITA’ CHE CIO” AVYENGA NEL" 1100 PRINT"CANCIO SUCCESSIYO RESTA SEMPRE" 1110 PRINTTAB(15)""P=, 3393533" 1120 PRINTTAB(300" rinse INES 2000 END 40000 REM-SUBROUTINE PER LANCIO DRDO 49020 D=INTCRNDCL) #6941 :DCT2=D: T=T+1 IFT=At 1 THENGOTOPOO 40030 ONDGOSUB4IS40, 41520, 41509,41539, 41539, 41530 40046 ONDGOSUBS1510, 41540,41510, 4154041510, 41530 40050 ONDGOSUBSIS40, 41500,41520-41520,41530,41530 49060 RETURN 41500 PRINTTAB(15)" ae." RETURN, 41518 PRINTTRBCLS: RETURN, 41526 PRINTTRECIS) "ae": RETURN 41539 PRINTTAB(IS)" ae @" RETURN 41540 PRINTTABCIS>" a" RETURN 62006 PRINT"MCPRENI UN TRSTO PER SEGUITARE)" 60010 GETRS: IFRS=""THENSOO1G 62628 RETURN ANCORA MATEMATICA Hl programma @ di facilissima interpretazione: la prima parte @ descritti- va, ¢ vengono spiegati i concetti di probabilita teorica e di frequenza sperimentale. Alla fine viene preso in considerazione un dado ¢ operatore deve stabi- lire quante volte lo vuole lanciare, Poi il dato viene effettivamente lanciato (si fa per dire: comunque esso viene visualizzato sullo schermo) per il numero di volte stabilito, ¢ viene calcolata la frequenza sperimentale registrata sulla totalita dei lanci. Si pud constatare in questo modo che la frequenza tende alla probabili- 18, all’aumentare del numero dei lanci. La subroutine per la visualizzazione del dato & la 40000. Prima viene scelto un valore a caso D compreso fra I ¢ 6. ‘A seconda del valore di D le linee 40030, 40040, 40050 inviano il Com- modore 64 ad ulteriori subroutine (41500-51640) per formare tre stringhe (di tre caratteri ciascuno) che stampate una sotto l’altra costituiscono la facia del dado. 65 MATEMATICA PER | PIU ESPERTI Liintestazione del paragrafo forse un po’ esagerata: i tre programmi che seguono sono comunque alla portata di uno studente delle scuole se- condarie, Si tratta di un programma sul calcolo con le matrici, di uno sulle coni che in forma generica, e di uno sulla esecuzione del grafico di una fun- Con essi si conclude la prima parte di questo volume dedicata alla mate- matica, Calcolo con le mat Una matrice € una tabella di numeri disposti a rettangolo su un numero di righe e un numero c di colonne. Per esempio 3-5 0 8 -1 4 2 2 74 9 0 € una matrice con 3 righe e 4 colonne. Ad essa non corrisponde alcun valore numerico, tranne il caso in cui il numero di righe é uguale a quel- lo delle colonne, ¢ allora il risultato si chiama determinanie ¢ la matrice viene detta quadrata. 10 2 13 16 2a 40 sa ANCORA MATEMATICA, Le matrici possono essere combinate fra loro con operazioni di somma, sottrazione e prodotto. Questo programma permette di eseguire le operazioni con le matrici e di calcolare il determinante delle matrici quadrate fino al quarto ordine. REN COPYRIGHT IN ERSIC REN VIR SEZZE 22 LATING REM TEL. daveat POKE53230, 19 POKES3281,3 CLR: PRINT "saa PRINTTRECS) "¥MACALCOLO CON LE MATRIC PRINT'MMSCEGLI FRA LE SEGUENTI POSSIBILITA’ :" 0 FRINT“al 1-SOnHA 70 PRINT" 2-DIFFERENZA" 80 PRINT" 3-PRODOTTO SCALARE FRA MATRICI™ 30 PRINT" 4-TRASPOSIZIONE DL UNA HATRICE™ 109 PRINT" 5-S0LUZ) 118 PRINT mm! 120 GETAS: IFA 130 REVALCRE) = IFRCLORA>STHENLZO 149 ONAGITOLeaa, 26a, 3000, 400, S886 1oa0 REM-SOnNA FRR PATRICT 1010 GOSUEI 1800 1e20 LA MATRICE RISULTANTE DALLA SONNY ies PRINT: GOSUB12000:PRINT PRINT 1648 Toc 1888 CCK, J)SACK DD4BCK TD LOEB PRINTCCK, 195 1070 NEXTS ‘PRINT ‘PRINT: NEXTK 1020 PRINT :GOSUB12800:PRINi “GOTO13008 2000 REH-DIFFERENZA FEA NATRICI 2012 GOSUBI 1898 2029 PRINT'ODK ~ LA MRTRICE RISULTANTE DALLA DIFFE~" 2038 aaa 2030 2068 PRINTCCK, 397 2070 HEXTJ PRINT -PRINT !NEXTK 2ea0 PRINT: GOSUB12000:PRINT :GOTO136ee 3000 REN-FRODOTTO SCHLARE FRA MATRICI 3010 PRINT"SJal* MRTRICE O15 INPUT"MIURNTE RIGHE*;R1 3820 INPUT"MUENTE COLONNE® C1 3025 PRINT ie" MATRICES" 3030 INPUT"MDURNTE. RIGHE":R2 3040 INPUT"MUANTE COLONNE” 3c2 3060 PRINT"DK = ORR BATTI GLI ELEMENTI © 3070 PRINT: GOSUB12000: PRINT: PRINT ‘388 NERZ: IFC1>R2THENN: 1 3085 DINRCRL/N) EN, C2),C¢R1.029 308 RINT 188 R=RL wal* MATRICE@® PRINT. S05UB 18900 i 3110 PRINT™Ma* MATRICE@" PRINT 3120 RERZ: C2:HE1 | GOSUB 10008 3130 PRINT"DOK = LA MATRICE RISULTANTE E/ :* :PRINT:GOSUB12000:PRINT*PRINT S140 FORK=1 TORI: FORJ=1 102 3156 FORNL 3160 Ck. TON CK, D4 ACK NEDABENE JD 3178 NEXTNL 3180 PRINTOCK, 3s ANCORA MATEMATICA, 6 3130 NENT: PRINT :PRINT:NEXTKC 4200 PRINT PRINT GOSUB12000 ‘PRINT :GOTO13000 4900 REF-HATRICE TRASPOSTA 4010 INPUT"QQUANTE RIGHE HALA MATRICE":R 4820 INPUT*RE GUBNTE COLONNE™ sc 4038 DIMACR, C), BCC, R> 4040 PRINT"DOK’ = BATTI GLI ELEMENTI :" PRINT: GOSUB12000:FRINT:PRINT 4050 H=2:G0SUB10000 $060 PRINT"DOK = LA NATRICE INVERSA E’ :":PRINT:GOSUB12000:PRINT:PRINT 4030 FORK=1T0C : FORJ=1TOR 4180 BK, D=ACL KD 4118 PRINTBCK, J>; 4120 NERTJ: PRINT PRINT:NEXTIC 4159 PRINT: SUSUB12000:PRINT -G0TO13000 5888 REN-SOLUC.MATRICE URDRATA SOL0 PRINT'SFOSSO RISOLVERE MATRICI QUADRATE FINO" 5020 PRINT"AL 4" ORDINE." S625 DIh4. 4) 3030 INPUT"MIUALE ORDINE TI INTERESSA":N 5040 IFNC2ORND4THENPRINT"HNON ESSERE SCIOCOO!™ :coTOSa3a 5850 PRINT'DK = ORR BATTI TUTTE GLI ELEMENT! :" PRINT :GOSUB12@00 :PRINT:PRINT 5050 NSINTCHD=1: ONNGOTOEODB, 7068, 5088 6008 R=2:C=2:H=2:GOSUBLB000 S010 DCL, L9#AC2, 2-1, 29#HCZ, 1 S02 PRINT*TIL DETERNINANTE E” 5030 PRINTTABCIS)""MKD = "D 2049 PRINT: PRINT: GOSUB12000: GOTO13000 7000 R=3:C=3'H=2: GOSUBLeRBD PDLG DISACL, L¥CACZ, 2943, 39-AC2, 3AACS., 29 2) NZL Z*CRCS, 1)#ACZ, 39-HCZ, L)¥ACS, 29) 7039 D3sAC1,394(ACZ, 1)8ACS, ZI-HCS, 1)#ACZ 2)» 7040 D=DL+n2+0g @ PRINTCIL DETERMINANTE E° :* 7060 PRINTTABCIS)"MMD = "D 7070 PRINT PRINT GOSUB12000: GOTO19908 2000 ‘GOSUB1 0000 (2, 2# ACB, 3) #4, 4)-AL4,39KACB/ 4? 2) 2)¥CHC3.2)¥RC44-AC4, 24RC3,4)> (2) 4) #CACS, 2)¥AC4, 3)-AC4, 29HAC3, 3) 2040 D4=AC2, 143, 3) #4, 4)-AC4. ARCS, 4) 8090 DSAC2, D¥CACS, DARCS, G-ACS. DARE 4), 8060 DEC, 4* ACS, D4RC4, 39-AC4, ARCS. 39) 2078 D7=ACI. 1)#(DI—D2403) “hS=AC1,294(D4—05+06) 3030 CL=AC2, #3, 24AC4, 49-4 2DKACS 4)? 2090 C2=ACD, D¥ACZ, LACS. 4A, DAAC 4) 2100 CIACD HACE, LRRCG, 27-AC4, LARS 2) BU C42, 4H, 24AC4, 39-AC4. 204HC3, 3)? 3120 2)MCACS, 1)4AC4, 39-4, 19403, 3) 2) 30463, DARGA, 29-4, LIRR 12) 1 DAC CACS CED 2160 PRINT'IL. DETERMINANTE E’ °* 3170 PRINTTAECIS) "xD = "D 2188 PRINT PRINT ‘GOSUB12000: GOTO 3000, 2200 END $0000 REM-RIEMPIMENSO MATRICT COLONNA™: “INPUTBCK, J> CQLONNA: INPUTACK, 2D 10030 IFHEITHENPRINT™ NN RIDA EN! 10040 IFH=2THENPRINT! MK" RIGA E"T 10059 NEXTJ :NEXTK RETURN 11000 REM-SOMMA 0 SOTTRAZIONE ANCORA MATEMATICA, 11010 PRINT*LE DUE MATRICI DEVONO AVERE LO STESSO" 11028 PRINT*MOMERO DI RIGHE E COLONNE. "/G0SUB12600 11930 INPUT" MQURNTE SONO LE RIGHE":R $1040 INPUT" ME LE COLONNE"C 11858 DIMACR,C), BR, E),C4R, 6) [1868 PRINT*SOK = ORA BATTI T VALORI DEGLI ELEMENTI" cosUBL2G66 11978 FORH=1TO2 11088 PRINT" Sa* HI MATRICES! SOSUEL0000 NEATH RETURN REN-LINER ORIZZONTALE A=" FORT=17040:PRINTRS: *NEXTT RETURN REN-RICHIESTA DI. CONTINUAZIONE PRINT "MRVLIO GETRE TFAg="S) PRINT" Fino alla linea 140 c’é la descrizione delle opzioni ¢ I'invio alle linee 1000, 2000, 3000, 4000 e 5000 a seconda del calcolo che si vuole fare. I programma prineipale finisce alla linea 8200: poi c’é la subroutine 10000 per il riempimento delle matrici, 1a 11000 per dimensionare ¢ riempire le ‘matrici nelle operazioni di somma e sottrazione, la 12000 per tracciare le sbarre orizzontali, ed infine in 13000 ¢’é la richiesta di continuazione. Vediamo come si realizza la somma fra matrici (linea 1000). La 1010 invia il Commodore 64 alla linea 11000 dove bisogna specificare il numero di righe € colonne delle due matrici (Iinee 11030 e 11040). Poi vengono dimensionate tre variabili con doppio indice: A ¢ B che servono per accogliere gli elementi delle due matrici, pit la variabile C che serve per rivevere i risultati dell’operazione di somma. Nelle 11070-11100 con un ciclo FOR NEXT vengono trattate prima la matrice A ¢ poi la matrice B facendo ricorso alla subroutine 10000. Questa, come gid detto, serve a riempire ciascuna matrice con i valori battuti dall’operatore. Poi si torna alle 1020 € 1030 (che non hanno bisogno di commento), ¢ finalmente con un ciclo FOR NEXT viene costituita la matrice C con la somma dei valori corrispondenti che si trovano in Ae B (linea 1080). Man mano che tali risultati sono calcolati, vengono anche stampati gra- zie al comando della linea 1060. Il punto e virgola serve per stampare consecutivamente gli elementi di una stessa riga, Alla fine si ha il salto in 13000 per la richiesta di proseguimento. La differenza fra matrici (linea 2000) viene ottenuta con lo stesso identi- co procedimento. Passiamo al prodotto scalare fra matrici. iano date per esempio le due matrici

Potrebbero piacerti anche