La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.

Il tipo di dati numerici più semplici in Pascal sono numeri intere destinati per la memorizzazione di numeri interi. I numeri interi a Pascal sono consueti per dividere in due tipi: con un segno e nessun segno. Numeri con un segno - Questo è un tipo intero, che include sia positivo che numeri negativi, nessun segno - solo positivo.

Di seguito sono riportati due tabelle con tipi di integer. Prima bevuto tipi di numeri interi con un segno:


Un tipoByteGamma di valori
shunt.1 -128 ... 127
smallinta.2 -32768 ... 32767
integer, longant.4 -2147483648 ... 2147483647
iNT64.8 -9223372036854775808 ... 9223372036854775807

E questo è tipi di Integer senza segno:


Un tipoByteGamma di valori
byte1 0 ... 255
parola.2 0 ... 65535
longword, cardinale.4 0 ... 4294967295
uINT64.8 0 ... 18446744073709551615

Come si può vedere, la prima colonna è il nome del tipo, nel secondo - il numero di byte occupati nella memoria dei numeri di questo tipo, nel terzo - rispettivamente, la gamma di valori possibili. Nelle numeri con un cartello ci sono due tipi - Integer e Longant (letteralmente "intero" e "lungo intero"), che sono sinonimi. Cioè, è possibile utilizzare sia un nome che altre descrizioni nella sezione Descrizioni.

Allo stesso modo, nella seconda tabella (numeri interi non negativi in \u200b\u200bPascal) ci sono anche due sinonimi di tipo intero di 4 byte di dimensioni - longword e cardinale, quindi utilizzare uno o l'altro.

Si può ancora notare che se i numeri della prima tabella sono trasferiti condizionatamente sul lato destro rispetto a zero (per spostare l'intervallo a destra in modo che il numero minimo sia 0), quindi otteniamo intervalli dei numeri interi del secondo Tavolo sdraiato nelle linee corrispondenti. Quindi, se nel tipo a 1 byte di abbreviamento ai bordi sinistro e destro aggiungere 128, quindi otteniamo il tyte byte (0..255); Se nel tipo a 2 byte di piccole dimensioni ai bordi aggiungi 32768, quindi otteniamo il tipo di 2 byte corrispondente senza segno di parole (0..65535), ecc.

Tutto ciò accade perché nei tipi di numero intero senza un segno del numero può essere separato esattamente finora: metà dei numeri - alla parte negativa, metà - in positivo. E perché poi in numeri con il segno del bordo sinistro ad un valore assoluto di 1 altro per il bordo giusto? - tu chiedi. Ad esempio, nel tipo di cortocircuito minimo -128, mentre il massimo è solo 127 (per 1 modulo inferiore). E questo perché anche il lato destro include 0, e devi saperlo e ricordare.

Allora perché i numeri interi a Pascal condividono così tanti tipi? Perché non farlo, ad esempio, il più grande dei tipi di integer in PascAlabc.net e GRATUITO PASCAL - INT64 è quasi 9 e mezzo quintillion (!) Come con un meno e più. Sì, su un semplice banale (?) Motivo - Risparmio di memoria. Se è necessario piegare due piccoli numeri positivi single-byte (0..255), e hai descritto questi numeri come INT64 (8 byte), quindi ci sono voluti 8 volte più memoria. E se un programma grande e variabile è molto, quindi il risparmio della memoria diventa molto bruscamente. E non ha senso usare intere 19 tipi con un segno se nel compito noi stiamo parlando Su tali valori come lunghezza, peso, distanza, tempo, ecc.

Nella sezione del sito, l'attività Abrahamen (sottosezione intera), osservare l'uso di vari tipi di integre in Pascal.

Ogni tipo indica un sottoinsieme di numeri interi:

Formato del tipo di tipo
Short -128..127 Segno 8 bit
Integer -32768 .. firmare 16 bit
Longint -2147483648 .. Band 32 bit
Byte 0..255 Ansureato 8 bit
Parola 0..65535 Ansureato 16 bit

Tutti i tipi di Integer sono ordinale. I valori massimi numeri interi e longant corrispondono a maxint costanti e Maxlongint.. I valori massimi e minimi di altri tipi di integer possono essere ottenuti utilizzando funzioni basse e elevate.

Anno Domini

Pacchetto di interfacce:

In questo pacchetto, vengono annunciati i tipi di integer con gli intervalli non dipendenti dal compilatore e dall'ambiente operativo.

Formato del tipo di tipo
Integer_8 -128..127 Segno 8 bit
Integer_16 -32768..32767 segno 16 bit
Integer_32 -2147483648..2147483647 Segno 32 bit
Integer_64 -2 ** 63 .. 2 ** 63 - 1 iconico 64 bit
Unsigned_8 0..255 Ansureato 8 bit
Unsigned_16 0..65535 Ansureato 16 bit
Unsigned_32 0..4294967296 Uncleable 32 bit
Unsigned_64 0 .. 2 ** 64 - 1 Ansureato 64 bit

Pacchetto standard (collega automaticamente):

Questo pacchetto definisce i tipi standard interi. Secondo lo standard, la gamma di ciascuno dei seguenti tipi non dovrebbe essere rispetto al precedente. Inoltre, due di questi tipi sono applicati restrizioni minime biologiche.

Il tipo non è già ciò che ... è solitamente ...
Short_short_integer integer_8.
Short_integer integer_16.
Intero integer_16 intero_32.
LONG_INTEGER INTEGER_32 INTEGER_32.
Long_long_integer integer_64.

Nonostante il fatto che ho scritto nella colonna di destra dell'influsso di ogni tipo, raccomando solo Integer e Long_integer. Per tutte le altre cure, tipi preferiti di Integer_X. Il compilatore è come un detective privato. Più non, una volta, meno sarà utile. Chissà come i tipi standard saranno pubblicati sulla piattaforma Win128.

Oltretutto tipi specificati, Lo standard è usato frequentemente:

Natural è intervallo intero 0 .. intero "ultimo;
Positivo è intervallo intero 1 .. intero "ultimo;

Il sistema di controllo dell'inferno è pensato meglio di quello di Borland Pascal. Borland Pascal non può compilare un tale programma:

programma test_word;

var.
I: parola; (dai migliori motivi)

inizio.
Per i: \u003d 0 a -1 do (costante fuori portata)
Inizio.
fine;
fine.

L'indice -1 è un fenomeno comune, se si lavora con gli array, l'indice iniziale di cui è 0. Se l'array è vuoto, allora il limite superiore ciclo per (La lunghezza dell'array minus uno) è appena ottenuto -1. Invece di chiamare un errore, questo ciclo non dovrebbe semplicemente fare nulla. Non ci saranno tali problemi nella lingua di tali problemi. Usa naturale e positivo sulla salute.

