A mia madre Gerardina, a mio padre Raffaele Perché, per prima, si pensa a chi non c’è più A mia moglie Antonietta Il mio presente A mio figlio Raffaele, a mia figlia Ilary Il futuro Ai miei studenti Perché è per loro che ho scritto Intro Dopo numerosi anni di insegnamento ho deciso di scrivere quelle che io chiamo dispense per facilitare lo studio di una materia così articolata e complessa come l’Informatica; un testo che fosse tagliato per il corso di studi cui vi avvicinate, che riportasse il necessario, eliminasse il superfluo e che, soprattutto, parlasse la lingua del docente. La mia esperienza di studente informatico, ormai molto lontana, mi porta a ritenere che disporre di una dispensa scritta dallo stesso docente che tiene il corso è la miglior cosa per lo studente, che non è costretto a gestire appunti e libro, linguaggio del docente e linguaggio del libro, difficoltà per individuare cosa fare, cosa non fare, cosa approfondire; a questo si unisce il vantaggio di non dover prendere quasi mai appunti durante le lezioni in classe, evitando di distrarsi dalla comprensione degli argomenti, sempre piuttosto complessi: seguire e capire, scrivere poco o niente. Apro una parentesi per dirvi che ancora oggi sono uno studente informatico, perché questa disciplina evolve con una velocità enorme e bisogna sempre aggiornarsi per evitare di diventare, come i computer, “obsoleti”. Allo sviluppo di tutto il lavoro ho applicato il principio che mi porta a trattare in maniera esaustiva un argomento nell’ambito dello stesso capitolo, anche quando la trattazione degli argomenti fa riferimento ad anni di corso diversi. In questo modo questa dispensa potrà, almeno spero, essere utile anche in seguito, per esempio per semplici esami universitari o pubblici concorsi, etc. Alcuni capitoli sono, pertanto, trasversali rispetto al corso che vi accingete a seguire e gli argomenti presenti in essi saranno trattati nel corso di più anni. E cominciamo con la prima lezione; vi invito: • ad arrivare in orario a scuola, • a seguire le lezioni con attenzione, • a studiare, • a rispettare le persone e le cose, • a fare sempre il vostro dovere, perché non fare il proprio dovere, prima o poi, si ritorce contro di noi come un boomerang; fare il nostro dovere aiuta gli altri ed il dovere degli altri aiuta noi. Seguire le mie indicazioni è semplice, basta fare proprio il concetto espresso da quattro semplici parole: Gi altri siamo noi L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Capitolo 1. Informazione ed informatica 1.1. Informazione e … L’informazione può essere definita come l’acquisizione di una nuova conoscenza. Io mi chiamo Mauro, sono nato il 25/12/1978 e sono cresciuto molto, infatti la mia altezza è 196 centimetri; il mio codice fiscale è BNCMRA78F25D998V e non so cantare ma, comunque, ascoltate: “volare oh oh, cantare oh oh oh”, forse è meglio che smetta; se venite a casa vi faccio vedere il film della mia prima comunione (capirai che divertimento!) e …. cosa volete sapere? Se ho figli? Ovviamente la risposta sarà un ‘si’ oppure un ‘no’; questa, per finire, è una mia foto. Cari ragazzi, avete acquisito un bel po’ di nuove conoscenze! Vi serviranno? Certo, ma solo per capire il concetto di informazione e di dato. Le informazioni che avete acquisito sono, come evidente, di tipo diverso: Alfabetiche, data, numeriche, alfanumeriche, audio, film, sì/no, foto. L’informazione viene rappresentata mediante i dati. Il mio nome è l’informazione, il dato che la rappresenta in un caso specifico può essere ‘Mauro’. Abbiamo già capito che i dati possono essere di diversi tipi; all’inizio erano essenzialmente numerici e booleani o logici (SI/NO oppure 0/1) poi i computer hanno cominciato a trattare anche lettere dell’alfabeto dando così origine ai tipi alfabetici e alfanumerici: il computer diventa elaboratore elettronico in quanto capace non solo di calcolare ma anche di elaborare informazione non numerica. Da qualche decennio l’elaboratore elettronico riesce a gestire anche grafici, foto, audio e persino filmati divenendo così un sistema di elaborazione in grado di trattare dati multimediali. I tradizionali tipi di dati vengono così affiancati da altri molto più efficaci per la rappresentazione dell’informazione. L’elaboratore diventa un complesso sistema di elaborazione perché deve disporre, innanzitutto, di una maggiore e più veloce capacità di elaborazione e di altri e più sofisticati dispositivi in grado di trattare i nuovi tipi di dati. Cosa ne facciamo dell’informazione? Una domanda alla quale è possibile rispondere con esempi che evidenzino la grande importanza che l’informazione assume oggi nella nostra vita: • la nostra ricchezza o povertà (quella economica) dipende dal conto in banca ovvero dall’informazione che ne rappresenta il saldo contabile; Capitolo 1: Informazione ed informatica 7 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro • una buona o cattiva informazione può condizionare le nostre scelte quotidiane in termini di semplici acquisti o esprimere un giudizio politico; • si pensi ad Internet ed al ruolo sempre più importante che essa assume nella quotidianità; • la stessa lezione che ogni giorno ci consente di crescere insieme professionalmente e umanamente si basa sullo scambio continuo di informazioni; • e, per finire, si pensi agli elenchi telefonici, alla nostra rubrica personale, ai numeri memorizzati sul nostro telefonino, agli SMS, alle comunicazioni telefoniche, etc. . Il trattamento dei dati e dell’informazione può essere riassunto nei seguenti punti essenziali: 1. Acquisizione: è la fase di raccolta delle informazioni; 2. Archiviazione: è la fase in cui l’informazione viene memorizzata per poter eventualmente essere riutilizzata in seguito; 3. Elaborazione: è la fase più importante e quella che più ci interessa; l’elaborazione dell’informazione produce nuova informazione, che può, a sua volta, essere elaborata; 4. Trasmissione: l’informazione va trasmessa tra soggetti e/o macchine. L’informazione viene acquisita in tanti modi: attraverso la comunicazione vocale, dalla lettura, attraverso i mezzi di comunicazione di massa, etc. . L’archiviazione dell’informazione è importante perché ci consente di non perderla e poterla riutilizzare in tempi successivi; quando l’uomo non conosceva la scrittura, l’informazione veniva tramandata da padre in figlio attraverso la ‘memoria’; successivamente l’informazione fu riportata su supporti cartacei; oggi si utilizzano sempre più spesso i sistemi di elaborazione volgarmente detti computer. Per l’elaborazione dell’informazione vi propongo un banalissimo esempio: la mamma va al mercato e compra 1 KG di peperoni a € 0.70/KG, ½ KG di patate a € 1.20/KG, 2 KG di pomodori a € 1.50 e ½ KG di zucchine a € 3.00/KG; elaborando queste informazioni posso concludere che ……… questa sera mangerò una bella ‘ciambottella’ e che faceva bene a non comprare le zucchine perché un po’ care (in realtà a me la ‘ciambottella’ piace senza le zucchine). E’, questa, già una forma di elaborazione ma, chiaramente, l’esempio, quello vero, è un altro. Con una semplice elaborazione, costituita da pochi calcoli, riesco a sapere che la mamma ha speso € 5.80; se sapessi anche (acquisizione) che la mamma aveva in tasca € 50,00, posso elaborare l’informazione ottenuta al passo precedente e concludere che alla mamma restano € 44.20; posso comunicare l’informazione a papà che si complimenta con la mamma per aver saputo preparare una cena per 8 persone con soli € 5.80 (a dire il vero non è che sia sazio!); il papà è scrupoloso e pignolo ed annota tutte le spese su Capitolo 1: Informazione ed informatica 8 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro un taccuino (archiviazione) ed a fine mese ne calcola il totale (di nuovo elaborazione). L’informazione in passato veniva trasmessa vocalmente o a gesti, oggi si utilizzano mezzi molto più potenti tra i quali telefono, fax, TV, Radio e, soprattutto, Internet. Si intuisce come il trattamento1 dell’informazione sia radicalmente cambiata nel corso dei tempi; oggi il trattamento dell’informazione avviene quasi sempre in maniera automatica ovvero con sistemi elettronici; nasce così una nuova scienza: l’Informatica; la parola informatica nasce dalla contrazione dei termini Informazione ed automatica e, quindi, è la scienza che studia il trattamento automatico dell’informazione ovvero le tecniche e gli strumenti automatici per acquisire, archiviare, elaborare e trasmettere l’informazione; un’altra scienza, che moltissimi vantaggi porta alla gestione dell’informazione ed in particolare alla sua trasmissione, è la telecomunicazione; per questo oggi spesso si parla anche di ICT, Information and Communication Tecnology. Lo strumento utilizzato per l’elaborazione automatica dei dati era inizialmente chiamato computer ma, come già detto in precedenza, il termine più adatto è, oggi, sistema di elaborazione perché è costituito da un insieme di parti interconnesse ed interagenti e non calcola ma elabora. Questo strumento si distingue da tutti gli altri che conosciamo quali TV, radio, elettrodomestici, calcolatrici, etc., perché esso è costituito da due componenti: Hardware e Software. L’hardware è la struttura fisica del sistema mentre il software è costituito dai programmi che l’hardware è in grado di eseguire. Ma cosa è un programma? Un programma è un insieme di istruzioni opportunamente correlate tra loro che, eseguite da una macchina, consente il trattamento dell’informazione; avrò modo in seguito di ritornare sull’argomento e approfondirne il concetto. Il programma viene memorizzato all’interno del sistema in una memoria per cui per poter eseguire elaborazioni diverse non è necessario cambiare macchina o intervenire sul suo hardware ma semplicemente realizzare un nuovo programma che effettui l’elaborazione voluta. Per questo motivo gli elaboratori elettronici sono detti general purpose ovvero per scopi generali; con una radio ascoltiamo, con la TV vediamo, con la lavatrice laviamo, etc., ma un computer è utilizzabile per tantissimi scopi diversi: lo stesso sistema di elaborazione può essere, infatti, utilizzato da qualsiasi professionista, dallo studente, per motivi ludici, dall’azienda, da un qualsiasi ente, etc.; quello che cambia non è l’hardware ma solo il software utilizzato, perché le problematiche ovvero il tipo di elaborazione richiesto da persone così diverse sarà, ovviamente, completamente diverso. 1 Trattamento dell’informazione: acquisizione, archiviazione, elaborazione e/o trasmissione dell’informazione. Capitolo 1: Informazione ed informatica 9 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 1.2. Rappresentazione dell’informazione 1.2.1. Generalità Un sistema di elaborazione si basa su una logica estremamente semplice: la logica binaria. La logica binaria fa uso, per la rappresentazione dell’informazione, solo di due simboli: 0 e 1, ai quali ci riferiremo con il termine bit, contrazione di binary digit (cifra binaria); spesso ci riferiremo ad essa come logica booleana costituita dai concetti vero e falso (TRUE/FALSE). In effetti ho detto qualcosa di molto importante che ancora, probabilmente, vi sfugge; in altri termini ho detto che tutto quello che viene trattato dall’elaboratore è binario. Allora vi chiederete come è possibile che un nome o un cognome, il prezzo di un articolo o migliaia di informazioni relative, per esempio, alla nostra scuola, possano essere rappresentate correttamente con un alfabeto costituito solo da 0 e 1. Ancora più difficile è immaginare come una foto, un film e, in genere, una informazione multimediale possa essere correttamente gestita utilizzando solo 0 ed 1, ovviamente miliardi di 0 ed 1 ma sempre e solo due simboli. E allora procedo con ordine e comincio dando alcune definizioni: • Alfabeto: insieme di simboli; • Parola: successione di simboli di un alfabeto; • Frase: insieme di parole; • Grammatica o Sintassi: regole per scrivere correttamente le frasi. Per esempio, l’alfabeto italiano è costituito dalle lettere da “A” a “Z” e “Cane” è una parola scritta su tale alfabeto; la grammatica ci consente di stabilire che la frase “il cane mangia la carne” è corretta, mentre non lo è “il cane e bello”. L’alfabeto utilizzato dal computer è {0, 1}, così una parola scritta su tale alfabeto non è altro se non una successione di 0 e 1. Un raggruppamento di 8 bit è detto BYTE. Ma perché la logica dei computer è binaria ovvero perché i progettisti hanno ritenuto opportuno realizzare i sistemi di elaborazione con una logica così semplice? La risposta non risiede nel fatto che era impossibile realizzare elaboratori con una logica diversa e più complessa come quella decimale (cifre 0-9) alla quale siamo abituati ma per motivi ben più importanti. La rappresentazione di un bit richiede la progettazione di elementi bistabili ovvero aventi due stati stabili di cui uno rappresenta lo 0 e l’altro l’1; per esempio un elemento bistabile è l’interruttore (spento/acceso) oppure una lampadina o un componente elettronico come un condensatore (carico/scarico). Gli elementi bistabili offrono i seguenti vantaggi: • Facilità costruttiva; Capitolo 1: Informazione ed informatica 10 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro • Facilità di integrazione: i moderni circuiti integrati contengono centinaia di milioni di componenti bistabili; • Velocità: un elemento bistabile può solo cambiare stato e lo fa in maniera estremamente veloce; • Affidabilità: un elemento bistabile può lavorare per anni senza incidenza di guasti; • Costo: il costo è molto basso. Nei paragrafi successivi vedremo come sia possibile rappresentare una gran quantità di informazioni utilizzando l’alfabeto binario. 1.2.2. Rappresentazione alfanumeriche Nei paragrafi precedenti abbiamo visto come sia possibile rappresentare dati numerici utilizzando la base 2. Ad inizio capitolo, però, abbiamo visto che i dati spesso assumono forme tutt’altro che numeriche. Il passo successivo, pertanto, sarà quello di rappresentare dati alfanumerici mediante l’alfabeto binario e questo risulterà ancora più semplice che per i dati numerici. Ad inizio capitolo ho definito l’alfabeto e le parole scritte su un alfabeto, ebbene approfondendo il discorso posso dire che esiste un alfabeto esterno ed uno interno. L’alfabeto esterno è costituito dai simboli da noi utilizzati ed è costituito dalle lettere maiuscole e minuscole dell’alfabeto, dalle 10 cifre, dai segni di punteggiatura, da simboli speciali, etc. . L’alfabeto interno è quello utilizzato dalla macchina e, come già detto, è binario ovvero costituito solo dai due simboli 0 ed 1. E’ pertanto impossibile codificare i simboli dell’alfabeto esterno mediante quelli dell’alfabeto interno, semplicemente perché questi ultimi sono in numero inferiore. La soluzione adottata è estremamente semplice e fa uso di un’operazione di codifica che associa a ciascun simbolo dell’alfabeto esterno una parola scritta sull’alfabeto interno. Un codice, pertanto, non è altro se non una tabella che fa corrispondere una combinazione di bit, in genere 8, ad un simbolo dell’alfabeto esterno. I codici più utilizzati sono il codice ASCII (American Standard Code for Information Interchange) e l’EBCDIC (Extended Binary Coded Decimal Interchange Code) riportati nelle seguenti tabelle: Capitolo 1: Informazione ed informatica 11 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Codice ASCII 7 bit Dec Hex Simbolo Dec Hex Simbolo Dec Hex Simbolo Dec Hex Simbolo 0 00 NUL 32 20 space 64 40 @ 96 60 ` 1 01 SOH 33 21 ! 65 41 A 97 61 a 2 02 STX 34 22 " 66 42 B 98 62 b 3 03 ETX 35 23 # 67 43 C 99 63 c 4 04 EOT 36 24 & 68 44 D 100 64 d 5 05 ENQ 37 25 % 69 45 E 101 65 e 6 06 ACK 38 26 $ 70 46 F 102 66 f 7 07 BEL 39 27 ‘ 71 47 G 103 67 g 8 08 BS 40 28 ( 72 48 H 104 68 h 9 09 HT 41 29 ) 73 49 I 105 69 i 10 0A LF 42 2A * 74 4A J 106 6A j 11 0B VT 43 2B + 75 4B K 107 6B k 12 0C FF 44 2C , 76 4C L 108 6C l 13 0D CR 45 2D - 77 4D M 109 6D m 14 0E SO 46 2E . 78 4E N 110 6E n 15 0F SI 47 2F / 79 4F O 111 6F o 16 10 DLE 48 30 0 80 50 P 112 70 p 17 11 DC1 49 31 1 81 51 Q 113 71 q 18 12 DC2 50 32 2 82 52 R 114 72 r 19 13 DC3 51 33 3 83 53 S 115 73 s 20 14 DC4 52 34 4 84 54 T 116 74 t 21 15 NAK 53 35 5 85 55 U 117 75 u 22 16 SYN 54 36 6 86 56 V 118 76 v 23 17 ETB 55 37 7 87 57 W 119 77 w 24 18 CAN 56 38 8 88 58 X 140 78 x 25 19 EM 57 39 9 89 59 Y 121 79 y 26 1A SUB 58 3A : 90 5A Z 122 7A z 27 1B ESC 59 3B ; 91 5B [ 123 7B { 28 1C FS 60 3C < 92 5C \ 124 7C | 29 1D GS 61 3D = 93 5D ] 125 7D } 30 1E RS 62 3E > 94 5E ^ 126 7E ~ 31 1F US 63 3F ? 95 5F _ 127 7F DE Il codice ASCII, inizialmente a 7 bit, è stato successivamente ampliato a 8 bit per poter codificare un maggior numero di caratteri, tra questi alcuni nazionali ovvero una serie di valori del codice corrispondono, a seconda della nazione, a simboli diversi. Capitolo 1: Informazione ed informatica 12 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Estensione del codice ASCII DEC 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 Simbolo Ç ü é â ä à å ç ê ë è ï î ì Ä Å É æ Æ ô ö ò û ù ÿ Ö Ü ø £ Ø × ƒ DEC 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 Simbolo á í ó ú ñ Ñ ª º ¿ ® ¬ ½ ¼ ¡ « » _ _ _ ¦ ¦ Á Â À © ¦ ¦ + + ¢ ¥ + DEC 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 Simbolo + + + ã Ã + + ¦ + ¤ ð Ð Ê Ë È i Í Î Ï + + _ _ ¦ Ì _ DEC 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 Simbolo Ó ß Ô Ò õ Õ µ þ Þ Ú Û Ù ý Ý ¯ ´ ± _ ¾ ¶ § ÷ ¸ ° ¨ · ¹ ³ ² _ SPAZIO In questa tabella estesa sono ripetuti più volte alcuni segni (+ - _ ), già contenuti nella tabella standard; si tratta di combinazioni non assegnate a simboli standard ed in genere utilizzati per caratteri grafici oggi poco utilizzati. Il codice ASCII è quello attualmente utilizzato dai personal computer. I caratteri corrispondenti ai primi 31 valori del codice ASCII sono cosiddetti non stampabili ed utilizzati per il controllo delle periferiche; per esempio, per Capitolo 1: Informazione ed informatica 13 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro cambiare il carattere di stampa (SI: Shift In, SO: Shift Out) o avanzare di un rigo (LF: Line Feed) o di una pagina (FF: Form Feed). Si noti come il codice 32 corrisponde allo spazio così come i codici da 48 a 57 rappresentano le cifre; le lettere maiuscole dell’alfabeto hanno codici da 65 a 90 e le minuscole da 97 a 122. Non tutti i caratteri del codice ASCII sono presenti sulla tastiera del nostro PC, per questo per i caratteri assenti si può utilizzare il tasto <ALT> di sinistra in combinazione con il tastierino numerico: si digita il codice ASCII sul tastierino numerico tenendo abbassato il tasto <ALT> e, al suo rilascio, viene visualizzato il corrispondente carattere. Capitolo 1: Informazione ed informatica 14 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Codice EBCDIC Dec Hex Simbolo Dec Hex Simbolo Dec Hex Simbolo Dec Hex Simbolo 0 00 NUL 32 20 64 40 1 01 SOH 33 21 65 2 02 STX 34 22 3 03 ETX 35 4 04 5 05 6 06 7 07 8 space 96 60 - 41 97 61 / 66 42 98 62 23 67 43 99 63 36 24 68 44 100 64 37 25 LF 69 45 101 65 38 26 ETB 70 46 102 66 39 27 ESC 71 47 103 67 08 40 28 72 48 104 68 9 09 41 29 73 49 105 69 10 0A 42 2A 74 4A [ 106 6A | 11 0B VT 43 2B 75 4B . 107 6B , 12 0C FF 44 2C 76 4C < 108 6C % 13 0D CR 45 2D ENQ 77 4D ( 109 6D _ 14 0E SO 46 2E ACK 78 4E + 110 6E > 15 0F SI 47 2F BEL 79 4F |! 111 6F ? 16 10 DLE 48 30 80 50 & 112 70 17 11 49 31 81 51 113 71 18 12 50 32 82 52 114 72 19 13 51 33 83 53 115 73 20 14 52 34 84 54 116 74 21 15 53 35 85 55 117 75 22 16 54 36 86 56 118 76 23 17 55 37 87 57 119 77 24 18 CAN 56 38 88 58 120 78 25 19 EM 57 39 89 59 121 79 ‘ 26 1A 58 3A 90 5A !] 122 7A : 27 1B 59 3B 91 5B $ 123 7B # 28 1C IFS 60 3C 92 5C * 124 7C @ 29 1D IGS 61 3D 93 5D ) 125 7D ‘ 30 1E IRS 62 3E 94 5E ; 126 7E = 31 1F IUS 63 3F 95 5F ^ 127 7F " HT DEL BS SYN EOT NAK SUB Capitolo 1: Informazione ed informatica 15 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Dec Hex Simbolo Dec Hex Simbolo Dec Hex Code Dec Hex Simbolo 128 80 160 A0 192 C0 { 224 E0 129 81 a 161 A1 130 82 b 162 131 83 c 132 84 133 ~ 193 C1 A 225 E1 A2 s 194 C2 B 226 E2 S 163 A3 t 195 C3 C 227 E3 T d 164 A4 u 196 C4 D 228 E4 U 85 e 165 A5 v 197 C5 E 229 E5 V 134 86 f 166 A6 w 198 C6 F 230 E6 W 135 87 g 167 A7 x 199 C7 G 231 E7 X 136 88 h 168 A8 y 200 C8 H 232 E8 Y 137 89 i 169 A9 z 201 C9 I 233 E9 Z 138 8A 170 AA 202 CA 234 EA 139 8B 171 AB 203 CB 235 EB 140 8C 172 AC 204 CC 236 EC 141 8D 173 AD 205 CD 237 ED 142 8E 174 AE 206 CE 238 EE 143 8F 175 AF 207 CF 239 EF 144 90 176 B0 208 D0 } 240 F0 0 145 91 j 177 B1 209 D1 J 241 F1 1 146 92 k 178 B2 210 D2 K 242 F2 2 147 93 l 179 B3 211 D3 L 243 F3 3 148 94 m 180 B4 212 D4 M 244 F4 4 149 95 n 181 B5 213 D5 N 245 F5 5 150 96 o 182 B6 214 D6 O 246 F6 6 151 97 p 183 B7 215 D7 P 247 F7 7 152 98 q 184 B8 216 D8 Q 248 F8 8 153 99 r 185 B9 217 D9 R 249 F9 9 154 9A 186 BA 218 DA 250 FA 155 9B 187 BB 219 DB 251 FB 156 9C 188 BC 220 DC 252 FC 157 9D 189 BD 221 DD 253 FD 158 9E 190 BE 222 DE 254 FE 159 9F 191 BF 223 DF 255 FF Capitolo 1: Informazione ed informatica \ 16 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 1.2.2.1. La codifica UNICODE I codici visti in precedenza ed altre codifiche, che non ho ritenuto opportuno riportare, hanno numerosi limiti perché non sono indipendenti: • dalla piattaforma hardware e/o software, con riferimento soprattutto ai sistemi operativi di cui parleremo in seguito; • dall’applicazione, ovvero i programmi applicativi e di base con particolare riferimento ai data base, di cui parleremo in seguito; • dalla lingua, lingue nazionali diverse hanno set di caratteri diversi. Il problema principale risiede nella lunghezza a 8 bit del codice, che consente di rappresentare solo 256 caratteri, insufficienti per le esigenze di tante nazionalità, ma, anche se si considera una sola lingua come l’Italiano, 256 caratteri sono insufficienti per rappresentare tutti i simboli di cui si ha bisogno se, per esempio, si considerano anche quelli tecnici, matematici, ingegneristici, etc. . I sistemi di codifica tradizionali, inoltre, creano problemi perché assegnano allo stesso carattere un codice diverso oppure lo stesso codice per caratteri diversi. Da queste esigenze nasce il codice UNICODE, che attribuisce a ciascun simbolo, indipendentemente dalla piattaforma, dall’applicativo e dalla lingua, un codice numerico identificativo univoco. Lo standard UNICODE è stato adottato dai principali leader del mercato informatico mondiale, è supportato dalla maggior parte dei sistemi operativi, dei data base e dei WEB Browser. Nasce così lo Unicode Consortium, un consorzio senza fini di lucro al quale aderiscono aziende leader del settore informatico e che si propone di sviluppare, standardizzare e promuovere l'uso del codice Unicode; il sito web del consorzio è accessibile mediante il seguente indirizzo (URL: Unique Resource Locator): http://www.unicode.org/ L’Unicode, oltre ai caratteri di cui ai codici visti in precedenza, codifica alfabeti nazionali occidentali, latini, greci, ebraici, arabi, cirillici, alfabeti nazionali orientali, ricchi di simboli come il Giapponese e il Cinese, simboli tecnici, etc.; ho scaricato per voi da Internet il codice UNICODE completo che, ovviamente, non riporto, ma vi consiglio di darci uno sguardo che risulterà sicuramente interessante; il file da consultare è “UNICODE CodeCharts.pdf”, salvato nella stessa cartella condivisa sul server dal quale copiate questi appunti. Un codice UNICODE è compreso tra 0 e 1.114.111 = (216 * 17)-1 corrispondente all’esadecimale 10FFFF. Per l’UNICODE sono stati definiti, per il momento, 3 standard a 8, 16 e 32 bit detti UTF-8, UTF-16 e UTF-32 (Unicode Transformation Formats). Capitolo 1: Informazione ed informatica 17 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 1.3. Conclusioni A questo punto, se io vi chiedessi cosa rappresenta la successione binaria “1010001001001010” voi non potreste rispondere perché devo dirvi anche quale tipo di rappresentazione sto utilizzando; in binario assoluto sarebbe il valore 41546 mentre in fixed point 16 bit -23990 e, infine, se sono due caratteri del codice ASCII corrispondono alla stringa2 “óJ”. Naturalmente si tratterebbe di altri valori se floating point, packed o zoned ma potrebbero essere anche due note o un pixel colorato, etc. . Il concetto assomiglia molto alla relazione esistente tra i tipi dei file ed i programmi che li elaborano: ………. e infine tutto diventa binario, è il trattamento dell’informazione che la rende diversa. Al di là di tutti i concetti importanti riportati in questo capitolo, è opportuno sottolineare un aspetto estremamente semplice: Tutti i dati, per quanto complessi possano essere, possono essere rappresentati con alfabeti molto semplici e quando utilizzo la parola semplice mi riferisco all’alfabeto e non alla rappresentazione che è tutt’altro che semplice. D’altra parte, ad inizio capitolo, ho parlato anche di dati multimediali e, ve lo assicuro, rappresentare in binario una canzone o, addirittura, un film non è cosa semplice ma, e qui ci siamo arrivati, possibile. Il bit è il “mattoncino” con il quale costruire il castello delle nostre informazioni. Esempi di mattoncini che consentono la realizzazione di grandi opere ve ne posso dare tantissimi; per esempio con i mattoni, quelli veri, si costruiscono le case, i palazzi, le città; ed ancora, immaginate cosa si è riusciti a scrivere negli anni con 26 lettere dell’alfabeto, 10 cifre ed un gruppuscolo di segni di punteggiatura; e non finisce qui perché con solo 7 note ……………. ; allora non è importante la grandezza del mattoncino ma come lo si riesce ad utilizzare e la quantità di cui possiamo disporre! Vi renderete conto ancora meglio del concetto appena espresso quando comincerete a programmare utilizzando mattoncini che chiameremo istruzioni per realizzare programmi anche di una certa complessità. E’ evidente che non posso, né ritengo opportuno riportare le codifiche adottate per la rappresentazione di foto, audio o film, anche se in seguito ritornerò sull’argomento e, più precisamente, quando vi parlerò della compressione dati ma un piccolo accenno è possibile. Per esempio una foto può essere divisa in tanti punti detti pixel, contrazione di picture element, e, per ognuno di essi, è possibile memorizzare, opportunamente codificato in binario, il colore; per esempio, con 8 bit posso memorizzare fino a 28=256 colori, con 16 216=65.536 colori con 24 224=16.777.216; i PC attuali utilizzano 32 bit per memorizzare il colore di ciascun pixel. In questo modo una immagine su uno schermo, che utilizzi una risoluzione pari a 1024x768 pixel, occuperà 1024x767x32=25.165.824 bit pari a 3.145.728 byte ovvero 3MB. 2 Stringa: successione di caratteri. Capitolo 1: Informazione ed informatica 18 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Allora una foto è memorizzata in binario come una mappa a matrice di punti colorati detta Bit Map e, infatti, una tipologia di file contenenti foto ha estensione .BMP . Ed un film? E’ una successione di foto detti frame; ma allora è facile (!!!!!!!!!) memorizzare un film perché so come memorizzare una foto ed è sufficiente memorizzare centinaia di migliaia di foto. Infine per la musica sarà sufficiente codificare le sette note? Per la gestione dell’audio i moderni sistemi di elaborazione utilizzano un opportuno convertitore analogico/digitale, quello che tutti conosciamo come scheda audio. La rappresentazione binaria di qualsiasi tipo di informazione è possibile grazie alla rivoluzione digitale in atto; per capire bene cosa intendo, è necessario dare delle definizioni. Una grandezza si dice analogica quando l’insieme dei suoi possibili valori è infinito mentre è digitale quando tale insieme è finito; si dice, in genere, che una grandezza analogica può variare con continuità mentre una digitale varia in maniera discreta. Per esempio i colori in natura sono infiniti, la musica è analogica. Con riferimento agli orologi, quello analogico ha le lancette mentre quello digitale ha un display per visualizzare l’ora ed i minuti; ebbene, si può dire che l’orologio analogico segna sempre l’ora esatta perché la lancetta dei minuti attraversa, in maniera continua, tutti i punti della circonferenza; l’orologio digitale, invece, tra un minuto e l’altro, non segna l’ora esatta. Qualcuno potrebbe suggerire di visualizzare anche i secondi ma non cambia nulla: tra un secondo e l’altro l’ora non sarebbe esatta. Altro esempio è quello di un poligono regolare che, con un numero sufficiente di lati, approssima una circonferenza. Ho detto la parola magica “approssima” che, in maniera del tutto generale, sta ad indicare che qualsiasi grandezza analogica può essere approssimata con una digitale. Ad esempio e con riferimento ai colori, il nostro occhio vede non più di un milione di colori, per cui se ne scegliamo, in maniera opportuna, un milione tra gli infiniti disponibili in natura, non perdiamo assolutamente niente; se abbassate il numero dei colori visualizzati dal vostro PC a 256=28, le vostre foto appariranno poco chiare mentre con 65536=216 colori saranno apprezzabili mentre con 16.777.216=224 saranno eccellenti e, in tutti i casi, il numero dei colori non è infinito. Con la musica ha cominciato Philips alcuni anni fa, producendo il CD-DA (Compact Disk-Digital Audio) e, successivamente, anche foto e film sono stati digitalizzati; si pensi alla TV satellitare, al digitale terrestre, ai DVD-Video, agli MP3, etc. . In altri termini, foto, audio, film e qualsiasi altra forma di informazione, viene rappresentata mediante una successione di valori o simboli o qualsiasi altra codifica digitale. I vantaggi del digitale possono essere così riassunti: Capitolo 1: Informazione ed informatica 19 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro • Nessun deterioramento della qualità: la qualità digitale è nota e si pensi alle copie ed ai film di molti anni fa, per i quali è stato necessario il restauro; pensate alle copie di video cassette o audio cassette: la qualità della copia è sempre inferiore all’originale. Il tempo e le copie deteriorano l’analogico. Il digitale non teme né il tempo né le copie: la copia della copia della copia …………….. della copia è perfettamente uguale all’originale; • Facilità di elaborazione: il digitale può essere gestito da un computer con tutti i vantaggi che conoscete; • Migliore trasferibilità: facilità di trasferimento da un supporto all’altro e mediante sistemi di comunicazione (Internet); • Interattività: possibilità di interagire con la sorgente dell’informazione; • Trasportabilità: Foto, audio e film sono oggi trasportabili con memorie digitali molto piccole. Il computer è il fulcro di questa rivoluzione ed è il digitale per eccellenza perché fa uso di solo due cifre: 0 e 1. Concludo il capitolo con questa citazione di un anonimo: Ci sono solo 10 tipi di persone, quelli che comprendono il binario e quelli che non lo comprendono. ……………… e voi a quale categoria appartenete? 1.4. Esercizi 1. Date esempi di trattamento dell’informazione nei seguenti ambiti: a) Scuola; b) azienda; c) ospedale; d) banca; e) campionato di calcio di serie A; f) biblioteca; g) anagrafe cittadina. 2. Convertire nelle altre basi i seguenti numeri: a) 85.510; 234.8710; 6543.36510; 1548.95610; b) 101111011.1012; 11111100000.11012; 1101000001.0012; 101110101.010112; c) 45.68; 251.258; 654.768; 76892.1538; d) A3.C916; C6D.4F16; 8BE5.23716; BA1C.E2F16 . 3. Rappresentare mediante il codice ASCII le seguenti parole: Computer; STAMPANTE; mouse; tastIERA. Capitolo 1: Informazione ed informatica 20 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Capitolo 2. Algoritmi e approccio alla programmazione 2.1. Definizione e proprietà Algoritmo è sinonimo di procedura di calcolo anche se oggi gli algoritmi sono utilizzati più in generale per l’elaborazione dell’informazione così come definita nei capitoli precedenti. Un algoritmo è un insieme ben coordinato di istruzioni che a partire da dati iniziali fornisce dati finali o risultati. Dati iniziali Algoritmo (input o ingresso) Dati finali (output o uscita) Chi esegue le istruzioni di un algoritmo è detto “esecutore” ed in particolare un algoritmo è detto programma quando l’esecutore è un sistema di elaborazione dati volgarmente detto computer. Chi, invece, realizza l’algoritmo è in genere detto programmatore ma sulle figure professionali torneremo in seguito. Se, per esempio, si vuole realizzare un algoritmo che risolva l’equazione di secondo grado individuiamo: • Dati iniziali: a, b e c ovvero i coefficienti dell’equazione; • Dati finali: le soluzioni x1 e x2 oppure l’unica soluzione ovvero il messaggio che non esistono soluzioni; • L’algoritmo: o Calcolare il delta; o Se positivo calcolare x1 e x2; o Se nullo calcolare x1=x2; o Se negativo inviare messaggio “non esistono soluzioni”. Il concetto di algoritmo è, in effetti, molto più generale e non si applica solo all’elaborazione delle informazioni; per esempio, quando si acquista un mobile, le istruzioni per il suo montaggio sono un algoritmo. Anche le fasi per la realizzazione di una torta possono essere descritte come un algoritmo i cui dati iniziali sono gli Capitolo 2: Algoritmi e approccio alla programmazione 21 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro ingredienti, l’algoritmo è costituito dalle fasi della lavorazione e i dati finali sono rappresentati dalla fumante torta. Un algoritmo deve godere delle seguenti proprietà: i. Efficacia: un algoritmo deve terminare la sua esecuzione fornendo i risultati corretti per qualsiasi combinazione dei dati in ingresso; ii. Finitezza: L’algoritmo deve essere costituito da un numero finito di istruzioni scelte da un insieme finito e l’esecuzione di ognuna di esse deve impiegare un tempo finito; anticipo che nonostante tali caratteristiche, un algoritmo, per errore di realizzazione, potrebbe non terminare la propria esecuzione; iii. Definitezza: assenza di ambiguità ovvero garanzia che lo stesso algoritmo eseguito da esecutori diversi in tempi diversi sugli stessi dati iniziali fornisce sempre gli stessi risultati; iv. Effettività: le istruzioni che costituiscono l’algoritmo devono essere effettivamente eseguibili. Un aspetto molto importante di un algoritmo è l’efficienza ovvero la sua bontà determinata in base a due parametri: il tempo e lo spazio. Con riferimento allo spazio dirò subito che questo parametro oggi ha perso molta della sua importanza, in quanto i moderni elaboratori hanno memoria a sufficienza mentre in passato non era così e il programmatore spesso doveva ottimizzare lo spazio affinché l’algoritmo potesse essere correttamente eseguito. Molta importanza, invece, ha il tempo misurato in passi e non così come siamo abituati ovvero in secondi, minuti o ore. La complessità di tempo di un algoritmo è il numero di passi che esso deve compiere per produrre i risultati; si tratta di una funzione matematica che lega i passi alla cosiddetta taglia dell’input. La complessità di tempo è in genere determinata nel caso migliore (numero minimo di passi), peggiore (numero massimo di passi) e medio (media aritmetica dei casi precedenti). Tornerò sull’argomento quando realizzeremo i primi algoritmi. 2.2. Rappresentazione Un algoritmo va rappresentato ovvero c’è la necessità di descrivere senza ambiguità l’elenco delle istruzioni che lo costituiscono e la loro sequenza ovvero l’ordine di esecuzione. In generale non si utilizza il linguaggio naturale così come negli esempi precedenti perché tutti i linguaggi naturali sono o possono essere ambigui. Ci sono numerosi formalismi per la scrittura degli algoritmi, tra questi io scelgo per voi i diagrammi a blocchi anche se molti informatici li ritengono obsoleti. Al contrario io Capitolo 2: Algoritmi e approccio alla programmazione 22 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro ritengo siano più visibili e semplici da capire per cui più adatti ad un corso di programmazione di primo livello come il nostro. Un diagramma a blocchi è costituito da blocchi e linee del flusso; i blocchi rappresentano le operazioni da eseguire e le linee del flusso l’ordine con il quale eseguire le istruzioni. Si utilizzano blocchi di forma geometrica diversa per le diverse operazioni (input, output, elaborazione, etc.): Inizio/fine Input Linee del flusso Elaborazione Connettore Alternativa A Chiamata esterna A Continuazione Output Continua Commento I connettori sono utilizzati anche per andare a pagina seguente nel caso in cui l’algoritmo non sia contenibile in una sola pagina. In questo caso, siccome sono possibili più continuazioni, all’interno del connettore si inserisce una lettera. Altro metodo per la rappresentazione degli algoritmi è la pseudocodifica ovvero le istruzioni sono costituite da frasi della lingua inglese. Il nome deriva dal fatto che questo metodo di rappresentazione è molto vicino ai linguaggi di programmazione che consentono di tradurre un algoritmo in un programma ovvero renderlo comprensibile ed eseguibile da una macchina. Capitolo 2: Algoritmi e approccio alla programmazione 23 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Ritengo opportuno, a questo punto, definire il termine linguaggio di programmazione di cui si parlerà in maniera molto approfondita in seguito. Un linguaggio di programmazione è un linguaggio artificiale e non naturale come le lingue; vengono definiti opportunamente per risolvere i problemi dell’elaborazione dei dati e, come i linguaggi naturali, hanno un alfabeto, le parole scritte su tale alfabeto, le frasi e un insieme di regole grammaticali detto sintassi per scrivere correttamente le istruzioni. 2.3. Formati, variabili e costanti, espressioni Prima di passare alla realizzazione degli algoritmi, è necessario parlare del formato delle istruzioni; per ogni istruzione i linguaggi di programmazione, di cui si parlerà in seguito, riportano il formato che, in maniera semplificata, riassume l’insieme delle regole per poter correttamente scrivere l’istruzione ovvero in modo tale che essa, sintatticamente corretta, sia riconoscibile ed eseguibile dal sistema. I formati delle istruzioni sono scritte utilizzando le seguenti convenzioni: [] Opzionalità | Alternativa … Ripetitività MAIUSCOLO Parole chiavi che vanno scritte così come riportate minuscolo Scelte del programmatore Le scelte del programmatore devono sempre essere conformi alle regole del linguaggio; per esempio, il nome di una variabile deve rispettare le regole imposte dal linguaggio. Esempi: [ON|OFF] indica l’alternativa opzionale tra le parole ON e OFF; ON|OFF indica l’obbligatorietà della scelta tra le parole ON e OFF; File1[,file2]… Indica l’obbligatorietà di “file1” seguita da nessuno, uno o più valori analoghi separati da virgole e scelti dal programmatore. Secondo il seguente formato: DIM nomevar[,nomevar]… as tipo [,nomevar[,nomevar]… as tipo]… le seguenti istruzioni sono sintatticamente corrette: DIM a as int32 Capitolo 2: Algoritmi e approccio alla programmazione 24 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro DIM a, b, totale as int16, x as string, delta, x1, x2 as double mentre le seguenti istruzioni sono errate: DIM a; b as int16 DIM a, b as int16. x as string Ed è arrivato il momento di realizzare il primo algoritmo che consente di determinare l’area di un triangolo. Dati Iniziali: Base B e altezza H. Dati finali: Area A. Algoritmo: Inizio DIM A, B, H AS SINGLE B,H Pseudocodifica Dim a, b, h as single Input b,h A=b*h/2 Print a End A=B*H/2 A fine Capitolo 2: Algoritmi e approccio alla programmazione 25 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Questo altro algoritmo, invece, consente di stampare il più grande di due numeri. Dati Iniziali: A, B. Dati finali: Il più grande. Algoritmo: Pseudocodifica Inizio Dim a,b as double Input a,b DIM A, B AS DOUBLE A, B V If a > b then Print a Else Print b End if F A>B A B End fine Oppure: Inizio DIM A, B, MAX AS DOUBLE Dim a, b, max as double Input a,b A, B V F A>B Max=A Pseudocodifica Max=B If a > b then Max=a Else Max=b End if Print max Max End fine Capitolo 2: Algoritmi e approccio alla programmazione 26 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Analizziamo gli algoritmi. A, B, H, Max sono variabili; una variabile è un’entità il cui valore può cambiare nel corso dell’elaborazione o in elaborazioni successive ed è caratterizzata da: • Nome: il nome consente di distinguere una variabile dall’altra, deve cominciare con una lettera dell’alfabeto, non deve superare, in genere, i 256 caratteri ma si sconsiglia di superare i 15 caratteri, si possono utilizzare lettere e cifre ed il segno di sottolineatura “_”; i nomi non sono case-sensitive ovvero non c’è distinzione tra maiuscole e minuscole. Esempi: Nomi corretti: X, X1, totale, somma, supercalifragilistichespiralidoso; Nomi scorretti: 1X, X+Y, A?; • Tipo: il tipo dipende dal contenuto della variabile e può essere numerico se contiene un numero, stringa o alfanumerica se contiene una qualsiasi successione di caratteri, data se contiene una data, etc.; • Valore: è il valore della variabile in un certo istante. Una costante, invece, non può variare il suo valore nel corso dell’elaborazione; esempi di costanti numeriche sono 5, 18, 123.765 mentre “Totale fattura” è un esempio di costante alfanumerica. Il nome di una variabile deve essere mnemonico ovvero ricordare il ruolo che la variabile ha nell’ambito del programma; in un algoritmo che risolva l’equazione di secondo grado, per esempio, DELTA potrebbe essere il nome della variabile contenente b^2-4*a*c e X1, X2 i nomi delle soluzioni mentre, per l’algoritmo che elabora una fattura, nomi di variabili potrebbero essere Totale_Fattura, Imponibile, IVA etc. Una variabile va sempre dichiarata con una apposita istruzione, spesso DIM, e, prima del suo utilizzo, bisogna sempre assegnarle un valore mediante una operazione di assegnazione, di input o altro che vedremo in seguito; quando ad una variabile è assegnato un valore, il precedente valore è definitivamente perso. La dichiarazione deve precedere l’utilizzo della variabile ed è legata al tipo della variabile. In Visual Basic.NET (d’ora in poi VB.NET) si utilizza l’istruzione DIM per dichiarare una variabile: DIM nomevar[,nomevar]… as tipo, [nomevar[,nomevar]… as tipo]… Alcuni tipi di dati disponibili in VB.NET sono i seguenti: Tipo Contenuto Note BYTE Numerico Binario assoluto 8 bit: valori da 0 a +28-1 Capitolo 2: Algoritmi e approccio alla programmazione 27 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro INT16 Numerico Fixed point 16 bit: valori da -215 a +215-1 INT32 Numerico Fixed point 32 bit: valori da -231 a +231-1 INT64 Numerico Fixed point 64 bit, valori da -263 a +263-1 SINGLE Numerico Floating point 32 bit DOUBLE Numerico Floating point 64 bit STRING Caratteri Lunghezza variabile CHAR Carattere Contiene un sol carattere UNICODE (codifica a 16 bit) BOOLEAN Logico TRUE o FALSE (Vero o Falso) DATE Data Contiene una data OBJECT Oggetto Oggetto come definiremo in seguito Bisogna evitare di “mischiare” le variabili nelle espressioni, per esempio: DIM a,b as INT16, c,d as STRING C=a+b non è valida A=a+b è valida A=b+d non è valida Vedremo successivamente come il linguaggio di programmazione ci consenta di effettuare conversioni tra i tipi di dati. Max=A è l’istruzione di assegnazione. Il formato dell’istruzione di assegnazione è il seguente: Variabile = Espressione dove “variabile” è un corretto nome di variabile e “espressione” una espressione, per il momento numerica, ottenuta utilizzando parentesi (solo tonde), variabili, costanti ed i seguenti operatori aritmetici: + per la somma - per la sottrazione * per la moltiplicazione / per la divisione \ per la divisione intera mod per il resto ^ per l’elevamento a potenza Le regole di precedenza utilizzate sono identiche a quelle della matematica. Capitolo 2: Algoritmi e approccio alla programmazione 28 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Le espressioni seguenti sono corrette: A=B*C-A I=I+1 TOTALE=((A+B)*5+K)*F Mentre le seguenti sono errate: A+B=C 1A=C+K A=((B+3)*6 SOMMA=K:5 PRODOTTO=5A Nelle espressioni possono anche essere utilizzate le funzioni. Una funzione informatica non si discosta molto dalla sua definizione matematica. Una funzione è una legge che associa ad ogni elemento di un insieme, detto dominio, un elemento di un altro insieme detto codominio: y=f(x). In generale, però, una funzione informatica può lavorare su nessun, uno o più argomenti (funzioni a più variabili). Ritengo opportuno riportare subito i formati di alcune funzioni matematiche: ABS(espressione): Restituisce il valore assoluto; INT(espressione): Restituisce la parte intera; SQRT(espressione): Restituisce la radice quadrata. così l’assegnazione X=SQRT(Y) assegna a X il valore della radice quadrata di Y. Queste funzioni sono riferite come funzioni standard del linguaggio perché in seguito vedremo anche le funzioni definite dal programmatore. In genere faremo poco uso delle funzioni sostituite dai metodi e dalle proprietà delle classi che tratterò durante lo studio del linguaggio di programmazione. Sicuramente più complessa è l’istruzione riportata nel rombo detta alternativa. L’alternativa consente di eseguire un gruppo di istruzioni piuttosto che altre. Di fondamentale importanza per una corretta gestione delle alternative è il concetto di espressione logica o predicato o, semplicemente, test. Una espressione logica, al contrario di quelle numeriche che possono avere infiniti valori, può essere solo vera (TRUE) o falsa (FALSE) cosicché in una alternativa ci sono solo due possibilità: una per vero e l’altra per falso. Il formato per un predicato è il seguente: Espressione OperatoreRelazione Espressione Capitolo 2: Algoritmi e approccio alla programmazione 29 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Dove “espressione” è stata definita in precedenza e OperatoreRelazione può essere: = Uguale > Maggiore < Minore <> Diverso <= Minore o uguale >= Maggiore o uguale Per esempio: 8>7 è vero 3>5 è falso 5>5 è falso 5>=5 è vero 7<>7 è falso Adesso la comprensione dei diagrammi riportati in precedenza dovrebbe essere chiara così come, per esercizio, potreste provare a realizzare un algoritmo che risolva l’equazione di secondo grado che, volutamente, non vi espongo. 2.3.1. Approfondimento: dichiarazione di costanti Le costanti possono essere utilizzate direttamente nei programmi senza essere dichiarate; in alcuni casi, però, è opportuno dichiarare anche le costanti. In genere le costanti possono essere dichiarate con l’istruzione CONST: Const name [ As type ] = initexpr [,name [ As type ] = initexpr]……. Per esempio Const pigreco as double=3.14159265358979, euro=1936.27 definisce la costante pigreco alla quale viene assegnato il valore 3.14159265358979 e la costante euro il cui valore è 1936.27; nello sviluppo dell’algoritmo potranno essere utilizzati i nomi delle costanti anziché i corrispondenti valori con evidenti vantaggi. Il valore di una costante non può essere cambiato durante l’esecuzione dell’algoritmo così, per esempio, una qualsiasi assegnazione che cambiasse il valore di pigreco e euro genererebbe un errore di programma la cui esecuzione terminerebbe in maniera anomala. Capitolo 2: Algoritmi e approccio alla programmazione 30 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 2.4. Iterazione o ciclo Una struttura fondamentale per la risoluzione dei problemi è quella iterativa. Una iterazione consente l’esecuzione di un gruppo di istruzioni per un certo numero di volte. Le strutture iterative più diffuse sono WHILE, REPEAT e FOR. Iterazione di tipo WHILE: Inizializzazione Pseudocodifica F Test di uscita V Inizializzazione WHILE test Istruzioni END WHILE Istruzioni e Modifica del test di uscita Iterazione di tipo REPEAT: Inizializzazione Pseudocodifica Istruzioni e Modifica del test di uscita Inizializzazione REPEAT Istruzioni UNTIL test F Test di uscita V Capitolo 2: Algoritmi e approccio alla programmazione 31 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Iterazione di tipo FOR: Inizializzazione Pseudocodifica For Var=espr1 to espr2 [step espr3] FOR Var=espr1 to espr2 [STEP espr3] Istruzioni NEXT Var Istruzioni Next Var L’insieme delle istruzioni che vengono eseguite più volte è detto “corpo del ciclo”, il test “test di uscita” e l’inizializzazione contiene le istruzioni preparatorie all’iterazione. Come si vede l’iterazione di tipo WHILE esce dal ciclo per falso mentre con REPEAT si esce per vero ed i test di uscita sono, rispettivamente, all’inizio ed alla fine; ciò consente di eseguire almeno una volta il corpo del ciclo con REPEAT mentre con WHILE potrebbe anche non essere eseguito. Il ciclo di tipo FOR, invece, è un ciclo a conteggio dove lo STEP indica l’incremento della variabile di controllo Var ogni volta che si esegue l’istruzione NEXT. Così il valore iniziale di Var è espr1 e viene incrementata di espr3 ad ogni NEXT e si esce dal ciclo quando Var>espr2. Una variante è rappresentata dallo step negativo che consente l’uscita quando Var<espr2. Se lo STEP viene omesso, viene assunto uguale a 1. Ritengo opportuno dare un esempio dello stesso algoritmo realizzato con ciascuno dei tre cicli. Si realizzi un algoritmo che sommi i numeri interi compresi tra 1 ed N; ad esempio se N=5 allora si deve sommare 1+2+3+4+5=15. Dati Iniziali: N. Dati finali: 1+2+ … + N Analisi: L’algoritmo è facilmente realizzabile mediante l’utilizzo di un semplice ciclo. Capitolo 2: Algoritmi e approccio alla programmazione 32 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Algoritmo sviluppato con il ciclo WHILE: Inizio DIM N, I AS INT32, S AS INT64 N I=1 S=0 Pseudocodifica dim n, i as int32, s as int64 F I<=N V S=S+I I=I+1 Input N I=1 S=0 While I<=N S=S+I I=I+1 End while Print S End S Fine Documentazione variabili: N: Dato in ingresso; I: Contatore; S: Somma corrente e finale. Capitolo 2: Algoritmi e approccio alla programmazione 33 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Algoritmo sviluppato con il ciclo REPEAT: Inizio DIM N, I AS INT32, S AS INT64 N I=0 S=0 Pseudocodifica dim n, i as int32, s as int64 Input N I=0 S=0 REPEAT S=S+I I=I+1 Until I>N Print S End S=S+I I=I+1 F I>N V S Fine Documentazione variabili: N: Dato in ingresso; I: Contatore; S: Somma corrente e finale. Capitolo 2: Algoritmi e approccio alla programmazione 34 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Algoritmo sviluppato con il ciclo FOR: Inizio DIM N, I AS INT32, S AS INT64 Pseudocodifica dim n, i as int32, s as int64 N Input N S=0 S=0 For I=1 to N S=S+I For I=1 to N Next I Print S S=S+I End NEXT I S Fine Documentazione variabili: N: Dato in ingresso; I: Contatore; S: Somma corrente e finale. Se, per esempio, si richiedeva la somma dei soli numeri dispari compresi tra 1 ed N ovvero 1+3+5+ … +N, allora, nel caso del ciclo FOR, è sufficiente utilizzare l’istruzione “FOR i=1 TO n STEP 2”. Capitolo 2: Algoritmi e approccio alla programmazione 35 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 2.5. Si fa sul serio State calmi e non vi preoccupate anche se da questo momento in poi gli algoritmi e la programmazione si complicano ma, d’altra parte, programmare non è cosa semplice. 2.5.1. Programmazione strutturata La programmazione strutturata ha come obiettivo l’utilizzo disciplinato delle strutture di controllo. Lo scopo principale è quello di realizzare algoritmi comprensibili. La comprensibilità degli algoritmi è un problema da non sottovalutare; il programmatore che ha realizzato un programma potrebbe, dopo un certo tempo, avere difficoltà a capire la logica del suo stesso lavoro, figuriamoci cosa succede se bisogna modificare il lavoro degli altri come spesso capita alle aziende produttrici di software, le cosiddette software house. Utilizzare poche e semplici strutture, pertanto, ne facilita la comprensione e, quindi, la modifica in caso di necessità; tornerò sull’argomento e lo approfondirò in seguito. Gli studiosi Bohm e Jacopini hanno dimostrato che tutti gli algoritmi sono realizzabili utilizzando solo tre strutture: sequenza, alternativa ed iterazione. Sequenza: Una sequenza è un insieme istruzioni per le quali definito un unico punto ingresso ed un unico punto uscita. Pseudocodifica Istruzioni di è di di Istruzioni Alternativa: V Una alternativa è la possibilità di eseguire un gruppo di istruzioni (sequenza) piuttosto che altre. Si noti comunque un unico punto di ingresso ed un unico punto di uscita. F Test Pseudocodifica Sequenza A Sequenza B IF test THEN Sequenza A ELSE Sequenza B END IF Capitolo 2: Algoritmi e approccio alla programmazione 36 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Iterazione: Inizializzazione F Test di uscita V Istruzioni e Modifica del test di uscita Una iterazione consente l’esecuzione di un gruppo di istruzioni (sequenza) per un certo numero di volte. Con riferimento all’intera struttura, si noti comunque un unico punto di ingresso ed un unico punto di uscita Pseudocodifica Inizializzazione WHILE test Istruzioni END WHILE Le tre strutture vanno realizzate così come sopra riportate senza alcuna eccezione; per esempio l’uscita dal ciclo WHILE non può avvenire per VERO. Spesso ci troviamo di fronte ad algoritmi non strutturati per i quali dobbiamo trovare una versione equivalente strutturata. Il concetto di equivalenza tra algoritmi è estremamente semplice: due algoritmi sono equivalenti se risolvono lo stesso problema. Per esempio il seguente algoritmo non è strutturato in quanto il ciclo ammette due uscite: Capitolo 2: Algoritmi e approccio alla programmazione 37 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Sequenza A V Test 1 Sequenza D F V F Test 2 Sequenza B Sequenza C L’algoritmo equivalente strutturato è il seguente: Capitolo 2: Algoritmi e approccio alla programmazione 38 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Sequenza A Test=Vero F Test V F V Test 1 V Sequenza B Test 2 F Sequenza C Sequenza D Test=Falso Test=Falso 2.5.2. Modularità L’approccio modulare alla risoluzione di un problema ne semplifica molto la soluzione. I problemi, nella maggioranza dei casi, sono piuttosto complessi e difficili da risolvere se non procedendo ad una sua suddivisione in sottoproblemi più semplici. A loro volta i sottoproblemi possono essere suddivisi in altri sottoproblemi ancora più semplici e così via fino ad ottenere una struttura gerarchica di Capitolo 2: Algoritmi e approccio alla programmazione 39 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro sottoproblemi facilmente risolvibili. La risoluzione di ciascun sottoproblema concorre alla soluzione del problema generale ovvero le singole e molteplici soluzioni vengono integrate in modo da risolvere il problema iniziale. Nella risoluzione dei singoli problemi si utilizzano due tecniche: Bottom-Up e Top-Down. Con la tecnica bottomup si procede alla realizzazione degli algoritmi a livello inferiore (sottoproblemi) e poi via via verso quelli a livello più alto. La tecnica Top-Down, invece, procede risolvendo i problemi a livello superiore e poi quelli a livello più basso. Ad esempio, se si vuole determinare il fattoriale del massimo di tre numeri, il problema può essere scomposto in due sottoproblemi: Calcolo del massimo e calcolo del fattoriale: Calcolo fattoriale del max di 3 numeri Calcolo del massimo di 3 numeri Calcolo del fattoriale Trattasi di un esempio piuttosto banale ma, d’altra parte, il problema iniziale è tutt’altro che complesso. Altri esempi saranno dati in seguito appena le conoscenze acquisite ci consentiranno di risolvere problemi più complessi. Mi direte che pur suddividendo il problema, alla fine realizzate comunque l’algoritmo come un’unica successione di istruzioni perdendo, così, la visione delle soluzioni dei singoli sottoproblemi e allora io vi dico che dovete pazientare per poter conoscere gli strumenti che tutti i linguaggi di programmazione mettono a disposizione del programmatore affinché il progetto possa essere realizzato in maniera rigorosamente modulare anche con l’apporto di più programmatori, nel senso che ognuno di essi risolverà uno o più sottoproblemi. L’approccio modulare alla risoluzione dei problemi sarà, pertanto, ripreso più avanti quando tratterò i sottoprogrammi; adesso si è voluto solo suggerire l’approccio modulare alla risoluzione dei problemi come tecnica mentale generale da utilizzare sempre per una corretta e semplice risoluzione dei problemi. Capitolo 2: Algoritmi e approccio alla programmazione 40 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 2.5.3. Complessità di tempo ed utilizzo dello switch Si consideri il seguente problema: Input: N, intero e positivo. Output: Stabilire se N è primo. Soluzione 1: Analisi: Si contano i divisori di N diversi da 1 e se stesso; se il numero di tali divisori è zero, il numero è primo. Diagramma: Capitolo 2: Algoritmi e approccio alla programmazione 41 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Inizio DIM N, I AS INT64, D AS INT32 N I=2 D=0 F I<N V V F N MOD I = 0 D=D+1 I=I+1 V D=0 F N “ non è primo” ” N “ è primo Fine Capitolo 2: Algoritmi e approccio alla programmazione 42 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Documentazione variabili: I: Contatore; D: Conta i divisori di N. Esercizio: pseudocodificare l’algoritmo. La complessità di tempo di questo algoritmo, sia nel caso migliore che in quello peggiore, è N-2. Si può fare meglio? Sì. Soluzione 2. Analisi: Si cerca un divisore di N diverso da 1 e se stesso e appena lo trovo concludo che N non è primo. Diagramma: Capitolo 2: Algoritmi e approccio alla programmazione 43 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Inizio DIM N, I AS INT64, SW AS BYTE SW AS Boolean N SW=False I=2 SW=0 I <= N/2 F I <= SQRT(N) I<N V V F N MOD I = 0 SW=1 SW=True I=N I=I+1 V SW=1 ” SW F ” N “ non è primo N “ è primo Fine Capitolo 2: Algoritmi e approccio alla programmazione 44 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Documentazione variabili: N: Dato in ingresso; I: Contatore; SW: Switch. Esercizio: pseudocodificare l’algoritmo. Si noti l’utilizzo di una variabile SW abbreviazione di switch (interruttore) utilizzata, in questo caso, per tenere memoria della presenza di un divisore; così, al termine dell’algoritmo, SW varrà 1 se è stato trovato un divisore e 0 altrimenti consentendomi pertanto di stabilire se N è primo oppure no. Una soluzione molto più elegante, rappresentata nel diagramma con i commenti, fa uso di una variabile logica. SW è definita boolean e non byte, per cui il suo valore può essere TRUE o FALSE. L’ultima alternativa, in questo caso, viene codificata semplicemente con IF SW Then La comprensione di questa soluzione è estremamente semplice. La complessità di tempo, in questo caso, è variata perché diversa nei casi migliore e peggiore. E’ facile intuire, infatti, che nel caso in cui N sia pari, l’algoritmo compie un sol passo mentre nel caso peggiore, ovvero quando il numero è primo, il numero di passi è ancora N-2 come nella soluzione precedente. Questo algoritmo è ancora migliorabile; se, infatti, si considera che dopo N/2 non ci sono più divisori di N la soluzione riportata in rosso nel diagramma precedente porta la complessità nel caso peggiore a N/2-1. Si riesce ancora a migliorare se si considera che se esiste un divisore di N maggiore della sua radice quadrata (SQRT), ne esiste anche uno minore di tale radice. Per questo motivo la soluzione in verde è senz’altro la migliore. In questo caso possiamo così concludere con la complessità di tempo: Caso migliore: N pari, numero di passi 1; Caso peggiore: N primo, numero di passi SQRT(N)-1 Caso medio: (1 + (SQRT(N)-1))/2=SQRT(N)/2 Questo esempio mette in evidenza come è assolutamente importante cercare sempre una soluzione efficiente al problema; nel nostro caso si ritenga il valore di N superiore ad 1.000.000 e si facciano le opportune considerazioni. In genere per la complessità di tempo si utilizza l’operatore “ordine di” abbreviato in O( ) che considera solo l’ordine di grandezza della complessità di tempo trascurando costanti e utilizzando solo il termine più significativo. Nei nostri esempi siamo passati dalla complessità O(N) a O(N/2), considerata comunque O(N), a O(SQRT(N)). Per esempio, se la complessità di tempo di un algoritmo è 3N2+5N si Capitolo 2: Algoritmi e approccio alla programmazione 45 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro dice che essa è O(N2) o quadratica mentre per 5N3+7N+2N è O(2N) o esponenziale. Gli algoritmi esponenziali sono praticamente intrattabili nel senso che, nonostante la enorme velocità dei sistemi di elaborazione, il tempo necessario misurato in modo tradizionale (ore, giorni, etc.) sarebbe eccessivo. Si deve pertanto cercare di realizzare sempre algoritmi con complessità di tempo lineare in quanto anche la complessità quadratica richiede tempi piuttosto lunghi. 2.5.4. Modalità di risoluzione degli esercizi Nel risolvere gli esercizi si seguano i seguenti passi: 1. Descrizione dei dati in ingresso; 2. Descrizione dei dati in uscita; 3. Analisi; 4. Realizzazione del/dei diagrammi; 5. Codifica; 6. Verifica; 7. Documentazione. E’ opportuno, inoltre, determinare sempre la complessità dell’algoritmo nei casi migliore e peggiore. Sulle fasi necessarie per la risoluzione dei problemi tornerò in seguito per ulteriori e necessari approfondimenti. Ritengo opportuno solo dare qualche semplice indicazione sulla fase di verifica o debugging. In questa fase occorre scegliere in maniera opportuna i dati di prova, quelli iniziali naturalmente; in genere occorre testare l’algoritmo su più di una serie di dati di prova per poter concludere che l’algoritmo è corretto. Molto importante è individuare e testare i cosiddetti casi particolari che impareremo ad individuare di volta in volta. Per esempio, per l’algoritmo che risolve l’equazione di secondo grado sarà opportuno considerare il caso in cui il delta è positivo, negativo e nullo oltre ai casi particolari a=0, b=0 e c=0, in tutto 6 casi. Per l’algoritmo dato in precedenza occorrerà considerare almeno il caso N primo e N non primo oltre ai casi particolari N=1, N=2 (e anche N=3?). Non è importante il numero delle prove effettuate ma la qualità dei dati di prova. E’ inutile testare l’algoritmo precedente per 10 volte su numeri non primi se poi dimentichiamo di testare il caso N primo. Capitolo 2: Algoritmi e approccio alla programmazione 46 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro L’operazione di debugging è molto importante perché, in caso di errori non individuati, si rilascia all’utilizzatore un software non efficace le cui conseguenze sono facilmente immaginabili. In genere l’operazione di debugging consente di accertare la presenza di errori ma non di accertarne l’assenza. In altre parole e come già detto, mestiere ingrato e difficile quello del programmatore che non può mai avere la certezza di aver scritto un software assolutamente perfetto. Sì perché è possibile che l’errore ci sia e non siamo stati in grado di individuarlo. 2.6. Il primo compito in classe Il 24/10/2005 viene svolto il primo compito in classe distinto per file come da tradizione; ritengo opportuno riportarne la soluzione completa e vi ricordo che la cartella “Primo compito in classe” contenuta nella directory condivisa sul server contiene la soluzione in VB.NET. 2.6.1. Fila sinistra 1. Descrivere un algoritmo che, ricevuti in input N numeri interi, determini la media aritmetica dei pari e dei dispari escluso lo zero e conti gli zeri. 2. Descrivere un algoritmo che, ricevuta in input una successione di N numeri, conti i pari e stabilisca la prima e l’ultima posizione di tali valori. 3. Descrivere un algoritmo che, ricevute in input N coppie di valori (A, B), conti le coppie in cui A e B sono pari. Opzionale: determinare la posizione della prima e dell’ultima coppia pari. Per tutti gli esercizi è assolutamente obbligatorio descrivere i dati in ingresso ed in uscita, riportare una breve analisi ed il diagramma a blocchi. 2.6.1.1. Esercizio 1 Input: N, N numeri Capitolo 2: Algoritmi e approccio alla programmazione 47 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Output: Media aritmetica dei pari, dei dispari e numero degli zeri. Analisi: Lo sviluppo dell’algoritmo richiede un ciclo nel quale contare e sommare i numeri pari e dispari escludendo e contando gli zeri. Una stampa finale fornirà i risultati voluti. Questo il diagramma: Capitolo 2: Algoritmi e approccio alla programmazione 48 L’Informatica per i miei studenti – Volume 1 Capitolo 2: Algoritmi e approccio alla programmazione Prof. Bianco Mauro 49 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Documentazione variabili: N: Numeri da gestire; A: Numero corrente in input; I: Contatore; Nd: Conta i numeri dispari; Np: Conta i numeri pari; Z: Conta gli zeri; Sp: Somma dei pari; Sd: Somma dei dispari; Mp: Media dei pari; Md: Media dei dispari. 2.6.1.2. Esercizio 2 Input: N, N numeri. Output: Contare i pari e stabilire la posizione del primo e dell’ultimo. Analisi: Lo sviluppo dell’algoritmo richiede un ciclo nel quale contare i pari e stabilire la posizione del primo e dell’ultimo numero pari. Questo il diagramma: Capitolo 2: Algoritmi e approccio alla programmazione 50 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro INIZIO Dim N, I , P, Pp, Up as Int16, A as Int64 N I = 1, P = 0 F I <= N V A V F A Mod 2=0 P=P+1 Up = I V P=1 F Pp = I I=I+1 V F P=0 “Nessun P, Pp, Up numero pari” FINE Capitolo 2: Algoritmi e approccio alla programmazione 51 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Documentazione variabili: N: Numeri da gestire; A: Numero corrente in input; I: Contatore; P: conta i numeri pari; Up: ultima posizione; Pp: prima posizione. 2.6.1.3. Esercizio 3 Input: N, N coppie. Output: Contare le coppie pari e stabilire la posizione della prima e dell’ultima. Analisi: Lo sviluppo dell’algoritmo richiede un ciclo nel quale individuare le coppie pari e stabilire la posizione della prima e dell’ultima. Questo il diagramma: Capitolo 2: Algoritmi e approccio alla programmazione 52 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro INIZIO Dim N, I, C, Up, Pp as Int16, A, B, as Int64 N I=1, C=0 F I<= N V A,B V F A Mod2=0 V F B Mod2=0 C=C+1 Up = I V F C=1 Pp = I I=I+1 V F C=0 “Nessuna coppia pari” C, Pp, Up “Coppie pari: “ C “Posizione prima coppia pari: “ Pp “Posizione ultima coppia pari: “ Up FINE Capitolo 2: Algoritmi e approccio alla programmazione 53 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Documentazione variabili: N: Coppie da gestire; A, B: Coppia corrente in input; I: Contatore; C: conta le coppie pari; Up: ultima posizione; Pp: prima posizione. 2.7. Operatori logici Si voglia determinare se una terna di valori numerici interi G, M ed A costituiscono una data corretta. In questo caso è evidente che la correttezza del giorno dipende dal mese perché, per esempio, la data 31/03/2005 è corretta mentre non lo sono 31/04/2005 e 30/02/2005. Ci si rende conto, pertanto, che per verificare la correttezza del giorno devo individuare il mese, ma per fare questo ho bisogno di 12 alternative diverse. La realizzazione di tale algoritmo, pertanto, risulta alquanto difficoltosa per il proliferare delle alternative. Una soluzione molto più semplice è ottenibile utilizzando gli operatori logici che, lavorando su predicati, ovvero su valori Vero e Falso, restituiscono a loro volta un valore di verità. Gli operatori logici più utilizzati sono AND, OR, XOR e NOT. Il funzionamento di questi operatori è evidenziato dalle seguenti tavole di verità nelle quali A e B sono espressioni o variabili logiche: A B A AND B A OR B A XOR B V V V V F V F F V V F V F V V F F F F F A NOT A V F F V L’operatore NOT è unario ovvero lavora su un sol predicato e ne cambia il valore di verità. Per capire il funzionamento di questi operatori ritengo opportuno fornire la soluzione all’esercizio proposto ad inizio paragrafo. Capitolo 2: Algoritmi e approccio alla programmazione 54 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Input: G, M, A interi Output: Verificare se G, M ed A costituiscono una data corretta. Analisi: L’anno A è ritenuto corretto se positivo; il mese M, ovviamente, è corretto se compreso tra 1 e 12; la correttezza del giorno è invece più complessa perché richiede di stabilire il numero di giorni del mese in esame e, nel caso Febbraio (M=2), se l’anno è bisestile. Diagramma. Capitolo 2: Algoritmi e approccio alla programmazione 55 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro INIZIO Dim G, M, A, MAXG as byte M, G, A V F M>=1 AND M<=12 “Mese errato” V F A>0 V “Anno errato” F M=4 OR M=6 OR M=9 OR M=11 MAXG=30 V V A MOD 4=O M=2 F F MAXG=31 MAXG=29 V MAXG=28 G>=1 AND G<= MAXG F “Data corretta” “Giorno errato” FINE Capitolo 2: Algoritmi e approccio alla programmazione 56 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Documentazione variabili: G, M, A: Dati in ingresso, la data da controllare; MAXG: Numero massimo giorni mese in input. Come si vede, l’utilizzo degli operatori AND e OR ha semplificato molto l’algoritmo. 2.8. Array: Vettori e matrici Le variabili utilizzate fino ad ora sono dette variabili semplici o dati elementari perché possono contenere un solo valore. In genere i dati elementari si aggregano tra di loro creando strutture denominate strutture informative o strutture dati. L’argomento sarà trattato in maniera approfondita nei prossimi capitoli ma ora ho la necessità di introdurre le due più semplici strutture dati, i vettori e le matrici, per poter continuare a realizzare algoritmi, naturalmente sempre più complessi. Il vettore è la struttura dati più semplice perché costituito da una collezione di elementi ognuno dei quali accessibile mediante un indice; l’indice di un elemento è la sua posizione nell’ambito del vettore: V0 V1 V2 ………………. Vi ………………. Vn-2 Vn-1 Vn L’indice può essere specificato mediante una espressione numerica intera, per cui, ovviamente, si può anche utilizzare una semplice costante o una variabile. Un vettore è caratterizzato dalla dimensione che rappresenta il numero massimo di elementi che esso potrà contenere. In genere il primo elemento è in posizione 0, vettori a base 0, oppure 1, vettori a base 1. Il linguaggio di programmazione VB.NET utilizza vettori a base 0; in altri linguaggi è possibile modificare la base utilizzando persino valori negativi. Salvo diverso avviso, d’ora in poi tratterò vettori e matrici a base 0. Per esempio istruzione: DIM V(10) as INT16, W(N) as STRING dichiara il vettore V() costituito da 11 elementi interi ed il vettore W costituito da N+1 elementi di tipo stringa. Ci si può riferire all’intero vettore con V() e ad un suo elemento racchiudendo l’indice tra parentesi così V(0) è il primo elemento, V(1) il secondo, V(i) l’i-esimo, V(10) o W(N) l’ultimo. L’indice di un vettore deve essere compreso tra 0 ed N dove N è la dimensione del vettore: DIM A(N), il generico elemento è A(i) 0<=i<=N Capitolo 2: Algoritmi e approccio alla programmazione 57 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Una matrice può essere considerata una estensione del concetto di vettore; gli elementi sono disposti su righe e colonne, così, per individuare un singolo elemento, è necessario utilizzare due indici: l’indice di riga e l’indice di colonna; in altri termini la matrice ha due dimensioni: A0 0 A0 1 ……………….. A0 n-1 A0 n A1 0 A1 1 ……………….. A1 n-1 A1 n ………... Ai j …………. Am-1 0 Am-1 1 ……………….. Am-1 n-1 Am-1 n Am 0 Am 1 ……………….. Am n-1 Am n L’istruzione DIM A(M,N) dichiara una matrice costituita da (M+1)*(N+1) elementi distribuiti su M+1 righe ed N+1 colonne il cui generico elemento è: A(i,j) 0<=i<=M, 0<=j<=N All’intera matrice ci si riferisce con A(,). Una matrice avente un numero di righe pari al numero di colonne (M=N) è detta quadrata. Nelle matrici quadrate si individuano le diagonali principale e secondaria costituite, rispettivamente, dagli elementi per i quali i=j e i+j=N, dove i è l’indice di riga, j l’indice di colonna e N l’ordine della matrice ovvero il numero di righe e colonne. Il numero delle dimensioni può essere anche più di due ottenendo così matrici a tre A(,,), quattro A(,,,) e così via dimensioni. In informatica tali strutture dati sono dette array e, secondo quanto esposto, un array ad una dimensione è un vettore, a due dimensioni una matrice, a tre dimensioni una matrice a tre dimensioni e così via. 2.8.1. Esempi di programmazione Caricare un array significa assegnare un valore a ciascun suo elemento. I due algoritmi seguenti caricano un vettore ed una matrice bidimensionale. Capitolo 2: Algoritmi e approccio alla programmazione 58 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Inizio DIM N, I AS INT16 N DIM V(N) AS INT64 Pseudocodifica I=0 (I=1 se base 1) F I<=N Dim n, i as int16 Input n Dim v(n) as int64 I=0 (I=1 se base 1) While I<=N Input v(i) I=I+1 End while End V V(I) I=I+1 Fine Documentazione variabili: N: Dimensione del vettore; V(): Vettore; I: indice. Come si può notare è necessario un ciclo per poter assegnare a ciascun elemento del vettore un valore. La complessità di tempo è, pertanto, N+1 ovvero O(N). Capitolo 2: Algoritmi e approccio alla programmazione 59 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Inizio DIM M, N, I, J AS INT16 M, N DIM A(M,N) AS INT64 Pseudocodifica Dim m, n, i, j as int16 Input m, n Dim a(m,n) as int64 I=0 (I=1 se base 1) F I<=M V J=0 (J=1 se base 1) F J<=N i=0 (i=1 se base 1) While i<=m j=0 (j=1 se base 1) While j<=n Input a(i,j) j=j+1 End while i=i+1 End while End V A(I,J) J=J+1 I=I+1 Fine Documentazione variabili: M,N: Dimensioni matrice; Capitolo 2: Algoritmi e approccio alla programmazione 60 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro A(,): Matrice; I, J: indici. In questo caso, il caricamento richiede due cicli uno nell’altro e la complessità di tempo è (m+1)*(n+1) ovvero O(m*n). 2.8.2. Ordinamento di vettori Un vettore è ordinato crescente (decrescente) se ogni suo elemento è maggiore (minore) di quello che lo precede. Posso farvi numerosi esempi di strutture dati ordinate: l’elenco telefonico, un vocabolario, l’elenco dei nominativi degli studenti di una classe, le fatture commerciali ordinate su data e numero, etc. . L’ordinamento risolve un problema molto importante nell’elaborazione dei dati: semplifica la ricerca; un elenco telefonico o un vocabolario non ordinato alfabeticamente sarebbe praticamente inutilizzabile. Ci sono numerosi algoritmi di ordinamento, alcuni molto semplici da realizzare, ma con alta complessità di tempo, e altri molto più complessi che, però, riducono il tempo necessario per eseguire l’operazione di ordinamento: 1. Bubblesort Confrontare ciascun elemento del vettore con il successivo ed eventualmente scambiarli di posizione se non risultano ordinati; Dopo aver completato il confronto di tutte le coppie contigue di elementi del vettore, ritornare al passo precedente se è stato effettuato almeno uno scambio altrimenti il vettore è ordinato. La complessità di tempo di questo algoritmo è pari a O(n2), dove n è la dimensione del vettore, e si verifica tutte le volte che il minimo si trova in ultima posizione (perché?). 2. Quicksort Un miglioramento dell’algoritmo precedente prevede che al passo successivo non si confronti il primo elemento con il secondo e così via, ma si parte dal confronto degli ultimi due elementi e, al passo successivo, di nuovo dai primi due e così via fino a quando non si effettuano scambi; si tratta di un piccolo miglioramento che non modifica sostanzialmente la complessità di tempo. 3. Selezione Un altro algoritmo si basa sull’idea di determinare il minimo del vettore e scambiarlo con il primo elemento, quindi ripetere l’operazione su un vettore Capitolo 2: Algoritmi e approccio alla programmazione 61 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro ridotto ovvero trovando il minimo a partire dal secondo elemento e così via. Anche questo algoritmo ha una complessità di tempo quadratica. Realizzate tutti e tre gli algoritmi eventualmente persone diverse ne realizzano, previo accordo, uno solo di quelli proposti. Ci sono algoritmi di ordinamento molto veloci con complessità di tempo pari a O(n * log2n). 2.8.3. Ricerca binaria. Una ricerca sequenziale verifica la presenza di un valore in una struttura, per esempio un vettore, confrontando dal primo all’ultimo gli elementi della struttura con quello cercato. Una ricerca sequenziale su una struttura ordinata non sfrutta, pertanto, l’ordinamento esistente; pensate alla ricerca di una parola sul vocabolario partendo dalla prima pagina e procedendo in maniera rigorosamente sequenziale; in effetti la nostra ricerca in un vocabolario è molto più veloce e dopo solo pochi passi si arriva alla pagina contenente il termine da cercare. Se volessi cercare un elemento in un vettore disordinato non avrei altra soluzione se non quella di procedere in maniera sequenziale e la complessità di tempo sarebbe O(n) con n dimensione del vettore. Se, invece, il vettore è ordinato posso effettuare la cosiddetta ricerca binaria o dicotomica, confrontando il valore da cercare con l’elemento centrale del vettore, quindi spostare la ricerca nella metà di destra o di sinistra a seconda che il valore da cercare sia maggiore o minore a meno che i due elementi non siano uguali, nel qual caso la ricerca si conclude con esito positivo. Se, invece, continuando a dividere l’intervallo di ricerca, questo diventa vuoto, allora concludo che il valore cercato non è presente nel vettore. Questo algoritmo ha una complessità pari a O(log2n). Si noti che, per esempio, log2 1.000 = 10, log2 1.000.000 = 20, log2 1.000.000.000=30, così per cercare un valore tra mille sono sufficienti solo 10 passi, tra un milione solo 20 passi e addirittura solo 30 confronti sono necessari per individuare un valore tra un miliardo. Se non ci credete possiamo fare un piccolo giochino: voi pensate un numero tra 1 e 1.000.000.000 ed io ve lo indovino con solo 30 domande, ovviamente ogni volta voi mi direte se il numero da me scelto è maggiore, minore o uguale a quello pensato. 2.9. Sottoprogrammi Nell'ambito di un programma non banale accade che una stessa parte di programma debba essere eseguita più volte ed in punti diversi; sorge, quindi, la Capitolo 2: Algoritmi e approccio alla programmazione 62 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro necessità di scrivere più volte lo stesso pezzo di programma. Gli svantaggi sono evidenti: - Duplicazione del codice; - Impossibilità di riutilizzare parti di codice in progetti futuri; - Una eventuale modifica ad una di tali parti dovrà essere ripetuta in tutti i punti in cui tale parte è presente. La risposta eccellente a tali problematiche e ad altre, di cui parleremo in seguito, è fornita dai sottoprogrammi; i termini subroutine, procedura, modulo e routine sono sinonimi di sottoprogramma. Un sottoprogramma consiste in una porzione di codice distinta o distinguibile da quello che chiameremo Programma principale o chiamante al quale si aggancia per mezzo di una o più chiamate. Il programma principale effettua, pertanto, solo una chiamata al sottoprogramma il quale, completata la sua esecuzione, mediante una istruzione del tipo RETURN, ritorna il controllo al chiamante ed esattamente all'istruzione successiva alla chiamata. Chiamante Chiama 1 Sottoprogramma R1 Istruzioni Chiama 2 R2 Fine Sottoprogramma Chiama 3 R3 L'esecuzione in punti diversi di un sottoprogramma avviene con una sola istruzione chiamante e tutto appare come se il modulo sia presente in più punti nel Capitolo 2: Algoritmi e approccio alla programmazione 63 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro chiamante. Un sottoprogramma può a sua volta chiamare un'altra procedura e così via fino ad un certo numero di volte dipendente dal linguaggio di programmazione in uso. Così i termini principale e sottoprogramma lasciano spesso il posto a chiamante e chiamato. Il modulo principale, che consente l'avvio dell'esecuzione di un programma, è detto Programma principale e si differenzia dagli altri moduli perchè è l'unico (non in tutti i linguaggi di programmazione) che può essere attivato direttamente dall'utente, mentre gli altri moduli possono essere soltanto richiamati da chiamanti. L'indipendenza del solo codice tra chiamante e chiamato non è sufficiente a garantire una riutilizzabilità della procedura nell'ambito dello stesso programma ed in programmi diversi ma tale indipendenza deve essere allargata anche alle variabili utilizzate dal chiamante e dal chiamato. Si pensi al calcolo delle disposizioni di N oggetti su M posti che comporta il calcolo dei seguenti tre fattoriali: N!, M! ed (N-M)! . Il calcolo del fattoriale può essere effettuato da un modulo separato, ma tale modulo deve effettuare tale calcolo in tre punti diversi del programma principale e su tre valori diversi; si pensi anche alla possibilità di riutilizzare il modulo, in seguito, in altri programmi per i quali il valore di cui calcolare il fattoriale è assolutamente imprevedibile. L'idea è quella di progettare un modulo per il calcolo del fattoriale di, per esempio, X con risultato in FX; il cerchio si chiude se si riesce a disporre di una tecnica che consenta di associare a X ed FX i valori reali di cui calcolare il fattoriale ed in cui restituire il risultato. Si pensi, inoltre, a cosa potrebbe succedere se il modulo utilizzasse la variabile I, per il ciclo FOR necessario per il calcolo del fattoriale, e che questa variabile sia contemporaneamente in uso, con altri scopi, nel programma principale. Sento qualcuno che risponde: "Non utilizzo variabili omonime!" Controrisposta: "E la riutilizzabilità futura?" In realtà un sottoprogramma ben progettato può essere utilizzato senza alcuna modifica in altri programmi; l'indipendenza del codice viene estesa anche alle variabili. Per spiegare tale indipendenza occorre dare la definizione di ambiente di un modulo come dell'insieme di tutte le variabili utilizzate e dei corrispondenti valori. Si tratta quindi di chiarire il legame esistente tra l'ambiente del chiamato e quello del chiamante. Tali ambienti possono essere completamente disgiunti o congiunti oppure intersecarsi su un sub-set di variabili. Negli ambienti disgiunti variabili aventi lo stesso nome, nel chiamante e nel chiamato, sono variabili distinte, mentre in ambienti congiunti sono la stessa variabile. La maggior parte dei linguaggi di Capitolo 2: Algoritmi e approccio alla programmazione 64 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro programmazione hanno ambienti disgiunti ma la gestione delle variabili è, in genere, molto più complessa; le variabili, infatti, possono essere così classificate: Locali: Una variabile locale viene dichiarata all’interno di un sottoprogramma ed il suo valore è perso al termine dell’esecuzione di quest’ultimo; Private: Una variabile privata è comune solo ad un certo numero di sottoprogrammi; Globali: Sono variabili comuni a tutti i sottoprogrammi del progetto a meno che, nell’ambito di un sottoprogramma, non venga ridichiarata; in un tal caso in questo sottoprogramma sarà locale; Statiche: Una variabile statica è locale ma conserva il proprio valore tra una chiamata e l’altra. L’area di visibilità di una variabile, quindi, dipende da come essa è dichiarata, dove per area di visibilità si intende un insieme di sottoprogrammi per i quali una certa variabile è comune. Premesso che la gestione degli ambienti può variare da linguaggio di programmazione a linguaggio, diciamo subito che la disgiunzione completa degli ambienti, tranne che per alcune variabili, X ed FX nell'esempio, è senz'altro la soluzione migliore. Del tutto in generale, tale situazione è resa possibile grazie alla cosìddetta tecnica del passaggio dei parametri: I parametri formali sono quelli utilizzati dalla procedura (X, FX); I parametri attuali sono quelli di volta in volta specificati dell'attivazione della procedura ((N,FN) o (M,FM) o .....). al momento I parametri formali si vestono ed assumono il ruolo dei parametri attuali. Si noti, nell'esempio, una sola coppia di parametri formali e tante di attuali; quante? ma ovvio, quante sono le chiamate. Siamo così arrivati alla possibilità di avere variabili del chiamante e del chiamato con nome diverso che sono la stessa variabile. Così i parametri formali, X ed FX nell'esempio, sono delle variabili fittizie, prive di qualsiasi contenuto, che, di volta in volta, si "vestono" delle variabili attuali. Il passaggio dei parametri può avvenire secondo due modalità: per riferimento e per valore. Il passaggio per riferimento consente al parametro formale di ricevere l'indirizzo di memoria del corrispondente attuale per cui, in questo caso, le due variabili sono la stessa variabile pur avendo nomi diversi; ne segue che una qualsiasi variazione del parametro formale si riflette nel parametro attuale nel programma chiamante. Il passaggio per valore consente al parametro formale di ricevere solo il valore del corrispondente attuale per cui, in questo caso, le due variabili non sono la stessa Capitolo 2: Algoritmi e approccio alla programmazione 65 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro variabile; ne segue che il valore iniziale del parametro formale è quello dell'attuale al momento della chiamata ma una qualsiasi variazione del parametro formale non si riflette nel parametro attuale nel programma chiamante. Nell'esempio citato, il parametro attuale corrispondente a X può essere passato per valore ma quello relativo a FX deve essere passato per riferimento altrimenti il programma chiamante è impossibilitato a ricevere il risultato del calcolo del fattoriale così come determinato dalla procedura. Le variabili indicizzate, vettori e matrici, vengono passate per riferimento ovvero al chiamato arriva l'indirizzo del primo elemento e la lunghezza comune e tali informazioni sono sufficienti per correttamente gestire il parametro attuale indicizzato; per valore, invece, sarebbe necessario duplicare in locazioni del chiamato tutti gli elementi del parametro attuale con evidente perdita di spazio e di tempo. Il programma chiamante specifica, nell’istruzione che chiama il sottoprogramma, i parametri attuali con un elenco di variabili e, analogamente, il modulo chiamato specifica un elenco di variabili in numero e tipo corrispondenti a quelli attuali. A solo scopo documentativo i parametri sono classificati in: - Input: Il chiamato utilizza il valore del parametro attuale senza effettuarne alcuna modifica; il passaggio può avvenire sia per valore che per riferimento, meglio per valore (nell'esempio X); - Output: Il chiamato non utilizza il valore del parametro attuale ma ne modifica il valore allo scopo di restituire un risultato. Il passaggio deve avvenire per riferimento (nell'esempio FX); - Input/Output (I/O): Il chiamato utilizza il valore del parametro attuale e lo modifica. Il passaggio deve avvenire per riferimento. E' il caso in cui si progetta il modulo per il calcolo del fattoriale con un solo parametro che costituisce sia il valore di cui calcolare il fattoriale sia il risultato. Un particolare sottoprogramma è una funzione definita dall'utente; l’unica differenza consiste nel fatto che al nome della funzione è associato un valore; le funzioni definite dall'utente, pertanto, possono essere utilizzate nell'ambito di un programma allo stesso modo di quelle standard ossia semplicemente specificandone il nome nell'ambito di una espressione o di qualsiasi altra istruzione che ne richieda l'utilizzo. Una programmazione modulare che faccia uso di un gran numero di moduli costituiti da poche istruzioni porta ad innumerevoli vantaggi: facile messa a punto; riutilizzabilità del codice; possibilità di lavorare in gruppi; Capitolo 2: Algoritmi e approccio alla programmazione 66 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro una meno difficoltosa manutenzione, ovvero tutte le modifiche successive, che sarà necessario apportare ad un progetto per mutate esigenze, miglioramenti, eliminazione di errori, etc..., richiederanno tanto meno sforzo quanto più esso è modulare e ben documentato. Tutti questi vantaggi vengono ripresi e migliorati dalla programmazione orientata agli oggetti di cui vi parlerò nel prossimo anno. Per poter realizzare e ben documentare un sottoprogramma è opportuno seguire i seguenti passi: 1. Compilare un modulo di documentazione; 2. Realizzare il diagramma a blocchi; 3. Codificare; 4. Debugging; 5. Completamento del modulo di documentazione. In generale programmatori facenti parte di un gruppo di lavoro utilizzano una modulistica standard cartacea o elettronica per documentare il lavoro prodotto in modo tale da uniformare la documentazione prodotta durante la realizzazione di un progetto informatico. In genere, per ciascun sottoprogramma che si realizza, nella documentazione occorre riportarne il nome, cosa fa, come lo fa (analisi), una descrizione completa dei parametri e delle altre variabili utilizzate, in dettaglio: Informazioni di carattere generale: nome del sottoprogramma, nome del file che lo contiene, nome del programmatore, data, breve descrizione, codice di versione, ecc.; Analisi: breve analisi sull’algoritmo risolutivo; Descrizione parametri: descrizione dettagliata di tutti i parametri con l’indicazione del nome e del tipo, delle modalità di passaggio, etc.; Descrizione altre variabili utilizzate: descrizione di tutte le altre variabili utilizzate specificandone nome, area di visibilità, tipo, etc.; Note: altre informazioni che si ritiene opportuno fornire. La vostra preparazione sarà completa dopo le dovute esercitazioni, la visione degli esempi contenuti nelle cartelle “Sottoprogrammi 1”, “Sottoprogrammi 2”, “SUB Function” e “STATIC” a loro volta contenute nella cartella condivisa sul server e gli esercizi che svolgerete. In precedenza ho accennato alla modularità come un approccio mentale alla risoluzione dei problemi; alla luce di quanto esposto in questo paragrafo, invece, la programmazione modulare comincia ad apparire come una vera e propria metodologia per la risoluzione dei problemi. In pratica, ciascun sottoproblema verrà risolto con un sottoprogramma; i sottoprogrammi verranno sviluppati in maniera Capitolo 2: Algoritmi e approccio alla programmazione 67 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro indipendente e, molto spesso, da programmatori diversi; la soluzione completa del problema passa attraverso una corretta gestione delle chiamate ai sottoprogrammi realizzati. 2.9.1. Ricorsività Parlare di ricorsività in questo momento mi sembra piuttosto prematuro ma senz’altro il posto più giusto nell’ambito della mia piccola ma non troppo dispensa; si consideri, infatti, che è passato meno di un anno da quando avete cominciato a studiare questa senz’altro difficile arte della programmazione. Vi sembra eccessivo il termine arte? Vi assicuro che sono in molti ad utilizzarlo. Una procedura è definita ricorsiva quando chiama se stessa; con un maggiore livello di dettaglio, vi dico che ci sono due tipi di ricorsività: • Ricorsività diretta: un sottoprogramma chiama se stesso; • Ricorsività indiretta: un sottoprogramma è richiamato da un altro a livello inferiore; mi spiego con un esempio: A chiama B, B chiama A; analogamente, A chiama B, B chiama C, C chiama D, ………., KK chiama ZZ e ZZ chiama … indovinate un po’? Ormai vi state abituando ma ritengo opportuno tranquillizzarvi dicendovi che vi farò vedere almeno un esempio in laboratorio e qualcuno lo realizzerete voi il prossimo anno scolastico. 2.10. Programmazione modulare: esempio Siamo pronti per un esempio più significativo sulla programmazione modulare, trattata nei paragrafi precedenti. Si voglia risolvere il seguente problema: Riportare in un vettore B() i fattoriali degli elementi primi di un vettore A(). Soluzione: Input: N, V(). Output: B() contenente i fattoriali degli elementi primi di A(). Analisi: si scompone il problema secondo il seguente schema gerarchico: Capitolo 2: Algoritmi e approccio alla programmazione 68 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Riportare fattoriali degli elementi primi di A() in B() Carica vettore A() Riporta fattoriali Verifica primo Stampa vettore B() Calcola fattoriale Come si può notare, il sottoproblema “Riporta i fattoriali” è stato ulteriormente suddiviso in due sottoproblemi: “Verifica primo” e “calcola fattoriale”. Ciascun sottoproblema sarà risolto realizzando un sottoprogramma e, opportunamente gestite le chiamate, si arriva alla soluzione del problema proposto. A questo punto non resta che realizzare i sottoprogrammi in maniera indipendente, uno per ciascun studente, e, quindi, organizzarli in un unico programma; se non ci riuscite non vi preoccupate, lo faremo insieme in laboratorio; successivamente scrivete un programma identico che lavori su una matrice anziché su un vettore, riutilizzando, ovviamente, i sottoprogrammi già realizzati. Spero che questa politica dei piccoli passi possa giovare alla vostra formazione anche se mi rendo conto che questa trattazione vi potrà apparire frammentata perché sono costretto a riprendere ed approfondire i concetti in maniera discontinua; sull’argomento della programmazione modulare, infatti, tornerò ancora in seguito. Dico sempre ai miei allievi che studiare l’informatica, all’inizio, è come realizzare un puzzle i cui tasselli, spesso, non vengono inseriti al loro posto in maniera sequenziale ma sparsa, la bellezza del puzzle sarà evidente solo quando esso sarà completo. Dopo qualche mese, pertanto, sarà chiaro solo il “guaio” in cui vi siete cacciati scegliendo il corso programmatori ma alla fine del triennio, quando tutti i tasselli saranno al loro posto, molti misteri di questa complicata materia vi saranno chiari e spero possa servirvi per la vita e per il lavoro. Sì, non solo per il lavoro, ma anche per la vita perché l’Informatica allena il cervello ed un cervello allenato è utile in qualsiasi circostanza. Capitolo 2: Algoritmi e approccio alla programmazione 69 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 2.11. Un po’ di filosofia: la tesi di Church Alcuni studiosi si sono chiesti cosa sia l’effettivamente computabile ovvero quando una funzione è calcolabile. Da qui la necessità di individuare l’insieme di tutte le funzioni effettivamente computabili. Si tratta di un concetto astratto e non è semplice trovare una risposta. Si sono così definiti vari strumenti per computare funzioni: Linguaggi di programmazione, funzioni matematiche, macchine virtuali, etc. Ciascuno di questi formalismi definisce un insieme di funzioni computabili e avendone dimostrato l’equivalenza, lo studioso Church arrivò alla seguente conclusione: L’insieme delle funzioni effettivamente computabili è quello definito dalla macchina di Touring (o qualsiasi altro formalismo per l’equivalenza di cui innanzi). La macchina di Touring è ideale ed è costituita da un nastro infinito ed una testina che, muovendosi sul nastro, può leggere o scrivere simboli di un alfabeto. Quando arriverete in quinta e se parteciperemo alla gara di Informatica presso l’Università di Pisa, imparerete ad utilizzare la macchina di Touring. 2.12. Esercizi Dati elementari 1. INPUT: 2 numeri A e B OUTPUT: Stampa ordinata di A e B. 2. Descrivere un algoritmo che risolva una equazione di secondo grado. 3. Descrivere un algoritmo che ricevuti in input 3 numeri stampi il minimo. 4. Descrivere un algoritmo che verifichi se B divide A. 5. INPUT: A, B,C OUTPUT: Stampa ordinata di A,B e C 6. INPUT: A,B e C OUTPUT: Verificare se A,B e C possono essere lati di un triangolo. 7. INPUT: A,B e C, lati di un triangolo. OUTPUT: Verificare se il triangolo è equilatero, isoscele o scaleno. 8. INPUT: N numeri OUTPUT: Somma degli N numeri. 9. Descrivere un algoritmo che effettui la somma dei primi N numeri interi. 10. Descrivere un algoritmo che determini il minore di N numeri. Capitolo 2: Algoritmi e approccio alla programmazione 70 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 11. INPUT: N OUTPUT: Somma dei numeri pari e dispari minori di N. 12. INPUT: N >= 0 13. Descrivere un algoritmo per il calcolo di X^N usando l'operatore "*". 14. Determinare il maggiore di N valori numerici. 15. Descrivere un algoritmo per il calcolo di M*N usando l'operatore "+". 16. INPUT: N 17. Realizzare un algoritmo che determini il numero primo più vicino a X. 18. Realizzare un algoritmo che determini i primi n numeri primi. 19. Descrivere un algoritmo che calcoli il valore finale di una somma S depositata in banca al tasso di interesse del R% annuo dopo N anni. 20. Fornire un algoritmo che calcoli il coefficiente binomiale. 21. Descrivere un algoritmo che determini il M.C.D. di due numeri interi e positivi. 22. Descrivere un algoritmo che riduca una frazione ai minimi termini. 23. Input: due frazioni, A/B e M/N. Output: La loro somma, differenza, prodotto e rapporto. 24. Descrivere un algoritmo che determini il m.c.m di due numeri interi e positivi. 25. Determinare le prime n terne pitagoriche. 26. I primi due numeri di Fibonacci sono 0 e 1; i successivi sono dati dalla somma dei due che lo precedono: 0, 1, 1, 2, 3. 5, 8, 13 e così via. Realizzare un algoritmo che generi i primi n numeri di Fibonacci. 27. INPUT:Data (Giorno,mese,anno) OUTPUT:Verificare se la data è corretta. 28. INPUT: Data OUTPUT: Data relativa al giorno successivo. 29. INPUT: Data OUTPUT: Data relativa al giorno precedente. 30. Descrivere un algoritmo che ha in input una successione di N numeri e stabilisce quante volte accade che un numero è maggiore del precedente, quante volte è minore e quante uguale. OUTPUT: N! OUTPUT: Stabilire se N è primo. Capitolo 2: Algoritmi e approccio alla programmazione 71 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 31. INPUT:N OUTPUT:Verificare se N è una data corretta nella forma GGMMAA. 32. Una banca effettua operazioni di quattro tipi (1-4) diversi e percepisce per ciascuna di esse il seguente compenso: tipo 1 € 1.00, tipo 2 € 2.00, tipo 3 € 3.50, tipo 4 € 6.00 Progettare un algoritmo che, nell'ambito di una giornata, riceva i tipi delle operazioni effettuate e fornisca, a fine giornata, ricevendo quale tipo il valore 9, gli incassi ed il numero di operazioni effettuate in totale e per ciascun tipo. 33. Descrivere un algoritmo che, ricevute in input il numero degli abitanti di M città, stabilisca: • Quante città hanno fino a 100.000, tra 100.001 e 1.000.000 e più di 1.000.000 di abitanti; • La città col maggior numero e quella con il minor numero di abitanti nonchè la loro posizione nella successione in input; 34. Descrivere un algoritmo che, ricevuti in input tre numeri M, N e P interi positivi, calcoli il fattoriale del più grande dei tre. 35. Descrivere un algoritmo che, ricevuti in input tre numeri A, B e C interi positivi, calcoli la somma dei primi X numeri interi, con X il più piccolo tra i tre numeri immessi. 36. Descrivere un algoritmo che, ricevuta in input una sequenza di N numeri interi e positivi, determini se il loro massimo è un numero primo. 37. Descrivere un algoritmo che, ricevuta in input una sequenza di N numeri interi e positivi, determini se il loro minimo è un numero perfetto. 38. INPUT: Due numeri interi e positivi. OUTPUT: Stabilire se sono primi tra loro. 39. Descrivere un algoritmo che, ricevuti in input N numeri interi, determini la media aritmetica dei pari e dei dispari escluso lo zero e conti gli zeri. 40. Descrivere un algoritmo che, ricevuta in input una successione di N numeri, conti i pari e stabilisca la prima e l’ultima posizione di tali valori. 41. Descrivere un algoritmo che, ricevute in input N coppie di valori (A, B), conti le coppie in cui A e B sono pari e determini la posizione della prima e dell’ultima coppia pari. 42. Descrivere un algoritmo che, ricevute in input M coppie di valori (X, Y), conti le coppie in cui X e Y sono di segno contrario e determini la posizione della prima e dell’ultima coppia di segno contrario. 43. Descrivere un algoritmo che, ricevuta in input una successione di N numeri interi e positivi, conti i numeri perfetti. 44. Descrivere un algoritmo che, ricevuta in input una successione di N numeri interi e Capitolo 2: Algoritmi e approccio alla programmazione 72 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro positivi, conti i numeri primi. 45. Descrivere un algoritmo che, ricevute in input N coppie di valori (A, B), conti le coppie in cui A e B sono primi tra loro. 46. Descrivere un algoritmo che, ricevuta in input una successione di N numeri interi e positivi, determini la somma dei fattoriali dei numeri primi. 47. Visualizzare la tavola pitagorica di ordine N. Vettori 48. Caricare e stampare un vettore di N elementi. 49. INPUT: A() e B() lunghi N OUTPUT: C() dato da C(i) = A(i)+B(i). 50. INPUT: A() OUTPUT: B() dato da B(i) = 2*A(i). 51. INPUT: A() OUTPUT: A() così modificato: A(i) = A(i)*i. 52. INPUT: A() e B() lunghi N OUTPUT: A() dato da A(i) = min{A(i),B(i)}. 53. INPUT: A() OUTPUT: A() modificato secondo l'assegnazione: A(i)=A(i)*3 se A(i) è pari A(i)=A(i)*2 se A(i) è dispari 54. INPUT: A(),B() e C() lunghi N OUTPUT: D(), D(i) = max {A(i),B(i),C(i)}. 55. INPUT: A() OUTPUT: Prodotto degli elementi di posto pari e dispari. 56. INPUT: A() OUTPUT: Il suo minimo. 57. Descrivere un algoritmo che inverta un vettore su se stesso (e in un altro vettore). 58. INPUT: A() OUTPUT: Il massimo ed il minimo di A(). 59. INPUT: X() e Y() lunghi N OUTPUT: W() così definito: W(i) = x(i)*y(i) se X(i) e Y(i) entrambi diversi da zero W(i) = i negli altri casi. 60. INPUT: W() e K OUTPUT: Quante volte K è presente in W(). Capitolo 2: Algoritmi e approccio alla programmazione 73 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 61. INPUT: V() e K OUTPUT: In 3 vettori, gli elementi di V() minori, maggiori e uguali a K. 62. INPUT:V() OUTPUT: 2 vettori contenenti gli elementi pari e dispari di V() 63. INPUT: A(), K OUTPUT A() così modificato: A(i)=A(i)*i se i<k A(i)=A(i)/i se i>k A(i)=A(i) se i=k 64. INPUT: W() e K OUTPUT: In 2 vettori gli elementi di W() multipli e sottomultipli di K. 65. Descrivere un algoritmo che, ricevute in input le altezze di N persone, stabilisca: • L'altezza media; • Quante persone hanno l'altezza maggiore, minore o uguale alla media; • L'altezza massima e minima e le relative posizioni nella successione data in input. 66. INPUT: V() e K OUTPUT: Posizione di K in V(). L'algoritmo deve ciclare ed uscire quando l'utente darà 0 in input per K. 67. INPUT: V() OUTPUT: Max e min di V(); scambiare il minimo col primo elemento ed il massimo con l'ultimo. 68. INPUT: V(). OUTPUT: Il fattoriale della somma del minimo e del massimo del vettore. 69. INPUT: V(). OUTPUT: L'elemento che si discosta meno dalla media aritmetica e quello che si discosta di più. 70. INPUT: V(). OUTPUT: La posizione del più piccolo numero pari nonchè quanti sono gli eventuali elementi ad esso uguali. 71. Descrivere un algoritmo che, ricevuti in input il vettore V(), costituito da M elementi, e due numeri X e Y, con X<Y, determini quanti elementi del vettore sono minori di X, quanti compresi tra X e Y e quanti maggiori di Y nonchè le loro rispettive somme. 72. Descrivere un algoritmo che, caricati due vettori V() e W() costituiti, rispettivamente, di M e N elementi, determini quanti elementi di V() sono maggiori del minimo di W(). 73. INPUT: V(). OUTPUT: Determinare la media aritmetica degli elementi di posto pari, degli elementi di posto dispari e di tutti gli elementi. 74. Input: V(N), X. Output: W() dato da V() privo dell’elemento in posizione X. Capitolo 2: Algoritmi e approccio alla programmazione 74 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 75. Input: V(N), X, Y e X<=Y. Output: W() dato da V() privo degli elementi dalla posizione X a Y. 76. Input: V(N), E, X. Output: W() dato da V() con E inserito in posizione X. 77. Input: V(N) ordinato crescente, E. Output: W() dato da V() con E nella posizione che gli compete secondo l’ordinamento crescente. 78. Descrivere un algoritmo che, a fine mese, ricevuti gli incassi giornalieri di un negozio, fornisca in uscita: • L'incasso mensile; • Il giorno in cui si è incassato di più ed il relativo incasso; • Il giorno in cui si è incassato di meno ed il relativo incasso; • La media aritmetica degli incassi giornalieri. Si consideri il mese di trenta giorni. 79. Descrivere un algoritmo che, caricati due vettori A() e B(), determini quanti elementi di B() sono minori del prodotto degli elementi di A(). 80. INPUT: A() e B() OUTPUT: Unione. 81. INPUT: A() e B() OUTPUT: Intersezione. 82. Descrivere un algoritmo che, ricevuti in input il vettore V() di M elementi ed un numero K, determini quanti elementi di V() sono primi con K. 83. INPUT: A() e B() ordinati crescenti. OUTPUT: Il vettore X(), ordinato crescente, ottenuto dalla fusione dei primi due. 84. Descrivere un algoritmo che riceva in input un vettore e determini quante volte in esso è presente il suo stesso massimo e quante volte il suo stesso minimo nonchè le ultime posizioni in cui si trovano il massimo ed il minimo. 85. INPUT: V(). OUTPUT: stabilire quanti numeri primi sono in esso massimo ed il minimo. contenuti e, tra questi, il 86. Progettare un algoritmo che, ricevuta in input un importo da pagare, restituisca i tagli ed il numero di banconote/monete necessarie. 87. Progettare un algoritmo che legga successivamente dei numeri e li inserisca in un vettore (inizialmente vuoto) solo se non sono già presenti. In caso contrario scrivere un messaggio del tipo "numero gia presente all'i-esimo posto". 88. Descrivere un algoritmo che, ricevuti in input i tre vettori A(L), B(M) e C(N), visualizzi gli elementi di A() presenti in B() e non in C(). Capitolo 2: Algoritmi e approccio alla programmazione 75 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 89. Descrivere un algoritmo che, caricato il vettore A(), costituito da M elementi interi, stabilisca se esiste in esso almeno un numero perfetto. 90. Descrivere un algoritmo che, ricevuto in input un vettore V() costituito da M elementi interi e positivi, riporti in un secondo vettore W() gli elementi perfetti di V(). Si stampi il vettore W() dall'ultimo elemento al primo. 91. Descrivere un algoritmo che, ricevuto in input un vettore V() costituito da M elementi interi e positivi, riporti in un secondo vettore W() i fattoriali degli elementi primi di V(). Si stampi il vettore W() dall'ultimo elemento al primo. 92. Slittamento di un vettore: si realizzi un algoritmo che slitti gli elementi di un vettore di X posizioni in avanti ed azzeri tutti gli elementi precedenti la posizione X. 93. Rotazione di un vettore: si realizzi un algoritmo che slitti gli elementi di un vettore di X posizioni in avanti e riporti in testa gli ultimi X. 94. Input: V(M), W(N), X. Output: Il vettore A() i cui primi X elementi sono presi da V(), seguiti da tutti gli elementi di W() quindi i restanti di V(). Opportune considerazioni per casi particolari. 95. Descrivere un algoritmo che, ricevuti in input i tre vettori V(M), W(N) e X(P), conti gli elementi comuni. 96. INPUT: Un vettore contenente molti zeri e numeri positivi; OUTPUT: Vettore compattato ottenuto sostituendo a zeri consecutivi un numero negativo pari al numero di zeri individuati. 97. Scompattare il vettore compattato di cui all'esercizio precedente. 98. Ordinamento di un vettore: INPUT: V(); OUTPUT: V() ordinato crescente. 99. Ricerca binaria: INPUT: V() ordinato crescente, K; OUTPUT: Verificare se K è presente in V(). Matrici 100. Fornire un DaB per caricare e stampare una matrice di ordine M*N. 101. INPUT : M(,) quadrata OUTPUT : La somma di tutti gli elementi, degli elementi della diagonale principale e degli elementi della secondaria. 102. INPUT : A(,) quadrata OUTPUT : B(,) trasposta di A(,). 103. INPUT : M(,) OUTPUT : Minimo e massimo e rispettivi indici. Capitolo 2: Algoritmi e approccio alla programmazione 76 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 104. Descrivere un algoritmo che, ricevuta in input la matrice A(,) ed un numero K, determini quanti elementi di A(,) sono maggiori di K, quanti uguali a K e quanti minori di K. 105. INPUT : M(,) OUTPUT : La somma di tutti gli elementi, degli elementi dispari, dei pari e dei primi. 106. Si progetti un programma che, ricevuta in input una matrice quadrata A(,) di ordine M, determini la media aritmetica di tutti gli elementi, degli elementi della diagonale principale e secondaria. 107. INPUT: A(,). OUTPUT: La posizione del più piccolo numero pari nonchè quanti sono gli eventuali elementi ad esso uguali. 108. INPUT: M(,) OUTPUT : Riga e colonna per le quali è massima la somma degli elementi. 109. INPUT:M(,), K OUTPUT: Indici di riga il cui prodotto degli elementi è K. 110. INPUT:M(,), K OUTPUT: Indici di colonna la cui somma degli elementi è K. 111. INPUT : A(,) e B(,) OUTPUT : Intersezione di A(,) e B(,). 112. INPUT : M(,) OUTPUT : Determinare dapprima le somme di ciascuna riga e ciascuna colonna, quindi stampare. 113. INPUT : M(,) quadrata di ordine N OUTPUT : ordinare le righe di M(,) 114. INPUT: M(,) quadrata OUTPUT: Verificare se esiste una riga la cui somma degli elementi è uguale alla somma degli elementi della diagonale principale. 115. Come il precedente con colonne e diagonale secondaria. 116. INPUT : M(,) quadrata OUTPUT : Stabilire se M(,) è simmetrica. 117. Descrivere un algoritmo che, caricata la matrice A(,), costituita da MxN elementi interi positivi, stabilisca quanti numeri primi sono in essa contenuti e, tra questi, il massimo. 118. Descrivere un algoritmo che, ricevuta in input la matrice A(,), quadrata di ordine M, stampi i fattoriali degli elementi positivi, interi e non appartenenti alla diagonale secondaria della matrice. 119. Descrivere un algoritmo che, ricevuta in input la matrice A(,) di ordine MxN ed il Capitolo 2: Algoritmi e approccio alla programmazione 77 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro numero X, stampi gli indici delle righe nelle quali il numero X compare almeno 3 volte. 120. Descrivere un algoritmo che, ricevuta in input la matrice A(,) di ordine MxN, ed un numero X determini la riga della matrice in cui X compare più volte e quante volte e quella in cui X compare meno volte e quante volte. 121. Costruire la matrice A(,) di ordine M*N nella quale A(i,j) = i! + j!. 122. Descrivere un algoritmo che, nella prima fase, carichi una matrice A(,) di ordine Mx2 che riporta nella prima colonna gli importi e nella seconda la corrispondente aliquota IVA. Nella seconda fase l'algoritmo riceve in input un valore rappresentante una aliquota IVA e calcola la somma degli importi relativi a tale aliquota. Opzionale: La seconda fase deve essere ciclica e concludersi quando l'utente fornisce il valore 0 per l'aliquota. 123. Descrivere un algoritmo che, nella prima fase, carichi una matrice A(,) di ordine Mx2 che riporta nella prima colonna gli importi e nella seconda la corrispondente aliquota IVA. Nella seconda fase l'algoritmo calcola e stampa le somme degli importi divisi per aliquote. 124. Descrivere un algoritmo che, ricevuti in input il vettore W() di N elementi e la matrice A(,) di ordine MxN, stabilisca se il vettore è presente in una riga della matrice. 125. Descrivere un algoritmo che, ricevuta in input la matrice W(,) quadrata di ordine M, determini quanti elementi di W(,) sono perfetti e, di questi, quanti appartengono alla diagonale principale e quanti alla secondaria. 126. Descrivere un algoritmo che, ricevuta in input la matrice W(,) di ordine MxN, determini se in essa esistono due colonne i cui prodotti degli elementi siano uguali. 127. Descrivere un algoritmo che, ricevuti in input il vettore V() di M elementi e la matrice B(,) di ordine MxN, stabilisca se il vettore è presente in una colonna della matrice. 128. Descrivere un algoritmo che, ricevute in input le matrici A(,) e B(,), rispettivamente, MxN e PxQ, visualizzi gli elementi comuni. 129. Descrivere un algoritmo che, ricevuta in input una matrice quadrata, conti le righe la cui somma degli elementi è uguale a quella degli elementi della diagonale secondaria. 130. Progettare un algoritmo che, ricevute in input n coppie costituite dall’importo da pagare ed il loro numero (quanti importi tutti uguali da pagare), restituisca i tagli ed il numero di banconote/monete necessarie. Capitolo 2: Algoritmi e approccio alla programmazione di ordine, 78 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Capitolo 3. Hardware 3.1. Sistemi, automi, processi e modelli Un sistema è un insieme di parti interconnesse ed interagenti che costituiscono una unica entità. Una parte di un sistema può, a sua volta, essere un sistema detto sottosistema, ovvero un sistema può essere incorporato all’interno di un sistema più ampio detto ecosistema. Spesso i termini sistemi e sottosistemi vengono sostituiti dai termini microsistemi e macrosistemi. Le parti di un sistema concorrono al raggiungimento di uno scopo così come, per esempio, un sistema di elaborazione, volgarmente detto computer, serve per l’elaborazione dell’informazione ed un sistema stereofonico per ascoltare la musica; il corpo umano è un sistema e noi stessi, in classe, costituiamo un sistema, che ci consente lo scambio di informazioni allo scopo di apprendere. Un sistema riceve dall’ecosistema input e/o sollecitazioni e restituisce output: Input Sistema Output I sistemi possono essere collegati tra loro secondo diverse modalità: 3.2. Sistema di elaborazione Un sistema di elaborazione è, ovviamente, un insieme di parti interconnesse ed interagenti. In maniera immediata, un sistema di elaborazione può essere considerato come costituito da due parti: l’Hardware ed il Software. In maniera più dettagliata, esso è costituito da unità centrale di elaborazione, memorie di massa, dispositivi periferici, software di base, software applicativo, etc.; in questo e nei prossimi capitoli approfondirò il trattamento di questi componenti. Il sistema di elaborazione è spesso chiamato computer, elaboratore elettronico o semplicemente elaboratore ma il termine più appropriato è senz’altro sistema di elaborazione. Capitolo 3: Hardware 79 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 3.3. La macchina di Von Neumann John Von Neumann (Budapest-1903; Washington-1957) fu il primo a realizzare un sistema di calcolo basato sull’idea di programma memorizzato. In questo sistema, infatti, il programma, opportunamente codificato in binario, veniva memorizzato all’interno di una memoria che poteva contenere anche i dati da elaborare. In pratica non vi era differenza tra dati e istruzioni che li elaborano, entrambi codificati in binario e memorizzati all’interno della stessa memoria. Ancora oggi i moderni elaboratori, pur se tecnologicamente diversi, lavorano secondo i concetti della macchina di Von Neumann memorizzando dati e programmi all’interno di una memoria. Lo schema generale della macchina di Von Neumann è riportato nella seguente figura: RAM Input CPU CU Output ALU In questo schema le frecce indicano il verso del flusso dei dati. La sezione INPUT consente il collegamento dei dispositivi di INPUT, necessari per l’immissione dei dati. La sezione OUTPUT consente il collegamento dei dispositivi di OUTPUT, necessari per l’emissione dei risultati. La CPU è la Central processing Unit (Unità Centrale di Elaborazione) e costituisce l’organo più importante in un sistema di elaborazione; essa è costituita dalla Control Unit (Unità di controllo), che sovrintende al corretto funzionamento del sistema controllandone tutti i componenti, e dalla Arithmetic and Logic Unit (Unità Aritmetica e Logica) che effettua tutti i calcoli, aritmetici e logici. Capitolo 3: Hardware 80 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro La Random Access Memory (Memoria ad Accesso Casuale), detta anche memoria centrale, è il deposito dove dati e istruzioni dei programmi da eseguire vengono memorizzati. Essa è costituita da una serie di celle numerate; l’indirizzo di una cella è definito come la sua posizione nell’ambito della memoria e ne consente l’univoca individuazione. 3.4. I moderni sistemi di elaborazione Lo schema concettuale ed estremamente semplificato di un moderno sistema di elaborazione è riportato nella seguente figura: BUS CPU RAM DMA Interfacce Dispositivi periferici di Input Dispositivi periferici di Output Dispositivi periferici di I/O In questo schema ritroviamo gli stessi componenti della macchina di Von Neumann con qualche piccola differenza. Nei paragrafi successivi parlerò in dettaglio delle parti che compongono un moderno sistema di elaborazione. Capitolo 3: Hardware 81 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 3.4.1. BUS Il BUS è il corridoio ideale che consente il trasferimento dei dati tra i componenti del sistema. In altri termini non esistono collegamenti diretti tra un dispositivo e l’altro ma tutti si “affacciano” sul BUS e possono trasmettere o ricevere informazioni; è evidente che il bus può essere utilizzato da un sol dispositivo alla volta per scambiare informazioni da e per la CPU. Il controllo del BUS è a totale carico della CPU, che di volta in volta consente un unico trasferimento di dati. In effetti esistono 3 BUS: • BUS di dati: è il bus utilizzato per il trasferimento dei dati; i dati scambiati con la CPU viaggiano su tale BUS; • BUS di controllo: su questo BUS la CPU invia i segnali di controllo ai vari dispositivi che costituiscono il sistema; insieme al bus dei dati, consente un corretto scambio di informazioni, consentendo la specifica di chi, come e cosa trasferire; • BUS degli indirizzi: su questo bus viaggia l’indirizzo della cella di memoria da leggere o da scrivere. Numerosi sono i tipi di BUS, che sono stati utilizzati nel corso dell’evoluzione dei sistemi di elaborazione; essi si diversificano per la velocità di trasferimento dei dati e per il numero di bit che riescono a far viaggiare contemporaneamente detto parallelismo: • BUS ISA, EISA, VESA: non sono più utilizzati; il primo è stato realizzato nella versione a 8 e 16 bit, il secondo è detto Extented ISA ed il terzo, a 32 bit, è stato utilizzato per un periodo di tempo assai limitato; • BUS PCI: BUS a 32 bit ancora in uso ma che vedrà la sua graduale sostituzione con il PCI Express; • AGP: BUS ancora in uso ma che sarà anch’esso sostituito dal PCI Express; si tratta di un BUS locale ovvero utilizzato da un solo dispositivo. Ho detto in precedenza che il BUS è condiviso ovvero utilizzato da più periferiche anche se uno solo di essi lo può utilizzare in un certo istante; ebbene il BUS AGP ha la caratteristica di essere dedicato all’interfaccia dello schermo, la cosiddetta scheda video; questa scelta è stata necessaria con l’avvento della multimedialità che, soprattutto con i film, aumenta lo scambio di dati tra la CPU e lo schermo; • PCI Express: BUS di ultima generazione che andrà a sostituire sia il bus PCI che l’AGP; si tratta di un bus con uno o più canali seriali indipendenti ognuno dei quali può arrivare ad una velocità di trasferimento dati pari a 533 Mb/sec. A seconda del numero di canali, si parla di BUS PCI-E x1, PCI-E x4, PCI-E x16. Capitolo 3: Hardware 82 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 3.4.2. CPU La CPU è senz’altro l’organo più importante di un sistema di elaborazione e, da sola, costituisce il 70% della potenza di calcolo di un Personal Computer (PC). Essa è costituita dalla CU e dalla ALU. La CU ha il compito di controllare l’intero sistema ed eseguire le istruzioni del/i programma/i in esecuzione. Le istruzioni eseguibili dalla CU fanno parte di un linguaggio di programmazione binario detto linguaggio macchina ed ogni istruzione fa riferimento ad un microprogramma memorizzato in maniera permanente all’interno della CU. L’esecuzione di una istruzione in linguaggio macchina comporta, pertanto, l’esecuzione di un microprogramma costituito da microistruzioni. Nella CU troviamo, inoltre, i cosiddetti registri. Un registro è una piccola memoria in grado di memorizzare pochi bit in numero variabile, in genere, da 8 a 64. Per il parallelismo di bit si è passati da CPU a 8 bit alle moderne CPU a 64 bit mentre per la velocità di elaborazione si utilizza il MIPS (Millions instructions per second) ed altri parametri; tra questi quello legato al clock. Il clock è un generatore di impulsi; la CPU comincia l’esecuzione di una istruzione in presenza di un segnale di clock e passa alla successiva al successivo impulso. E’ evidente che maggiore è il numero di impulsi tanto maggiore sarà la velocità di esecuzione. La velocità del clock è detta frequenza ed è misurata in impulsi al secondo; in particolare oggi si utilizzano il MHZ (Mega Hertz) ed il GHZ (Giga Hertz) che corrispondono, rispettivamente, ad un numero di impulsi pari a 106/sec e 109/sec. Il tempo di esecuzione di una istruzione, pertanto, è molto basso, per cui occorre introdurre i seguenti nuovi sottomultipli del secondo: Millisecondo: 1 msec=10-3sec; Microsecondo: 1 µsec=10-6sec; Nanosecondo: 1 nsec=10-9sec; Picosecondo: 10-12sec; Femtosecondo: 10-15sec. Una particolare CPU è il microprocessore. Un microprocessore è una CPU miniaturizzata costituita da un solo circuito integrato detto chip. 3.4.3. RAM La RAM, Random Access Memory, è la memoria centrale del sistema; la RAM è una memoria operativa nel senso che dati e programmi, per poter essere elaborati, devono essere trasferiti in essa. Si tratta di una memoria elettronica di lettura/scrittura con una discreta capacità e tempi di accesso, ovvero di lettura/scrittura, molto bassi. La memoria centrale è organizzata in celle costituite da uno o più byte; ogni cella, come detto, è univocamente individuata mediante il suo indirizzo che è la Capitolo 3: Hardware 83 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro posizione occupata nell’ambito della memoria; gli indirizzi vanno da zero ad n, dove n è la dimensione della memoria. Le operazioni effettuabili sono quelle di lettura e scrittura di una cella. Le caratteristiche fondamentali di una RAM sono la capacità ed il tempo di accesso ovvero di lettura/scrittura di una cella. Dico subito che il tempo di lettura/scrittura sono dell’ordine di qualche miliardesimo di secondo mentre la capacità varia da sistema a sistema. La capacità è misurata in byte o, meglio secondo i suoi multipli: Simbolo Leggi Capacità KB Kilo Byte 210 Byte = 1024 Byte MB Mega Byte 220 Byte = 1024 KB = 1.048.576 Byte GB Giga Byte 230 Byte = 1024 MB = 1.073.741.824 Byte TB Tera Byte 240 Byte = 1024 GB = 1.099.511.627.776 Byte In genere il Kilo, nel sistema metrico decimale, corrisponde a 1000 mentre il Kilo informatico corrisponde a 1024; questo perché i sistemi informatici sono binari e 1024=210. I nostri personal computer hanno una memoria centrale che, in genere, non è mai inferiore ai 256MB fino a qualche GB. La cache memory, essendo integrata nel processore, ha una capacità molto più bassa, variabile tra i 256KB e i 2 MB, e, come detto, tempi di accesso molto più bassi rispetto alla RAM. In genere “B” sta per byte e “b” sta per bit cosicché, per esempio, 256KB e 256Kb sono, ovviamente, due cose ben diverse. 3.4.4. ROM – Read Only Memory Un componente importante in un sistema di elaborazione è la ROM (memoria a sola lettura) che, in genere, contiene software indispensabile all’avvio del sistema e denominato BIOS (Basic I/O System); si tratta, come evidente, di una memoria a sola lettura della capacità di non più di 2Mb che contiene in modo permanente software che esegue le seguenti funzioni: 1. Diagnostica (POST: Power On Self Test): all’avvio del sistema, il software contenuto nella ROM esegue una auto diagnosi per verificare che i componenti principali del sistema siano correttamente funzionanti; Capitolo 3: Hardware 84 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 2. Setup: un programma che consente di impostare parametri relativi all’hardware, molto importanti ai fini di un corretto funzionamento del sistema; 3. Boot: programma di boot-strap del sistema operativo; ha il compito di caricare il sistema operativo, in genere dal primo disco fisso installato nel sistema; 4. Utilità: Programmi di utilità quali diagnostica approfondita di HDD e RAM, riscrittura della ROM, etc. . In questo corso avremo modo di approfondire la fase di setup del sistema. Una ROM è, pertanto, un componente hardware che contiene in modo permanente sempre lo stesso software anche se aggiornabile; per questo motivo ci si riferisce alla ROM ed al BIOS con il termine Firmware che risulta essere la terza componente di un sistema di elaborazione di minore importanza rispetto all’hardware ed al software. Ho detto che la ROM è una memoria a sola lettura ebbene essa è scrivibile solo per aggiornare in maniera completa il software contenuto; a volte malfunzionamenti del sistema sono risolti con un aggiornamento del BIOS. Si tratta di un’operazione molto delicata che, in passato, poteva essere effettuata solo smontando la ROM ed utilizzando appositi dispositivi di cancellazione (cancellatori di EPROM) e riscrittura (Programmatori di EPROM). Oggi la tecnologia mette a nostra disposizione memorie EEPROM (Electronically Erasable Programmable Read Only Memory) che sono cancellabili e riprogrammabili senza la necessità di rimuoverle dalla scheda dove sono alloggiate. Qualche tempo fa un virus cancellava il BIOS con il risultato che, al riavvio, il PC era completamente “morto” ovvero non riusciva più ad avviare correttamente le fasi di diagnosi e caricamento del sistema operativo. 3.4.5. Interfacce Interfacciare è sinonimo di collegare; un’interfaccia, quindi, è una scheda o un componente elettronico che consente il dialogo ovvero lo scambio dei dati tra due dispositivi. In genere una interfaccia consente di collegare dispositivi periferici all’unità centrale in modo da consentirne, mediante operazioni di I/O (Input/Output =Ingresso/Uscita), lo scambio dei dati; per esempio accettare dati in input da tastiera o produrre una stampa, scrivere o leggere un floppy disk e così via. Le interfacce possono essere di INPUT, di OUTPUT oppure di I/O a seconda che il flusso sia, rispettivamente, verso la CPU, dalla CPU o in entrambe le direzioni. Le interfacce sono classificate in seriali e parallele a seconda che il flusso dei dati avvenga un bit alla volta o più bit contemporaneamente. E’ evidente che un flusso di dati parallelo richiede un canale trasmissivo per ciascun bit mentre una trasmissione seriale in I/O richiede solo due canali, uno per l’input ed un altro per Capitolo 3: Hardware 85 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro l’output. La tendenza attuale è quella di avere solo comunicazioni seriali in quanto, negli ultimi anni, la velocità di una trasmissione seriale è aumentata tantissimo fino a rendere inutili i collegamenti paralleli che richiedono un numero superiore di connessioni, uno per ciascun bit, per il trasferimento dei dati. Sono disponibili sui nostri personal computer numerose interfacce: Connettore Nome S/P VGA I/O Specifiche e note O Interfaccia analogica utilizzata per il collegamento del monitor. O Interfaccia digitale utilizzata per il collegamento del monitor. O Interfaccia multimediale digitale per i segnali HDTV fino a 1920x1080 (1080i). I Interfaccia tastiera oggi di tipo PS/2. Video Graphics Array DVI Digital Video Interface HDMI High Definition Multimedia Interface Keyb Capitolo 3: Hardware S 86 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Mouse S USB S I Interfaccia mouse di tipo PS/2. I/O Universal Serial Bus: è l’interfaccia più utilizzata; universale perché consente il collegamento di numerosissime periferiche assai diverse tra loro; la maggior parte delle periferiche, infatti, è collegabile via USB. Un’altra caratteristica importante, detta Hot Plug, è la possibilità di collegare/scollegare periferiche a caldo ovvero quando il PC è acceso; Velocità di trasferimento della versione 1.1: 11Mb/sec; 2 Connettori USB Velocità di trasferimento della nuova versione 2.0: 480Mb/sec; ad una porta USB può essere collegato un replicatore di porte, detto HUB USB; gli HUB USB possono essere collegati in cascata fino ad un massimo di 128 porte. Audio Capitolo 3: Hardware I/O Interfaccia per la multimedialità che consente di riprodurre e acquisire suoni e audio in generale. 87 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Rete S I/O Interfaccia di rete RJ45 utilizzata per la connessione in rete dei PC. La velocità è, in genere, 100Mb/sec, ma vecchi PC utilizzano interfacce a 10Mb/sec altri, modernissimi, a 1000Mb/sec. Modem S I/O Interfaccia di tipo RJ11 utilizzata per collegamenti internet e per la trasmissione e ricezione di fax oltre che per servizi di segreteria telefonica e telefonici in genere. S-ATA S I/O Serial ATA: utilizzata per il collegamento di HD ma in futuro anche di unità ottiche. In genere un PC dispone di 2, 4 o anche più interfacce SATA ad ognuna delle quali è collegabile un sol dispositivo. 4 connettori S-ATA. L’attuale velocità del S-ATA è di 150MB/Sec ma le versioni successive arriveranno a 300 e 600MB/Sec. E-SATA 2 Connettori SATA External S I/O Interfaccia SATA esterna, che consente il collegamento di dischi SATA contenuti in appositi box alimentati; si tratta di una interfaccia che unisce al vantaggio di un’altissima velocità, nel trasferimento dei dati, la grande flessibilità del supporto esterno. Può avere numerosissimi utilizzi tra i quali: Capitolo 3: Hardware 88 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro • Aumento della capacità di memorizzazione dati; • Copie di back-up; • Elaborazioni on line; • Trasporto dati; • RAID. IR S I/O Interfaccia ad infrarossi oggi obsoleta, utilizzata per il collegamento di mouse, cellulari, etc.; si tratta di interfaccia senza fili. Blue-Tooth S I/O Interfaccia di ultima generazione a radio frequenza con distanze fino a 150 metri; è utilizzata per il collegamento di palmari, cellulari, stampanti, macchine fotografiche digitali, etc. . WiFi S I/O Collegamenti in rete locale wireless (senza fili) a radio frequenza. Wireless Fidelity Capitolo 3: Hardware 89 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Le interfacce P-ATA, S-ATA, SCSI e RAID sono riferite come controller; il controller ha una maggiore capacità di elaborazione rispetto ad una semplice interfaccia tanto che ad esse spesso ci si riferisce con il termine sottosistema che sta ad evidenziare una propria capacità elaborativa. A volte anche l’interfaccia video è riferita come controller video. 3.4.6. DMA Il DMA, Direct Memory Access, è un componente elettronico che consente ai dispositivi periferici, attraverso le loro interfacce, di leggere e scrivere nella memoria, anche una grande quantità di dati, senza l’intervento della CPU che, così, è libera ma non ferma perché esegue istruzioni di altri programmi secondo una tecnica chiamata multiprogrammazione, che, come già detto, verrà trattata molto più avanti. 3.4.7. Main Board I vari componenti di cui vi ho parlato possono scambiare dati tra di loro perché trovano collocazione su una scheda elettronica detta Scheda Madre o Main Board (M/B). Le foto seguenti rappresentano una moderna M/B ed il suo cosiddetto layout, grafico che rappresenta gli slot, le interfacce, i bus e quanto altro disponibile su di essa. Capitolo 3: Hardware 90 L’Informatica per i miei studenti – Volume 1 Capitolo 3: Hardware Prof. Bianco Mauro 91 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Nel layout della M/B sono ben visibili il socket 775, dove trova sistemazione la CPU, gli alloggiamenti per la memoria di tipo DDR-2 o DDR-3, gli slot PCI-E e PCI, i connettori SATA, USB, etc. . La figura seguente mostra il retro della M/B, ricca di connettori, che sono le interfacce di cui vi ho appena parlato. Capitolo 3: Hardware 92 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Appare evidente come quasi tutte le interfacce sono integrate sulla scheda madre. Non sempre è stato così; in passato, spesso, occorreva aggiungere una scheda per poter disporre di una nuova interfaccia; tale scheda veniva inserita negli appositi slot ISA, PCI etc.; spesso anche la scheda video è integrata sulla scheda madre. Il responsabile della gestione dell’INPUT/OUTPUT, attraverso le interfacce, è il cosiddetto chipset che, dopo la CPU, è senz’altro uno dei componente più importanti; nel nostro caso si tratta del chipset Intel ICH9R. 3.4.8. Dispositivi periferici I dispositivi periferici sono quelli che, attraverso le interfacce cui si collegano, consentono lo scambio dei dati con la CPU e/o la memoria; alcuni di questi dispositivi, quali tastiera, mouse, video, etc., interfacciano direttamente l’utente consentendogli di immettere i dati da elaborare e riceverne i risultati . I dispositivi periferici sono classificati in: • INPUT: periferiche per l’immissione dei dati quali tastiera, mouse, etc.; • OUTPUT: periferiche per l’emissione di risultati quali monitor, stampante, etc.; • INPUT/OUTPUT (I/O): dispositivi di ingresso/uscita; a questa categoria appartengono le memorie di massa, i floppy disk, pen disk, etc. . Capitolo 3: Hardware 93 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 3.4.8.1. Tastiera e mouse La tastiera ed il mouse sono dispositivi di input di uso molto comune per cui non ritengo necessario descriverli in dettaglio. Per le tastiere, mi limito a dire che sono disponibili versioni nazionali che, con riferimento ai tasti, hanno disposizione, numero e simboli che cambiano da nazione a nazione; si veda una forte analogia con il codice ASCII. Non ritengo necessario perdere tempo in altre discussioni ma vi invito a porre domande sull’utilizzo di quei tasti la cui funzione vi è sconosciuta. Per il mouse dico solo che ne sono disponibili sul mercato di tipo meccanico (obsoleti), ottico, con e senza filo (Wireless) di collegamento al PC; i tasti disponibili sono, in genere, programmabili ovvero ad essi può essere assegnata una funzione diversa da quella standard. Una caratteristica del mouse è la risoluzione misurata in dpi – dot per inch (punti per pollice) che fa riferimento all’accuratezza del mouse ovvero al numero di punti individuati dal mouse in un pollice; è chiaro che una risoluzione maggiore si trasforma in una maggiore precisione del mouse. 3.4.8.2. Monitor Il monitor è il dispositivo di output di uso più comune. Numerose sono le caratteristiche peculiari di un monitor ma ritengo opportuno riportarne solo alcune. Innanzitutto la tecnologia che oggi offre tre tipi di monitor: • CRT - Catode Ray Tube (Tubo a raggi catodici): sono i monitor tradizionali di grande ingombro la cui vendita è notevolmente diminuita e, probabilmente, la loro produzione è in via di cessazione; • LCD – Liquid Cristall Display (Display a cristalli liquidi): si tratta di una tecnologia che ha quasi sostituito la precedente; i monitor hanno un ingombro assai ridotto e, soprattutto, sono meno nocivi per la salute dell’utilizzatore; • Plasma: Tecnologia emergente. Altre caratteristiche fondamentali di un monitor sono la grandezza, la risoluzione ed il numero di colori. La grandezza di un monitor è misurata in pollici (1” = 2.54 cm) e fa riferimento alla sua diagonale; sono oggi disponibili monitor da 9” a 23” e oltre anche se i più diffusi sono senz’altro i 17”. Ho detto che la misura fa riferimento alla diagonale ma non è sufficiente per avere la “forma” del monitor; a tal proposito si utilizza il Capitolo 3: Hardware 94 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro rapporto tra i due lati (orizzontale/verticale) e sono oggi disponibili monitor del tipo 4/3, 16/9 e 16/10. L’immagine visualizzata da un monitor è costituita da numerosissimi punti detti pixel o dot pitch ognuno dei quali ha un proprio colore; più è piccolo il pixel e tanto maggiore è il loro numero, tanto migliore sarà la qualità dell’immagine. La grandezza del pixel, in genere, è variabile tra 0.23 e 0.28 mm mentre il numero complessivo di pixel è detto risoluzione, indicata con un prodotto tra il numero di pixel orizzontali e quello verticale. Sono oggi disponibili numerosissime risoluzioni ma, le principali sono: 640x480 (VGA), 800x600 (SVGA), 1024x768 (XGA), 1280x1024 (SXGA). Sono disponibili risoluzioni ancora maggiori per schermi di grande formato. E’ utile dare un cenno al termine VGA (Video Graphic Array) introdotto ad opera dell’azienda IBM molti anni fa; prima dello standard VGA erano disponibili standard (CGA, EGA, Hercules) con risoluzioni molto basse, qualità dell’immagine molto scadente e, addirittura, senza il supporto del colore ovvero B/N. La VGA introduceva il concetto di video analogico 640x480 in grado di visualizzare un numero infinito di colori; la qualità dell’immagine visualizzata fa un enorme balzo in avanti. Successivi miglioramenti di questo standard hanno portato alle attuali risoluzioni e migliore qualità dell’immagine come detto in precedenza. Il numero di colori che può assumere ciascun pixel è praticamente infinito con lo standard VGA e con quello emergente digitale detto DVI che arriva a 224= 16.777.216 colori; entrambi fanno uso del sistema RGB (Red-Green-Blue) che forma tutti i colori con solo tre detti fondamentali. Naturalmente ci sono altre caratteristiche che differenziano i monitor quali le normative per la sicurezza sul lavoro e, a tal proposito, ne ricordo una: la certificazione TCO che, nei vari anni, ha visto la TCO95, TCO99 e TCO03. 3.4.8.3. Stampanti e Plotter La stampante è senz’altro tra i dispositivi di output più importanti. C’erano una volta le stampanti seriali e parallele; le stampanti seriali stampavano un carattere alla volta mentre le parallele più caratteri della stessa riga quasi contemporaneamente. Oggi la tecnologia offre stampanti per punti ovvero l’elemento atomico non è più il carattere ma il punto; sono evidenti i vantaggi di una tale trasformazione: una migliore qualità di stampa che arriva fino alla cosiddetta stampa fotografica che tutti conosciamo. Potrei di nuovo dire c’era una volta la classificazione tra stampanti ad impatto e non; con le stampanti ad impatto, gli organi di stampa toccano la carta mentre per quelle a non impatto …… indovinate un po’! Tecnologicamente abbiamo i seguenti tipi di stampanti: Capitolo 3: Hardware 95 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro • Aghi: fino ad alcuni anni fa rappresentavano la fascia di mercato più diffusa mentre oggi sono poco utilizzate perché ad impatto, quindi rumorose, lente per la stampa grafica e impossibilità della stampa a colori, con qualche eccezione che vi racconterò a lezione, ma che offrono qualche vantaggio quale un basso costo di esercizio e la possibilità di stampare più copie mediante l’utilizzo di carta carbone o carta speciale chimica. I costi vanno da circa 200,00 € ai 3.000,00 € . • Ink Jet (Getto di inchiostro): rappresentano le stampanti più diffuse perché hanno un costo di acquisto molto basso e una qualità di stampa fotografica; la tecnologia utilizzata è detta CMYK (Cian-Magent-Yellow-blacK) perché fa uso di solo 4 colori fondamentali. Sono disponibili stampanti con tecnologia single ink, ovvero con un contenitore di inchiostro separato per ogni colore a differenza di altre che utilizzano una cartuccia per il nero ed un’altra per gli altri tre colori fondamentali: ciano, magenta e giallo. Alcune stampanti gestiscono più di 4 colori base arrivando fino ad un massimo di 8 colori. I costi vanno da circa 40,00 € ai 3.000,00 € . • Laser B/N: Stampanti che utilizzano una polvere nera molto sottile detta toner per ottenere stampe di altissima qualità ma in scala di grigio; I costi vanno da circa 100,00 € ai 5.000,00 € . • Laser Colore: stampanti che utilizzano, in genere, 4 toner di colore diverso (Nero, Magenta, Ciano e Giallo) per stampe a colori di qualità fotografica. I costi vanno da circa 300,00 € ai 7.000 ,00 € . • Altre tecnologie, quali il trasferimento termico, hanno fasce di mercato trascurabili. Altre caratteristiche fondamentali delle stampanti sono: 1. Velocità di stampa: la velocità di stampa è senz’altro una delle caratteristiche più importanti per una stampante. Alcuni anni fa essa era misurata in caratteri al secondo mentre l’unità di misura universalmente adottata oggi è quella delle pagine al minuto (ppm). La velocità va da qualche pagina al minuto per le stampanti più lente a oltre 30 ppm in quelle più veloci. A volte la stampa fotografica di una sola pagina in formato A4 può richiedere fino ad alcuni minuti; 2. Risoluzione: è il numero di punti stampati in un pollice, l’unità di misura è detta dpi–dot per inch; ovviamente maggiore è la risoluzione e tanto migliore sarà la qualità di stampa. Le stampanti attuali hanno risoluzioni variabili tra i 100 e i 4800 dpi; 3. Supporto: il supporto è il foglio di carta sul quale la stampante scrive e si distingue per: • Formato carta: il formato carta fa riferimento alle dimensione del foglio gestibile dalla stampante. Tutte le stampanti sono in grado di gestire formati Capitolo 3: Hardware 96 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro diversificati. Uno standard internazionale classifica i formati carta in A4 (21x29,7 cm.), il formato più diffuso ed i suoi multipli A3, A2, A1 A0, doppio A0, etc. e sottomultipli A5, A6, etc.; per avere le dimensioni corrispondenti basta applicare la regola che raddoppia la dimensione più piccola per i multipli mentre dimezza la più grande per i sottomultipli così che il foglio A3 ha dimensioni 42x29,7 , A2 42x59,4 , A5 21x14,85 A6 10.50x14,85 e così via con la possibilità di arrotondare all’intero. Naturalmente le stampanti possono gestire anche formati non standard; per ciascuna stampante, sono specificate dal produttore la minima e la massima dimensione del foglio gestibile. Quando il formato supera l’A3 si parla di stampanti di grande formato o plotter; in passato i plotter utilizzavano una o più penne per tracciare disegni su formati carta molto grandi; oggi i plotter, invece, utilizzano le stesse tecnologie delle stampanti e, in particolare, quella a getto d’inchiostro; • Tipologie: la tipologia del foglio utilizzato si riferisce alla superficie del foglio e si distingue in carta normale, fotografica, lucida, buste, glossy, adesivi, etc. ; alcune stampanti oggi sono in grado di scrivere direttamente anche supporti CD e DVD cosiddetti printable; • Grammatura: la grammatura della carta è un indice del suo spessore. Invece di misurare lo spessore della carta, si utilizza stabilire il peso di un foglio pari a 1 mq. E’ evidente che ad una maggiore grammatura corrisponde un foglio di maggiore spessore. La grammatura più diffusa è pari a 80gr/mq ma sono disponibili grammature assai diversificate. In genere le stampanti sono in grado di gestire supporti da circa 60gr/mq fino a 260 gr/mq; 4. Stampa senza bordi: molte stampanti sono in grado di stampare il foglio intero, che, così, si presenta, una volta stampato, senza il classico rettangolo bianco esterno; questa caratteristica è molto apprezzata nelle stampe fotografiche; Naturalmente questo elenco non è esaustivo, ma credo di aver riportato tutte quelle importanti caratteristiche che consentono di orientarvi nel panorama odierno delle stampanti. 3.4.8.4. Scanner Lo scanner è un dispositivo di INPUT in grado di trasferire immagini o testo da supporti cartacei. La principale caratteristica di uno scanner è la risoluzione che, analogamente a quella descritta per i monitor, è il numero di punti che lo scanner riesce a leggere; in altri termini l’immagine da scandire è discretizzata in un certo numero di punti dei quali lo scanner individua il colore e lo trasferisce al sistema. La risoluzione, in questo caso, è misurata in dpi - dot per inch (punti per pollice); tutti gli scanner consentono l’acquisizione con diverse risoluzioni, stabilite dall’utente, da un minimo, in genere, di 100x100 dpi fino a 4800x4800 dpi raggiunta dagli scanner Capitolo 3: Hardware 97 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro più sofisticati. La maggior parte degli scanner riesce a interpolare i pixel individuati per raggiungere risoluzioni ancora maggiori. Interpolare significa, attraverso opportuni algoritmi, stabilire il colore di un pixel intermedio tra due letti dallo scanner. Per questo spesso si riferisce alla risoluzione ottica e quella interpolata. Altre caratteristiche importanti: • il formato, ovvero la dimensione massima del foglio da scandire e, in genere, è data dal formato A4 ma ci sono anche scanner A3 e scanner di grande formato A2 e successivi; • la velocità di scansione; • la possibilità di leggere i negativi quali le diapositive; • il costo; • la disponibilità di un caricatore automatico degli originali che consente l’acquisizione di più pagine senza l’intervento dell’operatore. 3.4.8.5. Multifunzione Una multifunzione, come dice il nome stesso, è un dispositivo in grado di assolvere a più di un compito; nella sua massima configurazione, un multifunzione consente di stampare, scandire, fotocopiare, ricevere e spedire fax, leggere memorie per fotocamere e stampare direttamente da macchine fotografiche digitali o memorie senza l’ausilio del PC. Il sistema multifunzione più semplice integra le funzioni di una stampante, di uno scanner e di una fotocopiatrice. 3.4.8.6. Fotocamere e videocamere digitali La rivoluzione digitale non poteva trascurare foto e film; anche le fotocamere e videocamere sono divenute digitali e memorizzano i dati, in questo caso foto e filmati, su apposite memorie o, per le videocamere, su cassette DV (Digital Video) o DVD. Le caratteristiche fondamentali di una fotocamera sono la risoluzione, ovvero il numero di pixel memorizzati al momento dello scatto, e lo zoom, funzionalità simile a quella di un binocolo in grado di “avvicinare” il soggetto da fotografare. Le moderne macchine fotografiche hanno risoluzioni che vanno da 1M pixel fino a 10M pixel. Capitolo 3: Hardware 98 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Le memorie utilizzate hanno una capacità che va da 128MB a qualche GB, sono molto piccole, in genere quanto una moneta, e di diversi formati: SD-Secure digital, CF-Compact Flash, XD picture card, MMC-Multi media Card, etc. . Le fotocamere digitali si collegano quasi sempre alla porta USB mentre le videocamere alla porta fire wire. 3.4.8.7. Memorie di massa Come detto la memoria centrale è operativa ed ha tempi di accesso molto bassi; questa memoria ha, però, due limitazioni: la capacità che, per quanto notevole, è insufficiente per contenere una grande quantità di dati e la volatilità che le fa perdere il contenuto al momento dello spegnimento del sistema. Si rende pertanto necessario ricorrere ad altri tipi di memoria che garantiscono stabilità e capacità superiori; tali memorie sono dette memorie di massa proprio in considerazione della notevole capacità di immagazzinamento dei dati. A questa categoria appartengono numerosi dispositivi tecnologicamente raggruppabili in tre grosse categorie: • Magnetici: Memorizzano i dati magnetizzando la superficie del supporto contenente l’informazione; appartengono a questa categoria i dischi rigidi, i floppy disk e i nastri magnetici; • Ottici: l’informazione è memorizzata facendo uso di un laser che incide la superficie del disco; tale operazione, su alcuni supporti, è irreversibile per cui tali supporti non risultano essere riscrivibili. Appartengono a tale categoria i CD ed i DVD; • Flash RAM o memory flash: sono dispositivi esclusivamente elettronici che si caratterizzano per la facile trasportabilità ed una buona capacità; appartengono a questa categoria i PEN DISK, detti anche USB disk, Flash disk e PEN DRIVE. In funzione delle modalità di accesso ai dati, invece, le memorie di massa possono essere così classificate: • Memorie ad accesso uniforme: Tutte le celle hanno lo stesso tempo di accesso; a questa categoria appartiene la RAM e, in genere, le memorie elettroniche; • Memorie ad accesso diretto: il tempo necessario per l’accesso all’informazione richiesta dipende dalla sua posizione rispetto agli organi di lettura/scrittura; a questa categoria appartengono i dischi rigidi e, in genere, le cosiddette memorie rotanti; • Memorie ad accesso sequenziale: l’accesso ad una informazione è possibile solo scorrendo in maniera rigorosamente sequenziale tutte le precedenti; a tale categoria appartengono i nastri magnetici. Capitolo 3: Hardware 99 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Il tempo di accesso è, in genere, definito come il tempo intercorrente tra l’istante in cui si chiede l’informazione e quello in cui essa è raggiunta dagli organi di lettura. Il tempo di trasferimento è il tempo necessario, ad accesso avvenuto, per trasferire l’informazione al dispositivo che l’ha richiesta. Il tempo di lettura/scrittura o di risposta è dato dalla somma tra il tempo di accesso e quello di trasferimento. Quasi sempre il tempo di trasferimento è trascurabile perché la velocità di scambio dati sul bus o attraverso il DMA avviene a velocità molto alte (Vedi interfacce). Ritengo opportuno chiarire la differenza tra DRIVE e supporto; l’informazione è memorizzata sui supporti (floppy disk, CD, DVD, etc.) mentre il drive è il dispositivo che legge e/o scrive l’informazione sul supporto. Così il CD è il supporto che contiene l’informazione mentre il lettore CD è il drive che lo legge mentre il masterizzatore è in grado anche di scriverlo. 3.4.8.7.1. Dischi magnetici La memoria di massa con i tempi di accesso più bassi e la più grande capacità è senz’altro il disco rigido o Hard Disk. Un disco rigido è costituito da uno o più supporti di forma circolare detti “piatti” agganciati allo stesso asse rotante che consente loro di ruotare in maniera solidale; ogni piatto dispone di due testine, una per ogni superficie, e la stessa testina è in grado di leggere o scrivere l’informazione; tutte le testine sono agganciate allo stesso asse e si muovono anch’esse in maniera solidale: Capitolo 3: Hardware 100 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 2 TESTINE PER PIATTO Superfici : Le testine sono agganciate allo stesso asse e si muovono in maniera solidale Superiore e Inferiore I piatti sono agganciati allo stesso asse e ruotano in maniera solidale Le testine riescono a leggere e scrivere l’informazione senza toccare la superficie del piatto in maniera tale da evitarne l’usura. Ciascun piatto è diviso in tracce e ogni traccia in settori, tra un settore e l’altro vi è una zona inutilizzata denominata gap: Traccia Settore Gap Capitolo 3: Hardware 101 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro La logica del disco è quella di leggere o scrivere un settore, in genere costituito da 512Byte. Ciascun settore è raggiungibile dalla testina di lettura/scrittura grazie al movimento rotatorio dei piatti e quello trasversale delle testine che si infilano tra i piatti. Il tempo di accesso, nel caso dei dischi rigidi, è dato dalla somma del tempo di posizionamento e di latenza. Il tempo di posizionamento è il tempo impiegato dalla testina per raggiungere la traccia contenente il settore da leggere. Il tempo di latenza, invece, è legato alla velocità di rotazione del disco ed è quello necessario affinché, raggiunta la traccia, il settore da leggere/scrivere passi sotto la testina. Questi tempi sono, in genere, dell’ordine di pochi millesimi di secondo. Ed è arrivato il momento di dare le cifre. I moderni dischi rigidi sono costituiti da piatti del diametro di 3”1/2 e 2”1/2 utilizzati, questi ultimi, dai computer portatili. Le velocità di rotazione sono pari a 4200 o 5400 giri/min per i dischi da 2”1/2 mentre i dischi da 3”1/2 arrivano anche a 7200 giri/min e 10K giri/min. Per i dischi con interfaccia SCSI si arriva a 10K e 15K giri/min. Le capacità variano da 40 GB a 1 TB (1024 GB). I costi vanno da circa 50,00 € a 350,00 €. Da alcuni anni i dischi rigidi dispongono della tecnologia SMART (SelfMonitoring Analysis and Reporting Technology), che fornisce un avviso all’utente di guasto imminente del disco rigido. Questa tecnologia consente, pertanto, di sostituire il disco prima che si guasti definitivamente con conseguente perdita dei dati. Il danno economico maggiore provocato dalla rottura del disco rigido è dovuto alla perdita dei dati e non certo al costo della sua sostituzione, che è del tutto trascurabile. Ci sono aziende specializzate per il recupero dei dati da dischi rigidi guasti ma il costo di una tale operazione può essere anche di decine di migliaia di euro. 3.4.8.7.2. CD e DVD I CD ed i DVD utilizzano una tecnologia completamente diversa per la lettura/scrittura dei dati; si tratta di supporti ottici letti e scritti mediante laser. Introdotti nel 1976 dalla Philips quali supporti digitali per la musica e denominati CD-DA (Compact Disc Digital Audio), sono stati successivamente utilizzati come memorie a sola lettura denominati CD-ROM (Compact Disc Read Only Memory).La capacità iniziale era di 74 minuti di audio corrispondenti a 650MB di dati, mentre oggi il supporto più diffuso è di 80 minuti pari a 700MB ma ne esistono di capacità superiore poco standardizzata e, quindi, poco utilizzata. Capitolo 3: Hardware 102 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro La tecnologia ha progredito velocemente riuscendo a fornire i supporti registrabili e riscrivibili utilizzando un drive chiamato masterizzatore. Ma non ci si poteva fermare e si è arrivati ai DVD (Digital Versatile Disc) la cui capacità è di 4,7GB e 8,5GB. Si distinguono DVD-ROM e DVD Video contenenti FILM. Sui supporti registrabili, il processo di masterizzazione ne altera la superficie, rendendo così impossibile la cancellazione e/o la riscrittura; pur tuttavia tali supporti sono scrivibili più volte fino al riempimento, mantenendo o meno il contenuto precedente secondo una tecnica denominata multisessione. La seguente tabella elenca i supporti disponibili attualmente sul mercato e le loro principali caratteristiche: Supporto Capacità Descrizione CD-R 700 MB, 80 minuti Registrabile. Può essere scritto più volte fino al riempimento ma non è cancellabile. CD-RW 700 MB, 80 minuti Riscrivibile. Può essere letto, cancellato e riscritto più volte, come un normale floppy disk. La capacità effettivamente utilizzabile è di poco oltre i 500MB. DVD-R, DVD+R 4,7 GB Come CD-R. Per i DVD esistono due standard mondiali (denotati con + e -) portati avanti da due diverse organizzazioni che, non riuscendo a raggiungere un accordo, hanno condotto ricerche indipendenti che hanno portato a due diverse soluzioni. Capitolo 3: Hardware 103 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro DVD-RW, DVD+RW 4,7 GB Come CD-RW. DVD+DL 8,5 GB Come CD-R. DL=Dual Layer. Questi, invece, i drive disponibili: Drive Descrizione Lettore CD Legge CD-R, CDR-W. Ormai in fase di fine produzione. Lettore DVD Legge tutti i supporti; quelli di ultima generazione anche i DL. Masterizzatore CD Legge e scrive CD-R, CD-RW. Masterizzatore DVD Legge e scrive tutti i supporti ad eccezione dei DL. Masterizzatore DVD DL Legge e scrive tutti i supporti. I masterizzatori DVD attualmente in commercio sono di tipo DL. Naturalmente si sono succeduti, nel corso del tempo, altri drive quali, ad esempio, i masterizzatori che supportavano solo i CD-R, i masterizzatori DVD+ e DVD-. La tecnologia ha fornito a getto continuo soluzioni migliorative con riferimento, per esempio, alla velocità di masterizzazione passata da 2x a circa 52x per i CDR e da 1x a 16x per i DVD+/-R; la velocità di riferimento 1x corrisponde a 150KB/sec per i CD e 1.135KB/sec per i DVD. Famose sono le tecnologie di scrittura burn proof e samless link: queste due tecnologie hanno come obiettivo quello di evitare il fallimento del processo di masterizzazione con conseguente perdita del supporto; in precedenza, infatti, il processo di masterizzazione non poteva essere interrotto e, nel caso, il supporto era irrimediabilmente rovinato ed Capitolo 3: Hardware 104 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro inutilizzabile mentre, con le tecnologie di cui innanzi, una interruzione del processo non compromette l’esito finale della masterizzazione. Uno sguardo al futuro: sono da poco in commercio masterizzatori di ultima generazione che utilizzano la tecnologia BD (Blu-ray Disc) con capacità del supporto che arriverà addirittura a 200GB. 3.4.8.7.3. Pen Disk, MP3, foto album I Pen Disk sono, in ordine di tempo, le ultime memorie ad essere state inventate e per questo ci si riferisce ad esse con numerosi nomi quali USB Disk, chiavette USB, Flash disk, Pen drive. Le caratteristiche fondamentali di un pen disk sono la discreta capacità, attualmente da 128MB a 4GB, e la facile trasportabilità, dovuta al peso irrisorio, qualche decina di grammi, ed alle ridotte dimensioni, che ne consentono la custodia, senza alcun impiccio, persino nel portafoglio; si tratta, pertanto, di una memoria da portare sempre con sé. Sono in commercio pen disk in grado di leggere i file MP33; questi dispositivi, di fatto, stanno sostituendo i lettori portatili di CD e stereo cassette. Prodotti analoghi sono i foto album portatili che, muniti di un piccolo display LCD, consentono la memorizzazione e la visualizzazione di moltissime foto e/o la visione di filmati. 3.4.8.7.4. Confronto tra le memorie di massa Dopo aver visto tanti tipi di memorie di massa ci si chiede come mai una tale diversificazione; ebbene questi dispositivi, pur avendo tutti lo stesso scopo ovvero quello di memorizzare dati, hanno specificità diverse. I dischi rigidi costituiscono la memoria di massa più veloce e con la maggiore capacità; sono utilizzati per archiviare tutti i dati utilizzati dall’utente, i programmi ed il sistema operativo. Nei dischi rigidi, però, il drive ed il supporto costituiscono un’unica unità non estraibile. Esistono dei dispositivi detti slitte, che consentono di estrarre il disco rigido dal sistema e dei contenitori con interfaccia USB ma sono piuttosto grandi, pesanti e non sempre hot plug. 3 La codifica MP3 consente la compressione dei file audio mantenendo una discreta qualità; la compressione dati consente di ridurre la grandezza dei file. Non mi dilungo molto perché la compressione sarà trattata in maniera approfondita il prossimo anno. Capitolo 3: Hardware 105 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro I Floppy disk hanno il vantaggio dell’estraibilità del supporto ma, come detto, sono ormai quasi del tutto inutilizzati. I CD ed i DVD si caratterizzano per l’estraibilità del supporto e la tecnologia non più magnetica ma ottica. Sono i supporti esterni più utilizzati perché leggibili su tutte le macchine, con una notevole capacità ed una grande affidabilità. I nastri magnetici sono utilizzati da piccole e medie aziende, enti e grandi organizzazioni al solo scopo di effettuare copie di back-up. Quasi mai i nastri sono utilizzati da utenze domestiche. I pen disk si caratterizzano per la loro praticità: sono molto piccoli, utilizzabili con connessioni hot plug su tutti i PC tramite l’interfaccia USB, hanno velocità di trasferimento dati e capacità apprezzabili. Il pen disk è utile per il trasporto dati e, in genere, viene sempre portato con sé dall’utilizzatore, perché facilmente contenibile persino nel portafoglio. 3.4.9. Classificazione dei sistemi di elaborazione I sistemi di elaborazione sono classificati in funzione delle loro caratteristiche hardware e software; essi si differenziano, dal punto di vista hardware, soprattutto per potenza di calcolo, dovuta essenzialmente alle caratteristiche ed al numero dei processori, e per la capacità di memoria, con riferimento sia a quella centrale che quelle di massa. Nei moderni elaboratori hanno una grande importanza anche il sottosistema video, soprattutto per applicazioni di grafica avanzata e videogiochi, la qualità e la quantità di dispositivi periferici collegati e/o collegabili, etc. . C’erano una volta gli Home Computer, i computer per uso domestico. Oggi, a causa del continuo ribasso dei prezzi, i PC-Personal Computer sono utilizzati sia per uso domestico che per uso professionale da aziende, scuole, enti, professionisti, etc. . Gli odierni personal computer hanno una notevole capacità di calcolo, memorie piuttosto grandi e la possibilità di collegare numerosissimi dispositivi periferici, come visto in precedenza, ma non gestiscono la multiutenza mediante dispositivi terminali. Un personal computer ben configurato può essere addirittura utilizzato come Server nell’ambito di una piccola rete locale. D’altra parte le cosiddette consolle per giochi, quali X-Box di Microsoft e Playstation di Sony, sono dei veri computer dalle capacità grafiche e di elaborazione notevoli, almeno per quanto riguarda il software ludico. Nella fascia immediatamente superiore troviamo i Mini Computer ed i grandi computer detti Mainframe, che si distinguono per la loro maggiore potenza di calcolo e capacità di memorizzazione dati. Sono utilizzati come Server da grosse Capitolo 3: Hardware 106 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro organizzazioni; si pensi, ad esempio, all’amministrazione finanziaria del nostro stato che deve memorizzare milioni di dichiarazioni dei redditi ogni anno. Una menzione a parte va fatta per i Supercomputer, utilizzati nella ricerca scientifica più avanzata e caratterizzati dalla più grande potenza di calcolo. Altre categorie di prodotti hanno funzioni simili ai personal computer: • Palmari, PDA (Personal Digital Assistant) o Pocket PC: piccoli sistemi che possono essere tenuti nel palmo di una mano; hanno capacità elaborative in grado di eseguire programmi semplici quali orologio, calcolatrice, calendario, rubrica, agenda e memorizzazione di appunti, anche vocali o scritti a mano, e programmi di una certa complessità quali Word e Excel per pocket PC e navigatori satellitari, mediante l’ausilio di una antenna GPS, che rilava la propria posizione sulla superficie terrestre. I palmari, in genere, utilizzano il sistema operativo Windows mobile; • Smartphone: si tratta di cellulari con possibilità di eseguire semplici programmi applicativi; spesso invadono il campo dei palmari ed i palmari, a volte, hanno anche la funzione di telefono cellulare; • NetBook: una nuova categoria di notebook caratterizzati da dimensioni e peso, in genere inferiore ad 1 Kg, molto ridotti. 3.5. Conclusioni Fornire un panorama completo della grande varietà dell’hardware è impresa assai difficile, pur tuttavia in questo capitolo ho trattato l’argomento in maniera abbastanza approfondita e completa. La trattazione dell’argomento si concluderà con la visione di componenti e dispositivi che hanno fatto la storia dell’informatica, breve ma intensa, e delle attrezzature disponibili nel nostro laboratorio di informatica; infine daremo uno sguardo all’interno di uno dei PC disponibili nel laboratorio. Nel corso del capitolo abbiamo potuto vedere come i dispositivi possono essere meccanici, elettromeccanici ed elettronici. Un dispositivo meccanico è costituito da parti in movimento azionate da energia animale o umana. Per esempio, la tastiera è meccanica anche se non manca la parte elettronica, un trapano manuale, un taglia erba senza motore, etc. . Un dispositivo elettromeccanico è costituito da parti in movimento azionate dall’energia elettrica. Ad esempio il disco rigido ha una componente elettromeccanica, per la rotazione dei piatti e lo spostamento delle testine, un trapano elettrico o un asciugacapelli, etc. . Capitolo 3: Hardware 107 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Un dispositivo elettronico è in grado di elaborare o memorizzare l’informazione senza che vi siano parti in movimento; sono ovviamente ed esclusivamente elettroniche la CPU, la RAM, i pen disk, le calcolatrici non scriventi, etc. . In uno stesso dispositivo possono essere presenti una o più di tali tecnologie. Un dispositivo elettronico ha una velocità di elaborazione milioni di volte superiore a quelli elettromeccanici che, a loro volta, sono di gran lunga più veloci di quelli meccanici. Si pensi ad una elaborazione che coinvolga la sola CPU e la memoria centrale quale l’elaborazione su una foto (rotazione, taglio, etc.), ad una che coinvolga il disco rigido, come il caricamento iniziale del sistema operativo, alla stampa di una o più pagine e, infine, alla vostra lentezza nello scrivere mediante la tastiera. Concludo il capitolo con una citazione di Umberto Eco: Il computer non è una macchina intelligente che aiuta le persone stupide, ma è una macchina stupida che funziona solo nelle mani delle persone intelligenti. Capitolo 3: Hardware 108 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Capitolo 4. Il sistema operativo Windows 4.1. Generalità Questo è uno di quei capitoli definiti trasversali rispetto al corso che vi accingete a seguire; gli argomenti in esso presenti, infatti, saranno trattati, per la parte iniziale, durante il primo anno e, per la restante parte, durante il terzo ed ultimo anno del corso di studio. Windows è un sistema operativo; parlerò dei sistemi operativi in un altro capitolo ma ritengo opportuno almeno darne qualche cenno introduttivo. Un sistema operativo è un software cosiddetto di base ovvero necessario per il funzionamento del sistema di elaborazione. Le principali funzioni sono quelle di gestione del sistema, di ottimizzazione delle risorse, di interfacciare l’utente ovvero rendere semplice l’utilizzo del sistema anche agli utenti meno esperti. Uno dei sistemi operativi più diffusi al mondo, con centinaia di milioni di installazioni, è Windows, sviluppato da Microsoft e le cui ultime versioni sono Windows XP e la recentissima Windows VISTA (Prima edizione gennaio 2007). Questo capitolo vuole essere soprattutto un riferimento a quella teoria necessaria per poter correttamente utilizzare il PC mentre per la pratica ci si limiterà ad una sorta di riepilogo del tipo “come si fa per” e riportare l’utilizzo delle barre degli strumenti e dei menù. Voglio evitare di riscrivere la guida in linea di Windows, alla quale si invita a ricorrere per qualsiasi esigenza, per cui questo capitolo vuole essere solo una traccia di quello che si farà in laboratorio ed un utile riferimento rapido alle operazioni più frequenti. Vi ricordo che potete avviare la guida in linea di Windows da <start\guida in linea e supporto tecnico>: \ 4.2. File, cartelle, volumi e unità Una delle funzioni più importanti del sistema operativo è gestire le memorie di massa ovvero Hard Disk, CD ROM, DVD, Floppy disk, Pen Disk, etc, di cui si è parlato nei capitoli precedenti. Abbiamo visto come, per esempio gli hard disk, sono organizzati fisicamente in tracce e settori; sarebbe impossibile per l’utente poter gestire il disco rifacendosi alla sua struttura fisica, per questo le memorie di massa sono organizzate in volumi, cartelle e file. Un file è un insieme di informazioni omogenee, pensate ad un documento Word o Excel; qualsiasi lavoro realizzate con il Capitolo 4: Il sistema operativo Windows 109 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro vostro PC, verrà salvato, ovvero memorizzato, in un file (o più file o cartelle); il sistema distingue i file mediante il loro nome ovvero ad ogni file è assegnato un nome; ogni volta che, infatti, salvate un documento, vi viene chiesto il nome da assegnargli. C’erano una volta i files di programma ed i files di dati; i files di programma contengono istruzioni eseguibili dal sistema mentre i files di dati costituiscono la parte passiva e sono l’oggetto dell’elaborazione; concetto estremamente semplice da capire, visto che abbiamo studiato gli algoritmi. Oggi in effetti non sempre è così perché anche i files di dati possono contenere “porzioni di codice” dette macro. Un disco può contenere centinaia di migliaia di file e sarebbe pertanto difficile poterli distinguere e gestirli organizzandoli solo con il nome. Per questo i file sono organizzati in cartelle. Una cartella è, pertanto, un contenitore di file e non solo perché, infatti, una cartella può contenere altre cartelle; così l’organizzazione delle cartelle è gerarchica e la cartella principale o iniziale è detta radice. Questa semplice organizzazione si dimostra molto efficiente perché consente di organizzare i file per gruppi omogenei e, per esempio, in una cartella posso salvare i documenti, in un’altra le foto e, a sua volta, questa è organizzata in cartelle distinte per anni e così via. Le cartelle sono contenute nei volumi; un volume è una organizzazione logica di informazioni, in genere distinte in file e cartelle, e allocata su uno o più dischi o memorie di massa. In pratica ho detto che un disco può essere diviso in più unità logiche disgiunte dette volumi o partizioni oppure che un volume può essere costituito da più dischi fisici ma questa è un’altra storia! (E’ presto per approfondire ma lo farò). In genere una unità logica coincide con una unità fisica ovvero un disco è organizzato in un unico volume ovvero contiene una sola partizione anche se oggi, con l’aumento notevole della capacità dei dischi, sempre più spesso questi vengono organizzati in due partizioni o volumi. Ogni volume o unità logica viene individuato dal sistema mediante una lettera dell’alfabeto seguita da due punti; così: • A: indica il volume allocato sul primo floppy disk; • B: indica il volume allocato sul secondo floppy disk; • C: indica, in genere, il primo volume o prima partizione del primo disco fisso e, sempre, il volume di sistema ovvero quello utilizzato dal sistema operativo per l’avvio e la gestione; • D:, E:, F: …. indicano, in genere, i volumi successivi sul primo e sui dischi seguenti, quindi i CD, DVD, masterizzatori, Pen disk, etc…. . In pratica, fatta eccezione per il volume utilizzato dal sistema e per i due floppy, a tutti gli altri volumi si può assegnare una lettera qualsiasi e non finisce qui perché ci sono le unità virtuali ma questa è sempre un’altra storia! Capitolo 4: Il sistema operativo Windows 110 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Le lettere assegnate ai volumi possono, quindi, cambiare e ciò può generare qualche confusione; per questo ad ogni volume può essere assegnata una etichetta o label ovvero una successione di 11 o più caratteri in funzione del file system4 (Oh, scusate mi è scappato!) . L’etichetta viene assegnata al supporto e non al drive così, per esempio, un Pen Disk o un CD con etichetta “Foto Gita” vedrà cambiare, da un PC all’altro, la lettera associata ma non la sua etichetta. Pertanto, un consiglio: battezzate i vostri Pen Disk. Per l’organizzazione gerarchica delle cartelle si utilizzano due analogie: La natura e gli alberi genealogici. Con riferimento alla natura, abbiamo già parlato della radice e credo sia ovvio il concetto di ramo così come la denominazione delle cartelle che non contengono altre cartelle dette foglie. Con riferimento agli alberi genealogici, invece, si estende agli alberi informatici il concetto di padre o genitore (parent), fratello, figlio etc. . Radice Volume: Etichetta Windows System System32 Fonts TerzaProg Documenti Documets and settings Programmi Ospite Prof Desktop I nomi di file e cartelle possono essere lunghi fino a 255 caratteri ma si consiglia di non superare i 15/20 caratteri ed in genere può essere utilizzato qualsiasi carattere del codice ASCII ad eccezione dei seguenti, che sono utilizzati per scopi speciali: Carattere Descrizione \ Separatore nei percorsi 4 Il file system fa riferimento al modo con il quale il sistema operativo organizza i file e le cartelle sui volumi. In passato si utilizzavano file system di tipo FAT e FAT32 mentre oggi, pur mantenendo la compatibilità e la possibilità di utilizzare i vecchi file system, Windows XP, Windows 2000 e Windows per SERVER utilizza il file system di tipo NTFS. Capitolo 4: Il sistema operativo Windows 111 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Carattere Descrizione / Precede opzione : Indicatore di unità *e? Caratteri jolly " Delimitatore <e> Reindirizzamento | Piping . Separatore tra nome ed estensione Il nome di un file è costituito da due parti: il nome e l’estensione del nome costituita, in genere, da tre caratteri e separata dal nome mediante un punto. L’estensione del nome fa riferimento al contenuto del file; Windows tende a nascondere le estensioni ed a sostituirle con icone. Ogni programma utilizza proprie estensioni per individuare i propri file, per cui oggi le possibili estensioni sono migliaia; queste alcune: Estensione Icona Descrizione .DOC Documento di Microsoft Word .XLS Foglio di calcolo Microsoft Excel .MDB Database Microsoft Access .PPT Presentazione Microsoft Power Point .PUB File di Microsoft Publisher .TXT File di testo .MP3, .Wav, .MPEG. .Mid File multimediale: audio/video e altre .BMP File bit mapped: mappa di bit (grafico, foto, etc.) Capitolo 4: Il sistema operativo Windows 112 L’Informatica per i miei studenti – Volume 1 Estensione Icona Prof. Bianco Mauro Descrizione .JPG Foto .DLL Dynamic Link Library: Estensioni di programma .INI File di inizializzazione Varie .EXE Programma .SYS File di sistema .COM Comando: obsoleti, vecchi programmi MS-DOS .DRV Driver di periferica Non noto Tutti i file non riconosciuti dal sistema L’estensione del nome, in pratica, dice al sistema come “trattare” il file ovvero quale programma deve essere avviato affinché il contenuto del file sia correttamente gestibile. Se, per esempio, cambiamo l’estensione di un file da Wav a Doc, lasciandone inalterato il contenuto, il sistema tratterà il file come documento e non come audio, per cui si riceve un messaggio di errore oppure il testo visualizzato è completamente incomprensibile. Per questo, mai cambiare l’estensione del nome del file. Spesso l’icona associata dipende dal programma che gestisce il file. Il tutto è molto semplice perché il sistema associa a ciascun file un programma che lo gestisce cosicché quando si apre un file all’elaborazione, il sistema esegue il corrispondente programma. Fate molta attenzione ai file .EXE, .DLL, .SYS scaricati da Internet perché possono contenere virus che determinano malfunzionamenti del sistema e, peggio, possono cancellare i dati. Non è questo il momento di affrontare il problema della sicurezza ma, come al solito, …………….. ne parleremo e come se ne parleremo!. Cosa è necessario, pertanto, per individuare un file? Innanzitutto il suo nome, ma non basta, occorre sapere anche il nome della cartella che lo contiene che, a sua volta, può essere contenuta in un’altra cartella e poi un’altra fino, manco a dirlo, al volume: Volume:\cartella\........\cartella\file detto percorso; così “c:\documents and setting\antonio\documenti\relazione.doc” individua il file relazione.doc contenuto nella cartella documenti di Antonio a sua volta in “documents and settings” sul disco, scusate, sul volume, C:. Avrete sicuramente notato il simbolo “\” (back slash) che separa i nomi di cartelle e file. Capitolo 4: Il sistema operativo Windows 113 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Siccome utilizzerete subito le cartelle condivise in rete5 (che disastro!!!! Ho nominato cartelle condivise e rete ma ……………. ne parleremo), ritengo opportuno fornire anche il seguente formato del percorso: \\nome Server\nome condivisione\cartella\........\cartella\file nel quale oltre al percorso di cui innanzi compare, preceduto da “\\” il nome di una macchina in rete e quello di una cartella condivisa. Il sistema operativo Windows indica con “.” e “..”, rispettivamente, la cartella corrente e la cartella superiore (padre o parent directory) della corrente. 4.3. Al lavoro: gestione di file e cartelle Le operazioni più ovvie sui file e le cartelle sono quelle di creazione, cancellazione, cambio nome, copia, spostamento, etc.; Windows mette a disposizione degli utilizzatori il programma esplora risorse avviabile con <start\tutti i programmi\accessori\esplora risorse> Appena avviato il programma, ci si presenta una finestra divisa in due parti: quella di sinistra mostra la struttura gerarchica delle risorse del computer mentre quella di destra evidenzia il contenuto della cartella corrente ovvero quella selezionata nella parte sinistra; vi dico in maniera esplicita che una sola può essere la cartella corrente. Per spiegare la funzionalità di esplora risorse, scelgo di utilizzare la seguente tabella, il cui titolo potrebbe essere come si fa per: come si fa per Selezionare un elemento Puntare e cliccare Selezionare più elementi (nella finestra di destra) • Tenere abbassato il tasto <CTRL> e cliccare sugli oggetti da selezionare; • Puntare e trascinare. Cancellare elemento/i selezionati • <Dx> \ Elimina • <File\Elimina> • Trascinare sul cestino • Barra degli strumenti 5 Una rete è costituita da un insieme di sistemi di elaborazione messi in comunicazione tra loro allo scopo di condividere risorse, per esempio cartelle (dette cartelle condivise), accessibili, così, dagli utenti della rete. Capitolo 4: Il sistema operativo Windows 114 L’Informatica per i miei studenti – Volume 1 Copiare file da una cartella ad un’altra Prof. Bianco Mauro 1. Selezionare 2. <Dx>\copia 3. Aprire destinazione 4. <Dx>\incolla Spostare file da una cartella ad un’altra 1. Selezionare 2. <Dx>\taglia 3. Aprire destinazione 4. <Dx>\incolla Cambiare la visualizzazione disposizione delle icone e la Per copiare o spostare file/cartelle è possibile utilizzare il trascinamento facendo attenzione alle seguenti regole: 1. Se le cartelle di origine e di destinazione sono sulla stessa unità o volume, allora il sistema sposta (taglia/incolla); 2. Se le cartelle di origine e di destinazione non sono sulla stessa unità o volume, allora il sistema copia (copia/incolla); 3. Se, durante il trascinamento, si tiene abbassato il tasto <CTRL> allora il sistema copia (copia/incolla). Vi suggerisco di provare l’utilizzo del tasto destro del mouse e dello scroll (rotellina centrale). Il pulsante destro del mouse consente l’accesso al menù contestuale ovvero dipendente dall’oggetto puntato; in particolare l’ultima voce del menù contestuale è quasi sempre proprietà e consente di visualizzare l’elenco delle caratteristiche dell’oggetto puntato. Molte delle operazioni riportate sono attivabili anche dalla barra dei menù. Capitolo 4: Il sistema operativo Windows 115 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 4.4. Utility cerca e caratteri jolly Come visto in precedenza, le cartelle consentono una pratica e logica archiviazione dei file; il vantaggio più immediato è la facilità con la quale, una buona organizzazione delle cartelle, consente, successivamente, una rapida individuazione dei file. Nell’arco di alcuni anni un qualsiasi utente crea, tra documenti, file audio e video, foto, etc., migliaia se non decine di migliaia di file. Dopo qualche tempo, una cattiva organizzazione, rende estremamente difficile l’individuazione di uno o più file che si rende necessario consultare o aprire all’elaborazione. A volte, anche in presenza di una buona organizzazione, individuare un file risulta difficile. Tutti i sistemi operativi mettono a disposizione dell’utente una serie di programmi detti programmi di utilità o semplicemente utility; Windows ci aiuta nella ricerca di uno o più file con l’utility “Cerca”: <Start>/<Cerca>. La ricerca di uno o più file può essere fatta specificando dove cercare e secondo una serie di criteri: il nome, la data di creazione, la dimensione, gli attributi, etc. . Non ritengo opportuno dilungarmi molto sulla descrizione di questo programma perché sarà sufficiente una mezz’ora in laboratorio per spiegarvi in maniera abbastanza completa il suo utilizzo; una semplice lezione pratica è molto più efficace di numerose pagine descrittive. Ritengo invece opportuno descrivere l’uso dei caratteri jolly: “*” e “?”. Il loro funzionamento è identico al jolly nel gioco del ramino o della “matta” nel più famoso gioco del 7½. Il carattere “?” è un jolly relativo ad una singola posizione mentre “*” è un jolly ripetitivo a partire dalla sua posizione; non sono stato molto chiaro e lo so ma con qualche semplice esempio comprenderete l’uso dei jolly. Quando si cerca un file è possibile specificarne una parte del nome, così, per esempio, se chiedo al sistema di cercare “rela”, mi vengono elencati tutti i file che cominciano con “rela”, come “relazione”, oppure contenenti la parola “rela”, come “correlazione”. Se, invece, voglio tutti i file comincianti con “rela” allora devo utilizzare la maschera di ricerca “rela*”; con “rela?”, invece, il sistema troverà tutti i file il cui nome comincia con “rela” ma avente lunghezza 5: “rela1”, “rela2”, “relaz”, etc., ma non “relazi”. L’uso del carattere jolly può essere utilizzato indipendentemente per il nome del file e/o la sua estensione. In effetti una stringa contenente i caratteri jolly è una cosiddetta maschera di ricerca ed il sistema, nel caso dell’utility cerca, elenca solo i file che combinano con tale maschera. Ritengo utile, per completare la trattazione, fornire esempi di maschere e relativi risultati: Capitolo 4: Il sistema operativo Windows 116 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Maschera di ricerca File individuati (esempi) rela Tutti i file con nomi comincianti o contenenti la parola “rela” ed estensione qualsiasi; rela* Tutti i file con nomi comincianti con la parola “rela” ed estensione qualsiasi; rela?? Rela12.doc, relazi.bmp; *.doc Tutti i file con estensione .doc; A*.do? Tutti i file il cui nome comincia con “A” ed estensione “do” seguita da un qualsiasi carattere (dos, doc, etc. ); *.* Indovinate un po’! Utilizzando l’utility cerca di Windows, vi renderete conto che il carattere jolly “?” funziona in maniera identica al jolly “*”; non è un mio errore ma Windows non rispetta il ruolo dei jolly. 4.5. Il cestino Il cestino è, in pratica, una cartella contenente i file cancellati. Il cestino ha lo scopo di evitare la cancellazione accidentale di file e cartelle. Quando si cancellano file e cartelle, essi vengono spostati nel cestino dal quale possono essere ripristinati, ovvero riportati nella loro posizione originaria o in un’altra cartella a scelta dell’utente mentre la cancellazione dal cestino elimina definitivamente file e cartelle selezionati. Per questo sul cestino è possibile utilizzare due nuove operazioni: il ripristino e lo svuotamento. L’operazione di ripristino riporta nelle posizioni originarie gli oggetti selezionati mentre lo svuotamento del cestino elimina definitivamente tutti gli oggetti in esso contenuti. Una possibilità molto comoda è quella di visualizzare gli oggetti presenti nel cestino per data di eliminazione. In genere il cestino non viene svuotato ma, all’occorrenza, si selezionano gli elementi da più tempo presenti nel cestino e li si elimina. Concludo con le proprietà del cestino accessibili mediante il pulsante Dx del mouse che consentono di: • assegnare la percentuale di spazio riservata al cestino e calcolata sulla capacità del disco; Capitolo 4: Il sistema operativo Windows 117 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro • disattivare la funzionalità del cestino 6; • richiedere o meno una conferma di cancellazione; • configurare i volumi in maniera indipendente. Le unità rimovibili, ad esempio floppy disk e usb disk, non hanno cestino, per cui una qualsiasi cancellazione è definitiva. 4.6. Collegamenti e associazioni Collegamenti e associazioni offrono all’utilizzatore una grande flessibilità. Abbiamo visto in precedenza come copiare un file o una cartella ma, molto spesso, invece di copiare è più utile “collegare” un’icona ad una cartella. Un collegamento è un riferimento ad un oggetto e si comporta come l’oggetto cui si riferisce. E’ la possibilità di disporre di un riferimento ad un oggetto in più punti all’interno del nostro sistema occupando pochissimo spazio. Sto dicendo, per esempio, che trascinando un file su un’icona che rappresenta un collegamento ad una cartella, questo viene spostato o copiato nella cartella cui il collegamento si riferisce. E’ possibile avere collegamenti a qualsiasi oggetto, per esempio una stampante o una unità oppure ad un programma. In genere molti collegamenti vengono aggiunti sul desktop, in modo da poter avere accesso rapido a tutti quegli oggetti che utilizziamo più spesso, ma un collegamento può essere inserito all’interno di qualsiasi cartella. Da notare che un collegamento è completamente differente da una copia dell’oggetto. La copia occupa lo stesso spazio dell’oggetto originale dal quale è completamente distinta mentre un collegamento, in pratica un file con estensione .LNK, occupa pochissimo spazio, in genere meno di 1 KB; se si cancella il collegamento o lo si rinomina o lo si sposta, l’oggetto originale non subisce alcuna modifica. Un collegamento può essere creato mediante il pulsante destro del mouse con copia e, quindi, incolla collegamento oppure mediante nuovo collegamento e sfogliando le risorse del computer per individuare l’oggetto da collegare. Il sistema può eseguire solo programmi, per esempio file con estensione .exe, ed allora nessuna azione dovrebbe essere eseguita quando si attiva, mediante un doppio click, un file di dati; per esperienza, però, sappiamo che quando si attiva un file .DOC, si avvia Microsoft WORD mentre per un .WAV si avvia un software per l’ascolto della musica. Tutto questo è comodo perché, per esempio, consente l’immediata gestione di un file di dati scaricato da Internet e non costringe l’utente ad avviare ogni volta il programma corretto per poter gestire un certo tipo di file. Tutto questo è possibile grazie alle associazioni tra le estensioni dei nomi di file, tipi di file, ed i programmi. E’ possibile visionare le associazioni, modificarle, aggiungerne di nuove o eliminarle mediante la voce di menù <Stumenti\opzioni cartella\tipi di 6 Attenzione: in questo caso le cancellazioni saranno definitive. Capitolo 4: Il sistema operativo Windows 118 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro file> in esplora risorse. Si sconsiglia di modificare le associazioni, a meno che non si è sicuri che un certo tipo di file possa essere correttamente gestito dal programma che gli stiamo associando. Un altro modo per poter associare un programma ad un file in maniera definitiva o momentanea, ovvero per una sola esecuzione, consiste nel puntare il file ed utilizzare la voce <apri con> accessibile dal menu contestuale al quale, come detto, si accede con il pulsante destro del mouse. Quando si attiva, mediante un doppio click, un file non associato ad alcuna applicazione, windows presenta l’elenco dei programmi installati nel sistema e ne impone una scelta; avviare, in questo caso, il programma sbagliato porta ad una cattiva o impossibile elaborazione del file. Ma chi crea le associazioni? Ho già detto che l’utente può modificare, creare o cancellare le associazioni, ma, in genere, qualsiasi installazione di un nuovo software crea nuove associazioni; per esempio, l’installazione di Microsoft WORD associa i file .DOC a WinWord.exe. 4.7. Navigare in Internet Lo scopo di questo paragrafo è riportare semplici suggerimenti per una corretta navigazione in Internet. Ritengo comunque opportuno dare almeno una prima semplice definizione di Internet: Internet è una rete geografica ovvero un insieme di sistemi di elaborazione comunque sparsi nel mondo e messi in comunicazione tra loro; l’argomento sarà approfondito in quinta quando parlerò in maniera approfondita delle reti di computer. Navigare in internet significa accedere alle pagine del WEB o WWW (World Wide WEB) pubblicate da aziende, enti, privati, etc. Queste pagine sono memorizzate su macchine SERVER raggiungibili mediante la rete telefonica mondiale. Le pagine sono organizzate in siti secondo la tecnica dell’ipertesto. Un sito è l’insieme delle pagine pubblicate da un qualsiasi soggetto, come detto prima azienda, ente, privato etc. Un ipertesto è un testo all’interno del quale compaiono riferimenti, detti link o puntatori, ad altre parti del testo; in effetti oggi si parla di Ipermedia perché le pagine WEB contengono anche animazioni, foto, musica, film e quant’altro. Un sito o una sua pagina è raggiungibile, ovvero visualizzabile dagli utenti del WEB, mediante la specifica dell’indirizzo detto URL (Unique Resource Locator); la pagina iniziale di un sito è detta Home page; è evidente, pertanto, che ogni sito ha un indirizzo univoco. Gli indirizzi hanno la forma: protocollo:\\indirizzo il protocollo, in genere http, è l’insieme delle regole per poter correttamente visualizzare le pagine mentre l’indirizzo univoco individua il sito o la pagina ed è organizzato in livelli. Capitolo 4: Il sistema operativo Windows 119 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Ad esempio, l’indirizzo del sito della nostra scuola è http://www.itcgbruno.it dove “itcgbruno” è stata scelto dalla scuola ed è pubblicato sul WWW come parte del dominio di primo livello it; questo suffisso, sempre presente negli indirizzi, indica il tipo di organizzazione detta authority che gestisce l’assegnazione degli URL. Nel nostro caso il sito della nostra scuola è stato assegnato dall’ authority italiana. I suffissi più utilizzati sono: Suffisso Descrizione Esempio .it www.itcgbruno.it Siti italiani .de, .fr... Siti tedeschi, francesi, etc. www.nutella.de .com Siti commerciali www.fiat.com .org Siti di organizzazioni www.fao.org .biz Siti commerciali www.netek.biz .edu Sito educativo (scuole, università, etc.) www.lib.lsu.edu .net Organizzazioni in rete www.campani.net .tv Siti TV www.la7.tv Così, per visitare un sito, occorre conoscerne l’indirizzo; a volte gli indirizzi sono piuttosto complessi e difficili da ricordare; per questo si hanno a disposizione i preferiti ed i motori di ricerca. I preferiti costituiscono l’elenco dei siti da noi più visitati e consentono di sostituire all’indirizzo un nome o riferimento mnemonico; sono gestibili mediante il menù preferiti, possono essere aggiunti mediante <preferiti\aggiungi a preferiti> e organizzati in cartelle (Preferiti/organizza preferiti); così possiamo richiedere la visualizzazione di un sito già visitato ed aggiunto ai preferiti semplicemente ricercandolo tra essi. Se si conosce l’indirizzo del sito da visitare, è sufficiente digitarlo nella barra degli indirizzi oppure se è stato inserito nei preferiti basta semplicemente selezionarlo nel relativo elenco; se, però, non si conosce l’indirizzo ma solo l’informazione che ci interessa, ad esempio auto usate, musica leggera, Garibaldi, etc., allora si utilizzano i motori di ricerca o lo strumento cerca. I motori di ricerca sono raggiungibili come qualsiasi altro sito; i più diffusi motori di ricerca sono www.google.it, www.virgilio.it, www.lycos.it, www.altavista.it, www.msn.it etc. . Per effettuare una ricerca basta digitare la/le parola/e cercata/e oppure una frase racchiusa tra apici (“fiat punto”). Per poter navigare bisogna disporre di un software di navigazione detto browser. Uno dei browser più diffusi è Internet Explorer della Microsoft del quale riporto la barra degli strumenti: Strumento Funzione Capitolo 4: Il sistema operativo Windows 120 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Ritorna alla pagina precedente; Ritorna alla pagina successiva; Termina l’operazione di scaricamento della pagina; utile, insieme al pulsante aggiorna, quando la pagina tarda ad essere visualizzata; Ricarica la pagina corrente richiedendone il suo re-invio al server; si utilizza quando la pagina non è visualizzata correttamente; Visualizza la pagina iniziale; è possibile cambiare la pagina iniziale, che è anche quella visualizzata all’avvio del browser, dal menù <strumenti\opzioni internet>; Avvia il motore di ricerca; Visualizza i preferiti; Visualizza la cronologia; la cronologia è l’elenco dei siti visitati nelle ultime settimane; Stampa la pagina visualizzata. 4.8. Utilità del sistema Un sistema operativo mette a disposizione dell’utilizzatore una serie di programmi di utilità, che svolgono le cosiddette operazioni ausiliarie all’elaborazione dei dati, quali copie di sicurezza, ottimizzazione delle risorse, individuazione di errori, aggiornamenti, ecc. Il sistema operativo Windows non si sottrae a questa regola, anzi fornisce all’utilizzatore anche alcuni semplici programmi applicativi quali il browser Internet Explorer per la navigazione in Internet, il gestore della posta elettronica outlook express, Windows Media Player quale lettore multimediale per file audio, CD, video, ecc., il programma di word processing WordPad, la calcolatrice, ecc.; di questi ultimi ritengo, ovviamente, di fare a meno di scrivere anche un sol rigo; se vi interessa, potete imparare da soli il loro funzionamento utilizzando la guida in linea. Sui programmi di utilità, invece, ritengo opportuno scrivere qualcosa, anche se potete tranquillamente utilizzare la loro guida in linea; per alcuni di essi, infatti, ritengo opportuno dare tutte quelle informazioni, in genere non comprese nella guida, Capitolo 4: Il sistema operativo Windows 121 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro che ne rendono più semplice la comprensione ed una conoscenza che non si ferma al mero utilizzo del software. 4.8.1. Scandisk Il programma di utilità scandisk consente di individuare e correggere errori logici e fisici sui supporti di memoria quali hard disk, floppy disk, ecc.; questa utility si avvia accedendo, mediante il pulsante destro del mouse, al menù contestuale del volume che si vuole controllare, quindi <proprietà/strumenti>: Scandisk individua e corregge errori logici causati da spegnimenti irregolari del sistema, cadute di alimentazione, errori del sistema operativo, ecc. Due dei problemi individuati e corretti da scandisk sono i riferimenti incrociati, ovvero due file allocati su uno o più cluster comuni, ed i cluster persi, ovvero che risultano occupati nella FAT ma nessun file punta ad essi. Nel primo caso la parte comune viene duplicata ed assegnata in maniera indipendente ai due file mentre nel secondo caso scandisk ripristina i cluster come spazio libero oppure crea dei file con nomi FILEn.chk, dove n parte da 0001 e si incrementa per ogni file creato; tali file vengono, in genere, registrati nella radice del volume controllato ed è a cura dell’utilizzatore verificarne il contenuto ed eventualmente procedere ad una loro cancellazione oppure ridenominazione. L’utente può decidere, di volta in volta, a quale correzione procedere oppure lasciare la decisione al sistema. Lo scandisk approfondito consente di verificare la bontà della superficie dei dischi magnetici ed è avviato solo se richiesto dall’utente; si tratta di un’operazione che richiede un tempo piuttosto alto e, in caso di rilevamento di errori fisici su uno o più settori, il sistema tenta un recupero dei dati allocati su di essi ed eventualmente li copia in una zona non difettosa; i settori risultati danneggiati vengono “marcati” come guasti e non più utilizzati dal sistema. Capitolo 4: Il sistema operativo Windows 122 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Vi consiglio di utilizzare raramente il controllo approfondito e, comunque, sempre nei casi in cui si ricevano informazioni su errori di I/O, lettura/scrittura, su disco; nel caso in cui vengano individuati uno o più settori difettosi, vi consiglio di ripetere l’operazione dopo qualche giorno e, se il sistema continua a trovare nuovi settori difettosi, è opportuno procedere alla sostituzione del disco. Il sistema operativo, in genere, esegue uno scandisk automatico all’avvio, quando rileva errori logici in lettura/scrittura o quando lo spegnimento non avviene in modo corretto. E’ ormai chiara l’importanza che rivestono le memorie di massa nell’ambito di un sistema di elaborazione; un guasto al disco rigido comporta, quasi sempre, la perdita dei dati; è possibile recuperare i dati, o parte di essi, da un disco danneggiato rivolgendosi ad aziende specializzate, ma il costo di tale operazione è, in genere, molto alto e a volte proibitivo per le economie di chi ha perso i dati. Da alcuni anni la tecnologia SMART, Self-Monitoring, Analysis, Reporting Technology, consente di predire un possibile guasto al disco rigido e di avvisare l’utilizzatore che, così, può procedere alla sua sostituzione, prima che si guasti definitivamente, con conseguente perdita dei dati. La tecnologia SMART coinvolge, ovviamente, i dischi rigidi, il BIOS del sistema ed il sistema operativo; quando le prestazioni del disco degradano, perché le operazioni di lettura/scrittura avvengono con tempi pù alti o comunque con difficoltà, il firmware del disco rigido avverte il BIOS di un possibile deterioramento delle superfici del disco e, quindi, un messaggio viene inviato all’utente che, ovviamente, provvede alla sostituzione del disco. 4.8.2. Defrag La frammentazione è l’allocazione non contigua dei file sulle memorie di massa; la frammentazione, aumentando gli spostamenti della testina sui dischi rigidi e, quindi, il tempo di posizionamento durante la lettura dei dati da un file frammentato, rallenta le prestazioni del sistema. Defrag elimina la frammentazione riscrivendo, in pratica, l’intero disco in modo tale che tutti i file siano allocati in maniera fisicamente contigua e che lo spazio libero sia tutto alla fine del volume. Prima di avviare l’operazione, è possibile analizzare il volume per verificare l’opportunità di procedere alla deframmentazione, che richiede molto tempo ed anche qualche raro rischio di perdita dati dovuta ad eventuali interruzioni accidentali; per questo vi consiglio di eseguire questa operazione raramente e solo in casi di necessità. L’operazione di deframmentazione può essere avviata come già descritto per lo scandisk oppure da <Start/Tutti i programmi/Accessori/Utilità del sistema/Utilità di deframmentazione dischi>. Capitolo 4: Il sistema operativo Windows 123 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 4.8.3. Backup Ormai abbiamo già perfettamente capito la grande importanza dei dati, per cui essi vanno protetti da qualsiasi causa che ne possa determinare la perdita totale o parziale. Anche i PC di casa contengono dati importanti: si pensi alle foto o alla musica oltre che ai documenti; ebbene sempre è opportuno copiare, a scopi precauzionali, i dati su supporti esterni, dai quali eventualmente ripristinarli in caso di necessità. Potete copiare i dati semplicemente utilizzando esplora risorse e le operazioni di Copia/Incolla, ma le copie vanno effettuate con cadenza giornaliera e non è possibile procedere ogni giorno alla copia completa del disco rigido perché richiederebbe troppo tempo. Per poter effettuare copie giornaliere senza impiegare un tempo eccessivo, è necessario utilizzare un programma specifico opportunamente pianificato, ovvero in grado di procedere alla copia ad intervalli di tempo regolari e senza intervento dell’operatore. Anche se disponiamo di un RAID è opportuno procedere alla copia su supporti esterni per evitare i rischi derivanti, per esempio, da furti o incendi. Per poter comprendere la pianificazione del backup, occorre parlare degli attributi dei file; i file possono avere uno o più attributi o proprietà; in effetti, con riferimento al backup, l’unico attributo che interessa è quello di archivio, ma ritengo opportuno riportare tutti gli attributi dei file: A - Archive: l’attributo di archivio viene assegnato automaticamente ad un file quando subisce una modifica; H – Hidden: un file con l’attributo di nascosto non viene riportato nell’elenco del contenuto di una cartella; è possibile modificare le impostazioni in modo da poterli vedere da gestione risorse in <Strumenti/Opzioni/Visualizzazione/visualizza file e cartelle nascosti>; S - System: un file con l’attributo di sistema è nascosto e non può essere cancellato; è possibile modificare le impostazioni in modo da poterli vedere da gestione risorse in <Strumenti/Opzioni/Visualizzazione/nascondi i file protetti di sistema>; R – Read: i file con attributo di sola lettura non possono essere modificati e cancellati solo mediante apposita conferma. L’operazione di backup consente di selezionare i file da copiare: è possibile selezionare da un singolo file ad un intero volume o, addirittura, più volumi, anche su sistemi accessibili attraverso i servizi di rete. Una volta selezionati i file da copiare, è possibile scegliere tra i seguenti tipi di backup: Completo o normale: vengono copiati tutti i file selezionati, quelli con e senza l’attributo di archivio; l’attributo di archivio viene tolto; Capitolo 4: Il sistema operativo Windows 124 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Differenziale: vengono copiati solo i file selezionati che hanno l’attributo di archivio; l’attributo di archivio non viene tolto, per cui questi file saranno di nuovo copiati dal successivo differenziale; Incrementale: vengono copiati solo i file selezionati che hanno l’attributo di archivio; l’attributo di archivio viene tolto, per cui questi file non saranno di nuovo copiati dal successivo incrementale; Giornaliero: vengono copiati tutti i file selezionati e modificati nel giorno in cui avviene la copia; si tratta di un backup che comporta qualche rischio se non viene eseguito tutti i giorni; Copia: vengono copiati tutti i file selezionati, quelli con e senza l’attributo di archivio; l’attributo di archivio non viene tolto; si tratta di una copia extra pianificazione perché non interferisce con quelli pianificati. Una pianificazione delle copie di backup deve prevedere un backup completo, per esempio mensile, e un differenziale giornaliero oppure un backup completo ed un incrementale giornaliero. L’operazione inversa, che, a causa di una perdita accidentale, riporta i dati dai supporti esterni, sui quali è avvenuta a suo tempo la copia, al disco rigido, è detta restore o ripristino. Con il differenziale è possibile ripristinare i dati, in caso di necessità, disponendo del completo e dell’ultimo differenziale, mentre con l’incrementale ho bisogno, come è facile intuire, di tutti gli incrementali e, ovviamente, del completo; a questo svantaggio, l’incrementale offre il vantaggio di essere più veloce perché copia i file copiati in precedenza solo se questi hanno subito una modifica; il differenziale, invece, aumenta di giorno in giorno il numero di file copiati, perché copia tutti i precedenti più quelli che subiscono modifiche. Il restore corretto, disponendo di un completo e più incrementali, deve procedere ripristinando il completo seguito da tutti gli incrementali nell’ordine con il quale, a suo tempo, sono stati realizzati; per questo motivo è necessario numerare i supporti esterni multipli utilizzati per le copie incrementali. Il differenziale e tutti gli incrementali non sono più necessari quando si procede ad una nuova copia completa. Capitolo 4: Il sistema operativo Windows 125 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro Capitolo 1. Informazione ed informatica ................................................................. 7 1.1. Informazione e … ..................................................................................................................... 7 1.2. Rappresentazione dell’informazione....................................................................................... 10 1.2.1. Generalità ............................................................................................................................. 10 1.2.2. Rappresentazione alfanumeriche ......................................................................................... 11 1.2.2.1. La codifica UNICODE...................................................................................................... 17 1.3. Conclusioni ............................................................................................................................. 18 1.4. Esercizi .................................................................................................................................... 20 Capitolo 2. Algoritmi e approccio alla programmazione ..................................... 21 2.1. Definizione e proprietà............................................................................................................ 21 2.2. Rappresentazione .................................................................................................................... 22 2.3. Formati, variabili e costanti, espressioni ................................................................................. 24 2.3.1. Approfondimento: dichiarazione di costanti ........................................................................ 30 2.4. Iterazione o ciclo ..................................................................................................................... 31 2.5. Si fa sul serio ........................................................................................................................... 36 2.5.1. Programmazione strutturata ................................................................................................. 36 2.5.2. Modularità ............................................................................................................................ 39 2.5.3. Complessità di tempo ed utilizzo dello switch..................................................................... 41 2.5.4. Modalità di risoluzione degli esercizi .................................................................................. 46 2.6. Il primo compito in classe ....................................................................................................... 47 2.6.1. Fila sinistra ........................................................................................................................... 47 2.6.1.1. Esercizio 1 ......................................................................................................................... 47 2.6.1.2. Esercizio 2 ......................................................................................................................... 50 2.6.1.3. Esercizio 3 ......................................................................................................................... 52 2.7. Operatori logici ....................................................................................................................... 54 2.8. Array: Vettori e matrici ........................................................................................................... 57 2.8.1. Esempi di programmazione ................................................................................................. 58 2.8.2. Ordinamento di vettori ......................................................................................................... 61 2.8.3. Ricerca binaria. .................................................................................................................... 62 2.9. Sottoprogrammi ...................................................................................................................... 62 2.9.1. Ricorsività ............................................................................................................................ 68 2.10. Programmazione modulare: esempio .................................................................................... 68 2.11. Un po’ di filosofia: la tesi di Church..................................................................................... 70 2.12. Esercizi .................................................................................................................................. 70 Capitolo 3. Hardware ............................................................................................... 79 3.1. Sistemi, automi, processi e modelli ........................................................................................ 79 3.2. Sistema di elaborazione .......................................................................................................... 79 3.3. La macchina di Von Neumann................................................................................................ 80 3.4. I moderni sistemi di elaborazione ........................................................................................... 81 3.4.1. BUS ...................................................................................................................................... 82 3.4.2. CPU ...................................................................................................................................... 83 3.4.3. RAM..................................................................................................................................... 83 3.4.4. ROM – Read Only Memory................................................................................................. 84 3.4.5. Interfacce .............................................................................................................................. 85 3.4.6. DMA .................................................................................................................................... 90 3.4.7. Main Board .......................................................................................................................... 90 3.4.8. Dispositivi periferici ............................................................................................................ 93 3.4.8.1. Tastiera e mouse................................................................................................................ 94 3.4.8.2. Monitor.............................................................................................................................. 94 3.4.8.3. Stampanti e Plotter ............................................................................................................ 95 3.4.8.4. Scanner .............................................................................................................................. 97 Indice 126 L’Informatica per i miei studenti – Volume 1 Prof. Bianco Mauro 3.4.8.5. Multifunzione .................................................................................................................... 98 3.4.8.6. Fotocamere e videocamere digitali ................................................................................... 98 3.4.8.7. Memorie di massa ............................................................................................................. 99 3.4.8.7.1. Dischi magnetici ...................................................................................................... 100 3.4.8.7.2. CD e DVD ................................................................................................................ 102 3.4.8.7.3. Pen Disk, MP3, foto album ...................................................................................... 105 3.4.8.7.4. Confronto tra le memorie di massa .......................................................................... 105 3.4.9. Classificazione dei sistemi di elaborazione ....................................................................... 106 3.5. Conclusioni ........................................................................................................................... 107 Capitolo 4. ............................................................................................................... 109 Il sistema operativo Windows ................................................................................ 109 4.1. Generalità .............................................................................................................................. 109 4.2. File, cartelle, volumi e unità.................................................................................................. 109 4.3. Al lavoro: gestione di file e cartelle ...................................................................................... 114 4.4. Utility cerca e caratteri jolly ................................................................................................ 116 4.5. Il cestino ................................................................................................................................ 117 4.6. Collegamenti e associazioni .................................................................................................. 118 4.7. Navigare in Internet .............................................................................................................. 119 4.8. Utilità del sistema.................................................................................................................. 121 4.8.1. Scandisk ............................................................................................................................. 122 4.8.2. Defrag................................................................................................................................. 123 4.8.3. Backup ............................................................................................................................... 124 Indice 127