आप MAXDIM
पंक्तियों और NR
कॉलम के साथ एक सरणी प्रारंभ कर रहे हैं, और ऐसा लगता है कि प्रत्येक कॉलम में पूर्णांक 1 से MAXDIM
होता है।
पहले कदम के रूप, आगे जाना है और वास्तविक DO
-loop लिखने:
do j = 1,NR
myarray(1:MAXDIM,j) = (/ (i, i=1,MAXDIM) /)
end do
जब हम संक्षिप्त करने के लिए प्रयास करें:
do j=1,NR
do i=1,MAXDIM
myarray(i,j) = i
end do
end do
एक अंतर्निहित पाश संरचना करने के लिए भीतरी पाश को संकुचित करें बाहरी पाश, हालांकि, कुछ अजीब होता है:
myarray = (/ ((/ (i, i=1,MAXDIM) /), j=1,NR) /)
अब, मैं एक इंक मिल असम्बद्ध रैंक त्रुटि जैसा आपने किया था।
print *, shape(myarray)
print *, shape((/ ((/ (i, i=1,MAXDIM) /), j=1,NR) /))
यह बाहर प्रिंट
5 10
50
सरणी निर्माता बस विस्तार हो रहा है: जब से मैं या तो निहित do-छोरों पर बहुत अच्छा नहीं हूँ, मैं सरणी निर्माता के लिए shape
आंतरिक परिणामों को देखा एक 1-डी सरणी, किसी नेस्टेड सरणी निर्माण flattening। सरल बनाने के लिए हम वास्तव में (/ /)
के दूसरे सेट को छोड़ सकते हैं। चूंकि सब कुछ पहले से ही उचित क्रम में है, इसलिए हम उचित रैंक सुनिश्चित करने के लिए reshape
आंतरिक का उपयोग कर सकते हैं। मेरा पूरा परीक्षण कार्यक्रम तो है:, j = 1
program sotest
implicit none
integer, parameter :: MAXDIM = 5
integer, parameter :: NR = 10
integer :: i
integer :: j
integer :: myarray(MAXDIM, NR)
integer :: myarray_implicit(MAXDIM, NR)
do j = 1,NR
do i = 1,MAXDIM
myarray(i,j) = i
end do
end do
myarray_implicit = reshape((/ ((i,i=1,MAXDIM), j=1,NR) /), (/ MAXDIM, NR /))
print *, all(myarray == myarray_implicit)
end program sotest
ध्यान दें कि यह भी 'myarray_implicit = आकृति बदलें ((/ ((मैं लिखने के लिए मान्य है, मैं = 1, MAXDIM), एन.आर.) /), आकार (myarray_implicit)) ' स्पष्ट रूप से अपने मैट्रिक्स के आयामों को टाइप करने से बचने के लिए। – Markus