I dati sono. concetto generale Per tutto ciò che opera con un computer.

Le variabili utilizzate per memorizzare i dati a Pascal, potrebbero essere tipi diversi. Questo, in particolare, è associato al desiderio di ricevere programmi più compatti e ad alta velocità che utilizzano meno memoria durante il loro lavoro.

Ad esempio, è necessaria la memoria più piccola per memorizzare numeri di piccole dimensioni rispetto alla memorizzazione di grandi dimensioni. I numeri interi dalla gamma di 0-255 occupano solo 1 byte della memoria, mentre i numeri peggiori richiedono un numero di lino di byte. Se la logica del programma è nota che il risultato non supererà il 255, quindi è sufficiente utilizzare una variabile a un byte singolo per la sua storage.

D'altra parte, i processori moderni vengono solitamente trattati in diversi modi e numeri reali. Ad esempio, i comandi aritmetici Integer nei processori I80x86 vengono eseguiti direttamente principalmente da ALLU e richiedono relativamente pochi tempi di processore. Mentre le operazioni con numeri reali vengono eseguite da un coprocessore matematico, che, sebbene abbia grandi opportunità di lavorazione, ma richiede molto più tempo per ottenere il risultato.

Pertanto, se la logica dell'algoritmo non richiede l'uso di numeri reali, non ha senso utilizzare l'aritmetica "fluttuante" ingombrante. Quando si specifica nel programma che questa variabile è integer, il programmatore fornisce effettivamente le istruzioni al compilatore per elaborarlo con rapidamente ALU del processore principale, senza ciclismo senza la necessità di un coprocessore.

