Turbo Pascal แม้ว่าจะไม่ใช่คนโปรดของโลกก็ตามแอปพลิเคชันสำหรับการเขียนโปรแกรม แต่ผู้สร้างที่ทำตามขั้นตอนแรกในการเขียนซอฟต์แวร์เริ่มทำความคุ้นเคยกับสภาพแวดล้อมเฉพาะนี้ มันให้ความคิดเกี่ยวกับการแยกตัวดำเนินการฟังก์ชันและกระบวนการต่าง ๆ รวมถึงสิ่งอื่น ๆ อีกมากมาย ตัวอย่างเช่นเมื่อศึกษาโปรแกรมเมอร์จะพบวงจรใน Turbo Pascal: ขณะที่ For และทำซ้ำ
แนวคิดของวงจรและความหลากหลาย
วงจรเรียกว่าการกระทำซ้ำ ๆ สภาพแวดล้อมนี้ใช้:
- ด้วยพารามิเตอร์ (For ... to ... do);
- ด้วยเงื่อนไข (ในขณะที่ ... ทำ);
- ด้วย postcondition (ทำซ้ำ ... จนกระทั่ง)
ประเภทแรกใช้เมื่อทราบล่วงหน้ามีกี่ขั้นตอนในการแก้ปัญหา อย่างไรก็ตามมีงานหลายอย่างที่ไม่มีข้อมูลว่าจะมีการดำเนินการบางอย่างซ้ำกี่ครั้ง ในกรณีนี้การวนซ้ำกลายเป็นสิ่งที่ขาดไม่ได้ใน Pascal While เช่นเดียวกับหลักการทำซ้ำ
โครงสร้างวงจร
สาระสำคัญของการทำงานใน Pascal While, For คืออะไรและทำซ้ำลูป? โครงสร้างดังกล่าวมีส่วนหัวและส่วนเนื้อหาแยกจากกัน ส่วนประกอบแรกระบุตัวแปรที่จะ "ทำงาน" กำหนดเงื่อนไขในการตรวจสอบความจริงช่วงเวลาที่ร่างกายจะถูกดำเนินการ ส่วนประกอบที่สองประกอบด้วยนิพจน์ที่ควรใช้หากตรงตามเงื่อนไขนั่นคือจริงไม่ใช่เท็จ
เมื่อทำซ้ำในบรรทัดสุดท้ายจากนั้นจะกลับไปที่ส่วนหัวที่มีการตรวจสอบเงื่อนไข หากเป็นจริงจะมีการดำเนินการซ้ำและหากไม่ตรงตามเงื่อนไขโปรแกรมจะ "ออกจาก" ลูปและดำเนินการต่อไป
ลูปในขณะที่มีลักษณะเช่นนี้ Pascal ABC และโปรแกรมที่คล้ายกันต้องการการเขียนโค้ดดังนี้:
- ในขณะที่ เงื่อนไข ทำ;
- เริ่ม;
- ห่วงตัว;
- สิ้นสุด.
หาก 1 คำสั่ง (1 การกระทำ) จะถูกดำเนินการในเนื้อความของลูป วงเล็บเริ่มต้น… จะถูกละเว้น
แผนภาพบล็อกลูป
Turbo Pascal ในขณะที่มีคุณสมบัติดังต่อไปนี้:
- เงื่อนไขที่ซับซ้อนสามารถใช้ภายในโครงสร้างได้
- ไม่ควรมีเครื่องหมายอัฒภาคหลังคำว่า do (ถือเป็นข้อผิดพลาดใน Turbo Pascal และ Pascal ABC);
- ตัวแปร ค่าคงที่ หรือนิพจน์ที่ทำหน้าที่เป็นเอาต์พุตของรูทีนย่อยเมื่อได้รับการตอบสนองที่ผิดพลาด ต้องเป็นประเภทบูลีน นั่นคือ บูลีน
ต่อไปนี้เป็นแผนภาพบล็อกของวงจรประเภทนี้ มันแสดงให้เห็นลำดับของการกระทำ
อัลกอริธึมการทำงานของวงจร
ในสภาพแวดล้อมการเขียนโปรแกรมที่ง่ายที่สุด รวมถึง Pascal ABC ลูป while จะทำงานตามหลักการต่อไปนี้:
- การวนซ้ำที่กำหนด เช่น การทำซ้ำ จะทำงานหลายครั้งตราบเท่าที่เงื่อนไขเป็นจริง
- ทันทีที่ไม่ตรงตามเงื่อนไขและให้คำตอบเป็นเท็จ (หรือ "เท็จ") ผู้ดำเนินการออกจากลูป
- ทันทีที่สิ่งนี้เกิดขึ้น โปรแกรม "ไป" กับสิ่งปลูกสร้างที่อยู่หลังวัฏจักร
นี่เป็นข้อแตกต่างที่สำคัญระหว่าง while และ Repeat นั่นคือ การวนซ้ำที่มีเงื่อนไขเบื้องต้นจากเงื่อนไขภายหลัง
มันสำคัญมากที่จะให้ในเนื้อหาของวงรอบสุดท้ายเปลี่ยนตัวแปรที่ระบุในส่วนหัวในขณะที่ ไม่ว่าในกรณีใด ต้องมีสถานการณ์ที่ให้ค่าเป็นเท็จในบางครั้ง ไม่เช่นนั้นจะเกิดการวนซ้ำไม่รู้จบ จากนั้นคุณจะต้องใช้มาตรการเพิ่มเติมเพื่อออกจากคอมไพเลอร์ ข้อผิดพลาดดังกล่าวถือว่าเลวร้ายและไม่สามารถให้อภัยได้
ฉันจะออกจากโปรแกรมระหว่างลูปได้อย่างไร?
มักมีสถานการณ์เกิดขึ้นเมื่อโอเปอเรเตอร์ในขณะที่ Pascal สร้างการวนซ้ำไม่รู้จบในรหัสโปรแกรมที่เขียน สิ่งนี้หมายความว่า? การวนซ้ำซ้ำหลายครั้งนับไม่ถ้วนเนื่องจากเงื่อนไขเป็นจริงเสมอ ตัวอย่างเช่น นี่คือตัวอย่างบางส่วนของโปรแกรม:
- ในขณะที่ 2> 1 ทำ;
- เขียน (1).
ในกรณีนี้ หากต้องการหยุดการทำงาน ให้กด CTRL + F2
มีอีก 2 วิธีในการควบคุมสิ่งนี้พฤติกรรมของโปรแกรม ตัวอย่างเช่น หากคุณเขียน Continue ลงในโค้ด ซึ่งจะถ่ายโอนการควบคุมไปยังจุดเริ่มต้นของโครงสร้างการวนซ้ำ จากนั้นการควบคุมจะถูกส่งผ่านในลูปในขณะที่ไปยังการตรวจสอบก่อนหน้า
คำสั่ง Break สามารถขัดจังหวะการดำเนินการทุกอย่างได้วนซ้ำและควบคุมการถ่ายโอนไปยังการวนซ้ำครั้งต่อไป ทางออกจากโครงสร้างจะไม่ถูกตรวจสอบที่นี่ รูปภาพแสดงตัวอย่างการใช้ตัวดำเนินการเหล่านี้
แก้ไขปัญหา
มาดูการทำงานของลูป while กันPascal เสนอวิธีแก้ปัญหาที่หลากหลายที่สุด ตอนนี้เรามาอาศัยสิ่งที่ง่ายที่สุดเพื่อทำความเข้าใจหลักการทำงาน งานในโปรแกรม Pascal ABC ได้รับการแก้ไขแล้ว แต่จะมีภาพของสภาพแวดล้อม Turbo Pascal แบบคลาสสิกสำหรับการเปรียบเทียบ
แบบฝึกหัดที่ 1: กำหนดฟังก์ชัน Y = 5-X ^ 2/2 สร้างตารางค่าที่มีขั้นตอน sh = 0.5 ในช่วงเวลา [-5; 5]
อัลกอริทึมของการกระทำ:
- ตั้งค่าตัวแปร X เป็นค่าเริ่มต้น -5 (นั่นคือจุดเริ่มต้นของช่วงเวลา)
- คำนวณค่าของ Y จนกระทั่งตัวแปร x ถึงจุดสิ้นสุดของกลุ่มที่ระบุ
- แสดงค่าของฟังก์ชันและ abscissa (X);
- เพิ่ม X ตามขั้นตอนที่กำหนด
นี่คือลักษณะของโค้ดในโปรแกรม Pascal ABC
รหัสมีลักษณะอย่างไรในโปรแกรม Turbo Pascal ภาพด้านล่างแสดงให้เห็นสิ่งนี้
การบ้าน 2: กำหนดให้อาร์เรย์ A ประกอบด้วยจำนวนเต็มบวกและตัวเลขติดลบ ประกอบด้วยองค์ประกอบ 10 ประการ จำเป็นต้องสร้างเมทริกซ์ B ซึ่งจะแสดงองค์ประกอบที่เป็นบวกของอาร์เรย์ A ที่มีดัชนีคู่ แสดงผลรวมของกำลังสองในตัวเลขจากเมทริกซ์ใหม่
อัลกอริทึมของการกระทำ:
- จำเป็นต้องเขียนรูทีนย่อยที่จะ "ทำงาน" เฉพาะกับองค์ประกอบของอาร์เรย์ A ที่มีดัชนีคู่กัน ในลูป ค่าของตัวแปรที่รับผิดชอบต่อพาริตีของดัชนีจะเพิ่มขึ้น 2
- หากเป็นตัวเลขที่มีดัชนีคู่จากเมทริกซ์ Aสอดคล้องกับเงื่อนไข x> 0 จากนั้นตัวนับขององค์ประกอบอาร์เรย์จะเพิ่มขึ้น 1 ค่าปัจจุบันของตัวแปรตัวนับจะเป็นดัชนีของตัวเลขที่คัดลอกในอาร์เรย์ B
- เริ่มแรก ค่ารวมของตัวแปร ซึ่งมีหน้าที่ในการหาผลรวมของกำลังสองของจำนวนบวก ถูกกำหนดเป็น 0 จากนั้นการดำเนินการจะถูกดำเนินการ: ค่าใหม่ของกำลังสองจะถูกเพิ่มเข้าไปในผลรวมก่อนหน้า
- อย่ากลัวถ้าไม่บวกทั้งหมดตัวเลขย้ายจากเมทริกซ์หนึ่งไปยังอีกเมทริกซ์ คุณต้องระวัง โปรแกรมเมอร์มือใหม่หลายคนเขียนโค้ดใหม่ด้วยความตื่นตระหนก คุณควรศึกษาเงื่อนไขอย่างรอบคอบ: ตัวเลขบวกอยู่ใน "ตำแหน่ง" คู่ นั่นคือ มีดัชนีที่ทวีคูณของ 2
จำเป็นต้องมีการติดตามด้วยตนเองเพื่อให้แน่ใจว่าการคำนวณนั้นถูกต้อง ในบางครั้ง เมื่อใช้วิธีนี้ คุณจะระบุข้อผิดพลาดที่ไม่เข้าตาในระหว่างการตรวจสอบโค้ดที่เขียนเป็นประจำได้
หากคุณทำการคำนวณด้วยตนเอง คุณสามารถมั่นใจได้ว่าว่าโปรแกรมทำงานอย่างถูกต้อง ในทางกลับกัน แสดงให้เห็นว่าอัลกอริทึมสำหรับการสร้างโค้ดนั้นถูกต้อง ลำดับของการกระทำจะนำไปสู่จุดสิ้นสุดทางตรรกะ