Guida al linguaggio PASCAL per principianti

 Home

 

<< Indietro

Scritta da Pasquale Campitiello

 

Chi sono

 



L'origine del linguaggio Pascal

Il Pascal è un linguaggio di programmazione ad alto livello, cioè si avvicina di più all'inglese scritto e si allontana dal linguaggio macchina, inoltre  ad ogni istruzione del codice sorgente corrispondono  diverse istruzioni in codice binario (nei linguaggi a basso livello ad ogni istruzione del codice sorgente corrisponde una sola istruzione in codice binario).

Fu progettato per elaboratori elettronici nel 1969 da Niklaus Wirth, docente presso il Politecnico di Zurigo. Esso prende il nome da Blaise Pascal, un matematico francese, che fu il primo ad inventare una macchina calcolatrice: la Pascalina.

Il Pascal si è rivelato utile a livello didattico per l'insegnamento dei metodi di programmazione. Esso si diffuse dapprima negli ambienti scientifici ma successivamente, grazie alla sua semplicità si diffuse dappertutto. Oggi il linguaggio Pascal è poco usato per applicazioni professionali, a vantaggio di altri linguaggi più adatti a sfruttare le potenzialità del sistema operativo (C, C++, Visual Basic ecc.), ma è un ottimo strumento per iniziare a programmare data la sua semplicità.

 


La struttura di base

La struttura di base di un programma scritto in Pascal è costituita da 5 elementi:

  1. intestazione

  2. riga che dichiara le variabili

  3. istruzione che dichiara l'inizio del programma

  4. corpo del programma

  5. istruzione che dichiara la fine del programma.

Ogni riga di un programma scritto in Pascal deve necessariamente terminare con un punto e virgola (;), questa regola non è valida per righe contenenti istruzioni particolari illustrate successivamente in questa guida. Tutto il testo del programma, chiamato anche codice sorgente, può essere scritto indifferentemente sia in maiuscolo che in minuscolo.

 

Struttura base:

 

Program NOMEDELPROGRAMMA;               intestazione

var VARIABILI:TIPOVARIABILI;                 riga che dichiara le variabili

begin                                                     istruzione che dichiara l'inizio del programma

 ...

 ...                                                              corpo del programma  

 ...

readln;

end.                                                            istruzione che dichiara la fine del programma

 

L'istruzione READLN prima di END (obbligatoria nei compilatori più recenti), serve a bloccare lo schermo alla fine dell'esecuzione del programma; praticamente il compilatore aspetta che sia premuto un tasto per passare all'istruzione successiva, cioè END, e quindi terminare l'esecuzione del programma. Senza READLN il programma viene eseguito lo stesso, ma il compilatore non fermandosi alla fine non permette la corretta visualizzazione dell'esecuzione.

 


Torna su é


L'intestazione

L'intestazione di un programma scritto in Pascal è costituita dalla parola PROGRAM seguita da uno spazio e dal nome del programma. Il nome del programma non viene letto dal compilatore, quindi può essere un nome qualunque. Pur tuttavia la riga dell'intestazione può essere omessa, cioè si può cominciare a scrivere il programma direttamente dalla riga delle variabili.

 

Il nome del programma

DEVE:

essere scritto senza spazi

NON DEVE:

essere una parola riservata

contenere lettere accentate

contenere segni di punteggiatura e simboli

 

Se si vogliono inserire degli spazi all'interno del nome del programma si possono usare le lineette (_):

 

Program hfdjdh_kjeijie_ijeiie;

...

 

Il nome del programma non viene letto dal compilatore, quindi può essere formato anche da  un insieme di lettere alla rinfusa. In questo caso ho usato le lineette per simulare gli spazi e l'intestazione è corretta.

 


Le parole riservate

Le parole riservate sono parole che non possono esser usate né come nome di un programma, né come nome di una variabile, siccome sono istruzioni che dichiarano qualcosa.

Alcune parole riservate sono:

 

Absolute

And

Array

Asm

Begin

Case

Const

Destructor

Div

Do

Downto

Else

End

File

For

Forward

Funtion

Goto

If

Implementation

In

Interface

Label

Mod

Nil

Not

Object

Of

Or

Packed

Private

Procedure

Program

Record

Repeat

Set

Shr

String

Then

To

Type

Until

Uses

Var

While

Whit

Xor

 

 

Esempio:

 

Program end;         <-------1° ERRORE

var If:...;                 <-------2° ERRORE

...

 

In questo esempio vi sono 2 errori: ho usato END che è una parola riservata come nome del programma (END dichiara la fine del codice sorgente), ed ho usato IF che pure è una parola riservata  come nome di una variabile (IF specifica una condizione).

 


Torna su é


Le variabili

Una variabile è un contenitore all'interno del quale vi sono dei dati che possono variare durante l'esecuzione del programma. Le variabili in un programma scritto in Pascal sono dichiarate in una riga specifica dopo la parola VAR tramite dei nomi. Questi ultimi, detti anche identificatori, sono assegnati liberamente, ma non devono:

  1. contenere spazi

  2. essere uguali al nome del programma

  3. contenere segni di punteggiatura o simboli

  4. essere dei simboli o dei numeri

  5. essere una parola riservata

  6. contenere lettere accentate

Se vi sono più variabili, i vari identificatori vengono separati da virgole (,).

I dati contenuti nelle variabili possono essere di diverso tipo: testo, numeri interi, numeri reali ecc. Il tipo di una variabile deve essere indicato dopo l'identificatore, facendo seguire a quest'ultimo i due punti (:) e scrivendo il tipo della variabile.

Se vi sono più variabili dello stesso tipo (ad esempio 3 numeri, 2 stringhe ecc.), si indicheranno i vari identificatori separati da virgole, si faranno seguire all'ultimo identificatore i due punti (:) e si scriverà il tipo delle variabili.

 

Esempio (dichiarazione di una variabile):

...

var identificatore: tipo;

...

 

Esempio (dichiarazione di più variabili):

...

var identificatore, ..., ..., identificatore: tipo;

...

 

Quando le variabili sono molteplici e di diverso tipo la sintassi è la seguante:

...

var identificatore, ..., ..., identificatore: tipo1;

var identificatore, ..., ..., identificatore: tipo2;

...

 

I principali tipi di variabili sono:

 

TIPO DI VARIABILE

DESCRIZIONE

Integer

Byte

Word

Shortint

Longint

Real

String

Char

Boolean

La variabile è un numero intero compreso tra -32768 e +32767

La variabile è un numero intero compreso tra 0 e 255

La variabile è un numero intero compreso tra 0 e 65535

La variabile è un numero intero compreso tra -128 e +127

La variabile è un numero intero compreso tra -2147483648 e +2147483648

La variabile è un numero reale compreso tra 2.9E-39 e 1.7E38

La variabile è di tipo testuale

La variabile è un singolo carattere della tabella ASCII

La variabile può assumere i valori TRUE o FALSE

 

Quando si deve assegnare un valore ad una variabile (che è stata già dichiarata, altrimenti viene visualizzato un messaggio di errore), si segue la seguente sintassi:

...

identificatore:=valore variabile;

...

 

Per esempio se la variabile è di tipo numerico e il suo identificatore è x si scriverà:

...

x:=1234;

...

 

Invece se la variabile è di tipo testuale e il suo identificatore è y si scriverà:

...

y:='parola';

...

 

Gli apici (' ') identificano le variabili di tipo testuale STRING o CHAR.

 

Se in un programma non c'è bisogno di variabili la riga che le dichiara può anche essere omessa.

 


Torna su é


Le costanti

Le costanti, al contrario delle variabili, sono contenitori di dati fissi. Esse non variano durante l'esecuzione del programma. In Pascal vengono elencate prima della riga delle variabili tramite la seguente sintassi:

...

CONST nomecostante=valore;

...

 

Esempio - Struttura base di un programma che pone pigreco come costante:

 

Program areacerchio;                                                        intestazione

const pigreco=3.14;                                                         riga delle costanti
var identificatore, ..., identificatore: tipo;                  
riga delle variabili
begin                                                                
riga che dichiara l'inizio del programma
 ...

 ...                                                                      corpo del programma

 ...

readln;
end.
                                                         istruzione che dichiara la fine del programma

 

Se in un programma non c'è bisogno di costanti la riga che le dichiara può anche essere omessa.

 


Torna su é


Le librerie

Le librerie sono un insieme di procedure e funzioni, racchiuse in un unico file, che potrebbero servire al programmatore per non ripetere un serie di istruzioni o per svolgere un'operazione che normalmente richiederebbe molto codice. La dichiarazione di una libreria non è obbligatoria, ma diventa indispensabile quando si vuole usare una procedure o una funzione presente nella libreria stessa.

In Pascal le librerie sono chiamate UNIT e vengono eseguite creando un file con estensione .tpu. Le principali librerie sono:

 

-CRT

-DOS

-GRAPH

-OVERLAY

-PRINTER

-SYSTEM

 

Per dichiarare un libreria, si scrive immediatamente sotto l'intestazione

...

USES nomelibreria;

...

 

Se le librerie sono più di una vengono separate da una virgola. Esempio:

 

Program esempio;

uses crt,graph;                              dichiarazione delle librerie CRT e GRAPH

var a,x,y:integer;

...

 

La procedura CLRSCR

