• Non ci sono risultati.

Programmazione Procedurale in Linguaggio C++

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmazione Procedurale in Linguaggio C++"

Copied!
10
0
0

Testo completo

(1)

G. Mecca – Università della Basilicata – mecca@unibas.it

Programmazione Procedurale in Linguaggio C++

Sottoprogrammi Parte 8 Il FORTRAN

versione 2.1

Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Sommario

m

Un Altro Esempio: Il FORTRAN

m

Confronto tra Reali

m

Definizione di Funzioni

m

Definizione di Procedure

m

Chiamata di Funzioni

m

Chiamata di Procedure

m

Passaggio dei Parametri Programmazione Modulare

Sottoprogrammi: FORTRAN >> Sommario

(2)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 3

Un Altro Esempio: Il FORTRAN

m

Sottoprogrammi in FORTRAN

ðfunzioni

ðprocedure (chiamate “subroutine”)

m

Differenze fondamentali

ðin FORTRAN i parametri sono passati normalmente per riferimento

ðnon esistono oggetti globali ðnon esistono regole di visibilità

>> equazioni1f.for

Confronto tra Reali

m

Una postilla

ðil FORTRAN è un linguaggio orientato al calcolo di precisione

ði compilatori tendono a tenere in considerazione i problemi numerici

m

Esempio

ðconfronto tra due valori reali ðconfronto tra un valore reale e 0

Sottoprogrammi: FORTRAN >> Confronto tra Reali

(3)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 5

Confronto tra Reali

m

Infatti

ðla rappresentazione dei reali è approssimata (virgola mobile)

ði confronti possono introdurre errori

ðdi conseguenza il compilatore li segnala con degli avvertimenti (WARNING)

Sottoprogrammi: FORTRAN >> Confronto tra Reali

