Anda memiliki tiga masalah di sini, dan bukan hanya dengan loop "l
" dan "n
".
Masalah pertama adalah nilai dalam pernyataan data
tidak boleh berupa ekspresi sembarang. Secara khusus, keduanya harus berupa konstanta; 0.5*(l-1)
bukan sebuah konstanta.
Masalah kedua adalah batas-batas dalam daftar objek juga harus konstan (ekspresi); l
bukan ekspresi konstan.
Untuk yang pertama, perlu diperhatikan juga bahwa *
dalam daftar nilai data memiliki arti khusus, dan ini bukan operator perkalian. *
memberikan penghitungan ulang, dan penghitungan ulang 0.5
tidak valid.
Anda dapat memperbaiki poin kedua dengan cukup sederhana, dengan menggunakan konstruksi seperti
data H(1,1:31) /31*0./ ! Note the repeat count specifier
di luar loop, atau menggunakan loop tersirat
data (H(1,k),k=1,31) /31*0./
Melakukan sesuatu untuk loop "l
" lebih membosankan
data H(1:21,1) /0., 0.5, 1., 1.5, ... /
dan kita harus sangat berhati-hati dengan jumlah nilai yang ditentukan. Hal ini tidak bisa bersifat dinamis.
Masalah ketiga adalah Anda tidak dapat menentukan inisialisasi eksplisit untuk suatu elemen lebih dari satu kali. Lihatlah dua loop pertama Anda: jika ini berhasil, Anda akan menginisialisasi H(1,1)
dua kali. Meskipun diberikan nilai yang sama, namun tetap saja tidak valid.
Sebenarnya Anda punya empat masalah. Yang keempat terkait dengan poin tentang bilangan dinamis nilai. Anda mungkin tidak ingin melakukan inisialisasi eksplisit. Meskipun Anda dapat melakukan apa yang ingin Anda lakukan, cukup gunakan tugas yang tidak menerapkan batasan ini.
do l=1,21
H(l,1) = 0.5*(l-1)
End do
Ya, ada kalanya inisialisasi eksplisit yang rumit adalah hal yang diinginkan, tetapi dalam kasus ini, yang saya anggap sebagai kode baru, menjaga semuanya tetap sederhana adalah hal yang baik. Bagian "inisialisasi" dari kode Anda yang melakukan tugasnya jauh lebih "modern".
person
francescalus
schedule
14.12.2015
data
di sini daripada penugasan? - person francescalus   schedule 14.12.2015