Pascal/Tipi di dati: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
G4 (discussione | contributi)
avanzamento 100%
Ramac (discussione | contributi)
per ora così
Riga 1:
{{Pascal}}
In questo modulo analizzeremo i tipi di dati nativi di Pascal (che sono predefiniti e non richiedono l'uso di particolari [[Pascal/Librerie e funzioni predefinite|librerie]].
 
Ricordiamo che la dichiarazione di una variabile segue questa sintassi:
<source lang=pascal>
var
nome : tipo;
</source>
 
== Integer ==
Il tipo di dato più utilizzato è in genere il tipo ''integer''. Corrisponde ai [[w:numero intero (informatica)|numeri interi]], anche se non proprio a tutti; infatti, per via di problemi di memoria, non può memorizzare tutti i numeri: in Turbo Pascal comprende gli interi da -32768 a 32767, e(in questo modo una variabile integer occupa una memoria di 16 bit (- 2 byte)., ma in altre versioni questo numero più essere maggiore.
<br/>Essendo il computer una macchina limitata, infatti, non è possibile fare somme fino all'infinito. Infatti conCon alcuni semplici programmi si può osservare che esiste un limite superiore per gli interi (come nel caso del tipo ''integer'',cioè 32767), oltre al quale si ricade nel limite inferiore, come se fosse una circonferenza. Il fenomeno dello sforamento del limite massimo è detto [[w:Overflowoverflow|Overflowoverflow]].
 
Ogni tipo di dato ha delle operazioni permesse. In questo caso le operazioni che danno come ''risultato'' un integer sono:
Line 153 ⟶ 161:
</source>
 
== Riassumendo ==
== Tabella: Operazioni ed operatori ==
{| {{prettytable}} width="100%"
 
|+ Operazioni, operatori e funzioni
<table border="1" width="50%" cellpadding="2" cellspacing="0" margin="2px" >
<tr><th>! Operatore </th><th>!! Operandi</th><th> !! Risultato</th></tr>
|-
<tr><td align="center">+</td><td>real o integer o char</td><td>real o integer o char</td></tr>
|<trnowiki><td>-+</td> <tdnowiki>||real o integer o char</td> <td>||real o integer o char</td></tr>
|-
<tr><td>*</td> <td>real o integer o char</td> <td>real o integer o char</td></tr>
|<trnowiki>-<td>/</tdnowiki>||real <td>o integer o char||real o integer o char</td> <td>real</td></tr>
|-
<tr><td>mod</td> <td>integer o char</td> <td>integer</td></tr>
<tr><td>div</td>|*||real o <td>integer o char</td>||real o <td>integer</td></tr> o char
|-
<tr><th>Funzione</th><th>Argomento</th><th>Risultato</th></tr>
<tr><td>sqr(''x'')<|/td> <td>||real o integer o char</td> <td>integer</td>||real
|-
<tr><td>sqrt(''x'')</td> <td>real o integer o char</td> <td>real</td></tr>
<tr><td>abs(''x'')</td> <td>real o |mod||integer o char</td> <td>real o ||integer o char</td></tr>
|-
<tr><td>trunc(''x'')</td> <td>real o integer o char</td> <td>integer</td></tr>
|div||integer o char||integer
<tr><td>sin(''x'') e cos(''x'')</td> <td>real o integer o char</td> <td>real</td></tr>
|-
<tr><td>random</td> <td>-</td> <td>real</td></tr>
!Funzione!!Argomento!!Risultato
</table>
|-
|sqr(''x'')||real o integer o char||integer
|-
|sqrt(''x'')||real o integer o char||real
|-
|abs(''x'')||real o integer o char||real o integer o char
|-
|trunc(''x'')||real o integer o char||integer
|-
|sin(''x'') e cos(''x'')||real o integer o char||real
|-
|random||-||real
|}
 
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''.
 
=== Operatori di confronto ===
Pascal mette a disposizione inoltre alcuni operatori di confronto che restituiscono sempre un valore booleano e che possono essere usati su due variabili qualsiasi dello stesso tipo di dato:
{| {{prettytable}}
*< (minore)
|+ Gli operatori di confronto in Pascal
*<= (minore o uguale)
! <
*= (uguale)
|minore
*<> (diverso) - si può usare anche not(val1 = val2)
|-
*>= (maggiore o uguale)
! <=
*> (maggiore)
| minore o uguale
|-
! =
| uguale
|-
! <>
| diverso - si può usare anche not(val1 = val2)
|-
! >=
| maggiore o uguale
|-
! >
| maggiore
|}
È 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:
 
Line 196 ⟶ 232:
true > false
 
== Tipi di dati definiti dall'utente ==
== 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 è
 
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.<br7>
In alcuni casi può essere utile ricorrere a tipi di dati non predefiniti, ma creati dall'utente: si può ricorrere quindi ad una ''dichiarazione di tipo'' con la parola riservata '''''type'''''.
<br/>La sintassi è
<source lang=pascal>
type
nome: valori_possibili;
nome:(elemento_1, elemento_2,...,elemento_n);
</source>
che definisce il tipo di dato ''nome''.
 
<br/>Per indicare quindi che una variabile è del tipo ''nome'' si usa la sintassi:
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
Line 217 ⟶ 248:
</source>
 
=== Tipi enumerativi ===
Per fare un esempio, possiamo definire un tipo:
Il più semplice tipo di dichiarazione ''type'' è quella dei '''tipi enumerativi''', che consentono cioè un numero ristretto div valori, definiti singolarmente dall'utente:
<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.
<br/>Per fare un esempio, possiamo definire un tipo:
 
<source lang=pascal>
Line 238 ⟶ 277:
</source>
 
avremo che: l'istruzione <code>writeln(mese_di_nascita_luigi);</code> stampa sullo schermo ''feb''; l'espressione <code>mese_di_nascita_luigi < mese_di_nascita_gianni</code> restituisce TRUE, in quanto feb precede ago nella lista dei mesi indicata nella dichiarazione. Allo stesso modo <code>giu > set</code> restituisce invece FALSE.
avremo che:
l'istruzione
 
=== Subrange ===
I '''''subrange''''' sono tipi di dati che sono definiti come sottoinsiemi di altri tipi. Ad esempio:
<source lang=pascal>
type
writeln(mese_di_nascita_luigi);
cifra: 0..9
mese_primaverile: marzo..giugno;
lettera: 'a'..'z';
</source>
Abbiamo definito tre dati subrange: il primo tipo permette tutti i numeri dallo 0 al 9, il secondo tutti i mesi (da gennaio a dicembre) e il terzo tutti i caratteri da "a" a "z". Come si può intuire:
* una definizione di un subrange è costituita da un '''limite''' inferiore e uno superiore
* un subrange non è valido se il limite inferiore è maggiore o uguale a quello superiore (ad esempio non è valido il subrange <code>9..5</code>)
* i due limiti devono essere dello stesso tipo di dato (interi, ''char'', o anche definiti dall'utente, come nel caso di <code>mese_primaverile</code> che è un subrange del tipo ''mesi'' definito in precedenza)
 
Una volta definito, lo possiamo utilizzare:
stampa sullo schermo ''feb''; l'espressione
<source lang=pascal>
mese_di_nascita_luigi < mese_di_nascita_gianni
var mese: mese_primaverile;
restituisce TRUE, in quanto feb precede ago nella lista dei mesi indicata nella dichiarazione. Allo stesso modo
</source>
giu > set
In questo caso ad esempio si possono effettuare dichiarazioni come <code>mese := marzo;</code> ma non <code>mese: ottobre;</code>.
restituisce invece FALSE.
 
[[Categoria:Pascal|Tipi di dati]]