Author Archives: admin

Il tipo INTEGER nel Fortran


FORTRANIl tipo INTEGER nel Fortran rappresenta un tipo di dato destinato ad immagazzinare un valore appartenente ad un sottoinsieme dei numeri interi. Attraverso l’istruzione INTEGER potremo dichiarare che una data variabile è del tipo intero.

La sintassi dell’istruzione di dichiarazione di un tipo di dato intero è:

INTEGER [[([KIND=]parametro_di_kind )][, attributi ]::] variabili

dove INTEGER e KIND sono parole chiave del Fortran e variaibili è una lista di nomi di variabili, costanti o funzioni, separati tra loro attraverso l’impiego di virgole.

L’inidicazione dei parametri è opzionale, ad esempio se il parametro_di_kind non è specificato allora è impiegato il valore del parametro di kind di default.

Facciamo allora un esempio di dichiarazione di un tipo integer:

INTEGER :: i, j, k

In questa dichiarazione vengono specificate tre variabili, i, j e k, di tipo intero.

Per dichiarare un array di puntatori scriveremo:

 INTEGER, DIMENSION(15), POINTER :: array

Vediamo ora come possono essere dichiarate delle costanti intere: si utilizza una stringa di cifre con un segno (positivo/negativo) opzionale. Esempi corretti di dichiarazione di costati intere sono:

0, -345, 768, +12345

Mentre esempi sbagliati di dichiarazione di costati intere sono:

  • 1,234 : la virgola non è ammessa
  • 12.0: il punto decimale non è ammesso
  • —4 and ++3: più di un segno
  • 5- and 7+: il segno opzionale segue la stringa di cifre, mentre la dovrebbe precedere.

Sulle variabili del tipo integer sono ammesse le seguenti operazioni:

-assegnazione =
-somma +
-sottrazione –
-moltiplicazione *
-divisione intera /
-potenza **
-confronto >,< ,>=,< =,==./=

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Come inserire dei dati in un programma fortran


FORTRANIn questa lezione vedremo come inserire dei dati in programma fortran attraverso l’utilizzo dello statement DATA. La dichiarazione dei dati rappresenta un altro modo di inserire dei dati di input che sono noti al momento in cui il programma è scritto. E ‘ simile alla istruzione di assegnazione. La sintassi è la seguente:

data lista-delle-variabili/ lista-dei-valori/, …

dove i tre punti significano che questo modello può essere ripetuto. Ecco un esempio:

data a/10/,b/20/, c/2.5/, d/2.5/

Potremmo anche avere scritto questo nel modo seguente:

data a, b/10, 20 /, c,d / 2 * 2,5 /

Lo stesso risultato si ottiene con le assegnazioni:

a = 10
b= 20
c = 2.5
d= 2.5

La dichiarazione dei dati con l’ausilio dello statement data è più compatta e quindi spesso più conveniente. Si noti in particolare la notazione abbreviata per l’assegnazione di valori identici da utilizzare ripetutamente. La dichiarazione dei dati viene effettuata solo una volta, giusto prima dell’esecuzione del programma quando cioè esso si avvia. Per questo motivo, la dichiarazione di dati è utilizzata principalmente nel programma principale e non nelle subroutine.

La dichiarazione dei dati può anche essere utilizzata per inizializzare gli array (vettori, matrici). Questo esempio mostra come per assicurarsi che una matrice sia composta da tutti zero all’avvio del programma può essere utilizzato lo statement data:

real A(10,20)
data A/ 200 * 0.0/

Alcuni compilatori inizializzano automaticamente gli array ma non tutti, quindi se si utilizzare una matrice con elementi diversi da zero è una buona idea di seguire questo esempio. Naturalmente è possibile inizializzare gli array con valori diversi da zero. Si possono anche inizializzare i singoli elementi:

data A (1,1) / 12,5 /, A (2,1) / -33,3 /, A (2,2) / 1.0 /

In alternativa, è possibile elencare tutti gli elementi per piccoli array in questo modo:

integer v(5)
real B(2,2)
data v/10,20,30,40,50/, B/1.0,-3.7,4.3,0.0/

