Många uppfattar Fortran som ett föråldrat och "dött" programmeringsspråk. Den mest vetenskapliga och tekniska koden är dock skriven i Fortran. Som sådan förblir programmering i F77 och F90 en nödvändig färdighet för de flesta tekniska programmerare. Dessutom tillåter de senaste Fortran-standarderna (2003, 2008, 2015) programmeraren att skriva mycket effektiv kod med minimal ansträngning, samtidigt som alla moderna språkfunktioner används, till exempel OOP (objektorienterad programmering). FORTRAN är en förkortning för "FORmula TRANslation", och är bäst lämpad för matematiska och numeriska applikationer snarare än grafik- eller databasapplikationer. De flesta fortrankoder tar textinmatning från en fil eller kommandorad snarare än från en meny eller ett GUI-gränssnitt.
Steg
Del 1 av 4: Skriva och sammanställa ett enkelt program
Steg 1. Skriv ett "Hello World" -program
Detta är vanligtvis det första programmet som skriver på något språk, och det skriver bara ut "Hej världen" på skärmen. Skriv följande kod i valfri textredigerare och spara den som helloworld.f. Var uppmärksam på att det måste finnas exakt 6 mellanslag framför varje rad.
program helloworld implicit inget tecken*13 hello_string hello_string = "Hej, värld!" skriv (*, *) hello_string avsluta programmet helloworld
Dricks: Mellanslagen är bara nödvändiga i versioner av Fortran upp till FORTRAN 77. Om du använder en nyare version kan du släppa mellanslag. Kompilera program från nyare version med f95, inte f77; använd.f95 som filtillägg istället för bara.f.
Steg 2. Kompilera programmet
För att göra detta, skriv f77 helloworld.f i kommandoraden. Om detta ger ett fel har du förmodligen inte installerat en Fortran -kompilator som till exempel gfortran än.
Steg 3. Kör ditt program
Kompilatorn har tagit fram en fil som heter a.out. Kör den här filen genom att skriva./a.out.
Steg 4. Förstå vad du just skrev
-
program helloworld
indikerar starten av programmet "helloworld". Liknande,
avsluta programmet helloworld
- indikerar dess slut.
-
Som standard, om du inte deklarerar en variabeltyp, behandlar Fortran en variabel med ett namn som börjar med en bokstav från i till n som heltal och alla andra som ett reellt tal. Det rekommenderas att använda
implicit ingen
- om du inte behöver det beteendet.
-
tecken*13 hallo_sträng
- deklarerar en rad tecken som kallas hello_string.
-
hello_string = "Hej, värld!"
- tilldelar värdet "Hej, värld!" till den deklarerade matrisen. Till skillnad från andra språk som C, kan detta inte göras på samma rad som att deklarera arrayen.
-
skriv (*, *) hello_string
- skriver ut värdet av hello_string till standardutmatningen. Den första * betyder att skriva till standardutmatning, i motsats till någon fil. Den andra * betyder att du inte ska använda någon speciell formatering.
Steg 5. Lägg till en kommentar
Detta är inte nödvändigt i ett så enkelt program, men det kommer att vara användbart när du skriver något mer komplext, så du borde veta hur du lägger till dem. Det finns två sätt att lägga till en kommentar.
- Om du vill lägga till en kommentar som har en hel rad på egen hand skriver du c direkt i en ny rad, utan de sex mellanslagen. Efter det, skriv din kommentar. Du bör lämna ett mellanrum mellan c och din kommentar för bättre läsbarhet, men detta krävs inte. Observera att du måste använda en! istället för c i Fortran 95 och nyare.
- För att lägga till en kommentar på samma rad som kod, lägg till en! där du vill att din kommentar ska börja. Återigen krävs inte ett utrymme, men förbättrar läsbarheten.
Del 2 av 4: Användning av inmatning och If-konstruktioner
Steg 1. Förstå olika datatyper
- INTEGER används för heltal, som 1, 3 eller -3.
- REAL kan också innehålla ett tal som inte är hela, som 2,5.
- COMPLEX används för att lagra komplexa nummer. Den första siffran är den verkliga och den andra den imaginära delen.
- KARAKTER används för tecken, som bokstäver eller skiljetecken.
- LOGISK kan vara antingen.true. eller.false.. Detta är som den booleska typen i andra programmeringsspråk.
Steg 2. Få användarens input
I programmet "Hej världen" som du skrev tidigare skulle det vara meningslöst att få användarinmatning. Så öppna en ny fil och ge den namnet compnum.f. När du har avslutat det kommer det att berätta för användaren om antalet de angav är positivt, negativt eller lika med noll.
- Ange raderna programkomp. Och avsluta programkomp.
- Deklarera sedan en variabel av typen REAL. Se till att din deklaration är mellan början och slutet av programmet.
- Förklara användaren vad de ska göra. Skriv lite text med skrivfunktionen.
- Läs användarens inmatning i variabeln du deklarerade med läsfunktionen.
program compnum real r skriv (*, *) "Ange ett reellt tal:" läs (*, *) r avsluta programmet
Steg 3. Bearbeta användarens inmatning med en if-konstruktion
Lägg det mellan
läs (*, *) r
och den
avsluta programmet
- Jämförelse görs med.gt. (större än),.lt. (mindre än) och.ekv. (lika) i Fortran.
- Fortran stöder if, else if, and else
- En Fortran if-konstruktion slutar alltid med slutet if.
om (r.gt. 0) skriv sedan (*, *) "Det talet är positivt." annars om (r.lt. 0) skriv sedan (*, *) "Det talet är negativt." annars skriva (*, *) "Det talet är 0." sluta om
Dricks: Du behöver inte infoga kod inuti if-konstruktioner med fler mellanslag, men det förbättrar läsbarheten.
Steg 4. Kompilera och kör ditt program
Ange några siffror för att testa det. Om du anger en bokstav kommer det att uppstå ett fel, men det är okej eftersom programmet inte kontrollerar om ingången är en bokstav, en siffra eller något annat.
Del 3 av 4: Använda loopar och matriser
Steg 1. Öppna en ny fil
Eftersom detta koncept är annorlunda måste du skriva ett nytt program igen. Namnge filen addmany.f. Infoga motsvarande program- och avsluta programuttalanden, samt en implicit ingen. När du är klar läser detta program 10 nummer och skriver ut deras summa.
Steg 2. Deklarera en array med längd 10
Det är här du kommer att lagra siffrorna. Eftersom du förmodligen vill ha en summa av reella tal, bör du deklarera matrisen som verklig. Du deklarerar en sådan array med
riktiga tal (50)
(siffror är namnet på matrisen, inte ett uttryck).
Steg 3. Deklarera några variabler
Deklarera numSum som ett reellt tal. Du kommer att använda den för att lagra summan senare, men eftersom summan redan tas av ett Fortran -uttryck måste du använda ett namn som numSum. Ställ in det till 0. Deklarera i som ett heltal och tilldela det inget värde ännu. Det kommer att göras i do-loop.
Steg 4. Skapa en do-loop
Motsvarande till det på andra programmeringsspråk skulle vara en for-loop.
- En do-loop börjar alltid med do.
- På samma rad som do, separerad från det med ett mellanslag, är etiketten som programmet kommer att gå till när det är klart. För tillfället är det bara att skriva en 1, du anger etiketten senare.
-
Efter det, bara åtskilt av ett mellanslag, skriv
i = 1, 10
. Detta gör att variabeln i, som du hade deklarerat före slingan, går från 1 till 10 i steg om 1. Stegen nämns inte i detta uttryck, så Fortran använder standardvärdet 1. Du kunde också ha skrivit
i = 1, 10, 1
-
Lägg lite kod inuti slingan (indrag med mellanslag för bättre läsbarhet). För detta program bör du öka variabeln numSum med det i: e elementet i arraynumren. Detta görs med uttrycket
numSum = numSum + nummer (i)
- Avsluta slingan med en fortsättningssats som har en etikett. Skriv bara 4 mellanslag. Efter det skriver du en 1. Det är etiketten som du sa till do-loop att gå till när den är klar. Skriv sedan ett mellanslag och fortsätt. Fortsättningsuttrycket gör ingenting, men det ger en bra plats att placera en etikett, samt visar att do-loop tog slut.
Din do loop ska nu se ut så här:
gör 1 i = 1, 10 numSum = numSum + tal (i) 1 fortsätt
Dricks: I Fortran 95 och senare behöver du inte använda etiketter. Lägg bara inte in en i do -satsen och avsluta slingan med "end do" istället för "continue".
Steg 5. Skriv ut numSum
Det skulle också vara vettigt att ge lite sammanhang, till exempel "Summan av dina nummer är:". Använd skrivfunktionen för båda. Hela din kod ska nu se ut så här:
program addmany implicit inga reella tal (10) reella numSum heltal i numSum = 0 skriva (*, *) "Ange 10 nummer:" läs (*, *) tal gör 1 i = 1, 10 numSum = numSum + tal (i) 1 fortsätt skriva (*, *) "Deras summa är:" skriv (*, *) numSum slutprogram addmany
Steg 6. Kompilera och kör din kod
Glöm inte att testa det. Du kan antingen trycka på ↵ Enter efter varje nummer du anger eller skriva in många nummer på samma rad och separera dem med ett mellanslag.
Del 4 av 4: Förstå avancerade begrepp
Steg 1. Ha en bra uppfattning om vad ditt program kommer att göra
Tänk på vilken typ av data som behövs som inmatning, hur du strukturerar utmatningen och inkludera lite mellanliggande utdata så att du kan övervaka beräkningen. Detta kommer att vara mycket användbart om du vet att din beräkning kommer att pågå under en lång tid eller om det handlar om flera komplicerade steg.
Steg 2. Hitta en bra Fortran -referens
Fortran har många fler funktioner än vad som förklaras i den här artikeln, och de kan vara användbara för det program du vill skriva. En referens listar alla funktioner som ett programmeringsspråk har. Detta är ett för Fortran 77 och det här är ett för Fortran 90/95.
Steg 3. Lär dig mer om underrutiner och funktioner
Steg 4. Lär dig hur du läser och skriver från/till filer
Lär dig också hur du formaterar din input/output.
Steg 5. Lär dig mer om de nya funktionerna i Fortran 90/95 och nyare
Hoppa över det här steget om du vet att du bara kommer att skriva/behålla Fortran 77 -koden.
Kom ihåg att Fortran 90 introducerade "Free Form" -källkoden, så att kod kan skrivas utan mellanslag och utan gränsen för 72 tecken
Steg 6. Läs eller leta upp några böcker om vetenskaplig programmering
Till exempel är boken "Numeriska recept i Fortran" både en bra text om vetenskapliga programmeringsalgoritmer och en bra introduktion till hur man sätter ihop koder. Nyare utgåvor inkluderar kapitel om hur man programmerar i en blandningsspråkig miljö och parallell programmering. Ett annat exempel är "Modern Fortran in Practice" skriven av Arjen Markus. Boken ger en inblick i hur man skriver Fortran-program i tjugoförsta århundradets stil i enlighet med de senaste Fortran-standarderna.
Steg 7. Lär dig hur du sammanställer ett program spritt över flera filer
Låt oss anta att ditt Fortran -program är spritt över filerna main.f och morestuff.f, och att du vill att den resulterande binären ska heta allstuff. Då måste du skriva följande kommandon i kommandoraden:
f77 -c morestuff.f f77 -c main.f f77 -c morestuff.f f77 -o allstuff main.o morestuff.f
Kör sedan filen genom att skriva./allstuff.
Dricks: Detta fungerar på samma sätt med nyare versioner av Fortran. Ersätt bara.f med rätt tillägg och f77 med rätt kompilatorversion.
Steg 8. Använd den optimering som kompilatorn tillhandahåller
De flesta kompilatorer inkluderar optimeringsalgoritmer som förbättrar effektiviteten i din kod. Dessa aktiveras vanligtvis genom att inkludera en -O-, -O2- eller -O3 -flagga vid kompilering (igen beroende på din version av fortran).
-
Generellt sett är den lägsta nivån -O eller -O2 bäst. Var medveten om att användningen av det mer aggressiva optimeringsalternativet kan införa fel i komplexa koder och till och med sakta ner saker! Testa din kod.
Tips
- Börja med små program. När du skapar din egen kod, försök att identifiera den mest väsentliga delen av problemet - är det datainmatningen eller funktionernas anrop, loopens struktur (det här är några mycket elementära exempel) och börja därifrån. Bygg sedan på det i små steg.
- Fortran är inte skiftlägeskänsligt. Du kan till exempel deklarera en variabel "real Num" och skriva "num = 1" på nästa rad för att tilldela ett värde till den. Men det är en dålig stil, så undvik det. Ännu viktigare, Fortran bryr sig inte om fallet med funktioner och uttalanden heller. Det är ganska vanligt att skriva funktioner och påståenden i UPPERCASE och variabler i gemener.
- EMACS är en bra gratis textredigerare att använda istället för Anteckningar.
- Du kanske har lättare att använda en online IDE (integrerad utvecklingsmiljö) till en början. Ett bra alternativ är Coding Ground. Du hittar en mängd programmeringsspråk där, inklusive Fortran-95. Ett annat alternativ är Ideone.