กองบัญชาการใหญ่กองทัพอากาศ. กองทัพอากาศสหพันธรัฐรัสเซีย
ฉันได้รับแจ้งให้ลองเขียนโพสต์แรกของฉันที่นี่ ซึ่งแนะนำให้ใช้ C++ เพื่อการเรียนรู้ ใช่แล้ว หัวข้อนี้สำเนาหลายฉบับเสียหาย
ฉันเหมือนกับเด็กนักเรียนส่วนใหญ่ในดินแดนมาตุภูมิอันกว้างใหญ่ของเรา เริ่มเรียนรู้พื้นฐานผ่านหน้าจอสีน้ำเงิน แต่ไม่ใช่ความตาย แต่เป็น Turbo Pascal 7.0 แน่นอนว่ามีพื้นฐานที่ฉันพบครั้งแรก อายุก่อนวัยเรียนบนคอมพิวเตอร์โซเวียต "อิเล็กทรอนิกส์" ดูเหมือนโปรแกรมแก้ไขข้อความแปลก ๆ เพราะคอมพิวเตอร์ผ่านสายตาของเด็กถูกสร้างขึ้นสำหรับเกม อย่างไรก็ตาม ที่สถาบันนี้ ฉันเริ่มคุ้นเคยกับภาษา Fortran แล้ว เมื่อเรียนรู้เกี่ยวกับมัน ฉันยังคงสงสัยว่าทำไมจึงไม่ใช้สำหรับการสอน
ใช่ หลายคนจะบอกว่าภาษานั้นตายแล้ว มันไม่สอดคล้องกัน ความเป็นจริงสมัยใหม่และหนังสือเรียนที่มีชื่อเหมือนในภาพมีแต่รอยยิ้มเท่านั้น ฉันจะพยายามอธิบายว่าทำไมภาษานี้ถึงวิเศษมากและทำไมฉันถึงแนะนำให้เป็นภาษาแรก หากคุณสนใจยินดีต้อนรับสู่แมว
ฉันเชื่อว่าควรวางรากฐานสำหรับพื้นฐานของการเขียนโปรแกรมกลับคืนมา ปีการศึกษาอย่างน้อยก็ในโรงเรียนมัธยม แม้ว่าในชีวิตจริงคอมพิวเตอร์จะใช้เพียงเพื่อพิมพ์ข้อความใน Word หรือเพื่อการสื่อสารเท่านั้น เครือข่ายสังคมออนไลน์ความรู้ขั้นต่ำว่าอัลกอริทึมคืออะไร และจะจัดโครงสร้างลำดับของการกระทำอย่างไรเพื่อให้ได้ผลลัพธ์ที่ต้องการ อย่างน้อยจะไม่เป็นอันตรายต่อเยาวชนในวัยผู้ใหญ่ แต่ส่วนใหญ่จะช่วยสร้างกรอบความคิดพิเศษได้
เพื่อให้บทเรียนวิทยาการคอมพิวเตอร์เป็นเรื่องที่น่ายินดีและไม่ใช่ฝันร้าย นักเรียนจะต้องเข้าใจว่าเขากำลังทำอะไรอยู่ ทำอย่างไร และเหตุใดจึงกลายเป็นเช่นนี้ ไม่ใช่อย่างอื่น โดยพื้นฐานแล้ว คุณต้องถ่ายทอดข้อมูลเกี่ยวกับวงจรและตัวดำเนินการตามเงื่อนไขอย่างถูกต้องเพื่อให้บุคคลสามารถเขียนโปรแกรมได้ด้วยตนเอง ในเวลาเดียวกัน ยิ่งไวยากรณ์ของภาษาเรียบง่ายเท่าไร การเข้าใจตรรกะในการเขียนโค้ดก็จะยิ่งง่ายขึ้นเท่านั้น หากบุคคลเรียนรู้ที่จะเขียนอัลกอริธึมที่ถูกต้องสำหรับการเขียนโปรแกรมในภาษาอื่นเขาเพียงต้องรู้ไวยากรณ์ของภาษานี้และพื้นฐานจะถูกวางแล้ว
มีอะไรพิเศษเกี่ยวกับ Fortran?
ให้เรามาดูประวัติความเป็นมาของการสร้างภาษานี้กัน ปรากฏในยุค 50 อันห่างไกลของศตวรรษที่ผ่านมา เมื่อคอมพิวเตอร์ยังคงมีขนาดใหญ่ มีโปรแกรมเมอร์เพียงไม่กี่คน และวิทยาการคอมพิวเตอร์ไม่ได้สอนที่โรงเรียน และโดยทั่วไปถือว่าเป็นวิทยาศาสตร์เทียม สิ่งที่จำเป็นคือภาษาง่ายๆ ที่จะช่วยให้วิศวกรและนักวิทยาศาสตร์ "ป้อน" สูตรที่เขียนบนกระดาษไปยังคอมพิวเตอร์ แม้จะผ่านบัตรเจาะก็ตามดังนั้นชื่อของภาษานั้นเอง: สำหรับมูลา ทราน slator หรือ "นักแปลสูตร" เหล่านั้น. ในตอนแรก ภาษานี้มุ่งเป้าไปที่ผู้ที่ไม่มีการฝึกอบรมพิเศษ ซึ่งหมายความว่าภาษาจะต้องเรียบง่ายที่สุดเท่าที่จะเป็นไปได้
ผู้สร้างประสบความสำเร็จอย่างเรียบง่าย โปรแกรมแรกแบบคลาสสิกมีลักษณะดังนี้:
โปรแกรมเขียน(*,*) "Hello, World!" จบ
ไวยากรณ์นั้นง่ายกว่า Pascal เล็กน้อย ไม่จำเป็นต้องใส่ " ที่ท้ายบรรทัด" ;
" หรือ " :
" ก่อนเครื่องหมายเท่ากับ นอกจากนี้ คนที่มีความรู้น้อย ภาษาอังกฤษ,เข้าใจความหมาย โปรแกรมที่ง่ายที่สุดจะไม่ใช่เรื่องยาก
ที่นี่ฉันต้องการทราบว่า Fortran มีการแก้ไขมาตรฐานหลายครั้ง โดยหลักคือ 77 และ 90 (ในขณะที่ยังคงความต่อเนื่อง) 77 Fortran นั้นเก่าแก่มาก มีการจำกัดความยาวของบรรทัด และจำเป็นต้องเยื้องจุดเริ่มต้นของบรรทัด ซึ่งอาจทำให้เกิด Culture Shock สำหรับผู้สมัครโปรแกรมเมอร์รุ่นเยาว์ ไม่ใช่เพื่ออะไรเลยที่โปรแกรมที่เขียนใน Fortran 77 ได้รับชื่อสั้น ๆ ว่า "Brezhnev Code" จากปากของเพื่อนของฉัน ดังนั้นข้อความทั้งหมดของฉันจึงอ้างอิงถึงมาตรฐานภาษา 90 และใหม่กว่า
ตามตัวอย่าง ฉันจะให้โค้ดสำหรับคำนวณผลรวมของจำนวนเต็มที่ไม่เป็นลบตั้งแต่ 1 ถึง n ที่ป้อนจากแป้นพิมพ์ ซึ่งเขียนโดยนักศึกษาระดับบัณฑิตศึกษาของฉันขณะสอนการเขียนโปรแกรมตั้งแต่เริ่มต้น เป็นที่ที่ฉันได้มีประสบการณ์ในการสอน Fortran เป็นภาษาแรก ฉันหวังว่าสิ่งนี้จะเป็นประโยชน์สำหรับเธอ และการทดลองของฉันก็ประสบความสำเร็จ เธอได้เรียนรู้พื้นฐานอย่างน้อยในสองสามชั้นเรียน ชั้นเรียนแรกเป็นการบรรยายเกี่ยวกับภาษา
หมายเลขโปรแกรมโดยปริยาย ไม่มี ! ตัวแปรจำนวนเต็ม n,i,s ! เนื้อความของ chisla s=0 เขียน (*,*) "ป้อน n" อ่าน (*,*) n ถ้า (n.le.0) ให้เขียน (*,*) "เชิงลบหรือศูนย์" อย่างอื่นทำ i=1,n s =s+i end เขียน (*,*) "Sum=", s สิ้นสุดถ้าสิ้นสุด
มันง่ายที่จะเห็นว่าวิธีคิดคือวิธีเขียนโค้ด โดยหลักการแล้ว นักเรียนจะไม่มีปัญหาใดๆ เกิดขึ้นได้ แน่นอนว่าผู้อ่านที่ตั้งใจจะถามว่าอะไรคือสิ่งที่ไม่มีนัย และเครื่องหมายดอกจันสองอันในวงเล็บคั่นด้วยเครื่องหมายจุลภาค โดยปริยาย none บอกเราว่าเรากำลังระบุประเภทของตัวแปรอย่างชัดเจน ในขณะที่หากไม่มีรายการนี้ คอมไพเลอร์จะเดาประเภทเอง เครื่องหมายดอกจันตัวแรกหมายความว่าอินพุตและเอาต์พุตเกิดขึ้นบนหน้าจอ และเครื่องหมายดอกที่สองระบุว่ารูปแบบอินพุตและเอาต์พุตถูกตรวจพบโดยอัตโนมัติ จริงๆ แล้วโปรแกรม Fortran ดูไม่ซับซ้อนไปกว่าโค้ดที่เขียนด้านบน
แล้วสภาพแวดล้อมของซอฟต์แวร์ล่ะ?
ในโรงเรียนและในหน่วยงานของรัฐ คำถามมักเกิดขึ้นเกี่ยวกับซอฟต์แวร์ โดยเฉพาะอย่างยิ่งเกี่ยวกับลิขสิทธิ์ เพราะเงินไม่ได้รับการจัดสรรเป็นพิเศษสำหรับความต้องการเหล่านี้ อย่างน้อยในยุคของฉัน นี่เป็นปัญหา บางทีตอนนี้สถานการณ์เปลี่ยนไปในทางที่ดีขึ้นใครๆ ก็เขียนโปรแกรมใน Fortran ได้ โปรแกรมแก้ไขข้อความ- หากคุณต้องการเน้นไวยากรณ์ คุณสามารถใช้ Notepad++ (รองรับเฉพาะไวยากรณ์มาตรฐาน 77 เท่านั้น) หรือ SublimeText เราเขียนโปรแกรมไปแล้วจะคอมไพล์ได้อย่างไร? ที่นี่ทุกอย่างเรียบง่าย คุณสามารถใช้ GNU Fotran ฟรีได้ หากคุณวางแผนที่จะใช้งานที่ไม่ใช่เชิงพาณิชย์ คุณสามารถใช้คอมไพเลอร์จาก Intel ซึ่งได้รับการปรับให้เหมาะสมสำหรับโปรเซสเซอร์ชื่อเดียวกันและมาพร้อมกับ IDE ขั้นต่ำที่จำเป็น เหล่านั้น. เกณฑ์การเข้าร่วมมีสิทธิพิเศษมาก
ผู้ใช้หลายคนระบุว่าสภาพแวดล้อมการพัฒนาที่ดีที่สุดสำหรับ Fortran ยังคงเป็น Compaq Visual Fortran 6.6 ซึ่งเป็นเวอร์ชันล่าสุดที่เปิดตัวในต้นปี 2000 เหตุใดจึงเกิดขึ้นที่สภาพแวดล้อมที่ใช้ Visual Studio 6.0 ซึ่งทำงานบน Windows XP 32 บิตเป็นส่วนใหญ่โดยไม่ต้องเต้นรำกับแทมบูรีน และมีการจำกัดหน่วยความจำที่ใช้ ได้รับความนิยมดังกล่าวในหมู่ผู้ใช้ Fortran คำตอบแสดงอยู่ในภาพด้านล่าง
นี่คือ Compaq Array Visualizer ซึ่งเป็นเครื่องมือที่สะดวกมากสำหรับการแสดงภาพอาร์เรย์ 1, 2 และ 3 มิติในระหว่างการดีบักโปรแกรมโดยตรงจากดีบักเกอร์ อย่างที่เขาว่ากันว่าลองแล้วกินเลย ความจริงก็คือตอนนี้ Fortran ถูกใช้ในทางวิทยาศาสตร์เป็นหลัก (ซึ่งจะกล่าวถึงในภายหลัง) โดยเฉพาะอย่างยิ่งในสาขาที่ฉันกำลังเผชิญอยู่คือในฟิสิกส์บรรยากาศ เมื่อทำการดีบักโปรแกรม อาร์เรย์จะแสดงถึงเขตอุตุนิยมวิทยาต่างๆ เช่น อุณหภูมิ ความดัน ความเร็วลม ค้นหาข้อผิดพลาดใน สาขากราฟิกง่ายกว่าการพิมพ์ตัวเลขมาก โดยเฉพาะอย่างยิ่งเมื่อคุณรู้ว่าฟิลด์นั้นควรมีลักษณะอย่างไร ดังนั้นข้อผิดพลาดที่ชัดเจนจะถูกกำจัดทันที
น่าเสียดายที่การพัฒนาคอมไพเลอร์ทั้งหมดถูกถ่ายโอนจาก Compaq ไปยัง Intel ในตอนแรก Intel รองรับ Array Visualizer อย่างไรก็ตามเวอร์ชันเหล่านั้นเป็นการสะท้อนผลิตภัณฑ์จาก Compaq สีซีดอยู่แล้วการทำงานกับพวกมันไม่สะดวกเหมือนเมื่อก่อน แต่อย่างน้อยก็รักษาฟังก์ชันการทำงานขั้นต่ำไว้ อนิจจา Intel หยุดพัฒนา Array Visualizer เวอร์ชันใหม่เพื่อยุติสิ่งนี้ เครื่องมือที่สะดวกที่สุด- นั่นคือสาเหตุที่ชุมชน Fortran ส่วนใหญ่เขียนโปรแกรมและแก้ไขข้อบกพร่องภายใต้ Compaq Visual Fortran บน Windows และดำเนินการคำนวณการต่อสู้บนเซิร์ฟเวอร์ Linux โดยใช้คอมไพเลอร์ของ Intel Intel โปรดฟังคำวิงวอนของผู้ใช้ โปรดคืนเครื่องมือปกติสำหรับการแสดงอาร์เรย์ให้กับดีบักเกอร์ของคุณ!
สถานที่ของ Fortran ในโลกสมัยใหม่
และตอนนี้เรามาถึงหัวข้อที่มักจะทำให้เกิดการสนทนาอย่างดุเดือดกับเพื่อนร่วมงานของฉันที่ใช้ Matlab ซึ่งอ้างว่าอธิบายไว้ใน โพสต์นี้ภาษาที่หายากนั้นดีโดยเปล่าประโยชน์ ที่นี่ฉันไม่เห็นด้วยกับพวกเขา ความจริงก็คือว่าในอดีต Fortran ถูกใช้ในการคำนวณทางวิศวกรรมหรือทางวิทยาศาสตร์ ดังนั้นเมื่อเวลาผ่านไป จึงได้รับไลบรารี่และรหัสโปรแกรมสำเร็จรูปจำนวนมากสำหรับการแก้ปัญหาเฉพาะ
รหัสเข้า อย่างแท้จริงที่สืบทอดกันมาจากรุ่นสู่รุ่นและได้รับการบันทึกไว้เป็นอย่างดี คุณสามารถหาคำตอบสำเร็จรูปมากมายสำหรับสมการของฟิสิกส์คณิตศาสตร์ พีชคณิตเชิงเส้น (ในที่นี้ เราควรสังเกตความสำเร็จในการใช้งานเมทริกซ์) สมการอินทิกรัลและอนุพันธ์ และอื่นๆ อีกมากมาย อาจเป็นเรื่องยากที่จะค้นหาปัญหาในสาขาวิทยาศาสตร์กายภาพและคณิตศาสตร์ ซึ่งอัลกอริทึมใน Fortran จะไม่ถูกนำมาใช้ และหากคุณคำนึงถึงการเพิ่มประสิทธิภาพที่ยอดเยี่ยมของคอมไพเลอร์ Intel สำหรับโปรเซสเซอร์ Intel การสนับสนุนการประมวลผลแบบขนานบนคลัสเตอร์ประสิทธิภาพสูง ก็จะชัดเจนว่าทำไม ชุมชนวิทยาศาสตร์ภาษานี้สมควรเป็นที่หนึ่ง ฉันคิดว่าคุณจะพบคอมไพเลอร์ Fortran ที่ติดตั้งอยู่บนซูเปอร์คอมพิวเตอร์เครื่องใดก็ได้
แบบจำลองที่ร้ายแรงที่สุด อย่างน้อยก็ในสาขาฟิสิกส์บรรยากาศ เขียนด้วยภาษา Fortran ใช่ ใช่ พยากรณ์อากาศที่ทุกคนสนใจเป็นครั้งคราวนั้นได้มาจากการคำนวณแบบจำลองที่เขียนในภาษานี้ นอกจากนี้ภาษายังไม่นิ่ง แต่มีการปรับปรุงอย่างต่อเนื่อง ดังนั้นหลังจากมาตรฐานที่อธิบายไว้ก่อนหน้านี้ 77 และ 90 ฉบับใหม่ 95, 2546, 2551 จึงปรากฏขึ้นซึ่งมีการสนับสนุนในคอมไพเลอร์ปัจจุบัน เวอร์ชันล่าสุด Fortran ค่อนข้างรีเฟรชภาษาเก่าที่ผ่านการทดสอบตามเวลา โดยให้การสนับสนุนรูปแบบสมัยใหม่ เพิ่มการเขียนโปรแกรมเชิงวัตถุ ซึ่งการขาดหายไปนั้นเกือบจะกลายเป็นไพ่ที่สำคัญที่สุดของฝ่ายตรงข้ามของภาษานี้ นอกจากนี้ Portland Group ยังได้เปิดตัว PGI CUDA Fortran Compiler ซึ่งช่วยให้การคำนวณแบบขนานสูงบนการ์ดวิดีโอ ดังนั้นผู้ป่วยจึงมีชีวิตมากกว่ามีชีวิตอยู่ ซึ่งหมายความว่าโปรแกรมเมอร์ของ Fortran ยังคงเป็นที่ต้องการ
แทนที่จะเป็นคำหลัง
และตอนนี้ฉันอยากจะกลับไปสู่หัวข้อที่ยกมาแต่เดิมเกี่ยวกับการเรียนรู้การเขียนโปรแกรม และพยายามกำหนดข้อดีหลักของ Fortran โดยย่อเมื่อเลือกเป็นภาษาแรก- Fortran นั้นง่ายต่อการเรียนรู้ ไวยากรณ์สามารถเข้าใจได้สำหรับผู้ที่ไม่ได้รับการฝึกฝน เมื่อคุณรู้พื้นฐานแล้ว การเรียนรู้ภาษาอื่นอีกครั้งก็เป็นเรื่องง่าย
- ชุดเครื่องมือฟรีช่วยให้คุณไม่ได้รับคำถามที่ไม่จำเป็นจากผู้ถือลิขสิทธิ์
- ภาษานี้เป็นภาษาที่ครูคุ้นเคยเนื่องจากมีมายาวนานและครูของเราก็เป็นตัวแทนของรุ่นพี่เป็นหลัก
- เผยแพร่ไปทั่วโลกและเป็นขุมสมบัติของห้องสมุดทุกประเภท
- ได้มาตรฐาน ข้ามแพลตฟอร์ม และเข้ากันได้กับการแก้ไขก่อนหน้านี้
- มีประโยชน์สำหรับนักศึกษาวิชาเอกทางเทคนิค และโดยเฉพาะอย่างยิ่งวิชาเอกฟิสิกส์และคณิตศาสตร์ เนื่องจากเน้นไปที่การคำนวณทางวิทยาศาสตร์และวิศวกรรมศาสตร์
- ที่เกี่ยวข้องและเป็นที่ต้องการมาจนถึงทุกวันนี้
การบรรยายครั้งที่ 3 โครงสร้างหลักสูตร การนำอัลกอริทึมไปใช้ โครงสร้างเชิงเส้นในฟอร์ทราน
โครงสร้างโปรแกรมฟอร์แทรน
โดยทั่วไปโปรแกรมจะประกอบด้วยโปรแกรมหลัก (MAIN) และรูทีนย่อย (SUBROUTINE และ (หรือ) FUNCTION)
ใน ศีรษะโปรแกรม ทั้งหมดอัลกอริทึมสำหรับการแก้ปัญหา
โปรแกรมอยู่เสมอ เริ่มต้นและ เสร็จสิ้นการดำเนินการใน ศีรษะโปรแกรม.
ใน รูทีนย่อยโปรแกรม ส่วนที่สมบูรณ์เชิงตรรกะอัลกอริทึม
ซับแกรมจะดำเนินการเฉพาะเมื่อเท่านั้น เรียกและหลังจากโอนการควบคุมการดำเนินการแล้ว กลับ.
รูทีนย่อย อำนวยความสะดวกการเขียนโปรแกรมโดยแบ่งอัลกอริธึมออกเป็นส่วนๆ (Structured Programming)
รูทีนย่อยอนุญาตให้คุณสร้าง ช่องว่างปัญหาทั่วไปที่ได้รับการแก้ไขบ่อยที่สุด
ไลบรารีโปรแกรมมาตรฐานประกอบด้วยรูทีนที่เขียนโดยผู้เชี่ยวชาญ
โครงสร้าง FORTRAN - โปรแกรม
โครงสร้างทั่วไป หลัก (หัว)โปรแกรมฟอร์แทรน ( โปรแกรมหลัก):
[ โปรแกรมชื่อโปรแกรม]
[ - ความคิดเห็น]
[ คำสั่งที่ไม่สามารถดำเนินการได้- โฆษณา]
[ คำสั่งปฏิบัติการ]
จบ[ โปรแกรม[ชื่อโปรแกรม] ]
– ส่วนเสริมของการก่อสร้าง
ข้อความ, ตามภาพที่นี่ เป็นตัวเอียงสีแดง มีความหมายที่ชัดเจนอย่างสมบูรณ์และเขียนขึ้นตามข้อกำหนดของภาษา
สิ้นสุด ผู้ประกอบการจะต้องสิ้นสุดโปรแกรม
คำนิยาม. ผู้ประกอบการ– ลำดับอักขระที่ระบุการกระทำบางอย่าง ตัวดำเนินการแบ่งออกเป็น: ปฏิบัติการได้และไม่สามารถปฏิบัติการได้
ดำเนินการได้ตัวดำเนินการระบุการดำเนินการกับข้อมูล ตัวดำเนินการดังกล่าวประเภทต่อไปนี้มีความโดดเด่น:
1. ผู้ดำเนินการประมวลผลข้อมูล
ผู้ดำเนินการที่ได้รับมอบหมาย
ตัวดำเนินการอ่าน (อินพุต)
ตัวดำเนินการเขียน (เอาต์พุต)
2.ผู้ปฏิบัติงานควบคุมการทำงานของโปรแกรมได้ทันเวลา
ไม่สามารถปฏิบัติการได้คำสั่งทำหน้าที่อธิบายประเภทข้อมูลหรือองค์ประกอบของโปรแกรมบางส่วน ดังนั้นจึงมักเรียกว่าคำสั่งคำอธิบายหรือเพียงแค่คำอธิบายหรือการประกาศ
ความคิดเห็นมีไว้สำหรับมนุษย์ในการจัดทำเอกสารโปรแกรมและปรับปรุงความเข้าใจในอัลกอริทึมและผู้ปฏิบัติงาน
อัลกอริธึมโครงสร้างเชิงเส้น
อัลกอริธึมคือ เชิงเส้นหากดำเนินการทุกขั้นตอนของอัลกอริทึม ตามลำดับในพวกเขา ลำดับตามธรรมชาติสำหรับ แหล่งข้อมูลใดๆเป็นไปได้ในปัญหานี้ ในกรณีนี้ ขั้นตอนของอัลกอริทึมจะถูกบันทึกตามลำดับ
ให้เราพิจารณาการกระทำที่เป็นไปได้ในอัลกอริทึมดังกล่าว (ขั้นตอนของอัลกอริทึมและตัวดำเนินการ Fortran ที่เกี่ยวข้อง)
คำสั่งเริ่มต้นและสิ้นสุดของโปรแกรม
บรรทัดแรกของโปรแกรมถือเป็นจุดเริ่มต้นของโปรแกรม ใน Fortran เวอร์ชันใหม่ เป็นธรรมเนียมที่จะต้องจัดรูปแบบโปรแกรมด้วยคำสั่ง program start ตามด้วยชื่อของโปรแกรม:
โปรแกรม (ชื่อโปรแกรม)
โดยปกติแล้ว ชื่อโปรแกรมจะถูกเลือกเพื่อให้สะท้อนถึงวัตถุประสงค์ (เนื้อหา) ของโปรแกรม ตัวอย่างเช่น PRIMER, SUMMA ฯลฯ:
โปรแกรมไพรเมอร์_1 ! ชื่อโปรแกรม PRIMER_1
ค้นหาโปรแกรม! ชื่อของโปรแกรมบ่งบอกถึงเนื้อหา
ไม่จำเป็นต้องมีคำสั่งเริ่มต้นโปรแกรม แต่โปรแกรมจะต้องลงท้ายด้วยคำสั่งสิ้นสุดโปรแกรม - END (ดูหัวข้อ “โครงสร้างของโปรแกรม Fortran”) ใน Fortran 90 แต่ละคำสั่งมักจะอยู่ในบรรทัดที่แยกจากกัน หากเขียนข้อความหลายรายการในบรรทัด จะมีคั่นด้วยเครื่องหมายอัฒภาค " ; ».
ตัวดำเนินการ I/O
เมื่อดำเนินการอัลกอริทึม จำเป็นต้องมีข้อมูลเริ่มต้นของงานให้กับนักแสดง เช่น อยู่ในหน่วยความจำของคอมพิวเตอร์ เมื่อต้องการทำเช่นนี้ มักใช้ขั้นตอนถัดไปของอัลกอริทึมซึ่งเกี่ยวข้องกับ การป้อนข้อมูลจากอุปกรณ์อินพุตภายนอก (เช่น แป้นพิมพ์)
ลองพิจารณาการป้อนข้อมูลอย่างง่ายจากแป้นพิมพ์ซึ่งใช้คำสั่ง READ และใช้คำสั่ง PRINT เพื่อแสดงผลลัพธ์บนหน้าจอ
มุมมองทั่วไปของผู้ปฏิบัติงานและหลักเกณฑ์ในการทำงานมีดังต่อไปนี้ ตัวอย่างเช่น คุณต้องป้อนค่าของตัวแปรสี่ตัว t, y, k และ f:
อ่าน * , เสื้อ, y, k, f ! ในรายการอินพุต ชื่อตัวแปรจะถูกคั่นด้วยเครื่องหมายจุลภาค
ตัวดำเนินการดังกล่าวหมายถึงการป้อนค่าตัวแปรสี่ค่าตามลำดับจากแป้นพิมพ์ ในขั้นตอนของการทำงานของโปรแกรม ค่าต่างๆ จะถูกป้อนจากแป้นพิมพ์ โดยจะต้องแยกค่าออกจากกันด้วยเครื่องหมายจุลภาคหรือช่องว่าง หรือโดยการกด ENTER จนกว่าจะป้อนค่าทั้งหมดจากรายการ การทำงานของโปรแกรมจะถูกบล็อก ตัวอย่างการป้อนค่า:
0.56 -2.756 100 0.003 ! ตัวเลขจะถูกคั่นด้วยช่องว่างหรือ
0.56, -2.756, 100, 0.003 ! ตัวเลขคั่นด้วยเครื่องหมายจุลภาคหรือ
0.56! ตัวเลขจะถูกคั่นด้วยปุ่ม ENTER
อันเป็นผลมาจากการดำเนินการคำสั่งอินพุตตัวแปร ที จะได้ค่า 0.56, ย จะได้ค่า -2.756, เค จะเท่ากับ 100 และ ฉ – 0.003. ในรายการอินพุต คุณสามารถใช้ได้เฉพาะชื่อของตัวแปรและค่าคงที่เท่านั้น และจะถูกป้อนในลำดับเดียวกันจากแป้นพิมพ์ตามที่ระบุไว้ในตัวดำเนินการ
ในการแสดงผลลัพธ์ อัลกอริธึมจะมีขั้นตอนพิเศษ - เอาท์พุต:
บทสรุป รายการเอาท์พุท
ที่นี่ รายการเอาท์พุท ในกรณีที่ง่ายที่สุด แสดงถึงรายการชื่อตัวแปรที่ควรพิมพ์ค่า ตัวอย่างเช่น,
รายการเอาต์พุตยังสามารถมีสตริงข้อความที่อธิบายผลลัพธ์ ตัวอย่างเช่น เอาต์พุต ′q=′, q, ′ มวล m=′, m
ในโปรแกรม Fortran ขั้นตอนของอัลกอริธึมในกรณีที่ง่ายที่สุดนี้จะถูกแทนที่ด้วยตัวดำเนินการ
พิมพ์ * , รายการเอาท์พุท
ในรายการผลลัพธ์ คุณสามารถใช้ข้อความอธิบายที่อยู่ในเครื่องหมายอะพอสทรอฟีหรือเครื่องหมายคำพูด นอกเหนือจากตัวแปรและค่าคงที่ได้ ตัวอย่างเช่น มีการระบุตัวดำเนินการแสดงผล
พิมพ์ *,’x=’,x,’ y=’,y
ให้เป็นผลมาจากการคำนวณบางโปรแกรม x เท่ากับ 3.09 และ ย = 5.01. จากนั้นบรรทัดต่อไปนี้จะปรากฏขึ้นบนหน้าจอคอมพิวเตอร์:
ดังนั้นข้อความที่ใส่เครื่องหมายอะพอสทรอฟีในคำสั่งเอาต์พุตจะถูกพิมพ์โดยไม่มีการเปลี่ยนแปลงและค่าจะแสดงแทนชื่อตัวแปร
จำเป็นต้องมีเครื่องหมายดอกจันและลูกน้ำหลังคำว่า READ/PRINT! ดาว * หมายความว่าค่าตัวแปรถูกป้อน/แสดงบนหน้าจอ "ตามค่าเริ่มต้น" ในรูปแบบมาตรฐานที่เข้ารหัสใน Fortran
รายการผลลัพธ์ของคำสั่ง PRINT อาจประกอบด้วย:
ชื่อตัวแปร
ค่าคงที่สตริง (เขียนด้วยเครื่องหมายคำพูดเดี่ยวหรือคู่) เพื่ออธิบายผลลัพธ์และข้อความที่แสดง
นิพจน์ทางคณิตศาสตร์
ในกรณีนี้ ค่าของนิพจน์ทางคณิตศาสตร์จะถูกคำนวณก่อน จากนั้นค่าที่คำนวณได้จะแสดงบนหน้าจอ
พิมพ์ *, ตัวอย่าง:
พิมพ์ *, ″WWOD เอ็ม,เอ็น″ ! การแสดงข้อความแจ้งให้ป้อนข้อมูล
พิมพ์ *, ซี, ย! ส่งออกเฉพาะค่าของตัวแปร z และ y
″ Z= ″, z, ″ Y=″, ย ! การแสดงค่าของตัวแปร z และ y พร้อมคำอธิบาย
พิมพ์ *, " ค้นหาค่ารากที่สองของเลข 2 พร้อมคำอธิบาย: " SQRT(2.0) =
, SQRT(2.0)
แต่ละคำสั่งเอาต์พุตจะสร้างหนึ่งเรกคอร์ด
สำหรับข้อความอธิบาย (ยาวสูงสุด 256 อักขระ) เนื่องจากมีการจัดสรรพื้นที่ตามที่ระบุไว้ในค่าคงที่อักขระ ข้อความจะถูกกดไปที่ขอบด้านซ้าย ดังนั้นจึงแนะนำให้เพิ่มช่องว่างที่ส่วนท้ายและจุดเริ่มต้นของข้อความเพื่อปรับปรุงรูปลักษณ์
ผู้ดำเนินการมอบหมาย
ขั้นตอนหนึ่งของอัลกอริทึมที่พบบ่อยที่สุดในปัญหาทางคณิตศาสตร์คือการคำนวณโดยใช้สูตร ผลลัพธ์ของการคำนวณโดยใช้สูตรมักได้รับการกำหนดชื่อของตัวเอง (ชื่อตัวแปร) เพื่อนำไปใช้ในอนาคต = ในการเขียนการดำเนินการมอบหมายเราจะใช้สัญลักษณ์ต่อไป
(อย่าสับสนกับเครื่องหมายเท่ากับปกติ)
นอกจากนี้เรายังจะใช้การดำเนินการมอบหมายเพื่อตั้งค่าเริ่มต้นของปริมาณและกำหนดค่าใหม่อย่างชัดเจน
ขั้นตอนของอัลกอริทึมที่อธิบายการคำนวณโดยใช้สูตรหรือระบุค่าอย่างชัดเจนจะเรียกว่าการกำหนด ในบล็อกไดอะแกรม ขั้นตอนอัลกอริทึมดังกล่าวจะแสดงโดยใช้บล็อกการประมวลผล ในโปรแกรม Fortran จะถูกแทนที่ด้วยตัวดำเนินการกำหนดเลขคณิต
ตัวดำเนินการกำหนดเลขคณิต
นี่คือตัวดำเนินการที่ปฏิบัติการได้ด้วยความช่วยเหลือในการคำนวณโดยใช้สูตร ค่าเริ่มต้นถูกตั้งค่า และค่าจะถูก "ส่ง" จากเซลล์หน่วยความจำหนึ่งไปยังอีกเซลล์หนึ่ง (กำหนดค่าใหม่) x = มุมมองทั่วไปของโอเปอเรเตอร์นี้:
เอบี, x ที่ไหน – ชื่อตัวแปร (แบบง่ายหรือมีดัชนี) - เอบี
นิพจน์ทางคณิตศาสตร์ (ด้านขวาของสูตร) = เครื่องหมายมอบหมาย
1) สำหรับคอมพิวเตอร์ คำสั่งนี้เป็นคำสั่งให้ดำเนินการต่อไปนี้: คำนวณ ค่าของนิพจน์ทางคณิตศาสตร์ (เอบี)
2) ทางด้านขวาของตัวดำเนินการโดยมีค่าปัจจุบันของตัวแปรรวมอยู่ด้วย นำมา
3) ค่าของผลลัพธ์ที่ได้จะเป็นประเภทของตัวแปรที่อยู่ทางด้านขวาของตัวดำเนินการ ตัวแปรที่อยู่ทางด้านขวาของตัวดำเนินการคือค่าผลลัพธ์ที่คำนวณและแปลงเป็นประเภทของตัวแปร
ตัวอย่าง
จริง:: A=3.4, F=5.25, B=9.7
เอ=เอฟ! ค่าของตัวแปร F ถูกกำหนดให้กับตัวแปร A
เจ=บี! ค่าของตัวแปร B ถูกกำหนดให้กับตัวแปร J
พิมพ์*, “A=”,A” F=”,F” J=”,J ! แสดงผลบนหน้าจอ
A=5.25 F=5.25 J=9
จำนวนเต็ม:: J=2, I
จริง:: A=3.3, F=5.25, B
ตัวแปร B ได้รับการกำหนดผลลัพธ์ของการคำนวณ! นิพจน์ J*A+F แปลงเป็นชนิดจริง
พิมพ์*, “B=”, บี ! แสดงผลบนหน้าจอ
ตัวแปรที่ฉันได้รับมอบหมายให้เป็นผลการคำนวณ! นิพจน์ J*A+F แปลงเป็นประเภทจำนวนเต็ม
พิมพ์*, “I=”, ฉัน ! แสดงผลบนหน้าจอ
จากการรันโปรแกรมเราจะเห็นผลลัพธ์บนหน้าจอดังนี้:
ลองดูตัวอย่างของโปรแกรมที่คอมไพล์บนพื้นฐานของอัลกอริธึมเชิงเส้น
สำหรับค่า x=0.2, , , ง = x + ข.
แผนภาพบล็อกอัลกอริทึม:
โปรแกรม ตัวอย่างที่ 3:
T=(B*Z-SIN(Z)) / (Y+C*D*(Y*Z)**(1./7.))
พิมพ์*,”T=”,T
โปรดทราบว่าในโปรแกรมนี้จะมีการแนะนำตัวแปร Z และ Y เพิ่มเติมเพื่อไม่ให้คำนวณค่าซ้ำในสูตร ทีการแสดงออก นอกจากนี้ การดำเนินการยกกำลังจะถูกแทนที่ด้วยการดำเนินการคูณ ซึ่งคอมพิวเตอร์ใช้เวลาน้อยกว่าการยกกำลัง โดยหลักการแล้ว คุณสามารถใช้การดำเนินการยกกำลังได้ แต่ในโปรแกรมขนาดเล็กก็ไม่จำเป็น อย่างไรก็ตาม หากโปรแกรมมีความซับซ้อนและมีคำสั่งหลายพันคำสั่งที่มีการคำนวณที่ซับซ้อน หากเป็นไปได้ แนะนำให้แทนที่การดำเนินการยกกำลังด้วยการดำเนินการคูณ ซึ่งจะลดต้นทุนคอมพิวเตอร์และเพิ่มความเร็วในการดำเนินการโปรแกรม
ตัวอย่างที่ 4เขียนโปรแกรมคำนวณพื้นที่ของวงกลมที่เขียนเป็นรูปสามเหลี่ยมรัศมี เส้นรอบวงของสามเหลี่ยมอยู่ที่ไหน
ข้อมูลเบื้องต้นของปัญหาคือด้านของสามเหลี่ยม a, b, c สร้างผังงานของอัลกอริทึมด้วยตัวเอง
โปรแกรม ตัวอย่างที่ 4:
โปรแกรมไพรเมอร์_4
พารามิเตอร์ (pi=3.14159) !operator สำหรับการตั้งค่าคงที่
พิมพ์*, “Vvedite a, b, c” ! การแสดงข้อความอธิบายบนหน้าจอ
อ่าน*, ก, ข, ค ! เข้าสู่ความยาวของด้านสามเหลี่ยม
p=a+b+ค ! การคำนวณเส้นรอบวงของรูปสามเหลี่ยม
r=sqrt((p – a)*(p – b)*(p – c))/p) ! การคำนวณรัศมี วงกลมที่จารึกไว้
s=pi*r**2 ! การกำหนดพื้นที่ของวงกลม
พิมพ์*,” s=”,s ! ผลลัพธ์ที่ได้
ในตัวอย่างข้างต้น มีการตั้งชื่อตัวเลข π ปี่เนื่องจากสามารถใช้เฉพาะตัวอักษรละตินใน Fortran
คำถามสำหรับการบรรยายครั้งที่ 3:
โครงสร้างของโปรแกรม Fortran คืออะไร?
รูทีนย่อยใช้ทำอะไร?
โปรแกรม Fortran หลัก (MAIN) ประกอบด้วยอะไรบ้าง?
วาดแผนผัง โครงสร้างทั่วไปโปรแกรมฟอร์แทรน
รูทีนย่อยคืออะไร?
อะไรถูกเก็บไว้ในไลบรารีโปรแกรมมาตรฐาน?
กำหนดตัวดำเนินการ
คำสั่งปฏิบัติการคืออะไร?
โอเปอเรเตอร์ใดที่เรียกว่าไม่สามารถเรียกใช้งานได้?
ตัวดำเนินการใดจัดเป็นผู้ดำเนินการประมวลผลข้อมูล
เหตุใดจึงต้องมีความคิดเห็นในโปรแกรม?
อัลกอริธึมโครงสร้างเชิงเส้นเรียกว่าอะไร?
ลำดับของการกระทำใดที่เป็นเรื่องปกติสำหรับโปรแกรมที่ใช้อัลกอริธึมเชิงเส้น
คำสั่งเริ่มต้นโปรแกรมเขียนอย่างไร?
มันจำเป็นไหม?
เขียนส่วนท้ายของคำสั่งโปรแกรมในรูปแบบทั่วไป
จำเป็นต้องใช้โอเปอเรเตอร์นี้เมื่อเขียนโปรแกรมหรือไม่? โอเปอเรเตอร์อินพุตใช้ทำอะไร? มันเขียนถูกต้องยังไงล่ะ?มันมีลักษณะอย่างไร
มุมมองทั่วไป
ตัวดำเนินการแสดงผล?
เหตุใดจึงใช้เครื่องหมายดอกจัน * ในคำสั่ง I/O
คุณจะแยกตัวแปรเมื่อป้อนค่าจากคีย์บอร์ดได้อย่างไร?
ควรป้อนตัวแปรตามลำดับใด
ข้อมูลใดที่สามารถส่งออกได้โดยใช้คำสั่งอินพุต
จุดประสงค์ของคำสั่งเอาต์พุตคืออะไร?
คุณสามารถแสดงข้อความบนหน้าจอคอมพิวเตอร์ได้อย่างไร?
เขียนตัวดำเนินการสำหรับส่งออกตัวแปรสองตัว a=4.5, k=3
จะจัดรูปแบบโอเปอเรเตอร์สำหรับส่งออกตัวแปรสองตัว a=4.5, k=3 พร้อมข้อความอธิบายได้อย่างไร
ผู้ดำเนินการที่ได้รับมอบหมายคืออะไร?
ตัวดำเนินการกำหนดเลขคณิตคืออะไร?
เขียนแบบฟอร์มทั่วไปของผู้ปฏิบัติงานที่ได้รับมอบหมาย
คอมพิวเตอร์ควรดำเนินการอย่างไรอันเป็นผลมาจากผู้ปฏิบัติงานที่ได้รับมอบหมาย
- ค่าผลลัพธ์ของตัวแปรประเภทใดที่ได้รับจากการประเมินนิพจน์ทางคณิตศาสตร์
เหตุใดโปรแกรมจึงมักจะแทนที่การดำเนินการของการยกกำลังด้วยการดำเนินการคูณ (หากเป็นไปได้)
การแปล
ฉันไม่รู้ว่าภาษาโปรแกรมจะเป็นอย่างไรในปี 2000 แต่ฉันรู้ว่ามันจะเรียกว่า FORTRAN - ชาร์ลส์ แอนโธนี่ ริชาร์ด ฮวาร์, ค. 1982– กล่าวคือ สำหรับสิ่งต่างๆ เช่น การสร้างแบบจำลองทางดาราศาสตร์ฟิสิกส์ของดวงดาวและกาแล็กซี (เช่น แฟลช) พลศาสตร์ของโมเลกุลขนาดใหญ่ รหัสการนับโครงสร้างอิเล็กตรอน (SIESTA) แบบจำลองสภาพภูมิอากาศ ฯลฯ ในด้านการประมวลผลประสิทธิภาพสูง ซึ่งการจำลองเชิงตัวเลขขนาดใหญ่เป็นส่วนย่อย ในปัจจุบันมีเพียงสองภาษาเท่านั้นที่ใช้: C/C++ และ “modern Fortran” (Fortran 90/95/03/08) ไลบรารี Open MPI ยอดนิยมสำหรับโค้ดแบบขนานได้รับการพัฒนาสำหรับสองภาษานี้ โดยทั่วไป หากคุณต้องการโค้ดที่รวดเร็วซึ่งทำงานบนโปรเซสเซอร์หลายตัว คุณจะมีเพียงสองตัวเลือกเท่านั้น Modern Fortran มีฟีเจอร์ที่เรียกว่า "coarray" ซึ่งช่วยให้คุณทำงานกับการเขียนโปรแกรมแบบขนานในภาษาได้โดยตรง Coarrays ปรากฏในส่วนขยายของ Fortran 95 และต่อมาถูกรวมไว้ใน Fortran 2008
การใช้ Fortran อย่างกว้างขวางโดยนักฟิสิกส์มักสร้างความสับสนให้กับนักวิทยาศาสตร์คอมพิวเตอร์และคนอื่นๆ นอกสนาม ซึ่งรู้สึกว่า Fortran เป็นยุคสมัยทางประวัติศาสตร์
ฉันอยากจะอธิบายว่าทำไม Fortran ถึงยังมีประโยชน์ ฉันไม่สนับสนุนให้นักเรียนฟิสิกส์เรียน Fortran เนื่องจากนักเรียนส่วนใหญ่จะทำวิจัย พวกเขาจึงควรเรียน C/C++ ดีกว่า (หรือใช้ Matlab/Octave/Python) ฉันอยากจะอธิบายว่าทำไม Fortran ถึงยังใช้งานอยู่ และโต้แย้งว่าไม่ใช่เพียงเพราะว่านักฟิสิกส์ "อยู่หลังโค้ง" (แม้ว่าบางครั้งก็เป็นเช่นนั้น - ปีที่แล้วฉันเห็นนักเรียนฟิสิกส์คนหนึ่งทำงานกับรหัส Fortran 77 แต่ ทั้งเขาและผู้จัดการของเขาไม่เคยได้ยินอะไรเกี่ยวกับ Fortran 90) นักวิทยาศาสตร์คอมพิวเตอร์ควรมองว่าการครอบงำของ Fortran ในการคำนวณเชิงตัวเลขถือเป็นความท้าทาย
ก่อนที่เราจะเจาะลึกในหัวข้อนี้ ฉันต้องการพูดคุยถึงประวัติศาสตร์บางส่วน เพราะเมื่อผู้คนได้ยินคำว่า "Fortran" พวกเขาจะนึกถึงบัตรเจาะและโค้ดที่มีเส้นตัวเลขทันที ข้อกำหนด Fortran แรกเขียนขึ้นในปี 1954 Fortran ยุคแรก (สะกดด้วยตัวพิมพ์ใหญ่ FORTRAN) ตามมาตรฐานสมัยใหม่เป็นภาษาที่แย่มาก แต่เป็นก้าวที่เหลือเชื่อจากการเขียนโปรแกรมภาษาแอสเซมบลีครั้งก่อน FORTRAN มักถูกตั้งโปรแกรมโดยใช้บัตรเจาะ ดังที่ศาสตราจารย์ Miriam Foreman จาก Stony Brook University เล่าถึงความไม่พอใจ Fortran มีหลายเวอร์ชัน โดยเวอร์ชันที่มีชื่อเสียงที่สุดคือมาตรฐาน 66, 77, 90, 95, 03 และ 08
มักกล่าวกันว่า Fortran ยังคงใช้อยู่ในปัจจุบันเนื่องจากความเร็ว แต่มันเร็วที่สุดเหรอ? เกณฑ์มาตรฐานของเว็บไซต์game.alioth.debian.org เปรียบเทียบ C และ Fortran ในการทดสอบต่างๆ ในหลายภาษา ในกรณีส่วนใหญ่ Fortran และ C/C++ จะเร็วที่สุด Python ที่ชื่นชอบของโปรแกรมเมอร์มักจะล่าช้าถึง 100 เท่าของความเร็ว แต่นั่นก็ถือว่าพอสำหรับหลักสูตรสำหรับการตีความโค้ด Python ไม่เหมาะสำหรับการคำนวณตัวเลขที่ซับซ้อน แต่เหมาะสำหรับการคำนวณอื่นๆ สิ่งที่น่าสนใจคือ C/C++ มีประสิทธิภาพเหนือกว่า Fortran ในการทดสอบทั้งหมดยกเว้นการทดสอบสองครั้ง แม้ว่าผลลัพธ์โดยรวมจะแตกต่างกันเล็กน้อยก็ตาม การทดสอบที่ Fortran ชนะนั้นเป็น "ทางกายภาพ" มากที่สุด - นี่คือการจำลองระบบที่มี n ตัวและการคำนวณสเปกตรัม ผลลัพธ์ขึ้นอยู่กับจำนวนคอร์ของโปรเซสเซอร์ ตัวอย่างเช่น Fortran อยู่หลัง C/C++ เล็กน้อยบน Quad-Core การทดสอบที่ Fortran ล้าหลัง C/C++ มาก ใช้เวลาส่วนใหญ่ในการอ่านและเขียนข้อมูล และ Fortran ก็ช้าอย่างฉาวโฉ่ในเรื่องนี้
ดังนั้น C/C++ จึงเร็วเท่ากับ Fortran และบางครั้งก็เร็วกว่าเล็กน้อย เรากำลังสงสัยว่า "ทำไมอาจารย์ฟิสิกส์ถึงบอกนักเรียนให้ใช้ Fortran แทน C/C++ บ่อยๆ"
Fortran มีรหัสเดิม
ขอบคุณ ประวัติศาสตร์อันยาวนาน Fortran ไม่น่าแปลกใจเลยที่ภูเขาแห่งรหัสฟิสิกส์ถูกเขียนอยู่ในนั้น นักฟิสิกส์พยายามลดเวลาในการเขียนโปรแกรม ดังนั้นหากพวกเขาพบโค้ดก่อนหน้านี้ พวกเขาก็จะใช้มัน แม้ว่าโค้ดเก่าจะอ่านไม่ได้ มีเอกสารไม่ดี และไม่มีประสิทธิภาพสูงสุด แต่การใช้โค้ดเก่าที่ทดสอบแล้วมักจะมากกว่าการเขียนโค้ดใหม่ หน้าที่ของนักฟิสิกส์ไม่ใช่การเขียนโค้ด แต่พวกเขากำลังพยายามทำความเข้าใจธรรมชาติของความเป็นจริง อาจารย์มีรหัสเดิมอยู่แค่ปลายนิ้ว (ซึ่งมักจะเป็นรหัสที่พวกเขาเขียนเมื่อหลายสิบปีก่อน) และส่งต่อให้กับนักเรียน ซึ่งช่วยประหยัดเวลาและขจัดความไม่แน่นอนออกจากกระบวนการแก้ไขข้อบกพร่องนักเรียนฟิสิกส์พบว่า Fortran เรียนรู้ได้ง่ายกว่า C/C++
ฉันคิดว่า Fortran เรียนรู้ได้ง่ายกว่า C/C++ Fortran 90 และ C คล้ายกันมาก แต่ Fortran เขียนได้ง่ายกว่า C เป็นภาษาที่ค่อนข้างดั้งเดิม ดังนั้นนักฟิสิกส์ที่เลือก C/C++ จึงมีส่วนร่วมในการเขียนโปรแกรมเชิงวัตถุ OOP มีประโยชน์ โดยเฉพาะในโครงการซอฟต์แวร์ขนาดใหญ่ แต่ต้องใช้เวลาในการเรียนรู้นานกว่ามาก คุณต้องเรียนรู้สิ่งที่เป็นนามธรรม เช่น คลาสและการสืบทอด กระบวนทัศน์ OOP แตกต่างจากขั้นตอนที่ใช้ใน Fortran มาก Fortran มีพื้นฐานมาจากกระบวนทัศน์ขั้นตอนง่ายๆ ซึ่งใกล้เคียงกับสิ่งที่เกิดขึ้นภายใต้ประทุนของคอมพิวเตอร์ เมื่อคุณปรับโค้ดให้เหมาะสม/เวคเตอร์เพื่อความรวดเร็ว กระบวนทัศน์ขั้นตอนก็จะทำงานได้ง่ายขึ้น นักฟิสิกส์มักจะเข้าใจวิธีการทำงานของคอมพิวเตอร์และคิดในแง่ต่างๆ กระบวนการทางกายภาพตัวอย่างเช่น การถ่ายโอนข้อมูลจากดิสก์ไปยัง RAM และจาก RAM ไปยังแคชของโปรเซสเซอร์ พวกเขาแตกต่างจากนักคณิตศาสตร์ที่ชอบคิดในแง่ของฟังก์ชันนามธรรมและตรรกะ การคิดนี้ยังแตกต่างจากการคิดเชิงวัตถุอีกด้วย จากมุมมองของฉัน การปรับโค้ด OOP ให้เหมาะสมนั้นยากกว่าโค้ดขั้นตอน วัตถุมีโครงสร้างที่ใหญ่โตมากเมื่อเทียบกับโครงสร้างข้อมูลที่นักฟิสิกส์ชอบ: อาร์เรย์ง่ายก่อน: ทำงาน Fortran กับอาร์เรย์
อาร์เรย์หรือเมทริกซ์ตามที่นักฟิสิกส์เรียก ถือเป็นหัวใจสำคัญของการคำนวณทางฟิสิกส์ทั้งหมด ใน Fortran 90+ คุณจะพบคุณสมบัติมากมายสำหรับการทำงานร่วมกับสิ่งเหล่านี้ คล้ายกับ APL และ Matlab/Octave อาร์เรย์สามารถคัดลอก คูณด้วยสเกลาร์ คูณกันเองด้วยวิธีที่เป็นธรรมชาติมาก:A = BA = 3.24*B C = A*B B = exp(A) บรรทัดฐาน = sqrt(ผลรวม(A**2))
ในที่นี้ A, B, C คืออาร์เรย์ของมิติหนึ่ง (สมมติว่า 10x10x10) C = A*B ให้การคูณเมทริกซ์แบบองค์ประกอบหาก A และ B มีขนาดเท่ากัน สำหรับการคูณเมทริกซ์ ให้ใช้ C = matmul(A,B) ฟังก์ชันภายในของ Fortran เกือบทั้งหมด (Sin(), Exp(), Abs(), Floor() ฯลฯ) รับอาร์เรย์เป็นอาร์กิวเมนต์ ส่งผลให้โค้ดเรียบง่ายและสะอาดตา ไม่มีรหัสที่คล้ายกันใน C/C++ ในการใช้งาน C/C++ ขั้นพื้นฐาน เพียงแค่คัดลอกอาร์เรย์จำเป็นต้องรัน for loop บนองค์ประกอบทั้งหมด หรือการเรียกใช้ฟังก์ชันไลบรารี หากคุณป้อนอาร์เรย์ให้กับฟังก์ชันไลบรารีที่ไม่ถูกต้องในภาษา C ข้อผิดพลาดจะเกิดขึ้น การต้องใช้ไลบรารีแทนฟังก์ชันภายในหมายความว่าโค้ดผลลัพธ์จะไม่สะอาด พกพาสะดวก หรือเรียนรู้ได้ง่าย
ใน Fortran การเข้าถึงองค์ประกอบอาร์เรย์ทำงานผ่านไวยากรณ์ A แบบธรรมดา ในขณะที่ใน C/C++ คุณต้องเขียน A[x][y][z] องค์ประกอบอาร์เรย์เริ่มต้นจาก 1 ซึ่งสอดคล้องกับแนวคิดของนักฟิสิกส์เกี่ยวกับเมทริกซ์ และในอาร์เรย์ C/C++ การกำหนดหมายเลขจะเริ่มต้นจากศูนย์ ต่อไปนี้เป็นฟังก์ชันเพิ่มเติมสำหรับการทำงานกับอาร์เรย์ใน Fortran
A = (/ ผม , ผม = 1,100 /) B = A(1:100:10) C(10:) = B
ขั้นแรก เวกเตอร์ A จะถูกสร้างขึ้นผ่าน do loop โดยนัย หรือที่เรียกว่าตัวสร้างอาร์เรย์ จากนั้นเวกเตอร์ B จะถูกสร้างขึ้น ซึ่งประกอบด้วยองค์ประกอบทุกๆ 10 ของ A โดยใช้ขั้นตอนที่ 10 สุดท้าย อาร์เรย์ B จะถูกคัดลอกไปยังอาร์เรย์ C โดยเริ่มจากองค์ประกอบที่ 10 Fortran รองรับการประกาศอาร์เรย์ด้วยดัชนีศูนย์หรือลบ:
ความแม่นยำสองเท่า ขนาด (-1:10) :: myArray
ดัชนีเชิงลบดูงี่เง่าในตอนแรก แต่ฉันเคยได้ยินเกี่ยวกับประโยชน์ของดัชนีเหล่านั้น - ตัวอย่างเช่น คิดว่ามันเป็นพื้นที่เพิ่มเติมในการอธิบาย Fortran ยังรองรับดัชนีเวกเตอร์ด้วย ตัวอย่างเช่น คุณสามารถส่งองค์ประกอบ 1,5 และ 7 จาก N x 1 อาร์เรย์ A ไปยัง 3 x 1 อาร์เรย์ B:
ตัวห้อย = (/ 1, 5, 7 /) B = A(ตัวห้อย)
Fortran รองรับอาเรย์มาสก์ทั้งหมด ฟังก์ชั่นภายใน- ตัวอย่างเช่น หากเราต้องคำนวณลอการิทึมขององค์ประกอบเมทริกซ์ทั้งหมดที่มากกว่าศูนย์ เราจะใช้:
Log_of_A = บันทึก (A, หน้ากาก= A .gt. 0)
หรือเราสามารถรีเซ็ตองค์ประกอบอาร์เรย์เชิงลบทั้งหมดให้เป็นศูนย์ในหนึ่งบรรทัด:
โดยที่ (my_array .lt. 0.0) my_array = 0.0
Fortran ทำให้การจัดสรรและจัดสรรอาร์เรย์แบบไดนามิกเป็นเรื่องง่าย ตัวอย่างเช่น หากต้องการวางอาร์เรย์สองมิติ:
จริง, มิติ (:,:), จัดสรรได้:: name_of_array จัดสรร (name_of_array(xdim, ydim))
ใน C/C++ สิ่งนี้ต้องการรายการต่อไปนี้:
Int **อาร์เรย์; array = malloc(nrows * sizeof(double *)); สำหรับ(i = 0; i< nrows; i++){
array[i] = malloc(ncolumns * sizeof(double));
}
เพื่อเพิ่มอาร์เรย์ใน Fortran
จัดสรรคืน (name_of_array)
ใน C/C++ สำหรับสิ่งนี้
สำหรับ(ผม = 0; ผม< nrows; i++){ free(array[i]); } free(array);
ง่ายอย่างที่สอง: ไม่จำเป็นต้องกังวลเกี่ยวกับพอยน์เตอร์และการจัดสรรหน่วยความจำ
ในภาษาเช่น C/C++ ตัวแปรทั้งหมดจะถูกส่งผ่านด้วยค่า ยกเว้นอาร์เรย์ที่ถูกส่งผ่านโดยการอ้างอิง แต่ในหลายกรณี การส่งผ่านอาร์เรย์ตามค่าจะเหมาะสมกว่า เช่น ให้ข้อมูลประกอบด้วยตำแหน่ง 100 โมเลกุลในนั้น ช่วงเวลาที่แตกต่างกันเวลา. เราจำเป็นต้องวิเคราะห์การเคลื่อนที่ของโมเลกุลหนึ่ง เรานำส่วนของอาร์เรย์ (แถบย่อย) ที่สอดคล้องกับพิกัดของอะตอมในโมเลกุลนี้และส่งผ่านไปยังฟังก์ชัน ในนั้นเราจะจัดการกับการวิเคราะห์ที่ซับซ้อนของอาร์เรย์ย่อยที่ถูกถ่ายโอน หากเราส่งต่อโดยการอ้างอิง ข้อมูลที่ถ่ายโอนจะไม่อยู่ในหน่วยความจำติดต่อกัน เนื่องจากธรรมชาติของการเข้าถึงหน่วยความจำ การทำงานกับอาเรย์ดังกล่าวจึงทำได้ช้า หากเราส่งผ่านค่า เราจะสร้างอาร์เรย์ใหม่ในหน่วยความจำซึ่งอยู่ในแถวเดียวกัน เพื่อความพึงพอใจของนักฟิสิกส์ คอมไพเลอร์จะดูแลงานสกปรกทั้งหมดในการปรับหน่วยความจำให้เหมาะสมใน Fortran ตัวแปรมักจะถูกส่งผ่านโดยการอ้างอิงมากกว่าตามค่า ภายใต้ประทุน คอมไพเลอร์ Fortran จะปรับการส่งสัญญาณให้เหมาะสมโดยอัตโนมัติเพื่อประสิทธิภาพ จากมุมมองของอาจารย์ คอมไพเลอร์ควรได้รับความไว้วางใจมากกว่านักเรียนเมื่อพูดถึงเรื่องการปรับหน่วยความจำให้เหมาะสม! ด้วยเหตุนี้ นักฟิสิกส์จึงไม่ค่อยใช้พอยน์เตอร์ แม้ว่าจะมีอยู่ใน Fortran-90+ ก็ตาม
ตัวอย่างความแตกต่างระหว่าง Fortran และ C
Fortran มีคุณสมบัติหลายประการในการควบคุมคอมไพเลอร์เมื่อค้นหาข้อผิดพลาดและการปรับให้เหมาะสมที่สุด ข้อผิดพลาดในโค้ดสามารถตรวจพบได้ในขั้นตอนการคอมไพล์ ไม่ใช่ในการดำเนินการ ตัวอย่างเช่น ตัวแปรใดๆ ก็สามารถประกาศเป็นพารามิเตอร์ได้ ซึ่งก็คือค่าคงที่ความแม่นยำสองเท่า พารามิเตอร์:: hbar = 6.63e-34
หากพารามิเตอร์ในโค้ดเปลี่ยนแปลง คอมไพลเลอร์จะส่งกลับข้อผิดพลาด ใน C สิ่งนี้เรียกว่า const
const hbar สองเท่า = 6.63e-34
ปัญหาคือว่า const real แตกต่างจาก real ธรรมดา หากฟังก์ชันที่ยอมรับ real ได้รับ const real ก็จะส่งกลับข้อผิดพลาด เป็นเรื่องง่ายที่จะจินตนาการว่าสิ่งนี้อาจนำไปสู่ปัญหาการทำงานร่วมกันในโค้ดของคุณได้อย่างไร
นอกจากนี้ Fortran ยังมีข้อกำหนดเฉพาะของเจตนาที่บอกคอมไพเลอร์ว่าอาร์กิวเมนต์ที่ส่งไปยังฟังก์ชันนั้นเป็นอาร์กิวเมนต์อินพุต อาร์กิวเมนต์เอาต์พุต หรือทั้งอาร์กิวเมนต์อินพุตและเอาต์พุต สิ่งนี้ช่วยให้คอมไพเลอร์ปรับโค้ดให้เหมาะสมและเพิ่มความสามารถในการอ่านและความน่าเชื่อถือ
Fortran มีคุณสมบัติอื่น ๆ ที่ใช้ด้วย ความถี่ที่แตกต่างกัน- ตัวอย่างเช่น ใน Fortran 95 เป็นไปได้ที่จะประกาศฟังก์ชันด้วยตัวปรับแต่งล้วนๆ ฟังก์ชันดังกล่าวไม่มีผลข้างเคียง - เพียงเปลี่ยนอาร์กิวเมนต์เท่านั้นและไม่เปลี่ยนตัวแปรโกลบอล กรณีพิเศษของฟังก์ชันดังกล่าวคือฟังก์ชันองค์ประกอบ ซึ่งยอมรับและส่งกลับสเกลาร์ ใช้ในการประมวลผลองค์ประกอบอาร์เรย์ การรู้ว่าฟังก์ชันเป็นแบบ pure หรือ elemental ทำให้คอมไพเลอร์สามารถเพิ่มประสิทธิภาพเพิ่มเติมได้ โดยเฉพาะอย่างยิ่งเมื่อโค้ดขนานกัน
สิ่งที่คาดหวังในอนาคต?
ในการคำนวณทางวิทยาศาสตร์ Fortran ยังคงเป็นภาษาหลัก และจะไม่หายไปในเร็วๆ นี้ ในการสำรวจผู้เยี่ยมชมงาน Supercomputing Convention ปี 2014 ที่ใช้ภาษานี้ พบว่า 100% กล่าวว่าพวกเขาจะใช้ภาษานี้ในอีก 5 ปีข้างหน้า การสำรวจยังแสดงให้เห็นว่า 90% ใช้ส่วนผสมของ Fortran และ C โดยคาดว่าจะมีการผสมผสานภาษาเหล่านี้เพิ่มขึ้น ผู้สร้างข้อกำหนด Fortran 2015 ได้รวมคุณสมบัติเพิ่มเติมสำหรับการทำงานร่วมกันของโค้ด รหัส Fortran ถูกเรียกจากรหัส Python มากขึ้น สิ่งที่นักวิทยาศาสตร์คอมพิวเตอร์วิพากษ์วิจารณ์การใช้ Fortran ล้มเหลวในการตระหนักก็คือภาษายังคงเหมาะอย่างยิ่งสำหรับสิ่งที่ได้รับการตั้งชื่อตาม - FORmula TRANslation การแปลสูตรนั่นคือการเปลี่ยนแปลง สูตรทางกายภาพลงในโค้ด หลายคนไม่ทราบว่าภาษากำลังพัฒนาและมีคุณสมบัติใหม่ๆ อยู่เสมอการเรียก Fortran 90+ เก่าสมัยใหม่ก็เหมือนกับการเรียก C++ เก่า เนื่องจาก C ได้รับการพัฒนาในปี 1973 ในทางกลับกัน แม้แต่มาตรฐาน Fortran 2008 ใหม่ล่าสุดก็ยังเข้ากันได้กับ Fortran 77 และ Fortran 66 ส่วนใหญ่ ดังนั้น การพัฒนาภาษา เต็มไปด้วยความยากลำบากบางอย่าง เมื่อเร็วๆ นี้ นักวิจัยที่ MIT ตัดสินใจที่จะเอาชนะปัญหาเหล่านี้ด้วยการพัฒนาภาษา HPC ตั้งแต่เริ่มต้นที่เรียกว่า Julia ซึ่งเปิดตัวครั้งแรกในปี 2012 ส่วนจูเลียจะเข้ามาแทนที่ฟอร์แทรนนั้นต้องรอติดตามกันต่อไป อย่างไรก็ตามฉันสงสัยว่าสิ่งนี้จะเกิดขึ้นเป็นเวลานานมาก
แท็ก:
- ฟอร์แทรน
- การเขียนโปรแกรมทางวิทยาศาสตร์
กระทรวงศึกษาธิการและวิทยาศาสตร์ สหพันธรัฐรัสเซีย
มหาวิทยาลัยสหพันธ์อูราล
ตั้งชื่อตามประธานาธิบดีคนแรกของรัสเซีย
พื้นฐานการเขียนโปรแกรม
ในฟอร์ทราน
บทช่วยสอน
เอคาเทรินเบิร์ก
การแนะนำ. 3
ข้อมูลทางประวัติศาสตร์ 5
โครงสร้างโปรแกรม...8
ความแตกต่างระหว่าง Fortran 90 และ Fortran 77 11
การเข้าถึงทรัพยากรคอมพิวเตอร์ 15
การรันงานบนคลัสเตอร์ 17
เขียนข้อความโปรแกรมใหม่บนเซิร์ฟเวอร์ 17
การรวบรวมโปรแกรม 17
เปิดตัวโปรแกรมในบัญชี 19
ชนิดข้อมูล 22
ค่าคงที่ทั้งหมด 22
คงที่จริง 23
ค่าคงที่จริงที่มีความแม่นยำสองเท่า 23
ค่าคงที่เชิงซ้อน 23
ค่าคงที่เชิงซ้อนที่มีความแม่นยำสองเท่า 24
ค่าคงที่เชิงตรรกะ 24
ข้อความคงที่ 24
ตัวดำเนินการคำอธิบายชนิดข้อมูล 26
INTEGER ของประเภทจำนวนเต็ม 26
ความแม่นยำที่แท้จริงและสองเท่าของประเภทจริง 27
ชนิดซับซ้อน COMPLEX และ DOUBLE COMPLEX 28
CHARACTER คือประเภทตัวละคร 29
LOGICAL เป็นประเภทตรรกะ 29
DIMENSION ของอาร์เรย์ 30
พารามิเตอร์แอตทริบิวต์.. 32
ประเภทข้อมูลในตัวที่หลากหลาย 35
นิพจน์ การดำเนินการ และการมอบหมายงาน 36
นิพจน์ทางคณิตศาสตร์ 36
การแสดงออกของทัศนคติ 37
นิพจน์เชิงตรรกะ 38
กฎเกณฑ์สำหรับการประเมินนิพจน์ 38
ตัวดำเนินการ I/O 39
ตัวดำเนินการป้อนข้อมูล DATA.. 39
คำสั่งอินพุต READ.. 40
คำสั่งเอาท์พุต WRITE 41
ตัวดำเนินการแสดงผล PRINT 42
คำสั่งรูปแบบ I/O (FORMAT) 43
ข้อมูลจำเพาะ X, T. 43
ตัวระบุ I 44
ตัวคั่น 45
ข้อมูลจำเพาะ F.46
รีพีทเตอร์ 49
ข้อมูลจำเพาะ E.50
ข้อมูลจำเพาะ G..51
ตัวอธิบายข้อมูล 52
ตัวดำเนินการแบบมีเงื่อนไข 53
ตัวดำเนินการเงื่อนไขลอจิก 53
ตัวดำเนินการเงื่อนไขทางคณิตศาสตร์ 57
เลือกโครงสร้างกรณี 60
ตัวดำเนินการวนซ้ำ 62
ตัวดำเนินการวนซ้ำ DO.. 62
DO WHILE ตัวดำเนินการวนซ้ำ 64
หยุดตัวดำเนินการ STOP 65
ตัวดำเนินการทางออกแบบวนซ้ำ EXIT 66
ผู้ประกอบการเปลี่ยน 67
ตัวดำเนินการเปลี่ยนคำรถบัส GOTO.. 67
ตัวดำเนินการกระโดดที่คำนวณได้ GOTO.. 67
ตัวดำเนินการกระโดดแบบมีเงื่อนไข IF … GOTO.. 68
การทำงานกับอาร์เรย์ 69
การเข้าสู่อาร์เรย์ 69
เอาต์พุตของอาร์เรย์ 71
กำลังประมวลผลอาร์เรย์ 73
รูทีนย่อย.. 76
ตัวดำเนินการฟังก์ชัน 78
ฟังก์ชันรูทีนย่อย FUNCTION.. 81
ขั้นตอนย่อยย่อย 83
การทำงานกับไฟล์ภายนอก 85
ตัวดำเนินการเปิดไฟล์ OPEN.. 85
ตัวดำเนินการปิดไฟล์ CLOSE 86
ตัวอย่างการทำงานกับไฟล์ 86
วรรณกรรม. 89
การแนะนำ
คุณลักษณะเฉพาะของคอมพิวเตอร์แบบขนานคือความเป็นไปได้ในการใช้งานการประมวลผลข้อมูลพร้อมกัน จำนวนมากโปรเซสเซอร์ การประยุกต์ใช้มัลติโปรเซสเซอร์ ระบบคอมพิวเตอร์(MVS) ก่อให้เกิดปัญหาสองประการในการสร้างอัลกอริธึมแบบขนาน: การทำอัลกอริธึมตามลำดับที่มีอยู่แบบขนาน และการสร้างอัลกอริธึมใหม่ที่มุ่งเน้นไปที่ระบบคอมพิวเตอร์แบบขนาน
เทคโนโลยีการเขียนโปรแกรมทั่วไปสำหรับคอมพิวเตอร์คู่ขนานหน่วยความจำแบบกระจายในปัจจุบันคือ MPI วิธีหลักที่กระบวนการแบบขนานโต้ตอบในระบบดังกล่าวคือการส่งข้อความถึงกัน สิ่งนี้สะท้อนให้เห็นในชื่อของเทคโนโลยีนี้ - อินเทอร์เฟซการส่งข้อความ มาตรฐาน MPI กำหนดอินเทอร์เฟซที่ต้องปฏิบัติตามทั้งระบบการเขียนโปรแกรมบนแพลตฟอร์มคอมพิวเตอร์แต่ละเครื่องและโดยผู้ใช้เมื่อสร้างโปรแกรม ไลบรารีการสื่อสาร MPI ได้กลายเป็นมาตรฐานที่ยอมรับโดยทั่วไปในการเขียนโปรแกรมแบบขนานโดยใช้กลไกการส่งข้อความ
โปรแกรม MPI คือชุดของกระบวนการอิสระ ซึ่งแต่ละกระบวนการจะรันโปรแกรมของตัวเอง (ไม่จำเป็นต้องเหมือนกัน) ซึ่งเขียนด้วยภาษา C หรือ FORTRAN ขั้นตอน MPI ส่วนใหญ่เป็นรูทีนย่อย (เรียกว่าการใช้คำสั่ง CALL) และข้อผิดพลาด รหัสจะถูกส่งกลับผ่านพารามิเตอร์สุดท้ายเพิ่มเติมของขั้นตอน หลายขั้นตอนที่เขียนเป็นฟังก์ชันจะไม่ส่งคืนรหัสข้อผิดพลาด ไม่มีข้อกำหนดที่จะต้องยึดถือกรณีของอักขระในชื่อของรูทีนย่อยและค่าคงที่ที่มีชื่ออย่างเคร่งครัด อาร์เรย์ถูกสร้างดัชนีด้วย 1 ออบเจ็กต์ MPI ซึ่งเป็นโครงสร้างในภาษา C จะแสดงเป็นอาร์เรย์จำนวนเต็มใน FORTRAN
IMM ได้รับการตั้งโปรแกรมไว้ใน Fortran ปัญหาหลักในการใช้งานสำหรับ งานใหญ่คือการประสานงานระหว่างส่วนต่างๆ งานใหญ่- Fortran 90 มีกลไกสำหรับการโต้ตอบกับวัตถุตามเทคโนโลยีการเขียนโปรแกรมเชิงวัตถุ ซึ่งอำนวยความสะดวกในการทำงานโดยรวม โครงการใหญ่- เหล่านี้เป็นโมดูลสำหรับการออกแบบไลบรารี โครงสร้าง และประเภทข้อมูลที่ได้รับสำหรับการจัดระเบียบข้อมูลที่ซับซ้อน การจัดสรรหน่วยความจำแบบไดนามิก รวมถึงกลไกจำนวนหนึ่งสำหรับการประมวลผลอาร์เรย์ รวมถึงการก่อตัวของการตัด (ส่วน) ต่างๆ ความสามารถในการรวมขั้นตอนการประมวลผลมาตรฐานในตระกูลเดียว (ประเภท) ที่แตกต่างกันตามประเภทของข้อโต้แย้งอาจเป็นเครื่องมือที่มีประโยชน์ในงานจำนวนหนึ่ง ประเภท (ตระกูล) ของประเภทข้อมูลช่วยให้คุณสามารถปรับแต่งการใช้งานประเภทดังกล่าวได้อย่างง่ายดายตามคุณสมบัติของฮาร์ดแวร์ (เช่น ประเภท INTEGER สามารถประกาศแบบยาวหรือสั้นผ่านตัวควบคุมประเภท KIND) กฎสไตล์บางข้อสามารถช่วยในการพัฒนาได้ เช่น การประกาศอินพุต เอาท์พุต และพารามิเตอร์ที่เปลี่ยนแปลงได้ของโพรซีเดอร์จะช่วยค้นหาข้อผิดพลาดในการโต้ตอบของหน่วยโปรแกรม กฎสำหรับการบันทึกคุณสมบัติข้อมูล ความคิดเห็น และองค์ประกอบอื่นๆ ช่วยให้โปรแกรมที่เขียนอ่านง่ายขึ้น ซึ่งช่วยเพิ่มความเร็วในการค้นหาข้อผิดพลาด
ภูมิหลังทางประวัติศาสตร์
พ.ศ. 2497 – ไอบีเอ็มนักแปลภาษาคนแรก ฟอร์ทราน.
พ.ศ. 2501 – ฟอร์ทรานครั้งที่สอง.
พ.ศ. 2505 – ฟอร์ทรานIV.
พ.ศ. 2509 – ฟอร์ทราน 66.
2521 – ฟอร์ทราน 77.
มีการเรียกการดัดแปลงภาษา Fortran ที่ปรากฏในปี 1958 ฟอร์ทรานครั้งที่สองและมีแนวคิดของรูทีนย่อยและตัวแปรร่วมเพื่อให้มีการสื่อสารระหว่างส่วนต่างๆ
โดยในปี ค.ศ. 1962 ได้มีการปรากฏภาษาที่เรียกกันว่า ฟอร์ทรานที่ 4- ในปี 1966 การพัฒนามาตรฐานภาษาอเมริกัน ANSI (American National Standards Institute) เสร็จสมบูรณ์ ฟอร์ทราน 66- ในปี 1978 มาตรฐาน ANSI รุ่นที่สองได้รับการพัฒนา - ภาษา ฟอร์ทราน 77รวมถึงองค์ประกอบของการเขียนโปรแกรมที่มีโครงสร้าง เช่น โครงสร้าง IF ประเภทอักขระ
มาตรฐาน ANSI เวอร์ชันที่สามคือ ฟอร์ทราน 90ดำเนินการในปี พ.ศ. 2534 ฟอร์ทราน 90คือการพัฒนาทางภาษา ฟอร์ทราน 77จึงเป็นโปรแกรมที่เขียนขึ้นมา ฟอร์ทราน 77สามารถคอมไพล์และรันเป็นโปรแกรมได้ ฟอร์ทราน 90- มาตรฐาน ฟอร์ทราน 90 สแตนดาร์ดแนะนำสิ่งอำนวยความสะดวกใหม่มากมายสำหรับการดำเนินการอาเรย์ วิธีการกำหนดความแม่นยำใหม่ รูปแบบซอร์สโค้ดฟรี การเรียกซ้ำ อาร์เรย์ไดนามิก ฯลฯ
โปรแกรมในภาษามาตรฐานปัจจุบัน ฟอร์ทราน 77สามารถคอมไพล์ได้สำเร็จโดยคอมไพเลอร์ ฟอร์ทราน 90โดยไม่มีการเปลี่ยนแปลงใดๆ แต่โครงสร้างของโปรแกรมเป็นภาษา ฟอร์ทราน 90อาจแตกต่างอย่างมีนัยสำคัญจากโครงสร้างของโปรแกรมที่เทียบเท่าใน ฟอร์ทราน 77- โปรแกรมเมอร์ต้องระวังการผสมทั้งสองสไตล์
ในทำนองเดียวกันคอมไพเลอร์ด้วย ฟอร์ทราน 90กำหนดให้ต้องมีคำอธิบายสำหรับการรายงานรหัสที่ไม่สอดคล้องกัน (ไม่สอดคล้องกัน) บางอย่าง นั่นคือ การใช้ตัวดำเนินการหรือตัวแปรที่ได้รับอนุญาตนอกเหนือจากชุดกฎที่อยู่นอกขอบเขตของมาตรฐาน
Fortran มีความภาคภูมิใจในหมู่ภาษาโปรแกรมสมัยใหม่ เป็นหนึ่งในภาษาการเขียนโปรแกรมแรกๆ ระดับสูงและตั้งแต่แรกเกิดก็มีจุดมุ่งหมายเพื่อแก้ไขปัญหาคอมพิวเตอร์ที่ซับซ้อน ในบรรดาโปรแกรมเมอร์แอปพลิเคชัน Fortran พบกับความสงสัยในตอนแรกเนื่องจากเชื่อว่าราคาเพื่อความสะดวกในการเขียนโปรแกรมในภาษาระดับสูงจะต้องแลกกับการสูญเสียความเร็วการคำนวณอย่างมีนัยสำคัญ เมื่อพูดถึงการสร้างแบบจำลอง กระบวนการที่ซับซ้อนหรือการประมวลผลข้อมูลจำนวนมาก ความเร็วในการคำนวณเป็นปัจจัยชี้ขาดในการตัดสินใจเลือกภาษา แพลตฟอร์มคอมพิวเตอร์ และเทคโนโลยีการเขียนโปรแกรม
ตัวอย่างเช่น ในบรรดานักวิทยาศาสตร์ มีคำพูดว่าปัญหาทางคณิตศาสตร์ใดๆ ก็มีทางแก้ใน Fortran อยู่แล้ว และจริงๆ แล้ว ในบรรดาแพ็คเกจ Fortran หลายพันชุด คุณสามารถค้นหาแพ็คเกจสำหรับการคูณเมทริกซ์ แพ็คเกจสำหรับการแก้สมการอินทิกรัลที่ซับซ้อน และอื่นๆ อีกมากมาย อื่น ๆ อีกมากมาย ในช่วงหลายทศวรรษที่ผ่านมามีการสร้างแพ็คเกจดังกล่าวจำนวนหนึ่งและยังคงได้รับความนิยมในชุมชนวิทยาศาสตร์จนถึงทุกวันนี้ เช่น - IMSL ( ภาษาอังกฤษ).
ห้องสมุดเหล่านี้ส่วนใหญ่เป็นทรัพย์สินของมนุษยชาติจริงๆ ห้องสมุดเหล่านี้มีอยู่ในซอร์สโค้ด มีการจัดทำเอกสารไว้อย่างดี มีการแก้ไขจุดบกพร่อง และมีประสิทธิภาพมาก ดังนั้นจึงมีราคาแพงในการเปลี่ยนแปลง ไม่ต้องพูดถึงการเขียนใหม่ในภาษาการเขียนโปรแกรมอื่น แม้ว่าจะมีการพยายามแปลงโค้ด FORTRAN เป็นภาษาโปรแกรมสมัยใหม่โดยอัตโนมัติก็ตาม
Modern Fortran (Fortran 95 และ Fortran 2003) ได้รับคุณสมบัติที่จำเป็นสำหรับการเขียนโปรแกรมที่มีประสิทธิภาพสำหรับสถาปัตยกรรมคอมพิวเตอร์ใหม่และอนุญาตให้ใช้งาน เทคโนโลยีที่ทันสมัยการเขียนโปรแกรมโดยเฉพาะ OOP
วิวัฒนาการของมาตรฐานภาษา
Fortran เป็นภาษาที่มีมาตรฐานสูง ซึ่งเป็นเหตุผลว่าทำไมจึงสามารถพกพาไปยังแพลตฟอร์มต่างๆ ได้อย่างง่ายดาย มาตรฐานภาษาใหม่ส่วนใหญ่จะรักษาความต่อเนื่องกับมาตรฐานเก่า ซึ่งทำให้สามารถใช้โค้ดจากโปรแกรมที่เขียนไว้ก่อนหน้านี้และแก้ไขได้
FORTRAN 66 (1972) อิงตามมาตรฐาน IBM ฟอร์ทรานที่ 4 FORTRAN 77 (1980) มีการปรับปรุงหลายอย่าง: Fortran 90 (1991) มาตรฐานภาษาได้รับการแก้ไขอย่างมีนัยสำคัญ Fortran 95 (1997) การแก้ไขมาตรฐานก่อนหน้า มีการนำตัวดำเนินการและโครงสร้าง FORALL มาใช้ ซึ่งให้ความยืดหยุ่นมากกว่าตัวดำเนินการ WHERE และโครงสร้างเพื่อกำหนดอาร์เรย์และแทนที่ลูปที่ยุ่งยาก FORALL ช่วยให้คุณสามารถแทนที่การกำหนดส่วนใดๆ หรือโดยเฉพาะอย่างยิ่งส่วนคำสั่ง WHERE ซึ่งให้การเข้าถึงเส้นทแยงมุมของเมทริกซ์ โอเปอเรเตอร์นี้ถือว่ามีแนวโน้มดีในการประมวลผลแบบขนาน ซึ่งอำนวยความสะดวกในการประมวลผลแบบขนานอย่างมีประสิทธิภาพมากกว่าลูป ฟอร์ทราน 2003 (2004)การพัฒนาต่อไป รองรับ OOP ในภาษา การโต้ตอบกับระบบปฏิบัติการ มีการเพิ่มคุณสมบัติต่อไปนี้ด้วย:
Fortran 2008 (2010) มาตรฐานรองรับโดยใช้ภาษาคอมพิวเตอร์แบบขนาน (Co-Arrays Fortran) นอกจากนี้ยังมีการวางแผนเพื่อเพิ่มขนาดสูงสุดของอาร์เรย์เป็น 15 เพิ่มฟังก์ชันทางคณิตศาสตร์พิเศษในตัว ฯลฯ
GNU Free Software Foundation ได้สร้างคอมไพเลอร์ Fortran-77 แบบโอเพ่นซอร์ส g77 ซึ่งพร้อมใช้งานสำหรับแทบทุกแพลตฟอร์มและเข้ากันได้กับ GCC อย่างสมบูรณ์ ตอนนี้ถูกแทนที่ด้วยคอมไพเลอร์ GFortran ซึ่งใช้โครงสร้างเกือบทั้งหมดของมาตรฐาน Fortran 95 และโครงสร้างจำนวนมากของมาตรฐาน Fortran 2003 และ Fortran 2008 นอกจากนี้ยังสามารถใช้งานร่วมกับ Fortran 77 แบบย้อนหลังได้อย่างสมบูรณ์ นอกจากนี้ยังมีโปรเจ็กต์อิสระที่เรียกว่า g95 เพื่อสร้างคอมไพเลอร์ Fortran-95 ที่ใช้ GCC
คุณสมบัติและโครงสร้างของโปรแกรม
Fortran มีชุดฟังก์ชันทางคณิตศาสตร์ในตัวที่ค่อนข้างใหญ่ และรองรับการทำงานกับจำนวนเต็ม จำนวนจริง และจำนวนเชิงซ้อนที่มีความแม่นยำสูง หมายถึงการแสดงออกภาษาเริ่มแรกแย่มาก เนื่องจาก Fortran เป็นหนึ่งในภาษาระดับสูงกลุ่มแรกๆ ต่อมา มีการเพิ่มคุณลักษณะโครงสร้างคำศัพท์จำนวนมากของการเขียนโปรแกรมเชิงโครงสร้าง ฟังก์ชัน และแม้แต่เชิงวัตถุลงใน Fortran
บัตรเจาะพร้อมเครื่องหมายคอลัมน์สำหรับ Fortran
โครงสร้างของโปรแกรมเริ่มแรกเน้นไปที่อินพุตจากบัตรเจาะ และมีคุณสมบัติหลายประการที่สะดวกสำหรับกรณีนี้โดยเฉพาะ ดังนั้น คอลัมน์ที่ 1 ใช้เพื่อทำเครื่องหมายข้อความเป็นความคิดเห็น (โดยมีสัญลักษณ์ ค) ตั้งแต่วันที่ 1 ถึง 5 จะพบพื้นที่ป้ายกำกับ และตั้งแต่วันที่ 7 ถึง 72 จะพบข้อความจริงของผู้ปฏิบัติงานหรือความคิดเห็น คอลัมน์ 73 ถึง 80 สามารถใช้กับไพ่หมายเลข (เพื่อเรียกคืนสำรับไพ่ที่กระจัดกระจายแบบสุ่ม) หรือสำหรับความคิดเห็นสั้น ๆ ไพ่เหล่านั้นถูกละเลยโดยนักแปล หากข้อความของผู้ดำเนินการไม่พอดีกับพื้นที่ที่กำหนด (ตั้งแต่คอลัมน์ที่ 7 ถึง 72) เครื่องหมายต่อเนื่องจะถูกวางไว้ในคอลัมน์ที่ 6 ของการ์ดถัดไป จากนั้นผู้ดำเนินการจะดำเนินการต่อ เป็นไปไม่ได้ที่จะวางข้อความสองข้อความขึ้นไปในหนึ่งบรรทัด (แผนที่) เมื่อบัตรเจาะกลายมาเป็นประวัติศาสตร์ ข้อดีเหล่านี้ก็กลายเป็นความไม่สะดวกร้ายแรง
นั่นคือเหตุผลที่ในมาตรฐาน Fortran เริ่มต้นด้วย Fortran 90 นอกเหนือจากรูปแบบคงที่ของข้อความต้นฉบับแล้ว รูปแบบฟรีก็ปรากฏขึ้นซึ่งไม่ได้ควบคุมตำแหน่งของบรรทัด และยังช่วยให้คุณเขียนตัวดำเนินการได้มากกว่าหนึ่งตัวต่อบรรทัด การเปิดตัวรูปแบบฟรีทำให้สามารถสร้างโค้ดที่มีความสามารถในการอ่านและความชัดเจนไม่ด้อยไปกว่าโค้ดที่สร้างขึ้นโดยใช้ภาษาโปรแกรมสมัยใหม่อื่นๆ เช่น Java
ชนิด " นามบัตร» Fortran เก่าคือ จำนวนมากเลเบลที่ใช้ทั้งในคำสั่ง GOTO ที่ไม่มีเงื่อนไขและคำสั่งในลูป และในคำสั่งการประกาศอินพุต/เอาท์พุตรูปแบบ FORMAT ป้ายกำกับจำนวนมากและคำสั่ง GOTO มักทำให้โปรแกรม Fortran เข้าใจยาก
ประสบการณ์เชิงลบนี้เองที่กลายเป็นเหตุผลว่าทำไมป้ายชื่อภาษาการเขียนโปรแกรมสมัยใหม่จำนวนหนึ่ง (เช่น Java) และตัวดำเนินการกระโดดแบบไม่มีเงื่อนไขที่เกี่ยวข้องจึงได้รับการแก้ไขอย่างมาก
อย่างไรก็ตาม Fortran สมัยใหม่จะกำจัดป้ายกำกับส่วนเกินออกไปเนื่องจากมีการแนะนำตัวดำเนินการ เช่น DO ... END DO, DO WHILE, SELECT CASE นอกจากนี้มาตรฐานภาษาสมัยใหม่ยังคงรักษาเฉพาะตัวดำเนินการ GOTO แบบคลาสสิกซึ่งยังคงใช้ในหลายภาษาในปัจจุบัน คำสั่ง GOTO ที่คำนวณแล้ว เช่นเดียวกับโครงสร้าง ENTRY - การเข้าสู่โพรซีเดอร์หลายรายการได้ถูกกำจัดออกไปแล้ว
อีกด้วย ลักษณะเชิงบวก Modern Fortran มีการดำเนินการอาเรย์ในตัวจำนวนมากและการรองรับอาเรย์ที่ยืดหยุ่นพร้อมการจัดทำดัชนีที่ผิดปกติ ตัวอย่าง:
จริง มิติ (: ,: ) :: V ... จัดสรร (V(- 2 : 2 ,0 : 10 ) ) - จัดสรรหน่วยความจำสำหรับอาร์เรย์ที่สามารถจัดทำดัชนีได้ - แปรผันจาก -2 ถึง 2 (ดัชนีแรก) - และจาก 0 ถึง 10 - วินาที... โวลต์ (2 .2 : 3 ) = โวลต์ (- 1 : 0 .1 ) - หมุนชิ้นส่วนของอาร์เรย์เขียน(* ,* ) V(1 ,: ) - พิมพ์องค์ประกอบทั้งหมดของอาร์เรย์ V ที่มีดัชนีแรกคือ 1จัดสรรคืน(V)
สวัสดีชาวโลก!
รูปแบบคงที่ (ช่องว่างในตำแหน่งบรรทัด 1 ถึง 6 มีเครื่องหมาย “␣”):
␣␣␣␣␣␣PROGRAM สวัสดี ␣␣␣␣␣␣PRINT* , "สวัสดีชาวโลก!"
␣␣␣␣␣␣END
รูปแบบฟรี:
โปรแกรม สวัสดี พิมพ์ * , "Hello, World!"
- จบ
- หมายเหตุ
คำสั่ง PROGRAM เป็นทางเลือก พูดอย่างเคร่งครัด คำสั่งที่จำเป็นเพียงอย่างเดียวในโปรแกรม Fortran คือคำสั่ง END
ระบบการเขียนโปรแกรมจำนวนมากอนุญาตให้คุณรวมไฟล์อ็อบเจ็กต์ที่ได้รับจากการแปลโปรแกรม Fortran กับไฟล์อ็อบเจ็กต์ที่ได้รับจากคอมไพเลอร์จากภาษาอื่น ซึ่งช่วยให้คุณสามารถสร้างแอปพลิเคชันที่มีความยืดหยุ่นและมีคุณสมบัติหลากหลายมากขึ้น มีไลบรารีจำนวนมากสำหรับภาษา Fortran ซึ่งมีทั้งรูทีนสำหรับการแก้ปัญหาการประมวลผลแบบคลาสสิก (LAPACK, IMSL, BLAS) งานสำหรับการจัดระเบียบการคำนวณแบบกระจาย (MPI, pvm) และงานสำหรับการสร้างอินเทอร์เฟซแบบกราฟิก (Quickwin, FORTRAN /TK) หรือการเข้าถึง DBMS (Oracle)
Fortran ในสหภาพโซเวียต
หมายเหตุ
- ดูตัวอย่าง: Netlib Repository ที่ UTK และ ORNL
- อ. เอ็ม. โกเรลิก วิวัฒนาการของภาษาการเขียนโปรแกรม Fortran (พ.ศ. 2500-2550) และโอกาสในการพัฒนา // วิธีการคำนวณและการเขียนโปรแกรม, 2008, เล่ม 9, p. 53-71
- Bartenev O.V.ฟอร์ทรานสมัยใหม่ - อ.: บทสนทนา MEPhI, 2548 - ISBN 5-86404-113-0
- อ. เอ็ม. โกเรลิก การเขียนโปรแกรมเชิงวัตถุใน Fortran สมัยใหม่
- S.D. Algazin, V.V. Kondratiev.การเขียนโปรแกรมใน Visual Fortran - อ.: “บทสนทนา MEPhI”, 2551. - 448 หน้า - ไอ 5-8243-0759-8
- Gorelik A.M. ข่าว
- ปะทะ ฟอร์แทรน
- XL Fortran สำหรับ Linux
- ภาพรวมทั่วไปของ Absoft Pro Fortran Compiler Suites
- ซันสตูดิโอ - เกณฑ์มาตรฐาน
- เรียงความโดย Alexander Rastorguev เกี่ยวกับการปรากฏตัวของ Fortran ใน Dubna
- ประวัติศาสตร์คอมพิวเตอร์กราฟิกในรัสเซีย
วรรณกรรม
- ฟอร์ทราน. คู่มืออ้างอิงของโปรแกรมเมอร์ ระบบการเข้ารหัสอัตโนมัติของ Fortran สำหรับ IBM 704 EDPM - IBM Corp., 1956. - 51 น.
- ISO/IEC 1539-2:2000 เทคโนโลยีสารสนเทศ - ภาษาการเขียนโปรแกรม - Fortran - ส่วนที่ 2: สตริงอักขระที่มีความยาวต่างกัน
- โรเบิร์ต ดับเบิลยู. เซเบสตา. 2.3. คอมพิวเตอร์ IBM 704 และภาษา Fortran // แนวคิดพื้นฐานของภาษาการเขียนโปรแกรม = แนวคิดของภาษาการเขียนโปรแกรม / การแปล จากภาษาอังกฤษ - ฉบับที่ 5 - อ.: วิลเลียมส์, 2544. - หน้า 63-69. - 672 วิ - 5,000 เล่ม
- ISBN 5-8459-0192-8 (รัสเซีย), ISBN 0-201-75295-6 (อังกฤษ)
- ลิงค์
- gfortran - คอมไพเลอร์ Fortran 95/2003/2008 ซึ่งเป็นส่วนหนึ่งของ GNU Compiler Collection
ใน Progopedia - สารานุกรมภาษาการเขียนโปรแกรม (รัสเซีย) |
---|