Bersikap Penasaran dan Belajar: Fortran Moden secara ringkas

Kemajuan dalam sains dan kejuruteraan masih bergantung pada Fortran daripada bahasa lain dengan banyak langkah penting. Terkejut? Anda tidak seharusnya, walaupun banyak orang yang menyebut diri mereka sebagai pengaturcara tidak pernah benar-benar belajar Fortran. Saya akan mengajar anda Fortran dalam masa lima minit atau kurang. Ia tidak akan menyakitkan, dan anda akan tahu apa bahasa pengaturcaraan yang paling penting dan berpengaruh yang pernah ada.

Ilmuwan komputer mungkin bersikap seperti Fortran tidak ada, tetapi budaya popular ( The Simpsons , Season 26, Episode 10) lebih baik dengan pemerhatian yang bijak: "Fortran, bahasa pengaturcaraan yang paling hebat!" Sebenarnya, lebih daripada separuh pengiraannya yang dilakukan oleh komputer yang paling berkuasa di dunia berasal dari Fortran. Dalam beberapa sistem yang besar, kod Fortran bertanggungjawab untuk 80-100% pengiraan.

Ia juga sangat mudah dipelajari, seperti yang akan anda lihat dengan pengenalan ringkas mengenai pengaturcaraan Fortran ini. Saya menganggap anda sudah tahu cara memprogram dalam sesuatu selain Fortran (jika anda benar-benar baru dalam pengaturcaraan, saya sangat mengesyorkan mempelajari Fortran dengan "A Mewarnai Buku Fortran").

 Mari kita mulakan

 program hello

    cetak *, "Helo, Dunia!"

tamat program hello

Ketik (gunakan pelanjutan .f95 atau .f90 untuk fail anda), susun, jalankan ini, dan ia mencetak "Hello, World!". Huruf “*” dalam pernyataan cetak pada dasarnya bermaksud format secara automatik .

Contoh kedua saya melakukan beberapa matematik dan selesai dengan pernyataan 'if / then / else':

atur cara mymath

  tidak tersirat

  sebenar :: jawapan, x, y, jumlah, prod, cubedx, cubedy

  cetak *, 'Taipkan dua nombor (x dan y)'

  baca *, x                                          

  baca *, y                                          

  jumlah = x + y  

  prod = x * y                                       

  cubedx = x ** 3;

  cubedy = y ** 3;

  cetak *, 'Jumlah x + y adalah', jumlah

  cetak *, 'Produk x * y adalah', prod

  cetak *, 'Cubed x and y', cubedx, cubedy

  cetak *, 'sinus x dan y', sin (x), sin (y)

  jika (x> y) maka

    cetak *, 'Saya perhatikan bahawa x lebih besar daripada y'

  yang lain

    cetak *, 'Nampaknya y tidak lebih kecil daripada x'

  tamat sekiranya

tamat program mymath  

Anda mungkin melihat bahawa saya masuk "tidak ada yang tersirat." Itu normal di Fortran moden - ia memberitahu penyusun untuk menghendaki pemboleh ubah dinyatakan secara eksplisit sehingga pemboleh ubah yang tidak diketahui ditandai sebagai kesalahan. Tanpanya, Fortran menganggap pemboleh ubah bermula dengan 'i' hingga 'n' (dua huruf pertama bilangan bulat) adalah bilangan bulat, dan yang lain adalah nombor titik terapung ('nyata'). Itu mengurangkan berapa banyak kad yang kita terpaksa meninju beberapa dekad yang lalu, tetapi secara umum tidak disukai pada zaman moden ini.

 Menjalankan program ini (dan menaip di 3.14 dan 1.57) menghasilkan yang berikut:

Taipkan dua nombor (x dan y)

3.14

1.57

 Jumlah x + y ialah 4.71000004   

 Produk x * y ialah 4.92980051   

 Digunakan x dan y 30.9591484 3.86989355   

 sinus x dan y 1.59254798E-03 0.999999702

 Saya perhatikan bahawa x lebih besar daripada y   

Fortran direka untuk matematik (FORmula TRANslation), perhatikan bahawa "sin (...)" dibina tanpa perlu memasukkan tajuk atau pakej apa pun. Sudah tentu, Fortran menyokong nombor terapung dan nombor bulat, tetapi juga menyokong nombor kompleks. Tidak diperlukan bahan tambahan.

Contoh ketiga saya melibatkan gelung (disebut "lakukan" di Fortran):

 gelung program

  tidak tersirat    

  integer :: i, j, keep (100,2), w

  w = 0

  adakah i = 10, 50, 5

    lakukan j = i, 20, 5

       cetak *, i, j

       w = w + 1

       simpan (w, 1) = i

       simpan (w, 2) = j

    akhir buat

  akhir buat

  adakah i = 1, w

    cetak *, 'keep:', keep (i, 1), keep (i, 2)

  akhir buat

gelung program akhir

