Vettori e Matrici (array)
|
|
|
- Cosima Calo
- 8 anni fa
- Просмотров:
Транскрипт
1 Vettori e Matrici (array) Introduction to Fortran 90 Massimiliano Guarrasi, CINECA [email protected] Ottobre 2014
2 Array - Introduzione Gli array sono serie di variabili dello stesso tipo, ciascuna accessibile mediante indici numerici. Il Fortran consente di gestire: Vettori Matrici Matrici multidimensionali(fino a 7 dimensioni) GliarrayinFortran90possonoesseredi3tipi: Statici Semi-dinamici Dinamici
3 Array - Introduzione Array statici: hanno dimensioni fissate al momento della dichiarazione e il numero di elementi nell'array non può essere modificato durante l'esecuzione del programma. Array semi-dinamici: all'interno di una procedura non hanno dimensioni fissate, ma esse vengono definite con il passaggio degli argomenti alla procedura. Sono anche detti array automatici. Array dinamici: la dimensione di questi array può essere modificata durante l'esecuzione del programma. Sono anche detti array allocabili.
4 Array - Terminologia Rango Estensione Forma Dimensione Conformità numero di dimensioni della matrice numero di elementi in una dimensione vettore delle estensioni prodotto delle estensioni due matrici con la stessa forma Per dichiarare un array è necessario fornire 3 informazioni: tipodegli elementi numerodi dimensioni Numero di elementi per ogni dimensione
5 Array - Dichiarazione La dichiarazione delle dimensioni è lasciata all'attributo di dichiarazione DIMENSION secondo la sintassi generale: TIPO, DIMENSION([x1:]x2,[y1:]y2,...) :: A Ogni dimensione è separata da virgole e i limiti degli indici per ogni dimensione sono separati da":" Se come nell esempio che segue non è specificato l'indice inferiore, si assume che l'array parta dall'indice 1. REAL, DIMENSION(40,60) :: A
6 Array - Esempi Uso di PARAMETER: in generale possono essere utili uno o più PARAMETER per dichiarare le dimensioni degli array statici. INTEGER, PARAMETER :: n=10 REAL, DIMENSION(n,n+1) :: A,B,C Nelle subroutine è possibile utilizzare argomenti di tipo INTEGER per dichiarare le dimensioni di array passati ad una subroutine e array automatici. SUBROUTINE lavora(n,...) INTEGER :: n REAL, DIMENSION(n,2*n) :: A,B,C
7 Array - Esempi Dichiarazione compatta: per dichiarare le dimensioni dell'array si può anche non utilizzare l'attributo DIMENSION, bensì la forma: TIPO :: A([x1:]x2,[y1:]y2,...) Sono pertanto equivalenti le forme: INTEGER, DIMENSION(4,2) :: A,B,C INTEGER :: A(4,2), B(4,2), C(4,2)
8 Array - Esempi Dimensioni presunte: nel caso di array passati in argomento, è possibile evitare di dichiararne le dimensioni, esplicitando solo il rango. Si usa pertanto l'attributo DIMENSION(o la forma compatta), ma i valori vengono sostituiti da : INTEGER, DIMENSION(:,:) :: c
9 Array - Inizializzazione Per leggere o modificare gli elementi di un array è possibile accedere: adunsingoloelemento asezionidiarray(da...a...) a sottoinsiemi di array utilizzando liste di indici Per inizializzare un vettore possiamo utilizzare: assegnazione diretta(componente per componente) costrutti DO notazione vettoriale costruttore(eventualmente con DO implicito)
10 Assegnazione diretta: REAL, DIMENSION(3) :: a a(1) = 0.0 a(2) = 1.0 Costrutti DO REAL, DIMENSION(3) :: a DO i = 1, 3 a(i) = REAL(i) END DO Array - Inizializzazione Notazione vettoriale: il Fortran 90 permette di lavorare con vettori e matrici considerandoli nella loro globalità. REAL, DIMENSION(6) :: A = 0.0 REAL, DIMENSION(10,10) :: M = 1.0
11 Array - Inizializzazione Notazione vettoriale: accesso a sezioni di array A(2:5) = 0.1 M(2:4,2:4) = 2.0 Sottoinsiemi di indici (solo vettori): REAL, DIMENSION(10) :: a INTEGER, DIMENSION(10) :: ip ip = (/10, 9, 8, 7, 6, 5, 4, 3, 2, 1/) a(ip) = (/10,20,30,60,120,240,480,960,1920,3840/) Con questo tipo soluzione occorre fare attenzione perché in una assegnazione non si ripetano due indici
12 Array - Inizializzazione Costruttore: per inizializzare array monodimensionali si può utilizzare una lista di variabili (separate da virgola) racchiusa tra parentesi e slash: array = (/ lista /) Esempi: INTEGER, DIMENSION(6) :: A = (/1,2,3,4,5,6/) Con DO implicito: INTEGER, DIMENSION(6) :: A = (/(i,i=1,6)/)
13 Array - Inizializzazione Per le matrici non esiste una sintassi compatta, ma è necessario combinare il costruttore dei vettori con la funzione intrinseca RESHAPE(SOURCE,SHAPE[,PAD][,ORDER]), che genera una matrice di forma SHAPE prendendo il valore degli elementi da SOURCE. Se questi non sono sufficienti si usano gli elementi di PAD, eventualmente duplicandoli. Il vettore ORDER deve avere la stessa dimensione di SHAPE e specifica l'ordine col quale devono essere generate le dimensioni.
14 Array - Inizializzazione Un esempio: REAL, DIMENSION(3,2) :: ra ra = RESHAPE((/((i+j,i=1,3),j=1,2)/), SHAPE = (/3,2/)) trasforma il vettore (2,3,4,3,4,5) 2 3 nella matrice ra =
15 Notazione Vettoriale Il Fortran 90 permette di lavorare con vettori e matrici considerandoli nella loro globalità, a differenza del fortran 77 che obbliga a lavorare elemento per elemento. Vettori e matrici devono essere conformi per poter essere coinvolti in operazioni vettoriali. E' essenziale ricordare che per calcolare il risultato di un'assegnazione vettori e matrici sono valutati prima che l'assegnazione abbia luogo, elemento per elemento. Ovvero si lavora sempre per elementi, con un ciclo DO implicito. Le funzioni intrinseche possono avere risultato vettoriale.
16 Notazione Vettoriale Esempi : REAL, DIMENSION(10,10) :: a, b, c Queste 3 forme sono equivalenti a = 0.0 a(:,:) = 0.0 a(1:10,1:10) = 0.0 Queste 3 forme sono equivalenti c = a * b! Prodotto elementale c(:,:) = a(:,:) * b(:,:) c(1:10,1:10) = a(1:10,1:10) * b(1:10,1:10)
17 Esempi : Notazione Vettoriale REAL, DIMENSION(10,-5:5,3) :: a, b REAL, DIMENSION(-4:5,1:5,3) :: c Si possono specificare solo gli elementi di indice dispari a(1:10:2,-3:5:2,1:3:2) = b(1:10:2,-3:5:2,1:3:2) * c(::2,1:5,::2) Oppure un solo piano a(5,-5:,:) = b(3,-5:,:) Oppure solo una parte di piano a(5,1:5,:) = b(5,1:5,:) + c(0,:,:) Ovvero solo alcune righe di un piano a(1:10:3,0,1:3) = c(1:4,1,:)
18 Notazione Vettoriale La notazione vettoriale è una sintassi molto efficace, ma è necessario tener ben presente come vengono eseguite le operazioni. Il principio è che tutto ciò che compare alla destra del segno di assegnazione è interamente utilizzato nell'esecuzione dei calcoli, prima che ciò che appare alla sinistra venga preso in considerazione: a(2:n) = a(2:n) + b(1:n-1) equivale a : DO i = 2, n a(i) = a(i) + b(i-1) END DO
19 Notazione Vettoriale b(2:n) = a(2:n) + b(1:n-1) equivale a : DO i = 2, n t(i) = a(i) + b(i-1) END DO DO i = 2, n b(i) = t(i) END DO e non come si potrebbe erroneamente pensare a: DO i = 2, n b(i) = a(i) + b(i-1) END DO Il seguente ciclo: DO i = 2, n a(i) = a(i) + a(i-1) END DO invece equivale a : a(2:n) = (/(SUM(a(1:i)),i=2,n)/)
20 Esercizi 1. Generare una matrice A 9x9 i cui elementi siano A(i,j) = ij (es. a(3,4)=34) e stamparla a video e su file. 2. Scrivere un programma che costruisca e stampi una matrice 10 x 10 che rappresenti la Tavola Pitagorica 3. Scrivere un programma che generi una scacchiera 8x8 con "B" e "W" in posizioni alternate, usando la notazione vettoriale.
21 Soluzioni Esercizio 1/0 PROGRAM matrice IMPLICIT NONE INTEGER, PARAMETER :: n=9 REAL, DIMENSION(n,n) :: A, B, C INTEGER, DIMENSION(n) :: v INTEGER :: i,j DO i=1,n DO j=1,n A(i,j)=REAL(i*10+j) END DO END DO OPEN(11,FILE='matrice.dat',STATUS='replace')
22 Soluzioni Esercizio 1/1 DO i=1,n WRITE(*,*) A(i,:) WRITE(11,*) A(i,:) END DO CLOSE(11) A=0.0 v=(/(real(i),i=1,n)/) B = SPREAD(v,DIM=1,NCOPIES=n) C = SPREAD(v,DIM=2,NCOPIES=n) A=B+C*10 DO i=1,n WRITE(*,*) A(i,:) END DO END PROGRAM matrice
23 Soluzioni Esercizio 2/0 PROGRAM Pitagora IMPLICIT NONE INTEGER, DIMENSION(10,10) :: a,b,p INTEGER, DIMENSION(10) :: v INTEGER :: i v=(/(i,i=1,10)/) WRITE(*,*) "V = " WRITE(*,100) v a = SPREAD(v,DIM=1,NCOPIES=10) b = SPREAD(v,DIM=2,NCOPIES=10) WRITE(*,*) "A = " DO i=1,10 WRITE(*,100) a(i,:) END DO
24 Esercizio 2/1 Soluzioni WRITE(*,*) "B = " DO i=1,10 WRITE(*,100) b(i,:) END DO p=a*b WRITE(*,*) "P = " DO i=1,10 WRITE(*,100) p(i,:) END DO 100 FORMAT(10(1x,i3)) END PROGRAM Pitagora
25 Soluzioni Esercizio 3/0 PROGRAM chequerboard IMPLICIT NONE CHARACTER (LEN = 1), DIMENSION (8,8) :: chboard! Version 1: 4 statements: WRITE(*,'('' Version 1-4 statements: ''//)') chboard (1:8:2,::2) = 'B' chboard (2:8:2,::2) = 'W' chboard (1:8:2,2::2) = 'W' chboard (2:8:2,2::2) = 'B' WRITE(*,'(8A4)') chboard READ (*,*)
26 Esercizio 3/1 Soluzioni! Version 2: 3 statements: WRITE(*,'(//'' Version 2-3 statements: ''//)') chboard = 'B' chboard (2:8:2,::2) = 'W' chboard (1:8:2,2::2) = 'W' WRITE(*,'(8A4)') chboard READ (*,*) STOP END PROGRAM chequerboard
Vettori e Matrici (array)
Vettori e Matrici (array) Introduction to modern Fortran Paolo Ramieri, CINECA Maggio 2016 Array - Introduzione Gli array sono serie di variabili dello stesso tipo, ciascuna accessibile mediante indici
VETTORI E MATRICI Funzioni Intrinseche
VETTORI E MATRICI Funzioni Intrinseche FUNZIONI INTRINSECHE Le funzioni intrinseche relative a vettori e matrici (in Fortran 90) sono numerose e possono essere classificate in base al loro ambito di azione:
Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica
Array in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: array DIS - Dipartimento di informatica e sistemistica 1 / 25 Cosa vedremo
Fortran per Ingegneri
Fortran per Ingegneri Lezione 4 A.A. 2014/2015 Marco Redolfi [email protected] Simone Zen [email protected] Formati e Formattazione Finora abbiamo letto valori da tastiera e scritto sullo schermo
Linguaggio C: Array Valeria Cardellini
Linguaggio C: Array Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Array in C q Dichiarazione
Fondamenti Teorici e Programmazione
Fondamenti Teorici e Programmazione Modulo A Elementi di Programmazione Claudio Gallicchio, Ph.D. Array 2 Dati Strutturati I tipi di dati visti finora sono numeri (interi o razionali) booleani (valori
Introduction to Fortran 90
Sinonimi Introduction to Fortran 90 Nicola Spallanzani, CINECA Maurizio Cremonesi, CINECA Ottobre 2014 SINONIMI: SINTASSI DI BASE I sinonimi, o POINTER, non sono altro che nomi cui è associato un tipo
Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal
Algoritmi, Strutture Dati e Programmi : Programmazione in Pascal Prof. Alberto Postiglione AA 2007-2008 Università degli Studi di Salerno Il Linguaggio di Programmazione Pascal Esistono molti linguaggi
Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
Costrutti condizionali e iterativi
Costrutti condizionali e iterativi Introduction to Fortran 90 Paolo Ramieri, CINECA Aprile 2014 Strutture di controllo Le strutture di controllo permettono di alterare la sequenza di esecuzione delle istruzioni
Gli Array. Dichiarazione di un array
Gli Array Un array rappresenta una variabile indicizzata (ovvero contenente un indice) che viene utilizzata per contenere più elementi dello stesso tipo. Ogni array ha un nome al quale viene associato
UD 3.2b: Programmazione in Pascal (1)
UD 3.2b: Programmazione in Pascal (1) Il Linguaggio di Programmazione Pascal Esistono molti linguaggi di programmazione. Per motivi didattici utilizzeremo una versione ridotta di un linguaggio di programmazione
Modularizzazione del software
Modularizzazione del software Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: Subroutine e function DIS - Dipartimento di informatica e sistemistica
Fondamenti di Informatica
Vettori e matrici #1 Le variabili definite come coppie sono dette variabili scalari Fondamenti di Informatica 5. Algoritmi e pseudocodifica Una coppia è una variabile
COMPITO DI FONDAMENTI DI INFORMATICA Allievi Ingegneri Meccanici. Appello Straordinario del 05 Marzo 2007 ( )
COMPITO DI FONDAMENTI DI INFORMATICA Allievi Ingegneri Meccanici Appello Straordinario del 05 Marzo 2007 (09.30 12.30) Esercizio 1 (punti 15) Due file di testo (PAROLE1.TXT e PAROLE2.TXT) contengono un
Introduzione a Matlab
INFORMATICA B Ingegneria Elettrica Introduzione a Matlab Introduzione a Matlab Matlab (MATrix LABoratory) è uno strumento per il calcolo scientifico ed ingegneristico Matlab facilita lo sviluppo di programmi
Informatica (A-K) 5. Algoritmi e pseudocodifica
Vettori e matrici #1 Informatica (A-K) 5. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
Fondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
I tipi strutturati e i record in C++
I tipi strutturati e i record in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi
Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
Gli ARRAY in FORTRAN 90
ELEMENTI DI PROGRAMMAZIONE Gli ARRAY in FORTRAN 90 Un ARRAY è un AGGREGATO di più DATI dello stesso TIPO (interi, reali, etc), ognuno univocamente individuato dal valore di uno oppure due.. e fino a sette
Algoritmi stabili e instabili
Algoritmi stabili e instabili Laboratorio di Calcolo Numerico 13 Marzo 2018 Vettori in MATLAB Finora abbiamo pensato alle variabili utilizzate come semplici valori numerici (variabili scalari). In realtà,
Informatica (CIV) Esercitazione su FORTRAN. Andrea Romanoni
Informatica (CIV) Esercitazione su FORTRAN Andrea Romanoni [email protected] Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano 3 dicembre 2013 Esercizio istogrammi
Laboratorio di Calcolo Numerico Laboratorio 2: Primi programmi in Fortran 90
Laboratorio di Calcolo Numerico Laboratorio 2: Primi programmi in Fortran 90 Andrea Franceschini E-mail: [email protected] Dispense: http://www.math.unipd.it/ putti/teaching/calcolo ambientale/index.html
Fortran. Funzioni e Subroutine.
Fortran Funzioni e Subroutine http://www.dia.uniroma3.it/~roselli/ [email protected] Credits Materiale a cura del Prof. Franco Milicchio Introduzione Dal Fortran II del 1958, Fortran consente di
Sviluppare un programma in FORTRAN
Sviluppare un programma in FORTRAN Scrivere il file sorgente Editor di testo (emacs, vi, notepad, etc) Compilare Compilatore (ifort, gfortran, etc) Eseguire il programma Riga di comando, doppio click,
Breve guida al linguaggio FORTRAN 77
Breve guida al linguaggio FORTRAN 77 Variabili (valori di default) Iniziali con lettere da I a N Iniziali con lettere da A a H oppure da O a Z variabili intere, 4 byte in precisione singola variabili reali,
