Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni68 pagine

Fortran 1

Il documento descrive i principali componenti di un computer e come funzionano. Spiega che un computer riceve dati in input, li elabora secondo un programma e quindi emette i dati in output. Vengono descritti i componenti principali quali l'unità di controllo, la memoria, l'unità logico-aritmetica e le unità di ingresso e uscita.
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni68 pagine

Fortran 1

Il documento descrive i principali componenti di un computer e come funzionano. Spiega che un computer riceve dati in input, li elabora secondo un programma e quindi emette i dati in output. Vengono descritti i componenti principali quali l'unità di controllo, la memoria, l'unità logico-aritmetica e le unità di ingresso e uscita.
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 68

computer

Riceve Elabora Emette


dati i dati dei dati
INPUT OUTPUT

Per elaborare i dati ha bisogno di un programma ossia


una serie di enunciati o istruzioni che dicano al
calcolatore quali sono le operazioni da fare sui dati di
i
input
t
PROGRAMMA: lista di enunciati che il
calcolatore
l l t deve
d eseguire
i ini modo
d (generalmente)
( l t )
sequenziale
Il linguaggio
con cui
ENUNCIATO 1 vengono
ENUNCIATO 2 forniti gli
enunciati al
… calcolatore è
il

… LINGUAGGIO
… DI
ENUNCIATO N PROGRAMMA
ZIONE
COMPONENTI DI UN CALCOLATORE
Unità di controllo
controllo:
CPU Coordina tutte le attività di
tutti i componenti del
calcolatore.

Per fare ciò invia dei segnali di


UNITA’ DI permesso o di inibizione ai
singoli componenti del
MEMORIA calcolatore allo scopo di
determinare la sequenza delle
istruzioni

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

Ogni calcolatore ha un suo linguaggio che dipende da come è fatto quel


calcolatore

Ciascuna istruzione è rappresentata da una sequenza di binari (0 o 1).


Ad esempio potrebbe accadere che l’enunciato di lettura di un dato di
input, su una assegnata macchina, corrisponda alla seguente sequenza
di binari:
LEGGI: 100101001
e che su di un’altra lo stesso enunciato venga scritto come:
LEGGI : 101001110

E’ chiaramente molto difficile programmare in linguaggio macchina!


Linguaggio
g gg di assiematura
(ASSEMBLY)
Ogni istruzione, che come visto è rappresentata da sequenze di 0
e 1 in linguaggio macchina, viene ‘assiemata’ (cioè raggruppata)
in simboli detti mnemoniche.
Ad esempio i l’i
l’istruzione
t i l i un d
leggi dato
t iin iinputt potrebbe
t bb essere
rappresentata dal simbolo
Oppure
pp l’istruzione scrivi in output
p p potrebbe essere assiemata
nella mnemonica:
Programma
g assiematore
(ASSEMBLER)

Programma Programma Programma in


scritto in assiematore linguaggio
ASSEMBLY macchina
hi

Istruzione lettura
Istruzione lettura in linguaggio macchina
in assembly Programma 100101001
assiematore

LASSEMBLER è cioè un traduttore che converte le istruzioni


L’ASSEMBLER
scritte in ASSEMBLY in linguaggio macchina
Linguaggio di alto livello (FORTRAN, ALGOL,
COBOL C etc))
COBOL,
Si tratta di linguaggi in cui gli enunciati sono scritti
solitamente in inglese e sono stati pensati per consentire ad
un pubblico sempre più vasto di poter utilizzare i calcolatori

Programma scritto in Programma in


FORTRAN linguaggio
(programma COMPILATORE macchina
sorgente)
g ) (programma
oggetto)

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

