L’ebook è un libro che non si legge su carta ma si legge su uno schermo. Perché questo sia possibile è necessario che il testo del libro sia memorizzato in un file digitale.
Lo schermo su cui si legge può essere innanzi tutto lo schermo del computer e già prima che si diffondessero altre modalità di lettura esistevano raccolte di opere letterarie, vere e proprie biblioteche, a volte diffuse su CD allegati a quotidiani, destinate ad una lettura sul computer.
Ma la lettura sul computer è scomoda. Già l’idea di leggere un romanzo su qualche cosa di diverso dalla carta fa inorridire gli appassionati di lettura che amano il profumo della carta inchiostrata e rilegata, figurarsi se l’alternativa è lo schermo di un apparecchio elettronico, magari fisso in una stanza, con la necessità di avere un collegamento alla rete elettrica….
Già con il computer portatile è meglio, con i piccoli net books è ancora meglio; ma lo sfondamento avviene con i lettori di ebook e con i tablet, con l’avvento dei quali è iniziata la vera e propria editoria digitale.
Soprattutto il lettore di ebook decreta il successo della nuova editoria. Il lettore ad eink ha uno schermo, sì, ma è molto simile ad una pagina di carta, non è retroilluminato come gli schermi dei computer e non affatica la vista, si legge se c’è luce, come il libro, ha un’autonomia di parecchie settimane in quanto consuma pochissima energia (quel poco di energia che consuma è quando si gira pagina, in quanto deve ricomporre l’inchiostro per farci vedere la pagina successiva), è leggero e sta dappertutto, proprio come un libro: in più, anche in uno spazio minore di quello di un volume cartaceo, può contenere decine e decine di libri.
Ovviamente stiamo parlando di libri fatti di solo testo: un libro d’arte che riproduce le opere del Guercino difficilmente potrà essere gustato su un lettore di ebook, ma I promessi sposi ci stanno benissimo.
Nell’allegato documento PDF ho selezionato alcuni programmi di software libero che ci consentono di produrre noi stessi un ebook e di attribuirgli o modificarne il formato.
Per scaricare il file clicca sul suo nome qui sotto.
Autore: vittorio
Software libero per fare musica
Il software che abbiamo visto finora (per scrivere, per calcolare, per disegnare e per gestire dati) utilizza, del computer, le memorie (ROM per accedere al software e per memorizzare i risultati, RAM per avere a portata di mano quanto necessario alle elaborazioni), il microprocessore o CPU (per eseguire le elaborazioni), la tastiera (per immettere i dati e le istruzioni necessari per le elaborazioni) e lo schermo (che, grazie alla scheda grafica, ci fa vedere cosa stiamo combinando). Il computer è sempre stato zitto.
Ma il computer può anche emettere suono, addirittura può generarlo.
Fino a qualche po’ di anni fa si trattava di gracchianti bip e, per produrre suoni degni di tale nome occorrevano apparecchiature esterne collegate al computer, come sintetizzatori, schede audio, ecc. Oggi, anche un portatile di fascia medio bassa ha una scheda audio integrata in un chip della scheda madre, grazie alla quale si possono generare e riprodurre suoni di elevata qualità, soprattutto se, per riprodurli, non ci si accontenta delle altoparlantine del computer ma si danno in pasto a sistemi di altoparlanti surround attraverso l’uscita che ogni computer offre in favore di uno spinottino jack (in genere lo stesso che si usa per le cuffie). Ovviamente, per risultati di elevata professionalità, si procede ancora con l’ausilio di apparecchiature esterne: ma si può ormai fare parecchio anche con il portatile di casa solo e nudo.
Il compito della scheda audio è quello di convertire segnali digitali in segnali analogici o viceversa. A volte immettiamo nel computer un segnale analogico attraverso un microfono inserito in una presa jack del computer o attraverso un cavetto con jack da inserire nella stessa presa o in una presa line-in dedicata: in questo caso la scheda audio trasforma il segnale analogico ricevuto dall’esterno in segnale digitale. Altre volte immettiamo nel computer un segnale digitale, contenuto in un file audio memorizzato sull’hard disk del computer, o su una chiavetta USB, o su un CD audio e la scheda audio lo converte in analogico in favore del sistema di altoparlanti interno o esterno che lo riproduce.
In tutti questi casi, però, il computer converte suoni, rappresentati in vario modo, da un tipo all’altro, ma non li crea lui, li riproduce soltanto. Esiste software per gestire questa riproduzione, per memorizzare e trovare al momento opportuno il brano musicale da riprodurre, per convertire lo stesso formato digitale in tanti modi, per trattare, cioè un suono già prodotto. Ma ci occuperemo di queste cose in altra sede.
In questo articolo, invece, ci occuperemo di software attraverso il quale è il computer che genera il suono e il nostro compito è quello di “dire” al computer quale suono generare, con quale timbro, per quale durata, ecc. fino a creare un vero e proprio brano musicale polifonico; brano musicale che potrà venire semplicemente suonato dal computer o registrato, con i suoni generati dal computer, in un file audio da memorizzare in formato digitale sull’hard disk, su una chiavetta USB o su un CD audio, come se fosse un suono generato da un complesso musicale e registrato.
Lo strumento con cui “diciamo” al computer quale suono generare, con quale timbro, per quale durata, ecc. è il file MIDI.
MIDI è l’acronimo di Musical Instruments Digital Interface (Interfaccia Digitale per Strumenti Musicali) ed è un protocollo standard creato affinché strumenti musicali, elettronici e non, sintetizzatori generatori di suoni elettronici, schede audio, ecc. possano intendersi tra loro.
L’elemento atomico del file MIDI è il messaggio MIDI, composto da due o più byte, uno dei quali si chiama byte di stato e gli altri sono byte di dati. Il byte di stato è il primo che legge il computer e, a seconda della sua natura, il computer si appresta a ricevere e interpretare i byte di dati: se il byte di stato è del genere note on (ti sto mandando una nota e ti indico su quale dei 16 canali MIDI ti arriverà), il computer si appresta a ricevere due byte di dati, uno che indica l’altezza della nota (il Do centrale ha il valore 60, in binario 00111100) e uno che indica la forza (velocity) con cui la nota deve suonare (da poco più di 0, che sta per pianissimo a 127, che sta per fortissimo); se il byte di stato è del genere control change (con quale espressione, con quale volume, in quale posizione stereofonica, ecc. devi far sentire il suono), il computer si appresta a ricevere quattro byte di dati con codificate tutte queste belle cose; se il byte di stato è del genere program change (che timbro devi usare per generare il suono), il computer si appresta a ricevere un byte di dati indicante in codice lo strumento musicale (il pianoforte classico ha il valore 0, la chitarra classica ha il valore 24, la tromba ha il valore 56, ecc. ovviamente espressi in binario). Ovviamente nel file MIDI, su ciascun canale, i messaggi control change e program change sono validi fino a nuovo avviso e, al limite, possono essere presenti nel file una sola volta, mentre i messaggi note on sono quelli che fanno la parte del leone e ce ne saranno tanti quante sono le note da suonare.
Quando il computer riceve il codice dello strumento col cui timbro gli si chiede di generare il suono, in mancanza di meglio va a consultare la tavola sonora aggregata alla scheda audio e preleva da lì il suono da passare alla scheda audio. La tavola sonora è un insieme di suoni prodotti per sintesi ad imitazione del suono dei vari strumenti musicali (128, codificati da 0 a 127) ed è costruita in modo da occupare il meno spazio possibile (sappiamo che la registrazione del suono digitale occupa molto spazio).
Se lasciamo al computer di pescare i suoni dalla tavola sonora otteniamo risultati mediocri: si sente benissimo che i suoni sono finti.
Con i moderni computer, dove il problema di spazio di memoria sul disco rigido è molto relativo, possiamo caricare i così detti sound fonts, che sono degli spezzoni di registrazioni da strumenti veri, effettuate a diverse altezze, da cui il computer può attingere il timbro dello strumento in modo sempre più realistico che non dalla tavola sonora. Una buona raccolta di sound fonts potrà occupare mezzo Giga sul disco, cosa che nei computer moderni fa ridere, e darci la possibilità di ottenere suoni che possono anche non risultare più così finti.
Se poi evitiamo le parti solistiche, che sono le più impegnative da realizzare per le sfumature espressive che dovrebbero avere, e ci limitiamo ad accompagnamento ritmico e a qualche svolazzo di controcanto, possiamo ottenere risultati veramente notevoli: non per nulla le basi per karaoke sono quasi sempre realizzate e conservate su file MIDI, anche per un fatto di portabilità, di scambio veloce con posta elettronica e di velocità di download da Internet. Infatti il file MIDI, rispetto ad un file audio, occupa uno spazio veramente insignificante: contiene, infatti, non suoni digitalizzati ma caratteri in codice binario. Un file MIDI che contiene una canzone abbastanza elaborata difficilmente supera i 30 kB, quando la stessa canzone, su file audio non compresso, arriva tranquillamente a 30 MB (cioè 1.000 volte tanto). La differenza è che il file MIDI contiene istruzioni per costruire un suono, ma il suono non c’è, mentre il file audio contiene suono digitalizzato.
Fatta questa premessa, con la quale spero si sia capito qualche cosa su come si possa far fare musica a un computer, non ci resta che passare in rassegna quali programmi ci offra il mondo del software libero per questo scopo.
Le applicazioni che ho selezionato sono descritte nell’allegato file in formato PDF, scaricabile e stampabile, che contiene tutte le indicazioni per capire a cosa serve ciascun programma presentato, come possiamo procurarcelo e com’è il suo funzionamento di base.
I software presentati sono disponibili anche per i sistemi operativi Windows e OS X.
Per scaricare il file clicca sul suo nome qui sotto.
Software libero per digitalizzare
Tutto ciò che produciamo con il computer è rappresentabile in un file digitale, cioè in un documento che contiene informazione codificata con un linguaggio convenzionale in bit (binary digit, cioè 0 e 1), memorizzabile in modo permanente su un determinato tipo di supporto fisico (disco rigido, compact disc, memoria flash su chiavetta usb, dvd). Mutuando una bella definizione di Wikipedia, diciamo che la documentazione digitale è una rappresentazione astratta e numerica della realtà sensoriale.
In contrapposizione abbiamo la rappresentazione analogica della realtà sensoriale.
Per rappresentare analogicamente la realtà sensoriale suono, captiamo con un idoneo strumento le vibrazioni trasportate dall’onda sonora che lo genera e trasmettiamo intensità e profondità di queste vibrazioni nell’ampiezza e nella profondità di incisione di un solco su un materiale adatto. Ripercorrendo questo solco con un idoneo strumento sensibile alla sua ampiezza e profondità possiamo rigenerare le stesse vibrazioni e la stessa onda sonora, cioè riascoltare, in maniera analogica, il suono originario.
Un altro modo per registrare l’onda sonora, oltre a quello di catturarla fisicamente attraverso le vibrazioni che trasporta come abbiamo visto prima, è quello di registrarne il valore numerico ad intervalli di tempo regolari. Dal momento che l’onda sonora ha un aspetto sinusoidale, se noi registrassimo il valore della sua altezza in termini numerici, poniamo, trenta volte al secondo, otterremmo probabilmente una registrazione della sinusoide come una successione di triangoli: il che non servirebbe a nulla.
Se però misuriamo il valore dell’onda 44.100 volte al secondo, che è la frequenza utilizzata per il suono registrato sui CD musicali, la nostra sinusoide diventa ben liscia nelle sue curve.
Al punto che è dimostrato che, con questa frequenza di campionamento la sinusoide captata in via analogica e quella descritta con i numeri sono sì diverse (la prima è una curva continua, la seconda è una curva che collega punti discreti), ma la loro diversità non può essere colta dall’udito umano (se qualche vostro amico vi dice che sente la differenza tra un vinile e un CD caccia balle, a meno che la senta per il tic tic della puntina, ma allora è un’altra cosa).
L’unico inconveniente è che con questa tecnica abbiamo enormi grandezze da trattare, sia in termini di velocità di elaborazione (provate a tenere a mente 44 mila numeri al secondo) sia in termini di memoria fisica (il mio primo computer, un glorioso Philips TC 100, aveva un disco fisso di 20 MB, cioè non ci stava su neanche una canzoncina di due minuti).
Per non parlare dei file video, tipo i file .avi dove possiamo memorizzare le animazioni che generiamo, per esempio, con Blender: l’animazione, così come il filmato che facciamo con la telecamera, è costituita dalla visione ravvicinata di più fotografie, una via l’altra, al ritmo di 25 al secondo (lo standard televisivo PAL, in modo che l’animazione possa essere vista bene su un televisore che scansiona 25 volte al secondo). Un filmetto di tre minuti è lungo 180 secondi, cioè è formato da 4.500 fotografie: applichiamo pure tutte le tecniche di compressione e gli algoritmi per memorizzare solo ciò che differenzia una fotografia dall’altra, restringiamo a un piccolo rettangolino la scena, ciascuna immagine da memorizzare arriverà a pesare almeno 10 kB. Anche così il nostro filmetto, ridotto e strizzato alla stessa stregua di un file .mp3 audio, peserà una quarantina di MB, cioè una dozzina di volte tanto il suo omologo in campo audio (comunque sempre meglio dei 3 GB abbondanti che il nostro filmetto occuperebbe se non fossimo ricorsi a tecniche di compressione).
Ma i PC di oggi sono potenti e in spazi sempre più piccoli si possono memorizzare moli sempre più elevate di dati.
Allora, visto che la tecnologia ce lo consente, digitalizziamo tutto.
Il mondo del software commerciale ci propone costosi programmi per fare queste cose, ma anche il mondo del software libero non scherza e, in più, ce li offre.
Il documento PDF allegato contiene una mia rassegna di programmi di software libero, come sempre con tutte le indicazioni per capire a cosa serve ciascun programma presentato, come possiamo procurarcelo e com’è il suo funzionamento di base.
Per scaricare il file clicca sul suo nome qui sotto.
Software libero per utilizzare file digitali
Considerato il materiale che possiamo produrre direttamente con il PC e quello che possiamo acquisire per digitalizzazione da fonti esterne, possiamo arrivare ad avere una caterva di roba e, se non la organizziamo razionalmente, rischiamo di avere grosse difficoltà ad utilizzarla: il che equivale a non averla.
Un principio di base è quello di avere un file digitale per ogni cosa a livello elementare. Come la macchina fotografica digitale produce un file per ogni scatto, così, quando digitalizziamo con lo scanner le nostre fotografie, produciamo un file per ogni fotografia (non mettiamone due o tre nello scanner per fare un file solo). Quando digitalizziamo un disco vinilico che contiene più canzoni, facciamo un file per ogni canzone. Se digitalizziamo da un disco vinilico una sinfonia, facciamo un file per ogni movimento. Come, del resto, avviene per le tracce che troviamo sui CD musicali.
Ad ogni file diamo un nome che abbia una qualche relazione con il contenuto, meglio ancora se riusciamo proprio a descrivere in toto il contenuto stesso. Una foto scattata a Benevento, chiamiamola Benevento_01, ammesso che poi ci sia la Benevento_02, la Benevento_03, ecc. Una canzone chiamiamola con il suo titolo. Il movimento di una sinfonia chiamiamolo per quello che è (1. Allegro con brio, 3. Scherzo, ecc.).
I file così denominati raggruppiamoli in directory sempre più ingrappolate, partendo dal basso e fermandoci dove siamo soddisfatti. I file 1. Allegro con brio, … 3. Scherzo, … li mettiamo in una directory chiamata Beethoven – Sinfonia n. 3. I file Benevento_01, Benevento_02 … li mettiamo in una directory chiamata Benevento. I file delle canzoni li mettiamo in una directory che, trattandosi di musica leggera, sarà più interessante battezzare con il nome dell’interprete più che con quello dell’autore.
Le directory di musica classica saranno poi finalmente comprese in una directory Musica classica, quelle di musica leggera in una directory Musica leggera, quelle di fotografie in una directory Fotografie, magari passando attraverso vari raggruppamenti intermedi.
In questo modo organizziamo i nostri file in un archivio navigando nel quale, in un ragionevole numero di passaggi, arriviamo a trovare quello che ci serve.
L’archivio avrà una dimensione notevole ma, con le capienze degli attuali dischi rigidi dei computer, probabilmente sarà possibile ospitarlo tutto sul nostro computer.
Evitiamo l’errore di averne una sola copia sul computer. Facciamone immediatamente un’altra copia su uno o più supporti esterni: unità disco esterne, memorie flash più o meno su pennette, serie di DVD, ecc., ricordando che il DVD è praticamente indistruttibile fino a graffiatura volontaria o da grave disattenzione mentre le unità disco si possono guastare o smagnetizzarsi e le memorie flash, a distanza di tempo, andar soggette a qualche inconveniente.
Consideriamo comunque che ciò che c’è sul disco fisso del computer, se si guasta il sistema operativo si può fare in modo di recuperarlo (ovviamente prima di installare un altro sistema operativo che cancelli tutto il disco), se si guasta il disco tutto è irrimediabilmente perso.
Archiviati ordinatamente i nostri file, dobbiamo poi avere a disposizione sul computer software adatto per utilizzarli.
In genere i file prodotti da noi (documenti, fogli elettronici, ecc.) li possiamo aprire per vederli in chiaro utilizzando gli stessi programmi con cui li abbiamo prodotti.
Il problema si pone per i file digitali che contengono suono, immagini, filmati, per goderci i quali abbiamo bisogno di software che garantisca anche una buona qualità di riproduzione; meglio ancora se questo software ci può anche aiutare a trovare i file che vogliamo riprodurre.
L’allegato file PDF contiene una mia selezione di programmi di software libero adatti a questi scopi, con tutte le indicazioni per capire a cosa serve ciascun programma presentato, come possiamo procurarcelo e com’è il suo funzionamento di base.
L’ambiente nativo dei software presentati è Linux ma in qualche caso essi sono disponibili anche per i sistemi operativi Windows e OS X. Per questi ultimi sistemi operativi esiste comunque un’ampia scelta di software commerciali analoghi, ovviamente a pagamento.
Per scaricare il file clicca sul suo nome qui sotto.
Software libero per la multimedialità
Nell’articolo ‘Software libero per utilizzare file digitali’ e nel relativo allegato PDF abbiamo visto come possiamo fruire dei nostri archivi digitali per dilettarci la vista o l’udito, sempre, però, prendendo i file uno per uno, magari arrivando a mettere insieme fotografie in uno slideshow arricchito di qualche effetto di transizione e, persino, per esempio nel caso di Fotoxx, con la possibilità di abbinare allo slideshow un file audio (per musica di sottofondo o commento): quest’ultimo è un esempio di multimedialità, anche se, nell’esempio citato, molto grezza in quanto, con Fotoxx, non abbiamo modo di coordinare le immagini con la musica di sottofondo o con il commento, che potrà essere solo generico e non puntuale su ciascuna immagine.
Inoltre tutto quanto, audizioni e presentazioni, era finalizzato ad un uso sul nostro computer e non era esportabile se non su un altro computer attrezzato con gli stessi software presenti sul nostro.
In questo articolo vediamo, invece, come si possano mettere insieme più cose di natura diversa (immagini, musica, parola, scritto) per costruire qualche cosa di nuovo, che resti e che possa essere riprodotto anche su strumenti diversi dal computer (televisore, tablet, smartphone, lettore di DVD): multimedialità, pertanto, nel contenuto e nelle possibilità di fruizione del contenuto.
Nell’allegato file in formato PDF, scaricabile e stampabile, presento una mia selezione di programmi di software libero con cui possiamo costruire produzioni multimediali. Vi si trovano tutte le indicazioni per capire a cosa serve ciascun programma presentato, come possiamo procurarcelo e com’è il suo funzionamento di base.
I software presentati, il cui ambiente nativo è Linux, sono spesso disponibili anche per i sistemi operativi Windows e OS X. Per questi ultimi sistemi informativi esiste ampia scelta di software commerciali a pagamento che fanno le stesse cose, anche se, a volte, non con le stesse sofisticazioni.
Per scaricare il file clicca sul suo nome qui sotto.
Software libero per produrre supporti ottici
Tutta la nostra produzione informatica ed audiovisiva possiamo conservarla sui molteplici supporti che la tecnologia ci offre e che sono praticamente classificabili in tre categorie:
• supporti magnetici,
• supporti a stato solido,
• supporti ottici.
I supporti magnetici sono i dischi rigidi, a partire da quello che abbiamo nel computer per arrivare a quelli esterni collegabili al computer attraverso la porta USB. Il punto debole di questi supporti, oltre a quello di soffrire la vicinanza a forti campi magnetici, è la parte meccanica: questi supporti sono infatti costituiti da dischi magnetici letti da una testina il cui braccio è in movimento. Il punto forte è la grande capacità di memoria in spazi sempre più piccoli e sempre meno costosi. Possono funzionare solo con un computer.
I supporti a stato solido sono le così dette chiavette USB e le memory card, nelle quali i dati vengono memorizzati in matrici di transistors capaci di conservare la carica elettrica per lungo tempo. Non hanno parti meccaniche, per cui non soffrono del punto debole attribuibile ai supporti magnetici: in compenso si dice che la memorizzazione non sia altrettanto longeva di quella effettuata su supporti magnetici. La dimensione fisica di questi supporti è ormai arrivata alla miniaturizzazione e si presta all’utilizzo su piccoli apparecchi come macchine fotografiche e smartphones. Il costo per unità memorizzata è di gran lunga superiore a quello dei supporti magnetici. Possono funzionare su computer attraverso la porta USB, alla quale sono collegabili lettori di memory card, se il computer non ne è dotato: ma i computer più recenti hanno ormai tutti la finestrella di lettura di questi supporti. Inoltre funzionano sugli apparecchi progettati per servirsene (tablet, smartphone, macchina fotografica, lettori di file musicali compressi come mp3 e aac, ecc.).
Il supporto ottico è un disco di policarbonato trasparente al cui interno è inserito un sottile foglio di alluminio, su cui vengono registrate e lette le informazioni tramite un raggio laser. La sua capacità di memoria, anche se non disprezzabile, non è nemmeno paragonabile a quella dei supporti magnetici o a stato solido, ma ha il vantaggio di essere eterna (unica precauzione quella di non danneggiare fisicamente il disco con graffi o deformazioni). Per utilizzare il supporto ottico è necessario apposito apparecchio, che può essere un semplice lettore o lettore/masterizzatore; quest’ultimo inglobato o collegabile via USB ad un computer. Gli apparecchi lettori e riproduttori hanno avuto grande diffusione da quando il supporto ottico ha sostituito il vinile nella produzione di dischi musicali e da quando si è diffuso il DVD cinematografico.
Mentre i supporti magnetici e i supporti a stato solido sono scrivibili e leggibili direttamente sul computer, cui sono collegabili via USB, alla stessa stregua di quanto si fa con il disco fisso, per i supporti ottici, oltre all’hardware, costituito dal masterizzatore, è necessario un software che governi quest’ultimo.
Il file PDF allegato contiene la descrizione dei due più famosi ed efficienti programmi di masterizzazione per Linux. Non mi risulta esistano analoghi programmi di software libero che funzionino su Windows e su OS X: per questi sistemi operativi esiste un’ampia scelta nel mondo del software commerciale.
Il file PDF è scaricabile e stampabile cliccando sul suo titolo qui sotto.
Insidie nei programmi di calcolo
Nel mio articolo sul Software libero per calcolare ho accennato alla delicatezza del software di calcolo ed all’esistenza di alcune trappole annidate nei vari linguaggi di programmazione, con il pericolo che il programma che utilizziamo per fare un calcolo fornisca un risultato sbagliato senza che ce ne accorgiamo.
Al fine di mettere in guardia il programmatore dilettante che voglia cimentarsi nel costruire qualche strumento di calcolo a suo uso e consumo per calcolare, ad esempio, la temperatura percepita nota la temperatura e l’umidità relativa (o altre cose che non troviamo facilmente in programmi già predisposti), ho pensato di indicare in questo articolo quali sono le due principali fonti di complicazione: la questione del separatore decimale e quella della divisione tra interi.
Il separatore decimale
In tutti i linguaggi di programmazione il separatore decimale è il punto (.) ed è questo che deve essere rigorosamente usato nelle assegnazioni interne ai programmi.
Il problema si pone, specialmente per noi italiani abituati ad usare come separatore decimale la virgola, quando è richiesto un input numerico all’utente, in quanto egli, anche se avvisato sul separatore decimale da utilizzare, può sbagliare e ciò può avere, in certi casi, conseguenze disastrose sul risultato dell’elaborazione compiuta dal programma.
I linguaggi più sicuri da questo punto di vista sono Ada, Java, Pascal e Python in quanto in questi linguaggi è imposto un input con separatore decimale punto e, se l’utente usa la virgola, viene elevata una eccezione di input e non viene fornito alcun risultato. Attraverso una opportuna gestione di questa eccezione è possibile avvisare l’utente dell’errore ed invitarlo a formulare un input corretto: il tutto senza uscire dal programma. Se l’eccezione non viene gestita il programma termina senza risultato e il danno è circoscritto a questo.
I linguaggi più subdoli sono il C, il C++ e PHP in quanto impongono il punto ma, se l’utente usa la virgola, non sollevano eccezioni di input, ignorano ciò che viene immesso dopo la virgola e forniscono risultati sballati: il tutto senza che l’utente sappia alcunché, né sull’errore compiuto usando la virgola in luogo del punto né – il che è gravissimo – sul fatto che il risultato che gli è stato fornito dal programma è sbagliato. Unico rimedio a tutto ciò è un accurato controllo dell’input, carattere per carattere, in modo da rimediare alla falla del linguaggio con accorgimenti di programmazione che sollevino un’eccezione gestibile nel momento in cui nell’input venisse trovata una virgola. Eccezione gestibile fino a sostituire un punto alla virgola, nel caso la si trovasse, senza dire nulla all’utente, ed arrivare comunque ad un risultato corretto: in questo modo possiamo avere un programma per il quale va bene l’uso di entrambi i separatori decimali, punto e virgola.
Vi sono, infine, i linguaggi del gruppo Visual Studio di Microsoft, dove i problemi non mancano, anzi…..
Visual C++ di Visual Studio si comporta esattamente come il normale C++.
Visual C# di Visual Studio ha la particolarità che, quando viene caricato su un computer, si adegua alla cultura dell’utente: se il sistema operativo installato è una versione italiana, anche Visual C# sarà italiano. Tra le caratteristiche di questa cultura c’è il fatto che l’utente usa come separatore decimale la virgola e C# si adegua: al suo interno usa rigorosamente il punto come separatore decimale ma quando legge un input dell’utente italiano si aspetta di trovare, come separatore decimale, la virgola. Se l’utente usa il punto, questo viene semplicemente ignorato e il numero viene letto come un intero composto da tutte le cifre immesse, sia quelle prima che quelle dopo il punto e l’elaborazione prosegue con questo numero, con tutte le disastrose conseguenze del caso.
Visual Basic, sia nella vecchia versione, sia in quella più aggiornata, è il massimo della confusione. Anch’esso, al momento dell’installazione, si adegua alla cultura dell’utente ma lo fa parzialmente: mentre, infatti, la funzione Cdbl() per convertire in numero la stringa immessa dall’utente si adegua alla cultura di questi e, se egli usa un sistema operativo in italiano, si aspetta di trovare la virgola come separatore decimale e, se trova il punto, fa avvenire esattamente quello che avviene in C#, la funzione Val(), utilizzabile per lo stesso scopo, si aspetta di trovare comunque il punto come separatore decimale e, se trova una virgola, non legge oltre ed incamera un numero intero composto dalle sole cifre immesse dall’utente prima della virgola e prosegue così il suo percorso di elaborazione. Visual Basic, pertanto, non è solo subdolo ma è anche ambiguo.
Fortunatamente le versioni di Visual C# e di Visual Basic delle più recenti edizioni di Visual Studio hanno la funzione membro Replace() dell’oggetto stringa che, con poca spesa, ci aiuta a correggere l’input in modo da poter accettare invariabilmente sia il punto che la virgola dall’utente (sempre, in Visual Basic, stando attenti alla correzione da apportare in coerenza a che cosa si usa per convertire la stringa).
Divisione tra interi
L’uso dell’operatore / tra due numeri fornisce come risultato il quoziente di una divisione.
Questo risultato è il quoziente vero, qualunque sia il tipo di numero indicato prima e dopo l’operatore /, solo nei linguaggi Pascal, Python 3 e Visual Basic (sia nella vecchia che nella nuova versione). Per quoziente vero si intende il 2,5 che risulta da 5 / 2.
Nei linguaggi C, C++ e C# se i numeri indicati prima e dopo l’operatore / sono interi si ha una divisione tra interi che fornisce come risultato la parte intera del quoziente. Cioè 5 / 2 fornisce il risultato 2. Purtroppo ciò avviene anche quando la variabile cui assegnare il risultato sia stata dichiarata come double, senza che vi sia alcuna segnalazione di errore. Per ottenere il quoziente vero occorre che almeno uno dei due numeri inseriti prima e dopo l’operatore / sia un double (basta scrivere 5.0 anziché 5).
In Java questo inconveniente si presenta soltanto se l’espressione di divisione è inserita in una istruzione di stampa, senza passare attraverso l’assegnazione a variabili. L’istruzione System.out.println(5/2) stampa 2 e, per ottenere la stampa del risultato corretto occorre scrivere System.out.println(5/2.0) o System.out.println(5.0/2). Non è invece possibile, per sollevamento di eccezione nella compilazione, assegnare il risultato di 5/2 ad una variabile dichiarata double, il che, almeno in parte, attutisce i pericoli che Java ha ereditato dal C.
Allo stesso modo di Java si comporta Ada con la sola eccezione che la divisione inserita in una istruzione di stampa, perchè dia il risultato corretto deve avere sia prima che dopo l’operatore / un float. Cioè non basta dire Put(5.0/2) o Put(5/2.0) ma occorre dire Put(5.0/2.0): in caso contrario viene segnalato errore nella compilazione.
Python 2 è nella stessa situazione di Java se l’input è acquistito con la funzione raw_input(), in quanto tutto si sistema se con la conversione della stringa acquisita si memorizza il valore in una variabile float. Se l’input è acquisito con la funzione input(), dal momento che questa, in Python 2, ritorna un valore numerico, occorre che almeno uno dei due numeri sia scritto come float dalla tastiera.