Nella libreria CRT vi è una particolare procedura che nel codice sorgente di un programma può essere richiamata con CLRSCR (dall'ingl.: CLeaR SCReen = pulisci schermo). Questa procedura permette di eseguire un programma su schermo "pulito" da qualsiasi scritta relativa ad esecuzioni precedenti; è usata per avere una migliore visualizzazione di ciò che deve apparire a video. Il comando va inserito nel punto esatto del programma in cui si vuole che lo schermo sia "pulito" da ogni scritta (generalmente dopo il BEGIN) seguito da un punto e virgola obbligatorio.

Quindi siccome si vuole utilizzare una procedura della libreria CRT, per il suo corretto funzionamento, è obbligatoria la riga USES CRT; per dichiarare la libreria stessa. Esempio:

 

Program esempio;

uses CRT;                            dichiarazione della libreria CRT - è una riga  OBBLIGATORIA

begin

 CLRSCR;                                                                      punto e virgola OBBLIGATORIO

 writeln('Un saluto a tutti i programmatori!');

 readln;

end.

 

Questo programma visualizza sullo schermo pulito da ulteriori scritte o testi relative ad esecuzioni precedenti, il messaggio "Un saluto a tutti i programmatori!".

Il programma scritto senza il comando CLRSCR, avrebbe stampato a video lo stesso messaggio, ma con altri testi che lo precedevano (generalmente gli altri testi possono essere anche informazioni relative al compilatore; essi non influiscono sul programma corrente quindi anche se non si usa il comando CLRSCR il programma viene eseguito lo stesso, però non si ha una buona visualizzazione dei dati a video).

Se CLRSCR fosse stato posto dopo la riga writeln in questo modo:

 

Program esempio;

uses CRT;

begin

 writeln('Un saluto a tutti i programmatori!');

 CLRSCR;

 readln;

end.

 

il compilatore prima avrebbe stampato a video il messaggio "Un saluto a tutti i programmatori!" e poi avrebbe pulito lo schermo; di conseguenza non avrebbe visualizzato niente.

Quindi è importante determinare il punto esatto in cui inserire il comando CLRSCR.

 


Torna su é


Il corpo del programma

Il corpo del programma è la parte del programma stesso che contiene le tutte le istruzioni necessarie al funzionamento dell'algoritmo. Esso è compreso tra le righe BEGIN (dall'ingl.: inizio) e END (dall'ingl.: fine). In ogni programma possono anche esserci più BEGIN "chiusi" da un relativi END (questi casi saranno esaminati nei paragrafi successivi), infatti il numero dei BEGIN deve sempre corrispondere al numero degli END altrimenti al momento della compilazione si visualizzerà un messaggio di errore. Esempi:

 

Program n1;

begin

 write('CIAO');

 readln;

end.

 

Program n2;

begin

 write('CIAO');

 readln;                                  <-- ERRORE

 

Il programma n1 non fa altro che stampare a video, cioè scrivere sullo schermo, la scritta CIAO. La riga delle variabili (var ...) è stata omessa, in quanto non è serve alcuna variabile. Il corpo del programma è contenuto tra BEGIN ed END ed è costituito dalla sola riga: WRITE('CAIO');.

Se il programma fosse stato scritto senza la riga end. (come l'esempio n2) all'esecuzione si sarebbe visualizzato un messaggio di errore, in quanto il numero dei BEGIN (1) non corrisponde col numero degli END (0).

 

I commenti spiegano il funzionamento di un programma. Per inserire un commento all'interno di un programma si può usare una delle 2 seguenti sintassi:

 

(*tra parentesi tonde e asterischi*)

{tra parentesi graffe}

 

Esempio (con il programma precedente):

 

Program esempio;

begin

(*inizio del programma*)

 write('CIAO');              {riga che stampa CIAO}

 readln;

end.

{fine del programma}

 

Il compilatore eseguirà questo programma non leggendo le righe di commento, quindi i commenti non servono ai fini del linguaggio macchina, ma sono solo un aiuto al programmatore per comprendere meglio il codice sorgente, specialmente quando questo è costituito da numerose righe.

 


Torna su é


L'istruzione WRITE

Le istruzioni permettono al compilatore di eseguire determinate operazioni. Il linguaggio Pascal mette a disposizione del programmatore molteplici istruzioni per creare un programma. Una di queste è l'istruzione WRITE (dall'ingl.: scrivi), che è la più usata per comunicare con l'utente. Quest'istruzione permette di stampare a video, cioè di scrivere sullo schermo, qualsiasi scritta indicata fra gli apici (apostrofi). La sua sintassi è:

...

WRITE('qui può essere inserito qualsiasi testo da stampare a video');

...

 

Per esempio, se si vuole creare un programma che stampi a video la scritta "CIAO io sono un terrestre", si dovrà scrivere il seguente codice:

 

Program esempio;

begin

 write('CIAO io sono un terreste');

 readln;

end.

 

Gli apici indicano l'inizio e la fine del testo da stampare a video. Se il testo tra gli apici contiene degli apostrofi (cioè altri apici), al momento dell'esecuzione verrà visualizzato un messaggio di errore, perché il compilatore non "capisce" dove è l'inizio e la fine del testo. Per rimediare a questo inconveniente, laddove c'è l'apostrofo, si usa il doppio apice (''). Ad esempio se si vuole stampare a video la scritta "Sull'isola che non c'è non c'è nessuno" il programma sarà (in rosso ho segnato i doppi apici):

 

Program esempio;

begin

 write('Sull''isola che non c''è non c''è nessuno');

 readln;

end.

 

Per stampare a video una variabile gli apici non si mettono, seguendo questa sintassi:

...

WRITE(nomedellavariabile);

...

 

Se di vuole visualizzare una variabile che è un numero reale l'istruzione WRITE stamperà a video la variabile in forma esponenziale; quindi si deve in qualche modo formattare l'output, cioè dare una forma più leggibile all'output stesso, specificando nell'istruzione WRITE il numero delle cifre decimali da visualizzare. Sintassi:

...

WRITE(nomevariabile:0:numerocifredecimali);

...

 

Esempio:

...

a:=13.567;

b:=5465.6868;

WRITE(a:0:2);

WRITE(b:0:1);

...

 

La prima istruzione WRITE stamperà a video il numero a (13.567) arrotondato a 2 cifre decimali: 13.57. La seconda istruzione WRITE, invece, stamperà a video il numero b (5465.6868) arrotondato a 1 cifra decimale: 5465.7.

 

Per stampare a video una variabile e un testo nella stessa istruzione WRITE, la sintassi è la seguente:

...

WRITE('Testo ',nomedellavariabile);

...

 

oppure:

 

...

WRITE(nomedellavariabile,'Testo ');

...

 

Esempio riassuntivo:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Program somma;

uses CRT;

var a:integer;

       b,c:real;
begin

 clrscr;

 a:=3;

 write(a);

 b:=4.671;

 write('  ',b:0:2);

 c:=a+b;
 write(' Somma=',c:0:3);

 readln;
end.

 

N° di riga

Esecuzione

6

7

8

9

10

11

12

Richiama la procedura di pulitura dello schermo.

Assegna 3 alla variabile a.

Visualizza il valore di a.

Assegna 4.671 alla variabile b.

Visualizza due spazi e il valore di b arrotondato a 2 cifre decimali.

Assegna la somma a+b alla variabile c.

Visualizza la scritta "SOMMA=" e il valore della variabile c arrotondato a 3 cifre decimali.

 


Torna su é


L'istruzione READ

Un altra istruzione fondamentale per scrivere un programma in Pascal è READ (dall'ingl.: leggi). Mentre WRITE si occupa di comunicare con l'utente (il quale deve inserire o deve avere in output dei dati), READ serve per leggere i dati inseriti dall'utente assegnandoli alle variabili indicate. Sintassi:

...

READ(nomevariabile);

...

 

Esempio:

 

Program esempio;

var a:integer;

begin

 write('Inserire un numero intero ');

 read(a);

 readln;

end.

 

Nell'esempio l'istruzione WRITE si occupa di comunicare all'utente che deve inserire un numero intero, tramite il messaggio: Inserire un numero intero.

L'istruzione READ, invece, attende l'inserimento del numero (da tastiera) e assegna il suo valore alla variabile a (precedentemente dichiarata nella riga delle variabili var a:integer).

 

L'istruzione READ usata senza parametri serve per aspettare che si prema un tasto per poi passare all'istruzione successiva. Sintassi:

...

READ;

...

 

Il compilatore, infatti, giunto alla riga "READ;" aspetta che sia inserito un valore da tastiera, ma poi non avendo la variabile di destinazione in cui salvare il valore, passa all'operazione successiva.

 

Quando si devono inserire più dati si può ripetere l'istruzione READ per ogni dato:

...

write('Inserire il primo numero ');

read(a);

write('Inserire il secondo numero ');

read(b);

write('Inserire il terzo numero');

read(c);

...

 

Per velocizzare quest'operazione e diminuire anche la lunghezza del codice sorgente, si può usare READ una sola volta:

...

write('Inserire il primo, il secondo e il terzo numero ');

read(a,b,c);

...

 

Si usa un solo READ separando con una virgola le tre variabili da leggere. Naturalmente, al momento dell'esecuzione, ogni numero deve essere seguito da un INVIO per essere letto. Al terzo numero inserito, e quindi al terzo INVIO, l'istruzione READ termina il suo compito e il compilatore passa ad eseguire le righe successive.

 


Torna su é


Le istruzioni WRITELN e READLN

Le istruzioni WRITELN e READLN (LN deriva dall'inglese line: linea) permettono di svolgere un'operazione su una nuova riga, cioè spostano il cursore all'inizio della riga successiva ed eseguono l'operazione. Le sintassi sono:

...

WRITELN('testo da stampare');

...

READLN(nomevariabile);

...

 

L'istruzione WRITELN permette di scrivere da capo il testo inserito negli apici. Quest'ultima usata senza testo tra apici, in questo modo:

...

WRITELN;

...

permette di inserire un'interlinea vuota.

 

L'istruzione READLN permette la lettura di una variabile in una nuova riga.

 

 

Esempio riassuntivo:

 

Program somma;

var a,b,c:integer;
begin

 a:=3;                                     {assegna 3 alla variabile a}

 write(a);                               {stampa a video il valore di a (3)}

 b:=4;                                     {assegna 4 alla variabile b}

 write(' ',b);                           {stampa a video uno spazio e il valore di b (4)}

 c:=a+b;                                 {assegna la somma di a e b alla variabile c}
 write(' Somma=',c);           
 {stampa a video uno spazio il testo
"Somma="}

 readln;                                  { e il valore di c (7)}
end.

 

Questo programma stampa a video:

 

3 4 Somma=7
 

Come si vede il risultato è poco leggibile. Utilizzando WRITELN e modificando leggermente le stringhe fra gli apici si avrà:

 

Program somma;

var a,b,c:integer;
begin

 a:=3;                                     {assegna 3 alla variabile a}

 writeln('a = ',a);                   {stampa a video il valore di a (3)}

 b:=4;                                     {assegna 4 alla variabile b}

 writeln('b = ',b);                   {stampa a video uno spazio e il valore di b (4)}

 c:=a+b;                                 {assegna la somma di a e b alla variabile c}

 writeln;                                 {riga vuota}
 write
ln('Somma = ',c);         {stampa a video uno spazio il testo
"Somma = "}

 readln;                                  { e il valore di c (7)}
end.

 

Questo nuovo programma stamperà a video, in modo più leggibile:

 

a = 3
b = 4


Somma = 7

 


Torna su é


Le strutture di controllo

Un algoritmo è un insieme finito di istruzioni che servono a specificare una serie di operazioni con le quali è possibile risolvere un problema. Un programma in Pascal quindi, come in qualsiasi altro linguaggio di programmazione, rappresenta un algoritmo. Secondo il teorema di Böhm-Jacopini (del 1966): "Un qualsiasi algoritmo può essere espresso usando esclusivamente le strutture di sequenza, di selezione e di iterazione". Questi 3 modelli si chiamano strutture di controllo.

 

La struttura dei programmi finora esaminati è la sequenza, cioè le istruzioni vengono eseguite una dopo l'altra:

 

Program esempio;

...

begin

 ...

 ISTRUZIONE1;

 ISTRUZIONE2;

 ISTRUZIONE3;

 ...

 readln;

end.

 

 

La struttura di selezione, o alternativa, in Pascal viene rappresentata secondo lo schema:

...

IF condizione THEN istruzione1

                     ELSE istruzione2;

...

 

Se la condizione è vera viene eseguita l'istruzione1, altrimenti (cioè se la condizione è falsa) viene eseguita l'istruzione2.

 

 

La struttura di iterazione, o di ripetizione, consiste in un ciclo con una condizione alla fine (iterazione postcondizionale) o all'inizio (iterazione precondizionale).

 

Se il ciclo è postcondizionale la codifica in Pascal è:

...

REPEAT

 ...

 istruzioni;

 ...

UNTIL condizione;

...

 

Le istruzioni, o l'istruzione, tra Repeat e Until verranno ripetute fino a quando la condizione diventa vera; quindi la struttura cicla (cioè si ripete) per falso.

 

Se il ciclo è precondizionale la codifica in Pascal è:

...

WHILE condizione DO

 BEGIN

   ...

   istruzioni;

   ...

 END;

...

 

Le istruzioni tra Begin ed End verranno ripetute fino a quando la condizione diventa falsa; quindi la struttura cicla (cioè si ripete) per vero. Se c'è una sola istruzione da ripetere, il BEGIN e l'END possono essere omessi.

 

 

Esiste una struttura di ripetizione senza una vera e propria condizione, chiamata ripetizione con contatore o enumerativa. La sua codifica in Pascal è:

...

FOR contatore:=valoreiniziale TO valorefinale DO

  BEGIN

   ...

   istruzioni;

   ...

  END;

...

 

Le istruzioni tra Begin ed End verranno ripetute tante volte quante ne occorrono per portare il valore del contatore dal valore iniziale al valore finale (ES. FOR C:=1 TO 15 DO, per portare il contatore C da 1 a 15 c'è bisogno di 15 passaggi, quindi le operazioni verranno eseguite 15 volte).  Se c'è una sola istruzione da ripetere, il BEGIN e l'END possono essere omessi.

 


Torna su é


La struttura di selezione con IF...THEN...ELSE

La struttura di selezione, o alternativa, in Pascal viene codificata con le istruzioni IF...THEN...ELSE (dall'ingl.: se...allora...altrimenti):

...

IF condizione THEN istruzione1                   <-- senza punto e virgola

                     ELSE istruzione2;

...

 

Cioè: se la condizione espressa dopo IF sarà vera, il programma eseguirà l'istruzione1, altrimenti (cioè se la condizione sarà falsa) eseguirà l'istruzione2 introdotta da ELSE. Se il programma eseguirà l'istruzione1, automaticamente l'istruzione2 non verrà eseguita, e viceversa. E' molto importante non mettere il punto e virgola prima della riga dell'ELSE, altrimenti al momento dell'esecuzione si visualizzerà un messaggio di errore.

Quando non si deve eseguire alcuna operazione nel caso in cui la condizione risulti falsa, la riga dell'ELSE può essere esclusa:

...

IF condizione THEN istruzione;                   <-- con punto e virgola

...

Cioè: se la condizione espressa dopo IF sarà vera, il programma eseguirà l'istruzione1, altrimenti (cioè se la condizione sarà falsa) passerà alle istruzioni successive.

 

 

Esempio di programma con l'istruzione IF...THEN...ELSE:

 

Program esempio;
var a,b:integer;
begin
 writeln('Scrivi due numeri');
 readln(a,b);
 if a>b then writeln('Il primo numero è maggiore del secondo')
            else
writeln('Il secondo numero è maggiore del primo');

 readln;
end.

 

Questo programma, richiede l'inserimento di 2 numeri; poi verifica la condizione (a>b); se essa è vera (cioè se a è maggiore di b) stampa a video "Il primo numero è maggiore del secondo", altrimenti, se è falsa (cioè se a non è maggiore di b) stampa a video "Il secondo numero è maggiore del primo".

Se i numeri inseriti sono uguali verrà stampato a video "Secondo numero maggiore del primo". Questo inaspettato comportamento del compilatore è normale; infatti, se la condizione è falsa il compilatore esegue l'istruzione introdotta da ELSE senza verificare un'ulteriore condizione (che in questo caso sarebbe a=b). Ad esempio, se i 2 numeri fossero 33 e 33, il compilatore verificherebbe la condizione a>b, che in questo è falsa perché 33 non è maggiore di 33, allora eseguirebbe l'istruzione introdotta da ELSE stampando a video "Il secondo numero è maggiore del primo".

Il programma completo sarebbe:

 

Program esempio;
var a,b:integer;
begin
 writeln('Scrivi due numeri');
 readln(a,b);
 if a>b then writeln('Il primo numero è maggiore del secondo')
            else

                 if a=b then writeln('I numeri sono uguali')         {ulteriore condizione}

                            else writeln('Il secondo numero è maggiore del primo');

 readln;
end.

 

 

Esempio con variabile di tipo STRING:

 

Program esempio;
var a:string;
begin
 writeln('Sei maschio? (si/no) ');
 readln(a);
 if a='si' then writeln('INDIVIDUO MASCHILE')
              
else writeln('INDIVIDUO FEMMINILE');
readln;
end.

 

Una variabile di tipo STRING è testuale. In questo caso lo è la variabile a.

Questo programma, dopo aver letto la variabile a (inserita da tastiera rispondendo alla domanda "Sei maschio?" con si o qualche altra scritta), verifica la condizione (a='si'); se essa è vera (cioè se a è uguale a si con le lettere minuscole), stampa a video "INDIVIDUO MASCHILE", altrimenti, se è falsa (cioè se a è uguale a qualsiasi altra scritta), stampa a video "INDIVIDUO FEMMINILE".

 

Quando nell'istruzione IF...THEN...ELSE le parole THEN e ELSE introducono più operazioni, queste vengono racchiuse tra un altro BEGIN e un altro END; in modo da organizzare meglio l'esecuzione del programma; a volte, infatti, il malfunzionamento del programma dipende proprio da questo fattore. Esempio:

 

Program esempio;
var a,b,c:integer;
begin
 writeln('Scrivi due numeri');
 readln(a,b);
 if a=b then                                                                       <-- senza punto e virgola
            
begin                                                                    <-- senza punto e virgola
              c:=a*b;
              writeln('Numeri UGUALI - Prodotto=',c);
            
end                                                            <-- senza punto, né punto e virgola
           
else
            
begin                                                                     <-- senza punto e virgola
              c:=a+b;
              writeln('Numeri DIVERSI - Somma=',c);
            
end;
 readln;
end.

 

Questo programma dopo aver letto le due variabili inserite da tastiera (a e b), verifica la condizione (a=b); se essa è vera esegue la moltiplicazione dei numeri (c:=a*b) e stampa a video il messaggio "Numeri UGUALI - Prodotto=prodottodeinumeri"; se essa è falsa esegue la somma dei numeri e stampa a video il messaggio "Numeri DIVERSI - Somma=sommadeinumeri".

Il primo END (10ª riga) non deve finire né con un punto (perché non è lì che termina il programma), né con un punto e virgola, perché dopo di esso vi è l'istruzione ELSE che non deve essere mai preceduta da un punto e virgola.

 

L'istruzione IF...THEN...ELSE permette solo una doppia selezione, cioè solo 2 scelte: vero o falso. Per la scelta multipla si usa la struttura CASE...OF spiegata di seguito.

 


Torna su é


Gli operatori logici

Nel linguaggio Pascal le condizioni che vengono specificate possono essere raggruppate per congiunzione o disgiunzione, oppure possono essere negate (considerate al contrario di quello che effettivamente sono). In pratica il linguaggio Pascal permette di specificare più condizioni correlate tra loro tramite delle parole riservate che sono:

 

OPERATORE

DESCRIZIONE

AND

indica l'operazione di congiunzione (e):

i confronti devono essere entrambi veri affinché la condizione sia vera.

OR

indica l'operazione di disgiunzione (o):

uno dei due confronti deve essere vero affinché la condizione sia vera.

NOT

indica la negazione (non):

se il confronto è vero tutta la condizione risulterà falsa e viceversa.

 

Esempio1: creare un programma che verifichi se un numero inserito da tastiera è compreso tra 100 e 1000, tramite l'uso dell'operatore logico AND.

 

Program esempio1;

uses CRT;

var a:integer;

begin

 clrscr;

 write('Inserisci un numero: ');

 readln(a);

 if (a>=100) AND (a<=1000) then writeln('Il numero è compreso tra 100 e 1000')

                                               else writeln('Il numero non è compreso tra 100 e 1000');

 readln;

end.

 

Questo programma dopo aver ricevuto da tastiera un numero (a) verifica

se è maggiore o uguale a 100 (a>=100)   E    se è minore o uguale a 1000 (a<=1000).

Se entrambi i confronti risultano veri allora tutta la condizione sarà vera e si visualizzerà il messaggio "Il numero è compreso tra 100 e 1000".

Se uno solo dei due confronti o entrambi risultano falsi tutta la condizione sarà falsa e si visualizzerà il messaggio "Il numero non è compreso tra 100 e 1000".

Se l'utente inserisce ad esempio il numero 1888, il programma verifica il primo confronto a>=100 che risulta vero, poi verifica il secondo confronto a<=1000 che risulta falso; come si nota uno dei due confronti è falso e quindi tutta la condizione risulterà falsa, di conseguenza si visualizzerà il messaggio "Il numero non è compreso tra 100 e 1000".

 

Esempio2: creare un programma che verifichi se un numero inserito da tastiera è uguale a 126 oppure a 2593, tramite l'uso dell'operatore logico OR.

 

Program esempio2;

uses CRT;

var a:integer;

begin

 clrscr;

 write('Inserisci un numero: ');

 readln(a);

 if (a=126) OR (a=2593) then writeln('Il numero inserito è 126 oppure 2593')

                                        else writeln('Il numero inserito non è nè 126 nè 2593');

 readln;

end.

 

Questo programma dopo aver ricevuto da tastiera un numero (a) verifica

se è uguale a 126 (a=126)   O   se è uguale a 2593 (a=2593).

Se uno dei confronti risulta vero allora tutta la condizione sarà vera e si visualizzerà il messaggio "Il numero inserito è 126 oppure 2593".

Se entrambi i confronti risultano falsi tutta la condizione sarà falsa e si visualizzerà il messaggio "Il numero inserito non è nè 126 nè 2593".

Se l'utente inserisce ad esempio il numero 126, il programma verifica il primo confronto a=126 che risulta vero, poi verifica il secondo confronto a=2593 che risulta falso; come si nota uno dei due confronti è vero e quindi tutta la condizione risulterà vera, di conseguenza si visualizzerà il messaggio "Il numero inserito è 126 oppure 2593".

 

Esempio3: creare un programma che verifichi se un numero inserito da tastiera è uguale a 999, tramite l'uso dell'operatore logico NOT.

 

Program esempio3;

uses CRT;

var a:integer;

begin

 clrscr;

 write('Inserisci un numero: ');

 readln(a);

 if NOT(a<>999) then writeln('Il numero inserito è 999')

                           else writeln('Il numero inserito non è 999');

 readln;

end.

 

Questo programma dopo aver ricevuto da tastiera un numero (a) verifica

se NON è diverso da 999 (NOT(a<>999)).

Se a NON è diverso da 999 significa che è uguale a 999, allora si visualizzerà il messaggio "Il numero inserito è 999".

Se la condizione è ancora negativa, cioè se a NON (NON è diverso da 999) significa che è effettivamente diverso da 999, allora si visualizzerà il messaggio "Il numero inserito non è 999".

Si tenga presente che l'operatore NOT viene usato generalmente con le variabili booleane in programmi più complessi.

 

Esiste anche un quarto operatore logico che raramente viene usato: XOR (disgiunzione esclusiva). Esempio:

...

 if (a>10) XOR (b>10) then istruzione1

                                    else istruzione2;

...

 

Tutta la condizione ((a>10) XOR (b>10)) risulterà vera se i confronti saranno diversi tra di loro (cioè se il primo sarà vero e il secondo falso, oppure se il primo sarà falso e il secondo vero); se entrambi i confronti risulteranno uguali tutta la condizione sarà falsa (cioè se entrambi saranno veri o entrambi saranno falsi).

 

In conclusione, le tabelle seguente descrivono il funzionamento dei quattro operatori esaminati considerando che z e k siano due confronti:

 

z

k

z AND k

V

V

F

F

V

F

V

F

V

F

F

F

z

k

z OR k

V

V

F

F

V

F

V

F

V

V

V

F

z

NOT z

V

F

F

V

z

k

z XOR k

V

V

F

F

V

F

V

F

F

V

V

F

 


Torna su é


La struttura di selezione con CASE...OF

La struttura di selezione con CASE...OF (dall'ingl.: caso...di) permette di effettuare una selezione multipla. La sua sintassi è:

...

CASE variabile OF                            <-- senza punto e virgola

 verifica1: istruzione1;

 verifica2: istruzione2;

 ...

 else operazioneN;

end;

...

 

Cioè: nel caso in cui la variabile (...CASE variabile OF...) sia uguale alla verifica1, il compilatore esegue l'istruzione1; nel caso in cui la variabile sia uguale alla verifica2, il compilatore esegue l'istruzione2, e così via, fino all'ultima verifica. Se nessuna delle condizioni è verificata, il compilatore esegue l'operazioneN introdotta da ELSE (dall'ingl.: altrimenti). Se si verifica una condizione, automaticamente le altre non verranno verificate.

L'istruzione END; è obbligatoria anche se non esiste un BEGIN vero e proprio. La prima riga della struttura non deve terminare con il punto e virgola.

 

Esempio di programma con CASE...OF:

 

Program esempio;
var n:integer;
begin
 writeln('Scrivi un numero');
 readln(n);
 
case n of

  0:writeln('ZERO');
  1:writeln('UNO');
  2:writeln('DUE');
  3:writeln('TRE');

  4:writeln('QUATTRO');
 
else writeln('Errore');
 
end;

 readln;
end.

 

Questo programma stampa a video il messaggio "Scrivi un numero" e dopo aver letto il numero (inserito da tastiera), lo assegna alla variabile n. Poi verifica se la variabile n (cioè il numero), è uguale a 0, 1, 2, 3 o 4; se è uguale a 0 stampa a video la scritta "ZERO"; se è uguale a 1 stampa a video la scritta "UNO"; se è uguale a 2 stampa a video la scritta "DUE"; se è uguale a 3 stampa e video la scritta "TRE" e se è uguale a 4 stampa a video la scritta "QUATTRO". Se il numero inserito non è né 0, 1, né 2, né 3 e né 4, stampa a video ciò che è introdotto da ELSE, cioè la scritta "Errore".

Scrivere questo programma con IF...THEN...ELSE sarebbe stato più complesso:

 

Program esempio;
var n:integer;
begin
 writeln('Scrivi un numero');
 readln(n);
 If n=0 then writeln('ZERO');
 If n=1 then writeln('UNO');
 If n=2 then writeln('DUE');
 If n=3 then writeln('TRE');
 If n=4 then writeln('QUATTRO');
 If (n<>0) and (n<>1) and (n<>2) and (n<>3) and (n<>4) then writeln('ERRORE');
 readln;
end.

 

 

Quando le istruzioni da eseguire dopo le verifiche sono più di una,  si crea un sottoprogramma con un altro BEGIN e un altro END, con la seguente sintassi:

 

...

CASE variabile OF                                              <-- senza punto e virgola

verifica1:

    begin                                                              <-- senza punto e virgola

      ...

     istruzioni;

     ...

    end;

verifica2:

    begin                                                              <-- senza punto e virgola

      ...

     istruzioni;

      ...

    end;

...

else operazioneN;

end;

...

 

Esempio di programma con più operazioni da eseguire dopo le verifiche, usando l'istruzione CASE...OF:

 

Program esempio;

uses CRT;
var a,b,c,d,e:integer;
begin

 clrscr;
 writeln('1 - somma');
 writeln('2 - differenza');
 writeln;
 writeln('Che operazione devi svolgere? (1/2)');
 readln(a);
 case a of
  1:
   begin
    writeln('Scrivi i due numeri');
    readln(b,c);

    writeln;
    writeln(b+c);
   
end;
  2:
   begin
    writeln('Scrivi i due numeri');
    readln(d,e);
    writeln;
    writeln(d-e);
   end;
  else writeln('NUMERO NON VALIDO');
 end;
 readln;
end.
 

Questo programma, prima di tutto "pulisce lo schermo" (CLRSCR), poi stampa a video il messaggio:

 

1 - somma
2 - differenza

 

Che operazione devi svolgere? (1/2)

 

Avvisando l'utente che potrà inserire soltanto i numeri 1 o 2 (1 per svolgere la somma, 2 per svolgere la differenza). Ricevuto il numero inserito da tastiera (readln(a);), passa alle verifiche.

Se il numero è uguale 1, stampa a video la scritta "Scrivi i due numeri'", legge i due numeri inseriti (readln(b,c);), lascia una riga vuota (writeln;) e stampa a video la loro somma (writeln(b+c);).

Se il numero è uguale 2, stampa a video la scritta "Scrivi i due numeri'", legge i due numeri inseriti (readln(d,e);), lascia una riga vuota (writeln;) e stampa a video la loro differenza(writeln(d-e);).

Infine se il numero inserito non è né 1, né 2, stampa a video ciò che è introdotto da ELSE, cioè la scritta "NUMERO NON VALIDO".

_____________________________

 

Con la struttura CASE...OF potrebbero sorgere dei problemi quando le verifiche rappresentano degli intervalli; questi ultimi si rappresentano con questa sintassi:

...

CASE variabile OF                                                     <-- senza punto e virgola

 estremosinitro1 .. estremodestro1: istruzione1;

 estremosinitro2 .. estremodestro2: istruzione2;

 ...

 else operazioneN;

end;

...

 

Esempio: creare un programma che, inserito un numero da tastiera, verifichi e stampi a video se questo si trova tra 0 e 50, tra 51 e 100, tra 101 e 150 oppure tra 151 e 200.

 

Program esempioERRATO;

uses CRT;

var a:integer;

begin

 clrscr;

 write('Inserisci un numero: ');

 readln(a);

 CASE a OF

  <50:writeln('Numero compreso tra 0 e 50');

  >50 and <100:writeln('Numero compreso tra 51 e 100');

  >100 and <150:writeln('Numero compreso tra 101 e 150');

  >150 and <200:writeln('Numero compreso tra 151 e 200');

  else writeln('Numero maggiore di 200');

 end;

 readln;

end.

 

Questo programma esempio è errato. In rosso sono segnati gli errori, cioè l'errata impostazione degli intervalli.

Il programma corretto, riscritto secondo la sintassi esatta è questo:

 

Program esempiointervalli;

uses CRT;

var a:integer;

begin

 clrscr;

 write('Inserisci un numero: ');

 readln(a);

 CASE a OF

  0..50:writeln('Numero compreso tra 0 e 50');

  51..100:writeln('Numero compreso tra 51 e 100');

  101..150:writeln('Numero compreso tra 101 e 150');

  151..200:writeln('Numero compreso tra 151 e 200');

  else writeln('Numero maggiore di 200');

 end;

 readln;

end.

 


Torna su é


Il ciclo REPEAT...UNTIL

La struttura di iterazione, o di ripetizione, con ciclo postcondizionale, in Pascal viene codificata con le istruzioni REPEAT...UNTIL (dall'ingl.: ripeti...fino) che ha la seguente sintassi:

...

REPEAT                                                          <-- senza punto e virgola

  ...

  istruzioni;

  ...

UNTIL condizione;

...

 

Le istruzioni, o l'istruzione, tra Repeat e Until verranno ripetute fino a quando la condizione diventa vera; quindi la struttura cicla (cioè si ripete) per falso.

Quando la condizione sarà vera, il compilatore uscirà dal ciclo e passerà ad eseguire le operazioni successive (cioè quelle dopo la riga "UNTIL condizione;").

Se la condizione indicata dopo UNTIL fosse sempre falsa il compilatore non uscirebbe mai dal ciclo e, al momento dell'esecuzione, provocherebbe una ripetizione all'infinito delle istruzioni comprese tra repeat e until. In questi casi si dice che il computer si blocca o si impianta. Per risolvere questo problema si deve spegnere la macchina o chiudere il compilatore e riscrivere il programma da capo.

Visto questo inconveniente, se il programma scritto è di una certa lunghezza e complessità, è bene salvare il codice sorgente prima di eseguirlo.

 

Esempio di programma che si impianta:

 

 

Esempio di programma scritto usando il ciclo REPEAT...UNTIL:

 

Program esempio;
var t,n:integer;
begin
 writeln('Dopo aver inserito un numero:');
 writeln('- Premi INVIO per inserirne un''altro');
 writeln('- Premi 0 per terminare');
 writeln;
 t:=0;
 repeat                                                                          <-- senza punto e virgola
   Writeln('Inserisci un numero');                                      
 operazione
   readln(n);                                                                     
      operazione
   t:=t+n;                                                                               
operazione
 until n=0;                                                                      <-- condizione

 writeln('Somma totale = ',t);
 readln;
end.


Questo programma stampa a video i messaggi:

 

Dopo aver inserito un numero:

- Premi INVIO per inserirne un'altro

- Premi 0 per terminare

 

Inserisci un numero

 

Prima di stampare a video "Inserisci un numero", il compilatore azzera la variabile t. Quando il compilatore stampa a video il messaggio "Inserisci un numero", entra nel ciclo.

Dopo aver letto il numero inserito da tastiera ed averlo immagazzinato nella variabile n (readln(n);), il compilatore esegue la somma tra il numero inserito e la variabile t (che la prima volta è uguale a 0), assegnandola sempre alla variabile t; poi verifica la condizione specificata da Until n=0, la quale indica che fino a quando il numero inserito (n) sarà diverso da zero, si ripeteranno le operazioni comprese tra il REPEAT e l'UNTIL.

Se la condizione è falsa (cioè, se n è diverso da 0) il compilatore ritorna ad eseguire il programma dall'istruzione REPEAT (leggendo un altro numero e sommando lo stesso alla somma precedente, cioè a t).

Se la condizione è vera (cioè, se n è uguale a 0, in quanto l'utente ha deciso di "terminare" inserendo 0), esce dal ciclo ed esegue le istruzioni successive, cioè stampa a video "Somma totale = valoredellavariabilet", e termina l'esecuzione del programma.

La variabile t è detta variabile di accumulamento, perché serve ad accumulare la somma dei vari numeri man mano che si inseriscono.

 

Per altri programmi col ciclo REPEAT...UNTIL visita la pagina PROGRAMMI.

 


Torna su é


Il ciclo WHILE...DO

La struttura di iterazione, o di ripetizione, con ciclo precondizionale, in Pascal viene codificata con le istruzioni WHILE...DO (dall'ingl.: mentre...fai) che ha la seguente sintassi:

...

WHILE condizione DO                                <-- senza punto e virgola

   BEGIN                                                   <-- senza punto e virgola

     ...

     istruzioni;

     ...

   END;

...

 

Le istruzioni tra Begin ed End verranno ripetute fino a quando la condizione diventa falsa; quindi la struttura cicla (cioè si ripete) per vero. Se c'è una sola istruzione da ripetere, il BEGIN e l'END possono essere omessi.

Quando la condizione sarà falsa, il compilatore uscirà da ciclo e passerà ad eseguire le istruzioni successive (cioè quelle dopo la riga "END;").

 

Esempio di programma con WHILE...DO:

 

Program esempio;
var a,b:integer;
begin
 writeln('Scrivi due numeri');
 readln(a,b);
 
while a>b do                         <-- senza punto e virgola
 
begin                                               
riga di inizio delle operazioni da svolgere
   a:=a-10;                                         
operazioni
  end;                                                  riga finale delle operazioni da svolgere
 writeln('Numero finale ',a);
 readln;
end.

 

Questo programma stampa a video il messaggio "Scrivi due numeri" e dopo averli letti passa a verificare la condizione (a>b). Se la condizione sarà vera (cioè se il primo numero inserito è maggiore del secondo), eseguirà l'operazione stabilita (a:=a-10) assegnando ad a, cioè al numero maggiore, il decremento di quest'ultimo di 10 unità.

Terminata quest'operazione, il compilatore ritorna a verificare la condizione.

Il ciclo continua fino a quando la condizione si verifica vera; quando si verificherà falsa (cioè quando b, il secondo numero, diventerà maggiore di a), il compilatore uscirà dal ciclo ed eseguirà le operazioni successive, cioè stamperà a video il messaggio:

"Numero finale valoredellavariabilea", e terminerà l'esecuzione del programma.

 

Se la condizione indicata tra WHILE e DO fosse sempre vera il compilatore non uscirebbe mai dal ciclo e, al momento dell'esecuzione, provocherebbe una ripetizione all'infinito dell'operazione specificata tra il begin e l'end. In questi casi si dice che il computer si blocca o si impianta. Per risolvere questo problema si deve spegnere la macchina o chiudere il compilatore e riscrivere il programma da capo.

Visto questo inconveniente, se il programma scritto è di una certa lunghezza e complessità, è bene salvare il codice sorgente prima di eseguirlo.

 

Esempio di programma che si impianta:

 

Program esempio;
var t,n,c:integer;
begin
 c:=0;
 t:=0;
 
while c<3 do

  begin
   writeln('Inserisci un numero');
   readln(n);

   t:=t+n;

  end;

 writeln('Somma totale = ',t);
 readln;
end.

 

Questo programma si impianta e chiede all'infinito l'inserimento di un numero, perché la variabile specificata nella condizione (c) non viene mai aggiornata nel ciclo, ed essendo, quindi, sempre uguale a 0 (come specificato alla riga n° 4), fa sì che la condizione (c<3) sia sempre vera e il compilatore non esca mai dal ciclo.

 

Per altri programmi col ciclo WHILE...DO visita la pagina PROGRAMMI.

 


Torna su é


Il ciclo FOR...TO...DO

La struttura di ripetizione con contatore o enumerativa, in Pascal viene codificata con le istruzioni FOR...TO...DO (dall'ingl.: per...a...fai), che ha la seguente sintassi:

...

FOR contatore:=valoreiniziale TO valorefinale DO               <-- senza punto e virgola

  BEGIN                                                                          <-- senza punto e virgola

   ...

   istruzioni;

   ...

  END;

...

 

Le istruzioni tra Begin ed End verranno ripetute tante volte quante ne occorrono per portare il valore del contatore dal valore iniziale al valore finale (ES. FOR C:=1 TO 15 DO, per portare il contatore C da 1 a 15 c'è bisogno di 15 passaggi, quindi le operazioni verranno eseguite 15 volte).  Se c'è una sola istruzione da ripetere, il BEGIN e l'END possono essere omessi.

È molto importante non chiudere la prima riga del ciclo con il punto e virgola (;), altrimenti si interromperebbe il ciclo e il compilatore, al momento dell'esecuzione, visualizzerebbe un messaggio d'errore.

 

Esempio di programma con FOR...TO...DO:

 

Program esempio;
var a:integer;
begin

 for a:=1 to 20 do                                 <-- senza punto e virgola

  writeln(a);

 readln;
end.

Eseguendo questo programma il compilatore stamperà a video, uno sotto l'altro, i numeri da 1 a 20. Nella riga n° 4 il ciclo viene dichiarato, cioè la variabile a con il ciclo FOR...TO...DO assume ad ogni ripetizione i valori tra 1 e 20; quindi scrivendola di volta in volta assume 1, poi 2, poi 3 e così via fino a 20. L'istruzione WRITELN, contribuisce a scrivere tutti in numeri uno sotto l'altro.

Il programma può essere scritto anche nel seguente modo:

 

Program esempio;
var a,b,c:integer;
begin

 b:=1;

 c:=20;
 for a:=
b to c do                                     <-- senza punto e virgola
  writeln(a);

 readln;
end.

 

Quando si devono ripetere più di un'operazione si usano strutture simili alla seguente:

 

Program esempio;

uses CRT;
var a,b:integer;
begin

 clrscr;

 b:=0;
 for a:=1 to 5 do                                      <--
senza punto e virgola
 
begin

   writeln(a);
 
 b:=b+a;
  end;

 writeln('La somma dei numeri da 1 a 5 è ',b);

 readln;
end.

 

Questo programma esegue la somma dei numeri da 1 a 5, e li stampa a video uno sotto l'altro. Alla 5ª riga viene pulito lo schermo; alla 7ª riga viene dichiarato l'inizio del ciclo; alla 9ª e alla 10ª riga vengono eseguite le operazioni del ciclo: stampa a video del numero (writeln(a);) e somma dei vari numeri (b:=b+a;), in questo caso b è una variabile di accumulamento. Dopo la ripetizione per 5 volte, il compilatore esce dal ciclo ed esegue l'istruzione alla 12ª riga (writeln('La somma dei numeri da 1 a 5 è ',b);), e aspetta la pressione di un tasto (readln;) per poi terminare.

 

 

E' anche possibile far procedere il ciclo FOR...TO...DO all'inverso, cioè dal valore finale al valore iniziale. La sintassi è la seguente:

...

FOR contatore:=valorefinale DOWNTO valoreiniziale DO            <-- senza punto e virgola

  BEGIN                                                                                 <-- senza punto e virgola

   ...

   istruzioni;

   ...

  END;

...

 

Il primo esempio col ciclo FOR...TO...DO può essere così riscritto:

 

Program esempio;
var a:integer;
begin

 for a:=20 downto 1 do                              <-- senza punto e virgola

  writeln(a);

 readln;
end.

 

Il programma precedente stampava a video, uno sotto l'altro, i numeri da 1 a 20.

Adesso questo programma col ciclo FOR...DOWNTO...DO stampa a video, uno sotto l'altro, i numeri da 20 a 1.

 

Per altri programmi col ciclo FOR...TO...DO visita la pagina PROGRAMMI.

 


Torna su é


Grafica in ambiente TURBO Pascal 3.0

In TURBO Pascal 3.0 esistono 2 diverse modalità per l'uso dello schermo: modalità testuale e modalità grafica.

 

Per la modalità testuale lo schermo è suddiviso in 80x25 pixel (il pixel è la minima unità grafica di uno schermo; dall'ingl.: PIcture X ELement). In questa risoluzione grafica vengono visualizzati i caratteri. La posizione del cursore (come ogni pixel) è individuata da due coordinate: ascissa (x) e ordinata (y), con origine degli assi posto in alto a sinistra nello schermo. Per spostare il cursore  nella posizione desiderata si usa la seguente istruzione:

...

GOTOXY(ascissa,ordinata);

...

 

Ad esempio per scrivere il messaggio "CIAO", nel punto dello schermo di ascissa 60 e ordinata 5, il programma da scrivere è il seguente:

 

Program esempio;
begin
 gotoxy(60,5);

 writeln('CIAO');

 readln;
end.

 

La riga delle variabili è assente perché non c'è bisogno di alcuna variabile.

 

 

Per la modalità grafica lo schermo può essere utilizzato a bassa o ad alta risoluzione.

A bassa risoluzione lo schermo è suddiviso in 320x200 pixel, ognuno individuato da due coordinate, x e y di tipo INTEGER.

Per impostare la bassa risoluzione si usa il comando GRAPHCOLORMODE (dall'ingl: modalità grafica a colori).

 

Per stampare a video un punto, si usa l'istruzione:

...

PLOT(x,y,c)

...

 

Dove x è l'ascissa, y è l'ordinata e c è il colore del punto. Il colore può assumere i seguenti valori:

 

0 = colore corrente dello SFONDO

1 = VERDE

2 = ROSSO

3 = ARANCIONE

 

Esempio - Programma che stampa a video un punto di coordinate 40 (ascissa) e 23 (ordinata), di colore arancione, con l'istruzione PLOT:

 

Program esempio;
begin
 graphcolormode;            {impostazione della modalità grafica a BASSA risoluzione}

 plot(40,23,3);                                  {riga dell'istruzione PLOT}

 readln;
end.

 

La riga delle variabili è assente perché non c'è bisogno di alcuna variabile.

 

Per stampare a video un segmento, si usa l'istruzione:

...

DRAW(x1,y1,x2,y2,c);

...

 

Dove x1 è l'ascissa del primo punto, y1 è l'ordinata del primo punto, x2 è l'ascissa del secondo punto, y2 è l'ordinata del secondo punto e c è il colore del segmento, che può assumere i valori sopradescritti.

L'istruzione DRAW non fa altro che trovare il primo e il secondo punto (tramite le coordinate scritte tra le parentesi dell'istruzione) e unirli con altri punti intermedi agli stessi, creando in questo modo un segmento.

 

Esempio - Programma che stampa a video un segmento che va dal punto di ascissa 10 e ordinata 19, al punto di ascissa 80 e ordinata 100, di colore rosso, con l'istruzione DRAW:

 

Program esempio;
begin
 graphcolormode;            {impostazione della modalità grafica a BASSA risoluzione}
 draw(10,19,80,100,2);                      {riga dell'istruzione DRAW}

 readln;
end.


La riga delle variabili è assente perché non c'è bisogno di alcuna variabile.

 

Per stampare a video un segmento, orizzontale o verticale, si può anche utilizzare il ciclo FOR...TO...DO insieme all'istruzione PLOT, in questo modo:

...

FOR x o y:=valoreiniziale TO valorefinale DO                        senza punto e virgola

PLOT(x,y,c);

...

 

Se la variabile del ciclo FOR...TO...DO è x nell'istruzione PLOT si dovrà scrivere:

PLOT(x,numero,c);

dove numero di ordinata è un numero scelto dall'utente e la linea verrà orizzontale.

 

Se la variabile del ciclo FOR...TO...DO è y nell'istruzione PLOT si dovrà scrivere:

PLOT(numero,y,c);

dove numero di ascissa è un numero scelto dall'utente, e la linea verrà verticale.

 

Valoreiniziale e valorefinale dovranno essere i limiti di punti da stampare a video. Esempio:

...

FOR y:=0 TO 100 DO

...

 

indica che la linea sarà verticale e formata da 100 punti.

 

Esempio - Programma che stampa a video un segmento orizzontale, di colore verde, con il ciclo FOR...TO...DO insieme all'istruzione PLOT, (i punti del segmento avranno la y uguale a 8):

 

Program esempio;
var x:integer;
begin
 graphcolormode;           {impostazione della modalità grafica a BASSA risoluzione}
 for
x:=0 to 200 do                                   {riga del ciclo FOR}
  plot(x,8,1);                                             {riga dell'istruzione PLOT}

 readln;
end.

 

Esempio - Programma che stampa a video un segmento verticale, di colore arancione, con il ciclo FOR...TO...DO insieme all'istruzione PLOT, (i punti del segmento avranno la x uguale a 8):

 

Program esempio;
var y:integer;
begin
 graphcolormode;            {impostazione della modalità grafica a BASSA risoluzione}
 for
y:=0 to 200 do                                   {riga del ciclo FOR}
  plot(8,y,3);                                             {riga dell'istruzione PLOT}

 readln;
end.

 

 

Per impostare l'alta risoluzione si usa il comando HIRES (delle parole inglesi HIgh (alta) RESolution (risoluzione)). Ad alta risoluzione lo schermo è suddiviso in 640x200 pixel. L'ambiente grafico ad alta risoluzione permette di utilizzare solo il nero come colore di sfondo e solo un colore grafico.

Sintassi per impostare l'alta risoluzione:

...

HIRES;                               impostazione della modalità grafica ad ALTA risoluzione

HIRESCOLOR(c);                         dichiarazione del colore grafico

...

 

Dove c, che può assumere i valori sopradescritti, è il colore  con il quale sarà disegnata la grafica (punti e segmenti).

 

Per quanto riguarda le istruzioni di stampa a video di punti o segmenti, le sintassi sono le stesse.

 

Esempio - Programma che stampa a video un punto e un segmento verticale di colore verde con la modalità grafica ad alta risoluzione:

 

Program esempio;
var y:integer;
begin
 hires;                     {impostazione della modalità grafica a ALTA risoluzione}
 hirescolor(1);        {dichiarazione del colore grafico}
 plot(67,78,1);
 for y:=0 to 100 do                   
{riga del ciclo FOR}
  plot(8,y,3);                             
{riga dell'istruzione PLOT}
 readln;
end.

_____________________________

 

In TURBO Pascal 7.0, invece, esistono altre funzioni grafiche molto più avanzate. Ciò non vieta però di usare le funzioni del TURBO Pascal 3.0.

Di seguito vi sono 2 brevi esempi:

 

1) Grafica in Pascal 3.0 applicata in ambiente Pascal 7.0:

 

Program esempiografica;

uses graph3;                        {dichiarazione della libreria GRAPH3}

var x:integer;
begin
 graphcolormode;          {impostazione della modalità grafica a BASSA risoluzione}
 for
x:=0 to 200 do
  plot(x,8,1);

 readln;

end.

 

Si noti l'uso della libreria GRAPH3 specifica per la grafica in Pascal 3.0.

 

2) Grafica in Pascal 7.0:

 

Program esempiografica;
uses graph;
var gd,gm,raggio:Integer;
begin
 gd:=
detect;
 
InitGraph(Gd,Gm,'');
 if
GraphResult <> grOk then Halt(1);
 raggio:=50;
 
circle(150,150,raggio);
 readln;
 
CloseGraph;
end.
 

Si noti l'uso della libreria GRAPH specifica per la grafica in Pascal 7.0, e le numerose nuove istruzioni e funzioni come DETECT che richiama il driver grafico, INITGRAPH che inizializza le modalità grafica, GRAPHRESULT che ricerca eventuali errori nelle ultime operazioni grafiche, GROK che rappresenta gli errori, HALT che permette di uscire forzatamente cioè senza arrivare all'END, CIRCLE che disegna un cerchio specificando le coordinate del centro e la misura del raggio ed infine CLOSEGRAPH che permette di uscire dalla modalità grafica.

 

Per maggiori informazioni sulla grafica in ambiente 7.0 vedere il paragrafo specifico nella guida avanzata.

 


Torna su é


Funzioni varie

Nel linguaggio Pascal esistono delle funzioni particolari che permettono di eseguire determinati calcoli. Di seguito sono elencate alcune di queste funzioni, con le relative spiegazioni ed esempi.

 

________1________

 

SQRT(variabile) - Calcola la radice quadrata della variabile specificata tra parentesi.

Es.: a:=SQRT(144). La variabile a sarà uguale a 12.

 

Esempio1:

 

Program esempio;
var a,b:real;
begin
 writeln('Inserisci il radicando');
 readln(a);
 b:=
sqrt(a);
 writeln('La radice quadrata di ',a:0:1,' è ', b:0:1);
 readln;
end.

 

Esempio2:

 

Program esempio;

var a:real;

begin

 a:=sqrt(36);

 writeln('La radice di 36 è ',a:0:1);

 readln;

end.

 

________2________

 

SQR(variabile) - Calcola il quadrato della variabile specificata tra parentesi.

Es.: b:=SQR(23). La variabile b sarà uguale a 529.

 

Esempio1:

 

Program esempio;

var a,b:integer;

begin

 writeln('Inserisci il numero di cui vuoi calcolare il quadrato');

 readln(a);

 b:=sqr(a);

 writeln('Il quadrato di ',a,' è ',b);

 readln;

end.

 

Esempio2:

 

Program esempio;

var a:integer;

begin

 a:=sqr(53);

 writeln('Il quadrato di 53 è ',a);

 readln;

end.

 

________3________

 

INT(variabile) - Fornisce la parte intera della variabile specificata tra parentesi.

Es.: c:=int(23.45). La variabile c sarà uguale a 23.

 

Esempio1:

 

Program esempio;

var a,b:real;

begin

 writeln('Inserisci il numero di cui vuoi visualizzare la parte intera');

 readln(a);

 b:=int(a);

 writeln('La parte intera di ',a:0:5,' è ',b:0:0);

 readln;

end.

 

Esempio2:

 

Program esempio;

var a:real;

begin

 a:=int(78.129);

 writeln('La parte intera di 78.129 è ',a:0:0);

 readln;

end.

 

________4________

 

TRUNC(variabile) - Tronca la parte decimale della variabile specificata tra parentesi.

Es.: d:=TRUNC(3.32). La variabile d sarà uguale a 3. Questa funzione è pressoché uguale alla funzione INT.

 

Esempio1:

 

Program esempio;

var a,b:real;

begin

 writeln('Inserisci il numero di cui vuoi troncare la parte decimale');

 readln(a);

 b:=trunc(a);

 writeln('La parte intera di ',a:0:5,' è ',b:0:0);

 readln;

end.

 

Esempio2:

 

Program esempio;

var a:real;

begin

 a:=trunc(45.4935);

 writeln('La parte intera di 45.4935 è ',a:0:0);

 readln;

end.

 

 

________5________

 

FRAC(variabile) - Fornisce la parte decimale della variabile specificata tra parentesi.

Es.: e:=FRAC(3.32). La variabile e sarà uguale a 0.32.

 

Esempio1:

 

Program esempio;

var a,b:real;

begin

 writeln('Inserisci il numero di cui vuoi visualizzare la parte decimale'');

 readln(a);

 b:=frac(a);

 writeln('La parte decimale di ',a:0:5,' è ',b:0:5);

 readln;

end.

 

Esempio2:

 

Program esempio;

var a:real;

begin

 a:=frac(4166.455);

 writeln('La parte decimale di 4166.455 è ',a:0:5);

 readln;

end.

 

________6________

 

ROUND(variabile) - Arrotonda il valore della variabile specificata tra parentesi  all'intero più vicino. Es.: f:=ROUND(3.8). La variabile f sarà uguale a 4.

 

Esempio1:

 

Program esempio;

var a,b:real;

begin

 writeln('Quale numero vuoi arrotondare?');

 readln(a);

 b:=round(a);

 writeln('Il numero arrotondato è ',b:0:0);

 readln;

end.

 

Esempio2:

 

Program esempio;

var a:real;

begin

 a:=round(318.2);

 writeln('Il numero arrotondato è ',a:0:0);

 readln;

end.

 

 

________7________

 

ABS(variabile) - Calcola il valore assoluto della variabile specificata tra parentesi.

Es.: g:=ABS(-10). La variabile g sarà uguale a 10.

 

Esempio1:

 

Program esempio;

var a,b:real;

begin

 writeln('Inserisci il numero di cui vuoi visualizzare il valore assoluto');

  readln(a);

 b:=abs(a);

 writeln('Il valore assoluto di ',a:0:0,' è ',b:0:0);

 readln;

end.

 

Esempio2:

 

Program esempio;

var a:real;

begin

 a:=abs(-15);

 writeln('Il valore assoluto di -15 è ',a:0:0);

 readln;

end.

 

________8_________

 

variabile1 MOD variabile2 - Calcola il resto della divisione tra la variabile1 e la variabile2.

Es.: h:=16 MOD 5. La variabile h sarà uguale a 1.

 

Esempio1:

 

Program esempio;
var a,b,c:integer;
begin
 writeln('Inserisci dividendo e divisore');
 readln(a,b);
 c:= a
mod b;
 writeln('Il resto della divisione è ',c);
 readln;
end.

 

Esempio2:

 

Program esempio;

var a:integer;

begin

 a:=10 mod 3;

 writeln('Il resto della divisione è ',a);

 readln;

end.

 

________9________

 

variabile1 DIV variabile2 - Calcola la parte intera del quoziente tra la variabile1 e la variabile2. Es.: i:=11 div 5. La variabile i sarà uguale a 2.

 

Esempio1:

 

Program esempio;
var a,b,c:integer;
begin
 writeln('Inserisci dividendo e divisore');
 readln(a,b);
 c:= a
div b;
 writeln('Il quoziente intero della divisione è ',c);
 readln;
end.

 

Esempio2:

 

Program esempio;

var a:integer;

begin

 a:=10 div 3;

 writeln('Il quoziente intero della divisione è ',a);

 readln;

end.

 

________10________

 

RANDOM(variabile) - Genera numeri a caso compresi fra 0 e la variabile specificata tra parentesi (numero-limite). Es.: n:=RANDOM(50)  calcolerà, ad ogni esecuzione, un numero casuale compreso tra 0 e 50, assegnandolo alla variabile n.

L'istruzione RANDOMIZE serve per azzerare il generatore di numeri casuali; è obbligatoria.

 

Esempio1:

 

Program esempio;
var a,c:integer;
begin
 writeln('Inserisci il numero-limite');
 readln(a);

 randomize;
 c:=
random(a);
 writeln('Numero casuale compreso tra 0 e ',a,' : ',c);
readln;
end.

 

Esempio2:

 

Program esempio;

var a:integer;

begin

 randomize;

 a:=random(90);

 writeln('Numero casuale compreso tra 0 e 90 :',a);

 readln;

end.

 

________11________

 

CHR(codiceASCIIdelcarattere) - Restituisce il carattere ASCII con codice specificato tra parentesi. Es.: k:=chr(110). La variabile k restituirà la lettera "n" che ha 110 come codice nella tabella ASCII.

 

Esempio1:

 

Program carattere;
var a:char;

       b:integer;
begin

 b:=67;
 a:=
chr(b);
 writeln(a);
 readln;
end.

 

Esempio2:

 

Program carattere;
var a:char;
begin
 a:=
chr(234);
 writeln(a);
 readln;
end.

 

________12________

 

ORD('carattere') - Restituisce il codice ASCII del carattere specificato tra parentesi. Es.: k:=chr('n'). La variabile k restituirà il codice ASCII del carattere "n", cioè 110.

 

Esempio1:

 

Program carattere;
var b:char;

       a:integer;
begin

 b:='v';
 a:=
ord(b);
 writeln(a);
 readln;
end.

 

Esempio2:

 

Program carattere;
var a:integer;
begin
 a:=
ord('p');
 writeln(a);
 readln;
end.

 

________13________

 

PI - Restituisce il valore del pi-greco. Es.: s:=PI. La variabile s sarà uguale a 3.1415926536.

 

Esempio1:

 

Program pigreco;

begin

 writeln(PI:0:10);

 readln;

end.

 

Esempio2:

 

Program circonferenza;
var C,r:real;
begin
 writeln('Scrivi il valore del raggio');
 readln(r);

 C:=2*(PI)*r;
 writeln;
 writeln('La circonferenza di questo cerchio è ',C:0:2);

 readln;
end.

 

________14________

 

UPCASE('carattere') - Restituisce in maiuscolo il carattere specificato tra parentesi.

Es.: q:=UPCASE('t'). La variabile q sarà uguale a "T".

 

Esempio1:

 

Program maiuscolo;
var a,b:char;
begin
 a:='m';
 b:=
UPCASE(a);
 writeln(b);

 readln;
end.

 

Esempio2:

 

Program maiuscolo;
var b:char;
begin

 b:=
UPCASE('a');
 writeln(b);

 readln;
end.

 

________15________

 

SIN(variabile) - Calcola il seno della variabile specificata tra parentesi.

Es.: r:=SIN(34). La variabile r sarà uguale a 0.53.

 

Esempio1:

 

Program seno;
var b:real;

       a:integer;
begin

 a:=88;
 b:=
SIN(a);
 writeln(b:0:2);

 readln;
end.

 

Esempio2:

 

Program seno;
var b:real;
begin

 b:=
SIN(102);
 writeln(b:0:2);

 readln;
end.

 

________16________

 

COS(variabile) - Calcola il coseno della variabile specificata tra parentesi.

Es.: s:=COS(31). La variabile s sarà uguale a 0.91.

 

Esempio1:

 

Program coseno;
var b:real;

       a:integer;
begin

 a:=55;
 b:=
COS(a);
 writeln(b:0:2);

 readln;
end.

 

Esempio2:

 

Program coseno;
var b:real;
begin

 b:=
COS(102);
 writeln(b:0:2);

 readln;
end.

 

________17________

 

ARCTAN(variabile) - Calcola l'arcotangente della variabile specificata tra parentesi.

Es.: t:=ARCTAN(13). La variabile t sarà uguale a 1.49.

 

Esempio1:

 

Program arcotangente;
var b:real;

       a:integer;
begin

 a:=43;
 b:=
ARCTAN(a);
 writeln(b:0:2);

 readln;
end.

 

Esempio2:

 

Program arcotangente;
var b:real;
begin

 b:=
ARCTAN(18);
 writeln(b:0:2);

 readln;
end.

 


Torna su é


I principali messaggi di errore

Quando nel codice sorgente sono presenti degli errori, al momento dell'esecuzione, vengono visualizzati dei messaggi in inglese che molto sinteticamente cercano di far comprendere all'utente l'errore commesso; il compilatore inoltre ferma il cursore sulla riga contente l'errore.

Di seguito sono elencati e spiegati (con i relativi codici) i principali messaggi di errore che si visualizzano in un compilatore Pascal.

 

1) OUT OF MEMORY - (dall'ingl.: fuori dalla memoria): indica che il compilatore non ha memoria sufficiente ad eseguire il programma.

 

2) IDENTIFIER EXPECTED - (dall'ingl.: identificatore aspettato): indica che in quel punto del codice deve essere presente una variabile.

 

3) UNKNOWN IDENTIFIER - (dall.ingl.: identificatore sconosciuto): indica che un elemento del programma è sconosciuto al compilatore (esempio: una variabile non dichiarata, un scritta che non fa parte del codice sorgente ecc).

 

4) DUPLICATE IDENTIFIER - (dall'ingl.: identificatore duplicato): indica che il nome del programma coincide con il nome di una variabile o che due variabili hanno lo stesso nome.

 

5) SYNTAX ERROR - (dall'ingl.: errore di sintassi): indica che un'istruzione è stata scritta con una sintassi errata.

 

8) STRING COSTANT EXCEEDS LINE - (dall'ingl.: la costante stringa eccede nella linea): indica che il testo di un messaggio fra parentesi non è stato inserito fra apici, oppure che si è dimenticata la chiusura degli apici stessi.

Esempio:

         WRITELN(MESSAGGIO1);              <--  senza apici ERRORE

         WRITELN('MESSAGGIO2);             <--  manca l'apice di chiusura ERRORE

 

10) UNEXPECTED END OF FILE - (dall'ingl.: inaspettata fine dell'archivio): indica che il numero dei BEGIN non è uguale al numero degli END, cioè non è indicata la fine del programma con l'istruzione END..

 

11) LINE TOO LONG - (dall'ingl.: linea troppo lunga): indica che una riga del codice sorgente supera 127 caratteri, cioè il massimo dei caratteri utilizzabili per una riga.

 

15) FILE NOT FOUND - (dall'ingl.: archivio/file non trovato): indica che un file, a cui si fa riferimento nel programma, non è stato trovato nella directory corrente o in nessuna delle directory impostate per la ricerca. Questo errore si presenta generalmente quando le UNIT (o librerie) non sono localizzate nella loro cartella (chiamata UNITS), oppure quando si lavora con file esterni. Si consiglia, quindi, di rivedere l'esatto path (percorso, localizzazione) del file a cui si fa riferimento.

 

26) TYPE MISMATCH - (dall'ingl.: discordanza di carattere): indica  che una variabile è diversa da come è stata dichiarata, oppure che c'è un'incompatibilità tra i tipi di operandi in un'espressione.

Esempio1:

...

var a:integer;

begin

 a:=10.23;        <--  ERRORE: il numero 10.23 non è un numero intero (INTEGER).

...

 

Esempio2:

...

var a:integer;

begin

 a:=3/7;           <--  ERRORE: la divisione genera sempre un numero reale

...

 

36) BEGIN EXPECTED - (dall'ingl.: "begin" aspettato): indica che in quel punto del codice è necessario un BEGIN.

 

37) END EXPECTED - (dall'ingl.: "end" aspettato): indica che in quel punto del codice è necessario un END.

 

42) ERROR IN EXPRESSION - (dall ingl.: errore nell'espressione): indica che il simbolo scritto nel codice non può partecipare all'espressione nel modo in cui è stato scritto, oppure che è stato dimenticato un operatore tra 2 operandi. Questo errore si presenta specialmente quando si indicano errate espressioni nella struttura CASE...OF.

Esempio:

...

var a:integer;

begin

 write('Scrivi un numero ');

 readln(a);

 CASE a OF

 >3:...                  <--  ERRORE: l'intervallo può essere scritto in questo modo 1..3

 ...

...

 

50) DO EXPECTED - (dall'ingl.: "DO" aspettato): indica che in quel punto del codice dovrebbe esserci la parola riservata DO.

 

57) THEN EXPECTED - (dall'ingl.: "THEN" aspettato): indica che in quel punto del codice dovrebbe esserci la parola riservata THEN.

 

58) TO OR DOWNTO EXPECTED - (dall'ingl.: "TO" o "DOWNTO" aspettato): indica che in quel punto del codice dovrebbe esserci la parola riservata TO o DOWNTO.

 

62) DIVISION BY ZERO - (dall'ingl.: divisione per zero): indica che è stata effettuata una divisione per zero (tramite / o DIV o MOD).

 

 

85) ";" EXPECTED - (dall'ingl.: ";" aspettato): indica che manca il punto e virgola alla fine di una determinata riga.

 

86) ":" EXPECTED - (dall'ingl.: ":" aspettati): indica che mancano i due punti in una determinata istruzione.

 

88) "(" EXPECTED - (dall'ingl.: "(" aspettata): indica che non è stata aperta una parentesi tonda successivamente chiusa.

 

89) ")" EXPECTED - (dall'ingl.: ")" aspettata): indica che non è stata chiusa una parentesi tonda precedentemente aperta.

 

91) ":=" EXPECTED - (dall'ingl.: ":=" aspettati): indica che mancano i due punti e l'uguale in una determinata istruzione.

 

113) ERROR IN STATEMENT - (dall'ingl.: errore nella dichiarazione): indica che il simbolo scritto non può dare inizio ad una dichiarazione.

 


Torna su é


Pasquale Campitiello © 14/07/2002 - 29/07/2009