FORTRAN è un acronimo (FORmula


TRAN l ti ossia
TRANslation i traduttore
t d tt di formule)
f l )
Alcune regole basilari per la scrittura di
enunciati in FORTRAN
Un programma FORTRAN viene scritto in un file, ossia in
un’area di memoria che viene identificata univocamente da
un nome. Tale
T l file,
fil che
h contiene
ti il programma sorgente,
va salvato con estensione .f o .for
Ad esempio se scriviamo un programma per il calcolo della
media dei voti di uno studente possiamo pensare di
salvarlo con il nome
media.f o media.for
Ciascun enunciato va scritto a partire dalla colonna 7 del
file sino alla colonna 72
Nel caso in cui l’enunciato abbia una estensione maggiore dei 66 caratteri compresi tra
colonna 7 e 72 allora si pone in colonna 6 della successiva riga il numero 1 e si utilizzano i
restanti spazi tra colonna 7 e 72 della stessa riga per la continuazione
continuazione.
Nelle prime 5 colonne del file si può porre un numero o
label che serve a identificare quella riga all’interno del
programma.
La label è quindi un numero intero positivo avente al
massimo 5 caratteri
Non è possibile assegnare una stessa label a due enunciati
diversi,
d e s , in qua
quanto
to laa label
abe identifica
de t ca u univocamente
oca e te
l’enunciato posto nella stessa riga
Inserendo una c nella prima colonna di un’assegnata riga si
inibisce l’uso dell’enunciato posto nella stessa riga. In altri
termini il compilatore nel realizzare il programma oggetto
ignora il contenuto di quella riga
Il contenuto delle colonne successive alla 72‐ma viene
ignorato dal calcolatore. Quindi bisogna evitare di scrivere
un enunciato oltre la 72‐ma colonna. Si possono utilizzare
le restanti colonne per commentare gli enunciati. Per fare
ciò occorre porre in colonna 73 un punto esclamativo
seguito dal commento
Il punto esclamativo e il commento possono essere posti
anche nelle colonne che precedono la 72‐ma
Gli spazi bianche tra colonna 7 e 72 vengono ignorati dal
calcolatore. Ad esempio l’enunciato WRITE senza spazi
equivale all’enunciato W R I T E in cui tra ogni carattere c’è
uno spazio bianco.
Immagazzinamento dei dati

L’enunciato
A r
A=r
dove r è un numero reale prende il nome di enunciato di
assegnazione

Tale enunciato ha significato un po’ diverso dalla


semplice
se p ce uguag
uguaglianza
a a matematica
a e a ca
A=r

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

Infatti pur essendo sintatticamente corretto non risultano


definiti i valori di B e C. L’enunciato dice infatti al
calcolatore
l l t di eseguire
i lal somma dei
d i numerii contenuti
t ti
nelle celle di memoria identificate da B e C, ma in tali
celle di memoria nessun valore è stato assegnato a B e a
C.
Il seguente enunciato di assegnazione:

B=3.4
C=5 1
C=5.1
A=B+C

funziona correttamente. Infatti esso dice al calcolatore di


porre nella cella di memoria B il numero 3.4, nella cella
di memoria C il numero 5.1
5 1 e infine di fare la somma tra il
contenuto della cella di memoria B e quello della cella
di memoria C ((3.4+5.1=8.5)) e porlo
p in A ((8.5->A).
) Nel
terzo enunciato vengono usati i valori contenuti in 2 celle
di memoria (B e C) senza che il contenuto di tali celle
venga modificato (USCITA NON DISTRUTTIVA)
OPERAZIONI
O O
ARITMETICHE IN
FORTRAN

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

Nel FORTRAN delle origini non erano previsti i caratteri


alfabetici minuscoli
Cifre:
0123456789

Simboli:
+-*/.,‘= $()
DISTINZIONE TRA ARITMETICA INTERA E REALE

In FORTRAN le operazioni matematiche riguardano,


riguardano
distintamente, i numeri interi e i numeri reali.

Le costanti intere (dette anche a virgola fissa) sono


numeri interi dotati di segno senza virgola o punto
decimale
Es: 15 -8 0 12457

N.B. Occorre verificare quale è il massimo numero di


cifre intere che il calcolatore p
può supportare.
pp
DISTINZIONE TRA ARITMETICA INTERA E REALE

Le costanti reali (dette anche a virgola mobile) possono


essere scritte in due modi.
a) Forma decimale. E E’ una serie finita di cifre, con o
senza segno, dotata di punto decimale. NON E’
AMMESSO ALCUN ALTRO SEGNO DI PUNTEGGIATURA
ES:
28.3 -34.0 +0.187
Non vanno bene espressioni del tipo:
28,3 (la virgola decimale non è accettata)
-36 ((non ha il punto
p decimale))
DISTINZIONE TRA ARITMETICA INTERA E REALE
b) Forma esponenziale. Un numero reale in forma esponenziale è
costituito
tit it da
d due
d parti.
ti

La prima parte è una costante reale in forma decimale (cioè una


serie di cifre con o senza segno dotata di punto decimale).

La seconda pparte inizia con E ed è seguita


