|
|
Capitolo 1: Introduzione ai linguaggi
programmativi
"Il computer è una macchina che elabora delle informazioni ; in quanto
macchina , però , non è capace di gestirle da sè, ma necessita di un operatore
esterno che istruisca l' elaboratore e gli insegni come trattare queste
informazioni."
Questa definizione racchiude in sè il significato della parola programmazione.
Esistono due principali tipi di linguaggi con cui programmare una macchina: i
programmi interpreti e i compilatori.
Alla prima categoria appartengono numerosi programmi tra i quali spicca il
BASIC ( Beginners All-Purpose symbolic Instruction Code = Codice simbolico di
istruzioni per tutti gli usi, per principianti) grazie alla sua intuitività (
almeno per chi mastica un po' d' inglese !). Il suo funzionamento è semplice:
il codice sorgente ( quello introdotto dall' operatore esterno) viene tradotto
in linguaggiuo macchina (ASCII) riga per riga ogniqualvolta il programma stesso
viene eseguito.
Oltre agli interpreti però, come già detto, esistono anche i compilatori.
PASCAL,FORTRAN( FORmula TRAnslate = Traduzione di formule) e C , sono soltanto
alcuni dei più diffusi linguaggi compilati. I programmi compilatori funzionano
nel modo opposto degli interpreti: dato il solito codice sorgente, il compilatore
lo trsforma in blocco in codice eseguibile.
Questi due metodi di programmazione sono entrambi validi ma ciscuno offre
vantaggi e svantaggi. I compliatori infatti hanno il vantaggio di essere più
veloci rispetto agli interpreti ma sono più soggetti ad errori degli
interpreti.
Capitolo 2: Introduzione al Turbo Pascal
In questa sede ci occuperemo estesamente di un particolare tipo di linguaggio
di programmazione compilato,il Turbo Pascal. Il Pascal prende il suo nome dal
matematico francese Blaise Pascal che fu il primo ad ideare una macchina
calcolatrice :
Passiamo ora alla parte operativa.
Una volta avviato il TP (Turbo Pascal N.d.A.) si presenterà un' interfaccia a
menu abbastanza intuitiva. Compariranno vari menu, ma quelli pricipali sono tre
: File , Run , Compile. Il primo è f 949f53j ormato 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
( Cfr. Cap.1 ). 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.
Capitolo 3 : Struttura generale di un 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.
Capitolo 4 : Abbozziamo un programma
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
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 *).
Ecco qui il programma:
PROGRAM doppio; ( * Sezione dell' intestazione * )
VAR n:INTEGER; ( * Sezione delle dichiarazioni *)
begin ( * 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 è
:
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(' 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.
Capitolo 5 : I 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.
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 ).
Capitolo 6 : 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
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;
IF (c<20) AND (c>10) THEN ( * AND , insieme a OR sono gli operatori
booleani più usati in TP. Per approfondimenti
consultare l' appendice C * )
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 - 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.
Capitolo 7: Le 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.
A P P E N D I C E A GLI ERRORI
DEL TP
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.
A P P E N D I C E B
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)
A P P E N D I C E C 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
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 ...
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2024