I valori per gli array bidimensionali saranno assegnati in ordine di colonna come al solito.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Interfacce nel Fortran


FORTRANIn questo articolo vedremo come utilizzare le interfacce nel Fortran per definire un sottoprogramma. Le interfacce sono necessarie per definire un sottoprogramma generico. L’ interfaccia è  un blocco di istruzioni non eseguibili  che serve a informare il compilatore sui tipi dati e numero degli argomenti dei sottoprogrammi utilizzati, in mdo che eventuali  utilizzi incoerenti (numero di argomenti diverso,  tipi dati differenti)  possa essere segnalato al momento della compilazione.

La sintassi per definire un blocco interfaccia è la seguente:

interface
...
end interface

al cui interno vanno inseriti i soli blocchi di dichiarazione dei sottoprogrammi e dei rispettivi argomenti. Non vanno messe nell’ interfaccia né  le dichiarazioni di variabili locali né  le istruzioni eseguibili dei sottoprogrammi.
In un blocco interfaccia si possono collocare le dichiarazioni relative a più  sottoprogrammi. Si possono anche avere più  blocchi interfaccia nella stessa unità  di programma.

Le interfacce nel Fortran riferiscono la specifica conoscenza che il compilatore ha circa una procedura durante la sua compilazione. Se l’interfaccia è esplicita, il compilatore può verificare che il sottoprogramma venga richiamato correttamente. Se, tuttavia, l’interfaccia è implicita, il compilatore Fortran 90 non dispone di informazioni sui tipi e numero di argomenti utilizzati dal sottoprogramma o il valore di ritorno del risultato di una funzione.

La Tipizzazione implicita viene utilizzata nel programma chiamante per determinare il risultato restituito da una funzione, nel caso in cui non si disponga della dichiarazione. Di conseguenza, nessun tipo di controllo può essere fatto per verificare che un sottoprogramma è stato chiamato correttamente. Diremo allora implicite tutte le interfacce che sono disponibili nel Fortran 77.

Ad esempio la funzione sin (x)  calcola, in modo appropriato, il seno del suo argomento, se x è singola o in doppia precisione, oppure un numero reale o complesso. In Fortran 90, i sottoprogrammi definiti dall’utente possono essere generici nello stesso senso. Le funzioni generiche e le subroutine possono essere definiti, analogamente a qualsiasi altro sottoprogramma, anche se l’interfaccia deve essere esplicita. Il modo usuale di definire una tale funzione generica è quella di inserirlo in un modulo, come nell’esempio riportato di seguito.

module AritmeticaRazionale
   type rational
      integer n, d   ! Numeratore e denominatore.
   end type rational

   interface operator (*)
      module procedure integerRationalMultiply, &
                       rationalIntegerMultiply
   end interface

   contains

   function integerRationalMultiply( i, r )
      type( rational ) integerRationalMultiply
      integer, intent( in ) :: i
      type( rational ), intent( in ) :: r

      integerRationalMultiply = rational( i * r%n, r%d )
   end function integerRationalMultiply

   function rationalIntegerMultiply( r, i )
      type( rational ) rationalIntegerMultiply
      type( rational ), intent( in ) :: r
      integer, intent( in ) :: i

      rationalIntegerMultiply = rational( i * r%n, r%d )
   end function rationalIntegerMultiply

end module AritmeticaRazionale

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Cicli FOR in Matlab

MATLAB

Per implementare dei Cicli FOR in Matlab bisogna utiizzare l’istruzione for che ripete un gruppo di istruioni un numero fissato di volte . Il ciclo viene terminato dall’istruzione END. Il ciclo for è una struttura di controllo iterativa che determina l’esecuzione di una porzione di programma ripetuta per un certo numero noto di volte.

Vediamo un esempio:

for n = 3:32
   r(n) = rank(magic(n));
end
r

Il punto e virgola che termina l’istruzione sopprime la stampa ripetuta, e il termine r dopo il loop espone a video il risultato finale.

Cicli FOR in Matlab

E’ buona norma ordinare i loop al fine di una discreta leggibilità; per fare questo è necessario identare il testo come nell’esempio proposto:

for i = 1:m
  for j = 1:n
    H(i,j) = 1/(i+j);
  end