g da una costante intera
con o senza segno che si compone al massimo di 2 cifre. Questa
seconda parte rappresenta l’esponente di base 10 del numero
reale.
reale

Es: 23.1E-4 =23.1*((10^(-4))=23.1*0.0001= .00231

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

Per formato di un numero intendiamo:


a) Il tipo (reale, intero, complesso)
b) La specifica del numero di cifre intere e decimali (se
si tratta di un numero reale) che compongono quel
numero

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

Tutti i programmi FORTRAN terminano con ll’enunciato


enunciato
END
PRIMO PROGRAMMA
Come primo esercizio scriviamo un programma che
esegue la
a so
somma, a, la
a so
sottrazione
a o e ed il p
prodotto
odo o de
dei
numeri 3 e 4 e scrive su schermo il risultato
ENUNCIATO DI LETTURA IN FORMATO LIBERO
Supponiamo di voler generalizzare il programma
precedente
p ecede e in modo odo da far
a ca
calcolare
co a e so
somma, a, so
sottrazione
a o e
e prodotto di due numeri qualunque J e K.
Avremo in tal caso la necessità di fornire in input J e K.
L’enunciato mediante il quale il programma fa leggere al
computer due numeri forniti da tastiera è:
READ *,J,K.
*JK
Più in generale l’enunciato:

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)

Con il termine VARIABILE intenderemo sempre un


ELEMENTO O DI MEMORIA.
O .
Come visto, un elemento di memoria ha un’entrata
DISTRUTTIVA (nel senso che se assegniamo un valore ad un
elemento di memoria il precedente verrà cancellato)
L elemento di memoria ha un’uscita
L’elemento un uscita NON DISTRUTTIVA (nel
senso che se estraiamo il valore in esso contenuto, esso
non viene cancellato ma resta immutato)

Se una collocazione di memoria viene usata per


i
immagazzinare
i valori
l i interi
i t i sii chiama
hi VARIABILE INTERA

Se una collocazione di memoria viene usata per


immagazzinare valori reali si chiama VARIABILE REALE
NOMI DELLE VARIABILI (O NOMI DELLE COLLOCAZIONI)
Le celle dii memoria
i vengono iidentificate
ifi mediante
i un
nome.
Il nome di una variabile è costituito da un MASSIMO di 6
caratteri alfanumerici, il primo dei quali deve essere
ALFABETICO

IUM, A33X2, BADD, DEAR sono nomi di variabili corretti

2K33 non è un nome di variabile corretto poiché


comincia con un numero
GIOVANN non è un nome di variabile corretto poiché ha
più
iù di 6 caratteri
tt i alfanumerici
lf i i
K+34M non è un nome di variabile corretto poiché non
contiene solo caratteri alfanumerici ma anche un
carattere speciale (+)
NOMI DELLE VARIABILI (O NOMI DELLE COLLOCAZIONI)
In FORTRAN esiste
i iinoltre la seguente regola iimplicita:
i i

Se il nome della variabile comincia con una delle seguenti 6 lettere


I JKLMN (o le minuscole i j k l m n)
allora la collocazione di memoria verrà utilizzata per
immagazzinare un NUMERO INTERO

IUM1, KUN, MAO, sono implicitamente nomi di variabili


intere
Se il nome della variabile comincia con un qualunque altro
carattere alfabetico allora la collocazione di memoria verrà
utilizzata
l per immagazzinare un NUMERO REALE

AUM, PUN2,
AUM PUN2 CHEG,
CHEG sono implicitamente nomi di variabili
reali
NOMI DELLE VARIABILI (O NOMI DELLE COLLOCAZIONI)

Conseguentemente, il programma visto precedentemente non


funziona se in input forniamo a j e k due numeri reali
ENUNCIATI DI TIPO: INTERO, REALE

Se si ha la necessità di utilizzare un nome che inizia con una delle


sei lettere I J K L M N per immagazzinare un numero reale, allora è
possibile ricorrere all’enunciato di tipo REAL. Supponiamo ad
esempio di voler immagazzinare nella variabile INTER1 un
i t
interesse maturato
t t su un conto t corrente.
t Allora
All INTER1 saràà un
numero reale e per poter consentire al calcolatore di
immagazzinare in INTER1 l’interesse
l interesse utilizzeremo ll’enunciato
enunciato
REAL INTER1.
Più in generale l’enunciato:

REAL IW1, IW2, ….,IWN


dice al computer che la lista delle variabili IW1,…,IWN
è una lista
li t di variabili
i bili realili
ENUNCIATI DI TIPO: INTERO, REALE

Occorre osservare che l’enunciato REAL appartiene alla categoria


degli enunciati non eseguibili, ossia di quegli enunciati che
forniscono solo delle informazioni al calcolatore ma non
richiedono delle operazioni

Tutti gli enunciati di tipo vanno


posti in testa al programma di calcolo,
in modo che sia specificato, una volta
per tutte,
tutte il tipo delle variabili usate
successivamente.
ENUNCIATI DI TIPO: INTERO, REALE

Se si ha la necessità di utilizzare un nome di variabile reale per


immagazzinare un numero intero, allora è possibile ricorrere
all’enunciato di tipo INTEGER. Se ad esempio vogliamo
immagazzinare in ALFA un numero intero dovremo usare
l’
l’enunciato
i t di tipo
ti

INTEGER ALFA

Più in generale l’enunciato:

INTEGER AW1, AW2, ….,AWN


dice al computer che la lista delle variabili AW1,…,AWN
è una lista
li t di variabili
i bili intere
i t
REGOLE DELL’ ARITMETICA INTERA
SE IN DUE LOCAZIONI DI MEMORIA I e J SONO COLLOCATI DUE
NUMERI INTERI ALLORA:
LE TRE OPERAZIONI ARITMETICHE DI

SOMMA
SOTTRAZIONE
PRODOTTO

RESTITUIRANNO L’INTERO CORRISPONDENTE

Ad es: I=3 J=4 I+J=7; I-J=-1 II*J=12


J=12

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

Difatti se N è pari allora risulterà:

( / )
(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

OTTENENDO UN NUMERO REALE


Ad es: A=5. B=4. A+B=9.; A-B=1. A*B=20. A/B=1.25

Poiché ogni informazione viene immagazzinata utilizzando un


numero finito di bits le operazioni aritmetiche possono dar luogo
a risultati precisi entro un certo numero di cifre significative.
significative Ad
esempio, in singola precisione, su un portatile di ultima
generazione a 32 bit:

A=5. B=3. A/B=1.6666663 (con errore sull’ottava cifra decimale!)


REGOLE DELL’ARITMETICA REALE
PROPAGAZIONE DELL’ERRORE DI ARROTONDAMENTO

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

.999+.333=1.332 =1.33 1.33+.333=1.663 =1.66

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 (-)
( )

Ad esempio si consideri la seguente espressione aritmetica

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

Si consideri ad esempio la seguente espressione aritmetica:


X+Y/(Z*A+B**2)
Viene dapprima preso in considerazione il contenuto della parentesi.
parentesi
Pertanto prima si esegue l’esponenziazione (B**2)
poi il prodotto (Z*A)
e infine
i fi con la
l somma (Z*A)+(B**2)=C
(Z*A) (B**2) C

Successivamente si lavora sulle grandezze non in parentesi:


Viene prima eseguita la divisione Y/C e successivamente la somma:
X+(Y/C)
ESPRESSIONI ARITMETICHE
OPERAZIONI IBRIDE
Alcuni compilatori non consentono operazioni ibride.
Supponiamo ad esempio che A sia una locazione di memoria reale.
Allora
A+3 (3 senza punto è intero)
con tali compilatori
p non è p
permessa.

Altri compilatori invece ammettono tali operazioni e bisognerà


verificare come operano

A+3*B
A+3 B A+3
A+3.*B
B

I+4.0*J I+4*J

B**2-4*A*C B**2-4.*A*C (l’esponenziazione di un numero


reale a potenza intera è
consentita)
OPERAZIONI IBRIDE
ENUNCIATO DI ASSEGNAZIONE ARITMETICA
Un enunciato di assegnazione aritmetica ha la forma seguente:

NOME DELLA VARIABILE= ESPRESSIONE ARITMETICA

Nel momento in cui il calcolatore deve eseguire


g q
questo enunciato
compie le seguenti due operazioni:

1) Calcola l’espressione
l espressione aritmetica a destra del segno di eguale

2) Colloca nella cella di memoria identificata dal nome della


