- La prima cosa da imparare a fare è l' operazione di
"lanciare" un programma, ovvero richiederne l' esecuzione al sistema
operativo attraverso l' interprete di comandi.
Il funzionamento dell' interprete di comandi UNIX è il
seguente:
in genere l ' interprete di comandi segnala di essere in attesa di un
comando
visualizzando sullo schermo una scritta (il prompt) dopo la quale
appare
qualsiasi carattere venga digitato sulla tastiera.
Il prompt varia da sistema a sistema e da utente a utente
(eventualmente è
riconfigurabile dall' utente).
Se digito qualcosa da tastiera e premo il tasto "invio" (o "enter"
o
"return" a seconda della testiera)
l' interprete decomporrà in parole la sequenza di caratteri
dell' input, utilizzando
uno o più spazi, eventualmente presenti, come separatori. La
prima
parola così ottenuta sarà considerata un possibile nome
di file contenente istruzioni
macchina oppure istruzioni
per l'
interprete. Se il file viene indicato mediante il nome corto
verrà
ricercato solo all' interno di un insieme di directory predefinito (il
cosiddetto path). Posso sempre indicare in modo compatto il nome lungo
di un file nella directory corrente premettendo ./ al suo nome
corto. Il punto davanti allo slash (./) rappresenta la
directory corrente.
Un comando utilissimo nell' ambito della visualizzazione di dati
scientifici, disponibile quasi universalmente nei sistemi linux (ma ne
esistono versioni per Windows e per
MacOsX),
è gnuplot. Questo
permette di ottenere facilmente grafici di dati o funzioni di una
o due variabili.
Lanciare l' applicazione gnuplot e dare il comando seguente per
avere informazioni sul comando "plot"
help plot
Provare poi a dare il comando
plot [0:4*pi] sin(x)
o la sequenza
set isosampl 40,40
set hidden
splot [-2.5:2.5][-2.5:2.5] exp(-(x**2+y**2))*sin(x*y)
Provare con altre funzioni e, nei prossimi giorni, prima della prossima
lezione, provare a seguire
qualcuno degli esempi dell' help.
- Dall' interprete di comandi, verificare qual è la
directory corrente mediante il
comando pwd. Esaminare
quali file sono contenuti nella directory corrente mediante il comando ls.
Creare una directory di nome es1. (Il comando
è mkdir es1. Verificarne la
modalità di
utilizzo
mediante il comando man mkdir ). Una
volta creata la directory es1, si
potrà far diventare questa la
directory di default col comando cd es1. In questo modo tutti i nomi
"corti" dei
files saranno completati dal sistema con la gerarchia di directory che
termina in es1: p.es il file pippo sarà
interpretato come
corrispondente al nome lungo /home/user/es1/pippo.
- Creare mediante l' editor (dove mai
sarà l' icona dell' editor di testi ?) un file
di testo
di nome
primo.f90 contenente il seguente programma Fortran che legge l' input
dalla tastiera e lo mostra su schermo.
program echo
character(len=30) :: input
read*,input
print*,input
end program echo
- Il programma Fortran (codice sorgente) non
è direttamente eseguibile o interpretabile da parte del
computer. Occorre
procedere ad un passo intermedio che è la compilazione
del
programma. Questo significa usare il codice sorgente come input di un
programma del sistema (il compilatore)
che è in grado di
tradurre le
istruzioni simboliche del Fortran (o di altro linguaggio di
programmazione) in istruzioni macchina rappresentate mediante la
codifica binariaappropriata per il processore con cui si sta
lavorando. Il
compilatore genera un file in output che contiene tali istruzioni
binarie. In pratica si può procedere così:
- assicurarsi che la directory di default contenga il
file primo.f90 (p.es. col comando ls) ;
- quindi compilare il programma mediante l' istruzione
g95 primo.f90
- Verificare mediante il comando ls quali files sono
presenti nella directory corrente. Usare il
comando
ls -l
( attenzione: l' opzione -l corrisponde ad una elle
minuscola) per
avere un' informazione più dettagliata sulle proprietà
dei
files
presenti.
- Cambiare il nome del file a.out in primo.x.
(con
il comando "mv a.out primo.x". Verificare prima e
dopo col comando ls la situazione dei files nella directory corrente).
- Eseguire il file primo.x digitandone il nome
(quasi sicuramente, ma dipende dalla configurazione del sistema, il
nome del file va
preceduto da ./ , Es: ./primo.x ) e premendo
"invio". Attenzione, quando il programma viene eseguito, la prima
istruzione "aspetta" silenziosamente un input da tastiera. L' input
termina quando si preme il tasto "invio". L' esigenza o meno di dover
premettere la directory corrente ( ./ ) al nome del file eseguibile
dipende da come è configurato il "path" ovvero l'
insieme di directory in cui il sistema cerca un file col nome del
comando. Se la directory corrente ( indicata da .
) non figura tra le componenti del path (visualizzabile mediante
il comando echo $PATH) può sempre essere aggiunta
mediante il comando (da dare all' interprete di
comandi): export PATH=.:$PATH.
- Modificare il programma precedente in modo che scriva su
schermo che è in attesa di input. Per un'
informazione sul fatto
far
scrivere un testo su schermo è sufficiente aggiungere l'
istruzione print*,"qui tra i doppi apici quello
che voglio scrivere su schermo" prima della
linea contenete l' istruzione read.
Ricompilare ed eseguire.
- Creare mediante l' editor un file di testo contenente il
seguente programma Fortran che risolve l' equazione generica di secondo
grado a coefficienti reali. Compilare ed eseguire il programma con
input diversi e verificare i risultati ottenuti.
Che succede se i valori dei coefficienti corrispondono ad un discriminante negativo ? Provare.
program secondo_grado
implicit none
! l' istruzione precedente obbliga a definire esplicitamente il tipo di ogni variabile
real :: a,b,c ! i coefficienti reali dell' equazione
! a x**2 + b x + c = 0
real :: discr,xp,xm ! discriminante e soluzioni corrispondenti
! alle due scelte del segno davanti la
! radice quadrata
read*, a,b,c ! i coefficienti vengono letti
discr = b**2 - 4*a*c
xp = ( -b + sqrt(discr) )/(2*a)
xm = ( -b - sqrt(discr) )/(2*a)
print*,xp,xm
end program secondo_grado
- Il meccanismo di scrittura-compilazione-esecuzione è
comune a
tutti i lunguaggi compilati. Creare un file di testo di nome primo.c
contenente la seguente versione C del programma primo.f90. Compilarlo
mediante gcc primo.c ed eseguire il codice binario con il comando
./a.out
#include <stdio.h>
int main(void)
{
char input[31];
scanf("%30s",input);
printf("%s",input);
return 0;
}