end

In tale esempio è stato implementato un ciclo for annidato, in cui vengono utilizzati due cicli for per eseguire un doppio ciclo su una varibile strutturata.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Struttura switch e case in Matlab

MATLAB

La struttura switch e case in Matlab ci consente di eseguire gruppi di istruzioni basati sul valore di un variabile o di un’espressione. La keywords case e otherwise delinea i gruppi. Solamente il primo caso è eseguito. Ci deve essere sempre una parola chiave end per lo statement switch .

La logica dell’algoritmo della matrice magic square può, ad esempio, essere descritta anche con il seguente codice Matlab:

switch (rem(n,4)==0) + (rem(n,2)==0)
  case 0
    M = odd_magic(n)
  case 1
    M = single_even_magic(n)
  case 2
    M = double_even_magic(n)
  otherwise
    error('This is impossible')
end

Diversamente dal linguaggio C, lo switch di MATLAB non commette errori. Se la prima istruzione del costrutto case risulta vera, il restante case statement non è eseguito. Così, non si rendono necessari break statement.

Vediamo ora un altro esempio in cui si visualizza un altro testo condizionale, in funzione di un valore immesso al prompt dei comandi.

n = input('Inserisci un numero: ');

switch n
    case -1
        disp('negativo')
    case 0
        disp('zero')
    case 1
        disp('positivo')
    otherwise
        disp('altro valore')
end

La struttura switch e case in Matlab

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Istruzione IF in Matlab

MATLAB

L’istruzione if in Matlab valuta un’espressione logica ed esegue un gruppo di asserzioni quando l’espressione risulta vera. L’else if opzionale e altre keywords provvedono per l’esecuzione di gruppi alternati di asserzioni. Una keyword END termina l’ultimo gruppo di asserzioni. I gruppi di asserzioni sono delineati da quattro keywords non sono previste parentesi.

L’algoritmo di MATLAB per generare una magic square di ordine n coinvolge tre casi diversi:

  1. quando n è dispari,
  2. quando n è pari ma non divisibile per 4,
  3. quando n è divisibile per

Questo è quanto riportato nel costrutto seguente:

if rem(n,2) ~= 0
   M = odd_magic(n)
elseif rem(n,4) ~= 0
   M = single_even_magic(n)
else
   M = double_even_magic(n)
end

In questo esempio, i tre casi sono mutuamente esclusivi, ma se non lo fossero, la prima condizione vera sarebbe comunque eseguita. Tutto ciò è importante per capire come gli operatori relazionali e le strutture if lavorano con le matrici.

Quando si vuole controllare l’uguaglianza tra due variabile, usare:

if A == B, ….

Questo è consentito in MATLAB, e fa quello che ci si aspetta quando A e B sono scalari. Ma quando A e B sono matrici, A == B non esamina se loro sono uguali, esamina solo dove loro sono uguali; il risultato è un altra matrice di 0 e di 1 che espone l’uguaglianza elemento per elemento.

Istruzione IF in Matlab

Infatti, se A e B non sono della stessa taglia, allora l’istruzione A == B è un errore. Il modo corretto per controllare l’uguaglianza tra due variabile è quello di usare la funzione isequal:

if isequal(A,B), …

Qui c’è un altro esempio per enfatizzare questo punto. Se A e B sono scalari, il programma seguente mai arriverà alla situazione inaspettata. Ma per la maggior parte delle matrici, includendo le nostre magic square con colonne scambiate nessuna delle condizioni seguenti A> B, A< B o A == B è vero per tutti gli elementi e così l’altra clausola è eseguita.

if A > B
   ‘greater’
elseif A < B
   ‘less’
elseif A == B
   ‘equal’
else
   error(‘Unexpected situation’)
end

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il Comando DIARY in Matlab

MATLAB

Il comando diary in Matlab crea un’agenda della sessione di MATLAB in un file immagazzinato nel disco fisso del computer. E’ possibile esplorare e compilare il file di testo con un qualsiasi word-processor. Per creare un file diary che contenga tutti i comandi basterà digitare al prompt di Matlab:

>>diary

Per salvare l’intera sessione di MATLAB in un archivio con un particolare nome, utilizzeremo la seguente notazione:

