คุณมีปัญหาสามประการที่นี่ ไม่ใช่แค่กับลูป "l
" และ "n
" เท่านั้น
ปัญหาแรกคือค่าในคำสั่ง data
ไม่สามารถเป็นนิพจน์ที่กำหนดเองได้ โดยเฉพาะอย่างยิ่ง จะต้องเป็นค่าคงที่ 0.5*(l-1)
ไม่ใช่ค่าคงที่
ปัญหาที่สองคือขอบเขตในรายการวัตถุจะต้องคงที่ (นิพจน์) l
ไม่ใช่นิพจน์คงที่
ประการแรก ควรสังเกตด้วยว่า *
ในรายการค่าข้อมูลมีความหมายพิเศษ และไม่ใช่ตัวดำเนินการคูณ *
ให้การนับซ้ำ และการนับซ้ำของ 0.5
ไม่ถูกต้อง
คุณสามารถแก้ไขจุดที่สองได้ค่อนข้างง่ายโดยใช้โครงสร้างเช่น
data H(1,1:31) /31*0./ ! Note the repeat count specifier
นอกวงหรือใช้วงโดยนัย
data (H(1,k),k=1,31) /31*0./
การทำบางสิ่งสำหรับการวนซ้ำ "l
" นั้นน่าเบื่อกว่า
data H(1:21,1) /0., 0.5, 1., 1.5, ... /
และเราต้องระมัดระวังเกี่ยวกับจำนวนค่าที่ระบุให้มาก สิ่งนี้ไม่สามารถเป็นไดนามิกได้
ปัญหาที่สามคือคุณไม่สามารถระบุการเริ่มต้นที่ชัดเจนสำหรับองค์ประกอบได้มากกว่าหนึ่งครั้ง ดูสองลูปแรกของคุณ: หากได้ผล คุณจะต้องเริ่มต้น H(1,1)
สองครั้ง แม้ว่าจะได้รับค่าเดียวกัน แต่ก็ยังไม่ถูกต้อง
ที่จริงแล้วคุณมีปัญหาสี่ประการ ประการที่สี่เกี่ยวข้องกับประเด็นเกี่ยวกับจำนวนค่าแบบไดนามิก คุณอาจไม่ต้องการที่จะเริ่มต้นอย่างชัดเจน แม้ว่าจะเป็นไปได้ที่จะทำสิ่งที่ดูเหมือนคุณต้องการทำ แต่ใช้การมอบหมายงานโดยไม่มีข้อจำกัดเหล่านี้
do l=1,21
H(l,1) = 0.5*(l-1)
End do
ใช่ มีหลายครั้งที่การเริ่มต้นที่ซับซ้อนอย่างชัดเจนเป็นสิ่งที่พึงปรารถนา แต่ในกรณีนี้ สิ่งที่ฉันคิดว่าเป็นโค้ดใหม่ การรักษาสิ่งต่าง ๆ ให้เรียบง่ายเป็นสิ่งที่ดี ส่วน "การเริ่มต้น" ของโค้ดของคุณซึ่งทำหน้าที่มอบหมายนั้น "ทันสมัย" มากกว่ามาก
person
francescalus
schedule
14.12.2015
data
ที่นี่แทนการมอบหมายงาน - person francescalus   schedule 14.12.2015