অ্যারে ফোরট্রান-এ (Arrays in Fortran)
ফোরট্রান-এ অ্যারে ব্যবহার করে একাধিক মান বা ডেটা স্টোর করতে পারে এবং অ্যারেগুলি বৈজ্ঞানিক ও গাণিতিক গণনার ক্ষেত্রে গুরুত্বপূর্ণ। অ্যারে হলো একই ধরনের একাধিক মানের সমষ্টি, যা একটি নির্দিষ্ট সূচক ব্যবহার করে অ্যাক্সেস করা যায়।
অ্যারে ডিক্লারেশন (Array Declaration)
ফোরট্রান-এ অ্যারে ডিক্লার করতে dimension কিওয়ার্ড বা সরাসরি (:) সিম্বল ব্যবহার করা হয়।
এক-মাত্রিক অ্যারে (One-Dimensional Array)
integer, dimension(5) :: arrউপরের উদাহরণে, arr একটি integer ধরনের এক-মাত্রিক অ্যারে যা ৫টি উপাদান ধারণ করতে পারে।
উদাহরণ:
integer, dimension(5) :: arr
arr = (/1, 2, 3, 4, 5/)এখানে, arr অ্যারেতে ৫টি উপাদান রয়েছে: 1, 2, 3, 4, 5
দুই-মাত্রিক অ্যারে (Two-Dimensional Array)
ফোরট্রান-এ দুই-মাত্রিক অ্যারে সাধারণত ম্যাট্রিক্স বা টেবিলের মতো ডেটা স্টোর করতে ব্যবহৃত হয়।
integer, dimension(3, 3) :: matrixউপরের উদাহরণে, matrix একটি 3x3 অ্যারে যা ৯টি উপাদান ধারণ করতে পারে।
উদাহরণ:
integer, dimension(2, 2) :: matrix
matrix = reshape([1, 2, 3, 4], shape(matrix))এখানে, matrix হলো একটি 2x2 ম্যাট্রিক্স যা 1, 2, 3, 4 মান ধারণ করে।
অ্যারেতে মান অ্যাসাইনমেন্ট (Assigning Values to Arrays)
ফোরট্রানে অ্যারেতে মান অ্যাসাইন করার জন্য সরাসরি ইনডেক্স ব্যবহার করা যায় অথবা reshape ফাংশন ব্যবহার করা যায়।
ইনডেক্স ব্যবহার করে অ্যাসাইনমেন্ট
integer, dimension(3) :: arr
arr(1) = 10
arr(2) = 20
arr(3) = 30এই উদাহরণে, arr অ্যারেতে ৩টি উপাদান রয়েছে যার মান যথাক্রমে 10, 20, এবং 30।
অ্যারে অপারেশন (Array Operations)
ফোরট্রানে অ্যারের ওপর গাণিতিক অপারেশন করতে সহজে ভেক্টরাইজেশন সমর্থন রয়েছে।
উদাহরণ:
integer, dimension(3) :: arr1, arr2, result
arr1 = (/1, 2, 3/)
arr2 = (/4, 5, 6/)
result = arr1 + arr2 ! result হবে (/5, 7, 9/)এখানে, arr1 এবং arr2 যোগ করা হয়েছে এবং প্রতিটি ইনডেক্সে যোগফল result অ্যারেতে রাখা হয়েছে।
অ্যারে ইন্টারেশন (Array Iteration)
do লুপ ব্যবহার করে অ্যারে ইন্টারেশন করা সম্ভব।
integer, dimension(5) :: arr
integer :: i
arr = (/2, 4, 6, 8, 10/)
do i = 1, 5
print *, "Element", i, "=", arr(i)
end doএই কোডটি প্রতিটি অ্যারের উপাদান প্রদর্শন করবে।
RESHAPE ফাংশন ব্যবহার করে অ্যারে রিসাইজিং
reshape ফাংশন ব্যবহার করে অ্যারের আকার পরিবর্তন করা যায়।
integer, dimension(6) :: linear_array
integer, dimension(2, 3) :: matrix
linear_array = (/1, 2, 3, 4, 5, 6/)
matrix = reshape(linear_array, shape(matrix))এখানে, linear_array এর উপাদানগুলোকে matrix আকারে পুনর্বিন্যাস করা হয়েছে।
ডাইনামিক অ্যারে (Dynamic Arrays)
ফোরট্রানে ডাইনামিক অ্যারে তৈরি করতে allocatable কিওয়ার্ড ব্যবহার করা হয়।
integer, allocatable :: arr(:)
allocate(arr(5)) ! 5-আকারের অ্যারে তৈরি করা
arr = (/1, 2, 3, 4, 5/)
deallocate(arr) ! মেমোরি মুক্ত করাএখানে, allocate ব্যবহার করে একটি ডাইনামিক অ্যারে তৈরি করা হয়েছে এবং শেষে deallocate দিয়ে মেমোরি মুক্ত করা হয়েছে।
উপসংহার
ফোরট্রান-এ অ্যারে ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণের একটি গুরুত্বপূর্ণ মাধ্যম। এক-মাত্রিক এবং দুই-মাত্রিক অ্যারের মাধ্যমে ফোরট্রান বৈজ্ঞানিক এবং গাণিতিক গণনায় ব্যবহৃত বিভিন্ন ডেটাসেট সহজে এবং দক্ষতার সাথে পরিচালনা করতে পারে।
ফোরট্রানে এক-মাত্রিক এবং বহুমাত্রিক অ্যারের ব্যবহার
ফোরট্রান প্রোগ্রামিং ভাষায় অ্যারে ব্যবহারের জন্য শক্তিশালী এবং সহজ একটি ব্যবস্থা প্রদান করা হয়েছে। অ্যারে গুলি একই ধরনের ডেটার গ্রুপ বা সেকশন সংরক্ষণ করে, যা গাণিতিক সমস্যাগুলির সমাধানে অত্যন্ত কার্যকরী। ফোরট্রানে এক-মাত্রিক এবং বহুমাত্রিক অ্যারে ব্যবহারের জন্য একটি নির্দিষ্ট সিনট্যাক্স এবং নিয়ম রয়েছে।
১. এক-মাত্রিক অ্যারে (One-dimensional Array)
এক-মাত্রিক অ্যারে একটি সোজা লাইন (বা সারি) হিসেবে সংরক্ষিত একাধিক উপাদান বা ভ্যালু ধারণ করে। এই ধরনের অ্যারেগুলিতে একক ইনডেক্স ব্যবহার করা হয়।
সিনট্যাক্স:
<datatype> :: <array_name>(<size>)উদাহরণ:
PROGRAM one_dimensional_array
INTEGER :: i
REAL :: arr(5) ! এক-মাত্রিক অ্যারে, আকার ৫
! অ্যারের মান ইনিশিয়ালাইজ করা
arr(1) = 10.0
arr(2) = 20.0
arr(3) = 30.0
arr(4) = 40.0
arr(5) = 50.0
! অ্যারের উপাদান প্রিন্ট করা
PRINT *, 'Array elements:'
DO i = 1, 5
PRINT *, 'arr(', i, ') = ', arr(i)
END DO
END PROGRAM one_dimensional_arrayআউটপুট:
Array elements:
arr( 1 ) = 10.000000
arr( 2 ) = 20.000000
arr( 3 ) = 30.000000
arr( 4 ) = 40.000000
arr( 5 ) = 50.000000এখানে arr নামক এক-মাত্রিক অ্যারে ৫টি উপাদান ধারণ করে, এবং প্রতিটি উপাদান তার ইনডেক্স দিয়ে অ্যাক্সেস করা হয়েছে।
২. বহুমাত্রিক অ্যারে (Multi-dimensional Array)
ফোরট্রানে বহুমাত্রিক অ্যারে দুটি বা তার বেশি মাত্রা নিয়ে কাজ করে। এটি একটি টেবিল বা ম্যাট্রিক্সের মতো হতে পারে, যেখানে প্রতিটি উপাদান বিভিন্ন ইনডেক্সের সমন্বয়ে অ্যাক্সেস করা হয়।
সিনট্যাক্স:
<datatype> :: <array_name>(<size1>, <size2>, ...)উদাহরণ:
PROGRAM multi_dimensional_array
INTEGER :: i, j
REAL :: matrix(3, 3) ! ৩x৩ এর বহুমাত্রিক অ্যারে (ম্যাট্রিক্স)
! ম্যাট্রিক্সের মান ইনিশিয়ালাইজ করা
matrix(1, 1) = 1.0
matrix(1, 2) = 2.0
matrix(1, 3) = 3.0
matrix(2, 1) = 4.0
matrix(2, 2) = 5.0
matrix(2, 3) = 6.0
matrix(3, 1) = 7.0
matrix(3, 2) = 8.0
matrix(3, 3) = 9.0
! ম্যাট্রিক্সের উপাদান প্রিন্ট করা
PRINT *, 'Matrix elements:'
DO i = 1, 3
DO j = 1, 3
PRINT *, 'matrix(', i, ',', j, ') = ', matrix(i, j)
END DO
END DO
END PROGRAM multi_dimensional_arrayআউটপুট:
Matrix elements:
matrix( 1 , 1 ) = 1.000000
matrix( 1 , 2 ) = 2.000000
matrix( 1 , 3 ) = 3.000000
matrix( 2 , 1 ) = 4.000000
matrix( 2 , 2 ) = 5.000000
matrix( 2 , 3 ) = 6.000000
matrix( 3 , 1 ) = 7.000000
matrix( 3 , 2 ) = 8.000000
matrix( 3 , 3 ) = 9.000000এখানে matrix নামক ৩x৩ এর বহুমাত্রিক অ্যারে (ম্যাট্রিক্স) তৈরি করা হয়েছে, যেখানে দুটি ইনডেক্স (i, j) ব্যবহার করে ম্যাট্রিক্সের উপাদানগুলি অ্যাক্সেস করা হয়েছে।
৩. ডায়নামিক অ্যারে (Dynamic Arrays)
ফোরট্রানে ডায়নামিক অ্যারে ব্যবহার করা যায়, যেখানে অ্যারের আকার রানটাইমে নির্ধারণ করা হয়। এই ক্ষেত্রে অ্যারের আকারের জন্য ALLOCATABLE ডিক্লেয়ারেশন এবং ALLOCATE/DEALLOCATE কমান্ড ব্যবহার করা হয়।
উদাহরণ:
PROGRAM dynamic_array
INTEGER :: i, n
REAL, ALLOCATABLE :: arr(:) ! ডায়নামিক অ্যারে
! অ্যারের আকার ইনপুট নেওয়া
PRINT *, 'Enter the size of the array:'
READ *, n
! অ্যারে আলোকেট করা
ALLOCATE(arr(n))
! অ্যারে ইনপুট দেওয়া
DO i = 1, n
PRINT *, 'Enter value for arr(', i, '):'
READ *, arr(i)
END DO
! অ্যারে প্রিন্ট করা
PRINT *, 'Array elements:'
DO i = 1, n
PRINT *, 'arr(', i, ') = ', arr(i)
END DO
! অ্যারে ডিলোকেট করা
DEALLOCATE(arr)
END PROGRAM dynamic_arrayআউটপুট:
Enter the size of the array:
5
Enter value for arr( 1 ):
10.0
Enter value for arr( 2 ):
20.0
Enter value for arr( 3 ):
30.0
Enter value for arr( 4 ):
40.0
Enter value for arr( 5 ):
50.0
Array elements:
arr( 1 ) = 10.000000
arr( 2 ) = 20.000000
arr( 3 ) = 30.000000
arr( 4 ) = 40.000000
arr( 5 ) = 50.000000এখানে ALLOCATABLE শব্দ ব্যবহার করে ডায়নামিকভাবে অ্যারের আকার নির্ধারণ করা হয়েছে এবং ALLOCATE কমান্ড দিয়ে অ্যারে তৈরি করা হয়েছে। এরপর, DEALLOCATE দিয়ে অ্যারে মুছে ফেলা হয়েছে।
উপসংহার
- এক-মাত্রিক অ্যারে: একমাত্র ইনডেক্স দিয়ে অ্যারের উপাদান অ্যাক্সেস করা হয়।
- বহুমাত্রিক অ্যারে: একাধিক ইনডেক্স (যেমন ২ বা ৩) দিয়ে অ্যারের উপাদান অ্যাক্সেস করা হয়, যা ম্যাট্রিক্সের মতো কাজ করে।
- ডায়নামিক অ্যারে: ফোরট্রান এমন একটি ক্ষমতা প্রদান করে যা রানটাইমে অ্যারের আকার নির্ধারণ করতে সহায়তা করে।
ফোরট্রানে অ্যারে ব্যবহার করার মাধ্যমে আপনি বৃহৎ আকারের ডেটা সংরক্ষণ এবং দক্ষভাবে সেগুলি প্রক্রিয়া করতে সক্ষম হবেন।
ফোরট্রানে অ্যারে ম্যানিপুলেশন এবং DIMENSION স্টেটমেন্ট
ফোরট্রান একটি শক্তিশালী ভাষা যা অ্যারে ম্যানিপুলেশনের জন্য বিভিন্ন কার্যকরী পদ্ধতি সরবরাহ করে। অ্যারে হল একাধিক ডেটার একটি সেট, যা একই টাইপের উপাদান ধারণ করে। ফোরট্রানে DIMENSION স্টেটমেন্ট ব্যবহার করে অ্যারে ডিফাইন করা হয় এবং তারপরে অ্যারে ম্যানিপুলেশন বিভিন্ন অপারেশনের মাধ্যমে করা হয়।
১. DIMENSION স্টেটমেন্ট
ফোরট্রানে DIMENSION স্টেটমেন্ট ব্যবহার করে একটি অ্যারে ডিফাইন করা হয়। এই স্টেটমেন্টটি অ্যারের আকার এবং উপাদানের সংখ্যা নির্ধারণ করে।
DIMENSION স্টেটমেন্টের সাধারণ গঠন:
DIMENSION array_name(index1, index2, ..., indexN)- array_name: অ্যারের নাম।
- index1, index2, ..., indexN: অ্যারের বিভিন্ন মাত্রার আকার।
উদাহরণ:
program array_example
implicit none
integer, dimension(3, 4) :: matrix ! 3x4 আকারের অ্যারে
! অ্যারের উপাদানসমূহ অ্যাসাইন করা
matrix(1, 1) = 5
matrix(1, 2) = 10
matrix(2, 3) = 15
matrix(3, 4) = 20
! অ্যারের উপাদানগুলি প্রিন্ট করা
print *, 'matrix(1,1) = ', matrix(1, 1)
print *, 'matrix(2,3) = ', matrix(2, 3)
print *, 'matrix(3,4) = ', matrix(3, 4)
end program array_exampleএখানে:
DIMENSION matrix(3, 4)একটি 3x4 আকারের দুই মাত্রার অ্যারে তৈরি করেছে।- অ্যারের কিছু মান ইনডেক্সের মাধ্যমে অ্যাসাইন করা হয়েছে।
DIMENSION স্টেটমেন্টের বৈশিষ্ট্য:
- ARRAY স্টেটমেন্ট দিয়ে অ্যারে ডিফাইন করা হয়, এবং আকারের মাপ (size) নির্ধারণ করা হয়।
- অ্যারের ডাইমেনশন সংখ্যা, ডেটা টাইপ, এবং আকার নির্ধারণ করা যায়।
২. অ্যারে ম্যানিপুলেশন
ফোরট্রানে অ্যারে ম্যানিপুলেশন অনেক ধরনের অপারেশন করতে পারে, যেমন অ্যারের উপাদান নির্ধারণ, অ্যারের মধ্যে মান সংগ্রহ, অথবা অ্যারের সন্নিবেশ করা।
a. অ্যারে উপাদান অ্যাক্সেস
অ্যারের উপাদানগুলি সঠিক ইনডেক্স ব্যবহার করে অ্যাক্সেস করা যায়।
program array_access
implicit none
integer, dimension(3) :: numbers
! অ্যারের মান অ্যাসাইন করা
numbers(1) = 10
numbers(2) = 20
numbers(3) = 30
! অ্যারের মান প্রিন্ট করা
print *, 'numbers(1) = ', numbers(1)
print *, 'numbers(2) = ', numbers(2)
print *, 'numbers(3) = ', numbers(3)
end program array_accessএখানে:
numbers(1)থেকেnumbers(3)পর্যন্ত অ্যারের উপাদানগুলো অ্যাক্সেস করা হয়েছে এবং সেগুলির মান প্রিন্ট করা হয়েছে।
b. অ্যারে ইনিশিয়ালাইজেশন
অ্যারে ইনিশিয়ালাইজেশন মান নির্ধারণ করার একটি পদ্ধতি হল DATA স্টেটমেন্ট ব্যবহার করা।
program array_initialization
implicit none
integer, dimension(4) :: array = [1, 2, 3, 4]
print *, 'Array elements: ', array
end program array_initializationএখানে:
- অ্যারে
arrayকে[1, 2, 3, 4]এর মান দিয়ে ইনিশিয়ালাইজ করা হয়েছে।
c. অ্যারে ইনডেক্সিং
ফোরট্রানে অ্যারে ইনডেক্সিং সোজাসুজি করা যায়, কিন্তু ইনডেক্সগুলি 1 থেকে শুরু হয় (যেমন, C, Java-এর মতো ভাষার তুলনায়)।
d. এলিমেন্টস আপডেট বা মান পরিবর্তন
program array_update
implicit none
integer, dimension(5) :: arr
integer :: i
! অ্যারের মান অ্যাসাইন করা
arr = [1, 2, 3, 4, 5]
! অ্যারের এলিমেন্ট আপডেট
arr(2) = 100
arr(4) = 200
! অ্যারের সমস্ত মান প্রিন্ট করা
print *, "Updated array elements:"
do i = 1, 5
print *, "arr(", i, ") = ", arr(i)
end do
end program array_updateএখানে:
- অ্যারের কিছু মান আপডেট করা হয়েছে এবং সেগুলির মান প্রিন্ট করা হয়েছে।
e. অ্যারে স্লাইসিং
ফোরট্রানে অ্যারে স্লাইসিং (অ্যারের একটি অংশের অ্যাক্সেস) করা যায়।
program array_slicing
implicit none
integer, dimension(5) :: arr = [1, 2, 3, 4, 5]
integer :: i
! অ্যারের অংশ (স্লাইস) প্রিন্ট করা
print *, "Array slice from index 2 to 4:"
print *, arr(2:4) ! আউটপুট হবে [2, 3, 4]
end program array_slicingএখানে:
arr(2:4)অ্যারের ২ থেকে ৪ ইনডেক্স পর্যন্ত উপাদানগুলি অ্যাক্সেস করবে।
৩. অ্যারে ম্যানিপুলেশনের আরো উন্নত ফিচার
a. অ্যারে SUM এবং PRODUCT
ফোরট্রান অ্যারে উপাদানগুলির যোগফল এবং গুণফল বের করতে ইন-বিল্ট ফাংশন SUM এবং PRODUCT সরবরাহ করে।
program array_sum_product
implicit none
integer, dimension(5) :: arr = [1, 2, 3, 4, 5]
integer :: sum, product
! অ্যারের যোগফল এবং গুণফল বের করা
sum = sum(arr)
product = product(arr)
print *, "Sum of array elements: ", sum
print *, "Product of array elements: ", product
end program array_sum_productএখানে:
sum(arr)অ্যারের সকল উপাদানের যোগফল প্রদান করে।product(arr)অ্যারের সকল উপাদানের গুণফল প্রদান করে।
b. অ্যারে TRANSPOSE
ফোরট্রানে 2D অ্যারে ট্রান্সপোজ করার জন্য TRANSPOSE ফাংশন ব্যবহৃত হয়।
program array_transpose
implicit none
real, dimension(2, 3) :: matrix = reshape([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], [2, 3])
real, dimension(3, 2) :: transposed_matrix
! অ্যারে ট্রান্সপোজ করা
transposed_matrix = transpose(matrix)
print *, "Original Matrix:"
print *, matrix
print *, "Transposed Matrix:"
print *, transposed_matrix
end program array_transposeএখানে:
transpose(matrix)ফাংশনটিmatrixএর ট্রান্সপোজ করা মান প্রদান করবে।
উপসংহার
ফোরট্রানে DIMENSION স্টেটমেন্টের মাধ্যমে অ্যারে ডিফাইন করা হয় এবং তারপরে অ্যারে ম্যানিপুলেশন বিভিন্ন অপারেশন দ্বারা করা হয়, যেমন অ্যারের মান পরিবর্তন, অ্যারে স্লাইসিং, অ্যারের যোগফল এবং গুণফল বের করা ইত্যাদি। অ্যারে ব্যবহার করে আপনি বড় পরিসরের ডেটা পরিচালনা করতে পারেন এবং এর মাধ্যমে কোডে দক্ষতা ও সুষমতা আনতে পারেন।
ফোরট্রানে Array Intrinsic Functions (SUM, PRODUCT, MAX, MIN)
ফোরট্রান ভাষায় Array Intrinsic Functions এমন বিল্ট-ইন ফাংশনগুলি যা অ্যারে (array) ডেটা স্ট্রাকচারের উপর গাণিতিক এবং অন্যান্য কার্যক্রম পরিচালনা করতে ব্যবহৃত হয়। এই ফাংশনগুলো খুবই গুরুত্বপূর্ণ যখন অ্যারে-ভিত্তিক গণনা বা বিশ্লেষণ করতে হয়, যেমন অ্যারের উপাদানগুলির যোগফল, গুণফল, সর্বোচ্চ মান, সর্বনিম্ন মান ইত্যাদি বের করা।
ফোরট্রান-এর কিছু সাধারণ Array Intrinsic Functions হলো: SUM, PRODUCT, MAX, এবং MIN। এই ফাংশনগুলি খুবই কার্যকরী এবং সহজেই অ্যারে ডেটার উপর বিভিন্ন গাণিতিক অপারেশন সম্পাদন করতে সহায়ক।
১. SUM (অ্যারের যোগফল)
SUM ফাংশনটি একটি অ্যারের সমস্ত উপাদানের যোগফল প্রদান করে।
উদাহরণ:
program sum_example
integer :: arr(5)
integer :: result
! অ্যারে এর উপাদানগুলি
arr = [1, 2, 3, 4, 5]
! SUM ফাংশন ব্যবহার করে অ্যারের যোগফল বের করা
result = sum(arr)
print *, 'Sum of array elements: ', result
end program sum_exampleব্যাখ্যা:
- অ্যারে
arr = [1, 2, 3, 4, 5]এর উপাদানগুলির যোগফল বের করা হয়েছে। আউটপুট হবে:
Sum of array elements: 15
২. PRODUCT (অ্যারের গুণফল)
PRODUCT ফাংশনটি একটি অ্যারের সমস্ত উপাদানের গুণফল প্রদান করে।
উদাহরণ:
program product_example
integer :: arr(4)
integer :: result
! অ্যারে এর উপাদানগুলি
arr = [2, 3, 4, 5]
! PRODUCT ফাংশন ব্যবহার করে অ্যারের গুণফল বের করা
result = product(arr)
print *, 'Product of array elements: ', result
end program product_exampleব্যাখ্যা:
- অ্যারে
arr = [2, 3, 4, 5]এর উপাদানগুলির গুণফল বের করা হয়েছে। আউটপুট হবে:
Product of array elements: 120
৩. MAX (অ্যারের সর্বোচ্চ মান)
MAX ফাংশনটি একটি অ্যারের সর্বোচ্চ মান প্রদান করে।
উদাহরণ:
program max_example
integer :: arr(6)
integer :: max_value
! অ্যারে এর উপাদানগুলি
arr = [12, 34, 56, 23, 89, 10]
! MAX ফাংশন ব্যবহার করে অ্যারের সর্বোচ্চ মান বের করা
max_value = max(arr)
print *, 'Maximum value in the array: ', max_value
end program max_exampleব্যাখ্যা:
- অ্যারে
arr = [12, 34, 56, 23, 89, 10]এর মধ্যে সর্বোচ্চ মান বের করা হয়েছে। আউটপুট হবে:
Maximum value in the array: 89
৪. MIN (অ্যারের সর্বনিম্ন মান)
MIN ফাংশনটি একটি অ্যারের সর্বনিম্ন মান প্রদান করে।
উদাহরণ:
program min_example
integer :: arr(6)
integer :: min_value
! অ্যারে এর উপাদানগুলি
arr = [12, 34, 56, 23, 89, 10]
! MIN ফাংশন ব্যবহার করে অ্যারের সর্বনিম্ন মান বের করা
min_value = min(arr)
print *, 'Minimum value in the array: ', min_value
end program min_exampleব্যাখ্যা:
- অ্যারে
arr = [12, 34, 56, 23, 89, 10]এর মধ্যে সর্বনিম্ন মান বের করা হয়েছে। আউটপুট হবে:
Minimum value in the array: 10
৫. SUM, PRODUCT, MAX, MIN - একাধিক অ্যারে ডাইমেনশন
এই ফাংশনগুলো একাধিক ডাইমেনশন বিশিষ্ট অ্যারের ক্ষেত্রেও কাজ করে। তবে এক্ষেত্রে, আপনাকে একটি নির্দিষ্ট ডাইমেনশন নির্বাচন করতে হতে পারে, যেমন dim=1 (কলামের জন্য) অথবা dim=2 (পঙক্তির জন্য)।
উদাহরণ (মাল্টি-ডাইমেনশনাল অ্যারে):
program multi_dim_example
integer :: arr(2, 3)
integer :: sum_result, product_result
! 2x3 অ্যারে
arr = reshape([1, 2, 3, 4, 5, 6], [2, 3])
! SUM ফাংশন ব্যবহার করে
sum_result = sum(arr)
! PRODUCT ফাংশন ব্যবহার করে
product_result = product(arr)
print *, 'Sum of array elements: ', sum_result
print *, 'Product of array elements: ', product_result
end program multi_dim_exampleব্যাখ্যা:
- এই কোডে একটি 2x3 আঙ্গিক অ্যারে
arrতৈরি করা হয়েছে, যার উপাদানগুলির যোগফল এবং গুণফল বের করা হয়েছে। আউটপুট হবে:
Sum of array elements: 21 Product of array elements: 720
উপসংহার
ফোরট্রানে Array Intrinsic Functions যেমন SUM, PRODUCT, MAX, এবং MIN অত্যন্ত গুরুত্বপূর্ণ এবং একাধিক অ্যারের উপাদানগুলির উপর দ্রুত গাণিতিক অপারেশন সম্পাদন করতে সহায়ক। এই ফাংশনগুলির মাধ্যমে অ্যারে ডেটা স্ট্রাকচারের বিশ্লেষণ সহজ এবং দ্রুত করা সম্ভব।
ডাইনামিক অ্যারে এবং অ্যালোকেবল অ্যারে (Dynamic Arrays and Allocatable Arrays in Fortran)
ফোরট্রান-এ ডাইনামিক অ্যারে এবং অ্যালোকেবল অ্যারে ব্যবহৃত হয় যখন অ্যারের আকার রানটাইমে পরিবর্তন করতে হয়, অর্থাৎ প্রোগ্রাম চলাকালীন সময় অ্যারে তৈরী করা এবং মুছে ফেলা হয়। এগুলি মেমরি ব্যবস্থাপনাকে আরও বেশি নমনীয় এবং শক্তিশালী করে।
১. অ্যালোকেবল অ্যারে (Allocatable Arrays)
ফোরট্রানে allocatable কিওয়ার্ড ব্যবহার করে ডাইনামিক অ্যারে তৈরি করা হয়। এটি এমন অ্যারে যা রানটাইমে তার আকার নির্ধারণ করা যায় এবং পরে মেমোরি মুক্ত করা যায়।
অ্যালোকেবল অ্যারের ডিক্লারেশন
integer, allocatable :: arr(:)এখানে, arr একটি ডাইনামিক অ্যারে ঘোষণা করা হয়েছে, যার আকার শুরুতে নির্ধারিত নয়।
অ্যারে অ্যালোকেট (Allocate) এবং ডিলোকেট (Deallocate)
- অ্যালোকেট: অ্যারে তৈরি করার সময় এটি মেমরি বরাদ্দ করে।
- ডিলোকেট: অ্যারে মুছে ফেলার সময় এটি মেমরি মুক্ত করে।
উদাহরণ:
program dynamic_array_example
integer, allocatable :: arr(:)
integer :: n, i
! আকার সেট করুন
print *, "Enter the size of the array:"
read *, n
! অ্যারে অ্যালোকেট
allocate(arr(n))
! অ্যারে ইনিশিয়ালাইজ
do i = 1, n
arr(i) = i * 2
end do
! অ্যারে প্রিন্ট করা
print *, "Array elements:"
do i = 1, n
print *, arr(i)
end do
! অ্যারে ডিলোকেট
deallocate(arr)
end program dynamic_array_exampleএই প্রোগ্রামে:
- প্রথমে অ্যারের আকার ইউজারের ইনপুট অনুযায়ী নির্ধারণ করা হয়েছে।
- তারপর
allocateদ্বারা মেমরি বরাদ্দ করা হয়েছে। - অ্যারের উপাদানগুলিকে ইনিশিয়ালাইজ করা হয়েছে এবং পরে প্রিন্ট করা হয়েছে।
- শেষে
deallocateদ্বারা অ্যারে মুছে ফেলা হয়েছে।
২. ডাইনামিক অ্যারের সুবিধা
- নমনীয়তা: রানটাইমে অ্যারের আকার পরিবর্তন করার সুবিধা দেয়। যখন আকার পূর্বানুমান করা সম্ভব নয়, তখন এটি খুবই কার্যকরী।
- মেমরি ব্যবস্থাপনা: ডাইনামিক অ্যারের মাধ্যমে প্রোগ্রাম মেমরি কেবল তখনই ব্যবহার করবে যখন প্রয়োজন হবে, এটি মেমরি ব্যবস্থাপনা আরও দক্ষ করে তোলে।
- অ্যাক্সেসযোগ্যতা: অ্যারে আকার পরিবর্তন করতে বা নতুন আকারের অ্যারে তৈরি করতে
allocateব্যবহার করা হয় এবং পরে মেমরি মুক্ত করতেdeallocateব্যবহার করা হয়।
৩. ডাইনামিক অ্যারে ব্যবহার করার সময় কিছু গুরুত্বপূর্ণ বিষয়
- অ্যারে ব্যবহারের আগে অবশ্যই এটি
allocateদ্বারা মেমরি বরাদ্দ করতে হবে। - অ্যারে ব্যবহার করার পরে মেমরি মুক্ত করতে
deallocateব্যবহার করতে হবে, অন্যথায় মেমরি লিক হতে পারে। - যখন অ্যারের আকার পরিবর্তন করতে হয়, তখন এটি নতুনভাবে
allocateকরতে হবে, পুরনো অ্যারের মেমরি বরাদ্দ মুক্ত করার জন্যdeallocateব্যবহার করতে হবে।
৪. মাল্টি-মাত্রিক ডাইনামিক অ্যারে (Multi-Dimensional Dynamic Arrays)
ফোরট্রানে মাল্টি-মাত্রিক ডাইনামিক অ্যারে ব্যবহারের জন্যও allocate ব্যবহার করা হয়। একাধিক মাত্রার জন্য অ্যারে তৈরি করা যায়, যেমন ২D ম্যাট্রিক্স বা ৩D টেনসর।
উদাহরণ (2D ডাইনামিক অ্যারে):
program dynamic_2d_array
integer, allocatable :: matrix(:,:)
integer :: i, j, rows, cols
! ইউজারের ইনপুট নেয়া
print *, "Enter number of rows and columns:"
read *, rows, cols
! 2D অ্যারে অ্যালোকেট
allocate(matrix(rows, cols))
! অ্যারের মান ইনিশিয়ালাইজ
do i = 1, rows
do j = 1, cols
matrix(i, j) = i * j
end do
end do
! অ্যারের মান প্রিন্ট করা
print *, "Matrix elements:"
do i = 1, rows
do j = 1, cols
print *, "matrix(", i, ",", j, ") = ", matrix(i, j)
end do
end do
! অ্যারে ডিলোকেট
deallocate(matrix)
end program dynamic_2d_arrayএই প্রোগ্রামে:
- ইউজার থেকে সারি এবং কলামের আকার ইনপুট নেওয়া হয়েছে।
allocateদ্বারা ২D অ্যারে তৈরি করা হয়েছে।- ২D অ্যারের উপাদানগুলি ইনিশিয়ালাইজ করা হয়েছে এবং পরে প্রদর্শিত হয়েছে।
- শেষে
deallocateব্যবহার করে অ্যারে মুছে ফেলা হয়েছে।
৫. ডাইনামিক অ্যারের সীমাবদ্ধতা
- ডাইনামিক অ্যারে ব্যবহারের সময় অতিরিক্ত মেমরি ব্যবহৃত হয়, তাই এটি শুধুমাত্র প্রয়োজনীয় হলে ব্যবহার করা উচিত।
- খুব বড় ডাইনামিক অ্যারে ব্যবহার করলে মেমরি সমস্যা হতে পারে, তাই অ্যারে আকারের পরিমাণ ম্যানেজ করা গুরুত্বপূর্ণ।
উপসংহার
ফোরট্রানে ডাইনামিক অ্যারে এবং অ্যালোকেবল অ্যারে ব্যবহারের মাধ্যমে মেমরি ব্যবস্থাপনা আরও নমনীয় এবং দক্ষ করা যায়। এটি বিশেষভাবে তখন কার্যকরী যখন প্রোগ্রামে অ্যারের আকার আগে থেকে জানা থাকে না, যেমন যখন ইউজার ইনপুটের উপর ভিত্তি করে অ্যারের আকার নির্ধারণ করতে হয়। allocate এবং deallocate কিওয়ার্ড ব্যবহারে অ্যারের মেমরি পরিচালনা সহজ এবং নিরাপদ।
Read more