วินาทีที่ k ของวันกำลังผ่านไป การพัฒนาบทเรียนเกี่ยวกับการเขียนโปรแกรมอัลกอริธึมเชิงเส้น ชนิดข้อมูลตัวเลข
| § 3.3 การเขียนโปรแกรมอัลกอริทึมเชิงเส้น
บทที่ 26
§ 3.3 การเขียนโปรแกรมอัลกอริทึมเชิงเส้น
คำสำคัญ:
ชนิดข้อมูลจริง
ชนิดข้อมูลจำนวนเต็ม
ชนิดข้อมูลอักขระ
ชนิดข้อมูลสตริง
ชนิดข้อมูลบูลีน
โปรแกรมที่ใช้อัลกอริธึมเชิงเส้นนั้นง่ายที่สุด โอเปอเรเตอร์ทั้งหมดที่มีอยู่จะถูกดำเนินการตามลำดับ ทีละตัว
เมื่อเขียนโปรแกรมอัลกอริธึมเชิงเส้น เราจะพิจารณาประเภทข้อมูลจำนวนเต็ม ตรรกะ ตัวอักษร และสตริงโดยละเอียดมากขึ้น
3.3.1. ชนิดข้อมูลตัวเลข
คุณคุ้นเคยกับชนิดข้อมูลตัวเลขพื้นฐานอยู่แล้ว จำนวนเต็มและ จริง- ใช้ได้กับพวกเขา คุณสมบัติมาตรฐานซึ่งบางส่วนมีระบุไว้ในตาราง 3.3.
ตารางที่ 3.3
ฟังก์ชันปาสคาลมาตรฐาน
เรามาสำรวจว่าฟังก์ชั่นทำงานอย่างไร กลม, ภายในและ แฟรสนำไปประยุกต์ใช้จริงบ้าง เอ็กซ์- โปรแกรมที่เกี่ยวข้องจะมีลักษณะดังนี้:
รันโปรแกรมหลายครั้งสำหรับแต่ละ x ∈ (10.2; 10.8; -10.2; -10.8) คุณช่วยบอกเราเกี่ยวกับประเภทผลลัพธ์ของแต่ละฟังก์ชันเหล่านี้ให้เราทราบได้อย่างไร
3.3.2. ชนิดข้อมูลจำนวนเต็ม
การดำเนินการต่อไปนี้ดำเนินการกับจำนวนเต็มในภาษาปาสคาล: การบวก (+), การลบ (-), การคูณ (*), การได้รับผลหารจำนวนเต็ม (div), การได้รับเศษจำนวนเต็ม (mod) และการหาร (/) ผลลัพธ์ของการดำเนินการห้ารายการแรกเป็นจำนวนเต็ม ผลลัพธ์ของการดำเนินการหารอาจเป็นจำนวนจริงได้
ลองพิจารณาตัวอย่างการใช้การดำเนินการ div และ mod โดยการเขียนโปรแกรมในภาษา Pascal เพื่อค้นหาผลรวมของตัวเลขของตัวเลขสามหลักธรรมชาติที่ป้อนจากคีย์บอร์ด
เราใช้ข้อเท็จจริงที่ว่าจำนวนบวกสามหลักสามารถแสดงเป็นผลรวมต่อไปนี้: x - a*100 + 6*10 + c โดยที่ a, b, c คือหลักของตัวเลข
ผลรวมของตัวเลข 123 คืออะไร? และตัวเลข -123? ผลลัพธ์ของคุณตรงกับผลลัพธ์ของโปรแกรมหรือไม่? ข้อผิดพลาดในโปรแกรมสามารถอธิบายและแก้ไขได้อย่างไร?
3.3.3. ชนิดข้อมูลอักขระและสตริง
ค่าของค่าอักขระ (ประเภทอักขระ) ในภาษา Pascal คืออักขระใดๆ ที่สามารถได้รับบนหน้าจอโดยการกดปุ่มใดปุ่มหนึ่งหรือคีย์ผสมบนแป้นพิมพ์ รวมถึงอักขระอื่นๆ บางตัว รวมถึงอักขระที่มองไม่เห็น . ชุดของสัญลักษณ์ดังกล่าวประกอบด้วย 256 องค์ประกอบซึ่งแต่ละองค์ประกอบตามตารางรหัสที่ใช้จะได้รับมอบหมายรหัส - ตัวเลขตั้งแต่ 0 ถึง 255
สัญลักษณ์ที่สอดคล้องกับรหัส 32 ตัวแรกนั้นเป็นสัญลักษณ์ควบคุม และส่วนที่เหลือจะแสดงเป็นภาพ ตัวอักษรที่แสดงยังมีการเว้นวรรค รหัส 32
เครื่องหมายวรรคตอน สัญลักษณ์ของการดำเนินการทางคณิตศาสตร์ ตัวเลข ตัวอักษรละตินตัวพิมพ์ใหญ่และตัวพิมพ์เล็กตรงกับรหัสตั้งแต่ 33 ถึง 127 ตัวอักษรของตัวอักษรประจำชาติตรงกับรหัสที่มีตัวเลข 128 เป็นต้นไป
ในข้อความโปรแกรม สามารถระบุค่าคงที่ประเภทอักขระได้โดยการใส่อักขระตัวแทนใดๆ ไว้ในเครื่องหมายอะพอสทรอฟี: “5”, “B”, “*”
หากค่าของตัวแปรอักขระถูกอ่านจากแป้นพิมพ์ ก็ควรพิมพ์โดยไม่มีเครื่องหมายอะพอสทรอฟี
หากต้องการค้นหาโค้ดสัญลักษณ์ ให้ใช้ฟังก์ชัน ord โดยระบุสัญลักษณ์เป็นพารามิเตอร์
หากต้องการจดจำสัญลักษณ์ด้วยรหัส ให้ใช้ฟังก์ชัน chr โดยระบุรหัสสัญลักษณ์เป็นพารามิเตอร์
ค่าของค่าสตริง (ประเภทสตริง) เป็นลำดับของอักขระที่กำหนดเองซึ่งอยู่ในเครื่องหมายอะพอสทรอฟี ในภาษาปาสคาล (เช่นใน ภาษาอัลกอริทึม) สามารถต่อสตริงเข้าด้วยกันได้
ตัวอย่าง.มาเขียนโปรแกรมในภาษา Pascal โดยที่รหัสของตัวอักษรที่ป้อนจากคีย์บอร์ดจะแสดงบนหน้าจอ จากนั้นบรรทัดจะปรากฏบนหน้าจอ ซึ่งเป็นลำดับของตัวอักษรสามตัวของตารางรหัสที่ใช้: ตัวอักษรที่อยู่ข้างหน้าต้นฉบับ จดหมายต้นฉบับ ตัวอักษรตามต้นฉบับ
3.3.4 ชนิดข้อมูลบูลีน
ดังที่คุณทราบ ค่าประเภทลอจิคัลใช้เพียงสองค่าเท่านั้น ในภาษาปาสคาลมันเป็น เท็จและ จริง- ค่าคงที่เหล่านี้ถูกกำหนดให้เป็นเท็จ< true.
ค่าบูลีนได้มาจากการดำเนินการเปรียบเทียบระหว่างตัวเลข อักขระ สตริง และ การแสดงออกทางตรรกะ- ดังนั้นใน Pascal จึงสามารถกำหนดตัวแปรลอจิคัลให้กับผลลัพธ์ของการดำเนินการเปรียบเทียบได้
ตัวอย่าง. เรามาเขียนโปรแกรมที่กำหนดความจริงของข้อความ “จำนวน n เป็นเลขคู่” สำหรับจำนวนเต็มใดก็ได้ n
อนุญาต ตอบเป็นตัวแปรบูลีน และ n เป็นตัวแปรจำนวนเต็ม แล้วอันเป็นผลจากการดำเนินการของผู้ปฏิบัติงานที่ได้รับมอบหมาย
ตอบ:=n ม็อด 2 = 0
ตัวแปร ตอบจะได้รับการกำหนดค่า จริงสำหรับเลขคู่ใดๆ n และ เท็จมิฉะนั้น.
ตัวแปรลอจิกสามารถกำหนดค่าของนิพจน์ลอจิคัลที่สร้างขึ้นโดยใช้ฟังก์ชันลอจิคัลที่คุณรู้จักและหรือไม่ใช่ซึ่งในภาษาปาสคาลจะแสดงตามนั้น และหรือไม่ใช่.
ตัวอย่าง.เรามาเขียนโปรแกรมที่กำหนดความจริงของข้อความ “สามเหลี่ยมที่มีความยาวด้าน a, b, c เป็นหน้าจั่ว” สำหรับจำนวนเต็มใดๆ a, b, c
สิ่งที่สำคัญที่สุด
ภาษาปาสคาลใช้ชนิดข้อมูลจำนวนจริง จำนวนเต็ม อักขระ สตริง ตรรกะ และประเภทข้อมูลอื่นๆ มีการกำหนดการดำเนินการและฟังก์ชันที่เกี่ยวข้องไว้สำหรับการดำเนินการเหล่านั้น
คำถามและงาน
1. อ่านสื่อการนำเสนอสำหรับย่อหน้าที่มีอยู่ในภาคผนวกอิเล็กทรอนิกส์ของตำราเรียน ใช้เอกสารเหล่านี้ในการเตรียมคำตอบสำหรับคำถามและทำงานที่ได้รับมอบหมายให้เสร็จสิ้น
2. สำหรับ x ที่กำหนด ให้คำนวณ y โดยใช้สูตร y = x 3 + 2.5x 2 - x + 1
ในกรณีนี้:
ก) ห้ามดำเนินการยกกำลัง;
b) ในตัวดำเนินการมอบหมายเดียวคุณสามารถใช้การดำเนินการทางคณิตศาสตร์ได้ไม่เกินหนึ่งรายการ (การบวก การคูณ การลบ)
c) สามารถใช้ตัวดำเนินการมอบหมายงานได้ไม่เกินห้าตัวในหนึ่งโปรแกรม
เบาะแส : แปลงนิพจน์ให้อยู่ในรูปแบบต่อไปนี้: y = ((x + 2.5)x - 1)x + 1
3. ที่พิกัดที่กำหนดของจุด A และ คำนวณความยาวของส่วน AB
เบาะแส - ระยะทาง d ระหว่างจุด A (x a, y a) และ B (x b, y b) แสดงโดยสูตร
4. รู้ความยาวของด้านของสามเหลี่ยม a, b, c เขียนโปรแกรมคำนวณพื้นที่ของสามเหลี่ยมนี้
5. ทราบพิกัดของจุดยอด A, B, C ของรูปสามเหลี่ยม เขียนโปรแกรมคำนวณพื้นที่ของสามเหลี่ยมนี้
6. หากคำนวณจำนวนภาษีเป็นรูเบิลและโกเปค บริการภาษีจะปัดเศษขึ้นเป็นรูเบิลที่ใกล้ที่สุด (สูงสุด 50 โกเปค - โดยมีข้อบกพร่อง มากกว่า 50 โกเปค (รวม 50) - ด้วยส่วนเกิน) ใช้คอมพิวเตอร์ของคุณเพื่อป้อนจำนวนภาษีที่แน่นอนและแสดงจำนวนเงินที่คุณเป็นหนี้
7. สำรวจการทำงานของฟังก์ชันสุ่มโดยการรันโปรแกรมซ้ำๆ:
คุณจะได้ตัวเลขสุ่มจากช่วง (0, x) ได้อย่างไร?
คุณจะได้ตัวเลขสุ่มจากช่วง (0, x] ได้อย่างไร?
คุณจะรับตัวเลขสุ่มจากช่วงเวลา (n, x + n) ได้อย่างไร?
8. บริษัทแห่งหนึ่งออกสลากลอตเตอรีสามประเภท: สำหรับเยาวชน ผู้ใหญ่ และสำหรับผู้รับบำนาญ หมายเลขตั๋วสำหรับแต่ละหมวดหมู่มีตั้งแต่:
สำหรับเยาวชน - ตั้งแต่ 1 ถึง 100;
สำหรับผู้ใหญ่ - ตั้งแต่ 101 ถึง 200;
สำหรับผู้รับบำนาญ - จาก 201 ถึง 250
ใช้คอมพิวเตอร์สุ่มเลือกสลากในแต่ละหมวด
9. เขียนโปรแกรมในภาษาปาสคาลซึ่งสำหรับจำนวนธรรมชาติสองหลักใดๆ จะกำหนดว่า:
ก) ผลรวมและผลคูณของตัวเลข
b) ตัวเลขที่เกิดจากการจัดเรียงหลักของตัวเลขเดิมใหม่
10. เขียนโปรแกรมในภาษา Pascal ที่ใช้อัลกอริทึมสำหรับแคชเชียร์เพื่อให้การเปลี่ยนแปลงของลูกค้าด้วยจำนวนธนบัตรที่น้อยที่สุดที่เป็นไปได้คือ 500 (k500), 100 (klOO), 50 (k50) และ 10 (klO) รูเบิล .
11. กำลังมา เค- วินาทีที่สองของวัน พัฒนาโปรแกรมโดยอาศัยอินพุต เควันที่สองของวันกำหนดจำนวนชั่วโมงทั้งหมด ชม.และทั้งนาที มผ่านไปตั้งแต่ต้นวันแล้ว ตัวอย่างเช่น ถ้า เค= 13 257 = 3 3600 + 40 60 + 57 จากนั้น ชม.= 3 และ ม = 40.
แสดงวลี:
มันคือ...ชั่วโมง...นาที
.แทนที่จะเป็นวงรี โปรแกรมควรส่งออกค่าฮัม โดยแยกออกจากคำที่มีช่องว่างเพียงช่องเดียว
12. เขียนโปรแกรมในภาษาปาสกาลเพื่อคำนวณผลรวมของรหัสตัวอักษรในคำว่า BYTE
13. เขียนโปรแกรมในภาษา Pascal เพื่อสร้างและแสดงสตริงอักขระที่มีรหัส 66, 69, 71, 73, 78
14. พัฒนาโปรแกรมที่ถามค่าสตริงสามค่า ได้แก่ คำคุณศัพท์ คำนาม และกริยาที่เกี่ยวข้อง จากนั้นพิมพ์วลีที่เป็นไปได้ทั้งหมดโดยใช้คำที่ป้อน
15. ค่าของตัวแปรจำนวนเต็มจะได้รับ: a = 10, b = 20 ค่าของตัวแปรลอจิคัลจะเป็นเท่าใด? เรซหลังจากดำเนินการมอบหมายงานแล้ว?
ก)เรซ:=(a=10) หรือ (b>10)
b)rez: = (a>5) และ (b>5) และ (a<20) and (b<30)
c)rez: = (ไม่ใช่(a<15)) or (b>20)
16.เขียนโปรแกรมที่เข้า จริงหากข้อความดังกล่าวเป็นจริง และ เท็จมิฉะนั้น:
ก) ผลรวมของตัวเลขสามหลัก เอ็กซ์เป็นเลขคู่
b) สามเหลี่ยมที่มีด้านข้าง ก ข คมีความหลากหลาย
คำนวณ |
||||||
ภารกิจที่ 2 (โปรแกรม 1_2)
เป็นเวลา k วินาทีของวัน กำหนดว่าช่วงเวลานี้ผ่านไปกี่ชั่วโมง (h) นาทีทั้งหมด (m) และวินาที (s)
กำหนดพื้นที่ของสี่เหลี่ยมคางหมูด้วยฐาน a, b, ความสูง h และปริมาตรของกรวยที่ถูกตัดทอนหากเราถือว่า a, b เป็นพื้นที่ของฐาน
3. กำหนดพิกัดของจุดศูนย์ถ่วงของจุดวัสดุสามจุดที่มีมวล m 1, m 2, m 3 และพิกัด (x 1, y 1), (x 2, y 2), (x 3, y 3)
4. คำนวณปริมาตรของลูกบอลและพื้นที่ของวงกลมสำหรับรัศมี R ที่กำหนด และค้นหาความสัมพันธ์ระหว่างพวกมัน
5. คำนวณค่ามัธยฐานของสามเหลี่ยมที่กำหนดด้าน a, b, c
6. คำนวณพื้นที่ผิวและปริมาตรของกรวยโดยกำหนดรัศมีและความสูง h
7. ใช้รัศมีที่กำหนด หาปริมาตรของลูกบอลและพื้นที่ผิว
8. คำนวณวันที่สองของวันที่เข็มอยู่ที่ชั่วโมง นาที และวินาที วินาที รวมทั้งมุม (เป็นองศา) ระหว่างตำแหน่งของเข็มชั่วโมงที่จุดเริ่มต้นของวันกับตำแหน่งที่ระบุ ช่วงเวลา.
9. ป้อนจำนวนเต็มสองหลัก x<15. Написать программу перевода его в восьмеричную систему счисления.
10. ป้อนพิกัดของสองจุด (x 1, y 1), (x 2, y 2) ค้นหาระยะห่างระหว่างพวกเขา
แล็บ 2
การเขียนโปรแกรมอัลกอริธึมแบบแยกสาขา ควบคุมตัวดำเนินการถ่ายโอน
โครงสร้างของผู้ดำเนินการถ่ายโอนการควบคุมแบบมีเงื่อนไข:
ถ้า (<выражение>) <оператор 1> อื่น <оператор 2>;
(ถ้า) (อื่น) - คำหลัก
ที่ไหน<условие>เป็นนิพจน์บูลีนที่กำหนดเองซึ่งสามารถรับค่าได้ 2 ค่า ได้แก่ true (TRUE) และ false (FALSE)
<оператор>- ตัวดำเนินการ SI ใดๆ ลงท้ายด้วยเครื่องหมายอัฒภาค
ประโยคเงื่อนไขแบบสั้น:
ถ้า (<выражение>) <оператор>;
ตัวดำเนินการกระโดดแบบไม่มีเงื่อนไข: ข้ามไป <идентификатор-метка>;
ป้ายกำกับเป็นตัวระบุ ป้ายชื่อจะถูกวางไว้หน้าคำสั่ง C/C++ ที่คุณแยกสาขา และคั่นด้วยเครื่องหมายทวิภาค (:)
ตัวอย่างที่ 1- สร้างโปรแกรมสำหรับคำนวณเงินเดือนพื้นฐานตามกฎต่อไปนี้: หากประสบการณ์การทำงานของพนักงานน้อยกว่า 3 ปี เงินเดือนจะอยู่ที่ 100 ดอลลาร์ โดยมีประสบการณ์การทำงาน 3 ถึง 5 ปี - 150 ดอลลาร์ เกิน 5 ปีเงินเดือนจะเพิ่มขึ้นทุกปี 10 ดอลลาร์ และด้วยประสบการณ์มากกว่า 20 ปี จะเป็น 300 ดอลลาร์
เพื่อตั้งโปรแกรมวิธีแก้ปัญหานี้ เรากำหนดสูตรทางคณิตศาสตร์ของปัญหา:
100 ถ้า ST< 3;
ZP= 150 ถ้า 3 ≤ST 5;
150+ (ST -5)*10 ถ้า 5< ST≤ 20;
300 ถ้า ST > 20;
#รวม
#รวม
เป็นโมฆะหลัก ()
( int ST; //ST- ประสบการณ์ (ไบต์ (จำนวนเต็ม) ประเภทที่ไม่ได้ลงนาม)
ลอย ZP;
//ZP- เงินเดือน (แบบลอยตัว)
printf("\nเข้าสู่ประสบการณ์");
scanf("%d",&ST);<3) ZP = 100;
ถ้า (สท<5) ZP = 150;
อย่างอื่นถ้า (ST
อย่างอื่นถ้า (ST>=20) ZP=300;อื่น
ZP=150+(ST-5)*10;
printf("\nเงินเดือน = %10.2f$\n",ZP); โอเปอเรเตอร์การเลือก สวิตช์
อนุญาตให้ ขึ้นอยู่กับค่าของตัวแปรหรือนิพจน์ (คีย์การเลือก) เพื่อดำเนินการตัวดำเนินการบางตัวที่ทำเครื่องหมายด้วยค่าคงที่ที่สอดคล้องกัน
โอเปอเรเตอร์การเลือก (<выражение>)
โครงสร้างผู้ปฏิบัติงาน:<константа 1>: <группа операторов 1>;
กรณี<константа 2>: <группа операторов 2>;
กรณี<константа N>: <группа операторов N>
กรณี: <операторы>;
}
ค่าเริ่มต้น<выражение>ที่ไหน
<константа>- การแสดงออก (ตัวแปร) ของประเภทลำดับใด ๆ<выражение>;
<оператор>- ค่าคงที่ชนิดเดียวกับ
- ตัวดำเนินการ C/C++ โดยพลการ
ตัวอย่างที่ 2 พิมพ์ชื่อรูปร่างตามจำนวนมุม (สามเหลี่ยม สี่เหลี่ยม ห้าเหลี่ยม หกเหลี่ยม รูปหลายเหลี่ยม)
รูปแบบการดำเนินงานโดยใช้ตัวดำเนินการเลือกจะแสดงโดย SA (รูปที่ 2,b) และโปรแกรมต่อไปนี้:
#รวม
เป็นโมฆะหลัก ()
{
#รวม
อินท์ที; // T – จำนวนมุม
clrscr(); //เคลียร์หน้าจอ
printf("กรอกจำนวนมุม");
scanf("%d",&T);
สวิตช์ (ที)กรณีที่ 1: กรณีที่ 2:
กรณี 3: printf("นี่ไม่ใช่รูป\n"); หยุดพัก;
กรณี 4: printf ("ด้วย %d มุม - สามเหลี่ยม\n ", T);
กรณี 5: หยุดพัก;
กรณี 6: printf ("ด้วย %d มุม - รูปสี่เหลี่ยมขนมเปียกปูน\n ", T);
กรณี : หยุดพัก;
printf("มี %d มุม - รูปห้าเหลี่ยม\n ", T); หยุดพัก; printf("มี %d มุม - หกเหลี่ยม\n ", T); หยุดพัก;
printf("ด้วย %d มุม - รูปหลายเหลี่ยม\n ", T);
ภารกิจที่ 1 ,
(โปรแกรม 2_1)
,
คำนวณค่าของฟังก์ชันขึ้นอยู่กับช่วงเวลาที่อาร์กิวเมนต์ที่ป้อนจากแป้นพิมพ์ตก:<1,
1. สำหรับ
เสื้อ 2 อยู่ที่ 1 ,
โดยที่ a=-0.5,b=2 z = 1 ที่ t
e t cos b t สำหรับ t>2,< x 2,
2. สำหรับ x
,
ที่ x2, โดยที่ a=2.3 f = x ที่ 0.3
โดยที่ a=-2.7,b=-0.27 z = (a+b)/(x+1) ที่ 2.3 x5,
e x +sinx ที่ 7
,
4.สำหรับฉัน , ฉัน 4 + ข ฉัน ที่ ฉัน< 10,
โดยที่=2.2,ข=0.3 y = สีแทน(i + 0.5) ที่ i = 10
อี 2i +
สำหรับฉัน> 10,
5. สำหรับ x , x 2 - 7/x 2 ที่ x<1.3,
โดยที่ a=1.5 y = ขวาน 3 + 7
ที่ 1.3 x3,
แอลจี(x + 7
) ที่ x
,
6. สำหรับ [-1.4],
ที่ที<0.1,
โดยที่=2.1,ข=0.37
z = ที่ + b ที่ 0.1 t 2,
,
ที่ที 7. สำหรับ x<0.3,
, อีบาป x +2.5 ที่ x<4,
โดยที่=1.5
y = e cos x + a ที่ 0.3 x (บาป x)/ (a + e x) ที่ x 4,
,
8. สำหรับ x
, y = a/x + b x 2 - c ที่ x
โดยที่=1.8,b=-0.5, c=3.5 (a + bx)/ ที่ x>1.2,
9.สำหรับที
, ต
ที่ t>a, โดยที่ a=2.5 z = t sin a t ที่ t=a อี - ที่ cos เสื้อที่ t<2.3, 10. สำหรับ x , e - bx บาป b x ที่ x
,