Pascal/Tipi di dati: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
The Doc (discussione | contributi)
The Doc (discussione | contributi)
Nessun oggetto della modifica
Riga 41:
* ''ord(x)'' che permette di trasformare il carattere ''x'' nel corrispondente intero ASCII
 
Un semplice esempio di uso potrebbe essere la stampa della tabella dei codici asciiASCII.
 
<source lang=pascal>
program ASCII;
Line 50 ⟶ 51:
end.
</source>
 
Come al solito analizziamo riga per riga.
* Dichiarazione del programma,
Line 62 ⟶ 64:
</source>
I due caratteri ' (carattere apice) identificano un valore alfanumerico e non numerico.
 
== Real ==
 
Le variabili di tipo real corrispondono ai numeri reali, ovvero i numeri con la virgola. Anche qui, come per gli integer, dobbiamo dare delle limitazioni. Essendo, come già sottolineato un computer una macchina limitata e discreta, inevitabilmente non può superare una certa precisione nel calcolo con i numeri reali. Per questo motivo spesso nelle strutture condizionate si devono cercare di utilizzare stratagemmi per evitare problemi.
 
Line 72 ⟶ 76:
 
Interne all'insieme dei reali troviamo ad esempio funzioni come:
*''sin(a)'' e ''cos(a)'': restituiscono il [[w:seno (matematica)|seno]] e il [[w:coseno|coseno]] dell'angolo a (espresso in [[w:radianti|radianti]])
*''random'': fornisce un numero casuale compreso tra 0 e 1 esclusi. Prima di usare questa funzione è bene usaare ''randomize'', che reinizializza il generatore di numeri casuali.
 
== Boolean ==
 
L'[[w:algebra booleana|algebra booleana]] è fondamentale nell'informatica. Questa permette infatti di fare calcoli sulla veridicità o falsità di una affermazione. Le variabili booleane infatti possono assumere solo i valori logici vero (''true'') e falso (''false''). Le operazioni possibili sono diverse da quelle possibili per gli altri tipi di variabile:
* ''and'' che corrisponde al simbolo matematico <math>{}\wedge{}</math> e al concetto di ''e contemporaneamente''
* ''or'' che rappresenta <math>{}\vee{}</math> e ''oppure''
Line 82 ⟶ 88:
 
Le variabili di tipo booleano si dichiarano con la parola riservata ''boolean''.
 
<source lang=pascal>
var
Line 92 ⟶ 99:
variabile_booleana:=false;
</source>
 
L'utilizzo di variabili Booleanbooleane è in genere limitato all'analisi di particolari aspetti dell'input da utente, o all'utilizzo come 'flag' nella programmazione più avanzata.
 
== String ==
 
Le variabili string sono variabili che possono contenere una [[Wikt:stringa|stringa]] alfanumerica di caratteri.
 
La dichiarazione di una variabile string ha sintassi:
 
<source lang=pascal>
nome_della_variabile : string[n];
</source>
 
Ovvero afferma che la variabile ''nome_della_variabile'' può contenere una riga di massimo ''n'' caratteri.
 
Come per le variabili ''char'', anche le variabili ''string'' necessitano una sintassi particolare per l'assegnazione: l'istruzione
 
<source lang=pascal>
nome_variabile := 'Ma la volpe col suo balzo ha raggiunto il quieto fido 1234';
</source>
 
