Informatica.  AA 2009/10.

Lezione di laboratorio n. 3


N.B. per ragioni connesse con la configurazione del software di sistema dell'aula informatica, prima di compilare i programmi di questa sessione  andrà  dato il comando:   .   /home/pastore/setg95

(è  sufficiente darlo una sola volta da ciascuna finestra terminal aperta).

Si ricorda che nel compilare i sorgenti Fortran può esser comodo utilizzare uno dei parametri opzionali del compilatore per attribuire al file binario eseguibile prodotto dal compilatore un nome diverso da a.out (risparmiando quindi l'  eventuale passo di cambiarne  successivamente  il nome con i comandi di shell). Il parametro è
-o file
dove file indica il nome che si vuole attribuire all' eseguibile. P.es. 
g95   pippo.f90  -o pippo.x
Attenzione però a non sbagliarsi: se si mette per errore il nome del file sorgente ( .f90) subito dopo -o il file sorgente verrà cancellato!

  1. Scrivere un programma che accetti come input da tastiera un carattere e due numeri reali.   Se  il carattere è  c  oppure C  i due numeri reali vanno interpretati come coordinate cartesiane. Se  il carattere  è  Pp  i due numeri vanno interpretati come  coordiante polari ( r   e  φ ).  In questo contesto ci interessa solo il fatto  che le coordinate polari sono un diverso sistema per identificare la posizione di un punto del piano dandone la distanza dall'origine e l' angolo  del vettore posizione rispetto ad  una semiretta. In caso di coordinate polari il programma deve verificare che il primo dei numeri reali  (la distanza) sia maggiore o  uguale a zero. Qualora tale  condizione non sia  soddisfatta  il programma deve terminare con un messaggio di errore.  Altrimenti,  se l'  input  è  costituito da coordinate cartesiane,  se ne deve dare la trasformazione in coordinate polari (viceversa da polari a cartesiane se l'  input  è  in  coordinate polari).  Per ottenere l'  angolo a  partire dalle coordinate x,y  senza dover analizzare esplicitamente a  quale quadrante appartiene il punto  si suggerisce di usare la funzione atan2(y,x)  che dà  il valore dell'  angolo nell' intervallo [-pi_greco, pi_greco].


    N.B.La conversione da coordinate cartesiane (x,y) a polari (r,phi) e viceversa si implementa mediante le formule:
    r = sqrt(x**2 + y**2)
    phi = atan2(y,x)
    
    x=r*cos(phi)
    y=r*sin(phi)
    
    

  2. In Fortran  si può  leggere un file di caratteri di nome fort.xxx (xxx è  un numero intero) mediante   un'  istruzione read(unit=xxx,fmt=*) lista   dove lista   è  un elenco di variabili separato  da virgole.  Copiare il file   qui presente in un file nella propria directory di lavoro per questa esercitazione sotto il nome di fort.10 e  modificare il programma dell'  esercizio precedente perche' legga i primi due dati di ciascuna delle 2000 righe  del file come coppie di coordinate cartesiane x,y,  ottenga le corrispondenti coordiante polari e le scriva in un nuovo file di nome fort.11.

  3. Le  funzioni di libreria MIN(a,b) e MAX(a,b)  danno  come risultato il minimo ed il massimo tra i valori in argomento. Scrivere un programma  che, dopo aver inizializzato due variabili reali  xminxmax con  un valore, molto grande la prima e molto piccolo la seconda (per "piccolo" non si intende piccolo in valor assoluto, ma si tiene conto della presenza dei valori negativi), mediante un ciclo do acquisisca  dati da tastiera e ridefinisca xmin come il minimo tra il valore precedente  ed  il nuovo dato, e xmax viene ridefinito come il massimo tra xmax  precedente e il nuovo dato. Alla fine del ciclo il  programma deve visualizzare su schermo   i valori di xmin e xmax.

  4. Scrivere un programma che calcoli la distanza dell'  orizzonte,  in km, in funzione dell'  altezza sul livello mare, in metri,  del punto di osservazione. Utilizzare per il raggio terrestre il valore R_T = 6378 km.  Fare attenzione ad  eventuali problemi di precisione.
    La formula da utiizzare si ricava mediante una semplice applicazione del teorema di Pitagora:
    d = sqrt((R_T+h)**2 - (R_T)**2)
    
    
    dove h rappresenta l' altezza sul livello del mare e d la distanza dell' orizzonte dal punto di osservazione.

  5. Scrivere un programma che calcoli, in modo approssimato,  la somma della serie di termine generale 1/n**2  (da n=1) che dovrebbe   convergere a pi**2/6 (pi = pi_greco). La somma di una serie prevederebbe di calcolare infinite somme. In modo approssimato si può arrestare la somma dopo M termini. Per verificare il risultato, si ricorda che pi=arccos(-1) e  che il risultato della funzione arccos in -1 in Fortran si ottiene come acos(-1.0).