Caricare documenti e articoli online  
INFtube.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.
Meneame
 
Non ricordi la password?  ››  Iscriviti gratis
 

Il pascal - Struttura del programma, Esempio

informatica

loading...

Inviare l'articolo a Facebook Inviala documento ad un amico Appunto e analisi gratis - tweeter Scheda libro l'a yahoo - corso di


ALTRI DOCUMENTI

SISTEMI OPERATIVI - MULTIPROGRAMMAZIONE
Esploriamo l interfaccia I
APPUNTI SU LABVIEW 5.1
Figure e aspetti necessari per la gestione del sito
GESTIONE DELLA MEMORIA: PARTIZIONI VARIABILI MULTIPLE
DATA BASE
Pensiero analogico e struttura non-lineare
Basi dell'informatica
PROGRAM quadrati
L'immagine montaliana sullo sfondo dell'ascesa fascista

Introduzione


Il pascal nella versione turbo ha risolto il problema dell'inserimento

del linguaggio nell'ambiente operativo, con un ambiente di sviluppo software "chiuso".

Nel senso che il software di supporto(editor,caricatore,file-system) è stato

realizzato con riferimento allo specifico linguaggio, costituendo in tal modo un

ambiente di linguaggio specifico ed autonomo.



Il Pascal prende il suo nome dal matematico francese Blaise Pascal che fu

il primo ad ideare una macchina calcolatrice :la Pascalina.

Questo linguaggio, però fu messo a punnto nel 1960 da Niklaus Wirth, docente

all' università di Zurigo.                   242b18c                    242b18c                    242b18c                    242b18c                    242b18c                    242b18c                    242b18c  

Esso si diffuse dpprima negli ambienti scientifici ma, successivamente ,

grazie alla sua versatilità ed alla sua semplicità ,si diffuse un po'

dappertutto.

Per iniziare

Una volta avviato il TurboPascal si presenterà un' interfaccia

a menu  abbastanza intuitiva.

Compariranno vari menu, ma quelli pricipali sono tre : File , Run , Compile.

Il primo è formato da New, per crere un nuovo documento di lavoro; Load ,

per aprire lavori già salvati; Save , registra un lavoro.

Nel menu Compile l' unico comando che ci riguarda è Compile, che compila

il programma.

Spesso può risultare utile conoscere il comando Destination (nel menu

Compile) per decidere se compilare il programma nella Ram oppure in un

file eseguibile (nome_programma.exe).

Una volta compilato il programma, però, dobbiamo eseguirlo, e perciò  è 

necessario selezionare dal menu Run il comando Run.

Struttura del programma


Un programma scritto in TP consta in tre sezioni principali : sezione

intestazione , sezione dichiarazioni e sezione esecutiva.

Nonostante questi terribili nomi esse sono semplicissima comprensione:

nella prima sezione si inserisce il nome del programma, nella seconda 

sezione vengono digitate le variabili e la loro tipologia , ed infine

viene scritto il programma vero e proprio.

 Per intenderci possiamo fare un banalissimo esempio:

possiamo considerare il TP come un teatro in cui si inscena un' opera:

il titolo dell' opera e dato dalla sezione delle intestazioni, gli attori

che prendono parte all' opera vengono presentati nella sezione dichiarativa,

mentre lo svolgimento dello spettacolo è rappresentato dal corpo del

programma.

Esistono delle parole, dette riservate, a cui non può essere dato il valore

di variabile, esse infatti rappresentano dei comandi che il TP può eseguire.

Mi spiego meglio : tornando all' esempio del teatro, non possiamo chiamare

un personaggio SIPARIO oppure SCENA ,esse infatti sono parti specifiche

del teatro e non possono eesere perciò dei personaggi.

Dopo questa lunga (forse troppo ?) introduzione  al TP possiamo passare

al capitolo successivo e cominciare ad analizzare le più frequenti parole

riservate e a capirne l' uso all' interno di un programma.

Esempio


Ora cominceremo con l' abbozzo di un programmino semplice semplice :

calcolare il triplo di un numero dato.

D' ora in poi le parole riservate verranno scritte in maiuscolo                   242b18c                    242b18c              

