Pascal Prof Grisolia Guglielmo I T C G

  • Slides: 49
Download presentation
Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 1

Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 1

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

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. Una volta avviato il Turbo. Pascal si presenterà un' interfaccia a menu abbastanza intuitiva. Compariranno vari menu, ma quelli principali sono tre: File, Edit, Program. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 2

Il primo (FILE) è formato da New, per crere un nuovo documento di lavoro;

Il primo (FILE) è formato da New, per crere un nuovo documento di lavoro; Open, per aprire lavori già salvati; Save, registra un lavoro che abbiamo già creato, Save As… assegna un nome al programma da salvare. N. b. l’estensione del file viene inserita in automatico dal programma (PP). Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 3

Nel menu (Program) il comando Compile, compila il programma (lo trasforma in linguaggio macchina),

Nel menu (Program) il comando Compile, compila il programma (lo trasforma in linguaggio macchina), mentre il comando Run ci permette di eseguirlo. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 4

Un programma scritto in TP consta in tre sezioni principali: sezione intestazione, sezione dichiarazioni

Un programma scritto in TP consta in tre sezioni principali: sezione intestazione, sezione dichiarazioni e sezione esecutiva. 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: una variabile non può chiamarsi PROGRAM, BEGIN, END, WRITE, ecc. in quanto sono parole riservate del linguaggio Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 5

Ora cominceremo con l' abbozzo di un programmino semplice: sommare due numeri. Apriamo l’editor

Ora cominceremo con l' abbozzo di un programmino semplice: sommare due numeri. Apriamo l’editor del Pascal (trovare il programma nella cartella chiamata WFP; aprite la relativa applicazione e digitiamo le seguenti istruzioni (programma per calcolare la somma tra due numeri). Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 6

Al termine lo salviamo dal comando FILE SAVE AS… col nome SOMMA Pascal -

Al termine lo salviamo dal comando FILE SAVE AS… col nome SOMMA Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 7

Compiliamo il nostro programma dal menu PROGRAM COMPILE Pascal - Prof. Grisolia Guglielmo -

Compiliamo il nostro programma dal menu PROGRAM COMPILE Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 8

Ed infine lanciamo l nostro programma PROGRAM RUN Pascal - Prof. Grisolia Guglielmo -

Ed infine lanciamo l nostro programma PROGRAM RUN Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 9

Nella parte dichiarativa abbiamo comunicato all'elaboratore che n è una variabile (VAR) che nel

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' consigliata 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. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 10

Un’altra fondamentale istruzione è WRITELN (abbreviazione Write Line = scrivi riga); essa serve a

Un’altra fondamentale istruzione è WRITELN (abbreviazione Write Line = scrivi riga); essa serve a visualizzare 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à visualizzato sullo schermo; nel caso in cui WRITELN venga usato senza parametri l'elaboratore lascerà una riga vuota durante l'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, troviamo END seguito da un punto. Esso indica la fine del flusso delle istruzioni e il conseguente arresto del programma. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 11

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

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 VARIABILI NUMERICHE BYTE 0 / 255 WORD 0 / 65536 INTEGER REAL -32768 / +32767 29 -36 / 1535 VARIABILI ALFANUMERICHE STRING (X) CHAR (X) X Caratteri alfanumerici (per variabili lunghe) X Caratteri alfanumerici Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 12

Altro esempio: calcolare il triplo di un numero dato. PROGRAM doppio; (* Sezione dell'

Altro esempio: calcolare il triplo di un numero dato. 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 ('Introduci un numero intero'); Readln (n); n : = n * 3; Writeln ('Il triplo è: ' , n); writeln; Writeln (‘Premi enter per finire'); readln; end. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 13

Di seguito troverete dei comandi che potrebbero tornare utili in qualche programmino. 1) TEXTCOLOR

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. 2) TEXTBACKGROUND (n)= colora lo sfondo d un colore definito da n. Sintassi simile a TEXTCOLOR. 3) SQRT(x) = Calcola la radice quadrata di x; 4) DELAY(n) = Crea un ciclo di attesa lungo n ( miliisecondi) 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 ) Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 14

Inoltre per indicare il rapporto fra due cifre ci serviamo dei seguenti simboli matematici:

Inoltre per indicare il rapporto fra due cifre ci serviamo dei seguenti simboli matematici: '<‘ = MINORE '>‘ = MAGGIORE '=' = UGUALE '=>‘ = MAGGIORE O UGUALE '<=‘ = MINORE O UGUALE '<>' = DIVERSO DA. . . Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 15

uses crt; { utilizziamo la libreria (crt) per gestire il monitor} uses crt va

uses crt; { utilizziamo la libreria (crt) per gestire il monitor} uses crt va definito dopo il nome del programma es: PROGRAM COLORE; uses crt; textbackground (numero); {dove il numero (tra 1 e 7) indica il colore dello sfondo prescelto - n. b. prima di clrscr} clrscr; {puliamo il video, dopo aver definito la libreria (crt)} textcolor (numero); {dove il numero (tra 1 e 15) indica il colore del testo prescelto} Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 16

program colourexample; uses crt; { utilizziamo la libreria (crt) per gestire il monitor} var

program colourexample; uses crt; { utilizziamo la libreria (crt) per gestire il monitor} var a, b : integer; begin writeln ('inserire il colore per lo sfondo'); readln (b); textbackground (b); {colore sfondo prescelto con 'b‘ - n. b. prima di clrscr} clrscr; {puliamo il video, dopo aver definito la libreria (crt)} writeln ('inserire il colore preferito da 1 a 15'); readln (a); textcolor (a); {colore del testo prescelto con 'a'} writeln (‘numero del colore del testo prescelto: ‘ , a); repeat until keypressed; {al premere di un tasto si ritorna al presente listato} end. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 17

program scelta; uses crt; var lunghezza : integer; testo : string; begin clrscr; writeln;

program scelta; uses crt; var lunghezza : integer; testo : string; begin clrscr; writeln; {inseriamo una riga vuota} writeln; writeln ('Programma per calcolare la lunghezza di un testo'); writeln ('Inserisci testo'); writeln; readln (testo); lunghezza: = length(testo); {il comando length restituisce il numero di caratteri} writeln; writeln ('La lunghezza del testo è: '); textcolor (3); writeln (lunghezza); writeln; textcolor (11); writeln (‘Cognome e Nome 2012'); {digitare il vostro cognome, nome ed anno scolastico} writeln ('Premi enter per uscire'); repeat until keypressed; end. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 18

program QUADRATO; uses CRT; VAR L : INTEGER; A, P : REAL; BEGIN CLRSCR;

program QUADRATO; uses CRT; VAR L : INTEGER; A, P : REAL; BEGIN CLRSCR; WRITELN; TEXTCOLOR (YELLOW); WRITELN ('PROGRAMMA PER CALCOLARE AREA E IL PERIMETRO DI UN QUADRATO'); WRITELN; TEXTCOLOR (RED); WRITELN ('INSERIRE IL LATO DEL QUADRATO'); READLN (L); {INSERIAMO IL LATO DEL QUADRATO} P : = L * 4; {CALCOLIAMO IL PERIMETRO: LATO PER 4} A : = SQR(L); {CALCOLIAMO L'AREA} TEXTCOLOR(2); WRITELN ('PERIMETRO CALCOLATO: ' , P: 6: 2); WRITELN ('AREA CALCOLATA: ' , A: 7: 2); repeat until keypressed; END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 19

program dati_anagrafici; var nome, cognome, eta, comune, via: string; {n. b. le variabili non

program dati_anagrafici; var nome, cognome, eta, comune, via: string; {n. b. le variabili non accettano l’apostrofo} begin Writeln ('Questo programma visualizza i tuoi dati anagrafici'); writeln ('Inserisci il tuo nome'); readln (nome); writeln ('Inserisci il tuo cognome'); readln (cognome); writeln ('Inserisci la tua età’); readln (eta); writeln ('Inserisci il tuo comune’); readln(comune); writeln ('Inserisci il tuo indirizzo'); readln(via); writeln; writeln ('Il tuo nome è: ‘ , nome); writeln ('Il tuo cognome è: ‘ , cognome); writeln ('Hai , eta , ' anni'); writeln ('Vivi nel comune di; ‘ , comune, ' e abiti in ‘ , via); Writeln ('Premi enter per uscire'); readln; end. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 20

Se consideriamo un numero naturale qualsiasi e ci domandiamo se esso è pari, la

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 tra due condizioni con il seguente comando: IF THEN ELSE che tradotto fa più o meno: SE ALLORA ALTRIMENTI Ad 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); Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 21

PROGRAM area_rettangolo; USES CRT; VAR BASE, ALTEZZA, AREA : INTEGER; BEGIN AREA : =

PROGRAM area_rettangolo; USES CRT; VAR BASE, ALTEZZA, AREA : INTEGER; BEGIN AREA : = 0; {AZZERIAMO LA VARIABILE DI ARRIVO (AREA)} CLRSCR; (*Pulisce lo schermo*) WRITELN (‘IL SEGUENTE PROGRAMMA CALCOLA L’’AREA DEL RETTANGOLO’); WRITELN (' Inserisci base'); READLN (BASE); WRITELN ('Inserisci l’’altezza'); READLN (ALTEZZA); AREA : = BASE * ALTEZZA; Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 22

IF (AREA > 10) AND (AREA < 20) THEN (* AND , insieme a

IF (AREA > 10) AND (AREA < 20) THEN (* AND , insieme a OR sono gli operatori booleani più usati in TP. Si basano sulle tabelle di verità – Per AND: V+V = V; V+F = F; F+V = F; F+F = F Per OR: V+V = V; V+F = V; F+V = V; F+F = F *) BEGIN WRITELN ('Area maggiore di 20 oppure minore di 10. '); END ( * END prima dell' ELSE senza punto e virgola(; ) * ) ELSE BEGIN WRITELN (' AREA DEL RETTANGOLO = ', AREA); END; repeat until keypressed; END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 23

Creare un algoritmo che calcoli il totale di una fattura. In Input abbiamo: PU:

Creare un algoritmo che calcoli il totale di una fattura. In Input abbiamo: PU: Prezzo Unitario della merce; Q: Quantità della stessa; ALIQUOTA: aliquota dell’I. V. A. ; Dopo aver determinato l’imponibile (prezzo unitario * quantità), bisogna calcolare l’I. V. A. che è data dall’imponibile per l’aliquota diviso 100. ! Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 24

program FATTURA; {Il presente algoritmo calcola la fattura} uses crt; var PU, Q, ALIQUOTA,

program FATTURA; {Il presente algoritmo calcola la fattura} uses crt; var PU, Q, ALIQUOTA, IVA, IMPONIBILE, TOTALE : real; begin clrscr; textcolor(13); writeln ('Questo programma calcola il costo della fattura '); writeln; textcolor(yellow); writeln (‘ Inserisci il prezzo unitario della merce '); readln (PU); writeln (‘ Inserisci la quantità della merce '); readln (Q); writeln (‘ Inserisci l’’aliquota dell’I. V. A. '); readln (ALIQUOTA); writeln; Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 25

IMPONIBILE : = 0; IVA : = 0; TOTALE : = 0; {azzeriamo le

IMPONIBILE : = 0; IVA : = 0; TOTALE : = 0; {azzeriamo le variabili di arrivo} IMPONIBILE: = PU * Q; {calcoliamo l’imponibile} IVA: = (IMPONIBILE * ALIQUOTA) / 100; {calcoliamo l’IVA} TOTALE: = IMPONIBILE + IVA; {calcoliamo il totale della fattura} writeln; writeln ('Il costo complessivo della fattura è: ‘ , TOTALE: 6: 3); { totale: 6: 3 = sei cifre intere e tre decimali } writeln; writeln (‘Cognome e nome del programmatore'); writeln; writeln ('Premi enter per uscire'); repeat until keypressed; end. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 26

Creare un algoritmo che calcoli il noleggio di un mezzo di trasporto comprensivo di

Creare un algoritmo che calcoli il noleggio di un mezzo di trasporto comprensivo di IVA. In Input abbiamo: KMP: Kilo. Metri Percorsi; LPT: Limite Prima Tariffa; QF: Quota Fissa; CPT: Costo Prima Tariffa; CST: Costo Seconda Tariffa. Se i chilometri percorsi non superano i limiti imposti dalla prima tariffa (Falso) il costo complessivo (CC) è calcolato moltiplicando il costo della prima tariffa per i chilometri percorsi con l’aggiunta della quota fissa altrimenti (Vero) bisogna aggiungere al costo pieno (costo prima tariffa * limite prima tariffa) la differenza dei chilometri che rientrano nella seconda tariffa. Infine calcolare l’IVA, supponendo l’aliquota al 21%, ed aggiungerla all’imponibile! Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 27

program noleggio; uses crt; var qf, lpt, cst, al, kmp: integer; iva, cc: real;

program noleggio; uses crt; var qf, lpt, cst, al, kmp: integer; iva, cc: real; begin clrscr; Terxtcolor(12); writeln ('Questo programma calcola il costo del noleggio'); writeln (‘ Inserisci i Km percorsi'); readln (kmp); writeln (‘ Inserisci il limite dei Km per la prima tariffa'); readln (lpt); writeln (‘ Inserisci la quota fissa'); readln (qf); writeln (‘ Inserisci il costo della prima tariffa'); readln (cpt); writeln (‘ Inserisci il costo della seconda tariffa'); readln (cst); Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 28

cc : = 0; iva : = 0; al : = 21; {azzeriamo le

cc : = 0; iva : = 0; al : = 21; {azzeriamo le variabili di arrivo} if kmp > lpt {condizione: km percorsi > limite prima tariffa? } then cc : = cpt * lpt + cst * (kmp - lpt) {vero il costo è dato dal costo della prima tariffa per il limite della stessa più il costo della seconda tariffa per la differenza tra i km percorsi ed il limite dei Km imposti dalla prima tariffa} else begin cc: = cpt * kmp; {falso aggiungiamo al costo la quota fissa 1ª tariffa} cc : = cc + qf; end; {è stato inserito il comando begin perché sono previste due istruzioni} iva : = (cc * al) / 100; {calcoliamo l’IVA} cc : = cc + iva; {aggiungiamo l’IVA all’imponibile} writeln; writeln ('Il costo complessivo del noleggio è: ‘ , cc: 6: 3); {6 cifre intere e 3 decimali} writeln; writeln (‘Cognome e nome del programmatore'); {volendo colorare col comando textcolor ( )} writeln; writeln ('Premi enter per uscire'); repeat until keypressed; Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero end. 29

Creare un algoritmo che risolva il Teorema di Pitagora. In Input abbiamo: C 1:

Creare un algoritmo che risolva il Teorema di Pitagora. In Input abbiamo: C 1: Cateto 1; C 2: Cateto 2; Calcolarne l’Ipotenusa come stabilito dal suddetto Teorema. Il quadrato costruito sull’ipotenusa è pari alla somma dei quadrati costruiti sui cateti, Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 30

program PITAGORA; uses CRT; VAR C 1, C 2, I, QC 1, QC 2,

program PITAGORA; uses CRT; VAR C 1, C 2, I, QC 1, QC 2, QI : REAL; BEGIN CLRSCR; I: =0; QC 1: =0; QC 2: =0; WRITELN; TEXTCOLOR (RED); WRITELN ('PROGRAMMA DIMOSTRAZIONE TEOREMA DI PITAGORA'); WRITELN; TEXTCOLOR (YELLOW); WRITELN ('INSERIRE IL PRIMO CATETO DEL TRIANGOLO'); READLN (C 1); {INSERIAMO IL 1* CATETO DEL TRIANGOLO} TEXTCOLOR (GREEN); WRITELN ('INSERIRE IL 2° CATETO DEL TRIANGOLO'); READLN (C 2); {INSERIAMO IL 2° CATETO DEL TRIANGOLO} Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 31

{CALCOLIAMO IL QUADRATO DEI DUE CATETI} QC 1 : = SQR(C 1); QC 2

{CALCOLIAMO IL QUADRATO DEI DUE CATETI} QC 1 : = SQR(C 1); QC 2 : = SQR(C 2); {L'AREA DELL'IPOTENUSA E’ DATA DALLA SOMMA DEI QUADRATI DEI CATETI} QI : = QC 1 + QC 2; {RADICE PER DETERMINARE L'IPOTTENUSA} I : = SQRT(QI); TEXTCOLOR(2); WRITELN ('IPOTENUSA CALCOLATA: ' , I repeat until keypressed; END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero : 6 : 2); 32

Se domandiamo ad una persona quali sono i piatti che preferisce essa sceglierà fra

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 istruzione 1; istruzione. . . END; CASE n of ( * Se n è stata dichiarata CHAR * ) valore x: BEGIN istruzione 1; istruzione. . . ; END; ELSE BEGIN istruzione 1; istruzione 2; istruzione. . . ; END; Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 33

Nonostante la sua sintassi sembra complessa in realtà, questa struttura, è di facilissima comprensione.

Nonostante la sua sintassi sembra complessa in realtà, 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. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 34

PROGRAM numeri_casuali; {si usa underscore (_) per unire i nomi} VAR numero: INTEGER; BEGIN

PROGRAM numeri_casuali; {si usa underscore (_) per unire i nomi} VAR numero: INTEGER; BEGIN CLRSCR; RANDOMIZE; (* Inizializza, il generatore di numeri casuali * ) numero: =RANDOM(10); (*Questo comando (randomize) permette all'elaboratore di generare un numero a caso compreso tra 0 e il numero indicato in parentesi. Il massimo consentito è 255 * ) CASE numero OF 7: BEGIN WRITELN (' Il numero è ', numero); END; 9: BEGIN WRITELN (' Il numero è ', numero); END; 3: BEGIN WRITELN (' Il numero è ', numero); END; ELSE BEGIN WRITELN (' Il numero uscito è diverso da 3, 7 e 9’); END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 35

Per spostarci all’interno del listato dobbiamo definire delle label Prima del comando var dobbiamo

Per spostarci all’interno del listato dobbiamo definire delle label Prima del comando var dobbiamo indicare quante ne serviranno all’interno del listato Label numero 1, numero 2, numero 3, ecc… All’interno delle istruzioni (dopo il begin) definiamo i punti di partenza delle label numero 1: istruzioni …. numero 2: istruzioni …. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 36

program abbonamento_autobus; uses crt; label 10, 20, 30; var b, tipo, p, m :

program abbonamento_autobus; uses crt; label 10, 20, 30; var b, tipo, p, m : integer; tot, s, t : real; {le label ci permettono di spostarci all’interno del listato} begin clrscr; tot: =0; s: =0; t: =200; b: =50; s: =40; p: =30; m: =80; {avvaloriamo le variabili} writeln ('Questo programma serve per calcolare il costo dello abbonamento dell’autobus'); writeln; 10: clrscr; Writeln ('Costo Abbonamento 200 Euro al mese - scegli il tipo: '); writeln (' 1 per i bambini, sconto 50%'); {volendo colorare col comando textcolor ( )} writeln; writeln (' 2 per gli studenti, sconto 40%'); writeln (' 3 per i pensionati, sconto 30%'); writeln (' 4 per i militari, sconto 80%'); writeln (' 5 nessuno sconto'); writeln (' 0 per uscire'); readln (tipo); Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 37

if (tipo >= 0) and (tipo <= 5) then goto 20 else goto 10;

if (tipo >= 0) and (tipo <= 5) then goto 20 else goto 10; {se tipo non compreso tra 1 e 5 ritorna label 10} 20: clrscr; if tipo = 0 then goto 30 else {se tipo = 0, si esce dall’algoritmo, label 30} begin case tipo of 1: begin {se tipo = 1, bambini: sconto del 50%, b=50} s : = (t * b) / 100; end; 2: begin {se tipo = 2, studenti: sconto del 40%, s=40} s : = (t * s) / 100; end; 3: begin {se tipo = 3, pensionati: sconto del 30%, p=30} s : = (s * p) / 100; end; 4: begin {se tipo = 4, militari: sconto dell’ 80%, m=80} s : = (t * m) / 100; end; 5: begin {se tipo = 5, non si applicano sconti} s : = 0 end; writeln; tot : = t - s; writeln ('Il costo dello abbonamento è: ', tot: 5: 2, ' Euro '); {5 cifre intere e 2 decimali} writeln; 30: writeln (‘Cognome, nome e anno scolastico'); writeln ('Premi enter per. Grisolia uscire'); Guglielmo - I. T. C. G. T. Castrolibero Pascal - Prof. 38 readln;

Il termine iterare deriva dal latino e significa "ripetere". Questa struttura (che è presente

Il termine iterare deriva dal latino e significa "ripetere". Questa struttura (che è presente in tutti i linguaggi di programmazione, non solo in Pascal, agisce su una operazione che deve essere ripetuta più volte. Ne esistono vari tipi: a) Iterazione enumerativa FOR primo valore TO ultimo valore; b) Iterazione per falso REPEAT ISTRUZIONE UNTIL CONDIZIONE; c) Iterazione per vero WHILE CONDIZIONE DO BEGIN ISTRUZIONE END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 39

a) Iterazione enumerativa - Come dice la parola stessa esegue un operazione n volte.

a) Iterazione enumerativa - Come dice la parola stessa esegue un operazione n volte. In Pascal è indicata dal comando: FOR a=: numero iniziale TO numero finale DO (*Niente punto e virgola *) istruzione 1; istruzione. . . ; END; è possibile 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; VAR A, B, C, i: INTEGER; BEGIN WRITELN ('INSERISCI UN NUMERO'); READLN (A); WRITELN ('ISERISCI LA POTENZA'); READLN (B); C: =1; (* Avvaloriamo la variabile C con 1*) FOR i: = 1 TO B DO BEGIN C: =C*A; END; WRITELN ('RISULTATO: ', C); READLN; END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 40

b) Ripete le istruzioni racchiuse tra REPEAT e UNTIL finché la condizione espressa da

b) Ripete le istruzioni racchiuse tra REPEAT e UNTIL finché la condizione espressa da UNTIL non si verifica (iterazione per falso). REPEAT istruzione 1; istruzione 2; istruzione. . . ; UNTIL condizione; Ecco un semplice esempio: PROGRAM ripetizione; 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. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 41

c) Iterazione per vero - Esegue le informazioni racchiuse tra WHILE DO e l'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. PROGRAM ripetizione; VAR a, b, c: INTEGER; BEGIN WHILE a = 3 DO BEGIN WRITELN (‘ Inserisci un numero, se diverso da 3 fine '); READLN (b); c : = c + b; END; WRITELN (‘SOMMA DEI VALORI: ’, c); READLN; END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 42

program calcola_tabellina; uses crt; var tabellina, i, n, z : integer; begin clrscr; WRITELN;

program calcola_tabellina; uses crt; var tabellina, i, n, z : integer; begin clrscr; WRITELN; writeln ('Stampa a video una tabellina scelta da te'); writeln ('Programma per stampare a video una qualsiasi tabellina scelta da te'); writeln ('Inserisci il numero di cui vuoi sviluppata la sua tabellina'); writeln; readln (tabellina); writeln; i : = 0; for i : = 1 to 10 do begin n : = n + 1; z : = tabellina * n; writeln (z); end; writeln ('Premi enter per uscire'); readln; Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero end. 43

program media_voti; uses crt; var voto, a, nvolte, i : integer; tot, media :

program media_voti; uses crt; var voto, a, nvolte, i : integer; tot, media : real; begin clrscr; writeln ('Questo programma calcola la media dei tuoi voti'); writeln (‘Quanti sono i voti da cui ricavare la media? '); readln (nvolte); a : = 0; tot : = 0; media : = 0; for i : = 1 to nvolte do begin a : = a + 1; writeln ('Inserisci il voto: ‘ , a); readln(voto); tot : = tot + voto; end; media: = tot / nvolte; writeln ('La tua media è: ‘ , media: 2: 2); writeln (‘Cognome e nome del programmatore'); writeln ('Premi enter per chiudere il programma'); readln; Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero end. 44

PROGRAM OPERAIO; USES CRT; VAR ENTERM, EXITM, ENTERP, EXITP, TOTORELAV, TOTML, PAGAO, PAGAG, ORELAVM,

PROGRAM OPERAIO; USES CRT; VAR ENTERM, EXITM, ENTERP, EXITP, TOTORELAV, TOTML, PAGAO, PAGAG, ORELAVM, MINLAVM, ORELAVP, MINLAVP : REAL; VAR NOME : STRING[20]; BEGIN CLRSCR; PAGAO : = 0; PAGAG : = 0; WRITELN ('INSERISCI PAGA ORARIA'); READLN (PAGAO); REPEAT WRITELN ('INSERISCI NOME OPERAIO'); READLN (NOME); WRITELN ('INSERISCI ORARIO ENTRATA MATTINA'); READLN (ENTERM); WRITELN ('INSERISCI ORARIO USCITA MATTINA'); READLN (EXITM); WRITELN ('INSERISCI ORARIO ENTRATA POMERIGGIO'); READLN (ENTERP); WRITELN ('INSERISCI ORARIO USCITA POMERIGGIO'); READLN (EXITP); Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 45

ORELAVM : = EXITM - ENTERM; MINLAVM : = ORELAVM * 60; ORELAVP :

ORELAVM : = EXITM - ENTERM; MINLAVM : = ORELAVM * 60; ORELAVP : = EXITP - ENTERP; MINLAVP : = ORELAVP * 60; TOTORELAV : = ORELAVM + ORELAVP; TOTML : = MINLAVM + MINLAVP; PAGAG : = PAGAO * TOTORELAV; WRITELN('INSERISCI PAGA ORARIO'); READLN(PAGAO); UNTIL PAGAO = 0; WRITELN ('TOTALE ORE LAVORATE: ', TOTORELAV: 5: 2); WRITELN ('TOTALE MINUTI LAVORATI SONO: ', TOTML: 5: 2); WRITELN ('LA PAGA GIORNALIERA DELL'OPERAIO: ', PAGAG: 5: 3); READLN; END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 46

PROGRAM OPERAIO; USES CRT; VAR ENTERM, EXITM, ENTERP, EXITP, TOTORELAV, TOTML, PAGAO, PAGAG, ORELAVM,

PROGRAM OPERAIO; USES CRT; VAR ENTERM, EXITM, ENTERP, EXITP, TOTORELAV, TOTML, PAGAO, PAGAG, ORELAVM, MINLAVM, ORELAVP, MINLAVP : REAL; VAR NOME : STRING[20]; BEGIN CLRSCR; PAGAO : = 0; PAGAG : = 0; WRITELN ('INSERISCI PAGA ORARIA'); READLN (PAGAO); WHILE PAGAO <> O DO BEGIN WRITELN ('INSERISCI NOME OPERAIO'); READLN (NOME); WRITELN ('INSERISCI ORARIO ENTRATA MATTINA'); READLN (ENTERM); WRITELN ('INSERISCI ORARIO USCITA MATTINA'); READLN (EXITM); WRITELN ('INSERISCI ORARIO ENTRATA POMERIGGIO'); READLN (ENTERP); WRITELN ('INSERISCI ORARIO USCITA POMERIGGIO'); READLN (EXITP); Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 47

ORELAVM : = EXITM - ENTERM; MINLAVM : = ORELAVM * 60; ORELAVP :

ORELAVM : = EXITM - ENTERM; MINLAVM : = ORELAVM * 60; ORELAVP : = EXITP - ENTERP; MINLAVP : = ORELAVP * 60; TOTORELAV : = ORELAVM + ORELAVP; TOTML : = MINLAVM + MINLAVP; PAGAG : = PAGAO * TOTORELAV; WRITELN('INSERISCI PAGA ORARIO'); READLN(PAGAO); END; WRITELN ('TOTALE ORE LAVORATE: ', TOTORELAV: 5: 2); WRITELN ('TOTALE MINUTI LAVORATI SONO: ', TOTML: 5: 2); WRITELN ('LA PAGA GIORNALIERA DELL'OPERAIO: ', PAGAG: 5: 3); READLN; END. Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 48

Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 49

Pascal - Prof. Grisolia Guglielmo - I. T. C. G. T. Castrolibero 49