Inoltre, possono essere identificate varie operazioni per diversi tipi di dati. Ad esempio, non ha senso eseguire un'operazione di divisione per stringhe di simboli o effettuare l'aggiunta di una variabile materiale con logica. Se il suo tipo è specificato durante la dichiarazione variabile, il compilatore è in grado di monitorare la correttezza delle espressioni in cui verrà utilizzata questa variabile. Ciò consente di ridurre leggermente il numero di errori nel programma.

A Pascal, ci sono tipi semplici, compositi e di riferimento di riferimento. Ora familiarizzeremo in dettaglio solo con il primo di loro, ma per il resto, parliamo nelle seguenti conferenze.

PER tipi semplici relazionarsi:

- logica

- Intere tipi.

- Tipi reali

- Simbolo

1. Tipo logico (Tipo booleano)

Un valore logico è uno dei due valori di verità designati dai nomi riservati. falso e vero..

Il tipo logico è definito così falso < vero.. Le operazioni di relazione forniscono sempre un risultato logico. Ad esempio, atteggiamento



con x \u003d 0, y \u003d 0 dà falso; con x \u003d 0, y \u003d 10 - valore vero..

2. Tipi di dati interi

I valori delle variabili di tipo Intere sono elementi di un sottoinsieme limitato di numeri interi; Questo sottoinsieme è determinato da un'implementazione specifica.

NEL standard Pascal. È definito solo un intero tipo di dati - Tipo numero intero. Numero di tipo. numero intero prende due byte di memoria; In questo caso, il bit zero determina il numero di numeri.

Nell'attuazione del Pascal, con cui lavoreremo, in variabili numero intero È possibile memorizzare numeri interi nell'intervallo da -32768 al +32767.

Inoltre, Turbo Pascal ha tipi di dati aggiuntivi:

1) tipo. shunt. - Un breve lunghezza intero un byte con un segno (un segnale occupa un bit zero), i limiti del cambiamento -128 .. 127;

2) tipo. byte - Breve lunghezza intera un byte senza segno (tutti gli otto bit - numeri binari), cambia i limiti 0 .. 255;

3) Tipo. parola. - un'intera lunghezza di due byte (parola) senza segno, limiti di cambiamento 0 .. 65535;

4) Tipo. longint. - lunghezza lunga 4 byte con segno, modifiche limiti - 2 147 483 648 .. 2 147 483 647.

Per i valori interi, le seguenti operazioni aritmetiche sono ammesse:

Aggiunta;

- sottrazione;

* Moltiplicazione;

div. La divisione del flay (nota che il tradizionale segno di divisione "/" restituisce un numero frazionario in Pascal, quindi il risultato di tale operazione non può essere assegnato una variabile integer).

mod. resto della divisione.

Nei termini aritmetici, due segni di funzionamento non possono sopportare. Ad esempio, è impossibile scrivere un * -b. Qui è necessario scrivere un * (-b).

Operazioni di partenza:

1) espressioni tra parentesi;

2) *, div, mod (operazioni moltiplicative);

3) +, - (operazioni additive).

Le operazioni della stessa anzianità vengono eseguite da sinistra a destra.

Non ci sono operazioni di esercizio nella laurea in Pascal. Per gli indicatori interi, questa operazione può essere sostituita da moltiplicazione ripetuta.

L'intero risultato fornisce le seguenti caratteristiche preaterate:



1) ABS (i) è il valore assoluto dell'intero argomento I;

2) SQR (I) - I valori quadrati dell'intero argomento I;

3) TRUNC (R) è un numero intero risultante dall'anguffamento della parte frazionata del numero r;

4) Round (R) è un numero intero arrotondato R.

trunc (3.3) \u003d 3; Round (3.3) \u003d 3;

trunc (3.5) \u003d 3; Round (3.5) \u003d 4;

trunc (3.8) \u003d 3; Round (3.8) \u003d 4;

trunc (-3.3) \u003d -3; Round (-3.3) \u003d -3;

trunc (-3.8) \u003d -3; Round (-3.8) \u003d -4.

3. Tipi reali

I numeri reali sono numeri punto flottanti. Ampio uso di loro è caratteristico delle attività tecniche e tecniche.