E' da ricordare che alla fine di qualsiasi istruzione bisogna inserire

il punto e virgola (;). Anche se non è obbligatorio andare a capo dopo di

esso, è preferibile farlo per rendere più agevole la lettura e la

comprensione del listato.

Inoltre per inserire un commento che non interferisca con l' esecuzione

del programma bisogna inserire il commento  tra asterischi, e mettere  il

tutto tra parentesi tonde.

Es.(* Questo è un commento *).

                   242b18c         

Ecco qui il programma:

PROGRAM doppio; ( * Sezione dell' intestazione * )

VAR n:INTEGER;  ( * Sezione delle dichiarazioni *)

begin                   242b18c                ( * Corpo del programma *)

writeln(' Questo programma calcola il triplo di un numero dato ');

writeln;

writeln('Introduci un numero intero ');

readln(n);

n:=n*3;

writeln;

writeln(' Il triplo è ' ,n);

writeln;

writeln(' Premi enter per finire');

readln;

end.

 

 Nella parte dichiarativa abbiamo  comunicato all' elaboratore che n è una

 variabile (VAR) che nel corso dell' esecuzione potrà avere soltanto  un

 valore  INTEGER , cioè  di numero intero positivo o negativo.

 Esaminando successivamente il listato vedremo che la parte esecutiva è

 introdotta da BEGIN ( = inizio).

 Poi troviamo una nuova parola riservata, READLN ( abbreviazione Read Line =

 leggi  riga).Essa serve a leggere i dati di input.

 La sua sintassi è molto semplice :

 

                  READLN(nome variabile da leggere)

 

 Inoltre l' istruzione READLN non seguito da alcun parametro, crea un

 ciclo di attesa che dura finchè non viene premuto Invio.

 E' d' obbligo alla fine di un listato, prima dell' END, poichè "congela"

 lo schermo quando dobbiamo leggere il risultato dell' elaborazione.

 Ad esempio, se eseguissimo il programma precedente senza READLN finale,

 non potremmo esaminare i risultati della nostra operazione, perchè il

 programma si arresterebbe troppo in fretta.

 

 Un altra fondamentale istruzione è WRITELN ( abbreviazione  Write Line =

 scrivi riga); essa serve a stampare i dati di output sullo schermo.

 La sua sintassi è :

                   242b18c WRITELN('Stringa di testo')

 Se consideriamo l' esempio sopra vedremo che il testo tra apici (') verrà

 stampato sullo schermo; nel caso in cui WRITELN venga usato senza

 parametri l' elaboratore lascerà una riga vuota nell' elaborazione.

 Un ulteriore esempio sull'uso di WRITELN:

                   242b18c         WRITELN(a)

In questo caso verrà visualizzato sullo schermo il valore assunto in quel

momento dalla variabile a. Dunque, se  a vale 3, allora sullo schermo uscirà

il numero 3. E' possibile anche combinare stringhe e variabili, mettendo una

virgola tra il secondo apice e la variabile:

                   242b18c       Writeln(' Io sono ',A);

Infine, alla fine del programma (scusate il gioco di parole), troviamo END

seguito da un punto.Esso indica la fine del flusso delle informazioni e il

conseguente arresto del programma.

Tipi di dati


Come già visto in precedenza, nel settore dichiarativo di un programma

bisogna definire il tipo  di variabili che intendiamo utilizzare nel

corso del programma stesso.

Esistono vari tipi di variabili, e sono raggruppate in questo breve