assegna a nome variabile la stringa alfanumerica (in questo caso ''Ma la volpe col suo balzo ha raggiunto il quieto fido 1234''.
 
Nel caso si voglia inserire un carattere apice nella propria stringa (per inserire ad esempio un apostrofo) è necessario usare due apici di seguito. Un'istruzione come questa:
 
<source lang=pascal>
writeln('L'unica soluzione...');
</source>
 
genera infatti un errore, poiché l'apostrofo tra ''La'' e ''unica'' è interpretato dal compilatore come un apice che delimita la fine della stringa. Un'istruzione invece come questa
 
<source lang=pascal>
writeln('L''unica soluzione...');
</source>
 
è interpretata correttamente.
 
L'unico operatore possibile con il tipo string è l'operatore di concatenazione +, che è possibile capire con un esempio:
 
<source lang=pascal>
var1 := 'Ma la volpe col suo balzo ';
Line 123 ⟶ 143:
var3 := var1 + var2 + ' 1234';
</source>
 
La variabile var3 alla fine di questo breve listato conterrà così il valore ''Ma la volpe col suo balzo ha raggiunto il quieto fido 1234'', in quanto le stringhe sono state concatenate in una stringa unica.<br/>Si noti lo spazio inserito prima dell'apice: senza lo spazio, le parole risulterebbero attaccate.
 
Si noti lo spazio inserito prima dell'apice: senza lo spazio, le parole risulterebbero attaccate.
 
Una funzionalità interessante relativa alle stringhe è l''''indicizzazione''', per la quale è possibile fare riferimento ad un carattere all'interno della stringa, usando la notazione
Line 129 ⟶ 152:
variabile[n] {l'n-esimo carattere della stringa in variabile}
</source>
 
== Tabella: Operazioni ed operatori ==
 
<table border="1" width="50%" cellpadding="2" cellspacing="0" margin="2px" >
<tr><th>Operatore </th><th>Operandi</th><th>Risultato</th></tr>
Line 149 ⟶ 174:
Il significato di questi operatori e di queste funzioni è stato mostrato nei paragrafi precedenti. ad eccezione della funzione ''sqrt(''n'')'', che restituisce la radice quadrata di un ''n''.
 
Pascal mette a disposizione inoltre alcuni operatori di confronto che restituiscono sempre un valore booleanbooleano e che possono essere usati su due variabili qualsiasi dello stesso tipo di dato:
*< (minore)
*<= (minore o uguale)
Line 156 ⟶ 181:
*>= (maggiore o uguale)
*> (maggiore)
&Egrave;È intuibile il loro funzionamento nell'ambito di variabili integer o real; questi operatori tuttavia possono essere anche usati sui tipi di dato char o string; più in particolare:
 
char1 < char2
 
è equivalente a scrivere
 
ord(char1) < ord(char2)
 
La comparazione tra valori string valuta invece le stringhe in ordine alfabetico (quindi saranno vere le espressioni come, ad esempio, 'abaco' < 'amico' o 'zaino' = 'zaino').
 
<br/>Per quanto riguarda i valori boolean, vale
false < true
e, quindi
Line 167 ⟶ 197:
 
== Type ==
 
Abbiamo già visto prima che per dichiarare una variabile si deve specificare un tipo (ad esempio, integer o real) per indicare quali valori può assumere.
In alcuni casi può essere utile ricorrere a delle tipologie di dati non predefinite: si può ricorrere a una ''dichiarazione di tipo'' con la parola riservata '''type'''.
 
La sintassi è
 
<source lang=pascal>
type
nome:(elemento_1, elemento_2,...,elemento_n);
</source>
 
dove elemento_1,elemento_2,...,elemento_n sono i possibile valori che possono assumere le variabili del tipo di dato ''nome'' elencati in ordine.
 
Per indicare quindi che una variabile è del tipo ''nome'' si usa la sintassi:
 
<source lang=pascal>
var
variabile:nome;
</source>
 
Per fare un esempio, possiamo definire un tipo:
 
<source lang=pascal>
type
mesi: (gen, feb, mar, apr, mag, giu, lug, ago, set, ott, nov, dic);
</source>
 
e dichiarare due variabili
 
<source lang=pascal>
var
mese_di_nascita_luigi, mese_di_nascita_gianni:mesi;
</source>
 
Se corso del programma poniamo
 
<source lang=pascal>
mese_di_nascita_luigi:= feb;
mese_di_nascita_gianni:= ago;
</source>
 
avremo che:
l'istruzione
 
<source lang=pascal>
writeln(mese_di_nascita_luigi);
</source>
 
stampa sullo schermo ''feb''; l'espressione
mese_di_nascita_luigi < mese_di_nascita_gianni