Garis cetakan dalam program contoh saya hanya akan dijalankan sekiranya j-do-loop dijalankan. Gelung j tidak berjalan sama sekali apabila saya melebihi 20. Contoh ini juga memperkenalkan tatasusunan dengan penggunaan tatasusunan bernama 'keep.' Fortran memulakan penomboran nombor pada '1' dan bukannya sifar, yang sama dengan cara orang nombor lantai bangunan Amerika (tingkat # 2 merujuk ke tingkat bawah yang dianggap '1'). Tempat-tempat lain di dunia menggunakan penomboran berdasarkan sifar untuk bangunan mereka ("tingkat pertama" adalah apa yang orang Amerika sebut sebagai "tingkat dua") seperti C dan C ++ yang dilakukan untuk tatasusunan. Output dari contoh 'loop program' ditunjukkan di bawah:

           10 10

          10 15

          10 20

          15 15

          15 20

          20 20

 simpan: 10 10

 simpan: 10 15

 simpan: 10 20

 simpan: 15 15

 simpan: 15 20

 simpan: 20 20

 Dalam contoh terakhir saya, saya akan menentukan subrutin (fungsi) yang disebut 'ave' untuk mengambil purata tiga nombor yang saya tetapkan secara statik. Anda akan melihat bahawa saya malas dan hanya menulis 'akhir' selepas program dan fungsi. Tidak apa-apa, tetapi jika anda menggunakan nama, seperti yang saya lakukan sebelumnya, penyusun akan membantu memastikan bahawa akhir sesuai dengan yang anda mahukan padanannya.

Program callret

  tidak tersirat

  sebenar a, b, c

  av sebenar, avsq1, avsq2

  ave sebenar

  data a, b, c / 5.0,2.0,3.0 /

  av = ave (a, b, c)

  cetak *, 'Rata-rata', a, b, c, 'adalah:', AV

akhir

ave fungsi sebenar (x, y, z)

  x, y, z, jumlah

  jumlah = x + y + z

  ave = jumlah / 3.0

  kembali

akhir

 Ini mencetak:

 Purata 5.00000000 2.00000000 3.00000000 adalah: 3.33333325 

 Ya, Fortran dapat memformat output. Sekiranya kita mengganti "cetak" di atas seperti berikut:

  cetak 8, 'Rata-rata', a, b, c, 'adalah', AV

8 format (a, 2 (f4.2, ','), f4.2, a, f7.5)

Hasilnya akan menjadi:

Purata 5.00, 2.00, 3.00 adalah 3.33333

Pemformatan Fortran juga boleh dilakukan pada satu baris dan mempunyai output cantik yang sama:

cetak "(a, 2 (f4.2, ','), f4.2, a, f7.5)", 'Rata-rata', a, b, c, 'is', AV

Sekiranya anda ditakdirkan untuk mempercayai bahawa Fortran itu pelik, anda akan disesatkan. Saya menulis semua contoh ini dalam apa yang disebut oleh programmer Fortran sebagai 'bentuk bebas'. Itu secara rasmi menjadi sebahagian daripada Fortran dengan standard 'Fortran 90' (oleh itu arahan saya untuk menggunakan .f90 atau .f95 sebagai sambungan fail; ini memberitahu penyusun, tanpa suis pilihan khas, bahawa kami menggunakan bentuk bebas). Perlu diingat, pada tahun 1956 pengguna menginginkan sesuatu yang sesuai dengan pukulan kad. Saya dapat berjam-jam bagaimana Fortran menampungnya dengan format berorientasikan lajur dan watak lanjutan, dll. Tetapi, seperti yang telah saya tunjukkan, anda sebenarnya tidak perlu mempelajarinya untuk menulis atau membaca kod Fortran.

Jadi mengapa Fortran dijauhi oleh saintis komputer? Soalan hebat. Fortran adalah bahasa tertua (c. 1956). Ini bermula di era kaset, kartu meninju, dan menggantikan komputer manusia. Ini mendahului pengaturcaraan tersusun blok, teori penghuraian, dan grafik. Sepanjang perjalanan, para saintis komputer meneroka kemajuan dalam pengkomputeran sambil memperkenalkan ribuan bahasa pengaturcaraan, yang kebanyakannya gagal diterokai. Walaupun begitu, dalam setiap bidang usaha manusia, "keluar dengan yang lama, dengan yang baru" adalah bergaya. Ilmu komputer tidak berbeza. 

Tetapi ketika pengurangan nombor adalah penting, tidak ada yang lebih baik atau lebih mudah daripada Fortran. Saya cadangkan kita semua mesti mengetahui banyak alat, dan menggunakan alat terbaik untuk pekerjaan itu. Hanya kerana tukul amanah saya sudah lama berada di kotak alat saya tidak bermakna saya tidak memerlukannya untuk pekerjaan yang betul. Fortran tidak berbeza.

Fortran bukan sahaja bahasa pengaturcaraan tahap tinggi yang asli, ia tetap hidup, penting, dan digunakan secara meluas. Siapa yang memulakan khabar angin untuk mencadangkan sebaliknya?

 Sumber

  • Intel Fortran - banyak digunakan untuk x86 (Intel / AMD), berprestasi tinggi
    • Anda mungkin layak untuk penyusun percuma (dan alat lain)
    • Salinan percubaan tersedia dengan pilihan untuk dibeli kemudian
    •  Beta 2018 berlangsung sehingga Julai 2018: cubalah beta berfungsi penuh terbaru dan terhebat ini, termasuk Fortran dan alat yang berkaitan, sehingga percuma: Intel Parallel Studio XE 2018 Beta - Sertai Sekarang
  • GNU Fortran - sokongan yang lebih luas (banyak pemproses, banyak sistem), prestasi yang lebih rendah
    • sumber terbuka dan percuma
    • di MacBook Air saya ... saya hanya mengatakan "brew install gcc" dan saya mendapat gfortran secara percuma

Klik di sini untuk memuat turun percubaan 30 hari percuma Intel Parallel Studio XE