# Pascal/Input e Output

Pascal
Copertina Tutti i moduli · Sviluppo
    Copertina
* IntroduzionePascal/Introduzione
* AlgoritmiPascal/Algoritmi
* VariabiliPascal/Variabili
* Input e outputPascal/Input e Output
* Tipi di dati e operatoriPascal/Tipi di dati
* Gestione avanzata dei datiPascal/Gestione avanzata dei dati
* CommentiPascal/Commenti
* Librerie e funzioni predefinitePascal/Librerie e funzioni predefinite
* Istruzioni di controlloPascal/Istruzioni di controllo
* ArrayPascal/Array
* Metodo top-down, procedure e funzioniPascal/Metodo top-down, procedure e funzioni
* Programmazione ad oggettiPascal/Programmazione ad oggetti
** Concetti fondamentaliPascal/Concetti fondamentali
** I modificatori public, private e protectedPascal/I modificatori public, private e protected
** Costruttori e distruttoriPascal/Costruttori e distruttori
** Override, metodi virtuali e classi astrattePascal/Override, metodi virtuali e classi astratte
** Il Turbo VisionPascal/Il Turbo Vision
* StrumentiPascal/Strumenti
* EserciziPascal/Esercizi
Modifica il sommario
Finalmente ci occupiamo del grande problema dell'input-output. Gran parte delle funzioni di input-output sono contenute nella libreria standard di Pascal. Queste funzioni sono tipicamente:
* read e readln che permettono di leggere l'input dell'utente da tastiera inserendo fra le parentesi il nome della variabile in cui vogliamo salvare il dato. La differenza consiste nel cursore, che nel caso di un'istruzione read continua sulla stessa riga mentre nel caso di readln va a capo.
* write e writeln che permettono, come già visto in precedenza, di stampare su schermo il contenuto delle parentesi. Anche in questo caso la differenza è relativa all'andare a capo.

## Un semplice esempio per iniziare

Un semplice esempio basato sull'uso delle variabili e dell'input-output potrebbe essere un modo per personalizzare un programma, salvando in una stringa il nome dell'utente per inserirlo nelle domande.
Analizziamo come al solito il listato riga per riga:
* dichiarazione del nome
* dichiarazione della variabile name di tipo Stringa di dimensione 50 (i tipi di dati saranno affrontati in seguito)
* dichiarazione delle librerie necessarie. Di questo argomento riparleremo a breve, ma sappiate che almeno due dei comandi utilizzati di seguito sono dipendenti da questa libreria
* inizio programma
* pulizia dello schermo. Questa è la prima (e forse la più usata) delle due funzioni che dipendono da crt.
* stampa sullo schermo della stringa ‘Inserisci il nome’. Dopo questa istruzione il programma va a capo
* lettura della stringa corrispondente al nome ed inserimento di questa stringa letta da tastiera nella variabile name
* nuova pulizia dello schermo
* stampa del messaggio di benvenuto
* altra funzione dipendente dalla libreria crt che permette di leggere un solo carattere qualunque da tastiera. Vedremo che questa funzione è molto utilizzata per risolvere un problema riguardo all'esecuzione dei programmi compilati finora.

## read e readln

L'istruzione assegna il valore immesso dall'utente nella variabile specificata tra parentesi. Il contenuto delle parentesi che seguono l'istruzione read o readln può essere una o più variabili. Nel secondo caso, in fase di esecuzione, i diversi valori di input vanno inseriti separandoli con uno spazio.

## write e writeln

Il contenuto della parentesi che seguono l'istruzione writeln può essere sia un'espressione (stringa o numerica), sia una variabile sia una combinazione. La parte testuale è compresa tra due apici; per separare il testo dalle variabili si usa una virgola, come nell'esempio precedente.
Alcuni compilatori, soprattutto i più vecchi, possono inoltre dare problemi nella stampa dei caratteri accentati: in questi casi l'accento può essere sostituito con un apostrofo che, per il problema relativo agli apici nelle stringhe, si deve indicare con due apici. Un'istruzione come
è preferibile sostituirla quindi con
(che stampa Il valore e').

### Formattare i numeri

Quando la variabile inserita nel writeln è di tipo numerico è possibile specificare con quante cifre dev'essere rappresentato il numero e quante di queste devono essere decimali (nel caso il numero sia reale e non intero); per fare ciò si utilizza la sintassi
Ad esempio:
Ovvero, nel primo caso il contenuto della variabile n verrà rappresentato con 8 cifre di cui 6 decimali; nel secondo caso verranno stampati 2 spazi vuoti e poi il numero 12. Una istruzione come questa
stamperebbe invece il valore di n in notazione esponenziale (ad esempio 3.4E4 anziché 34.000).
Riguardo input e output, si può anche fare un esempio con i numeri di con un programma che calcoli il quadrato di un numero reale:
* il programma stampa la stringa 'Inserisci un numero reale';
* con readln(n) assegna alla variabile n un valore immesso da tastiera;
* alla variabile r viene assegnato il valore del quadrato di n;
* viene scritto il risultato.
Si noti che per l'assegnazione di un certo valore a una variabile si usa la sintassi:
Questo valore può essere, come nell'esempio precedente, il risultato di un'espressione.

## Esercizi

* Scrivere un programma che applichi l'algoritmo dello scambio. Il programma deve chiedere all'utente i valori da inserire in due variabili, scambiare il contenuto delle variabili e poi stamparle (nello stesso ordine in cui le ha chieste). L'utente vedrà così scambiato l'ordine dei valori inseriti.
* Il programma chiede di immettere due numeri. Immetto come num1 10 e come num2 30.
* Il programma scambia i valori delle variabili num1 e num2.
* Vengono stampati i valori di num1 e num2. Vedrò quindi prima 30 e poi 10.
* Scrivere un programma che legga un numero e lo stampi formattandolo, chiedendo all'utente quante cifre utilizzare per i decimali.