8 Ocak 2010 Cuma

FORTRAN ile birim dönüştürücü

Üniversitelerde verilen eğitimin ilginçliğini uzun zamandır garipse(ye)miyorum. Fakat burada (KKTC) İnşaat Mühendisliği öğrencilerine bilgisayar dersinde verilen ödev gerçekten ilginç. Aslında verilen ödevden çok yapılan ödev ilginç. Ödev şu; 31 adet hacim birimini birbirine çeviren bir FORTRAN programı yazınız. Bu program için öğrencilerin 170 sayfalık çıktısı olan bir kod yazdıklarını duyunca bu iş için gerçekten yarım sayfadan fazlası gereklimidir diye düşündüm, sanırım gereksiz. 170 sayfaya binlerce kod satırı sığdığına göre ne tarz bir birim dönüştürücüsünün hemen hemen MINIX 1.0 işletim sistemi kadar kod satırına sahip olabileceğini düşündüm. Belki bir İnşaat Mühendisi adayının işine yarar diye aşağıdaki kodu yazıyorum. Sanırım 1000 puntoluk bir yazı tipi kullanılırsa 170 sayfa edebilir. Acaba bazı şeyleri hiç öğretmeseler daha mı iyi?...

      PROGRAM CONVERT      
      CHARACTER DISP(32)*20
      DOUBLE PRECISION VAL, RETVAL, RATIO(31)
      INTEGER U1, U2, I
      DATA DISP/"acre foot","barrels (oil)","bushels (UK)",
     &"bushels (US)","centiliters","cubic centimeters",
     &"cubic decimeters","cubic decameters","cubic feet",
     &"cubic inches","cubic meters","cubic millimeters",
     &"cubic yards","cups","deciliters","fluid ounces (UK)",
     &"fluid ounces (US)","gallons (UK)","gallons, dry (US)",
     &"gallons, liquid (US)","liters l or L","liters (1901-1964)",
     &"milliliters","pints (UK)","pints, dry (US)",
     &"pints, liquid (US)","quarts (UK)","quarts, dry (US)",
     &"quarts, liquid (US)","table spoons","tea spoons","E X I T"/
      DATA RATIO/1233481.83754752,158.987294928,36.36872,
     &35.23907016688,0.01,1E-3,1,1E6,28.316846592,0.016387064,
     &1E3,1E-6,764.554857984,0.2365882365,0.1,0.0284130625,
     &0.0295735295625,4.54609,4.40488377086,3.785411784,1,
     &1.000028,1E-3,0.56826125,0.5506104713575,0.473176473,
     &1.1365225,1.101220942715,0.946352946,0.01478676478125,
     &0.00492892159375/

10    WRITE (*,'(/,A,/,A)') "                   UNIT TABLE",
     &"-------------------------------------------------"
      DO I = 1, 31, 2
          WRITE (*,'(A,I2,A,A,T20$)') '[', i   , '] ', DISP(I)
          WRITE (*,'(A,I2,A,A)'     ) '[', i+1 , '] ', DISP(I+1)
      ENDDO
      WRITE (*,'(/,A$)') 'Select unit to convert FROM ? '
      READ  (*,*) U1
      WRITE (*,'(/,A$)') 'Select unit to convert TO ? '
      READ  (*,*) U2
      IF ((U1 .EQ. 32) .OR. (U2 .EQ. 32)) STOP
      IF ((U1 .GT. 32) .OR. (U2 .GT. 32)) GOTO 10
      WRITE (*,'(/,A$)') 'Enter the amount ? '
      READ  (*,*) VAL
      RETVAL = (VAL * RATIO(U1)) / RATIO(U2)
      WRITE (*,'(/,F15.5,A,A,A,F15.5,A,A,/)') VAL,' ',DISP(U1),
     &' = ',RETVAL,' ',DISP(U2)
      STOP
      END

Hiç yorum yok:

Konular

Matematik (5) Kod (4) Gündem (2) Bilgisayar (1) İnternet (1)