specchietto.

 

  _______________________________________________________________________ 

 | Nome tipo      |    Intervallo consentito     |    commenti            |

 |----------------|------------------------------|------------------------|

 |  INTEGER       |     -32768  /  +32767        |     numeri interi      |

 |                |                   242b18c             |  (positivi e negativi) |

 |----------------|------------------------------|------------------------|

 |  BYTE          |           0 /255             |   numeri interi        |

 |________________|______________________________|________________________|

 |                |                   242b18c             |                         242b18c |

 |  WORD          |         0 / 65535            |   numeri interi        |

 |________________|______________________________|________________________|

 |                |                   242b18c             |   numeri reali         |

 |  REAL          |    2.9x10^-36  / 1.5 x 10^35 | (positivi e negativi)  |

 |________________|______________________________|________________________|

                   242b18c                    242b18c            

 Questo schema dimostra come ci siano vari tipi di dichiarazione dei dati.

 Non è detto, però, che i tipi di dati corrispondano soltanto a cifre;

 potremmo infatti di fronte a un problema che necessita di dati alfanumerici,

 cioè di numeri e lettere.

 In questo caso dovremmo introdurre due nuovi tipi di variabile:

 

 1) STRING[x] : Dichiarando così un tipo di dato assumeremo che quel dato è

 formato da un numero intero di x caratteri alfanumerici (compresi gli

 spazi).Usato senza parametri non definisce la lunghezza della stringa.

 Inoltre nel caso in cui si dichiari una lunghezza  minore del dato inserito,

 l' elaboratore  non considererà i cartteri che eccedono.

 Ad esempio, se dichiarassimo la variabile a di tipo STRING[5] e al momento

 di inserire i dati digitassimo la parola "folletto" , essa risulterebbe

 troncata in "folle", poichè i caratteri in eccesso non verrebbero considerati

 nell' elaborazione.

 2) CHAR : E' meno usata di STRING, ma qualche volta può risultare utile.

 Viene usata per definire variabili da un solo carattere ( eccetto numeri ).

 

 

Le strutture dei dati

Questa che andremo ad esaminare ora, è forse la parte più complessa del TP,

nonostante ciò, cercherò di renderla semplice poichè è la più utile

e contiene le istruzioni più usate.

E' stato purtroppo inevitabile, però, non inserire parole piuttosto