>>diary filename

Per bloccare la registrazione della sessione corrente, invece digiteremo:

>>diary off

La funzione diary quindi crea un elenco degli input da tastiera e registra il testo risultante in un file, con alcune eccezioni. Il file ottenuto con il comando diary è un file ASCII, adatto per la ricerca in, la stampa, l’inserimento nella maggior parte delle relazioni e altri documenti. Se non si specifica il nome del file, il software MATLAB crea un file chiamato diary nella cartella corrente.

Il Comando DIARY in Matlab

Il comando diary (‘filename’) scrive una copia di tutti gli input da tastiera successivi al comando nel file chiamato appunto nomefile, dove nomefile è il percorso completo o il nome del file si trova nella cartella MATLAB corrente. Se il file esiste già, l’output viene aggiunto alla fine del file. Non è possibile utilizzare un nome di file chiamato o disattivarlo. Per visualizzare il nome del file diary corrente, utilizzare il comando:

>>get (0, ‘DiaryFile’)

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Il comando dir in Matlab

MATLABAnalizziamo il comando dir in Matlab che elenca i file e le cartelle presenti nella cartella corrente di MATLAB. I risultati vengono visualizzati in un ordine che dipende dal sistema operativo.

Il comando seguente:

> dir nome

elenca i file e le cartelle che corrispondono al nome fornito sottoforma di stringa. Quando il nome è una cartella, dir elenca il contenuto della cartella. Specificare il nome usando i nomi di percorso assoluti o relativi. È possibile utilizzare i caratteri jolly (*). Il comando:

lista = dir (nome)

restituisce gli attributi relativi a nome.

il comando dir in matlab

Vediamo alcuni esempi di applicazione del comando dir in Matlab, per visualizzare il contenuto della cartella matlab/audiovideo scriveremo, che si trova nella cartella corrente di Matlab:

dir(fullfile(matlabroot, ‘toolbox/matlab/acustica’))

Vediamo invece come ricercare delle informazioni ed ottenere i risultati in una forma strutturata: ad esempio se volessimo immagazzinare nella variabile files tutti i file contenuti in una specifica cartella con esetensione .m scriveremo

