Fortran
निष्पादन नियंत्रण
खोज…
अगर निर्माण
if
निर्माण (फोरट्रान 77 में एक ब्लॉक IF स्टेटमेंट कहा जाता है) कई प्रोग्रामिंग भाषाओं में आम है। यह सशर्त रूप से कोड के एक ब्लॉक को निष्पादित करता है जब एक तार्किक अभिव्यक्ति का मूल्यांकन किया जाता है।
[name:] IF (expr) THEN
block
[ELSE IF (expr) THEN [name]
block]
[ELSE [name]
block]
END IF [name]
कहाँ पे,
- नाम - अगर निर्माण का नाम (वैकल्पिक)
- expr - कोष्ठक में संलग्न एक स्केलर तार्किक अभिव्यक्ति
- ब्लॉक - शून्य या अधिक विवरण या निर्माण का एक क्रम
if then
विवरण की शुरुआत में एक निर्माण नाम का मान होना चाहिए end if
कथन में end if
में निर्माण नाम है, और यह वर्तमान स्कॉपिंग इकाई के लिए अद्वितीय होना चाहिए।
if
बयानों में, (इन) समानताएं और एक कथन का मूल्यांकन करने वाले तार्किक अभिव्यक्ति का उपयोग निम्नलिखित ऑपरेटरों के साथ किया जा सकता है:
.LT. which is < ! less than
.LE. <= ! less than or equal
.GT. > ! greater than
.GE. >= ! greater than or equal
.EQ. = ! equal
.NE. /= ! not equal
.AND. ! logical and
.OR. ! logical or
.NOT. ! negation
उदाहरण:
! simplest form of if construct
if (a > b) then
c = b / 2
end if
!equivalent example with alternate syntax
if(a.gt.b)then
c=b/2
endif
! named if construct
circle: if (r >= 0) then
l = 2 * pi * r
end if circle
! complex example with nested if construct
block: if (a < e) then
if (abs(c - e) <= d) then
a = a * c
else
a = a * d
end if
else
a = a * e
end if block
if
निर्माण का एक ऐतिहासिक उपयोग है, if
इसे "अंकगणित अगर" कथन कहा जाता है। चूंकि यह अधिक आधुनिक निर्माणों द्वारा प्रतिस्थापित किया जा सकता है, हालांकि, यह यहां कवर नहीं किया गया है। अधिक विवरण यहां पाया जा सकता है ।
सेस निर्माण का चयन करें
एक select case
निर्माण सशर्त निर्माणों या बयान एक में एक अदिश अभिव्यक्ति के मूल्य के आधार के एक ब्लॉक को निष्पादित करता है select case
बयान। इस नियंत्रण निर्माण को गणना goto
प्रतिस्थापन के रूप में माना जा सकता है।
[name:] SELECT CASE (expr)
[CASE (case-value [, case-value] ...) [name]
block]...
[CASE DEFAULT [name]
block]
END SELECT [name]
कहाँ पे,
- नाम -
select case
निर्माणselect case
नाम (वैकल्पिक) - expr - प्रकार पूर्णांक, तार्किक, या वर्ण की एक अदिश अभिव्यक्ति (कोष्ठकों में संलग्न)
- मामला-मान - एक या अधिक स्केलर पूर्णांक, तार्किक, या वर्ण आरंभिक अभिव्यक्तियाँ कोष्ठक में संलग्न
- ब्लॉक - शून्य या अधिक विवरण या निर्माण का एक क्रम
उदाहरण:
! simplest form of select case construct
select case(i)
case(:-1)
s = -1
case(0)
s = 0
case(1:)
s = 1
case default
print "Something strange is happened"
end select
इस उदाहरण में, (:-1)
केस वैल्यू मानों की एक श्रेणी है जो शून्य से कम के सभी मानों से मेल खाती है, (0)
शून्य से मेल खाती है, और (1:)
शून्य से ऊपर के सभी मूल्यों से मेल खाता है, default
सेक्शन में अन्य सेक्शन शामिल हैं निष्पादित नहीं किया गया।
ब्लॉक DO निर्माण
एक do
निर्माण एक पाशन निर्माण जो एक लूप नियंत्रण द्वारा नियंत्रित पुनरावृत्तियों की एक संख्या है है
integer i
do i=1, 5
print *, i
end do
print *, i
ऊपर के रूप में, लूप वेरिएबल i
लूप से 5 बार गुजरता है, मूल्यों को बदले में 1 से 5 लेता है। निर्माण पूरा होने के बाद लूप वैरिएबल का मान 6 होता है, यानी लूप वेरिएबल लूप के पूरा होने के बाद एक बार फिर बढ़ जाता है ।
आम तौर पर, do
पाश निर्माण इस प्रकार समझा जा सकता है
integer i, first, last, step
do i=first, last, step
end do
पाश के साथ शुरू होता i
मान के साथ first
, के द्वारा एक यात्रा incrementing step
जब तक i
से अधिक है last
(या कम से कम last
है, तो कदम आकार नकारात्मक है)।
यह ध्यान रखना महत्वपूर्ण है कि फोरट्रान 95 के बाद से, लूप चर और लूप नियंत्रण अभिव्यक्ति पूर्णांक होनी चाहिए।
cycle
कथन के साथ समय से पहले एक पुनरावृत्ति को समाप्त किया जा सकता है
do i=1, 5
if (i==4) cycle
end do
और पूरा निर्माण exit
स्टेटमेंट के साथ निष्पादन को रोक सकता है
do i=1, 5
if (i==4) exit
end do
print *, i
do
निर्माण का नाम दिया जा सकता है:
do_name: do i=1, 5
end do do_name
जो विशेष रूप से उपयोगी है जब वहाँ नेस्टेड हैं do
निर्माणों
do1: do i=1, 5
do j=1,6
if (j==3) cycle ! This cycles the j construct
if (j==4) cycle ! This cycles the j construct
if (i+j==7) cycle do1 ! This cycles the i construct
if (i*j==15) exit do1 ! This exits the i construct
end do
end do1
do
निर्माणों भी अनिश्चित पाश नियंत्रण हो सकता है, या तो "हमेशा के लिए" या जब तक किसी दिए गए स्थिति उत्पन्न होने पर
integer :: i=0
do
i=i+1
if (i==5) exit
end do
या
integer :: i=0
do while (i<6)
i=i+1
end do
यह भी एक अनंत के लिए अनुमति देता do
एक के माध्यम से पाश .true.
बयान
print *,'forever'
do while(.true.)
print *,'and ever'
end do
एक do
निर्माण भी पुनरावृत्तियों अनिश्चित के आदेश छोड़ सकते हैं
do concurrent (i=1:5)
end do
यह देखते हुए कि लूप नियंत्रण का रूप एक forall
नियंत्रण के समान है।
बयानों पर विभिन्न प्रतिबंध हैं जो एक do concurrent
निर्माण की सीमा के भीतर निष्पादित किए जा सकते हैं जो यह सुनिश्चित करने के लिए डिज़ाइन किए गए हैं कि निर्माण के पुनरावृत्तियों के बीच कोई डेटा निर्भरता नहीं है। प्रोग्रामर द्वारा यह स्पष्ट संकेत संकलक द्वारा अधिक अनुकूलन (समानांतर सहित) सक्षम कर सकता है जो अन्यथा निर्धारित करने के लिए अलग-अलग हो सकता है।
एक अंतराल के भीतर "निजी" चर को do concurrent
भीतर एक block
निर्माण के उपयोग से महसूस किया जा सकता do concurrent
:
do concurrent (i=1:5, j=2:7)
block
real tempval ! This is independent across iterations
end block
end do
ब्लॉक do
कंस्ट्रक्शन का एक अन्य रूप end do
बजाय एक लेबल continue
स्टेटमेंट का उपयोग करता end do
:
do 100, i=1, 5
100 continue
एक साझा समाप्ति कथन के साथ ऐसे निर्माणों को घोंसला बनाना संभव है
do 100, i=1,5
do 100, j=1,5
100 continue
इन दोनों रूपों, और विशेष रूप से दूसरा (जो कि अप्रचलित है), आमतौर पर स्पष्टता के हितों से बचा जाना चाहिए।
अंत में, एक गैर-ब्लॉक do
निर्माण भी है। यह भी अप्रचलित होने के लिए और है समझा जाता है कहीं वर्णित , एक ब्लॉक के रूप में पुनर्गठन करने के तरीकों के साथ साथ do
निर्माण।
जहां निर्माण हो
where
निर्माण, Fortran90 में उपलब्ध के बाद एक नकाबपोश का प्रतिनिधित्व करता है do
निर्माण। मास्किंग स्टेटमेंट if
स्टेटमेंट के समान नियमों का पालन करता है, लेकिन दिए गए एरे के सभी तत्वों पर लागू होता है। का उपयोग करते हुए where
संचालन एक सरणी (या एक ही आकार के कई सरणियों) पर किए जाने के लिए अनुमति देता, तत्व है जो की एक निश्चित नियम को संतुष्ट। इसका उपयोग कई चर पर एक साथ संचालन को सरल बनाने के लिए किया जा सकता है।
वाक्य - विन्यास:
[name]: where (mask)
block
[elsewhere (mask)
block]
[elsewhere
block]
end where [name]
यहाँ,
- नाम - ब्लॉक को दिया गया नाम है (यदि नाम दिया गया है)
- मुखौटा - सभी तत्वों पर लागू एक तार्किक अभिव्यक्ति है
- ब्लॉक - निष्पादित किए जाने वाले आदेशों की श्रृंखला
उदाहरण:
! Example variables
real:: A(5),B(5),C(5)
A = 0.0
B = 1.0
C = [0.0, 4.0, 5.0, 10.0, 0.0]
! Simple where construct use
where (C/=0)
A=B/C
elsewhere
A=0.0
end
! Named where construct
Block: where (C/=0)
A=B/C
elsewhere
A=0.0
end where Block