"difficili" data la specificità dell' argomento.

 1-) Le strutture  iterative

     =======================

   Il termine iterare deriva dal latino e significa  "ripetere".

  Questa struttura ( che è presente in tutti i linguaggi programmativi,

  non solo in Pascal, N.d.A.) agisce su una operazione che deve essere

  ripetuta più volte. Ne esistono vari tipi:

  a) Iterazione enumerativa - Come dice la parola stessa esegue un

  operazione n volte.In Pascal è indicata dal comando:

 

                 FOR a=: ni TO nf DO( * Niente  punto e virgola * )

                 istruzione 1;

                 istruzione ...;

                 END;

  Nel nostro caso  ni sostituisce il numero intero dal quale si parte a

  enumerare  e  nf sostituisce il numero fino al quale si continua a

  enumerare. Dopo questa  istruzione di iterazione  si inseriscono le 

  istruzioni da ripetere racchiudendo il tutto con un END seguito da

  un punto e virgola (;), poichè il flusso di informazioni non è del tutto

  terminato.

  E' possibiile anche procedere a ritroso, contando alla rovescia da un numero

  n fino ad arrivare ad un numero t:

                  FOR a:=n DOWNTO t DO

  Ecco un semplice esempio:

   PROGRAM potenza;

   USES crt;

   VAR a,b,c,i:INTEGER;

   BEGIN

   WRITELN('Inserisci un numero');

   READLN(A)

   WRITELN(' Inserisci esponente ');

   READLN(B);

   FOR I:= 1 TO b DO

   c:=a*a;

   END;

   WRITELN('Il risultao della potenza è ' ,c);

   READLN;

   END.

  b) Iterazione per falso - Esegue il ciclo racchiuso tra REPEAT e UNTIL

      se, e solo se, la condizione espressa da UNTIL è vera, in caso

      contrario continua a ripetere le istruzioni.

     REPEAT

      istruzione 1;

      istruzione 2;

      istruzione ...;

     UNTIL proposizione;

   N.B. Ricorda di inserire proposizioni possibili dopo UNTIL altrimenti

   l'uscita dal ciclo ripetitivo non si avrà mai! ( in gergo si dice che il

   computer si "impianta" e bisogna riavviarlo)

   

    Esempio:

    PROGRAM ripetizione;

    USES crt;

    VAR a,b:INTEGER;

    BEGIN

    REPEAT

    WRITELN(' Inserisci un numero minore di 30 e maggiore di 10');

    READLN(A);

    UNTIL (A<30) AND (A>10);

    READLN;

    END.

    c) Iterazione per vero - Esegue le informazioni racchiuse tra WHILE DO



    e l' END;( il punto e virgola indica che l' END è parziale ) finché la

    condizione presa in esame non sia falsa.

    WHILE a=3 DO

     istruzione 1;

     istruzione 2;

     istruzione...;

    END;

    Questo semplice esempio spiega come il blocco di istruzioni presente

    tra WHILE DO e END; venga ripetuto finché si rispetti la condizione

    a=3.

    Nel caso in cui il valore di a fosse stato diverso da 3, infatti, il

    blocco di istruzioni non sarebbe stato mai eseguito.

   

 2-) Le strutture selettive 

     ======================

     A questo punto è lecito domandare se è possibile operare delle scelte

    con il TP. La risposta è affermativa.

    Esistono due tipi di selezione: la selezione binaria e la selezione

    multipla.

   

  a) Selezione binaria - E' la più semplice: se  consideriamo un numero

     naturale qualsiasi e ci domandiamo se esso è pari, la risposta potrà

     avere solo due alternative: Si oppure No.

     In Tp c'è la possibilità di eseguire una scelta binaria tra due condizioni

     con il seguente comando:

   

        IF  THEN  ELSE

                   242b18c     

                   242b18c      Che tradotto fa più o meno:

      SE  ALLORA  ALTRIMENTI  ]

     Questo è quanto  serve per operare ( o far operare al computer ) una

     scelta.

     Per chiarire ulteriormente questo importante processo vedrò di

     presentarvi un esempio.

     Costruiamo un programma che calcoli l' area di un rettangolo SE E SOLO SE

     l' area stessa è minore di un numero n ( per esempio 20) e maggiore

     di un nuumero m (per esempio 10);

    

    PROGRAM area_rettangolo;

    USES crt;

    VAR a,b,c:INTEGER;

    BEGIN

    CLRSCR; ( * E' un nuovo comando.E' l' abbreviazione di CLeaR SCReen=

             cancella schermo. Pulisce lo schermo. * )

    WRITELN(' Inserisci base');

    READLN(a);

    WRITELN('Inserisci altezza');

    READLN(b);

    c:=a*b;                   242b18c                    242b18c                    242b18c  

    IF (c<20) AND (c>10) THEN ( * AND , insieme a OR sono gli operatori

                             242b18c       booleani più usati in TP. Per approfondimenti

                   242b18c                 consultare l' appendice C  * )                   242b18c      

    BEGIN                   242b18c                    242b18c                    242b18c                    242b18c                                   242b18c                    242b18c             

    WRITELN('Area maggiore di 20 oppure minore di 10.');                   242b18c         

    READLN;                   242b18c                    242b18c                    242b18c     

    END ( * L' END prima dell' ELSE senza punto e virgola(;) * )     

    ELSE                   242b18c                    242b18c                    242b18c   

    BEGIN

    WRITELN(' AREA = ',c);

    READLN;

    END;

    READLN;

    END.

    E' un listato semplice, e l' unica osservazione da fare è che se dopo 

    IF...THEN c'è solo un istruzione può essere scritta terminando il tutto

    con il solito punto e virgola(;).

    Tuttavia , se ce ne sono più di una è necessario aprire un altro BEGIN e

    cominciare un sottoprogramma il quale, però va terminato con l' END; che,

    se seguito da  ELSE non accetta il punto e virgola(;).

 

  b) Selezione multipla - Se domandiamo ad una persona quali sono i piatti

     che preferisce essa sceglierà fra un' ampia gamma di pietanze fino a

     scegliere quella che soddisfi i suoi gusti.

     Infatti, al contrario di prima,la selezione multipla ci fornisce

     illimitate possibilità di risposta.

     Il comando che in TP ci permette di operare un selezione multipla è

     il seguente:

            CASE n of

              ( * Se n è stata dichiarata INTEGER * )

     valore 1:BEGIN

                 istruzione1;

                 istruuzione2;

                 istruzione...

              END;

              ( * Se n è stata dichiarata CHAR * )

     valore x:BEGIN

                 istruzione1;

                 istruzione2;

                 istruzione...;

              END;

             ELSE

               BEGIN

              istruxione 1;

              istruzione2;

              istruzione...;

               END;

            END;

  Nonostante la sua sintassi spaventosamente ricca, questa struttura è di

  facilissima comprensione.          

  Innanzitutto dobbiamo decidere se dichiarare la variabile n come tipo 

  INTEGER oppure CHAR.

  Se n è CHAR dovremo usare UNA lettera seguita dai due punti(:) e dal

  rispettivo sottoprogramma delimitato da BEGIN e END; .

  Se invece n è INTEGER dovremo usare un numero naturale al posto di n

  e mettere dopo i due punti(:) il solito sottoprogramma delimitato da BEGIN

  e END; .

  Proviamo ora con un' esempio: un programma che generi un numero a caso tra

  1 e 10 e  lo comunichi all' operatore solo se esso è uguale a 7, 9 o 3.

  PROGRAM numeri_casuali;

  USES crt;

  VAR a,b,c:INTEGER;

  BEGIN

  CLRSCR;

  RANDOMIZE;  ( * Inizializza,ossia azzera il generatore di numeri casuali * )

  c:=RANDOM(10); ( * Questo comando permette all' elaboratore  di generare un

                numero a caso compreso tra 0 e il numero indicato in

                parentesi. Il massimo consentito è 255 * )

  CASE c OF

  7:BEGIN

  WRITELN(' Il numero è ',c);

  END;

  9:BEGIN

  WRITELN(' Il numero è ',c);

  END;

  3:BEGIN

  WRITELN(' Il numero è ',c);

  END;

  ELSE

  BEGIN

  WRITELN(' Il numero uscito è diverso da 3  7 e 9);

  END;

  END;

  Anche se con questo ultimo esempio abbiamo terminato il capitolo

  riguardante  le  strutture dei dati al lettore potrebbe sembrare

  che quelle poche  strutture  analizzate  debbano esssere affiancate

  da molte altre per costruire un programma relativamente complesso, e invece

  secondo il teorema di Bohm - Jacopini : "Le tre strutture matematiche

  che servono per creare un qualsiasi programma sono: iterative, selettive e

  sequenziali."

  Le strutture sequenziali sono le più lineari, poichè il flusso di dati

  scorre senza ripetizioni né selezioni che abbiamo utilizzato tranquillamente

  nel primo programma( quello del triplo di un numero ) senza saperlo.

Procedure


Spesso, soprattutto in programmi complessi e piuttosto elaborati, ci troviamo

dinanzi al problema di ripetere uno stesso procedimento più volte all'interno

dello stesso programma.

La soluzione a questo problema è data dal fatto che possiamo memorizzare una

procedura  e ripeterla a piacimento durante la stesura del programma.

Questa utilissima funzione ha la seguente sintassi:

            PROCEDURE nomeprocedura;

             BEGIN

            blocco istruzioni

            ....

            ....

             END;

E' importante dire che  i precedenti comandi devono essere digitati tra il

settore dichiarativo e il corpo del programma (per intenderci, prima del

BEGIN  iniziale).

Per richiamare una procedura durante il programma bisogna digitare il nome

della procedura seguito da un punto e virgola(;).

 

Esempio: Modificare il  programma precedente inserendo una procedura.

         

  PROGRAM numeri_casuali;

  USES crt;

  VAR a,b,c:INTEGER;

  PROCEDURE output; ( * Qualsiasi nome va bene * )

  BEGIN

  WRITELN(' Il numero estratto è ',c);

  READLN;

  END;

  BEGIN

  CLRSCR;

  RANDOMIZE;

  c:=RANDOM(10); ( * Questo comando permette all' elaboratore  di generare un

                numero a caso compreso tra 0 e il numero indicato in

                parentesi. Il massimo consentito è 255 * )

  CASE c OF

  7:BEGIN

  output;

  END;

  9:BEGIN

  output;

  END;

  3:BEGIN

  output;

  END;

  ELSE

  BEGIN

  WRITELN(' Il numero uscito è diverso da 3  7 e 9);

  END;

  END;

 

In questo caso una procedura è addirittura una perdita di tempo poichè

le istruzioni da riscrivere sono poche ma in casi più complessi fanno

risparmiare tempo e fatica.

                   242b18c     

                   242b18c     

                   242b18c      A P P E N D I C E      A

                   242b18c      ------------------------

GLI ERRORI DEL TP                   242b18c  

=================

Spesso (fin troppo spesso), nella digitazione del programma è probabile che

siano presenti errori: mancato punto e virgola(;) alla fine di un istruzione,

valore alfanumerico dato ad una variabile numerica, ecc.

Per correggerli il TP , al momento della compilazione, mostra in alto dei

messaggi di errore che, malauguratamente per chi non lo conosce, sono in

inglese!

Qui di seguito c'è una brevissima guida  su come correggere gli errori più

comuni:

N.B. Nel caso in cui l' errore non sia presente nella tabella, con un buon

vocabolario di inglese si può tentare di capire l' origine dell' errore e

quindi correggerlo.

1) Out of memory : Il compilatore non ha abbastanza memoria per eseguire o

compilare il programma. Provare a cambiare destinazione del codice eseguibile.

(Vedi Capitolo1)

2) Unknown identifier : Identificatore sconosciuto. Non abbiamo dichiarato una

variabile.

3) Duplicate identifier: Identificatore duplicato. Due variabili identiche.

Cambiarne  una.

4) Syntax error: E' sbagilata la sintassi di un istruzione.

 

5) Type mismatch: Si è dichiarata una variabile diversamente da come si è

considerata. Ad esempio si è caricato il valore 1 in una variabile di tipo

CHAR;

6) String constant exceeds lines: Si è dimenticato di mettere la stringa

 

 

 

  di testo fra apici.

7) Unespected end of file: Il numero dei BEGIN non coincide col numero

degli END. Verificarli.

Appendici


Di seguito troverete dei comandi che potrebbero tornare utili in qualche 

programmino.

1)  TEXTCOLOR(n)= Colora il testo che segue di un colore definito da n che è

    un numero da 0 a 15. I numeri maggiori di quindici producono un effetto

    lampeggiante. Ecco gli abbinamenti numeri-colori.

   

2)  TEXTBACKGROUND(n)= Colora lo sfondo d un colore definito da n.

    Sintassi simile a TEXTCOLOR.

3)  ABS(x) = Calcola il valore assoluto del numero x;

4)  SQRT(x) = Calcola la radice quadrata di x;

5)  DELAY(n) = Crea un ciclo di attesa lungo n ( miliisecondi)

