Fortran | |
---|---|
Semantiikka | välttämätön , rinnakkainen |
Kieliluokka | menettelyllinen , modulaarinen , jossa on olioohjelmoinnin elementtejä |
Toteutustyyppi | koottu |
Esiintyi | 1957 |
Tekijä | John Backus , IBM |
Kehittäjä | IBM [1] ja John Backus [1] |
Tiedostotunniste _ | .for .f .f90 .f95 |
Vapauta | Fortran 2018 (ISO/IEC 1539-1:2018) (28. marraskuuta 2018) |
Tyyppijärjestelmä | tiukka , staattinen |
Tärkeimmät toteutukset | GFortran , Open Watcom , Sun Studio , XL Fortran , Intel Fortran |
Murteet | Korkean suorituskyvyn Fortran |
Vaikutettu | Pikakoodaus [d] |
vaikutti | ALGOL 68 , BASIC , PL/I |
Verkkosivusto | fortran-lang.org _ |
Mediatiedostot Wikimedia Commonsissa |
Fortran ( eng. Fortran ) on ensimmäinen korkean tason ohjelmointikieli , joka on saanut käytännön sovelluksen, jolla on kääntäjä ja jota on kehitetty edelleen [2] . Sen loi vuosina 1954-1957 IBM Corporationin John Backusin johtama ohjelmoijaryhmä [3] . Nimi Fortran on lyhenne sanoista FOR mula TRAN slator (formula translator) [4] . Fortrania käytetään laajalti ensisijaisesti tieteellisessä ja teknisessä laskennassa. Yksi modernin Fortranin eduista on suuri määrä siihen kirjoitettuja ohjelmia ja aliohjelmien kirjastoja [5] .
Fortranissa (lähinnä kielen vanhemmissa versioissa) on kirjoitettu suuri määrä erilaisia matemaattisia kirjastoja matriisialgebraa ja lineaariyhtälöjärjestelmien ratkaisemista varten , kirjastoja differentiaaliyhtälöiden ratkaisemiseen , integraaliyhtälöitä ja niiden järjestelmiä, funktioiden approksimaatioita , erikoisfunktioita , nopeat Fourier-muunnokset , matemaattiset tilastot ja muut matemaattiset tieteenalat. Nämä kirjastot toimitetaan yleensä kääntäjän mukana. Tällaisia paketteja on luotu vuosikymmenten aikana ja ne ovat edelleen suosittuja tiedeyhteisössä tähän päivään asti, esimerkiksi International Mathematical Subruutine Library (IMSL) [6] [7] .
Suurin osa näistä kirjastoista on itse asiassa ihmiskunnan omaisuutta: ne ovat saatavilla lähdekoodina, hyvin dokumentoituna, virheenkorjattuina ja erittäin tehokkaina.
Moderni Fortran (Fortran 95 ja Fortran 2003) on hankkinut uusien laskenta-arkkitehtuurien tehokkaaseen ohjelmointiin tarvittavat ominaisuudet; antaa sinun soveltaa nykyaikaisia ohjelmointitekniikoita, erityisesti yleistä ja modulaarista ohjelmointia , OOP , säilyttäen samalla jatkuvuuden aiempien versioiden kanssa. Yksi modernin Fortranin kehittämisen pääkonsepteista on rinnakkaisuuden tuki ja vektorioperaatiot [8] .
Fortran on erittäin standardoitu kieli, joten se voidaan helposti siirtää eri alustoille. Uudet kielistandardit säilyttävät pitkälti jatkuvuuden vanhojen kanssa, mikä mahdollistaa aiemmin kirjoitettujen ohjelmien koodien käytön ja muokkaamisen [8] . Samalla kielen kehittyessä tiedotetaan etukäteen vanhentuneista rakenteista, jotka voidaan poistaa tulevaisuudessa [9] .
Fortranissa on suuri joukko sisäänrakennettuja matemaattisia toimintoja, se tukee työskentelyä kaksois- ja suuren tarkkuuden kokonaisluku-, reaali- ja kompleksilukujen kanssa (käytetään binääritoimintoihin real(10)), siinä on rikas työkalupakki taulukoiden ja ulkoisten tiedostojen kanssa työskentelemiseen. Modernissa Fortranissa (2003 ja uudemmat) on täydellinen työkalusarja hahmotietojen käsittelyyn.
Aluksi kielen ilmaisukeinot eivät olleet kovin loistavia, koska Fortran oli ensimmäinen korkean tason kieli, joka toteutettiin. Myöhemmin Fortraniin lisättiin monia leksikaalisia rakenteita, jotka ovat ominaisia rakenteelliselle, modulaariselle, yleistetylle ja olio-ohjelmoinnissa.
Ohjelmien rakenne keskittyi alun perin rei'itettyjen korttien syöttämiseen, ja siinä oli useita ominaisuuksia, jotka sopivat tähän erityiseen tapaukseen. Joten 1. - 5. sarakkeessa oli tarra-alue, 6. - merkitsi tekstiä edellisen rivin jatkoksi (mikä tahansa merkki paitsi välilyönti ja "0"), ja 7. - 72. todellinen teksti löytyi operaattori tai kommentti. Sarakkeet 73-80 voisivat käyttää korttien numerointia (vahingossa hajallaan olevan pakan palauttamiseksi) tai lyhyttä kommenttia, kääntäjä jätti ne huomiotta. Jos operaattorin teksti ei mahtunut varattuun tilaan (7. sarakkeesta 72. sarakkeeseen), seuraavan rivin 6. sarakkeeseen laitettiin jatkomerkki, jonka jälkeen operaattori jatkoi sitä. Kahden tai useamman operaattorin sijoittaminen yhdelle riville (kartalle) oli mahdotonta. Kun reikäkorteista tuli historiaa, näistä eduista tuli vakavia haittoja.
Tästä syystä Fortran-standardi, joka alkaa Fortran 90:stä, säilyttäen lähdetekstin kiinteän muodon, lisättiin vapaamuotoon , joka ei säätele rivin sijaintia ja mahdollistaa useamman kuin yhden lauseen kirjoittamisen riviä kohden. Vapaan muodon ja nykyaikaisten strukturoidun ohjelmoinnin menetelmien käyttöönotto [8] on mahdollistanut koodin luomisen, jonka luettavuus ja selkeys ei ole huonompi kuin muilla nykyaikaisilla ohjelmointikielillä, kuten Pascal , C tai Java , luotu koodi . Nykyaikaiset kehitysympäristöt mahdollistavat muotojen yhdistämisen: esimerkiksi laajentaa merkkijonon pituutta vapaaseen muotoon (yleensä 132 merkkiä), mahdollistaa useiden lausekkeiden kirjoittamisen riville, mutta samalla voit myös säilyttää vasemman sisennyksen. (tee vasen marginaali), joka on tyypillinen vanhalle kiinteälle muodolle, jättäen eniten omistettu sarake virhemerkeille ja -muodoille sekä rivin jatkosarake.
Eräänlainen vanhan Fortranin "käyntikortti" on valtava määrä nimikkeitä, joita käytettiin ehdottomissa hyppy GOTO-operaattoreissa, silmukkaoperaattoreissa, ehdollisissa operaattoreissa ja muototulo-tulostus-kuvausoperaattoreissa FORMAT. Merkkien ja lausuntojen suuri määrä GOTOteki usein Fortran-ohjelmista vaikeaselkoisia.
Juuri tästä negatiivisesta kokemuksesta on tullut syy, miksi useissa nykyaikaisissa ohjelmointikielissä (esimerkiksi Java-kielessä ) tunnisteita ja niihin liittyviä ehdottomia hyppyoperaattoreita on muutettu suuresti.
Moderni Fortran (lähinnä Fortran'90-versiosta alkaen) on kuitenkin vapautettu ylimääräisistä tarroista johtuen operaattorien, kuten DO… END DO, DO WHILE, SELECT CASE, rakenteiden IF THEN- ELSEIF THEN- ELSE- END IFjne. käyttöönotosta. Lisäksi nykyaikaisissa kielistandardeissa vain klassinen operaattori GOTO, jota käytetään monilla kielillä tähän päivään asti. Laskennallinen operaattori GOTO, samoin kuin ENTRY usean merkinnän toimintoihin -konstruktio, jätettiin pois standardista, vaikka kääntäjät yleensä tukevat niitä edelleen.
Hei maailma!Kiinteä muoto (välilyönnit rivien kohdissa 1-6 on merkitty "␣"-merkeillä):
␣␣␣␣␣␣ PRINT * , 'Hei, maailma!' ␣␣␣␣␣␣ LOPPUVapaa muoto:
tulosta * , "Hei, maailma!" loppu Huomautukset.Fortran tukee viittä sisäänrakennettua perustietotyyppiä: real ( REAL) , kompleksi ( COMPLEX) , kokonaisluku ( INTEGER) etumerkillä tai ilman, boolean ( LOGICAL) ja merkki ( CHARACTER) . On myös mahdollista luoda johdettuja tietotyyppejä käyttämällä TYPE. Kielen luomisen alusta lähtien oli 4 tietotyyppiä: todellinen, kompleksinen, kokonaisluku ja looginen.
On olemassa käsitys eräänlaisesta tietotyypistä tai tyyppiparametreista. Tämän avulla voit parametroida todellista ja monimutkaista dataa (eli määrittää desimaalijärjestyksen tarkkuuden ja alueen) ja muita tietoja, mikä lisää sovellusten siirrettävyyttä.
Kaikille numeerisille tiedoille on määritelty tavalliset aritmeettiset operaatiot ja tehtävät, ja niissä on sisäänrakennettuja toimintoja. Sisäänrakennettu funktio voi ottaa argumentiksi vain reaali- tai kompleksiluvun ( ei kokonaislukua ) .Log(x)x
Pääsääntöisesti "yksittäisille" tarkkuusreaaliluvuille varataan 4 tavua ( REAL(4)tai tyypin variaatioparametri KIND=4), "double" - 8 tavua. Kompleksilukujen tavujen määrä kaksinkertaistuu.
Kokonaisluvut voivat kestää 1-4 tavua. Nykyaikaiset kääntäjät antavat ohjelmoijalle mahdollisuuden toimia numeroilla ja "neljänkertaisella" tarkkuudella.
Aritmeettisissa operaatioissa tyyppi muutetaan oletuksena kokonaisluvusta reaaliluvuksi ja sitten kompleksiluvuksi tai käyttämällä erityistä sisäänrakennettua numeerista funktiota. Joten seuraavat lausekkeet ovat ekvivalentteja ( i on kokonaisluku): ja . Log(i*1.)Log(real(i))
Merkkijono (merkki) tiedot määritetään pituudella suluissa joko type-attribuutin tai merkkijonon nimen jälkeen. Merkkijonon määrittämiseen ohjelman rungossa käytetään lainausmerkkejä tai lainausmerkkejä. Merkinnät ovat siis vastaavia: A='Se on kuuma' tai A="Se on kuuma" . Tämä on hyödyllistä tapauksissa, joissa itse merkkijonossa on lainausmerkkejä: B="Se ei ole kuuma" .
Merkkijonoille on sisäänrakennettu merkkijonojen yhdistämis (lisäys) -toiminto: //. Hahmotiedoille on 17 sisäänrakennettua erikoistoimintoa (kaikentyyppisiä tietoja käsittelevien yleisten toimintojen lisäksi).
Tunnisteet ovat kokonaislukuja, joissa on enintään 5 numeroa; merkit eivät ole sallittuja. Tunnisteita käytetään käskyissä GO TO, luku-, kirjoitus- ja muotolauseissa sekä virhe- ja poikkeuskäsittelyssä. Tunnisteiden lisäksi Fortranilla on mahdollisuus nimetä ohjausrakenteita (silmukat, loogiset ehdot, rakenteet FORALL... END FORALL, WHERE... END WHERE, SELECT CASE... END SELECT, TYPE... END TYPE, jne.), ja rakenteen nimi voi sisältää mitä tahansa merkkejä. sallittu muuttujien nimissä.
Sisäänrakennetut toiminnot merkkitiedoilleNumero- merkkimuunnos : CHAR(i)ja ACHAR(i). Muunna kokonaisluku sitä vastaavaksi käyttöjärjestelmämerkiksi tai ASCII -taulukon merkiksi .
Merkki- numeromuunnos : ICHAR(i)ja IACHAR(i). Suorita käänteisiä muunnoksia.
Merkkijonojen vertailufunktiot : LGE(A,B), LGT(A,B), LLE(A,B)ja LLT(A,B). Funktioiden tulos on "tosi", jos merkkijonojen pituudet ( L(A) ja L(B) , ilmaistuna ASCII-merkeillä, täyttävät vastaavasti seuraavat epäyhtälöt: L(A) L(B), L(A) L(B), L(A) L(B) ja L(A) L(B) .
Pituusfunktiot : LEN(A)ja LEN_TRIM(A). Ensimmäinen palauttaa merkkijonon A pituuden (merkkien lukumäärä), toinen palauttaa merkkijonon pituuden ilman välilyöntejä, jos sellaisia on.
Muunnosfunktiot : TRIM(A), ADJUSTL(A)ja ADJUSTR(A), REPEAT(A,N). Funktio TRIM(A)palauttaa merkkijonon A ilman välilyöntejä. Funktiot ADJUSTL(A)ja ADJUSTR(A)kohdistavat merkkijonon (poistavat välilyönnit) vasemmalle ja oikealle. Funktio REPEAT(A,N)palauttaa N kopiota merkkijonosta A.
Rivihakutoiminnot: , , . Valinnainen parametri back määrittää hakusuunnan: oletusarvoisesti vasen (for ) oikea (for ). SCAN(A,B,[back])INDEX(A,B,[back])VERIFY(A,B,[back])back=.false.back=.true.
Funktio määrittää merkkijonoluettelosta B ensimmäisen löydetyn merkin SCANpaikkanumeron merkkijonossa A (vasemmalla tai oikealla) . Jos tulos on negatiivinen, funktio palauttaa kokonaisluvun 0. Funktio määrittää sen kohdan numeron, josta merkkijonon B täysi esiintyminen merkkijonossa A alkaa ensimmäistä kertaa . Lisäksi haku voidaan suorittaa sekä vasemmalla että oikealla, mutta paikkanumero lasketaan aina vasemmalla rivin alusta. Jos haku epäonnistuu, funktio palauttaa arvon 0. Funktio on käänteinen funktiolle . Siten se palauttaa sellaisen merkin paikkanumeron merkkijonossa A , jota ei ole maskimerkkijonossa B. Jos kaikki merkkijonon A (eri) merkit ovat maskimerkkijonossa B, funktio palauttaa arvon 0. INDEXVERIFY INDEXVERIFY
Kaikki nämä funktiot ovat elementaarisia ja niiden argumentti voi olla merkkijono tai kokonaisluku. Tuloksena on vastaava numeerinen, merkki- tai looginen matriisi.
Fortran-standardit versiosta 2003 alkaen tarjoavat mahdollisuuden työskennellä Unicode-merkkien kanssa .
Näiden ominaisuuksien lisäksi Fortran antaa sinun käsitellä symbolisia tietoja käyttämällä sisäänrakennettua matriisi (vektori) analyysiä , mikä lisää merkittävästi symbolisten tietojen käsittelyn joustavuutta.
Fortranissa C-kielellä kirjoitettujen ohjelmien kanssa yhteensopivuuden vuoksi on käsite C-merkkijono , joka määritetään lisäämällä merkki lainauksen perään : A='Tämä on C-merkkijono'c . Nollamerkkijono annetaan seuraavasti: A='\0'c .
Alirutiinit Fortranissa ovat olleet olemassa ensimmäisestä standardista lähtien ja ovat edelleen yksi tärkeimmistä ohjelmointityökaluista [8] .
Fortranissa aliohjelmien, funktioiden kutsuminen ja niiden parametrien välittäminen tapahtuu yksinomaan viittauksella (eikä arvolla ). Siksi aliohjelma voi muuttaa sille pääohjelmassa välitettyä argumenttia, jos tätä ei ole erityisesti estetty. Tällainen mekanismi mahdollistaa merkinnän tekemisen luonnolliseksi matemaattisia kaavoja kirjoitettaessa ja samalla säilyttää korkean suorituskyvyn työskennellessä suurten datataulukoiden kanssa [24] .
Fortran-alirutiinit voivat sisältää parametrien luettelossa (kutsutaan muodollisiksi parametreiksi) ja valinnaisia (valinnaisia) parametreja, tai ne eivät voi sisältää parametreja ollenkaan.
Kielistandardi mahdollistaa proseduurien ja operaatioiden ylikuormituksen yleisen rajapinnan kautta yhdistämällä eri proseduurit (jokainen toimii esimerkiksi kokonaislukujen, reaalilukujen, kompleksilukujen ja merkkimuuttujien kanssa) yhden (yleisen) nimen alle. Tässä tapauksessa riittää, että viitataan pääohjelman yleiseen menettelyyn, ja suoritettujen toimintojen luonne riippuu siitä, minkä tyyppistä dataa proseduurille tarjotaan. Kaikki sisäänrakennetut toiminnot ja aliohjelmat on tehty tämän periaatteen mukaan, esimerkiksi COS(x). Proseduurien, toimintojen ja operaattoreiden ylikuormitus (lisäksi ohjelmoija voi tarjota omia ylikuormitettujen operaattorien symboleja sisäänrakennettujen lisäksi) ei koske vain sisäänrakennettuja tietotyyppejä, vaan myös ohjelmoijan määrittelemiä tyyppejä [12] .
Aliohjelmien tyypitProseduurit on jaettu aliohjelmiin ja toimintoihin . Aliohjelmat ovat kätevämpiä, kun haluat palauttaa suuren määrän heterogeenisiä tuloksia; funktiot - kun palauttaa yhden tyypin tuloksen (mukaan lukien taulukko).
Aliohjelman määrittelee Subroutine kuvausoperaattori aliohjelman_nimi (muodollisten argumenttien luettelo) , funktion määrittää operaattori Function funktion_nimi (muodollisten argumenttien luettelo) .
Aliohjelmaa kutsutaan Call käskyllä alirutiinin_nimi (todellisten argumenttien luettelo) . Funktiota kutsutaan nimellä, todellisten argumenttien luettelolla ja ilman erityistä operaattoria.
F'90-standardista alkaen tuetaan rekursiivisia proseduureja (ei saatavilla aikaisemmissa versioissa rajoitetun koneen muistin vuoksi), jotka vaativat nimenomaisen määritteen ilmoittaakseen recursive. Tässä tapauksessa funktion tuloksen tulee poiketa itse funktion nimestä.
Puhtaat menettelyt ja toiminnot ( pure subroutine [function]) ovat F'95-standardin tuomia menetelmiä ja toimintoja, joilla ei ole sivuvaikutuksia. Puhtaan funktion on palautettava arvo, eikä se saa muuttaa mitään sen syöttöparametreja ja/tai yleisiä tietoja; puhtaan proseduurin tulisi muuttaa vain niitä parametreja, jotka on nimenomaisesti määritelty tulokseksi (ulostuloksi) attribuutilla intent(outtai inout)). Sivuvaikutusten mahdollisuus Fortranissa (eli lopulta mahdollisuus muuttaa muuttujia pääohjelmassa aliohjelman kautta) on sivuvaikutus nopeasta osoitteenvälitysmenetelmästä.
Puhtaat ohjelmayksiköt eivät voi sisältää I/O-käskyjä ( WRITEja READ) ulkoisiin tiedostoihin ja laitteisiin, mukaan lukien näppäimistö ja näyttö, sekä ohjelman tauko- ja pysäytyskäskyjä.
Kaikki Fortranin sisäänrakennetut toiminnot ja aliohjelmat, mukaan lukien matemaattiset (paitsi ne, jotka käyttävät käyttöjärjestelmää, päivämäärä- ja aikafunktioita ja satunnaislukugeneraattoreita) ovat puhtaita, eli ne eivät aiheuta sivuvaikutuksia. Puhtaat funktiot otettiin käyttöön ohjelmointikulttuurin parantamiseksi ja algoritmien rinnakkaistamisen tehokkuuden lisäämiseksi [25] [9] .
Aliohjelman argumentitAliohjelman argumentit voivat olla mitä tahansa sisäänrakennettuja tietotyyppejä, mukaan lukien taulukot ja niiden osat, osoittimet ja ohjelmoijan määrittämät tyypit. Aliohjelman argumentit voivat olla myös toimintoja ja muita alirutiineja lukuun ottamatta sisäisiä alirutiineja, operaattorifunktioita, yleisiä (yleisiä) proseduureja (vain tietyt nimet ovat sallittuja) ja joitain muita sisäänrakennettuja tyyppejä.
Argumentit jaetaan muodollisiin ja faktoihin . Argumentit on suljettu suluissa aliohjelman nimen jälkeen ja erotettu pilkuilla. Varsinaisten ja muodollisten argumenttien nimet voivat olla samat.
Muodolliset argumentit ovat sen kuvauksessa määritellyn aliohjelman (funktion) argumentteja. Jos aliohjelmalla ei ole argumentteja, sulut voidaan jättää pois. Funktiossa on sulkeita, vaikka muodollisia argumentteja ei olisi. Muodollista parametrimenettelyä kutsutaan muodolliseksi menettelyksi .
Todelliset argumentit ovat argumentteja, jotka välitetään aliohjelmalle tai funktiolle, joka suoritetaan, kun sitä kutsutaan. Funktiota, jossa ei ole argumentteja, kutsutaan tyhjällä listalla suluissa, aliohjelmaa ilman sulkuja.
Muodollisten ja todellisten argumenttien on oltava johdonmukaisia . Argumenttien tyyppien ja niiden ulkoasun on oltava samat, taulukon tulee vastata saman kokoonpanon taulukkoa (tai taulukon osaa).
On taulukoita, jotka hyväksyvät konfiguraation ja koon proseduurien muodollisina argumentteina. Kokoonpanon ottava taulukko on muodollinen taulukkoargumentti, joka perii sitä vastaavan todellisen taulukon kokoonpanon. Tällaiselle taulukolle, kun se on ilmoitettu, sen ulottuvuus asetetaan (yhdenmukaisesti todellisen taulukkoargumentin dimension kanssa) ja ylärajat jätetään pois. Oletuksena alarajat ovat 1, mutta ne voidaan asettaa mielivaltaisesti. Konfiguroinnin ottavan taulukon elementtien lukumäärä ja arvo peritään tarkalleen varsinaisesta taulukkoargumentista. Kokoon saatava taulukko on aikaisempi, alkuperäisellä Fortran'77-kielellä tapa kuvata periytyviä taulukoita, säilytetty yhteensopivuuden vuoksi. Tällaisissa taulukoissa vain viimeinen ulottuvuus periytyy, jonka yläraja on kuvattu tähdellä ( *). Tässä tapauksessa muodollisilla ja todellisilla taulukko-argumenteilla voi olla eri mitat. Kokoonpanon ja koon ottavat taulukot eivät voi olla dynaamisia tai osoittimia. Proseduureilla, jotka perivät taulukoita, on oltava eksplisiittinen käyttöliittymä.
Muodolliset argumenttijonot voivat myös periä (ottaa haltuunsa) pituuden vastaavasta todellisesta merkkijonoargumentista. Merkkijonoja, jotka saavat pituuden , kuvataan symbolilla *: Character (Len = *) merkkijonon_nimi . Kun nimenomaisesti määritetään merkkijonon pituus, merkkijonomuodollisen argumentin pituus ei voi olla suurempi kuin vastaava todellinen merkkijonoargumentti.
Argumentit ovat asemallisia ja tärkeitä . Positiomuodolliset ja tosiasialliset argumentit yhdistetään toisiinsa siinä järjestyksessä, jossa ne esiintyvät argumenttiluettelossa, jonka on vastattava toisiaan. Avainsanat - avaimen nimellä, joka vastaa muodollisen argumentin nimeä. Avainsanojen avulla voit rikkoa argumenttien järjestystä tai ohittaa osan niistä. Joten aliohjelmalle, jonka otsikko on SubroutineONE (A, B, C, D), kutsu voi olla: CallONE (D= Z , C= Y , B= X , A= W ), missä W, X, Y, Z ovat todellisia argumentteja.
Avainargumentit mahdollistavat valinnaisten argumenttien , jotka voidaan jättää pois. Tässä tapauksessa valinnaisilla argumenteilla on oltava Optional. Jos esimerkiksi Optional C, D on määritetty, niin tässä tapauksessa voidaan kutsua CallYKSI (B= X , A= W ) .
Proseduureilla, joissa on valinnaisia parametreja, on oltava selkeä käyttöliittymä.
Taulukot ovat keskeisiä Fortranin filosofiassa. Kaikki kielirakenteet, tiedot, ohjelmayksiköt, operaattorit, sisäänrakennetut funktiot, silmukat on luotu ja luodaan ennen kaikkea taulukoiden tehokkaaseen käsittelyyn. Fortran noudattaa kehittyessään periaatetta, jonka mukaan vältetään mahdollisimman paljon taulukoiden yksityiskohtaista (elementti kerrallaan) kuvausta ja käsittelyä. Tämä on erityisen tehokasta käsiteltäessä moniulotteisia taulukoita (taulukoiden enimmäismitta F2008-standardissa on 15). Tämä taulukkonäkymä ei ollut yleinen kielen varhaisissa versioissa; Ensimmäiset elementit yleisestä lähestymistavasta taulukoihin ilmestyivät FORTRAN77:ssä; ne kehittyvät edelleen.
Taulukot ovat joko staattisia tai dynaamisia . Dynaamiset jaetaan sijoitettuihin ja automaattisiin (muodostetaan kun aliohjelma kutsutaan). Kaksiulotteisen taulukon elementit on järjestetty Fortranissa sarakkeiden mukaan, ei rivein, kuten esimerkiksi C :ssä . Siten taulukon ensimmäinen indeksi muuttuu nopeimmin. Siksi, jotta voit työskennellä tehokkaasti sisäkkäisten silmukoiden taulukoiden kanssa, sinun tulee indeksoida sisäiset silmukat vasemmalla ja ulommat silmukat oikealla indeksillä. Oletusarvoisesti taulukot määritetään, syöttö, tulos ja alustus sarakekohtaisesti.
do k = 1 , 10 do j = 1 , 20 do i = 1 , 100 arr ( i , j , k ) = 25 ! oikea brr ( k , j , i ) = 0 ! toimiva, mutta monta kertaa hitaampi lopeta tehdä ; lopeta tehdä ; lopeta tehdäTaulukot voivat olla nollakokoisia (mukaan lukien jos alaraja ylittää ylärajan). Taulukon rajaindeksit voivat olla mitä tahansa kokonaislukuja. Oletusalaraja on 1.
Todellinen , allokoitavissa :: ArR (:,:,:) ! allokoidun dynaamisen reaalitaulukon ilmoitus Kokonaisluku , allokoitavissa :: ArI (:), ArSI ( 2 , 5 ) ! kokonaisluku dynaamiset ja staattiset taulukot Merkki ( 32 ), allokoitavissa :: ArC (:), ArC2 ( 20 ) ! dynaaminen merkkijonojono, jonka pituus on 32 merkkiä ja staattinen merkkijono Varaa ( ArR ( - 74 : 0 , 8 , 1 : 3 ), ArI ( 0 ), ArC ( 1 : - 1 )) ! dynaamisten taulukoiden sijoitus tulosta * , koko ( ArR ), koko ( ArI ), koko ( ArC ), koko ( ArSI ) ! 1800 0 0 10 ArC2 ( 17 )( 5 : 27 ) = 'Tämä on merkkijonomääritys' ! Rivinumero 17 kirjoitetaan ␣ ␣ ␣ ␣ Tämä on merkkijonon␣ tehtävä␣ ␣ ␣ ␣ ␣ ... Osat taulukoista, operaattorit FORALLja WHEREFortran mahdollistaa tehokkaan taulukoiden osoittamisen ilman silmukoita peittämällä osoituksen käyttämällä WHEREja - operaattoreita FORALLsekä taulukon viipalointia ja vektoriindeksiä . Kaikissa tapauksissa koko lausekkeen oikea puoli arvioidaan aluksi (kaikille matriisin indekseille) ja vasta sitten suoritetaan osoitus indekseille, jotka täyttävät maskitaulukon. Näitä työkaluja käyttävien laskelmien avulla voit lisätä suorituskykyä ja helpottaa kääntäjän ohjelman osien valitsemista, jotka voidaan suorittaa itsenäisesti eli rinnakkain.
Todellinen :: arr ( I1 : I2 , J1 : J2 , K1 : K2 ), arr1 ( I1 : I2 , J1 : J2 , K1 : K2 ), arr2 ( I1 : I2 , J1 : J2 , K1 : K2 ) Todellinen :: frr ( 100 ), frr1 ( 10 ) / 1 , 2 , 3 , 3 * 4 , 4 * 5 / ! tai Todellinen :: frr1 ( 10 ) = ( / 1 , 2 , 3 , 4 , 4 , 4 , 5 , 5 , 5 , 5 / ) ... arr = 1. ! taulukon määritys (sisäänrakennettu ylikuormitus osoitusoperaattorille) arr1 = Sin ( arr ) + arr ! elementaalisin funktiota sovelletaan jokaiseen taulukon elementtiin arr2 ( I1 : I2 : 1 , J1 : J2 : 2 , K2 : K1 : - 4 ) = arr1 ( I1 : I2 : 1 , J1 : J2 : 2 , K2 : K1 : - 4 ) ! elementin määritys 1, 2 ja -4 askelin (taaksepäin), jonka antaa indeksitripletti frr = ( / ( J , J = 1 , 100 ) / ) ! yksiulotteisen taulukon määrittäminen pyöreän listan kautta Forall ( i = I1 : I2 , j = J1 : J2 , k = K1 : K2 , arr ( i , j , k ) > 0. ) brr ( i , j , k ) = Log ( arr ( i , j , k ) )) ! syklien ja ehdollisten lausekkeiden ja konstruktien korvaaminen. Tehtävän maskaus (mask — arr(i,j,k)>0.) Forall ( i = 1 : N , j = 1 : N , k = 1 : N ) crr ( i , j , k ) = Sin ( 0,5 * ( i + j ) - k ) ! poikkileikkausten laajentaminen Kaikki ( i = 1 : 100 ) ! Forall konstruktio useille osoituskäskyille drr ( i , i ) = 0. ! pääsy matriisin diagonaaliin err ( i , i , i ) = 1. ! ja kolmiulotteisen taulukon diagonaalit End ForallVähemmän ilmeiset toiminnot ovat mahdollisia:
Kokonaisluku V ( - 2 : 2 , 1 : 5 ) V = muotoile uudelleen ( lähde = ( / ( i , i = 1 , 25 ) / ), muoto = ( / 5 , 5 / )) ! taulukon alustus sarjanumeroilla käyttäen taulukkokonstruktoria ja uudelleenmuotoilufunktiota print * , V ! Tulostus DOS-ikkunaan tehdään rivi riviltä ! 1 2 3 4 5 - 1. sarake ! 6 7 8 9 10 - 2. ! 11 12 13 14 15 - 3 ! 16 17 18 19 20 - 4 ! 21 22 23 24 25 - 5 V ( 2 , 3 : 4 ) = V ( - 1 : 0 , 1 ) ! Kierrä taulukkotulosteen pala * , V ! Tulostus DOS-ikkunaan tehdään rivi riviltä ! 1 2 3 4 5 ! 6 7 8 9 10 ! 11 12 13 14 2 Muuta 3. sarakkeessa 15 2:ksi ! 16 17 18 19 3 muutos 4. sarakkeessa 20 3 ! 21 22 23 24 25FORALLF'95-standardin tuomat operaattorin ja rakenteen ominaisuudet ovat laajemmat kuin operaattorin ja rakenteen ominaisuudet WHERE, mutta jälkimmäinen, joissakin loogisen haarautumisen tapauksissa, mahdollistaa koodin yksinkertaistamisen vaihtoehdon olemassaolon vuoksi ELSEWHERE. välttää sisäkkäisiä ehdollisia operaattoreita ja monimutkaisia maskitaulukoita.
Käyttö ja rakenne FORALLmahdollistavat vain puhtaiden menetelmien ja toimintojen käytön . Kun osoitus peitetään operaattoreissa WHERE, FORALLsekä taulukoiden erityisissä sisäänrakennetuissa funktioissa (esim. SUM), looginen taulukkomaski lasketaan ennen osoitusta ja mahdollistaa silmukoiden korvaamisen loogisilla ehdoilla niiden sisällä, mikä välttää lisätyötä mikroprosessorin haaran ennustajalle .
Vektoriindeksi on kokonaisluku yksiulotteinen taulukko, jonka arvot ovat jonkin muun taulukon indeksejä. Vektori-indeksejä käytetään mielivaltaisten osien luomiseen moniulotteisista taulukoista, ja ne ovat niiden yleistyksiä. Vektori-indeksejä käytettäessä kannattaa varoa toistuvia indeksiarvoja määritysoperaattorin vasemmalla puolella, koska tällöin yritetään kirjoittaa yhteen muistisoluun mahdollisesti erilaisia arvoja. Indeksien järjestys on mielivaltainen (vaikka tätä ei pidä käyttää liikaa suorituskyvyn heikkenemisen välttämiseksi).
Kokonaisluku vi ( 5 ) / 7 , 7 , 7 , 3 , 8 / , vj ( 4 ) / 1 , 2 , 3 , 10 / ! taulukoiden alustus - vektoriindeksit Real arr ( 20 , 20 ), brr ( 10 , 10 ) brr = 0. ; arr = 1. ! vektoriindeksit voidaan määrittää myös niitä käyttävän taulukon sisällä brr (( / 8 , 6 , 2 , 1 , 4 / ), vj ) = arr ( vi , vj ) ! vektoriindeksien mittojen on vastattava vasemmalla ja oikealla, eivätkä niiden arvot saa ylittää niitä käyttävien taulukoiden rajoja ! vektoriindeksien koko voi olla pienempi kuin toimivien taulukoiden koko Sisäänrakennetut funktiot taulukoilleNykyaikaisessa Fortranissa on suuri määrä erikoistuneita sisäänrakennettuja toimintoja numeeristen ja merkkijonojen kanssa työskentelemiseen (yllä käsiteltyjen yleisten menetelmien lisäksi). Funktioiden argumentit ovat numeerinen ja/tai merkkijono , looginen taulukon maski (joka on esim. ehto array >0 ) ja taulukon dimensio dim , joka muodostaa (jos dim - argumentti on annettu ) taulukon osa yhtä mittaa pitkin, jonka numero on himmennetty . Taulukkotaulukko voi , ellei toisin mainita, olla kokonaisluku, sisältää reaali- tai kompleksilukuja. Jos maskitaulukkoa ei ole määritetty, sen arvon katsotaan olevan identtisesti tosi. Boolen taulukon maskin , jos se on annettu, on oltava sama muoto kuin taulukon tai skalaariarvon .
Suurin osa F'90-standardin tuomista ominaisuuksista.
.TRUE.
ALL(mask[, dim]) on looginen funktio; palauttaa arvon "true", jos kaikki loogisen taulukon maskin elementit ovat tosi (valinnaisen dimmension mukaan ) ja päinvastoin.
ANY(mask[, dim]) on looginen funktio; on tosi, jos ainakin yksi loogisen taulukon maskin elementti on tosi (valinnaisen dimmension mukaan ).
COUNT(mask[, dim]) on kokonaislukufunktio; tulos on yhtä suuri kuin maskitaulukon todellisten elementtien lukumäärä (valinnaisen dim -mitan mukaan ).
MAXLOC(array[, mask][, dim]), MINLOC(array[, mask][, dim]),
ovat kokonaislukufunktioita, jotka palauttavat vastaavasti maksimi- ja minimielementin indeksin (tai maksimi- ja minimielementtien indeksit) valinnaisen dimensiota pitkin elementeille, jotka täyttävät maskitaulukon . Funktiot palauttavat taulukon ensimmäisen alkion indeksin . Jos dim - funktion argumenttia ei anneta tai jos taulukko on yksiulotteinen taulukko, tulos kirjoitetaan yksiulotteiseen taulukkoon.
Moniulotteisten taulukoiden taulukon tulos kirjoitetaan taulukkoon, jonka sijoitus on yksi pienempi kuin taulukon taulukon arvo ( dim ei ole huomioitu ).
Indeksiarvot lasketaan järjestyksessä taulukon alarajoista alkaen. Eli jos taulukon alarajan numero eroaa yhdestä, niin taulukon maksimi- tai minimielementtiin pääsemiseksi tulee lisätä funktioiden tulokseen MAXLOCero MINLOCalarajan indeksin ja yhden välillä. .
MAXVAL(array[, mask][, dim]), MINVAL(array[, mask][, dim]) — Hae funktioita maksimi- ja minimielementille taulukon taulukosta elementeille, jotka täyttävät loogisen maskin taulukon maskin valinnaisen dim -mitan mukaan . Funktion tulos on samaa tyyppiä ja lajiketta kuin array . Taulukkotaulukko voi olla vain todellinen tai kokonaisluku.
Yksiulotteiselle taulukolle tai jos dim - argumenttia ei ole , tulos on skalaari; muussa tapauksessa taulukko, jonka arvo on yksi pienempi kuin taulukon arvo .
FINDLOC(array, value[, dim][, mask]) on kokonaislukufunktio, joka palauttaa taulukon elementin indeksin, joka on yhtä suuri kuin arvo . F2008-standardin käyttöönoton. Haetut taulukon elementit täyttävät loogisen maskin matriisin maskin valinnaisen dim :n mukaan . Arvoargumentin tyypin on vastattava taulukon tyyppiä, ja se voi olla mikä tahansa sisäänrakennettu tyyppi (mukaan lukien kompleksi, boolen arvo tai merkki) . Muut funktion ominaisuudet ovat samanlaisia kuin funktioiden ja ominaisuudet . MAXLOCMINLOC
F2003-standardista alkaen funktiot MAXLOCja toimivat MINLOCfunktion FINDLOCtavoin myös merkkidatalla.
SUM(array[, mask][, dim])ja PRODUCT(array[, mask][, dim])suorittaa vastaavasti taulukon elementtien summauksen ja kertomisen. Funktioargumenttien merkitys on SUMsama PRODUCTkuin yllä olevilla funktioilla.
Toiminto PRODUCTtoimii monimutkaisilla tiedoilla alkaen F2003-standardista.
DOT_PRODUCT(vector_1, vector_2)suorittaa sisätulon samankokoisten vektorien vektori_1 ja vektorin_2 (yksiulotteiset taulukot) lineaarisen algebran sääntöjen mukaisesti. Yksiulotteiset taulukot vektori_1 ja vektori_2 voivat sisältää mitä tahansa numeerista ja boolen tyyppistä tietoa. Vektorit vektori_1 ja vektori_2 voivat olla joko numeerisia tai molemmat loogisia.
MATMUL(matrix_a, matrix_b) - sisäänrakennettu matriisin kertolaskutoiminto. Kertoo kaksi matriisia, matriisin vektorilla, vektorin matriisilla lineaarialgebran sääntöjen mukaisesti. Funktioiden matriisi_a ja matriisi_b argumentit ovat kaksiulotteisia tai yksiulotteisia numeerisia (kaikki sisäänrakennettuja numeerisia tyyppejä) tai loogisia taulukoita. Funktioargumentit eivät voi olla kahta vektoria samanaikaisesti: toisen argumenteista on oltava matriisi (kaksiulotteinen taulukko). Matriisi_b -taulukon ensimmäisessä (tai ainoassa) dimensiossa olevien elementtien lukumäärän on oltava yhtä suuri kuin matriisi_a-taulukon viimeisen ulottuvuuden elementtien lukumäärä . F'90-standardin käyttöönoton.
Joissakin tapauksissa, kun lasketaan sarakevektorin tulo rivivektorilla, mikä vaatii MATMULvektorien lisämuunnoksen muodon matriiseiksi (/m,1/)ja käytettäessä funktiota (/1,n/), tehokkuus MATMULon Bartenjevin [12] mukaan huomattavasti huonompi kuin perinteinen sisäkkäinen silmukka.
NASAn testien [26] mukaan matriisien tulolle (kaksiulotteiset taulukot) MATMULIntel-kääntäjän suorituskyky täydellä optimoinnilla -O3 käytettäessä ylittää huomattavasti (joissain tapauksissa suuruusluokkaa) sisäkkäisten silmukoiden suorituskyvyn. , vaikka matriiseille, joiden koko on ~ 1000 × 1000 tai suurempi, se on jonkin verran huonompi kuin LAPAK - kirjaston suorituskykyalirutiinit DGEMM . Samanaikaisesti matriiseilla ~100×100 tai vähemmän se on DGEMM:ää parempi nopeuden suhteen. IBM Fortran -kääntäjä, alkaen versiosta F'90, käyttää Winograd-Strassen-algoritmia monimutkaisesti [27] . Huomaa, että matemaattisten funktioiden algoritmiset toteutukset eivät yleensä ole standardissa määriteltyjä, ja ne jäävät kääntäjän kehittäjän harkinnan varaan.
MATMULMATMUL
MERGE(t_source, f_source, mask) — funktio, joka luo uuden taulukon maski-matriisin maskin ohjauksessa t_source- ja f_source-taulukoiden elementeistä, jotka ovat samanmuotoisia ja -kokoisia kuin alkuperäiset taulukot. Argumenttitaulukot ja tulostaulukko voivat olla mitä tahansa sisäänrakennettua tyyppiä ja vastaavat tietotyyppiä, kokoa ja muotoa.
Jos maskielementti on tosi ( .ТRUE.), niin tulostaulukon vastaava elementti on yhtä suuri kuin t_source -taulukon vastaava elementti ; jos epätosi ( .FALSE.) — sitten taulukon elementtiin f_source .
Funktion argumentit voivat olla skalaareja; tässä tapauksessa esimerkiksi MERGE(a,0,c>=0)=a· Θ(с) , missä Θ(с) on kokonaisluku Heaviside-funktio .
MOVE_ALLOC(from, to) on sisäänrakennettu aliohjelma, jonka avulla voit dynaamisesti allokoida aiemmin varatun dynaamisen taulukon uusilla rajoilla ja koolla, kuten dynaamisen taulukon osoitteesta . Tiedot lähteestä taulukosta kopioidaan taulukkoon . From- ja to- taulukoiden tietotyypin ja sijoituksen on oltava samat . Kun matriisi on allokoitu uudelleen, from -taulukko vapautetaan ja siitä tulee allokoimaton. Se voi olla hyödyllinen numeerisissa menetelmissä, joissa ongelman diskretointi vaihtelee ( multigrid ja adaptiiviset menetelmät).
F2003-standardin käyttöönoton.
TRANSPOSE(matrix) on funktio, joka transponoi (vaihtaa rivejä ja sarakkeita) kaksiulotteisen matriisin.
Moderni Fortran tarjoaa sisäänrakennettuja toimintoja moniulotteisen taulukon pakkaamiseen ja purkamiseen yksiulotteiseksi taulukoksi (ja vastaavasti yksiulotteisesta taulukosta) loogisen ehdon hallinnassa suorituskyvyn parantamiseksi ja muistin säästämiseksi.
PACK(array, mask [, vector]) - toiminto; pakkaa minkä tahansa tyyppisen moniulotteisen taulukon yksiulotteiseksi vektoritaulukoksi, jota ohjaa loogisen taulukon maski . Valinnaisen yksiulotteisen taulukkovektorin on oltava samaa tietotyyppiä kuin array , ja vektorin elementtien lukumäärän , jos se on annettu, on oltava vähintään yhtä monta kuin maskin todellisten elementtien lukumäärä . Jos maski on skalaari, jonka arvo on , niin vektoritaulukon elementtien lukumäärän , jos se on annettu, on oltava vähintään yhtä suuri kuin taulukon elementtien kokonaismäärä .
Toiminnon tulos on yksiulotteinen taulukko, joka on samaa tyyppiä kuin array . Tuloksen pituus on yhtä suuri kuin vektorin pituus , jos sellainen annetaan; jos ei, niin todellisten elementtien lukumäärä maskitaulukossa . Jos vektoria ei ole määritetty ja maski on skalaari, jonka arvo on tosi , niin tuloksena olevan yksiulotteisen vektorin pituus on yhtä suuri kuin taulukon elementtien lukumäärä .
Tuloksena oleva matriisi täytetään peräkkäin taulukon elementeillä ( järjestyksessä, jossa ne on sijoitettu tietokoneen muistiin), jotka täyttävät maskitaulukon todelliset arvot . Tässä tapauksessa, jos vektori on annettu , siitä valitaan puuttuvat (mahdollisesti) elementit tulostaulukosta ja alkaen taulukon viimeistä tosielementtiä seuraavasta indeksistä järjestyksessä .
Joten taulukolle
funktion tulos on yksiulotteinen taulukko . Jos vektori annetaan lisäksi , niin tulos on .
.TRUE.
PACK(A, mask=A.NE.0)PACK(A, mask=A.NE.0, V)
Fortranissa on runsaasti sisäänrakennettuja työkaluja syöttö-tulostustoimintoihin, mukaan lukien suuria tietoryhmiä varten. Fortranin tiedostot ovat sisäisiä ja ulkoisia.
Sisäinen tiedosto on mikä tahansa taulukko, merkkijono tai alimerkkijono. Sisäiset tiedostot ovat aina avoinna oletuksena. Ulkoinen tiedosto on mikä tahansa tiedosto, joka on suoritettavan ohjelman ulkopuolinen.
Molemmat tiedostotyypit käyttävät samoja kirjoitus WRITE- ja lukuoperaattoreita READ. Sisäisiä tiedostoja käytetään numero-merkkijono-numero-muunnoksiin ja sekalaisten numeeristen ja merkkien luomiseen.
Merkkijono ( 15 ) Real :: xyz = - 12 3.456 Integer intg Kirjoita ( merkkijono , * ) xyz ! Kirjoita numero -123.456 merkkijonoon Tulosta * , 'string=' , string ! merkkijono=␣ -123.4560␣ ␣ Lue ( string , '(I6)' ) intg ! Kokonaisluvun lukeminen merkkijonosta Tulosta * , 'intg=' , intg ! intg=␣ -123 !...Ulkoiset tiedostot on jaettu muotoiltuihin (teksti-, CR- ja LF-virrat), binääritiedostoihin (binääri), jotka näyttävät suoraan RAM-muistin, ja alustamattomiin (ei-binaariset). Lisäksi ne voivat olla suoran ja peräkkäisen pääsyn tiedostoja, joissa on kiinteä- ja muuttuvapituisia tietueita (muuttuja vain peräkkäisille tiedostoille), sekä segmentoituja tietueita (erittäin suurille muotoilemattomille peräkkäisille tiedostoille). Siten Fortran antaa sinun luoda ja käsitellä melkoisen määrän tiedostoja - 15 tapaa järjestää. Yhden tietueen enimmäiskoko on 2,14 tavua.
Suorakäyttötiedostojen avulla voit suorittaa I/O-toimintoja tietueille, joilla on tietty numero (korvaamatta tiedoston suurempia tai pienempiä merkintöjä).
Kun peräkkäinen tiedosto avataan, se voidaan sijoittaa alkuun, loppuun (ennen kuin kirjoitat "tiedoston loppu"), jolloin voit lisätä tietoja niiden kerääntyessä ylikirjoittamatta aiemmin syötettyjä, sekä joko alkuun tai lopussa, riippuen aiemmin määritetystä tiedoston tilasta (oliko se auki ennen vai ei).
Nykyaikaisissa kielistandardeissa (alkaen Fortran'90:stä tai Fortran'95:stä) on mahdollista työskennellä kolmen tyyppisten dynaamisten taulukoiden (automaattinen, allokoitu ja viitetaulukko), osoittimien , linkkien kanssa ; on sisäänrakennetut menettelyt suoraan muistin kanssa työskentelyyn ja menettelyt bittikohtaisiin toimintoihin.
Kielistandardit olettavat minkä tahansa dynaamisen matriisin käyttämän RAM-muistin automaattisen vapauttamisen ohjelman tai aliohjelman (menettely, toiminto) valmistumisen jälkeen, vaikka ohjelmoija ei olisikaan nimenomaisesti suorittanut julkaisua. Näin voit välttää muistivuotoja työskennellessäsi dynaamisten taulukoiden kanssa Fortranilla (osoittimia käytettäessä ja muissa tapauksissa vuodot ovat mahdollisia) huolimattomalla ohjelmoinnilla [12] .
Automaattiset taulukot (kääntäjän asettamat) luodaan, kun aliohjelmaa kutsutaan, ja ne ovat sen paikallisia objekteja. Niiden rajat määritellään joka kerta, kun menettely vedetään; samalla kun poistut siitä, ne tuhoutuvat ja muisti tyhjennetään. Automaattiset taulukot ovat pinossa ohjelman suorituksen aikana , allokoituna (käyttäen operaattoria ALLOCATE) - kasaan [25] .
Fortran-osoittimet ovat samanlaisia kuin C-osoittimet [12] , mutta laskentaongelmia ratkaistaessa ja matemaattisia algoritmeja kehitettäessä ne useimmiten korvataan onnistuneesti muilla Fortran-työkaluilla.
F'90-standardista alkaen ehdollinen haararakenne IF THEN - ELSEIF THEN - END IFei eroa vastaavista rakenteista muissa nykyaikaisissa kielissä ja korvasi ns. "aritmetiikka" IFtunnisteilla, vanhentunut [9] . Ehdollisesta operaattorista on myös yksinkertaisempi muoto: , jossa suoritettavan operaattorin tulee olla ainoa operaattorin jälkeen, esimerkiksi . IF(логическое условие) операторIFGoto метка
Valintarakenne SELECT CASE - CASE - CASE DEFAULT - END SELECTpäinvastoin eroaa konstruktiosta SWITCH - CASEC-kaltaisissa kielissä [28] , Java-kielessä [29] [30] ja muistuttaa jonkin verran CASEPascalin [31] operaattoria ominaisuuksiltaan. .
Kokonaisluku N ( 74 ) ! Select lauseke on kokonaisluku, looginen, merkkilauseke tai ... ! kokonaislukutaulukko tai merkkijono, jossa on mikä tahansa nollasta poikkeava määrä elementtejä nameSC : Valitse tapaus ( N ( i )) ! nameSC — rakenteen nimi, N(i) — taulukon elementti Tapaus (: - 5 ) ! suoritetaan kaikille N(i):lle, joka on pienempi tai yhtä suuri kuin -5 askeleella +1 ! Lohko 1 Tapaus ( - 3 , - 1 , 0 , 2 ) ! muuttujalle N(i), joka on yhtä suuri kuin -3, -1, 0, 2 ! Lohko 2 Tapaus ( 50 : 100 ) ! N(i):lle alueella 50–100 (vaihe +1) ! Lohko 3 Case ( 400 ) ! kun N(i) = 400 ! Lohko 4 Tapaus ( 1 , 20 : 30 , 35 ) ! jos N(i)=1, N(i) välillä 20-30 ja N(i)=35 ! Lohko 5 Oletustapaus ! _ kaikkiin muihin tilanteisiin. Case Default - valinnainen, valinnainen lauseke ! Oletuslohko Loppu Valitse nimiSCJos muuttujan N arvo, jota kutsutaan valintalausekkeeksi, vastaa valitsimien luetteloa (arvoluettelo tai alue) missä tahansa käskyssä CASE, esimerkiksi kolmannessa, jos N=70 , niin vastaavan lohkon suorittamisen jälkeen lausekkeista Block-3 , rakentamislähtöjä SELECT CASE[12] [25] ja keskeytyskäskyjä (kuten BREAK) ei vaadita . Operaattori CASE DEFAULT, samoin kuin rakenteen nimi, eivät ole välttämättömiä. Eri operaattoreiden valintaluetteloiden alueet eivät CASEsaa olla päällekkäisiä tai niissä ei saa olla vähintään yksi yhteinen elementti.
Valintalauseke (N) voi olla kokonaislukutaulukon elementti.
Valitsinluetteloiden alueet koskevat vain kokonaislukuja tai merkkejä nousevassa järjestyksessä alhaalta ylös; merkit - koodinsa nousevassa järjestyksessä .
Nykyaikaisessa Fortranissa on kahta muotoa iteraatiolaskurilla varustettuja silmukoita: perinteinen rakenne ja DOmerkitty ENDDOsilmukka. Jälkimmäinen on tunnustettu vanhentuneeksi malliksi F'90-standardin jälkeen, mutta se sisältyy edelleen standardeihin. Sisäkkäisissä silmukoissa, joissa on enemmän sisäkkäisyyttä, viimeinen lomake voi olla tiiviimpi:
! Vanhentuneen silmukkarakenteen syntaksi tee 1 k = 1 , 10 ! 1 on silmukan loppu tee 1 j = 1 , 20 ! otsikko voi olla sama sisäkkäisille silmukoille tee 1 i = 1 , 100 arr ( i , j , k ) = 25 1 Jatka ! tarra voi näkyä vain ennen kaikkia käyttäjiä L1 : tee k = 1 , 10 ! kuitenkin nykyaikainen merkintä mahdollistaa syklien nimeämisen, L2 : tee j = 1 , 20 ! mikä vastaa paremmin strukturoidun ohjelmoinnin käsitettä L3 : do i = 1 , 100 ! ja helpottaa virheiden välttämistä arr ( i , j , k ) = 25 lopeta L3 lopeta L2 lopeta L1Silmukan otsikolla laskuri on seuraava täysi muoto:
nimi : DO I = N1 , N2 , dN ! rakenteen nimi on valinnainen ... ! N1 on laskurin alkuarvo, N2 on loppuarvo, dN on askel (silmukkaparametrit) END DO nimi ! Silmukkaparametrit ovat mielivaltaisen etumerkin kokonaislukuja. dN ei ole nolla.Silmukkakappaleen keskeytyksetön suoritusten lukumäärä on N c = max( int((N 2 -N 1 +dN)/dN), 0 ) ja voi olla yhtä suuri kuin nolla.
Esimerkiksi silmukka suorittaa nolla kertaa, jos N 2 <N 1 ja askel on positiivinen: dN>0 . Jos askel on negatiivinen, dN<0, niin sykli etenee päinvastaisessa järjestyksessä, kun taas syklin loppuun saattamiseksi on välttämätöntä, että N2 < N1 . Jos vaihe dN jätetään pois, oletuksena sen katsotaan olevan yhtä: dN=1 .
Silmukkamuuttujan I arvo siitä poistumisen jälkeen on aina yhtä suuri kuin N s +1 , eli yksi enemmän kuin silmukan iteraatioiden lukumäärä ja vähintään yksi: I≥1.
On myös mahdollista käyttää ehdollista silmukkaa - ja ääretöntä silmukkaa - , joilla on vakiomuoto. DO WHILE(логическое условие)END DODOEND DO
Operaattori CYCLE имя циклаkeskeyttää silmukan nykyisen iteraation ja jatkaa saman silmukan seuraavaan iteraatioon. Jos silmukan nimeä ei ole määritetty, nykyisen silmukan iteraatio (jossa operaattori sijaitsee CYCLE) keskeytyy.
Operaattori EXIT имя циклаkeskeyttää määritetyn nimen silmukan suorituksen ja siirtää ohjauksen edelleen, ja jos nimeä ei ole, se keskeyttää nykyisen silmukan (jossa operaattori on sisäkkäin EXIT).
Operaattorit CYCLEja ovat EXITloogisesti identtisiä operaattorin GOTOkanssa (sopivissa olosuhteissa), mutta tekevät koodista paljon helpompaa ohjelmoijan ymmärtää ja ylläpitää.
Kielen alkuperäisestä kehittämisestä lähtien IBM on valmistanut Fortran- kääntäjiä . Tällä hetkellä IBM toimittaa VS Fortran -optimointikääntäjän [32] IBM System z -keskikoneille , jonka eri versioiden kehityshistoria ulottuu vuoteen 1964, sekä XL Fortran -kääntäjän [33] PowerPC -arkkitehtuuriin perustuville alustoille . AIX , Linux ja supertietokone Blue Gene (sillä oli myös versio Mac OS X :lle , kun Macintosh-tietokoneissa käytettiin PowerPC-suorittimia). Molemmat kääntäjät sisältävät erittäin kehittyneitä optimoijia, jotka ovat tulosta IBM-asiantuntijoiden puolen vuosisadan jatkuvasta tieteellisestä työstä. IBM Fortran XL -kääntäjän pohjalta IBM:n liikekumppani Absoft on luonut ja toimittanut Absoft Pro Fortran -kääntäjän PowerPC (Linux, Mac OS X) ja Intel (Linux, Mac OS X, Windows) prosessoreihin perustuviin järjestelmiin. [34] .
Vuoteen 1997 asti Microsoft Corporation oli merkittävä Windows-käyttöjärjestelmän Fortran-kääntäjän valmistaja . Myöhemmin hän luopui niiden kehittämisestä alhaisen kannattavuuden vuoksi. Sen jälkeen kääntäjän toimitti DEC , josta tuli osa Compaqia vuonna 1998 ja joka yhdessä viimeksi mainitun kanssa fuusioitui HP :hen vuonna 2002 . Intel on kehittänyt tätä kääntäjän versiota edelleen , ja kääntäjä on nimeltään Intel Fortran Compiler , jonka avulla voit optimoida koodin Intel IA-32-, x86_64- ja IA-64-alustoille.
DEC tarjoaa kääntäjän, joka on integroitu Digital Visual Fortran -kehitysympäristöön , joka perustuu Microsoft Visual Studioon . Tämän sarjan tunnetuimmat tuotteet ovat FPS 4.0 (Microsoft Fortran Power Station), DVF 5.0 ja 6.0. Jokainen kääntäjä voi tukea useita Fortran-standardeja. Fuusioiden seurauksena markkinoille ilmestyi myöhempiä tuotteita Compaq- ja HP-tuotemerkeillä. HP myy tällä hetkellä kehitysympäristön versiota 6.6 Intel/win32:lle. Fortran-tuki on myös toteutettu kaikille HP:n korkean suorituskyvyn alustoille.
Toinen merkittävä Fortran-kehitysjärjestelmien toimittaja on Lahey , joka tarjoaa integroituja ratkaisuja Windowsille ja Linuxille.
Watcomin kääntäjää pidettiin pitkään parhaana Fortran-kääntäjänä PC:lle , joka erotettiin erilliseksi Open Watcom -projektiksi , joka kehittää kääntäjää avoimesti.
Ilmaisista Fortran-kääntäjistä kannattaa korostaa entisen Sun Microsystemsin (nykyisin Oracle) kääntäjää, joka on osa Sun Studiota , joka tuottaa tehokasta koodia SPARC , x86 ja x86-64 [35] alla ja on saatavilla Solarisille , OpenSolarisille ja GNU/Linux .
GNU Free Software Foundation julkaisi g77 Fortran 77 -kääntäjän, joka on avoimen lähdekoodin ja saatavilla lähes kaikille alustoille ja on täysin yhteensopiva GCC :n kanssa . Nyt se on korvattu GFortran- kääntäjällä , joka toteuttaa lähes kaikki Fortran-95-standardin rakenteet ja monet Fortran-2003-, Fortran-2008- ja Fortran-2018-standardien rakenteet. Se on myös täysin taaksepäin yhteensopiva Fortran-77:n kanssa. On myös itsenäinen g95 -projekti GCC :hen perustuvan Fortran-95-kääntäjän luomiseksi .
Monien ohjelmointijärjestelmien avulla voit linkittää Fortran-ohjelman kääntämisen tuloksena saadut objektitiedostot muiden kielten kääntäjiltä saatuihin objektitiedostoihin, mikä mahdollistaa joustavampien ja monikäyttöisempien sovellusten luomisen. Fortran-kielelle on saatavana myös suuri määrä kirjastoja, jotka sisältävät sekä rutiineja klassisten laskentaongelmien ratkaisemiseen ( LAPACK , IMSL , BLAS ), tehtäviä hajautetun laskennan järjestämiseen ( MPI , PVM ) ja tehtäviä graafisten käyttöliittymien rakentamiseen ( Quickwin , FORTRAN ). / TK ) tai pääsy DBMS :ään ( Oracle ).
Fortran ilmestyi Neuvostoliitossa myöhemmin kuin lännessä, koska aluksi Neuvostoliitossa Algolia pidettiin lupaavampana kielenä . Neuvostoliiton fyysikkojen kommunikaatio kollegoidensa kanssa CERNistä , jossa 1960-luvulla lähes kaikki laskelmat suoritettiin Fortran-ohjelmilla, oli tärkeä rooli Fortranin käyttöönotossa [36] .
Ensimmäinen Neuvostoliiton Fortran- kääntäjä luotiin vuonna 1967 Minsk-2- koneelle , mutta se ei saanut paljon mainetta. Fortranin laaja käyttöönotto alkoi BESM-6- koneen FORTRAN-DUBNA-kääntäjän luomisen jälkeen vuonna 1968 . Fortran on ASVT- ja SM-tietokoneiden pääkieli , jota käytetään usein yhdessä RATFOR - esiprosessorin kanssa . Vuonna 1972 ilmestyneissä ES-tietokoneissa oli jo alun perin Fortran - kääntäjä ("lainattu" IBM/360 :stä muiden ohjelmistojen kanssa).
1970-luvulla IPM kehitti graafisen kirjaston GRAFOR ("Graphic Extension of FORtran") [37] .
1980-luvun lopulla ja 1990-luvun alussa fyysikko Andrei Zaretsky loi sarjan lastenkirjoja, joiden yksi päähenkilöistä oli professori Fortran , joka selitti lapsille tietokonelukutaidon ja ohjelmoinnin perusteet ymmärrettävällä kielellä [38] [39] .
Sosiaalisissa verkostoissa | ||||
---|---|---|---|---|
Temaattiset sivustot | ||||
Sanakirjat ja tietosanakirjat | ||||
|
Ohjelmointikielet | |
---|---|
|