Fortran 1
Fortran 1
UNITA’ DI UNITA’ DI
UNITA DI
UNITA’
CONTROLLO USCITA
INGRESSO
UNITA’
LOGICO
LOGICO‐
ARITMETICA
COMPONENTI DI UN CALCOLATORE
Unità logico‐
CPU aritmetica:
E’ il componentet
che esegue le
UNITA’ DI operazioni
MEMORIA matematiche (+;
‐; *; /) e logiche
(>; = ;<)
UNITA’ DI UNITA’ DI
UNITA DI
UNITA’
CONTROLLO USCITA
INGRESSO
UNITA’
LOGICO
LOGICO‐
ARITMETICA
COMPONENTI DI UN CALCOLATORE
Unità di memoria:
E’ il componente dove CPU
vengono immagazzinati sia
id
datiti di input
i t che
h i risultati
i lt ti
di output.
E’ inoltre il componente nel
quale vengono
q g conservati UNITA’ DI
anche i programmi
necessari ad eseguire le
MEMORIA
operazioni
UNITA’ DI UNITA’ DI
UNITA DI
UNITA’
CONTROLLO USCITA
INGRESSO
UNITA’
LOGICO
LOGICO‐
ARITMETICA
UNITA DI
UNITA’ UNITA DI USCITA
UNITA’ USCITA=
INGRESSO= STAMPANTI, VIDEO
LETTORI DI SCHEDE
SCHEDE,
LETTORI DI NASTRI ((O LA MEMORIA DEL
MAGNETICI, CALCOLATORE),
TASTIERE Nastri magnetici
Unità di memoria:
Può essere visualizzata come un insieme di celle in ognuna delle quali può
essere immagazzinata un’informazione, che può essere un numero di input
del programma o un enunciato stesso del programma
Indirizzo di
memoria:
Per
e d
distinguere
st gue e le e
N celle di memoria
possiamo
i
immaginare
i di
assegnare a ciascuna
Indirizzo di di esse un numero o
memoria
identificato
una lettera che
dalla costituisce l’indirizzo
posizione
ii N di memoria di quella
cella
G
Gerarchia
hi ddeii linguaggi
li i di programmazione
i
Linguaggio di alto
livello (FORTRAN,
(FORTRAN
ALGOL, COBOL, C etc))
Linguaggio di
assiematura
(ASSEMBLY)
Li
Linguaggio
i macchina
hi
Linguaggio
macchina
Istruzione lettura
Istruzione lettura in linguaggio macchina
in assembly Programma 100101001
assiematore
IIstruzione
i l
lettura
Istruzione lettura in linguaggio macchina:
in FORTRAN:
READ COMPILATORE 100101001
FORTRAN
E’ un linguaggio in cui gli enunciati
sono scritti
itti iin lilingua iinglese
l
Ad esempio:
READ compare nell’enunciato di lettura
WRITE ((o PRINT)) compare
p nell’enunciato di
scrittura
L’enunciato
A r
A=r
dove r è un numero reale prende il nome di enunciato di
assegnazione
Con tale
C t l enunciato
i t diciamo
di i all calcolatore
l l t di porre in
i
una cella di memoria che identifichiamo con A il numero
reale r:
PONI r in A
r A
S
Supponiamo
i ad
d esempio
i sia
i r=3.4
34
A=3.4
A 3.4
L’operazione di immagazzinamento è detta “distruttiva”
poiché se viene assegnato due volte un numero reale ad
una cella di memoria allora nella seconda assegnazione
viene eliminato il contenuto della precedente
assegnazione.
Ad esempio se i due seguenti enunciati di assegnazione
sono presenti nel programma:
A=3.4
A=5 6
A=5.6
Allora, in virtù della natura sequenziale dei programmi,
prima viene assegnato ad A il valore 3.4 e
successivamente viene assegnato ad A il valore 5.6. In
questa seconda assegnazione il valore
precedentemente immagazzinato in A (3.4) viene
distrutto.
In un enunciato di assegnazione la variabile posta a
SINISTRA
S S DEL SEGNO
S G O UGUALE
UGU indica
d ca S
SEMPRE il nome
o e did
una cella di memoria in cui verrà posto il risultato delle
operazioni eseguite a destra del segno di eguale.
A destra del segno di eguale può ò comparire un numero
qualunque (reale, intero o complesso) oppure una
operazione matematica.
matematica Ad esempio
esempio, ll’espressione
espressione
A=34.3-71.2
rappresenta
pp un enunciato di assegnazione
g in cui il
risultato delle operazioni tra le grandezze poste a destra
del segno di eguale verrà salvato nella cella di memoria
i
identificata
ifi dalla lettera A.
In pratica viene:
1) dapprima eseguita ll’operazione
operazione 34
34.3-71.2=-36.9
3 71 2= 36 9
2) e successivamente il valore -36.9 viene collocato in
una cella di memoria definita univocamente dalla
lettera A: -36.9->A
In un enunciato di assegnazione le grandezze poste a
ssinistra
s a del
de seg
segno
oddi ugua
uguale
e posso
possono
o anche
a c e essere
esse e
rappresentate da variabili indicanti delle celle di
memoria. E’ però fondamentale che tali variabili siano
state precedentemente inizializzate. Ad esempio il
seguente segmento di programma non funziona:
A=B+C
B=3.4
C=5 1
C=5.1
A=B+C
SOMMA ->
> A+B
SOTTRAZIONE -> A-B
PRODOTTO -> A*B
DIVISIONE -> A/B (A DIVISO B)
ESPONENZIAZIONE -> A**B (A ELEVATO A B)
LISTA
S DEI CARATTERI
C UTILIZZABILI
U
IN FORTRAN
Caratteri alfabetici:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
Simboli:
+-*/.,‘= $()
DISTINZIONE TRA ARITMETICA INTERA E REALE
Espressioni accettabili:
24.123E04 24.123E+4 24.123E+04 -5.36E-3 +43.2E-02
DISTINZIONE TRA ARITMETICA INTERA E REALE
b) Forma esponenziale standard
E’ sempre possibile
ibil rappresentare
t un numero reale
l in
i forma
f
esponenziale con la parte che procede E (detta mantissa)
compresa tra -1.0 e 1.0. Questa rappresentazione prende il
nome di forma esponenziale standard
Ad esempio
p il numero:
24.3 E-3 si può scrivere anche come .243 E-1
FORMATO LIBERO
IIntendiamo
t di con FORMATO LIBERO l’assenza
l’ di specifiche
ifi h
del formato del numero sia nella fase di scrittura (in
output) che di lettura (in input)
input). In tal caso il numero
verrà riprodotto in output così come viene calcolato dal
computer oppure verrà immagazzinato in memoria così
come esso è stato fornito in input.
ENUNCIATO DI SCRITTURA IN FORMATO LIBERO
Supponiamo che in memoria sia stato immagazzinato un
u e o intero
numero eo
(ad es: J=4)
Mediante l’istruzione
PRINT *,J
Potremo stampare su schermo il contenuto del numero J.
J
Più in generale, l’enunciato:
PRINT *,J1,J2,…..,JN
dice al computer di stampare su schermo il contenuto
delle celle di memoria J1,J2…..JN
In tal caso i numerii contenutii nelle celle dii memoria
i
J1,J2,…JN verranno stampanti in formato libero
ENUNCIATO DI TERMINAZIONE DEL PROGRAMMA
Affinchè il calcolatore sappia decidere quando deve
arrestare
a es a e il p
programma
og a a è necessario
ecessa o cche
e il p
programma
og a a
FORTRAN termini con una istruzione di fine programma.
Tale istruzione è rappresentata dall’enunciato:
END
Tale enunciato dice al calcolatore che il programma è
fi it
finito
READ *,J1,J2,…..,JN
dice al computer di leggere dal dispositivo di input
(tastiera) il contenuto di N numeri J1,J2,…JN
In tal caso i numerii forniti
f i i progressivamente
i su tastiera
i
verranno salvati nelle locazioni di memoria J1,J2, …JN
SECONDO PROGRAMMA
Come secondo esercizio scriviamo un programma che
egge da sc
legge schermo
e o due numeri,
u e , calcola
ca co a la
a loro
o o so
somma, a,
sottrazione e prodotto e scrive su schermo il risultato
NOMI DELLE VARIABILI (O NOMI DELLE COLLOCAZIONI)
AUM, PUN2,
AUM PUN2 CHEG,
CHEG sono implicitamente nomi di variabili
reali
NOMI DELLE VARIABILI (O NOMI DELLE COLLOCAZIONI)
INTEGER ALFA
SOMMA
SOTTRAZIONE
PRODOTTO
L’operazione
p di divisione restituisce invece la p
parte intera del
quoziente
Ad es: I=3 J=4 I/J=0
II=7
7 J=3
J 3 I/J=2
I/J 2
I=-9 J=6 I/J=-1
N.B. VIENE TRONCATA LA PARTE DECIMALE DELLA DIVISIONE REALE
REGOLE DELL’ ARITMETICA INTERA
In virtù della regola di divisione FORTRAN dei numeri interi ne deriva
la differenza tra il calcolo di
(N/2)*2 e (N*2)/2
( / )
(N/2)*2=(N*2)/2
( )/
Ma se N è dispari, allora:
(N/2)*2≠(N*2)/2
REGOLE DELL’ARITMETICA REALE
SE IN DUE LOCAZIONI DI MEMORIA A e B SONO COLLOCATI DUE
NUMERI REALI, ALLORA MEDIANTE LE OPERAZIONI ARITMETICHE
POTREMO CALCOLARE
SOMMA
SOTTRAZIONE
PRODOTTO
DIVISIONE
Supponiamo
i dii disporre
i dii un calcolatore che trattenga solo 3 cifre
if
significative e sommiamo 10 volte la quantità
.333
.333+.333=.666 .666+.333=.999
1 66 333 1 993 1 99
1.66+.333=1.993=1.99 1 99 333 2.323
1.99+.333= 2 323=2.32
2 32
2.32+.333=2.653=2.65 2.65+.333=2.983=2.98
2.98+.333=3.313=3.31
in luogo di 3.33
ESPRESSIONI ARITMETICHE
Nell’elaborare
N ll’ l b delle
d ll espressioni
i i aritmetiche
it ti h senza parentesi
t i il
FORTRAN, procedendo da sinistra verso destra, dà la
precedenza ad alcune operazioni
p p in luogo
g di altre.
PRIMA PRECEDENZA: ESPONENZIAZIONE (**)
SECONDA PRECEDENZA MOLTIPLICAZIONE (*) E DIVISIONE (*)
TERZA PRECEDENZA ADDIZIONE (+)
( ) E SOTTRAZIONE (-)
( )
A*B+C/D*F**2
Procedendo da sinistra a destra viene ricercata l’operazione di
esponenziazione:
i i (F**2)
Successivamente, procedendo da sinistra a destra viene cercata la
moltiplicazione e la divisione:
(A*B) e (C/D)
Viene poi eseguita la moltiplicazione mancante:
(
(C/D)*(F**2)
) ( )
e infine la somma:
(A*B)+((C/D)*(F**2))
ESPRESSIONI ARITMETICHE
Nell’elaborare delle espressioni aritmetiche contenenti parentesi, il
FORTRAN esegue dapprima i calcoli in parentesi, utilizzando le
priorità prima descritte e poi procede nei calcoli successivi
utilizzando le regole di priorità prima descritte
A+3*B
A+3 B A+3
A+3.*B
B
I+4.0*J I+4*J
1) Calcola l’espressione
l espressione aritmetica a destra del segno di eguale