Calcolo Numerico e Laboratorio di Calcolo
Prof. M. Redivo Zaglia
Esercizi di programmazione
Esercizio
- Si recuperi, salvandolo in un file, il programma
cavo.f,
(possibile soluzione dell'esercizio
8.11, testo Fortran 77 di T.M.R. Ellis), si compili e si
faccia eseguire due volte, con i valori 300 (potenza P) e 220 (tensione V),
e poi con i valori 2000 (potenza P) e 220 (tensione V),
ottenendo su video i risultati riportati sul file
cavo.out.
Si modifichi poi il programma cavo.f in modo che la scrittura delle due
prove avvenga su due file con nome diverso
(cavo1.out e
cavo2.out), facendo leggere da tastiera, in fase di esecuzione, il
nome del file (si usi una variabile Fortran CHARACTER).
Esercizio
- Si recuperino, salvandoli in file separati, i programmi
seno.f,
seno1.f e
seno2.f (possibili soluzioni dell'esercizio
5.7, testo Fortran 77 di T.M.R. Ellis), si compilino e si
facciano eseguire con i valori (di h) 0.5, 0.125, 0.05, 0.001.
(possibili uscite su video o su file (per il programma seno2.f)
sono:
seno.out,
seno1.out e
seno2.out.
Esercizio
- Si recuperino, salvandoli in file separati, i programmi
potenziale.f,
potenziale1.f e
potenziale2.f (possibile soluzione dell'esercizio
3.17, testo Fortran 77 di T.M.R. Ellis), si compilino e si
facciano eseguire con i valori 1.56 (distanza r) e 10 (intero Z)
ottenendo su video (rispettivamente) i seguenti risultati:
potenziale.out,
potenziale1.out e
potenziale2.out.
Si modifichi poi il programma potenziale1.f in modo che la lettura avvenga
dal file di nome pot.in e la scrittura venga effettuata sul file
pot.out.
Esercizio
- Si scriva un algoritmo e poi un programma per visualizzare i primi 20
numeri della sequenza di Fibonacci per la quale ogni numero è
la somma dei due numeri precedenti. Inizia con
1, 1, 2, 3, 5, 8, 13, ...
Esercizio
- Si scriva un algoritmo che legga in ingresso una coppia di numeri reali
x ed y e ne stampi la somma x+y e la differenza x-y.
- Si scrivano poi, utilizzando un editor a piacere, due programmi Fortran
77: il primo, di nome sem.f, utilizzando per i numeri reali
la semplice precisione (REAL*4) ed il secondo, di nome dop.f,
la doppia precisione (REAL*8)
- Ottenuti i programmi eseguibili funzionanti, si provino gli stessi
sulle seguenti coppie di numeri reali e si confrontino i risultati ottenuti
con quelli della tabella a pagina 31 del testo.
123456789.0
|
123456788.0
|
123456789.0
|
123456790.0
|
0.56543451e6
|
0.21554623e-4
|
1.0
|
0.5e-6
|
0.5654328749876
|
0.5654328510104
|
0.3333333333
|
0.1111111111
|
Esercizio
- Utilizzando un editor di testo a piacere, si scrivano su di un file di
nome ingresso.dat i seguenti dati:
12.25e-3
|
12.00e-3
|
13.26e-3
|
14.00e-3
|
14.00e-5
|
10.00e-5
|
56.21e1
|
56.00e1
|
17.20e2
|
17.19e2
|
- Si scriva un programma che legga dal file esterno ingresso.dat
tali numeri, e li stampi sullo schermo rispettando il formato a due colonne
presente nel file di ingresso.
- Si scriva un altro programma che legga dal file esterno ingresso.dat
le coppie di numeri assegnate e che calcoli, per ogni coppia di numeri (x,y) il valore
err= abs(x-y)/abs(y) e produca in uscita un file di nome uscita.dat
costituito da tre colonne di numeri: la prima e la seconda uguali alle colonne
del file originale e la terza colonna contenente il valore calcolato err
corrispondente.
Esercizio
- Si scriva un programma che legga dal file esterno ingresso.dat
definito nell'esercizio precedente le coppie di numeri assegnate.
- Il programma calcoli, per ogni coppia di numeri (x,y) i valori
erra=abs(x-y) ed err= abs(x-y)/abs(y), e produca in uscita
un file di nome erra.dat costituito da due colonne di numeri: la prima
contenente il numero della riga, la seconda contenente il valore calcolato
erra. Si produca anche un secondo file err.dat costituito
da due colonne di numeri: la prima contenente il numero della riga, la seconda
contenente il valore calcolato err.
- Si utilizzi il software GNUPLOT per produrre un unico grafico che contenga
due curve: la prima corrispondente ai valori di erra e la seconda
corrispondente ai valori di err.
- Si visualizzi con il software GHOSTVIEW il file contenente il disegno
e lo si stampi
Soluzione:
figura.ps
Esercizio
- Si scriva un programma che legga da un file esterno un numero
n di
dati (interi o reali), il cui valore n viene dato dall'utente all'inizio dell'esecuzione.
Tale programma deve calcolare e stampare (su video) la somma ed il prodotto dei dati letti.
- Si modifichi poi il programma (utilizzando il valore di segnalazione
(o tappo), in modo che non sia necessario inserire il numero dei dati, ma che sia
direttamente il programma a contarli.
In uscita, assieme alla somma ed al
prodotto, si stampi anche il numero di dati, calcolato dal programma stesso.
-
Si modifichino i due programmi
precedentemente sviluppati in modo che leggano (da file o da tastiera)
tutti i numeri forniti in ingresso e li memorizzino su di un vettore (opportunamente
dimensionato) e che calcolino poi somma e prodotto, utilizzando le componenti
del vettore.
Esercizio
- Si scriva un algoritmo per la risoluzione di un'equazione di primo grado
a*x=b
a coefficienti reali, operando tutti
i controlli necessari per determinare se l'equazione è
determinata, indeterminata o impossibile.
- Si testi a mano se l'algoritmo restituisce i risultati corretti, scegliendo
opportunamente i valori di ingresso in modo da controllere tutte le possibilità.
- Si traduca poi l'algoritmo
in un programma in Fortran (doppia precisione) e lo si provi nuovamente con i dati
utilizzati per la traccia manuale e con altri dati.
Esercizio
- Si scriva un algoritmo per la determinazione delle soluzioni reali
di un'equazione di secondo grado
a*x**2 + b*x + c = 0
a coefficienti reali,
operando tutti
i controlli necessari per determinare se l'equazione ha
radici reali distinte, radici reali coincidenti o nessuna radice reale.
Soluzione: Si vedano gli algoritmi
versione normale e
versione stabile
- Si testi a mano se l'algoritmo restituisce i risultati corretti (nel caso delle radici
complesse, l'algoritmo deve stampare un avviso), scegliendo
opportunamente i valori di ingresso in modo da controllere tutte le possibilità.
- Si traduca poi l'algoritmo
in un programma in Fortran (doppia precisione) e lo si provi nuovamente con i dati
utilizzati per la traccia manuale e con altri dati.
Esercizio
Si devono risolvere un certo numero di equazioni di secondo grado,
i cui coefficienti
e
sono:
Tali terne devono essere memorizzate in un file di nome coeff.dat
aggiungendo un'ultima riga (che servirà da valore di segnalazione per
il programma) contenente
Si scriva un programma che legga riga per riga il file coeff.dat
e che, utilizzando i coefficienti della riga, risolva la corrispondente equazione
di secondo grado (con la versione normale oppure stabile).
I risultati devono essere scritti in un file di nome risultati.dat,
indicando i valori dei tre coefficienti, la scritta indicatrice del tipo di
soluzioni ottenute ed (in caso ve ne siano) anche i valori.
Una possibile uscita su file (per le terne assegnate) dovrebbe contenere
** Coefficienti: a = 1. b = 2. c = 3.
Nessuna soluzione reale
** Coefficienti: a = 3. b = 8. c = 2.
Due soluzioni distinte (x1 <> x2)
-2.38742589 -0.27924078
** Coefficienti: a = 2. b = 4. c = 2.
Due soluzioni coincidenti (x1 = x2)
-1.
** Coefficienti: a = 0. b = 1. c = 2.
Equazione di grado 1 (unica soluzione x1)
-2.
** Coefficienti: a = 3. b = 5. c = 0.
Due soluzioni distinte (x1 <> x2)
-1.66666667 0.
** Coefficienti: a = 4. b = 0. c = 3.
Nessuna soluzione reale
** Coefficienti: a = 4. b = 0. c = -3.
Due soluzioni distinte (x1 <> x2)
-0.866025404 0.866025404
** Coefficienti: a = 0. b = 0. c = 2.
Equazione impossibile
** Coefficienti: a = 3. b = 0. c = 0.
Due soluzioni coincidenti (x1 = x2)
0.
** Coefficienti: a = 0. b = 0. c = 0.
Equazione indeterminata
Soluzioni:Programma in Fortran 77,
coeff.dat, risultati.dat
Esercizio
-
Si deve creare una tabella contenente il valore di sin(x)
per x che assume i valori da 0
a 90 gradi, con
intervalli di 1 grado.
Ogni riga deve riportare l'angolo x
(in gradi), il valore di sin(x) .
-
Si scriva un algoritmo per la creazione di tale tabella
(utilizzando la struttura di tipo array)
-
Si scriva un programma Fortran che implementi tale algoritmo e che calcoli il valore di
sin(x) utilizzando la funzione Fortran intrinseca
SIN . Si ricordi che tale funzione richiede come
argomento una variabile che contenga l'angolo
in radianti. Pertanto
si deve prevedere la conversione gradi/radianti.
Esercizio
-
Si svolga l'Esercizio 2.4 del testo (pagina 45).
Esercizio
-
Si stimi il valore di eps e si calcoli la base b utilizzata
dal computer sul quale si lavora, scrivendo due programmi che implementino
gli algoritmi 2.8.1 e 2.8.2 del testo (pagina 44).
Esercizi vari
Considerati gli esempi del testo alla sezione 2.7,
si scrivano i programmi relativi e
si ritrovino i risultati numerici e le figure riportate.