Gli operatori booleani e i segni di operazione:

===============================================

Come già visto in precedenza spesso in TP ci serviamo di operatori quali AND

oppure OR ( letteralmente 'e' ed 'o').

Essi , introdotti dal matematico inglese George Boole, servono a congiungere

due proposizioni.

Ora mi spiego meglio. Prendiamo l' esempio fatto nelllo spiegare l'iterazione

per falso : l' operatore AND infatti serve a dettare più di una condizione e

farla avverare solo se entrambi sono soddisfatte.

Se inserissimo il numero 7 ad esempio, l' elaboretore ci ripeterà la

"domanda", poichè il numero inserito, non soddifa le due condizioni: " il

numero deve essere minore di 30 e maggiore di 10 ".

I segni di operazione in TP , sono i seguenti:

 

 '+' = ADDIZIONE

 '-' = SOTTRAZIONE

 '*' = MOLTIPLICAZIONE

 '/' = DIVISIONE

  MOD = RESTO DELLA DIVISIONE ( MOD  può essere usato soltanto se i numeri da

                   242b18c               dividere sono di tipo INTEGER )

 

Inoltre per indicare il rapporto fra due cifre ci serviuamo dei seguenti

simboli matematici :

'<' = MINORE

'>' = MAGGIORE

'=' = UGUALE

'=>'= MAGGIORE O UGUALE

'<='= MINORE O UGUALE

'<>' = DIVERSO DA ...



Articolo informazione


Hits: 2419
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI

E 'stato utile?



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2017