Pascal - Modulo A, Unità Didattica 4

Transcript

Pascal - Modulo A, Unità Didattica 4
Utilizziamo gli operatori matematici e commentiamo il codice •
Unità 4
UNITÀ DIDATTICA 4
UTILIZZIAMO
GLI OPERATORI MATEMATICI
E COMMENTIAMO IL CODICE
IN QUESTA UNITÀ IMPAREREMO...
• come utilizzare gli operatori matematici
• come commentare un programma
• come utilizzare la funzione div
■ Istruzioni in sequenza e commenti
La prima caratteristica di un programma Pascal (e dei linguaggi chiamati “imperativi”) è
quella di eseguire una istruzione di seguito all’altra, nello stesso identico ordine con cui il
programmatore le ha scritte.
Questo schema operativo prende il nome di esecuzione sequenziale, ed è descritto graficamente dal seguente schema a blocchi:
istruzione
istruzione
istruzione
La freccia indica il flusso di esecuzione, cioè la sequenza con cui le istruzioni vengono eseguite.
LE PAROLE DELL’INFORMATICA
Linguaggio imperativo Esecuzione sequenziale che essenzialmente realizza modifiche del
valore dei dati in memoria; si pensa il programma come sequenza di comandi (istruzioni).
29
Modulo A
• Programmiamo in Pascal
Uno specifico linguaggio di programmazione implementa un modo di pensare: il processo di computazione prende anche il nome di paradigma di computazione.
Il Pascal rientra tra i linguaggi con paradigma imperativo.
LE PAROLE DELL’INFORMATICA
Paradigma di computazione Un paradigma di computazione definisce strutture e fattori che
accomunano linguaggi di programmazione apparentemente diversi e che differiscono sostanzialmente dai linguaggi che appartengono ad altri paradigmi.
In Pascal l’inizio e la fine di una sequenza di istruzioni vengono indicati mediante due
parole riservate:
begin
.
.
.
end
e sono le stesse due parole riservate che indicano in un programma dove iniziano e finiscono
le istruzioni “operative”, al termine della sezione in cui sono state dichiarate le variabili.
Oltre alle istruzioni, nel programma è possibile inserire delle righe con la spiegazione delle
istruzioni stesse, in modo da renderlo facilmente comprensibile per poter agevolare i programmatori che in futuro dovranno magari eseguire rettifiche e integrazioni del codice: prendono il nome di commenti e in Pascal possono essere scritti nelle due seguenti modalità:
// questa è una riga di commento singola
(*questa è una riga di commento
che può andare su più righe*)
Il primo tipo di commento è introdotto da // e indica al compilatore di ignorare tutti i caratteri scritti da quel punto fino alla fine della riga.
Il secondo tipo di commento è introdotto da (* e indica al compilatore di ignorare tutto
quello che è scritto da quel punto fino alla chiusura del commento *), che può anche
andare a capo ed essere formato da più righe.
È importante commentare un programma anche solo per se stessi, dato che col
passare del tempo facilmente ci si dimenticherà di come questo è stato scritto.
■ La divisione tra numeri interi: l’operatore div
Vediamo un esempio che ci permette di introdurre un nuovo operatore matematico, che
esegue l’operazione di divisione tra numeri interi producendo come risultato un numero
intero, cioè la sola parte intera del quoziente trascurando la parte decimale.
30
Utilizziamo gli operatori matematici e commentiamo il codice •
Esempio 9
Unità 4
Programma “telepatico”
Realizziamo il programma del gioco: “Ti indovino il numero pensato”.
Il calcolatore chiede all’utente di pensare un numero e gli dice di effettuare mentalmente
alcune operazioni matematiche: al termine indovina il risultato finale, cioè il numero che
sta pensando il giocatore.
La sequenza di istruzioni da eseguire è la seguente:
1
pensa un numero;
2
raddoppialo;
3
aggiungi 12 a tale numero;
4
calcola la metà del risultato;
5
sottrai tale valore dal totale calcolato;
6
ti indovino ora il totale: è uguale a 6!
È semplice verificare, mediante il programma, come non esistano trucchi: il risultato infatti è sempre uguale a 6, indipendentemente dal valore pensato.
La codifica è la seguente, dove eseguiamo la lettura del numero pensato dal giocatore nella
variabile numPensato, e indichiamo quindi al giocatore in sequenza le operazioni che
deve eseguire mediante la scrittura a video con l’istruzione writeln.
Contemporaneamente al giocatore, facciamo eseguire gli stessi calcoli al calcolatore in
modo da verificarne la correttezza, utilizzando la variabile numCalcolato per memorizzarne i risultati sia intermedi che finale.
4
program Indovino;
var
numPensato,numCalcolato:integer;
begin
clrscr;
// effettua la pulizia dello schermo
5
(* Leggi un numero *)
1
2
3
6
7
8
9
10
11
12
13
14
writeln('introduci il numero che hai pensato :');
readln(numPensato);
(* Esegui le operazioni *)
writeln('ora raddoppialo...');
numCalcolato:=numPensato *2;
writeln('somma al risultato 12 ...');
numCalcolato:=numCalcolato+12;
writeln('dividi il risultato per 2 ...');
numCalcolato:=numCalcolato/2;
▼
0
31
▼
Modulo A
• Programmiamo in Pascal
15
writeln('sottrai al risultato il numero che avevi pensato...');
numCalcolato:=numCalcolato-numPensato;
16
17
(* Comunica il risultato *)
18
writeln('in ogni caso il numero finale e'' 6 !');
writeln('il valore ottenuto dai calcoli e'' ', numCalcolato);
readln;
end.
19
20
21
Apri il file
del tuo disco C..
esempio09 nella cartella
MODULOA della cartella PASCAL
Manda in esecuzione il programma.
Il compilatore Pascal segnala un errore alla seguente istruzione:
numCalcolato:=numCalcolato/2;
14
Appare un messaggio come questo: Hint: use div instead / to get an integer result, che
significa: “utilizzare div invece che / per avere un risultato intero”.
Il Pascal mette a disposizione l’operatore div per effettuare la divisione con troncamento,
che riporta come risultato il numero intero ottenuto dalla divisione effettuando “l’eliminazione” di una eventuale parte decimale.
Vediamo alcuni esempi dove possiamo confrontare il risultato ottenuto dall’operatore “tradizionale” di divisione / con quello ottenuto utilizzando div.
/
div
5 / 2 = 2,5
9 / 2 = 4,5
10 / 3 = 3,333
15 / 4 = 3,75
20 / 6 = 3,333
5 div 2 = 2
9 div 2 = 4
10 div 3 = 3
15 div 4 = 3
20 div 6 = 3
Nel nostro programma abbiamo indicato come variabile intera numCalcolato: dato che
in esso andiamo a memorizzare il risultato di una operazione di divisione, il Pascal ci
“mette in guardia” dalla possibilità che si possa verificare un errore, in quanto non è possibile memorizzare un numero con decimali in una variabile intera, e ci obbliga a cambiare operatore matematico in modo da eseguire una operazione corretta.
Modifica l’istruzione evidenziata sostituendo l’operatore div al posto dell’operatore
di divisione.
14
32
numCalcolato:=numCalcolato div 2;
Utilizziamo gli operatori matematici e commentiamo il codice •
Unità 4
Il risultato di una qualunque divisione tra due numeri deve essere memorizzato in una variabile di tipo reale (cioè con la virgola): se non interessa la parte
decimale ma solo la parte intera di una divisione devi usare l’operatore div e
in questo modo è possibile memorizzare il risultato in una variabile intera.
Vediamo nell’esempio successivo una applicazione classica dell’operatore div.
Esempio 10 Determinazione della parte intera e decimale di un numero
Utilizzando l’operatore div è possibile separare la parte intera dalla parte decimale del
risultato di una divisione.
L’algoritmo è il seguente.
Leggi due numeri interi.
Esegui la divisione con l’operatore / ottenendo il risultato con decimali.
Esegui la divisione con l’operatore div ottenendo la sola parte intera.
Sottrai al risultato reale la parte intera ottenendo la sola parte decimale.
Visualizza i risultati sullo schermo.
1
Codifica l’algoritmo appena descritto.
2
Commenta ogni operazione.
3
Visualizza il risultato formattando l’output sullo schermo.
Confronta la tua soluzione con quella riportata nel file
MODULOA.
esercizio10 nella cartella
ABBIAMO IMPARATO CHE...
• Riassumiamo in una tabella gli operatori Pascal visti sino a ora: i primi quattro indicano le operazioni classiche dell’algebra, a cui si aggiunge div e le notazioni che indicano la presenza di
un commento.
Operatore
<op1> + <op2>
<op1> – <op2>
<op1> * <op2>
<op1> / <op2>
<op1> div <op2>
//
(* *)
Descrizione
Somma i due operandi.
Sottrae dal primo il secondo operando.
Moltiplica i due operandi.
Divide il primo operando per il secondo, il risultato è in virgola mobile.
Divide il primo operando per il secondo generando un risultato intero.
Commento su di una riga.
Commento su più di una riga.
33
Modulo A
• Programmiamo in Pascal
VERIFICHIAMO LE CONOSCENZE
Esercizi a scelta multipla
1. Il commento su di una riga viene effettuato
mediante:
a // all’inizio
b (* all’inizio
c // all’inizio e // alla fine
d (* all’inizio e *) alla fine
2. Il commento su più di una riga viene effettuato
mediante:
a // all’inizio
b (* all’inizio
c // all’inizio e // alla fine
d (* all’inizio e *) alla fine
3. L’operatore / si può utilizzare tra due variabili:
a dello stesso tipo
b reali
c intere
d numeriche
4. L’operatore div si può utilizzare tra due variabili:
a dello stesso tipo
b reali
c intere
d numeriche
5. Indica il risultato del seguente segmento di
codice.
var A,B:integer
C:real;
A:=3;
B:=6;
C:=A/B;
a errore
b 1
c 2
d 0.5
6. Indica il risultato del seguente segmento di
codice.
var A,B:integer
C:integer;
A:=3;
B:=6;
C:=A/B;
a errore
b 1
c 2
d 0.5
7. Indica il risultato del seguente segmento di
codice.
var A,B:integer
C: real;
A:=9;
B:=6;
C:=A div B;
a errore
b 1
c 1.0
d 1.5
8. Indica il risultato del seguente segmento di
codice.
var A,B,C:integer
A:=9;
B:=6;
C:=A div B;
a errore
b 1
c 1.0
d 1.5
VERIFICHIAMO LE COMPETENZE
Problemi
1. Scrivi un programma che legge in input un valore corrispondente a un numero di secondi e lo trasforma in ore, minuti e secondi.
2. Scrivi un programma che, leggendo due ore nel formato hh,mm, calcoli il tempo trascorso tra di esse.
3. Scrivi un programma che visualizza il resto della divisione tra due numeri interi.
4. Scrivi un programma che legge in ingresso i voti di una materia scolastica e ne calcola la media, sia
precisa che arrotondata al numero intero.
34