variabile posta a sinistra dell
dell’uguale
uguale il risultato dell
dell’espressione
espressione
aritmetica
Occorre notare che i due termini a sinistra e a destra dell’uguale
g
possono essere di tipo diverso (intero e reale); quando ciò
avviene nella fase 2 il numero derivante dal calcolo
dell’espressione
dell espressione aritmetica viene convertito in reale o in intero a
seconda che il nome della variabile sia reale o intero
ENUNCIATO DI ASSEGNAZIONE ARITMETICA

Ad esempio in questo segmento di programma l’espressione


aritmetica a destra dell’uguale coinvolge numeri reali ma il
risultato dell
dell’operazione
operazione viene salvato in una cella di memoria
intera.
Poiché l’espressione aritmetica fornisce come risultato 106.25 all’atto
d ll collocazione
della ll i nella
ll cella
ll INCOME lal parte
t decimale
d i l verrà
à
troncata e quindi risulterà INCOME= 106

Mentre le operazioni ibride (interi con reali) possono non


essere eseguite con alcuni compilatori le assegnazioni
aritmetiche ibride sono generalmente eseguite
FUNZIONI ARITMETICHE INCORPORATE
I compilatori FORTRAN possiedono una libreria di funzioni
matematiche (FUNCTIONS incorporate; tra quelle più usate
ricordiamo
SQRT(X) radice quadrata di x
ABS(X) valore assoluto di x
EXP(X) esponenziale
i l di x
SIN(X) seno di x
COS(X) coseno di x
TAN(X) tangente di x
ALOG(X) Logaritmo in base e di x
ALOG10(x)( ) Logaritmo
g in base 10 di x
FLOAT(I) converte l’intero I in reale
IFIX(x) tronca il reale x e lo rende intero

In queste definizioni il nome della FUNCTION è la parte che precede


la parentesi mentre X (o I) costituisce l’argomento.
X iindica
di un argomento t reale;
l I un argomento t intero.
i t C l’eccezione
Con l’ i
di IFIX tutte queste FUNCTIONS restituiscono un numero reale
FUNZIONI ARITMETICHE INCORPORATE
Le functions FLOAT E IFIX non sono usuali
FLOAT(4) converte l’intero 4 in reale 4.0

IFIX(2.8) tronca il reale 2.8 e lo trasforma nell’ intero 2


FUNZIONI ARITMETICHE INCORPORATE
FUNZIONI ARITMETICHE INCORPORATE
L’operazione di esponenziazione X**Y con Y esponente reale richiede
che X SIA POSITIVO. Il motivo è che essa viene internamente calcolata
come:

DIM: Posto X**Y


X**Y=exp(Y)*Z
exp(Y)*Z segue:

ln(X Y) Y ln(X) ln(exp(Y) Z) ln(exp(y)) lnZ Y ln(Z)


ln(X**Y)=Y*ln(X)=ln(exp(Y)*Z)=ln(exp(y))+lnZ=Y+ln(Z)
Da cui:
ln(Z)=Y*ln(X)‐Y
Z=exp(Y*ln(x)‐Y)
e quindi:
X**Y=exp(Y)*exp(Yln(X) Y)=exp(Yln(X))
X**Y=exp(Y)*exp(Yln(X)‐Y)=exp(Yln(X))
FUNZIONI ARITMETICHE INCORPORATE
ULTERIORI PROPRIETA’ DEGLI ENUNCIATI DI
TIPO
Quando si utilizza l’enunciato di tipo INTEGER occorre tener presente
che il massimo numero intero che un calcolatore a 32 bit riesce a
calcolare è 2**31‐1=2147483647 (e il minimo è: ‐ 2147483647)
IImplicitamente
li it t (o( esplicitamente
li it t tramite
t it INTEGER) i calcoli
l li possono
essere fatti quindi nell’intervallo:
[[‐ 2147483647;; 2147483647]]
I numeri reali sono trattati in modo implicito (ma anche esplicito
quando si utilizzi l’enunciato di tipo REAL) come dei numeri
aventi
ti una accuratezza
t di 7 cifre
if significative
i ifi ti e un intervallo
i t ll di
valori compreso tra 10**(-38) e 10**38
Si può incrementare l’accuratezza
l accuratezza e l’intervallo
l intervallo di
calcolo dei numeri reali utilizzando l’enunciato di tipo
REAL*8 AW1,…,AWN
(numero di cifre significative pari a 15 e intervallo di
calcolo ampliato a [10**(-308) ; 10**(+308)]

Potrebbero piacerti anche