In assenza di coprocessore, viene implementato un solo tipo reale - tipo vero; In presenza di coprocessore, anche i tipi sono implementati singolo, doppio., esteso, comp.. I tipi reali differiscono l'uno dall'altro per il numero di scariche assegnate per rappresentare la mantissa e l'ordine.

Per tipo. vero Quattro operazioni aritmetiche sono definite:

Aggiunta - sottrazione

* Moltiplicazione / divisione

Il risultato delle operazioni "+", "-", "*" è un valore reale se almeno uno degli operandi ha un tipo vero. Funzionamento "/" dà valore reale nel caso in cui entrambi i suoi operandi hanno un tipo intero.

Caratteristiche standard ABS (X) e SQR (X) Dare una realizzazione se il loro argomento X è tipo vero. Indipendentemente dal tipo di argomento, quanto segue funzioni standard Dare sempre un risultato reale: Sin (x), cos (x), ln (x), exp (x), arctan (x), sqrt (x) (radice quadrata).

Il vero feedback con argomento reale fornisce anche funzioni

Int (x) - un'intera parte del valore reale x;

Frac (x) - parte frazionata del valore reale x.

4. Tipo di dati simbolo (tipo di char)

I valori delle variabili del tipo di carattere sono gli elementi del set di caratteri finale e ordinato. Questo set potrebbe essere ineguale a vari computer.

Il valore di una variabile di tipo di carattere è indicato da un personaggio allegato in apostrofi.

"A" "A" "8" "" "" "(Apostrofo è scritto due volte)

Indipendentemente dall'attuazione per il tipo simbolico, le seguenti ipotesi sono valide.

1) I numeri decimali da "0" a "9" sono ordinati in conformità con i loro valori e registrati uno dopo l'altro.

2) Ci sono tutte lettere grandi dell'alfabeto latino da "A" a "Z". Questo set è ordinato in ordine alfabetico, ma non necessariamente connesso. Di conseguenza, in qualsiasi implementazione, "I" deve essere eseguito< "J".

3) Ci possono essere piccole lettere dell'alfabeto latino da "A" a "Z". In tal caso, allora questa è un sacco di lettere semplificate alfabeticamente, ma non necessariamente connesse.

Per il tipo simbolico, sono definite due funzioni di conversione di ORD reverse e CHR:

k \u003d ord (ch) - il numero di sequenza del simbolo CH;

ch \u003d chr (k) - simbolo con numero di sequenza k.

Per il tipo simbolico, tutte le operazioni sono definite.

Si ritiene che Ch1< ch2, если ord(ch1) < ord(ch2).

Struttura del programma Pascal

Il programma Pascal è costituito da un'intestazione del programma e ad alcuni blocchi:

Intestazione del programma;

Bloccare .

Titolo Consiste del programma di parole chiave e del nome del programma:

Esempio di programma;

Bloccare Contiene le descrizioni delle descrizioni in cui tutti gli oggetti sono definiti rispetto a questo programma e la sezione degli operatori, in cui sono specificate le azioni che devono essere eseguite sopra questi oggetti. Il blocco è costituito dalle seguenti sezioni:

1. Descrizione della sezione delle etichette.

2. Sezione di descrizione costante

3. Digitare la sezione Descrizione

4. Sezione della descrizione delle variabili.

5. Sezione Descrizione delle procedure e delle funzioni.

6. Sezione degli operatori.

Nel blocco non ci possono essere nessuna delle sezioni tranne la sezione dell'operatore.

1. Sezione delle descrizioni delle etichette

Qualsiasi operatore nel programma può essere contrassegnato con un'etichetta. L'etichetta è posta davanti all'operatore e separata da essa con due punti. Tutti i tag dovrebbero essere descritti nelle descrizioni delle etichette.

Etichetta 10, 20, Met15;

2. Sezione di descrizione costante

Questa sezione definisce alcuni identificatori come sinonimi di costanti.

Textstring \u003d "Premere il tasto INVIO";

PI Constant è preoperata e uguale

pI \u003d 3.1415926536.

L'uso di identificatori costanti migliora la leggibilità del programma e facilita la sua modifica.

3. Digitare la sezione Descrizione

Tipi di dati Real, Integer, Boolean, Char sono predeterminati e utilizzati nella sezione Descrizioni variabili. Se il programmatore deve inserire un nuovo tipo di dati, deve essere descritto nella sezione Descrizioni del tipo.

