Insegnare Apprendere Mutare

 

turbopascal

Page history last edited by chiara matteuzzi 9 months, 1 week ago

 LINGUAGGI DI PROGRAMMAZIONE

Il primo computer che ho mai usato è stato quello della ditta di mia mamma, era un Windows 95 (di cui ho tenuto per ricordo l'hard disk da 545,5 MB, la scheda madre, processore e dissipatore).Considerando che avevo solo 8 anni non sapevo fare granchè, anche se già da subito iniziai ad esplorare e scandagliare ogni programma, ogni parte del computer- non nego di averlo bloccato una o due volte...

Via via crescendo ho iniziato ad essere più pratica del mondo dell'informatica- anche se la scuola non è stata molto d'aiuto- e ho cominciato a chiedermi come nascessero quei programmi che tanto mi divertivo ad usare.

Da quando esco nella mia compagnia, ho conosciuto tanti ragazzi che giocano on-line (Ultima) e ho cominciato a sentir parlare di SCRIPT, PROGRAMMAZIONE, LINGUAGGI AD OGGETTO, LINGUAGGI AD ALGORITMO; ho cominciato a chidere spiegazioni agli amici e a cercare informazioni qua e là.

Riguardo aiu linguaggi di programmazione mi sono detta che forse sarebbe stato meglio iniziare dalla base, tanto per avere un'infarinatura generale e ho iniziato a leggere riguardo a Turbo Pascal.

All'inizio è stato un pò strano dover usare un certo linguaggio e determinati passaggi ho impiegato un pò a farmeli diventare amici; poi ho cominciato a divertirmi...

La programmazione in TB non permette certo di fare grandi cose, ma comunque mi ha permesso di far fare grandi risate a mio fratello più piccolo:una volta avevo fatto un programmino che ti chiedeva il nome, e in base alla risposta diceva qualcosa, cioè mi spiego meglio avevo "detto" al programma che quando io inserivo il mio nome avrebbe dovuto rispondere "allora sei intelligente", mentre se inserivo il nome di mio fratello diceva "allora sei un somaro"; quando mio fratello inserì il suo nome e si vide rispondere dal computer "allora sei un somaro" iniziò a ridere e mi disse"il computer ha capito che non mi piace la scuola?".

Comunque basta preamboli: questo è quello che so di Turbo Pascal.

 

TURBO PASCAL

Introduzione

 

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 punto nel 1960 da Niklaus Wirth, docente all' università di Zurigo.                                                                                                                                

Esso si diffuse dapprima 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 creare 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.

 

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.

Esempio

Ora cominceremo con un programmino semplice: calcolare il doppio di un numero dato.

 

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

 

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 della lista.

 

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 *).

                         

Ecco qui il programma:

 

PROGRAM Doppio; ( * Sezione dell' intestazione * )

VAR a,b:INTEGER;  ( * Sezione delle dichiarazioni *)

Begin                        (*Corpo del programma*)

writeln ('dammi a');

writeln;

READLN (a);

b:=a*2;

writeln;

writeln ('il doppio di ',a,' è ',b);

;writeln;

readln;

and.

 

Nella parte dichiarativa abbiamo  comunicato all' elaboratore che a e b sono variabili (VAR) che nel corso dell' esecuzione potranno avere soltanto un valore  INTEGER ( cioè un 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, così da "bloccare" lo schermo per 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 è :

                    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:

 

                          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:

 

                        Writeln(' il doppio di ',a);

 

Alla fine del programma scriviamo END seguito da un punto. Esso indica la fine della lista delle informazioni e quindi l’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:

                               

Nome Tipo

Intervallo consentito

Commenti

INTEGER

-32768/+32767

Numeri interi

(positivi e negativi)

BYTE

0/255

Numeri interi

 

WORD

0/65535

Numeri interi

 

REAL

2.9x10-36/1.5x1035

Numeri reali

(positivi e negativi)

               

Non è detto, però, che i tipi di dati corrispondano soltanto a cifre; potremmo infatti trovarci di fronte a un problema che ha bisogno di dati alfanumerici, cioè di numeri e lettere:

 

1) STRING[x] : Dichiarando così che per 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.

Nel caso in cui si dichiari una lunghezza  minore del dato inserito,l' elaboratore  non considererà i caratteri che eccedono.

Ad esempio, se dichiarassimo la variabile a di tipo STRING[5] e al momento di inserire i dati digitassimo la parola "albero" , essa risulterebbe troncata in "alber", poichè i caratteri in eccesso non verrebbero considerati nell' elaborazione.

 

2) CHAR : E' meno usata di STRING. Viene usata per definire variabili da un solo carattere (eccetto numeri!).

 

 

 

Le strutture dei dati

 

 

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) 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

 

  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 "impalla" 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 il blocco di istruzioni non sarebbe stato mai eseguito.

 

2. Le strutture selettive 

 E' possibile operare delle scelte con il TP? La risposta è SI.

   

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

                      

                       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 numero 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;                                                       

    IF (c<20) AND (c>10) THEN ( * AND , insieme a OR sono gli operatori booleani più usati in TP. )

    BEGIN                                                                                                                                       

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

    READLN;                                                           

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

    ELSE                                                        

    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 -

Al contrario di prima,la selezione multipla ci fornisce infinite 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;

 

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 é:

            PROCEDURE [nome procedura];

             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(;).

 

                  

Appendice

 

Gli errori di Turbo Pascal

A volte 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.