ما هو الهيكل الأساسي للوظيفة في FORTRAN؟
سؤال
هذا شيء أردت معرفته مؤخرًا، غالبًا بدافع الفضول.أنا في حالة مزاجية لتعلم بعض أساليب البرمجة القديمة، ويبدو أن لغة 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