Maggiori informazioni sulla descrizione dei nuovi tipi parliamo più tardi.

4. Sezione della descrizione delle variabili

Ogni nome variabile, array o altro oggetto del programma deve essere fornito nella sezione Descrizioni variabili.

VAR I, J, K: Integer;

5. Sezione Descrizione delle procedure e delle funzioni

Lo scopo e la struttura della sezione saranno riportati quando si considerano le procedure e le funzioni.

6. Sezione degli operatori

La sezione contiene operatori che implementano l'elaborazione delle informazioni nel programma. La sezione dell'operatore è un caso speciale di un operatore composito, che include uno o più operatori racchiusi in "parentesi di operatori" iniziano ... End. Il separatore tra gli operatori è un punto con una virgola. Nelle conferenze successive, studieremo i principali operatori del linguaggio Pascal.

Sezione numero 9 (2 ore)

Operatore di assegnazione. Input Output
Nei programmi su Pascal

Operatore di assegnazione. Scrivere espressioni aritmetiche

Procedure di immissione dei dati dalla tastiera

Procedure di output dei dati sullo schermo

Nozioni di base della programmazione
Ogni professionista era una volta un bollitore. Sicuramente conosci la condizione quando "non sai come iniziare a pensare di pensarci". Sicuramente hai affrontato la situazione quando non sai da dove iniziare. Questo libro si concentra solo su persone che vorrebbero diventare un programmatore, ma assolutamente non sa come avviare questa strada. ...

Quasi tutti i tipi di dati interi sono correlati a. Questi tipi di dati rappresentano numeri interi in un intervallo specifico. Nomi specifici dei tipi di integer e gamme dipendono dal linguaggio specifico della programmazione, dal compilatore e dalla modalità di compilazione. Ulteriori informazioni su di esso devono essere riconosciute nella documentazione per il compilatore.

Ad esempio, tipo di dati Numero intero Delphi ha una gamma -2147483648 ... 2147483647, mentre nel tipo di dati Turbo Pascal Numero intero Rappresenta i numeri nell'intervallo -35768 ... 32767. Nella gamma di valori di tipo PASCAL gratuiti Numero intero Determinato dalla modalità selezionata.

Dal momento che Lazarus utilizza il compilatore PASCAL gratuito, quindi tutto ciò che è stato detto sui tipi di dati in relazione a Pascal gratis è vero per Lazarus.

Quindi, i tipi di dati interi di PASCAL GRATUITI sono elencati nella Tabella 13.1.

Tabella 13.1. Tipi intelligenti Dati Pascal gratuiti (Lazarus).

Un tipo Dimensioni, byte. Gamma di valori
Byte 1 0…255
Shunt. 1 -128…127
Smallinta. 2 -35768…32767
Parola. 2 0…65535
Numero intero 2 o 4. Dipende dalla modalità di compilazione
Cardinale. 4 0…4294967295
Longint. 4 -2147483648…2147483647
Longword. 4 0...4294967295
INT64. 8 -9223372036854775808...9223372036854775807
Qword. 8 0...18446744073709551615

NOTA
Tipi di Pascal gratuiti INT64. e Qword. Non! Ciò significa che non è possibile utilizzarli, ad esempio, per le variabili indicizzabili nei cicli. Tuttavia, li ho portati qui per non descrivere in futuro e raccogliere in un unico posto tutti i tipi interi di Pascal GRATUITO. Se alcune parole non sono chiare - non aver paura. Una volta ti parlerò di tutto.

E ora alcune spiegazioni al tavolo.

In un colloquio UN TIPO I identificatori dei tipi di dati sono forniti ( parole chiaveche indicano il compilatore a quale tipo o altri dati includono). Come usare questi identificatori, imparerai nelle seguenti lezioni.

In un colloquio LA DIMENSIONE Viene specificata la dimensione che occupa il tipo di dati nella memoria del computer. Ad esempio, un numero positivo può essere rappresentato tipi diversi: Byte, Parola., Cardinale. et al. Tuttavia, il numero di tipo Cardinale. occuperà in memoria 4 byte, mentre il tipo di tipo Byte - solo 1 byte. Pertanto, se sai esattamente ciò con cui lavori con cui lavori non prenderà mai un valore più di 255, è meglio determinarlo come tipo BytePoiché questo salverà lo spazio nella memoria del computer. Sebbene qui non sia così inequivocabile (le sfumature di assegnazione della memoria e altre risorse del computer vanno oltre il quadro).