files = dir(fullfile(matlabroot, ‘toolbox/matlab/acustica/*.m’))

MATLAB fornisce le informazioni in un structure array del tipo:

files =
25×1 struct array with fields:
name
date
bytes
isdir
datenum

Per accedere ad uno specifico item invece scriveremo:

files(3).name
ans =
acustica.m

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Python Interactive Shell

python

Per avviare Python o più correttamente per aprire la Python Interactive Shell basterà cliccare sul menu Start per trovare l’icona della shell già pronta tra i programmi di uso frequente, oppure basterà cliccare su Tutti i programmi quindi sulla voce Active State Active Python 3.1.

Dopo aver attivato la Python Interactive Shell ci troveremo a disposizione una finestra nella quale sarà possibile digitare da linea di comando le nostre istruzioni python. Iniziamo a tal proposito con il classico messaggio che i programmatori usano inviare alla shell per testarne il regolare funzionamento; mi riferisco al più classico dei messaggi: “Hello World”.

Per poter visualizzare un messaggio dalla shell sarà necessario stamparlo, ed allora quale poteva essere il comando che ci permette di fare questo se non print (che tradotto in italiano vuol dire stampa), questo a conferma del fatto che leggere del codice Python equivale a leggere un comune listato in lingua inglese.

Allora per visualizzare sul prompt dei comandi il messaggio “Hello World” basterà digitare la seguente istruzione:

print(‘Hello World’) 

per ottenere la stampa del messaggio come riportato nella figura.

Python Interactive Shell

Fatto questo vediamo ora come ricevere un primo ed immediato aiuto proprio dalla shell interattiva di Python; infatti all’apertura della shell viene visualizzato il seguente messaggio:

ActivePython 3.1.2.3 (ActiveState Software Inc.) based on

Python 3.1.2 (r312:79147, Mar 22 2010, 12:30:45) [MSC v.1500 64 bit (AMD64)] on

win32

Type “help”, “copyright”, “credits” or “license” for more information.

>>> 

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Link a risorse consigliate:

Installare Python dal codice sorgente su Linux

python

Vediamo ora come installare Python dal codice sorgente su Linux e compilandolo sulla nostra macchina. Se non si dispone di un gestore di pacchetti, o piuttosto non se ne fa uso, è possibile compilare Python per ottenere una versione fatta da noi. Questa può essere una scelta obbligata ad esempio se ci si trova su una macchina UNIX, senza l’accesso come root.

Questo metodo è molto flessibile, e consente di installare Python ovunque si desideri, anche nella nostra home directory. Per compilare e installare Python, basterà seguire i seguenti passaggi:

  • visitare il sito al seguente url: http://www.python.org/download/;
  • seguire le istruzioni per scaricare i sorgenti;
  • scarica il file con estensione. Tgz. e salvare in una posizione temporanea. Ipotizzando che si desidera installare Python nella nostra home directory, si consiglia di metterlo in un directory con nome ~ / python;
  • spostarsi in questa directory (ad esempio, utilizzando il comando cd ~ / Python);
  • scompattare l’archivio con il comando tar -xzvf Python-3.1.2.tgz (dove 3.1.2 è il numero della versione del codice sorgente scaricato);
  • se la nostra versione di tar non supporta l’opzione z, è possibile decomprimere l’archivio con il comando gunzip prima, per poi utilizzare il comando tar -xvf. Se c’è qualcosa che non va con l’archivio, provare a scaricarlo di nuovo. A volte si verificano errori durante il download.
  • spostarsi nella directory in cui è stato spacchettato il sorgente con il comando $ Cd Python-3.1.2
  • a questo punto eseguire i seguenti comandi:

. / Configure – prefix = $ (pwd)

make

make install

la procedura di compilazione terminerà con la creazione di un file eseguibile denominato Python posizionato nella directory corrente. (Se si dovessero vericare degli errori in fase di compilazione  consultare il file README incluso nella distribuzione.)

Installare Python dal codice sorgente su Linux

  • ora basterà aggiungere la directory corrente nella variabile d’ambiente PATH, e si sarà pronti a partire.
  • per conoscere le altre direttive di configurazione, eseguire questo comando: . / Configure – help

Dopo aver visto come installare Python dal codice sorgente, per avviarlo basterà digitare al prompt di Linux il comando:

python

per entrare nella Linux interactive shell.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Link a risorse consigliate:

Come installare Python su Linux

python

Vediamo ora come installare Python su Linux, in verità nella maggior parte delle installazioni Linux, è già presente un interprete Python. È possibile verificare se questo è vero anche nel nostro caso, eseguendo il comando Python nel prompt di Linux:

$ python

L’esecuzione di questo comando dovrebbe avviare l’interprete interattivo di Python, con un output simile a quello di seguito riportato:

Python 2.4.3 (#2, Apr 27 2006, 14:43:58)

[GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] on linux2

Type “help”, “copyright”, “credits” or “license” for more information.

>>>

Da questo momento in poi potremo iniziare ad utilizzare Python in modalità interattiva; per uscire dall’interprete basterà digitare la combinazione di tasti ctrl + d.

Se al contrario l’interprete Python non è installato, probabilmente si otterrà un messaggio di errore simile al seguente:

bash: python: command not found

In questo caso dovremo procedere ad installare Python su Linux; anche se è difficile che nelle nuove versioni di Linux non sia presente una versione dell’interprete visto il massiccio uso che le applicazioni Linux fanno di Python.

python

Comunque nel caso non fosse presente sarà necessario installarlo; allora avremo a disposizione due possibilità:

  1. utilizzare un Package Manager;
  2. compilare il programma dai file sorgente.

Nel primo caso le cose sono estremamente semplici ed immediate, infatti basterà autenticarsi con i privilegi di amministratore ed utilizzare uno dei programmi a corredo di Linux per installare la versione più recenti di Python. Ad esempio su una distribuzione Debian basterà digitare:

$ apt-get install python

mentre su una distribuzione Gentoo Linux:

$ emerge python

ed infine su ubuntu:

$ sudo apt-get install python

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Link a risorse consigliate: