سؤال

هذا شيء أردت معرفته مؤخرًا، غالبًا بدافع الفضول.أنا في حالة مزاجية لتعلم بعض أساليب البرمجة القديمة، ويبدو أن لغة FORTRAN هي مكان جيد للبدء.

أعتقد أنني يجب أن أساعدكم يا رفاق من خلال توفير نقطة بداية جيدة.
فكيف يمكن كتابة هذا الإجراء C في FORTRAN؟

int foo ( int x , int y )
{
    int tempX = x ;
    x += y / 2 ;
    y -= tempX * 3 ;    // tempX holds x's original value.
    return x * y ;
}

أعلم أن الوظيفة بأكملها يمكن أن تكون سطرًا واحدًا:

return ( x + ( y / 2 ) ) * ( y - ( x * 3 ) ) ;

لكن الهدف من طرح هذا السؤال هو معرفة كيفية كتابة هذه البيانات الأربعة بشكل فردي في لغة FORTRAN، وليس بالضرورة دمجها في عبارة واحدة.

هل كانت مفيدة؟

المحلول

وأين كنت تعلم FORTRAN من؟ مجرد إلقاء نظرة على يكي !

والمستمدة من سبيل المثال، وأنا أقول:

function func(x, y) result(r)
   integer, intent(in) :: x, y 
   integer             :: r 
   integer             :: tempX
   tempX = x
   x = x / 2
   y = y - tempX * 3
   r = x * y
end function foo

نصائح أخرى

لا تلومني - قلت قديم أنماط الترميز:

C234567
      SUBROUTINE FOO(I,J,K)
C SAVE THE ORIGINAL VALUES
      IORIG = I
      JORIG = J
C PERFORM THE COMPUTATION
      I = I + J/2
      J = J - IORIG*3
      K = I * J
C RESTORE VALUES
      I = IORIG
      J = JORIG
      END SUBROUTINE FOO

أنا أرتجف وأنا أكتب هذا، ولكن

  • جميع المتغيرات هي أعداد صحيحة ضمنيًا، لأنها تبدأ بالأحرف بين I وN
  • يتم تمرير FORTRAN حسب المرجع، لذا قم بإعادة التعيين I و J في النهاية لإعطاء نفس تأثير الوظيفة الأصلية (أيالقيمة المرورية، لذلك x و y لم تتغير في روتين الاتصال)
  • تبدأ التعليقات في العمود 1، وتبدأ البيانات الفعلية في العمود 7

من فضلك، من فضلك، من فضلك لا تكتب رمزًا جديدًا مثل هذا إلا على سبيل المزاح.

وظيفة الخاص بك قد تبدو هذه في فورتران

 integer function foo(m, n)
 integer i

 i = m
 m = m + n/2
 n = n - i*3
 foo = m*n

 end function foo

ويجب أن تكون قادرة على البدء في أي برنامج تعليمي حول فورتران. بعض الشيء مثل هذا قد يساعد HTTP: //www.cs .mtu.edu / ~ shene / دورات / cs201 / ملاحظات / fortran.html

وهتافات

الوظائف والوظائف الفرعية :

INTEGER FUNCTION foo(i, j)
...
foo = 42
END

وبعد ذلك في وقت لاحق:

k = foo(1, 2)

وعلى غرار أعلاه، ولكن مع البرنامج الرئيسي لتوضيح كيف يمكن أن يسمى ذلك.

C2345678
       program testfoo
         implicit none   
         integer r, foo 
         r = foo(4,5)
         print *, 'result = ', r
       end

       integer function foo(x,y)
         integer x, y
         integer tx, ty
         tx = x + y / 2
         ty = y - x * 3
         foo = tx * ty
         return
       end

لاحظ أن هذا هو فورتران 77، وهو ما تعلمت منذ 23 عاما.

والطراز القديم صحيح في تطبيق IJKLMN قاعدة لعدد صحيح

C2345678
      FUNCTION IFOO(I,J)
      II = I + J/2
      JJ = J - I*3
      IFOO = II*JJ
      END
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top