In un colloquio GAMMA Intervallo di valori specificato che gestisce il tipo di dati. Ad esempio, il numero di tipo Byte Può prendere valori da 0 a 255.

E ora pratica. Scriviamo un programma che visualizza le gamme di valori di tutti i tipi di dati interi. Il codice sorgente di questo programma è qui sotto:

Elenco 13.1. Il programma di uscita per la gamma di numeri interi. Programma TD; ($ MODE OBJFPC) ($ H +) utilizza ($ IFDEF UNIX) ($ IFDEF USEXRADS) CTRWADS ($ IFDEF USEXRADS) Classi ($ IFDIF) ($ ENDIF) (puoi aggiungere unità dopo questo); Inizia Writeln ("Byte:", basso (byte), "..", alto (byte)); Writeln ("zipint:", basso (short), "..", alto (short)); Writeln ("smallint:", basso (smentotto), "..", alto (smentotto)); Writeln ("parola:", bassa (parola), "..", alta (parola)); Writeln ("intero:", basso (intero), "..", alto (intero)); Writeln ("Cardinale:", basso (cardinale), "..", alto (cardinale)); Writeln ("longint:", basso (longint), "..", alto (longint)); Writeln ("longword:", basso (appoggiato), "..", alto (longword)); Writeln ("INT64:", basso (INT64), "..", alto (INT64)); Writeln ("qword:", basso (qword), "..", alto (qword)); Readln; fine.

Funzione standard Basso. Determina il valore minimo del tipo di dati. Funzkia. Alto Determina il valore massimo. Con funzioni Writeln. e Readln. Sei già familiare un po '. Più dettagliatamente sulle subroutine (procedure e funzioni) parleremo nella sezione pertinente.

Infine, dirò come vengono registrati i dati interi nel programma. Sì, così come ovunque, scrivi un numero, senza virgolette e altri caratteri aggiuntivi. Ad esempio, così

10
178
35278

È vero, questo si riferisce ai numeri nel sistema numerico decimale. Sicuramente sai già che ci sono altri sistemi. I sistemi numerici binari, decimali ed esadecimali più diffusi sono più comuni.

Il Pascal gratuito supporta il formato quattro per la registrazione di un numero intero:

  1. Record decimale. Solo un numero, ad esempio 10.
  2. Hexadecimale.. Il numero con il prefisso $. Ad esempio, un numero esadecimale $ 10 è decimale di 16 anni.
  3. Record ottale. Il numero con il prefisso e. Ad esempio, un numero ottale e 10 è uguale a decimale 8.
  4. Registrazione binaria . Il numero con il prefisso%. Ad esempio, il numero binario% 10 è uguale a decimale 2.

Compiti a casa:

Creare un programma che visualizza le gamme dei valori degli interi (elenco 13.1). Compilare il programma e eseguilo. Assicurarsi che questi valori corrispondano allo specificato nella Tabella 13.1.

NEL codice sorgente Programmi Trova una stringa che imposta la modalità di compilazione:

($ Modalità OBJFPC) ($ H +)

In questa linea invece di una parola oBJFPC. Scrivi una parola tp.. Cioè, la linea finale dovrebbe assomigliare a questo:

($ Modalità TP) ($ h +)

Esegui il programma. Guarda la gamma di valori di tipo Numero intero. Fare conclusioni.

Impara a pensare come programmatore, cioè logicamente. Nessuno per ritirarti per ritirare tutto, come lo faccio ora. Dobbiamo abituarci per pensare in modo indipendente. Altrimenti, andrai al "Principio della scimmia dell'apprendimento", e poi le tue possibilità di diventare un programmatore fantastico si avvicinano allo zero. Per aiutarti a non andare al livello di "Bunning", lascerò periodicamente le lacune nel tuo allenamento in modo da provare a pensare a alcune cose.

Molto meglio se pensi di te stesso soluzione sbagliata Tu stesso troverai un errore e correggerlo da te stesso di quello che userai sempre le soluzioni giuste di altre persone e li copiano stupidamente.

La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam.