หลายคนมองว่า Fortran เป็นภาษาการเขียนโปรแกรมที่ล้าสมัยและ "ตายแล้ว" อย่างไรก็ตาม รหัสทางวิทยาศาสตร์และวิศวกรรมส่วนใหญ่เขียนด้วย Fortran ดังนั้น การเขียนโปรแกรมใน F77 และ F90 ยังคงเป็นทักษะที่จำเป็นสำหรับโปรแกรมเมอร์ด้านเทคนิคส่วนใหญ่ นอกจากนี้ มาตรฐานล่าสุดของ Fortran (2003, 2008, 2015) ช่วยให้โปรแกรมเมอร์สามารถเขียนโค้ดที่มีประสิทธิภาพสูงโดยใช้ความพยายามน้อยที่สุด ในขณะที่ใช้คุณลักษณะภาษาสมัยใหม่ทั้งหมด เช่น OOP (การเขียนโปรแกรมเชิงวัตถุ) FORTRAN เป็นตัวย่อสำหรับ "FORmula TRANslation" และเหมาะที่สุดสำหรับแอปพลิเคชันทางคณิตศาสตร์และตัวเลข มากกว่าแอปพลิเคชันกราฟิกหรือฐานข้อมูล รหัส fortran ส่วนใหญ่ใช้การป้อนข้อความจากไฟล์หรือบรรทัดคำสั่งแทนที่จะใช้จากเมนูหรืออินเทอร์เฟซ GUI
ขั้นตอน
ส่วนที่ 1 ของ 4: การเขียนและคอมไพล์โปรแกรมอย่างง่าย
ขั้นตอนที่ 1. เขียนโปรแกรม "Hello World"
โดยปกติจะเป็นโปรแกรมแรกที่เขียนในภาษาใดก็ได้ และเพียงพิมพ์ "Hello world" ไปที่หน้าจอ เขียนโค้ดต่อไปนี้ในโปรแกรมแก้ไขข้อความและบันทึกเป็น helloworld.f สังเกตว่าต้องมีเว้นวรรค 6 แถวหน้าทุกบรรทัดพอดี
โปรแกรม helloworld โดยปริยาย none character*13 hello_string hello_string = "สวัสดีชาวโลก!" เขียน (*, *) hello_string จบโปรแกรม helloworld
เคล็ดลับ: ช่องว่างจำเป็นในเวอร์ชันของ Fortran จนถึง FORTRAN 77 เท่านั้น หากคุณใช้เวอร์ชันที่ใหม่กว่า คุณสามารถวางช่องว่างได้ รวบรวมโปรแกรมจากเวอร์ชันใหม่กว่าด้วย f95 ไม่ใช่ f77 ใช้.f95 เป็นนามสกุลไฟล์แทน.f
ขั้นตอนที่ 2. รวบรวมโปรแกรม
เมื่อต้องการทำเช่นนี้ พิมพ์ f77 helloworld.f ลงในบรรทัดคำสั่ง หากเกิดข้อผิดพลาด คุณอาจยังไม่ได้ติดตั้งคอมไพเลอร์ Fortran เช่น gfortran
ขั้นตอนที่ 3 เรียกใช้โปรแกรมของคุณ
คอมไพเลอร์ได้สร้างไฟล์ชื่อ a.out เรียกใช้ไฟล์นี้โดยพิมพ์./a.out
ขั้นตอนที่ 4 ทำความเข้าใจกับสิ่งที่คุณเพิ่งเขียน
-
โปรแกรม helloworld
หมายถึงการเริ่มต้นของโปรแกรม "helloworld" ในทำนองเดียวกัน
จบโปรแกรม helloworld
- บ่งบอกถึงจุดจบของมัน
-
ตามค่าเริ่มต้น ถ้าคุณไม่ประกาศประเภทตัวแปร Fortran จะถือว่าตัวแปรที่มีชื่อขึ้นต้นด้วยตัวอักษรจาก i ถึง n เป็นจำนวนเต็ม และตัวอื่นๆ ทั้งหมดเป็นจำนวนจริง แนะนำให้ใช้
โดยนัยไม่มี
- ถ้าคุณไม่ต้องการพฤติกรรมนั้น
-
ตัวอักษร*13 hello_string
- ประกาศอาร์เรย์ของอักขระที่เรียกว่า hello_string
-
hello_string = "สวัสดีชาวโลก!"
- กำหนดค่า "สวัสดีชาวโลก!" ไปยังอาร์เรย์ที่ประกาศ ไม่เหมือนกับภาษาอื่นๆ เช่น C ซึ่งไม่สามารถทำได้ในบรรทัดเดียวกับการประกาศอาร์เรย์
-
เขียน (*, *) hello_string
- พิมพ์ค่าของ hello_string ไปยังเอาต์พุตมาตรฐาน * ตัวแรกหมายถึงการเขียนไปยังเอาต์พุตมาตรฐาน ซึ่งต่างจากไฟล์บางไฟล์ * ตัวที่สองหมายถึงไม่ใช้การจัดรูปแบบพิเศษใดๆ
ขั้นตอนที่ 5. เพิ่มความคิดเห็น
สิ่งนี้ไม่จำเป็นในโปรแกรมง่ายๆ แต่จะมีประโยชน์เมื่อคุณเขียนบางสิ่งที่ซับซ้อนกว่านี้ ดังนั้นคุณควรรู้วิธีเพิ่มมัน มีสองวิธีในการเพิ่มความคิดเห็น
- หากต้องการเพิ่มความคิดเห็นที่มีทั้งบรรทัดเอง ให้เขียน c ลงในบรรทัดใหม่โดยตรง โดยไม่เว้นวรรค 6 หลังจากนั้นเขียนความคิดเห็นของคุณ คุณควรเว้นช่องว่างระหว่าง c และความคิดเห็นของคุณเพื่อให้อ่านง่ายขึ้น แต่ไม่จำเป็น โปรดทราบว่าคุณต้องใช้ ! แทนที่จะเป็น c ใน Fortran 95 และใหม่กว่า
- หากต้องการเพิ่มความคิดเห็นในบรรทัดเดียวกับโค้ด ให้เพิ่ม ! ที่คุณต้องการให้ความคิดเห็นของคุณเริ่มต้น อีกครั้ง ไม่จำเป็นต้องเว้นวรรค แต่ช่วยให้อ่านง่ายขึ้น
ส่วนที่ 2 ของ 4: การใช้ Input และ If-Constructions
ขั้นตอนที่ 1 ทำความเข้าใจประเภทข้อมูลต่างๆ
- INTEGER ใช้สำหรับจำนวนเต็ม เช่น 1, 3 หรือ -3
- REAL ยังสามารถประกอบด้วยตัวเลขที่ไม่เต็มจำนวน เช่น 2.5
- COMPLEX ใช้สำหรับเก็บจำนวนเชิงซ้อน ตัวเลขแรกคือจำนวนจริงและส่วนจินตภาพที่สอง
- CHARACTER ใช้สำหรับอักขระ เช่น ตัวอักษรหรือเครื่องหมายวรรคตอน
- LOGICAL สามารถเป็นได้ทั้ง.true หรือ.false.. นี่เป็นเหมือนประเภทบูลีนในภาษาโปรแกรมอื่นๆ
ขั้นตอนที่ 2 รับข้อมูลของผู้ใช้
ในโปรแกรม "Hello world" ที่คุณเคยเขียนไว้ก่อนหน้านี้ การรับข้อมูลจากผู้ใช้จะไม่มีประโยชน์ เปิดไฟล์ใหม่และตั้งชื่อเป็น compnum.f เมื่อคุณทำเสร็จแล้ว มันจะบอกผู้ใช้ว่าตัวเลขที่พวกเขาป้อนนั้นเป็นบวก ลบ หรือเท่ากับศูนย์
- ป้อนบรรทัดโปรแกรม compnum และสิ้นสุดโปรแกรม compnum
- จากนั้นประกาศตัวแปรประเภท REAL ตรวจสอบให้แน่ใจว่าการประกาศของคุณอยู่ระหว่างจุดเริ่มต้นและจุดสิ้นสุดของโปรแกรม
- อธิบายให้ผู้ใช้ทราบว่าควรทำอย่างไร เขียนข้อความด้วยฟังก์ชันเขียน
- อ่านอินพุตของผู้ใช้ในตัวแปรที่คุณประกาศด้วยฟังก์ชันอ่าน
โปรแกรม compnum จริง r เขียน (*, *) "ป้อนจำนวนจริง:" อ่าน (*, *) r จบโปรแกรม
ขั้นตอนที่ 3 ประมวลผลอินพุตของผู้ใช้ด้วย if-construction
วางไว้ระหว่าง
อ่าน (*, *) r
และ
จบโปรแกรม
- การเปรียบเทียบเสร็จสิ้นด้วย.gt (มากกว่า),.lt. (น้อยกว่า) และ.eq (เท่ากับ) ใน Fortran
- Fortran สนับสนุน if, else if, และ else
- Fortran if-construction จบลงด้วย if เสมอ
ถ้า (r.gt. 0) ให้เขียน (*, *) "ตัวเลขนั้นเป็นบวก" else if (r.lt. 0) แล้วเขียน (*, *) "ตัวเลขนั้นเป็นค่าลบ" อื่นเขียน (*, *) "ตัวเลขนั้นเป็น 0" สิ้นสุด if
เคล็ดลับ: คุณไม่จำเป็นต้องเยื้องโค้ดภายใน if-constructions ที่มีช่องว่างมากขึ้น แต่จะช่วยให้อ่านง่ายขึ้น
ขั้นตอนที่ 4 รวบรวมและเรียกใช้โปรแกรมของคุณ
ใส่ตัวเลขเพื่อทดสอบ หากคุณป้อนตัวอักษร จะทำให้เกิดข้อผิดพลาด แต่ไม่เป็นไร เพราะโปรแกรมไม่ตรวจสอบว่าข้อมูลที่ป้อนนั้นเป็นตัวอักษร ตัวเลข หรืออย่างอื่น
ส่วนที่ 3 จาก 4: การใช้ลูปและอาร์เรย์
ขั้นตอนที่ 1. เปิดไฟล์ใหม่
เนื่องจากแนวคิดนี้แตกต่างออกไป คุณจะต้องเขียนโปรแกรมใหม่อีกครั้ง ตั้งชื่อไฟล์ addman.f. แทรกโปรแกรมที่เกี่ยวข้องและคำสั่งสิ้นสุดโปรแกรม รวมทั้งไม่มีโดยปริยาย เมื่อเสร็จแล้ว โปรแกรมนี้จะอ่านตัวเลข 10 ตัวและพิมพ์ผลรวมออกมา
ขั้นตอนที่ 2 ประกาศอาร์เรย์ที่มีความยาว 10
นี่คือที่ที่คุณจะเก็บตัวเลข เนื่องจากคุณอาจต้องการผลรวมของจำนวนจริง คุณควรประกาศอาร์เรย์เป็นจำนวนจริง คุณประกาศอาร์เรย์ดังกล่าวด้วย
ตัวเลขจริง(50)
(ตัวเลขคือชื่อของอาร์เรย์ ไม่ใช่นิพจน์)
ขั้นตอนที่ 3 ประกาศตัวแปรบางตัว
ประกาศ numSum เป็นจำนวนจริง คุณจะใช้มันเพื่อเก็บผลรวมในภายหลัง แต่เนื่องจากผลรวมถูกใช้โดยนิพจน์ Fortran คุณจึงต้องใช้ชื่อเช่น numSum ตั้งค่าเป็น 0 ประกาศ i เป็นจำนวนเต็ม และไม่ต้องกำหนดค่าใดๆ ให้กับมัน ที่จะทำใน do-loop
ขั้นตอนที่ 4 สร้าง do-loop
เทียบเท่าในภาษาโปรแกรมอื่น ๆ จะเป็น for-loop
- do-loop เริ่มต้นด้วย do เสมอ
- ในบรรทัดเดียวกับ do ซึ่งคั่นด้วยการเว้นวรรคคือป้ายกำกับที่โปรแกรมจะไปเมื่อเสร็จสิ้น สำหรับตอนนี้ แค่เขียน 1 คุณจะตั้งค่าป้ายกำกับในภายหลัง
-
หลังจากนั้นให้เว้นวรรคอีกครั้งเท่านั้น พิมพ์
ผม = 1, 10
. สิ่งนี้จะทำให้ตัวแปร i ซึ่งคุณประกาศก่อนลูปไปจาก 1 ถึง 10 ในขั้นตอนที่ 1 ขั้นตอนไม่ได้กล่าวถึงในนิพจน์นี้ ดังนั้น Fortran จึงใช้ค่าเริ่มต้นเป็น 1 คุณยังสามารถเขียนได้
ผม = 1, 10, 1
-
ใส่โค้ดบางส่วนในลูป (เว้นวรรคเพื่อให้อ่านง่ายขึ้น) สำหรับโปรแกรมนี้ คุณควรเพิ่มตัวแปร numSum ด้วยอิลิเมนต์ที่ i ของตัวเลขอาร์เรย์ จบด้วยนิพจน์
numSum = numSum + ตัวเลข (i)
- จบลูปด้วยคำสั่ง continue ที่มีเลเบล พิมพ์เพียง 4 ช่องว่าง. หลังจากนั้น ให้พิมพ์ a 1 นั่นคือป้ายกำกับที่คุณบอกให้ do-loop ไปที่หลังจากเสร็จสิ้น จากนั้นพิมพ์ช่องว่างและดำเนินการต่อ นิพจน์ดำเนินการต่อไม่ได้ช่วยอะไร แต่ให้จุดที่ดีในการวางป้ายกำกับ และแสดงว่า do-loop สิ้นสุดแล้ว
do loop ของคุณควรมีลักษณะดังนี้:
ทำ 1 i = 1, 10 numSum = numSum + ตัวเลข (i) 1 ต่อ
เคล็ดลับ: ใน Fortran 95 และใหม่กว่า คุณไม่จำเป็นต้องใช้ป้ายกำกับ อย่าใส่มันลงในคำสั่ง do และจบลูปด้วย "end do" แทนที่จะเป็น "continue"
ขั้นตอนที่ 5. พิมพ์ numSum
นอกจากนี้ ควรให้บริบทบางอย่าง เช่น "ผลรวมของตัวเลขคือ:" ใช้ฟังก์ชันเขียนสำหรับทั้งสองอย่าง รหัสทั้งหมดของคุณควรมีลักษณะดังนี้:
โปรแกรม addmany โดยปริยาย ไม่มี จำนวนจริง(10) จำนวนเต็มจำนวนจริง numSum i numSum = 0 เขียน (*, *) "ป้อน 10 หมายเลข:" อ่าน (*, *) ตัวเลข ทำ 1 i = 1, 10 numSum = numSum + ตัวเลข (i) 1 เขียนต่อ (*, *) "ผลรวมของพวกเขาคือ:" เขียน (*, *) numSum สิ้นสุดโปรแกรมเสริม
ขั้นตอนที่ 6 รวบรวมและเรียกใช้รหัสของคุณ
อย่าลืมที่จะทดสอบมัน คุณสามารถกด ↵ Enter หลังแต่ละหมายเลขที่คุณป้อน หรือป้อนตัวเลขจำนวนมากในบรรทัดเดียวกันแล้วคั่นด้วยการเว้นวรรค
ส่วนที่ 4 ของ 4: การทำความเข้าใจแนวคิดขั้นสูง
ขั้นตอนที่ 1 มีความคิดที่ดีว่าโปรแกรมของคุณจะทำอะไร
ลองนึกถึงประเภทข้อมูลที่ต้องการเป็นอินพุต วิธีจัดโครงสร้างเอาต์พุต และรวมเอาท์พุตกลางบางส่วนไว้ด้วย เพื่อให้คุณสามารถตรวจสอบความคืบหน้าของการคำนวณได้ ซึ่งจะมีประโยชน์มากหากคุณรู้ว่าการคำนวณของคุณจะทำงานเป็นเวลานานหรือเกี่ยวข้องกับขั้นตอนที่ซับซ้อนหลายขั้นตอน
ขั้นตอนที่ 2 ค้นหาข้อมูลอ้างอิงของ Fortran ที่ดี
Fortran มีฟังก์ชันมากกว่าที่อธิบายไว้ในบทความนี้ และอาจเป็นประโยชน์สำหรับโปรแกรมที่คุณต้องการเขียน การอ้างอิงแสดงรายการฟังก์ชันทั้งหมดที่ภาษาโปรแกรมมี นี่คือหนึ่งสำหรับ Fortran 77 และนี่คือหนึ่งสำหรับ Fortran 90/95
ขั้นตอนที่ 3 เรียนรู้เกี่ยวกับรูทีนย่อยและฟังก์ชัน
ขั้นตอนที่ 4 เรียนรู้วิธีอ่านและเขียนจาก/ไปยังไฟล์
เรียนรู้วิธีจัดรูปแบบอินพุต/เอาต์พุตของคุณด้วย
ขั้นตอนที่ 5. เรียนรู้เกี่ยวกับคุณสมบัติใหม่ของ Fortran 90/95 และใหม่กว่า
ข้ามขั้นตอนนี้หากคุณรู้ว่าคุณจะเขียน/บำรุงรักษาโค้ด Fortran 77 เท่านั้น
โปรดจำไว้ว่า Fortran 90 ได้แนะนำซอร์สโค้ด "Free Form" ซึ่งช่วยให้สามารถเขียนโค้ดได้โดยไม่มีช่องว่างและไม่จำกัดอักขระ 72 ตัว
ขั้นตอนที่ 6 อ่านหรือค้นหาหนังสือเกี่ยวกับการเขียนโปรแกรมทางวิทยาศาสตร์
ตัวอย่างเช่น หนังสือ "Numerical Recipes in Fortran" เป็นทั้งข้อความที่ดีเกี่ยวกับอัลกอริธึมการเขียนโปรแกรมทางวิทยาศาสตร์และเป็นคำแนะนำที่ดีในการรวมโค้ดเข้าด้วยกัน ฉบับล่าสุดประกอบด้วยบทเกี่ยวกับวิธีการตั้งโปรแกรมในสภาพแวดล้อมภาษาผสมและการเขียนโปรแกรมแบบคู่ขนาน อีกตัวอย่างหนึ่งคือ "Modern Fortran in Practice" เขียนโดย Arjen Markus หนังสือเล่มนี้ให้ข้อมูลเชิงลึกเกี่ยวกับวิธีการเขียนโปรแกรม Fortran ในสไตล์ศตวรรษที่ 21 ตามมาตรฐาน Fortran ล่าสุด
ขั้นตอนที่ 7 เรียนรู้วิธีคอมไพล์โปรแกรมที่กระจายอยู่ในหลายไฟล์
สมมติว่าโปรแกรม Fortran ของคุณกระจายอยู่ในไฟล์ main.f และ morestuff.f และคุณต้องการให้ไบนารีที่เป็นผลลัพธ์ได้รับการตั้งชื่อว่า allstuff จากนั้นคุณจะต้องเขียนคำสั่งต่อไปนี้ลงในบรรทัดคำสั่ง:
f77 -c morestuff.f f77 -c main.f f77 -c morestuff.f f77 -o allstuff main.o morestuff.f
จากนั้นเรียกใช้ไฟล์โดยพิมพ์./allstuff
เคล็ดลับ: วิธีนี้ใช้ได้ผลเช่นเดียวกันกับ Fortran เวอร์ชันใหม่กว่า เพียงแทนที่.f ด้วยนามสกุลที่ถูกต้อง และ f77 ด้วยเวอร์ชันคอมไพเลอร์ที่ถูกต้อง
ขั้นตอนที่ 8 ใช้การเพิ่มประสิทธิภาพที่คอมไพเลอร์ของคุณมีให้
คอมไพเลอร์ส่วนใหญ่มีอัลกอริธึมการปรับให้เหมาะสมที่ช่วยปรับปรุงประสิทธิภาพของโค้ดของคุณ โดยทั่วไปสิ่งเหล่านี้จะเปิดใช้งานโดยรวมแฟล็ก -O, -O2 หรือ -O3 เมื่อรวบรวม (ขึ้นอยู่กับเวอร์ชันของ fortran ของคุณ)
-
โดยทั่วไป ระดับต่ำสุด -O หรือ -O2 ดีที่สุด โปรดทราบว่าการใช้ตัวเลือกการปรับให้เหมาะสมในเชิงรุกมากขึ้นอาจทำให้เกิดข้อผิดพลาดในรหัสที่ซับซ้อนและอาจทำให้ทุกอย่างช้าลง! ทดสอบรหัสของคุณ
เคล็ดลับ
- เริ่มต้นด้วยโปรแกรมขนาดเล็ก เมื่อคุณสร้างโค้ดของคุณเอง ให้พยายามระบุส่วนที่สำคัญที่สุดของปัญหา ไม่ว่าจะเป็นการป้อนข้อมูลหรือการเรียกใช้ฟังก์ชัน โครงสร้างของลูป (เหล่านี้คือตัวอย่างเบื้องต้นบางส่วน) และเริ่มต้นจากจุดนั้น แล้วต่อยอดไปทีละน้อย
- Fortran ไม่คำนึงถึงขนาดตัวพิมพ์ ตัวอย่างเช่น คุณสามารถประกาศตัวแปร "real Num" และเขียน "num = 1" ในบรรทัดถัดไปเพื่อกำหนดค่าให้กับตัวแปรนั้น แต่นั่นเป็นสไตล์ที่ไม่ดี ดังนั้นควรหลีกเลี่ยง ที่สำคัญกว่านั้น Fortran ไม่สนใจกรณีของฟังก์ชันและคำสั่งเช่นกัน เป็นเรื่องปกติที่จะเขียนฟังก์ชันและข้อความสั่งเป็นตัวพิมพ์ใหญ่และตัวแปรเป็นตัวพิมพ์เล็ก
- EMACS เป็นโปรแกรมแก้ไขข้อความฟรีที่ดีที่จะใช้แทน Notepad
- คุณอาจพบว่าใช้ IDE ออนไลน์ (สภาพแวดล้อมการพัฒนาแบบรวม) ได้ง่ายขึ้นในตอนแรก ตัวเลือกที่ดีคือ Coding Ground คุณจะพบภาษาการเขียนโปรแกรมมากมายที่นั่น รวมถึง Fortran-95 อีกทางเลือกหนึ่งคือ Ideone