Anteprima
Vedrai una selezione di 6 pagine su 24
Materiale per Informatica (2 crediti) Pag. 1 Materiale per Informatica (2 crediti) Pag. 2
Anteprima di 6 pagg. su 24.
Scarica il documento per vederlo tutto.
Materiale per Informatica (2 crediti) Pag. 6
Anteprima di 6 pagg. su 24.
Scarica il documento per vederlo tutto.
Materiale per Informatica (2 crediti) Pag. 11
Anteprima di 6 pagg. su 24.
Scarica il documento per vederlo tutto.
Materiale per Informatica (2 crediti) Pag. 16
Anteprima di 6 pagg. su 24.
Scarica il documento per vederlo tutto.
Materiale per Informatica (2 crediti) Pag. 21
1 su 24
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

INCERTEZZA NELLE VARIABILI REALI

Variabili reali – Errori di overflow e underflow

à

Intervallo di definizione un numero X in rappresentazione floating-point binaria, espresso secondo una

prestabilita mantissa costituita da N2 bits nella conversione da base p=2 a base p=10, darà luogo ad un solo numero

reale decimale (ad esempio A).

iamo come esempio un insieme di numeri a virgola mobile a base 10 (in un sistema metric

Viceversa, il numero binario, data la limitazione della mantissa, sarà ottenibile da un insieme di valori costituente un

male), caratterizzato da un esponente a 2 cifre, e una mantissa a 3 cifre significative con un

intervallo di numeri reali decimali (A1, A2) con A1<A<A2.

allo di valori definito tra 0,001 e 0,999 (con la prima cifra, lo zero, data per implicita, che

In altre parole, un numero in virgola mobile rappresenta un range di valori e non un valore; c’è un errore insito nel

o che accade quasi sempre con i numeri float): otterremo un insieme di numeri float che ris

fatto che si dispone di un numero limitato di bit per descrivere la mantissa. Se voglio diminuire questo errore devo

aumentare il numero di bit che uso per la mantissa.

viso in 7 "regioni" omogenee

à

Errori di overflow e underflow prendiamo come esempio un insieme di numeri a virgola mobile a base 10 (in un

sistema decimale), caratterizzato da un esponente a 2 cifre, e una mantissa a 3 cifre significative con un intervallo di

valori definito tra 0,001 e 0,999: otterremmo un insieme di numeri float che risulta suddiviso in 7 regioni omogenee.

-103 -103

-1 x 10 1 x 10

-99 -99

-0.001 x 10 0.001 x 10

Possono prodursi errori di overflow ma anche di underflow.

à

Errori di overflow in generale non sono rimediabili, se non spostando i confini delle regioni (aumentando le cifre

dell’esponente) e quindi il campo di esistenza di tutto l’insieme float. Per diminuire questi errori, devo aumentare i

bit con cui descrivo l’esponente.

à

Errori di underflow sono meno gravi poiché possono essere approssimati a zero.

SEZIONE 4: FORTRAN

Il linguaggio Fortran (Formula Translator) è nato negli anni ’50, per gestire librerie di programmi d’utilità, ed è stato

uno dei primi linguaggi di programmazione ad alto livello.

à Si colloca fra i linguaggi di alto livello, ma come uno dei più vicini alla struttura della macchina.

à Il corredo delle librerie di programmi di utilità è tra i più vasti disponibili.

à è utilizzato soprattutto per elaborazioni di calcolo numerico, dove l’efficienza e la velocità di esecuzione che esso

offre sono ritenuti più importanti rispetto ad altri aspetti del linguaggio. Per questo ben si adatta all’utilizzo in campo

scientifico.

Il limite principale del Fortran, nelle versioni vecchie, riguarda la strutturazione dei dati e la gestione statica della

memoria. Le caratteristiche che lo rendono molto popolare sono le seguenti:

• La possibilità di utilizzare numeri interi e reali con un elevato numero di cifre significative

• La possibilità di utilizzare i numeri complessi e l’aritmetica complessa

