Turkish Tutorial for Fortran Part #2

Words
406
Reading
2 min
Listen
Play
9y

Fortran

1954'de IBM tarafından üretilen IBM 704 için ilk sürümü John Backus ve ekibi tarafından geliştirilmiştir. Backus ve ekibi Kasım 1954'de "The IBM Mathematical FORmula TRANslating System: Fortran" isimli raporu yayınlamışlardır.

What Will I Learn?

I will try to give you information about the use of Fortran Programming Language. This series will proceed step by step. At the end of our project, we will have learned the Fortran Programming and Calculus Language. I will strive to give you a useful education.

Ne Öğreneceğim?

Bu seride sizlere Fortran Programlama Dili kullanımı hakkında bilgiler vermeye çalışacağım. Bu seri adım adım ilerleyecektir. Projemizin sonunda Fortran Programlama ve Hesaplama Dilini öğrenmiş olacağız. Sizlere faydalı bir eğitim serisi vermek için çabalayacağım.

Requirements

  • To develop and examine the concept of problem solving
  • Thinking and developing other things while solving problems
  • Force 2.0

Gereksinimler

  • Problem çözme kavramını geliştirmek ve incelemek
  • Problem çözerken başka yollar düşünmek ve geliştirmek
  • Force 2.0

Difficulty / Zorluk

  • Intermediate / Orta Düzey

Curriculum / Müfredat

Daha işlevsel: ''map, filter, fold,unfold''

  • map: saf elemental işlevlerle aynı işlevselliğe sahiptir, ama dizilere tekrarlı işlevler uygulamak için de kullanılabilir, örneğin:
pure recursive integer function fibonacci(n) result(fib)
     integer,intent(in) :: n
     if(n == 0)then
        fib = 0
    elseif(n == 1)then
        fib = 1
    else
       fib = fibonacci(n-1)+fibonacci(n-2)
    endif
endfunction fibonacci
write(* , *)map(fibonacci,[17,5,13,22])
                     1597                5                  233              17711
  • filter: Mantıksal bir filtreleme işlevini yerine getiren dizi öğelerine döndürür. Örneğin, ''.true'' işlemini döndüren bir işlev tanımlayabiliriz. Giriş bir çift sayı olduğunda ve bir diziyi filtrelemek için bu işlevi kullanabilirsiniz:
   pure logical function even(x)
       integer,intent(in) :: x
       even = .false.
      if(mod(x,2) == 0)even = .true.
  endfunction even
  write(* , *)filter(even,[1,2,3,4,5])
                         2                   4
  • Fonksiyonlar tek tek zincirlenebilir:
write(* , *)filter(even,map(fibonacci,arange(1,10)))
                              2                   8                      34
  • Fonksiyonel Fortran da sol sağ ve ağaçlandırma fonksiyonları sağlar ''foldl-foldr-foldt'' sırasıyla. Bu işlevler, kullanıcı tanımlı bir işlev kullanarak bir diziyi yinelemeli olarak küçültür ve elde edilen skalaya döndürür. Kıvrımları kullanan basit örnekler ''sum'' ve ''product'' işlevler için skalar hesaplama üzerinde çalışanlara aşağıdaki gibi ekleme ve çarpma işlevlerini tanımlayabiliriz:
pure real function add(x,y)
       real,intent(in) :: x,y
      add = x+y
endfunction add
pure real function mult(x,y)
      real,intent(in) :: x,y
     mult = x*y
endfunction mult
  • Sonra ise, yukarıdaki tanımlı fonksiyonları ve bir başlangıç ​​değerini kullanarak hesaplamayı "folding" yoluyla bir dizinin ''sum'' ve ''product'' dizisini hesaplayabiliriz.
! left-fold an array using add to compute array sum
write(* , *)foldl(add,0.,arange(1.,5.))
       15.0000000
! left-fold an array using mult to compute array product
write(* , *)foldl(mult,1.,arange(1.,5.))
       120.000000
  • Yukarıdaki, Fortran intrinsik bileşenini kavramın bir kanıtı olarak yeniden yaratan örnektir. Tabii ki iç işlevler mümkün olduğunca kullanılmalıdır.

  • ''foldl- foldr- foldt'' kullanıcı tanımlı işlev yapılandırılmışsa aynı sonucu gösterir.

  • Katlayabilmek için ''fold'' ve ''unfold'' bir başlangıç değerine göre bir dizi oluşturmak için kullanılabilir 'x' ve bir işlev 'f' de üretilen diziye eşittir. [x, f(x), f(f(x)), f(f(f(x))), ... ]. Örnek verirsek;

    pure real function multpt1(x)
          real,intent(in) :: x
         multpt1 = 1.1*x
   endfunction multpt1
  write(* , *)unfold(multpt1,[1.],5)
           1.00000000       1.10000002       1.21000004       1.33100009       1.46410012

Set fonksiyonları: ''set, union, intersection, complement''

  • İşlev ''set'', bir giriş dizisinin benzersiz öğelerini döndürür:
write(* , *)set([1,1,2,2,3])
                     1                   2                  3

Kümeler üzerinde işlem Ortak fonksiyonlar, ''union, intersection, ve complement'' ile mevcuttur:

! unique elements that are found in either array
write(* , *)union([1,2,2],[2,3,3,4])
                           1              2                       3                         4
! unique elements that are found in both arrays
write(* , *)intersection([1,2,2],[2,3,3,4])
                  2
! unique elements that are found first but not in second array
write(* , *)complement([1,2,2],[2,3,3,4])
                       1



Posted on Utopian.io - Rewarding Open Source Contributors

Turkish Tutorial for Fortran Part #2 | Ecency