Per una migliore comprensione del Corso conviene STAMPARE IL SEGUENTE DOCUMENTO
IMPARARE A PROGRAMMARE CON IL LINGUAGGIO PASCAL
a cura del Prof. Sampognaro Giuseppe.
Creare propri programmi nel computer è stato sempre il desiderio non solo degli esperti di Informatica, ma anche delle persone che non hanno alta dimestichezza con il Personal Computer.
Un programma abbastanza semplice che ci aiuta allo scopo è il Linguaggio PASCAL 3 che, pur abbastanza vecchio di datazione, è quello più vicino a noi per le regole di sintassi.
Inizialmente dovete uscire dal presente sito e creare una directory nel vostro disco fisso che può essere chiamato PASCAL. Collegati quindi al presente sito dovete scaricare nella directory creata il presente documento e tutti quei file presenti e sottolineati nel presente documento (TURBO,SOMMA etc.).
Prima di operare con TURBO conviene dare una occhiata ad un programma di massima facilità che è SOMMA. Serve per sommare due numeri. Leggere sotto le regole di sintassi in esso presenti.
Si prosegue analizzando tutti gli altri programmi. Se poi si desidera programmare o analizzare in modo approfondito un programma con estensione .pas aprire il programma TURBO.
PROGRAMMA BASE: TURBO : Cliccando su di esso e quindi su Apri si presenta un foglio nero e dopo qualche istante compare la presentazione del programma. Alla domanda Include errore messages rispondere con N . Compare ora la finestra operativa. Premere ora A e, dopo "New directory:", digitare il percorso e il nome della directory creata prima nel vostro disco fisso, cioè C:\PASCAL ; quindi :
Per digitare (editare o guardare) un programma premere E e digitare il file
Per correggere (compilare) un programma premere C e digitare il file
Per fare eseguire un programma (dopo averlo corretto) premere R e digitare il file
Per salvare un programma premere S e digitare il file
Per elencare i presenti nella directory digitare *.* o *.pas (se volete i file di pascal)
Per uscire da TURBO premere Q
Per salvare un programma appena editato, compilato ed eseguito in estensione COM (subito eseguibile) digitare, di seguito, O H C Q C ; Infine, cliccando con tasto destro, entrare nel programma, fare click su proprietà, poi su programma e togliere la spunta su "chiudi all'uscita".
Per uscire dall'edit di un programma e tornare a TURBO premere contemporeaneamente CTRL K D(Con rapidità e risolutezza) e (INVIO oppure X).
-----------------------------------------------------------------------------------------------
IL CICLO NELLA PROGRAMMAZIONE
In ogni programmazione vi sono tre fasi:
INPUT: Introduzione dei Dati. Avviene generalmente con write e readln.
ELABORAZIONE: Elaborando un calcolo si ha calcolo:= ........
OUTPUT: Estrazione(Stampa) dei risultati. Interviene generalmente writeln(' ').
------------------------------------------------------------------------------------------------------------
PROGRAMMI DI BASSA DIFFICOLTA'
Cliccando sui programmi(con estensione .pas) si può analizzare la loro editazione; Per la loro esecuzione,invece, cliccare su TURBO e seguire le indicazioni. Tali programmi possono poi essere trasformati con estensione .com e, quindi,subito eseguibili (Vedi sopra per il procedimento). Una buona parte dei seguenti programmi si trova eseguibile nel sito www.sampognaro.it
SOMMA (Esegue la somma di 2 Numeri): Regole sintassi: Titolo = Program sommadiduenumeri -tutto unito; Var = elenco delle variabili e loro tipo; Begin = Inizio programma; write(' ') = scrivi sulla stessa riga; writeln(' ') = scrivi e vai alla riga successiva; readln( ) =leggi e vai alla riga successiva; End. = termina il programma; ATTENZIONE: Dopo aver digitato una riga mettere sempre il ; tranne che per Var , Begin , End.
CALCOLO1 (Calcola il valore di una espressione letterale): Regole sintassi (diverse dal programma SOMMA): clrscr : pulisce lo schermo; Espressione:= 3*(x+1) [ELABORAZIONE]; Il calcolo avviene sostituendo il valore dato della x nella espressione. Se x=2 si ha Espressione:= 3*(2+1)=3*3=9.
CALCOLO2 (Calcola i valori di una espressione letterale per i valori della x che vanno da -5 a 5 nella funzione f=5*z-3):Differisce dal programma CALCOLO1 per la presenza del ciclo FOR.....TO....DO (Per x che va da ....a.... esegui) e per l'elaborazione Funzione:=5*z-3.
CALCOLO3 (Presenta la serie di Numeri Naturali da 2 a 11): Differisce da CALCOLO2 per l'assenza della funzione, ma con la presenza del comando succ(I) che calcola in automatico il successivo di un numero.
CAR_ARR (Stampa 10 valori casuali presi da 1 a 50): NUOVE REGOLE SINTASSI: randomize (valori casuali); random(50) (sceglie tra i primi 50 numeri naturali).
CAR_CAR (Stampa le lettere dell'alfabeto in maiuscolo):NB) NUOVE REGOLE SINTASSI:array[65..90] of char : sono in ASCII Decimale le lettere maiuscole dell'alfabeto.
CAR_NOMI (Dopo aver inserito un numero di città, le scrive nell'ordine di inserimento):NUOVE REGOLE SINTASSI: const NumMax=20 (Massimo 20 città); var V:array[1..20]of string[10] ->10 max lunghezza città.
CARATT (Stampa i caratteri presenti in ASCII decimale da 33 a 40):
CERCHIO(Calcola la lunghezza della circonferenza e l'area del cerchio dato il raggio):NUOVE REGOLE SINTASSI: writeln('Vuoi continuare ? SI=1 NO=0'); (significa che se si vuole rifare l'esecuzione si deve premere 1 altrimenti se si sceglie 0 si esce dal programma); repeat....until Risposta=0 (Significa che il programma sarà ripetuto finchè la risposta risulta 0=NO);
CONFRONT(Controlla se un numero è maggiore di un secondo);NUOVE REGOLE SINTASSI: controllo:boolean; Ciclo IF...THEN...ELSE (Se.....allora....altrimenti).
DADI(Presenta la somma dei risultati dei lanci di 2 dadi);
DOPPIO(Trova il doppio di un numero dato);
FUNZABS(Presenta il valore assoluto di un numero);NUOVE REGOLE SINTASSI: abs(A) risulta Valore Assoluto di A.
IMPORTO(Dato Prezzo Unitario, Tasso di sconto, Quantità minima per sconto e quantità da comprare, restituisce l'importo totale);
NUMPARI1(Stabilisce se un numero è pari o dispari con procedura booleana).
-----------------------------------------------------------------------------------------------------------
PROGRAMMI DI MEDIA DIFFICOLTA'
ALIMENTI(Test di 20 Domande su Educazione Alimentare);REGOLE DI SINTASSI PRESENTI: var .....:string(100) [introduci una frase di lunghezza max.100 caratteri]; IF...THEN..ELSE
GEOGRAFI (Test di 20 Domande su Geografia Italiana);
INFORMA1(Test di 20 Domande sui Primi Elementi di Informatica)
ITALIAN2(Test sui Detti Celebri e Parole Inglesi nella Lingua Italiana)
SCHEMA20(Test di 20 Domande vuoto)
TEST20(Test di 20 Domande sul Saper Ascoltare)
ATTUALE(Test di 20 domande su Attualità)
CARATTER(Test sul Proprio Carattere); REGOLE DI SINTASSI PRESENTI: writeln; if..then
CONCORSO(Test Concorso Scuola Magistrale)
CONVERS1(Conversione di un numero da base 10 a base b);REGOLE DI SINTASSI PRESENTI: repeat..until; for..to..do; while..do
CONVERS2(Conversione di un numero da base b a base 10); REGOLE DI SINTASSI PRESENTI: Come Convers1
CRAMER(Risolve un sistema lineare a due incognite); REGOLE DI SINTASSI PRESENTI: if...then...else
DISEQ_G2(Risolve Disequazioni di secondo grado); REGOLE DI SINTASSI PRESENTI: repeat..until; if...then...else
DISEQGR1(Risolve Disequazioni di primo grado); REGOLE DI SINTASSI PRESENTI: come diseq_g2
DIVISORI(Trova i Divisori di un numero); REGOLE DI SINTASSI PRESENTI: repeat...until ; q:=trunc(sqrt(N)) dove trunc tronca il numero di cifre decimali, sqrt significa radice quadrata; while..do
EQ_GRAD1(Risolve una Equazione di primo grado); REGOLE DI SINTASSI PRESENTI: const Titolo (stabilisce un Titolo al programma); if...then...else;
EQ_GRAD2(Risolve una Equazione di secondo grado); REGOLE DI SINTASSI PRESENTI: if..then..else
EQUAZGR1(Risolve una Equazione di primo grado); REGOLE DI SINTASSI PRESENTI: while..do; if..then..
MATEMATI(Test di 20 domande su Aritmetica e Algebra); REGOLE DI SINTASSI PRESENTI: vedi Alimenti
MCM(Calcola il minimo comune multiplo tra due numeri);REGOLE DI SINTASSI PRESENTI: while...do; if..then..else
POLINOMI(Calcola valore polinomio per x=h); REGOLE DI SINTASSI PRESENTI: array[o..k] of real (un insieme di k termini reali); for...to...do
STORIA(Test di 20 domande su Storia Contemporanea); REGOLE DI SINTASSI PRESENTI: vedi alimenti
---------------------------------------------------------------------------------------------------------
PROGRAMMI DI ALTA DIFFICOLTA'
DISEQ_G2(Risolve Disequazione di secondo grado); REGOLE DI SINTASSI PRESENTI: repeat..until; if..then..else
ALFAMAIU(Scrive le lettere dell'Alfabeto in Maiuscolo); REGOLE DI SINTASSI PRESENTI: procedure ; for...to...do
ARRAYCAS(Carica un certo numero di valori casuali); REGOLE DI SINTASSI PRESENTI: procedure; for..to..do; if..then..else; randomize
FORMULA(Risolve Triangolo con formule dirette e inverse); REGOLE DI SINTASSI PRESENTI: procedure
INTUITO(Test che misura il Quoziente Intellettivo); REGOLE DI SINTASSI PRESENTI: vedi Alimenti
--------------------------------------------------------------------------------------------------------
SPIEGAZIONE REGOLE DI SINTASSI
-----------------------------------------------------------
FASI DELLA PROGRAMMAZIONE
La prima fase risulta l'ALGORITMO che è una sequenza di istruzioni scritte nella lingua in uso (italiano). per il Programma SOMMA esso risulta il seguente:
Inizio; Dammi il primo numero=a; Dammi il secondo numero=b; Esegui la somma tra i due numeri dati: x=a+b ; Stampa il risultato; Fine.
La seconda fase è il DIAGRAMMA A BLOCCHI chiamato anche FLOW CHART che è una sequenza di figure geometriche che corrispondono alle fasi del programma : Generalmente si usa l'ellisse per INIZIO e FINE; si usa il parallelogramma per l'INPUT (introduzione dati) e l'OUTPUT (estrazione dati); si usa il rettangolo per la ELABORAZIONE; si usa il rombo per la SCELTA (if..then..else oppure repeat..until oppure while...do).
La terza fase è la CODIFICA o EDIT del programma che sviluppa l'Algoritmo con termini specifici e riconosciuti dalla macchina.
----------------------------------------------------------------------------------------------------
REGOLA DI INIZIO PROGRAMMA (Program) e IMPORTANZA DEL ; A FINE RIGO
Program Sommadiduenumeri;
Var
a,b:integer;
x:integer;
Begin <----------EDIT (CODIFICA) DEL PROGRAMMA SOMMA.PAS
writeln(' PROGRAMMA SOMMA DI DUE NUMERI ');
write('Il primo addendo risulta ');
readln(a);
write('Il secondo addendo risulta ');
readln(b);
x:=a+b;
writeln('La somma dei due numeri risulta ',x)
End.
Analizzando il programma SOMMA vediamo che ogni programma inizia con la digitazione della parola Program seguito dal titolo del file. Esso risulta tutto unito oppure unito con _ . Potevamo quindi scrivere a posto di Sommadiduenumeri la frase Somma_di_due_numeri . ATTENZIONE: Tale scritta non compare durante la esecuzione del programma. Compare invece la scritta PROGRAMMA SOMMA DI DUE NUMERI . Vedere a proposito dopo il significato di writeln.
Ogni riga deve terminare con ; . Sono esenti da questa regola le righe contenenti begin , var ,if...then...else , for...to...do , repeat...until , e la penultima riga ; Nell'ultima riga vi deve sempre essere end.
----------------------------------------------------------------------------------------------------------
VAR :
E' una parola seguita dalle variabili che intervengono nel programma seguiti dal : e dal tipo di variabili che, generalmente, possono essere integer (numeri interi), real (numeri reali), char (caratteri), string (frasi), string50 (frasi non più lunghe di 50 caratteri), boolean (vero o falso)
CONST :
E' la presentazione di una costante presente nel programma (es. pi=3,14;
CENNI SUGLI OPERATORI BOOLEANI E LE ESPRESSIONI RELAZIONALI:
Sono Operatori Booleani i termini AND , OR e NOT; Sono Espressioni Relazionali < (minore), > (maggiore), <= (minore uguale), >= (maggiore uguale), = (uguale), <> (diverso) . Se introduciamo a=56 e b=34 allora alla scritta a<b il computer risponderà false, mentre ad a>b risponderà true (vero). Ancora se a=5 , b=30 , e c=40 alla scritta (a<b)and(b<c) il computer risponderà true (vero). Per maggiori approfondimenti si rimanda allo studio della LOGICA.
--------------------------------------------------------------------------------------------------------------
BEGIN....END
Dopo la parte dichiarativa la codifica continua con begin (inizio) . Dopo begin vi sono alcune istruzioni (di INPUT - Elaborazione - OUTPUT e quindi la codifica del programma termina con end. I termini begin....end; si possono anche usare in codifiche di sottoprogrammi presenti nel programma in presenza di while...do (vedi dopo)
-------------------------------------------------------------------------------------------------------------------------
WRITE,WRITELN, READ,READLN
Nella fase di INPUT (Introduzione dei dati) si utilizzano insieme i termini inglesi WRITE (scrivi e leggi nello stesso rigo), READLN (Leggi e vai al rigo successivo) -->vedi sopra la codifica del programma SOMMA; Invece per far stampare 'qualcosa' al computer si utilizza WRITELN('qualcosa'); e lo stesso si usa nell'OUTPUT che non è altro la stampa dei risultati. Quindi i significati delle suddette quattro parole sono: WRITE : scrivi (stampa) e resta nella stessa riga; WRITELN : scrivi(stampa) e vai alla riga successiva; READ : Leggi e resta nella stessa riga; READLN : Leggi e vai alla riga successiva.
-------------------------------------------------------------------------------------------------------------------------
INPUT, ELABORAZIONE, OUTPUT
INPUT è la fase della CODIFICA di introduzione dei dati :Si utilizzano i termini WRITE e READLN; ELABORAZIONE è la parte della codifica dove si elaborano i dati. Nel programma SOMMA essa è data da x:=a+b; OUTPUT è la fase della codifica dove si estraggono(stampano) i risultati : Si utilizza generalmente il termine WRITELN.
----------------------------------------------------------------------------------------------------------------------------
IF...THEN...ELSE
E' un ciclo iterativo molto usato anche nella lingua italiana (SE...ALLORA...ALTRIMENTI); Lo si utilizza nella codifica per la scelta tra due alternative.Ad esempio si può scrivere IF a>b THEN writeln('a risulta maggiore di b') ELSE writeln('a risulta minore di b'); Un esempio di applicazione si trova nella seguente codifica del programma CONFRONT:
Program Confront;
(*Dati due numeri, riconoscere se il primo risulta maggiore del secondo*)
Var
numero1,numero2:integer;
controllo:boolean;
Begin
ClrScr;
writeln('Dati due numeri interi, riconoscere se il primorisulta maggiore ',
'del secondo');
writeln;
write('Scrivi il primo numero: ');readln(numero1);
write('scrivi il secondo numero: ');readln(numero2);
controllo:=numero1>numero2;
write(numero1,' risulta maggiore di ',numero2,'? ');
if controllo=True
then writeln('si')
else writeln('no');
writeln;
write('Premere Return per terminare');
readln
End.
--------------------------------------------------------------------------------------------------------------------------------
FOR....TO....DO
Anche questo ciclo iterativo lo troviamo nella Lingua Italiana (PER x che va da 5 A 12 ESEGUI). Lo si utilizza per creare un insieme di risultati quando la variabile assume un insieme di valori consecutivi. Capire il significato di esso analizzando la seguente codifica del programma CALCOLO2:
program Calcolo2;
var X,F:integer;
function Funzione(Z:integer):integer;
begin
Funzione:=5*Z-3;
end;
begin (*main program*)
ClrScr;
for X:=-5 to 5 do
begin
F:=Funzione(X);
writeln('x=',X,'---->F(',X,')=',F);
end;
readln;
end.
-----------------------------------------------------------------------------------------------------------------------------
REPEAT.....UNTIL
E' un ciclo iterativo usato anche nella Lingua Italiana (RIPETI un dato argomento FINCHE'). Una applicazione relativa si trova nel programma del quale segue la codifica:
program Divisori;
var N,Q,K,D,R: integer;
Risposta:integer;
begin
repeat
ClrScr;
write('introduci un intero positivo:');
readln(N);
Q:=trunc(sqrt(N));
K:=1;
writeln('***DIVISORI DI',N:5,'***');
while K <= N do
begin
D:=N div K;
R:=N mod K;
if R=0 then
writeln(K:20,D:20);
K:=K+1;
end;
writeln('vuoi continuare?SI=1,NO=0');
readln(Risposta);
until(Risposta=0);
end.
----------------------------------------------------------------------------------------------------------------------------------------
WHILE....DO
Anche questo è un ciclo iterativo presente nella lingua italiana (FINCHE' x<5 ESEGUI). Un esempio è presente nel programma DIVISORI la cui codifica è stata presentata nel paragrafo precedente.
----------------------------------------------------------------------------------------------------------------------------------------
PROCEDURE
Risultano essere dei sottoprogrammi presenti entro il programma principale e che si comportano da indipendenti ai quali si collega il programma principale per la sua esecuzione. Un esempio di procedura è presente nel programma FORMULE del quale si presenta la seguente codifica:
program FormulaTriangolo;
(*utilizza la formula: Area=(Base*Altezza)/2*)
var Area, Base, Altezza:real;
Scelta:byte;
procedure AreaTriangolo;
begin
writeln('introduci le misure di Base e Altezza:');
readln(Base,Altezza);
Area:=(Base*Altezza)/2;
writeln('AREA TRIANGOLO=',AREA:0:2);
end;
procedure BaseTriangolo;
begin
writeln('introduci Area e misura della Altezza:');
readln(Area,Altezza);
Base:=(Area*2)/Altezza;
writeln('MISURA BASE TRIANGOLO=',Base:0:1);
end;
procedure AltezzaTriangolo;
begin
writeln('introduci Area e misura della Base:');
readln(Area, Base);
Altezza:=(Area*2)/Base;
writeln('MISURA ALTEZZA TRIANGOLO=',Altezza:0:1);
end;
begin (*main program*)
ClrScr;
writeln('SCELTA DEL MENU');
writeln('Premi:1 per Area ** 2 per Base ** 3 per Altezza');
readln(Scelta);
case Scelta of
1: AreaTriangolo; (*chiamata della procedura AreaTriangolo*)
2: BaseTriangolo;
3: AltezzaTriangolo;
end; (*fine case*)
readln;
end.
------------------------------------------------------------------------------------------------------------------------------------------
writeln('VUOI CONTINUARE ? SI=1 NO=0 ')
Si utilizza questa scelta quando si desidera rieseguire un determinato programma. Se si preme 1 il programma viene rieseguito; premendo 0 si esce dal programma. Un esempio è presente nel programma CERCHIO del quale si presenta la relativa codifica:
program Cerchio;
var Raggio,Lunghezza,Area:real;
Risposta:integer;
begin
repeat
ClrScr;
write('immetti la misura del raggio:');
readln(Raggio);
Lunghezza:=2*PI*Raggio;
Area:=PI*sqr(Raggio);
writeln('lunghezza circonferenza:',Lunghezza:4:1);
writeln('area cerchio:',Area:6:2);
writeln('Premi INVIO');
readln;
writeln('vuoi continuare? SI=1 NO=0');
readln(Risposta)
until Risposta=0;
end.
---------------------------------------------------------------------------------------------------------------------------------------
SIGNIFICATO DI PAROLE PRESENTI NELLE CODIFICHE:
trunc(a) =Scrive la parte intera di un numero decimale;
pred(a) =Scrive il numero precedente di a;
succ(a) =Scrive il numero successivo di a;
abs(a) = Restituisce il valore assoluto di a;
sqrt(a) = Calcola la radice quadrata di a;
randomize = E' una procedura per i numeri casuali;
random(a) = Restituisce numeri casuali minori di a;
sqr(a) =Calcola il quadrato di a;
a mod b =Trova il resto della divisione tra a e b;
a div b = Trova il quoziente della divisione tra a e b;
clrscr =Pulisce lo schermo e porta il cursore in alto a sinistra;
array[1...10] of char = Chiede un insieme di 10 caratteri;
string(30) = Chiede una frase lunga non oltre 30 caratteri;
array[1...15] of string(20) = Chiede un insieme di 15 frasi di lunghezza non superiore a 20 caratteri;
--------------------------------------------------