• L’esistenza di un gran numero di funzioni matematiche di libreria utilizzabili direttamente in qualsiasi

punto del programma o sottoprogramma

• La possibilità di costruire una propria libreria di sottoprogrammi già compilati e provati, riutilizzabili

• La possibilità di richiamare Function e Subroutine scritte in linguaggi differenti dal Fortran

STRUTTURA DI UN PROGRAMMA

Un programma Fortran ha la seguente struttura:

1. Sezione dichiarativa: è posizionata all’inizio e contiene istruzioni non eseguibili, quali: nome del

programma (PROGRAM) e dichiarazione delle variabili (REAL, INTEGER…)

2. Sezione esecutiva: rappresenta il corpo del programma e contiene le istruzioni eseguibili necessarie per

effettuare le operazioni per le quali il programma stesso è stato ideato

3. Sezione conclusiva: contiene le istruzioni che interrompono il programma, quali: STOP (interrompe il

programma in esecuzione), END PROGRAM (dice al compilatore che il programma è terminato in fase di

compilazione)

Il file di testo deve essere organizzato in 72 colonne. Le prime 6 devono essere lasciate libere per inserire

determinate informazioni. I commenti (non eseguibili) possono essere inseriti tramite la lettera “c”, o dal simbolo “*”

Esempio programma

in colonna 1, oppure da “!” (tutto ciò che è alla sua destra sarà ignorato).

Di seguito è riportato il

DEFINIRE LE VARIABILI

diagramma di flusso di un start

Le variabili definite nella parte dichiarativa di un programma

programma che legge due numeri

vengono dette variabili globali del programma poiché vengono

reali (a,b) ne fa la somma (c) e Leggi a,b

create all’inizio dell’elaborazione del programma, e distrutte solo

scrive il risultato se la somma è

alla fine di esso. Si può dire che le variabili globali siano create al

tempo di compilazione, nel senso che quando il programma viene

maggiore di 0, se è minore di 0 c=a+b

caricato in memoria centrale per l’esecuzione, insieme ad esso

scrive ‘somma inferiore a 0’:

viene caricato (allocato) anche lo spazio per le variabili reali. si no

c >0

à

Esempio del programma somma Scrivi c Scrivi somma inferiore a 0

stop

program somma

real a,b,c

write(*,*) 'immetti i valori di a e b(separati da,) premi invio'

read(*,*) a,b

c=a+b

if(c.ge.0) then

write(*,*) 'somma=',c

else

Si può assegnare alle variabili nomi qualsiasi a patto di write(*,*) 'somma inferiore a 0'

endif

rispettare alcune regole: end

• Primo carattere: una lettera

• Caratteri successivi: lettere e numeri (no caratteri speciali)

• Spazi vuoti non ammessi

• Le variabili che iniziano con I,J,K,L,M,N sono dichiarati numeri interi (comando Integer). Le altre sono

numeri a virgola mobile (comando Real)

• Biunivocità: un nome una variabile, una variabile un nome

• La variabile deve essere inizializzata

• I comandi Fortran non possono essere usati come nome di variabili (read, write, stop…)

à

Variabili intere il compilatore assegna automaticamente 4 byte alle variabili intere che quindi possono assumere

valori compresi tra -2147483648 e +2147483647. La sintassi con cui si definiscono sarà:

INTEGER nome_variabile (di 32 bit)

INTEGER*2 nome_variabile (di 16 bit)

INTEGER*8 nome_variabile (di 64 bit)

Queste definizioni vanno inserite nella parte dichiarativa del programma, quindi all’inizio.

à

Variabili reali possiamo definire le variabili in singola (4 byte) o doppia precisione (8 byte):

REAL nome_variabile (singola precisione)

REAL*8 nome_variabile (doppia precisione)

à

Variabili complesse sono definite implicitamente con due numeri reali da 4 byte ciascuno; quindi, ogni numero

Variabili sunto

complesso impegnerà di default 8 byte. La sintassi è:

COMPLEX nome_variabile (due numeri da 4 byte)

COMPLEX*8 nome_variabile (due numeri da 8 byte) Se voglio dare da input il valore ad una variabile

complessa non posso dire semplicemente (read(*,*)

nome_variabile). Devo prima leggere due variabili reali e

poi allocarle nella variabile complessa mediante il

comando CMPLX. Un esempio di sequenza di comandi

per questo scopo è il seguente:

read(*,*) parte_reale,parte_immag

nome_variabile=CMPLX(parte_reale,parte_immag)

à

Variabili logiche possono assumere solo due valori:

true or false. Occupano un solo bit.

LOGICAL nome_variabile

nome_variabile=.true. o nome_variabile=.false.

à

Variabili stringhe è possibile memorizzare dei caratteri. In fortran va definita la lunghezza della stringa. La sintassi

sarà:

CHARACTER*n nome_variabile

Dove n rappresenta il numero di caratteri da cui è composta la stringa. Ogni variabile stringa occuperà n*8 bit (nella

convenzione ASCII)

OPERAZIONI ARITMETICHE

Come operazioni elementari avremo:

• X+Y = somma

• X-Y = differenza

• X*Y = prodotto

• X/Y = quoziente

• X**m = potenza m-esima di X (m intero)

• X**Y = esponenziale

Oltre alle operazioni fondamentali, possiamo richiamare un certo numero di funzioni intrinseche (build-in functions).

Le più comuni sono:

• Sin, cos, tan

• Asin, acos

• Log

• Exp

• Sqrt (radice quadrata)

• Abs (valore assoluto)

COMANDO “IF”

Nell’utilizzo più semplice, il comando “IF” presenta la seguente sintassi:

if(variabile1.xx.variabile2) then

elseif() then

else

endif

Le seguenti istruzioni permetto di confrontare tra di loro due variabili:

• X.eq.Y = vera se X=Y, falsa altrimenti

• X.ne.Y = vera se X¹Y, falsa altrimenti

• X.gt.Y = vera se X>Y, falsa altrimenti

• X.lt.Y = vera se X<Y, falsa altrimenti

• X.ge.Y = vera se X³Y, falsa altrimenti

• X.le.Y = vera se X£Y, falsa altrimenti

Si notino i punti (.) che intervengono sempre nella definizione degli operandi. Nel caso delle variabili stringa, le

variabili vanno indicate tra gli apostrofi singoli. Ad esempio( if(a.eq.’ciao’) then), vuol dire che la condizione è

verificata se la variabile stringa “a” assume il valore di “ciao”.

à

Operazioni logiche ci sono relazioni che intercorrono fra variabili logiche. Siano X e Y due variabili logiche, allora:

.not.x = è vera solo se la condizione X non è verificata, falsa se X è verificata

X.and.Y = vera se X e Y sono vere contemporaneamente, falsa altrimenti

X.or.Y = vera se X o Y sono vere, falsa altrimenti

Una sintassi tipica sarà:

if(cond_1.or.cond_2) then ……. Endif.

ORGANIZZAZIONE DEI DATI

Vedremo com’è possibile organizzare un insieme di dati tramite: array, liste, file.

à

Array costituiscono un modo di memorizzare dati omogenei (ad esempio un insieme di numeri reali). Per accedere

ai diversi elementi di un array basta sapere la posizione in memoria del primo elemento dell’array ed il numero di

posizione dell’array dell’elemento cercato.

Posizione elemento cercato = pos. primo elemento + lungh. elemento * num. elemento cercato

Questo modo di organizzare gli insiemi di dati si adatta bene alla modalità di accesso casuale tipico della memoria

RAM.

à

File nel caso di memorie di massa ad accesso non casuale, è più comodo memorizzare i dati in elenchi organizzati

detti file. Il file è estensibile, cioè è possibile aggiung

Dettagli
Publisher
A.A. 2023-2024
24 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher noemi_navarra di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma Tor Vergata o del prof Bocchinfuso Gianfranco.