0017) if ((x1.eq.x2).or.(x1.eq.y2).or.

WARNING - The use of .EQ. or .NE. with non-integer operands can produce misleading results

Confronto tra Reali

m

Nei casi ordinari

ðè possibile ignorare gli avvertimenti

m

Una possibile soluzione

ðbasare i confronti sulle differenze

ðcon una precisione accettabile (es: 10-20) ðdefinire una funzione booleana “uguali”

ðche riceve due numeri reali

ðe restituisce vero se la differenza tra i due

Sottoprogrammi: FORTRAN >> Confronto tra Reali

(4)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 7

Confronto tra Reali

logical function uguali(n1, n2) real n1, n2

if (abs(n1-n2).lt.1E-20) then uguali = .true.

else

uguali = .false.

end if return end

Utilizzo: invece di if (x.eq.y) then ...

if (uguali(x,y)) then ...

>> equazioni2f.for

Definizione di Funzioni

m

Sintassi

<tipoRis> function <nome> (<parametri>)

<istruzioni>

end m

Dove

ð<tipoRis> è un tipo di dato ð<nome> è un identificatore

ð<istruzioni> è un blocco di istruzioni ð<parametri> è l’elenco dei parametri

Sottoprogrammi: FORTRAN >> Definizione di Funzioni

(5)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 9

Definizione di Funzioni

real function discriminante (a, b, c) implicit none

real a, b, c

discriminante = b*b-4*a*c return

end

real function primaRadice (a, b, c) implicit none

real a, b, c

real discriminante

primaRadice=-b+sqrt(discriminante(a,b,c)) return

end

Sottoprogrammi: FORTRAN >> Definizione di Funzioni

tipo dei parametri

istruzione di assegnazione

“speciale”

dichiarazione del tipo della funzione

Definizione di Funzioni

m

Elenco dei parametri

ðviene specificato solo l’elenco dei nomi senza tipo

<nomeP1>, <nomeP2> ...

m

Dichiarazione del tipo

ðviene dichiarato tra le istruzioni

ðcon una sintassi simile a quella della dichiarazione delle variabili

Sottoprogrammi: FORTRAN >> Definizione di Funzioni

(6)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 11

Definizione di Funzioni

m

Istruzione return

ðil corpo deve contenerne almeno una

m

Sintassi

return m

Attenzione

ðper specificare il valore da restituire viene utilizzata un’istruzione di assegnazione

“speciale”

<nomeFunzione> = <espressione>

Definizione di Procedure

m

Sintassi

subroutine <nome> (<parametri>)

<istruzioni>

end m

Dove

ð<nome> è un identificatore

ð<istruzioni> è un blocco di istruzioni

ð<parametri> è l’elenco dei nomi dei param.

Sottoprogrammi: FORTRAN >> Definizione di Procedure

(7)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 13

Definizione di Procedure

subroutine leggiEquazione(a, b, c) implicit none

real a, b, c

write (*,*) 'Inserisci i coeff. dell''equazione' read (*,*) a, b, c

return end

subroutine stampaRadici(a, b, c, x, y) implicit none

real a, b, c real x, y

write (*,*) a, 'x2+', b, 'x+', c, '=0' write (*,*) 'Radici: x=', x, ', y=', y return

end

Sottoprogrammi: FORTRAN >> Definizione di Procedure

Utilizzo delle Funzioni

m

All’interno di espressioni

<nomeFunzione>(<arg1>, <arg2>,...<argn>) m

Differenza

ðè necessario che il tipo della funzione sia dichiarato tra le dichiarazioni del modulo chiamante

m

ATTENZIONE

ðse non si usa IMPLICIT NONE vengono utilizzate le regole di tipizzazione implicite

Sottoprogrammi: FORTRAN >> Utilizzo delle Funzioni

(8)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 15

Utilizzo delle Procedure

m

Come istruzioni a sé stante

ðviene utilizzata la parola chiave call

ðper il resto la chiamata è analoga a quella del C++

m

Sintassi

call <nomeProc>(<arg1>, <arg2>,...<argn>)

Passaggio dei Parametri

m

Le regole del FORTRAN

ðnon è possibile distinguere sintatticamente tra parametri standard e per riferimento ðogni volta che ad un parametro viene

associato un argomento modificabile, il passaggio è per riferimento

ðse l’argomento è una costante, il passaggio è standard

Sottoprogrammi: FORTRAN >> Passaggio dei Parametri

(9)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 17

Passaggio dei Parametri

subroutine leggiEquazione(a, b, c) implicit none

real a, b, c

write (*,*) 'Inserisci i coeff. dell''equazione' read (*,*) a, b, c

return end

program prova implicit none real x, y x = 1 y = 2

call leggiEquazione(x, y, 3) ...

Sottoprogrammi: FORTRAN >> Passaggio dei Parametri

In questo caso:

-i primi due parametri vengono passati per riferimento

-il terzo parametro viene passato per valore

Programmazione Modulare

m

Caratteristiche del FORTRAN

ðnon è possibile utilizzare dati globali ðnon ci sono regole di visibilità (i

sottoprogrammi possono comparire in qualsiasi ordine)

ðè ammessa la compilazione separata ðnon essendoci regole di visibilità, non

vengono utilizzati i file di intestazioni

Sottoprogrammi: FORTRAN >> Programmazione Modulare

(10)

G. Mecca - Programmazione Procedurale in Linguaggio C++ 19

Riassumendo

m

Un Altro Esempio: Il FORTRAN

ðConfronto tra Reali

ðDefinizione di Funzioni ðDefinizione di Procedure ðChiamata di Funzioni ðChiamata di Procedure ðPassaggio dei Parametri ðProgrammazione Modulare

Termini della Licenza

m This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit

http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Termini della Licenza

m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare

http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Riferimenti

Documenti correlati

Sottoprogrammi: Sintassi e Semantica &gt;&gt; Linee Guida per i

ðpasso 2.2.4: analizza il tentativo e stampa l’esito Sottoprogrammi: Metodologia di Sviluppo &gt;&gt; Indovina il Numero.. Mecca - Programmazione Procedurale in Linguaggio

Sottoprogrammi: Metodologia di Sviluppo &gt;&gt; Tecniche di Test e

Strutture di Dati: Lista &gt;&gt; Rappresentazione con Record e Array. ATTENZIONE ai

Strutture di Dati: Lista &gt;&gt; Inserimenti e Cancellazioni. Mecca - Programmazione Procedurale in Linguaggio

Strutture di Dati: Lista &gt;&gt; Gestione dei File. i conta il numero di valori prelevati dal

La scelta dei nomi e dell’ordine nel quale inserire i parametri formali (programma chiamato) nella tabella di traccia è OBBLIGATO e corrisponde all’ordine scelto

In generale il nostro obiettivo è quello di ottenere una valutazione asintotica della soluzione oppure, più semplicemente, una stima dell'ordine di grandezza.. Tuttavia sono