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 :

-----------------------------------------------------------------------------------------------

IL  CICLO NELLA PROGRAMMAZIONE

In ogni programmazione vi sono tre fasi:

  1. INPUT: Introduzione dei Dati. Avviene generalmente con write e readln.

  2. ELABORAZIONE: Elaborando un calcolo si ha calcolo:= ........

  3. 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

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.

----------------------------------------------------------------------------------------------------

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;

--------------------------------------------------