Fortran Zelfstudie
Aan de slag met Fortran
Zoeken…
Opmerkingen
Fortran is een taal die veel wordt gebruikt in de wetenschappelijke gemeenschap vanwege zijn geschiktheid voor numerieke berekening. Bijzonder aantrekkelijk is de intuïtieve array-notatie, die het schrijven van snelle vectorberekeningen eenvoudig maakt.
Ondanks zijn leeftijd is Fortran nog steeds actief ontwikkeld, met tal van implementaties, waaronder GNU, Intel, PGI en Cray.
versies
Versie | Notitie | Vrijlating |
---|---|---|
FORTRAN 66 | Eerste standaardisatie door ASA (nu ANSI) | 1966/03/07 |
FORTRAN 77 | Vaste vorm, historisch | 1978/04/15 |
Fortran 90 | Vrije vorm, ISO-standaard, matrixbewerkingen | 1991/06/15 |
Fortran 95 | Pure en elementaire procedures | 1997/06/15 |
Fortran 2003 | Object georiënteerd programmeren | 2004-04-04 |
Fortran 2008 | Co-Arrays | 2010-09-10 |
Installatie of instellingen
Fortran is een taal die kan worden samengesteld met behulp van compilers die door veel leveranciers worden geleverd. Verschillende compilers zijn beschikbaar voor verschillende hardwareplatforms en besturingssystemen. Sommige compilers zijn gratis software, sommige kunnen gratis worden gebruikt en sommige vereisen de aanschaf van een licentie.
De meest voorkomende gratis Fortran-compiler is GNU Fortran of Gfortran. De broncode is beschikbaar via GNU als onderdeel van GCC, de GNU-compilercollectie. Binaries voor veel besturingssystemen zijn beschikbaar op https://gcc.gnu.org/wiki/GFortranBinaries . Linux-distributies bevatten vaak gfortran in hun pakketmanager.
Verdere compilers zijn bijvoorbeeld beschikbaar:
- EKOPath van PathScale
- LLVM (backend via DragonEgg)
- Oracle Developer Studio
Op HPC-systemen zijn vaak gespecialiseerde compilers beschikbaar door de systeemprovider, zoals bijvoorbeeld de IBM- of Cray- compilers.
Al deze compilers ondersteunen de Fortran 95-standaard. Een overzicht van de Fortran 2003-status en de Fortran 2008-status door verschillende compilers wordt aangeboden door het ACM Fortran Forum en beschikbaar in de Fortran Wiki.
Hallo Wereld
Elk Fortran-programma moet end
als laatste verklaring bevatten. Daarom ziet het eenvoudigste Fortran-programma er als volgt uit:
end
Hier zijn enkele voorbeelden van "hallo, wereld" -programma's:
print *, "Hello, world"
end
Met write
:
write(*,*) "Hello, world"
end
Voor de duidelijkheid is het nu gebruikelijk om de program
instructie te gebruiken om een programma te starten en een naam te geven. Het end
statement kan dan verwijzen naar deze naam zodat het duidelijk wat hij bedoelt, en laat de compiler controleert u de code op juistheid. Verder moeten alle Fortran-programma's een implicit none
verklaring bevatten. Een minimaal Fortran-programma zou er dus eigenlijk als volgt moeten uitzien:
program hello
implicit none
write(*,*) 'Hello world!'
end program hello
De volgende logische stap vanaf dit punt is hoe het resultaat van het hallo wereldprogramma te zien is. Deze sectie laat zien hoe dat te bereiken in een Linux-achtige omgeving. We nemen aan dat u enkele basisbegrippen van shell-opdrachten hebt , vooral dat u weet hoe u bij de shell-terminal kunt komen. We gaan er ook van uit dat je je fortran
omgeving al hebt ingesteld . Gebruik de teksteditor van uw voorkeur (kladblok, kladblok ++, vi, vim, emacs, gedit, kate, enz.), Sla het bovenstaande programma hallo (kopiëren en plakken) op in een bestand met de naam hello.f90
in uw thuismap. hello.f90
is uw bronbestand. Ga vervolgens naar de opdrachtregel en ga naar de map (basismap?) Waar u uw bronbestand hebt opgeslagen en typ vervolgens de volgende opdracht:
>gfortran -o hello hello.f90
U hebt zojuist uw uitvoerbare programma voor de wereld gemaakt. In technische termen heeft u zojuist uw programma samengesteld. Typ de volgende opdracht om het uit te voeren:
>./hello
U zou de volgende regel op uw shell-terminal moeten zien afdrukken.
> Hello world!
Gefeliciteerd, u hebt zojuist het programma "Hallo wereld" geschreven, samengesteld en uitgevoerd.
Kwadratische vergelijking
Tegenwoordig wordt Fortran voornamelijk gebruikt voor numerieke berekeningen. Dit zeer eenvoudige voorbeeld illustreert de basisprogrammastructuur om kwadratische vergelijkingen op te lossen:
program quadratic
!a comment
!should be present in every separate program unit
implicit none
real :: a, b, c
real :: discriminant
real :: x1, x2
print *, "Enter the quadratic equation coefficients a, b and c:"
read *, a, b, c
discriminant = b**2 - 4*a*c
if ( discriminant>0 ) then
x1 = ( -b + sqrt(discriminant)) / (2 * a)
x2 = ( -b - sqrt(discriminant)) / (2 * a)
print *, "Real roots:"
print *, x1, x2
! Comparison of floating point numbers for equality is often not recommended.
! Here, it serves the purpose of illustrating the "else if" construct.
else if ( discriminant==0 ) then
x1 = - b / (2 * a)
print *, "Real root:"
print *, x1
else
print *, "No real roots."
end if
end program quadratic
Gevalongevoeligheid
Hoofdletters en kleine letters van het alfabet zijn equivalent in de Fortran-tekenset. Met andere woorden, Fortran is niet hoofdlettergevoelig . Dit gedrag staat in contrast met hoofdlettergevoelige talen, zoals C ++ en vele andere.
Bijgevolg zijn de variabelen a
en A
dezelfde variabele. In principe zou je een programma als volgt kunnen schrijven
pROgrAm MYproGRaM
..
enD mYPrOgrAM
Het is aan de goede programmeur om zulke lelijke keuzes te vermijden.