จำนวนเต็มในภาษาปาสคาล ชนิดข้อมูลในภาษาปาสคาล (ตัวแปร ค่าคงที่) ประเภทและคำอธิบาย

บทเรียนครอบคลุมถึงประเภทข้อมูลมาตรฐานหลักในภาษาปาสคาล แนวคิดของตัวแปรและค่าคงที่ อธิบายวิธีการทำงานกับการดำเนินการทางคณิตศาสตร์

Pascal เป็นภาษาโปรแกรมแบบพิมพ์ซึ่งหมายความว่าตัวแปรที่จัดเก็บข้อมูลนั้นเป็นประเภทข้อมูลเฉพาะ เหล่านั้น. โปรแกรมจะต้องระบุโดยตรงว่าข้อมูลใดบ้างที่สามารถเก็บไว้ในตัวแปรเฉพาะได้: ข้อมูลข้อความ ข้อมูลตัวเลข ถ้าเป็นตัวเลข จะเป็นจำนวนเต็มหรือเศษส่วน เป็นต้น นี่เป็นสิ่งจำเป็นในเบื้องต้นเพื่อให้คอมพิวเตอร์ "รู้" การดำเนินการใดที่สามารถทำได้กับตัวแปรเหล่านี้ และวิธีดำเนินการอย่างถูกต้อง

ตัวอย่างเช่น การเพิ่มข้อมูลข้อความ หรือตามที่เรียกอย่างถูกต้องในการเขียนโปรแกรม - การต่อข้อมูล - เป็นการรวมสตริงตามปกติ ในขณะที่การเพิ่มข้อมูลตัวเลขจะเกิดขึ้นในระดับบิต นอกจากนี้ ตัวเลขเศษส่วนและจำนวนเต็มก็ถูกเพิ่มแตกต่างกันเช่นกัน เช่นเดียวกับการดำเนินการอื่นๆ

มาดูประเภทข้อมูลที่พบบ่อยที่สุดใน Pascal

ชนิดข้อมูลจำนวนเต็มในภาษาปาสคาล

พิมพ์ พิสัย หน่วยความจำที่ต้องการ (ไบต์)
ไบต์ 0..255 1
ย่อ -128..127 1
จำนวนเต็ม -32768.. 32767 2
คำ 0..65535 2
ยาว -2147483648..2147483647 4

คุณต้องจำไว้ว่าเมื่อเขียนโปรแกรมในภาษาปาสคาล จำนวนเต็ม(แปลจากภาษาอังกฤษโดยรวม) เป็นที่นิยมใช้มากที่สุดเนื่องจากช่วงของค่าเป็นที่ต้องการมากที่สุด หากจำเป็นต้องใช้ช่วงที่กว้างขึ้น ให้ใช้ ยาว(จำนวนเต็มยาว แปลจากภาษาอังกฤษว่าจำนวนเต็มยาว) พิมพ์ ไบต์ใน Pascal จะใช้เมื่อไม่จำเป็นต้องทำงานกับค่าลบ เช่นเดียวกับประเภท คำ(เฉพาะช่วงของค่าที่นี่จะใหญ่กว่ามาก)

ตัวอย่างวิธีการอธิบายตัวแปร (ประกาศ) ในภาษาปาสคาล:

โปรแกรม a1; var x,y:จำนวนเต็ม; (ชนิดจำนวนเต็ม) myname:string; (ประเภทสตริง) เริ่มต้น x:=1; ย:=x+16; myname:="ปีเตอร์"; writeln("ชื่อ: ",ชื่อของฉัน, ", อายุ: ", y) สิ้นสุด

ผลลัพธ์:
ชื่อ : ปีเตอร์ อายุ : 17 ปี

ความเห็นในภาษาปาสคาล

สังเกตยังไง. ความคิดเห็นที่ใช้ในปาสคาล- ในความคิดเห็นตัวอย่างเช่น ข้อความบริการที่คอมไพเลอร์ “ไม่สามารถมองเห็นได้” จะอยู่ในเครื่องหมายปีกกา โดยทั่วไปแล้ว โปรแกรมเมอร์จะแสดงความคิดเห็นเพื่ออธิบายส่วนต่างๆ ของโค้ด

ภารกิจที่ 3ประชากรของมอสโก = 9,000,000 คน ประชากรของ New Vasyuki คือ b=1,000 คน เขียนโปรแกรมที่กำหนดความแตกต่างของจำนวนผู้อยู่อาศัยระหว่างสองเมือง ใช้ตัวแปร

ชนิดข้อมูลจริงในภาษาปาสคาล

จำนวนจริงในภาษาปาสคาลและในการเขียนโปรแกรมโดยทั่วไปเป็นชื่อของเศษส่วน

พิมพ์ พิสัย หน่วยความจำที่ต้องการ (ไบต์)
จริง 2.9 * 10E-39 .. 1.7 * 10E38 6
เดี่ยว 1.5*10 อี-45 .. 3.4 * 10E38 4
สองเท่า 5 * 10E-324 .. 1.7 * 10E308 8
ขยาย 1.9 * 10E-4951 .. 1.1 * 10E4932 10

ประเภทจริงใน Pascal เป็นประเภทจริงที่ใช้บ่อยที่สุด

ข้างต้นได้ถูกนำเสนอ ชนิดข้อมูลอย่างง่ายในภาษา Pascal ซึ่งรวมถึง:

  • ลำดับ
  • ทั้งหมด
  • ตรรกะ
  • อักขระ
  • แสดงรายการได้
  • ช่วงเวลา
  • จริง

ในการแสดงค่าของตัวแปรประเภทจริงมักใช้เอาต์พุตที่จัดรูปแบบแล้ว:

  • รูปแบบจะใช้ตัวเลขตัวใดตัวหนึ่งซึ่งระบุจำนวนตำแหน่งที่จัดสรรให้กับตัวเลขนี้ในรูปแบบเลขชี้กำลัง
  • หน้า:=1234.6789; เขียน(p:6:2); (1234.68)

    นอกจากประเภทที่เรียบง่ายแล้ว ภาษายังใช้อีกด้วย ประเภทข้อมูลที่มีโครงสร้างและตัวชี้ซึ่งจะเป็นหัวข้อของบทเรียนต่อๆ ไปเกี่ยวกับภาษาปาสคาล

    ค่าคงที่ในภาษาปาสคาล

    บ่อยครั้งในโปรแกรมเป็นที่ทราบล่วงหน้าว่าตัวแปรจะใช้ค่าเฉพาะและจะไม่เปลี่ยนแปลงตลอดการทำงานของโปรแกรมทั้งหมด ในกรณีนี้ คุณต้องใช้ค่าคงที่

    การประกาศค่าคงที่ในภาษาปาสคาลเกิดขึ้นก่อนการประกาศตัวแปร (ก่อนคำบริการ var) และมีลักษณะดังนี้:

    ตัวอย่างของคำอธิบายคงที่ในภาษาปาสคาล:

    1 2 3 4 5 6 ค่าคงที่ x= 17 ;

    var myname: สตริง ;

    เริ่มต้น myname: = "ปีเตอร์" ;

    writeln("name: ", myname, ", age: ", x) จบ


    ค่าคงที่ x=17; var myname:สตริง; เริ่มต้น myname:="ปีเตอร์"; writeln("name: ",myname, ", age: ", x) จบ

    ผลลัพธ์ "สวยงาม" ของจำนวนเต็มและจำนวนจริง

    1. เพื่อให้แน่ใจว่าหลังจากแสดงค่าของตัวแปรแล้วจะมีการเยื้องเพื่อให้ค่าไม่ "รวม" เข้าด้วยกันเป็นเรื่องปกติที่จะระบุผ่านโคลอนว่าต้องระบุอักขระจำนวนเท่าใดเพื่อแสดง ค่า:
    2. การดำเนินการทางคณิตศาสตร์ในภาษาปาสคาล
    3. ลำดับการดำเนินงาน

    การประเมินนิพจน์ในวงเล็บ

    การคูณ การหาร div mod จากซ้ายไปขวา

    • การบวกและการลบจากซ้ายไปขวา
    • ขั้นตอนและฟังก์ชันเลขคณิตมาตรฐานปาสคาล

      ที่นี่คุ้มค่าที่จะดูรายละเอียดเพิ่มเติมเกี่ยวกับการดำเนินการทางคณิตศาสตร์บางอย่าง

      การดำเนินการ inc ในภาษา Pascal ซึ่งมีการเพิ่มขึ้นอย่างเด่นชัด เป็นขั้นตอนมาตรฐานของ Pascal ซึ่งหมายถึงการเพิ่มขึ้นทีละหนึ่ง
      ตัวอย่างการดำเนินการ inc:

    • ขั้นตอน Dec ใน Pascal ทำงานในลักษณะเดียวกัน: Dec(x) - ลดลง x คูณ 1 (ลดลง) หรือ Dec(x,n) - ลดลง x คูณ n
    • ตัวดำเนินการ abs แสดงถึงโมดูลัสของตัวเลข มันทำงานเช่นนี้:
    • ก: =- 9;

      ข:=หน้าท้อง(ก);

    • (ข=9)
    • ก:=-9; ข:=หน้าท้อง(ก); (ข=9)
    • ตัวดำเนินการ div ใน Pascal มักใช้ เนื่องจากงานจำนวนหนึ่งเกี่ยวข้องกับการดำเนินการของส่วนทั้งหมด
    • ส่วนที่เหลือของการหารหรือตัวดำเนินการ mod ใน Pascal ก็ขาดไม่ได้ในการแก้ปัญหาหลายประการ

      สิ่งที่น่าสังเกตคือฟังก์ชันคี่มาตรฐานของ Pascal ซึ่งกำหนดว่าจำนวนเต็มเป็นเลขคี่หรือไม่ นั่นคือ คืนค่าเป็นจริงสำหรับเลขคี่ เท็จสำหรับเลขคู่

    • ตัวอย่างการใช้ฟังก์ชันคี่: var x:จำนวนเต็ม; เริ่มต้น x:=3; writeln(sqr(x)); (คำตอบ 9) จบ
    • การดำเนินการของการยกกำลังในภาษาปาสคาล

      หายไปเช่นนี้ แต่ในการบวกเลขยกกำลัง คุณสามารถใช้ฟังก์ชัน exp ได้

      สูตรคือ: exp(ln(a)*n) โดยที่ a คือตัวเลข n คือดีกรี (a>0)

    อย่างไรก็ตาม ในคอมไพเลอร์ Pascal abc การยกกำลังนั้นง่ายกว่ามาก: var x:จำนวนเต็ม; เริ่ม x:=9; writeln(sqrt(x)); (คำตอบ 3) สิ้นสุด
    ภารกิจที่ 4

    ทราบขนาดของกล่องไม้ขีด: ความสูง - 12.41 ซม., ความกว้าง - 8 ซม., ความหนา - 5 ซม. คำนวณพื้นที่ฐานของกล่องและปริมาตร(S=กว้าง*หนา, V=พื้นที่*สูง)

    ภารกิจที่ 5สวนสัตว์แห่งนี้มีช้าง 3 เชือกและกระต่ายจำนวนไม่น้อย โดยจำนวนกระต่ายจะเปลี่ยนแปลงอยู่บ่อยครั้ง ช้างควรกินแครอทหนึ่งร้อยแครอทต่อวัน และกระต่ายหนึ่งตัว - สองตัว ทุกเช้า ผู้ดูแลสวนสัตว์จะบอกจำนวนกระต่ายให้คอมพิวเตอร์ทราบ เพื่อตอบสนองต่อสิ่งนี้ คอมพิวเตอร์จะต้องบอกจำนวนแครอททั้งหมดที่ต้องให้อาหารแก่กระต่ายและช้างในวันนี้แก่ผู้ดูแล ภารกิจที่ 6เป็นที่ทราบกันว่า xค่าขนมกิโลกรัม รูเบิล กำหนดราคาเท่าไหร่ ขนมพวกนี้กิโลกรัม และสามารถซื้อขนมได้กี่กิโลกรัม

    เค รูเบิล ผู้ใช้ป้อนค่าทั้งหมดพบมากที่สุดในวิชาคณิตศาสตร์ ประเภทตัวเลข- นี้ ทั้งหมดตัวเลขที่แทนค่าที่ไม่ต่อเนื่องจำนวนอนันต์ และ

    ถูกต้อง

    ตัวเลขที่แสดงถึงค่าต่อเนื่องไม่จำกัด

    คำอธิบายของชนิดข้อมูลตัวเลขของ Pascal (จำนวนเต็ม) ภายในภาษาเดียวกัน สามารถใช้ชุดย่อยที่แตกต่างกันของชุดจำนวนเต็มได้ ช่วงของค่าที่เป็นไปได้ของประเภทตัวเลขจำนวนเต็มขึ้นอยู่กับการเป็นตัวแทนภายในซึ่งอาจมีหนึ่งสองหรือสี่ไบต์ ดังนั้นใน Pascal 7.0 จะใช้ประเภทข้อมูลตัวเลขจำนวนเต็มต่อไปนี้:ด้วยทั้งหมด

    • ชนิดข้อมูลตัวเลข
      นอกจากนี้(+);
      ลบ(-);
      การคูณ(*);
      ส่วนที่เหลือของการหาร (mod);
      การยกกำลัง;
      เอกนารีบวก (+);
      เอกนารีลบ (-)
    • การดำเนินงานสัมพันธ์:
      ความสัมพันธ์ที่เท่าเทียมกัน (=);
      ความสัมพันธ์ที่ไม่เท่าเทียมกัน (<>);
      อัตราส่วนน้อยกว่า (<);
      อัตราส่วนที่มากกว่า (>);
      ความสัมพันธ์ไม่ต่ำกว่า (>=);
      ทัศนคติไม่มีอีกต่อไป (<=).

    เมื่อกระทำการด้วย ชนิดข้อมูลตัวเลขจำนวนเต็มประเภทของผลลัพธ์จะสอดคล้องกับประเภทของตัวถูกดำเนินการ และหากตัวถูกดำเนินการมีประเภทจำนวนเต็มต่างกัน ประเภทของตัวถูกดำเนินการที่มีกำลังสูงสุด (ช่วงค่าสูงสุด) ผลลัพธ์ที่ล้นออกมาที่เป็นไปได้นั้นไม่ได้ถูกควบคุมแต่อย่างใด (นี่เป็นสิ่งสำคัญ!) ซึ่งอาจนำไปสู่ข้อผิดพลาดได้

    ควรให้ความสนใจเป็นพิเศษกับการดำเนินการหารประเภทข้อมูลตัวเลขจำนวนเต็ม ปาสคาลอนุญาตให้มีการดำเนินการสองฝ่าย ซึ่งแสดงตามนั้น "/" และ กอง- คุณต้องรู้ว่าผลลัพธ์ของการหาร "/" ไม่ใช่จำนวนเต็ม แต่เป็น จำนวนจริง(สิ่งนี้เป็นจริงแม้ว่าคุณจะหาร 8 ด้วย 2 ก็ตาม เช่น 8/2=4.0) div ฝ่ายคือ การหารจำนวนเต็ม, เช่น. ประเภทผลลัพธ์เป็นจำนวนเต็ม

    คำอธิบายของชนิดข้อมูลตัวเลขของ Pascal (จำนวนจริง)

    ประเภทข้อมูลตัวเลขจริงหมายถึงชุดย่อยของจำนวนจริงที่สามารถแสดงในรูปแบบจุดลอยตัวที่เรียกว่าจำนวนหลักคงที่ ด้วยจุดลอยตัว ประเภทข้อมูลตัวเลขแต่ละประเภทจะแสดงเป็นตัวเลขสองกลุ่ม ตัวเลขกลุ่มแรกเรียกว่าแมนทิสซา ตัวเลขกลุ่มที่สองคือเลขชี้กำลัง โดยทั่วไป ชนิดข้อมูลตัวเลขในรูปแบบจุดลอยตัวสามารถแสดงได้ดังนี้ X= (+|-)MP (+ | -) r โดยที่ M คือแมนทิสซาของตัวเลข; r – ลำดับตัวเลข (r – จำนวนเต็ม); P – ฐานของระบบตัวเลข ตัวอย่างเช่น สำหรับฐานทศนิยม การแสดง 2E-1 (ในที่นี้ E คือฐานของระบบเลขฐานสิบ) จะมีลักษณะดังนี้: 2*10 -1 =0.2 และการแทน 1.234E5 จะสอดคล้องกับ: 1.234*10 5 =123400.0.

    ปาสคาลใช้จำนวนจริงประเภทต่อไปนี้ ซึ่งกำหนดจำนวนเฉพาะที่มีความแม่นยำจำกัด ขึ้นอยู่กับรูปแบบภายในของจำนวนจริง:

    เมื่ออธิบายตัวแปรจริงประเภท real ตัวแปรขนาด 4 ไบต์จะถูกสร้างขึ้นในหน่วยความจำคอมพิวเตอร์ ในกรณีนี้ แมนทิสซาจะได้รับ 3 ไบต์ และหนึ่งไบต์สำหรับลำดับ

    การดำเนินการต่อไปนี้สามารถดำเนินการกับชนิดข้อมูลตัวเลขจริงได้:

    • ชนิดข้อมูลตัวเลข
      นอกจากนี้ (+);
      ลบ(-);
      การคูณ(*);
      แผนก(/);
      การยกกำลัง;
      เอกนารีบวก (+);
      เอกนารีลบ (-)
    • การดำเนินงานสัมพันธ์:
      ความสัมพันธ์ที่ไม่เท่าเทียมกัน (<>);
      อัตราส่วนน้อยกว่า (<);
      อัตราส่วนที่มากกว่า (>);
      ความสัมพันธ์ไม่ต่ำกว่า (>=);
      ทัศนคติไม่มีอีกต่อไป (<=).

    อย่างที่คุณเห็น Pascal มีลักษณะเฉพาะด้วยประเภทข้อมูลจริงที่หลากหลาย แต่เข้าถึงประเภทข้อมูลตัวเลขได้ เดี่ยว, สองเท่าและ ขยายเป็นไปได้ภายใต้โหมดการคอมไพล์พิเศษเท่านั้น ชนิดข้อมูลตัวเลขเหล่านี้ได้รับการออกแบบสำหรับการสนับสนุนฮาร์ดแวร์สำหรับเลขคณิตทศนิยม และเพื่อให้ใช้งานได้อย่างมีประสิทธิภาพ พีซีของคุณต้องมีตัวประมวลผลร่วมทางคณิตศาสตร์

    ชนิดข้อมูลตัวเลขมีตำแหน่งพิเศษในภาษาปาสคาล คอมพ์ซึ่งถือเป็นจำนวนจริงโดยไม่มีส่วนเลขชี้กำลังและเศษส่วน จริงๆ แล้ว, คอมพ์เป็นจำนวนเต็มเซ็นชื่อ “ใหญ่” ที่ยังคงมีทศนิยม 19..20 หลัก ในขณะเดียวกันก็เป็นประเภทข้อมูลที่เป็นตัวเลข คอมพ์ในนิพจน์นั้นเข้ากันได้กับประเภทจริงอื่น ๆ อย่างสมบูรณ์: การดำเนินการจริงทั้งหมดถูกกำหนดไว้แล้ว สามารถใช้เป็นอาร์กิวเมนต์ของฟังก์ชันทางคณิตศาสตร์ ฯลฯ

    เกี่ยวกับการแปลงชนิดข้อมูลตัวเลขของ Pascal

    การแปลงประเภทข้อมูลตัวเลขโดยนัย (อัตโนมัติ) แทบจะเป็นไปไม่ได้เลยในภาษาปาสคาล มีข้อยกเว้นสำหรับประเภทเท่านั้น จำนวนเต็มซึ่งอนุญาตให้ใช้ในสำนวนเช่น จริง- ตัวอย่างเช่น หากมีการประกาศตัวแปรดังนี้:

    Var X: จำนวนเต็ม; Y: จริง;

    นั่นคือผู้ดำเนินการ

    จะถูกทางวากยสัมพันธ์แม้ว่าจะมีนิพจน์จำนวนเต็มทางด้านขวาของเครื่องหมายมอบหมายและมีตัวแปรจริงทางด้านซ้าย แต่คอมไพลเลอร์จะแปลงชนิดข้อมูลตัวเลขโดยอัตโนมัติ การแปลงแบบย้อนกลับจะถูกพิมพ์โดยอัตโนมัติ จริงในประเภท จำนวนเต็มเป็นไปไม่ได้ในภาษาปาสคาล โปรดจำไว้ว่ามีการจัดสรรจำนวนไบต์สำหรับตัวแปรประเภท จำนวนเต็มและ จริง: สำหรับชนิดข้อมูลจำนวนเต็ม จำนวนเต็มมีการจัดสรรหน่วยความจำ 2 ไบต์และสำหรับจริง - 6 ไบต์ เพื่อแปลง จริงวี จำนวนเต็มมีฟังก์ชันในตัวสองฟังก์ชัน: กลม(x) ปัดเศษจำนวนจริง x เป็นจำนวนเต็มที่ใกล้ที่สุด ท้ายรถ(x) ตัดทอนจำนวนจริงโดยละเศษส่วนที่เป็นเศษส่วนทิ้งไป

    แนวคิดเรื่องข้อมูลเป็นหนึ่งในแนวคิดสำคัญในการเขียนโปรแกรมและในวิทยาการคอมพิวเตอร์โดยทั่วไป กล่าวโดยคร่าวๆ ข้อมูลในวิทยาการคอมพิวเตอร์คือข้อมูลที่อยู่ในสถานะการจัดเก็บ ประมวลผล หรือส่งผ่านในช่วงเวลาหนึ่ง ในเครื่องทัวริง ข้อมูลมีประเภทหนึ่ง และจะขึ้นอยู่กับประเภทของข้อมูลตามลำดับ

    ชนิดข้อมูลในภาษา Pascal จะกำหนดค่าที่เป็นไปได้ของตัวแปร ค่าคงที่ นิพจน์ และฟังก์ชัน มีอยู่แล้วภายในและกำหนดเอง ประเภทบิวท์อินจะแสดงในภาษาการเขียนโปรแกรมในตอนแรก และประเภทที่กำหนดเองจะถูกสร้างขึ้นโดยโปรแกรมเมอร์

    ตามวิธีการนำเสนอและการประมวลผลประเภทข้อมูลคือ:

    • เรียบง่าย
    • มีโครงสร้าง
    • พอยน์เตอร์
    • วัตถุ
    • ขั้นตอน

    บทความนี้จะพิจารณาเฉพาะประเภทข้อมูลที่ง่ายที่สุด เนื่องจากในช่วงเริ่มต้นของการฝึกอบรม โปรแกรมของคุณจะดำเนินการโดยไม่ต้องใช้ไฟล์และบันทึกได้ง่ายกว่าหากไม่มีตัวแปรจำนวนเต็มหรือสตริง

    ประเภทจำนวนเต็ม

    ซึ่งรวมถึงประเภทจำนวนเต็มหลายประเภท ซึ่งแตกต่างกันในช่วงของค่า จำนวนไบต์ที่จัดสรรสำหรับการจัดเก็บ และคำที่ใช้ประกาศประเภท

    พิมพ์ พิสัย ขนาดเป็นไบต์
    ย่อ -128…127 1
    จำนวนเต็ม -32 768…32 767 2
    ยาว -2 147 483 648…2 147 483 647 4
    ไบต์ 0…255 1
    คำ 0…65 535 2

    คุณสามารถประกาศตัวแปรจำนวนเต็มได้ในส่วน Var เช่น:

    การดำเนินการทางคณิตศาสตร์และตรรกะทั้งหมดสามารถดำเนินการกับตัวแปรในหมวดหมู่นี้ได้ ยกเว้นการหาร (/) ซึ่งต้องใช้ประเภทจริง อาจใช้ฟังก์ชันและขั้นตอนมาตรฐานบางอย่างด้วย

    แบบจริงๆ

    ใน Pascal มีประเภทข้อมูลจริงดังต่อไปนี้:

    พิมพ์ พิสัย หน่วยความจำไบต์ จำนวนหลัก
    จริง 2.9e-39 … 1.7e38 6 11-12
    เดี่ยว 1.5e-45 … 3.4e38 4 7-8
    สองเท่า 5.0e-324…1.7e308 8 15-16
    ขยาย 3.4e-4932 … 1.1e493 10 19-20
    คอมพ์ -9.2e63…(9.2e63)-1 8 19-20

    การดำเนินการและฟังก์ชันต่างๆ สามารถทำได้มากกว่าจำนวนเต็ม ตัวอย่างเช่น ฟังก์ชันเหล่านี้ส่งคืนผลลัพธ์จริง:

    บาป(x) – ไซน์;

    cos(x) – โคไซน์;

    อาร์คแทน(x) – อาร์กแทนเจนต์;

    ln(x) – ลอการิทึมธรรมชาติ;

    sqrt(x) – รากที่สอง;

    exp(x) – เลขชี้กำลัง;

    ประเภทบูลีน

    ตัวแปรประเภทข้อมูลบูลีนสามารถรับได้เพียงสองค่าเท่านั้น: จริงและเท็จ ในที่นี้ จริง สอดคล้องกับค่า 1 และเท็จ สอดคล้องกับศูนย์ คุณสามารถประกาศตัวแปรบูลีนได้ดังนี้:

    การเปรียบเทียบและการดำเนินการเชิงตรรกะสามารถทำได้กับข้อมูลประเภทนี้: ไม่ใช่ และ หรือ หรือ xor

    ประเภทตัวละคร

    ชนิดข้อมูลอักขระคือชุดของอักขระที่ใช้ในคอมพิวเตอร์เครื่องใดเครื่องหนึ่ง ตัวแปรประเภทนี้รับค่าของอักขระตัวใดตัวหนึ่งและใช้พื้นที่ 1 ไบต์ในหน่วยความจำคอมพิวเตอร์ คำ ถ่านกำหนดค่าประเภทนี้ มีหลายวิธีในการเขียนตัวแปรอักขระ (หรือค่าคงที่):

    1. เป็นอักขระตัวเดียวที่อยู่ในเครื่องหมายอะพอสทรอฟี: 'W', 'V', 'p';
    2. โดยระบุรหัสอักขระซึ่งค่าจะต้องอยู่ในช่วงตั้งแต่ 0 ถึง 255
    3. โดยใช้โครงสร้าง ^K โดยที่ K คือโค้ดอักขระควบคุม ค่าของ K ต้องมากกว่าโค้ดอักขระควบคุมที่เกี่ยวข้อง 64

    การดำเนินการเชิงสัมพันธ์และฟังก์ชันต่อไปนี้ใช้ได้กับค่าของประเภทข้อมูลอักขระ:

    ซัคซี(x)- ส่งคืนอักขระถัดไป

    เปร็ด(x)- ส่งคืนอักขระก่อนหน้า;

    ออร์ด(x)- ส่งกลับค่าของรหัสอักขระ

    ช(x)- ส่งคืนค่าของสัญลักษณ์ด้วยรหัส

    อัพเคส(x)- แปลงตัวอักษรจากช่วง 'a'..'z' เป็นตัวพิมพ์ใหญ่

    เพื่อให้ทำงานอย่างมีประสิทธิภาพกับประเภทอักขระ ฉันขอแนะนำให้ใช้ .

    ประเภทสตริง

    สตริงในภาษาปาสกาลคือลำดับของอักขระที่อยู่ในเครื่องหมายอะพอสทรอฟี และแสดงด้วยคำว่า สตริง- จำนวนอักขระ (ความยาวบรรทัด) ต้องไม่เกิน 255 ตัว หากไม่ได้ระบุความยาวของบรรทัด ระบบจะกำหนดเป็น 255 อักขระโดยอัตโนมัติ รูปแบบทั่วไปของการประกาศตัวแปรสตริงมีลักษณะดังนี้:

    วาร์<имя_переменной>:สตริง[<длина строки>];

    อักขระแต่ละตัวในบรรทัดมีดัชนี (ตัวเลข) ของตัวเอง ดัชนีของไบต์แรกคือ 0 แต่ไม่ได้เก็บอักขระตัวแรก แต่เก็บความยาวของสตริงทั้งหมด ซึ่งหมายความว่าตัวแปรประเภทนี้จะใช้พื้นที่มากกว่าจำนวนตัวแปรในนั้น 1 ไบต์ จำนวนของอักขระตัวแรกคือ 1 เช่น หากเรามีสตริง S='stroka' ดังนั้น S=s; ในบทเรียนใดบทเรียนหนึ่งต่อไปนี้ เราจะพูดถึงประเภทข้อมูลสตริงโดยละเอียด

    ชนิดข้อมูลที่แจกแจง

    ชนิดข้อมูลที่แจกแจงแสดงถึงตัวระบุในจำนวนที่จำกัด ตัวระบุเหล่านี้จะอยู่ในวงเล็บและคั่นด้วยเครื่องหมายจุลภาค

    พิมพ์วัน=(วันจันทร์ วันอังคาร วันพุธ วันพฤหัสบดี วันศุกร์ วันเสาร์ วันอาทิตย์);

    ตัวแปร A สามารถรับเฉพาะค่าที่ระบุในส่วนประเภทเท่านั้น คุณยังสามารถประกาศตัวแปรประเภทแจกแจงได้ในส่วน Var:

    วาร์ A: (วันจันทร์ วันอังคาร);

    การดำเนินการเชิงสัมพันธ์ใช้ได้กับประเภทนี้ และจะมีการกำหนดไว้ล่วงหน้าในวันจันทร์นั้น

    ชนิดข้อมูลช่วงเวลา

    เมื่อจำเป็นต้องระบุช่วงของค่า ในสถานการณ์เช่นนี้ จะใช้ชนิดข้อมูลช่วงเวลา การก่อสร้างที่ใช้ในการประกาศคือ ม..น, ที่ไหน คือค่าต่ำสุด (เริ่มต้น) และ n– สูงสุด (สุดท้าย); โดยที่ m และ n เป็นค่าคงที่ ซึ่งอาจเป็นจำนวนเต็ม อักขระ การแจงนับ หรือประเภทบูลีน ค่าของประเภทช่วงเวลาสามารถอธิบายได้ทั้งในส่วนประเภทและในส่วนคำอธิบายตัวแปร

    มุมมองทั่วไป:

    พิมพ์<имя_типа> = <мин. значение>..<макс. значение>;

    การบรรยายครั้งที่ 2

    พื้นฐานของการเขียนโปรแกรม

    ความรู้เบื้องต้นเกี่ยวกับปาสคาล ชนิดข้อมูล การดำเนินงาน

    ตัวอักษรภาษาปาสคาล

    ภาษาธรรมชาติใดๆ ก็ตามประกอบด้วยองค์ประกอบต่างๆ เช่น สัญลักษณ์ คำ วลี และประโยค ภาษาโปรแกรมยังมีองค์ประกอบที่คล้ายกัน: สัญลักษณ์ คำ สำนวน (วลี) ตัวดำเนินการ (ประโยค)

    คำต่างๆ ถูกสร้างขึ้นจากชุดสัญลักษณ์ นิพจน์ - เหล่านี้คือกลุ่มของคำและตัวดำเนินการ - เหล่านี้เป็นการผสมผสานระหว่างคำและสำนวน สัญลักษณ์ภาษาเป็นสัญลักษณ์เบื้องต้น (ตัวอักษร) ที่ใช้เขียนข้อความบางข้อความ ดังนั้นชุดของสัญลักษณ์เหล่านี้จึงประกอบกันเป็นตัวอักษรของภาษา

    อักษรปาสคาลประกอบด้วย:

    1.อักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กของอักษรละตินซึ่งประกอบด้วยอักขระต่อไปนี้:

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - ตัวพิมพ์ใหญ่;

    A b c d e f g h i j k l m n o p q r s t u v w x y z - ตัวอักษรตัวพิมพ์เล็ก;

    2. เลขอารบิกทศนิยม: 0 1 2 3 4 5 6 7 8 9;

    3. เลขฐานสิบหก (สร้างจากเลขฐานสิบและตัวอักษรตั้งแต่ A ถึง F)

    4. ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก 32 ตัวของตัวอักษรรัสเซีย

    5. ตัวอักษรพิเศษ:

    การผสมอักขระพิเศษสามารถสร้างอักขระผสมได้:

    : = งานที่ได้รับมอบหมาย;

    < >ไม่เท่ากัน;

    >= มากกว่าหรือเท่ากับ;

    <= меньше или равно;

    ช่วงของค่า

    (* *) หรือ ( ) - ความคิดเห็น

    โครงสร้างโปรแกรมปาสคาล

    เพื่อให้คอมไพเลอร์ Passal เข้าใจได้อย่างถูกต้องถึงการดำเนินการที่คาดหวัง โปรแกรมของคุณจะต้องได้รับการจัดรูปแบบให้สอดคล้องกับไวยากรณ์ (กฎของการสร้างโปรแกรม) ของภาษานี้

    โปรแกรม Pascal ใดๆ สามารถประกอบด้วยบล็อกต่อไปนี้ (ส่วนเสริมจะมีเครื่องหมายวงเล็บเหลี่ยมต่อไปนี้):

    โปรแกรม<имя_программы>;

    [ใช้<имена_подключаемых_модулей>;]

    [ ฉลาก<список_меток>;]

    [ต่อ<имя_константы> = <значение_константы>;]

    [ พิมพ์<имя_типа> = <определение_типа>;]

    [วาร์<имя_переменной> : <тип_переменной>;]

    [ ขั้นตอน<имя_процедуры> <описание_процедуры>;]

    [ การทำงาน<имя_функции> <описание_функции>;]

    start (จุดเริ่มต้นของเนื้อหาหลักของโปรแกรม)

    <операторы>

    จบ. (* ส่วนท้ายของเนื้อหาหลักของโปรแกรม *)

    คอมไพเลอร์ภาษา Pascal เวอร์ชันใหม่กว่าไม่จำเป็นต้องระบุชื่อโปรแกรมอีกต่อไป ซึ่งก็คือบรรทัดโปรแกรม<имя_программы>- สามารถละเว้นได้ แต่จะเป็นไปได้ก็ต่อเมื่อโปรแกรมทั้งหมดอยู่ในไฟล์โมดูลเดียว หากโปรแกรมประกอบด้วยชิ้นส่วนอิสระหลายชิ้น - โมดูล แต่ละโมดูลจะต้องมีส่วนหัว (โปรแกรมหรือหน่วย)

    ส่วนตัวเลือกใดๆ ที่ระบุไว้สามารถปรากฏได้มากกว่าหนึ่งครั้งในข้อความโปรแกรม ลำดับทั่วไปของส่วนเหล่านั้นสามารถเปลี่ยนแปลงได้เช่นกัน แต่ต้องปฏิบัติตามกฎหลักของภาษาปาสคาลเสมอ: ก่อนที่จะใช้วัตถุ จะต้องประกาศและอธิบายก่อน

    คอมไพเลอร์ Pascal จะไม่แยกความแตกต่างระหว่างอักษรตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ และละเว้นอักขระช่องว่าง ดังนั้นข้อความของโปรแกรมจึงสามารถจัดโครงสร้างในลักษณะที่ทำให้สะดวกที่สุดในการอ่านและดีบัก

    คำสั่งคอมไพเลอร์

    บรรทัดที่ขึ้นต้นด้วยสัญลักษณ์ ($ ไม่ใช่ความคิดเห็น แต่เป็นคำสั่งคอมไพเลอร์ - คำสั่งพิเศษที่กระบวนการคอมไพล์และการทำงานของโปรแกรมขึ้นอยู่กับ เราจะพิจารณาคำสั่งในส่วนที่เกี่ยวข้อง "ตามความหมาย"

    ตัวอย่างเช่น บรรทัด ($I-,Q+) ปิดใช้งานการตรวจสอบ I/O แต่เปิดใช้งานการควบคุมโอเวอร์โฟลว์การคำนวณ

    ตัวระบุ

    ชื่อที่กำหนดให้กับอ็อบเจ็กต์โปรแกรม (ค่าคงที่ ชนิด ตัวแปร ฟังก์ชันและโพรซีเดอร์ และทั้งโปรแกรม) เรียกว่า ตัวระบุ ประกอบด้วยตัวเลข ตัวอักษรละติน และเครื่องหมาย "_" (ขีดล่าง) เท่านั้น อย่างไรก็ตาม ตัวเลขไม่สามารถขึ้นต้นชื่อได้ ตัวระบุสามารถมีความยาวเท่าใดก็ได้ แต่หากชื่อสองชื่อมีอักขระ 63 ตัวแรกเหมือนกัน ชื่อนั้นจะถือว่าเหมือนกัน

    คุณสามารถตั้งชื่อให้กับอ็อบเจ็กต์โปรแกรมของคุณได้ แต่คุณต้องแน่ใจว่ามันแตกต่างจากคำสงวนที่ใช้โดย Pascal เนื่องจากคอมไพลเลอร์ยังคงไม่ยอมรับตัวแปรที่มีชื่อ "ต่างประเทศ"

    ต่อไปนี้คือรายการคำสงวนที่พบบ่อยที่สุด:

    การใช้งานอาร์เรย์ shl

    สตริงอินเตอร์เฟสเคส

    ป้ายกำกับ const แล้ว

    การใช้ตัวชี้ไฟล์

    ขั้นตอนไกล var

    สำหรับโปรแกรมในขณะนั้น

    บันทึกส่งต่อด้วย

    ฟังก์ชั่นทำซ้ำ xor

    ตัวแปรและชนิดข้อมูล

    ตัวแปรคืออ็อบเจ็กต์โปรแกรมที่มีค่าสามารถเปลี่ยนแปลงได้ในขณะที่โปรแกรมกำลังทำงาน

    ชนิดข้อมูลเป็นลักษณะของช่วงของค่าที่ตัวแปรที่อยู่ในประเภทข้อมูลนั้นสามารถรับได้

    ตัวแปรทั้งหมดที่ใช้ในโปรแกรมจะต้องอธิบายไว้ในส่วน var พิเศษโดยใช้เทมเพลตต่อไปนี้:

    var<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

    <имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

    ภาษาปาสคาลมีชุดข้อมูลที่แตกต่างกันจำนวนมาก แต่ตอนนี้เราจะระบุเพียงบางส่วนเท่านั้น เราจะพูดถึงประเภทข้อมูลทั้งหมดเพิ่มเติม

    ค่าคงที่

    ค่าคงที่คือวัตถุที่ทราบค่าก่อนที่โปรแกรมจะเริ่มทำงาน

    ค่าคงที่เป็นสิ่งจำเป็นสำหรับการออกแบบโปรแกรมภาพซึ่งขาดไม่ได้เมื่อใช้ค่าซ้ำ ๆ ซ้ำ ๆ ในข้อความของโปรแกรมและสะดวกหากจำเป็นต้องเปลี่ยนค่าเหล่านี้ตลอดทั้งโปรแกรมในคราวเดียว

    ค่าคงที่ในภาษาปาสคาลมีสามประเภท:

    ค่าคงที่ที่ไม่มีชื่อ (ตัวเลขและตัวเลข สัญลักษณ์และสตริง ชุด)

    ชื่อค่าคงที่ที่ไม่ได้พิมพ์

    ค่าคงที่ที่พิมพ์ชื่อ

    ค่าคงที่ที่ไม่มีชื่อ

    ค่าคงที่ที่ไม่มีชื่อไม่มีชื่อ ดังนั้นจึงไม่จำเป็นต้องประกาศ

    ประเภทของค่าคงที่ที่ไม่มีชื่อจะถูกกำหนดโดยอัตโนมัติตามค่าเริ่มต้น:

    ลำดับของตัวเลขใด ๆ (อาจนำหน้าด้วยเครื่องหมาย "-" หรือ "+" หรือแบ่งออกเป็นจุดเดียว) คอมไพเลอร์จะรับรู้ว่าเป็นค่าคงที่ที่ไม่มีชื่อ - ตัวเลข (จำนวนเต็มหรือจำนวนจริง)

    ลำดับของอักขระใดๆ ที่อยู่ในเครื่องหมายอะพอสทรอฟีจะถือเป็นค่าคงที่ที่ไม่มีชื่อ - สตริง

    ลำดับของจำนวนเต็มหรือสัญลักษณ์ใดๆ ที่คั่นด้วยลูกน้ำและอยู่ในวงเล็บเหลี่ยมจะถือเป็นค่าคงที่ที่ไม่มีชื่อ - ชุดหนึ่ง

    นอกจากนี้ ยังมีค่าคงที่พิเศษสองค่าจริงและเท็จที่เกี่ยวข้องกับชนิดข้อมูลบูลีน

    ตัวอย่างของการใช้ค่าคงที่ที่ไม่มีชื่อรวมถึงตัวดำเนินการต่อไปนี้:

    real2:= 12.075 + x;

    string4:= "abc" + string44;

    set5:= * set55;

    boolean6:= จริง;

    ค่าคงที่ที่ไม่ได้พิมพ์

    ค่าคงที่ที่มีชื่อต้องมีชื่อตามชื่อ ดังนั้นจึงต้องรายงานชื่อเหล่านี้ไปยังคอมไพเลอร์ ซึ่งอธิบายไว้ในส่วน const พิเศษ

    หากคุณไม่ได้ระบุประเภทของค่าคงที่ คอมไพเลอร์จะกำหนดประเภท (ฐาน) ที่ควรกำหนดให้กับลักษณะที่ปรากฏ ค่าคงที่ใดๆ ที่อธิบายไว้แล้วสามารถนำมาใช้ในการประกาศค่าคงที่ ตัวแปร และชนิดข้อมูลอื่นๆ ได้ ต่อไปนี้เป็นตัวอย่างของการอธิบายค่าคงที่ที่มีชื่อที่ไม่ได้พิมพ์:

    พิมพ์ค่าคงที่

    ค่าคงที่ที่ระบุชื่อที่พิมพ์คือตัวแปร(!) โดยมีค่าเริ่มต้นที่ทราบอยู่แล้วเมื่อถึงเวลาที่โปรแกรมเริ่มทำงาน ดังนั้นประการแรกไม่สามารถใช้ค่าคงที่ที่พิมพ์เพื่อกำหนดค่าคงที่ประเภทข้อมูลและตัวแปรอื่น ๆ ได้และประการที่สองค่าสามารถเปลี่ยนแปลงได้ในขณะที่โปรแกรมกำลังทำงาน

    ค่าคงที่ที่พิมพ์จะอธิบายโดยใช้เทมเพลตต่อไปนี้:

    ค่าคงที่<имя_константы> : <тип_константы> = <начальное_значение>;

    ตัวอย่างด้านล่างแสดงวิธีดำเนินการนี้:

    const n: จำนวนเต็ม = -10;

    b: บูลีน = จริง;

    เราจะให้ตัวอย่างของค่าคงที่ประเภทอื่นๆ ในขณะที่เราศึกษาประเภทข้อมูลที่เกี่ยวข้อง

    ชนิดข้อมูลปาสคาล

    คอมไพเลอร์ Pascal ต้องการข้อมูลเกี่ยวกับจำนวนหน่วยความจำที่จำเป็นในการรันโปรแกรมก่อนที่จะรัน ในการดำเนินการนี้ ในส่วนคำอธิบายตัวแปร (var) คุณจะต้องแสดงรายการตัวแปรทั้งหมดที่ใช้ในโปรแกรม นอกจากนี้ คุณยังต้องบอกคอมไพเลอร์ด้วยว่าตัวแปรแต่ละตัวจะใช้หน่วยความจำเท่าใด

    ทั้งหมดนี้สามารถสื่อสารไปยังโปรแกรมได้โดยการระบุประเภทของตัวแปรในอนาคต เมื่อมีข้อมูลเกี่ยวกับประเภทของตัวแปร คอมไพเลอร์จะ "เข้าใจ" ว่าต้องจัดสรรไบต์จำนวนเท่าใด การดำเนินการใดที่สามารถทำได้กับตัวแปร และโครงสร้างใดบ้างที่สามารถมีส่วนร่วมได้

    เพื่อความสะดวกของโปรแกรมเมอร์ Pascal มีประเภทข้อมูลมาตรฐานหลายประเภทและนอกจากนี้ความสามารถในการสร้างประเภทข้อมูลใหม่ตามข้อมูลที่มีอยู่ (มาตรฐานหรือกำหนดอีกครั้งโดยโปรแกรมเมอร์) ซึ่งเรียกว่าแบบสร้าง

    การแบ่งออกเป็นประเภทข้อมูลพื้นฐานและประเภทข้อมูลที่สร้างขึ้นใน Pascal แสดงอยู่ในตาราง:

    ชนิดข้อมูลลำดับ (ไม่ต่อเนื่อง)

    ชนิดข้อมูลที่อยู่

    ประเภทข้อมูลที่มีโครงสร้าง

    ชนิดข้อมูลทางคณิตศาสตร์

    ประเภทข้อมูลพื้นฐาน

    ตรรกะ

    สัญลักษณ์

    จริง

    เนติปิซี

    ดัชนีที่จัดทำดัชนี

    ประเภทที่สร้างขึ้น

    แสดงรายการได้

    สัปดาห์ = (su, mo, tu, เรา, th, fr,sa);

    ตัวชี้ที่พิมพ์

    อาร์เรย์

    สตริงสตริง

    บันทึกบันทึก

    ขั้นตอน

    วัตถุ

    ช่วงเวลา (ช่วง)

    โปรแกรมเมอร์สร้างประเภทข้อมูล

    ชนิดข้อมูลลำดับ

    ในบรรดาประเภทข้อมูลพื้นฐาน ประเภทลำดับมีความโดดเด่น ชื่อนี้สามารถพิสูจน์ได้สองวิธี:

    1. แต่ละองค์ประกอบของประเภทลำดับสามารถเชื่อมโยงกับหมายเลขเฉพาะ (ลำดับ) ได้ การนับค่าเริ่มจากศูนย์ ข้อยกเว้นคือชนิดข้อมูล shortint, integer และ longint การกำหนดหมายเลขสอดคล้องกับค่าขององค์ประกอบ

    2. นอกจากนี้ในองค์ประกอบของประเภทลำดับใด ๆ จะมีการกำหนดลำดับ (ในความหมายทางคณิตศาสตร์ของคำ) ซึ่งขึ้นอยู่กับการกำหนดหมายเลขโดยตรง ดังนั้นสำหรับสององค์ประกอบใด ๆ ของประเภทลำดับเราสามารถพูดได้อย่างชัดเจนว่าองค์ประกอบใดเล็กกว่าและองค์ประกอบใดใหญ่กว่า

    รูทีนมาตรฐานที่จัดการประเภทข้อมูลลำดับ

    ฟังก์ชันและขั้นตอนต่อไปนี้ถูกกำหนดไว้สำหรับประเภทลำดับเท่านั้น:

    1.ฟังก์ชัน ord(x) ส่งกลับเลขลำดับของค่าของตัวแปร x (สัมพันธ์กับประเภทที่มีตัวแปร x อยู่)

    2.ฟังก์ชัน pred(x) ส่งกลับค่าก่อนหน้า x (ใช้ไม่ได้กับองค์ประกอบแรกของประเภท)

    3.ฟังก์ชัน succ(x) ส่งคืนค่าตาม x (ใช้ไม่ได้กับองค์ประกอบสุดท้ายของประเภท)

    4.ขั้นตอน inc(x) ส่งกลับค่าตามหลัง x (สำหรับประเภทข้อมูลทางคณิตศาสตร์ จะเทียบเท่ากับตัวดำเนินการ x:=x+1)

    5.ขั้นตอน inc(x,k) ส่งกลับค่า kth ตามหลัง x (สำหรับประเภทข้อมูลทางคณิตศาสตร์ จะเทียบเท่ากับตัวดำเนินการ x:=x+k)

    6.ขั้นตอน dec(x) ส่งกลับค่าก่อนหน้า x (สำหรับประเภทข้อมูลทางคณิตศาสตร์ จะเทียบเท่ากับตัวดำเนินการ x:=x-1)

    7. ขั้นตอน dec(x,k) ส่งคืนค่า k-e ที่อยู่ก่อนหน้า x (สำหรับประเภทข้อมูลทางคณิตศาสตร์ จะเทียบเท่ากับตัวดำเนินการ x:=x-k)

    เมื่อดูเผินๆ ดูเหมือนว่าผลลัพธ์ของการใช้โพรซีเดอร์ inc(x) จะเหมือนกับผลลัพธ์ของการใช้ฟังก์ชัน succ(x) ทุกประการ อย่างไรก็ตามความแตกต่างระหว่างสิ่งเหล่านี้จะปรากฏที่ขอบเขตของช่วงที่อนุญาต ฟังก์ชัน succ(x) ไม่สามารถใช้ได้กับองค์ประกอบสูงสุดของประเภท แต่ขั้นตอน inc(x) จะไม่ทำให้เกิดข้อผิดพลาดใดๆ แต่การดำเนินการตามกฎการเพิ่มเครื่องจักร จะเพิ่มหน่วยถัดไปให้กับหมายเลของค์ประกอบ . แน่นอนว่าตัวเลขจะออกนอกช่วงและเนื่องจากการตัดทอน จะกลายเป็นจำนวนค่าต่ำสุดของช่วง ปรากฎว่าโพรซีเดอร์ inc() และ dec() รับรู้ประเภทลำดับใด ๆ ราวกับว่า "ปิดอยู่ในวงแหวน": ทันทีหลังจากค่าสุดท้ายกลับมาค่าแรกอีกครั้ง

    ให้เราอธิบายทุกสิ่งที่กล่าวพร้อมตัวอย่าง สำหรับประเภทข้อมูล

    ประเภทสิบหก = 0..15;

    การพยายามบวก 1 เข้ากับเลข 15 จะได้ผลลัพธ์ดังนี้:

    หน่วยเริ่มต้นจะถูกตัดออกไป ดังนั้นปรากฎว่า inc(15)=0

    สถานการณ์ที่คล้ายกันที่ขีดจำกัดล่างของช่วงที่อนุญาตของชนิดข้อมูลลำดับที่กำหนดเองจะถูกสังเกตสำหรับโพรซีเดอร์ dec(x) และฟังก์ชัน pred(x):

    ธ.ค. (min_element) = max_element

    ชนิดข้อมูลที่เกี่ยวข้องกับลำดับ

    1. ประเภทบูลีนมีสองค่า: เท็จและจริง และความเท่าเทียมกันต่อไปนี้ถือเป็น:

    ลำดับ(เท็จ)=0, ลำดับ(จริง)=1, เท็จ

    pred(true)=false, succ(false)=true,

    รวม(จริง)=เท็จ รวม(เท็จ)=จริง

    ธ.ค.(จริง)=เท็จ ธ.ค.(เท็จ)=จริง

    2. อักขระประเภทอักขระประกอบด้วยอักขระ ASCII แบบขยาย 256 ตัว (เช่น "a", "b", "i", "7", "#") หมายเลขอักขระที่ส่งคืนโดยฟังก์ชัน ord() จะเหมือนกับหมายเลขอักขระในตาราง ASCII

    3. มาสรุปประเภทข้อมูลจำนวนเต็มในตาราง:

    ชนิดข้อมูล

    จำนวนไบต์

    พิสัย

    2147483648..2147483647

    4. ประเภทข้อมูลที่แจกแจงจะถูกระบุในส่วนประเภทโดยการแสดงรายการองค์ประกอบอย่างชัดเจน ตัวอย่างเช่น:

    พิมพ์ สัปดาห์ =(อาทิตย์ จันทร์ อังคาร พุธ พฤหัส ศุกร์ เสาร์)

    โปรดจำไว้ว่าสำหรับประเภทข้อมูลนี้:

    inc(เสาร์) = อาทิตย์, ธ.ค.(อาทิตย์) = วันเสาร์

    5. ชนิดข้อมูลช่วงเวลาถูกกำหนดโดยขอบเขตของช่วงเท่านั้น ตัวอย่างเช่น:

    พิมพ์เดือน = 1..12;

    บุดนี = จันทร์..ศุกร์;

    6. ประเภทข้อมูลที่สร้างโดยโปรแกรมเมอร์มีอธิบายไว้ในส่วนประเภทตามรูปแบบต่อไปนี้:

    พิมพ์<имя_типа> = <описание_типа>;

    ตัวอย่างเช่น:

    พิมพ์ lat_bukvy = "a".."z", "A".."Z";

    ประเภทข้อมูลพื้นฐานเป็นประเภทมาตรฐาน ดังนั้นจึงไม่จำเป็นต้องอธิบายในส่วนประเภท อย่างไรก็ตาม หากต้องการ ก็สามารถทำได้เช่นกัน เช่น ตั้งชื่อสั้นที่มีคำจำกัดความยาว สมมติว่าโดยการแนะนำชนิดข้อมูลใหม่

    พิมพ์ int = จำนวนเต็ม;

    คุณสามารถย่อข้อความโปรแกรมให้สั้นลงได้เล็กน้อย

    ชนิดข้อมูลจริง

    โปรดจำไว้ว่าประเภทข้อมูลเหล่านี้เป็นเลขคณิต ไม่ใช่ลำดับ

    ชนิดข้อมูล

    จำนวนไบต์

    ช่วง (ค่าสัมบูรณ์)

    1.5*10-45..3.4*1038

    2.9*10-39..1.7*1038

    5.0*10-324..1.7*10308

    3.4*10-4932..1.1*104932

    ชนิดข้อมูลที่สร้างขึ้น

    เราจะพิจารณาประเภทข้อมูลเหล่านี้ (พร้อมกับการดำเนินการที่กำหนดไว้) เพิ่มเติมในระหว่างการบรรยายหลายครั้ง

    การดำเนินงานและการแสดงออก

    การดำเนินการทางคณิตศาสตร์

    เรามาพูดถึงการดำเนินการกัน - การดำเนินการมาตรฐานที่อนุญาตสำหรับตัวแปรประเภทข้อมูลพื้นฐานอย่างใดอย่างหนึ่ง พื้นฐานจะเป็นการดำเนินการทางคณิตศาสตร์และตรรกะ

    หมายเหตุ: ตัวดำเนินการทั้งหมดที่แสดงด้านล่าง (ยกเว้น unary "-" และไม่ใช่) จำเป็นต้องมีตัวถูกดำเนินการสองตัว

    1. การดำเนินการทางลอจิคัล (และ - ลอจิคัล AND หรือ - ลอจิคัลหรือไม่ใช่ - ลอจิคัล NOT, xor - เอกสิทธิ์เฉพาะ OR) ใช้ได้กับค่าประเภทบูลีนเท่านั้น นอกจากนี้ยังให้ผลลัพธ์เป็นค่าบูลีนด้วย นี่คือตารางค่าสำหรับการดำเนินการเหล่านี้:

    จริงเท็จจริง

    เท็จเท็จเท็จ

    จริงเท็จเท็จ

    2. การดำเนินการเปรียบเทียบ (=,<>, >, <, <=, >=) ใช้กับทุกประเภทพื้นฐาน ผลลัพธ์ของพวกเขายังเป็นค่าบูลีนอีกด้วย

    3. การดำเนินการของเลขคณิตจำนวนเต็มใช้ได้กับประเภทจำนวนเต็มเท่านั้น ผลลัพธ์ที่ได้คือจำนวนเต็มซึ่งมีประเภทขึ้นอยู่กับประเภทของตัวถูกดำเนินการ

    a div b - การหาร a ด้วย b อย่างสมบูรณ์ (อาจไม่จำเป็นต้องเตือนคุณว่าห้ามหารด้วย 0 ดังนั้นในกรณีเช่นนี้ การดำเนินการจะทำให้เกิดข้อผิดพลาด) ผลลัพธ์จะเป็นประเภทข้อมูลร่วมกับประเภทที่ตัวถูกดำเนินการอยู่

    ตัวอย่างเช่น (shortint div byte = integer) สิ่งนี้สามารถอธิบายได้ด้วยวิธีนี้: จำนวนเต็มเป็นประเภทขั้นต่ำที่ทั้งไบต์และ shortint เป็นส่วนย่อย

    a mod b - นำเศษที่เหลือมาหาร a ด้วย b ประเภทของผลลัพธ์ดังเช่นในกรณีก่อนหน้านี้ ถูกกำหนดโดยประเภทของตัวถูกดำเนินการ และ 0 เป็นค่าที่ไม่ถูกต้องสำหรับ b แตกต่างจาก mod การดำเนินการทางคณิตศาสตร์ซึ่งผลลัพธ์จะเป็นตัวเลขที่ไม่เป็นลบเสมอเครื่องหมายของผลลัพธ์ของ mod การดำเนินการ "โปรแกรมเมอร์" จะถูกกำหนดโดยเครื่องหมายของตัวถูกดำเนินการตัวแรก ดังนั้น หากในทางคณิตศาสตร์ (-2 mod 5) = 3 เราก็จะได้ (-2 mod 5) = -2

    shl k - เลื่อนค่าของ a คูณ k บิตไปทางซ้าย (ซึ่งเทียบเท่ากับการคูณค่าของตัวแปร a ด้วย 2k) ผลลัพธ์ของการดำเนินการจะเป็นประเภทเดียวกับตัวถูกดำเนินการแรก

    shr k - เลื่อนค่าของบิต a คูณ k ไปทางขวา (ซึ่งเทียบเท่ากับการหารค่าของตัวแปร a ด้วย 2k ทั้งหมด) ผลลัพธ์ของการดำเนินการจะเป็นประเภทเดียวกับตัวถูกดำเนินการแรก

    และหรือไม่ใช่ xor - การดำเนินการเลขคณิตแบบไบนารีที่ทำงานกับบิตของการแทนค่าเลขฐานสองของจำนวนเต็ม ตามกฎเดียวกันกับการดำเนินการเชิงตรรกะที่สอดคล้องกัน

    4. การคำนวณทางคณิตศาสตร์ทั่วไป (+, -, *, /) ใช้กับคณิตศาสตร์ทุกประเภท ผลลัพธ์จะเป็นประเภทข้อมูลที่เหมือนกันกับตัวถูกดำเนินการทั้งสองตัว (ข้อยกเว้นเดียวคือการดำเนินการหารเศษส่วน / ซึ่งผลลัพธ์จะเป็นประเภทข้อมูลจริงเสมอ)

    การดำเนินงานอื่น ๆ

    มีการดำเนินการอื่น ๆ ที่เฉพาะเจาะจงกับค่าของประเภทข้อมูลมาตรฐานของ Pascal บางประเภท เราจะพิจารณาการดำเนินการเหล่านี้ในส่วนที่เหมาะสม:

    #, ใน, +, *, : ดูการบรรยายที่ 5 “สัญลักษณ์. เส้น. มากมาย"

    @, ^: ดูการบรรยายที่ 7 “ที่อยู่และตัวชี้”

    ฟังก์ชันทางคณิตศาสตร์มาตรฐาน

    การดำเนินการทางคณิตศาสตร์ยังรวมถึงฟังก์ชันทางคณิตศาสตร์มาตรฐานด้วย เรามีรายการพร้อมคำอธิบายสั้น ๆ ไว้ในตาราง

    การทำงาน

    คำอธิบาย

    ประเภทอาร์กิวเมนต์

    ประเภทผลลัพธ์

    ค่าสัมบูรณ์ (โมดูลัส) ของตัวเลข

    เลขคณิต

    เช่นเดียวกับประเภทอาร์กิวเมนต์

    อาร์กแทนเจนต์ (เป็นเรเดียน)

    เลขคณิต

    จริง

    โคไซน์ (เป็นเรเดียน)

    เลขคณิต

    จริง

    เลขชี้กำลัง (เช่น)

    เลขคณิต

    จริง

    การหาเศษส่วนของตัวเลข

    เลขคณิต

    จริง

    การหาส่วนของตัวเลขทั้งหมด

    เลขคณิต

    จริง

    ลอการิทึมธรรมชาติ (ฐาน e)

    เลขคณิต

    จริง

    ตรวจสอบว่าตัวเลขเป็นเลขคี่หรือไม่

    ความหมายตัวเลข

    จริง

    ปัดเศษให้เป็นจำนวนเต็มที่ใกล้ที่สุด

    เลขคณิต

    การปัดเศษลง - เป็นจำนวนเต็มที่น้อยกว่าที่ใกล้ที่สุด

    เลขคณิต

    ไซน์ (เป็นเรเดียน)

    เลขคณิต

    จริง

    กำลังสอง

    เลขคณิต

    จริง

    สแควร์รูท

    เลขคณิต

    จริง

    นิพจน์ทางคณิตศาสตร์

    การดำเนินการทางคณิตศาสตร์ทั้งหมดสามารถนำมารวมกันได้ โดยคำนึงถึงประเภทข้อมูลที่อนุญาตสำหรับตัวถูกดำเนินการด้วย

    ตัวถูกดำเนินการของการดำเนินการใดๆ อาจเป็นตัวแปร ค่าคงที่ การเรียกฟังก์ชัน หรือนิพจน์ที่สร้างจากการดำเนินการอื่นๆ ทั้งหมดรวมกันเรียกว่าการแสดงออก

    ตัวอย่างนิพจน์ทางคณิตศาสตร์:

    (x<0) and (y>0) - นิพจน์ที่ผลลัพธ์เป็นประเภทบูลีน

    z shl abs(k) - ตัวถูกดำเนินการที่สองคือการเรียกไปยังฟังก์ชันมาตรฐาน

    (x mod k) + min(a,b) + trunc(z) - การรวมกันของการดำเนินการทางคณิตศาสตร์และการเรียกใช้ฟังก์ชัน

    คี่(รอบ(x/abs(x))) - การแสดงออก "หลายเรื่อง"

    ลำดับการคำนวณ

    หากนิพจน์มีวงเล็บ การคำนวณจะดำเนินการตามลำดับต่อไปนี้: ยิ่งความลึกของการซ้อนของวงเล็บน้อยลงเท่าใด การดำเนินการที่อยู่ในวงเล็บก็จะยิ่งคำนวณในภายหลัง หากไม่มีวงเล็บ ระบบจะคำนวณค่าของการดำเนินการที่มีลำดับความสำคัญสูงกว่าก่อน จากนั้นจึงคำนวณค่าของการดำเนินการที่มีลำดับความสำคัญต่ำกว่า การดำเนินการต่อเนื่องกันหลายครั้งที่มีลำดับความสำคัญเท่ากันจะถูกคำนวณตามลำดับจากซ้ายไปขวา

    ตารางที่ 2.1. ลำดับความสำคัญ (สำหรับทั้งหมด) การดำเนินการของ Pascal

    หน่วยงานกลางเพื่อการศึกษา

    เชิงนามธรรม

    "ประเภทข้อมูลในภาษาปาสคาล"

    1. ประเภทข้อมูล

    ข้อมูลใดๆ เช่น ค่าคงที่ ตัวแปร คุณสมบัติ ค่าฟังก์ชัน หรือนิพจน์ มีลักษณะเฉพาะตามประเภท ประเภทจะกำหนดชุดของค่าที่ถูกต้องที่วัตถุสามารถมีได้ เช่นเดียวกับชุดของการดำเนินการที่ถูกต้องที่สามารถนำไปใช้กับมันได้ นอกจากนี้ ประเภทนี้ยังกำหนดรูปแบบของการแสดงข้อมูลภายในในหน่วยความจำพีซีอีกด้วย

    โดยทั่วไป ภาษา Object Pascal มีลักษณะเป็นโครงสร้างแยกย่อยของประเภทข้อมูล (รูปที่ 1.1) ภาษาเป็นกลไกในการสร้างประเภทใหม่ ซึ่งจะทำให้จำนวนประเภทที่ใช้ในโปรแกรมมีมากเท่าที่ต้องการ

    ข้อมูลที่ประมวลผลในโปรแกรมแบ่งออกเป็นตัวแปร ค่าคงที่ และตัวอักษร:

    ค่าคงที่ เป็นตัวแทนข้อมูลที่มีค่ากำหนดไว้ในส่วนการประกาศค่าคงที่และไม่เปลี่ยนแปลงระหว่างการทำงานของโปรแกรม

    ตัวแปร ได้รับการประกาศในส่วนการประกาศตัวแปร แต่ต่างจากค่าคงที่ตรงที่จะได้รับค่าระหว่างการทำงานของโปรแกรม และค่าเหล่านี้สามารถเปลี่ยนแปลงได้ ค่าคงที่และตัวแปรสามารถอ้างอิงตามชื่อได้

    ตัวอักษร ไม่มีตัวระบุและแสดงโดยตรงด้วยค่าในข้อความของโปรแกรม

    พิมพ์กำหนดชุดของค่าที่องค์ประกอบข้อมูลสามารถรับได้และชุดการดำเนินการที่อนุญาต

    บทนี้และบทต่อๆ ไปอีกสี่บทจะให้คำอธิบายโดยละเอียดของแต่ละประเภท

    1.1 ประเภทง่าย ๆ

    ประเภทอย่างง่ายได้แก่ประเภทลำดับ จริง และวันที่และเวลา

    ประเภทลำดับต่างกันตรงที่แต่ละค่ามีจำนวนจำกัด ค่าเหล่านี้สามารถเรียงลำดับได้ด้วยวิธีใดวิธีหนึ่ง (ดังนั้นชื่อของประเภท) ดังนั้นแต่ละค่าจึงสามารถเชื่อมโยงกับจำนวนเต็มบางค่าได้ - เลขลำดับของค่า

    ประเภทจริงพูดอย่างเคร่งครัดก็มีค่าจำนวนจำกัดซึ่งถูกกำหนดโดยรูปแบบของการแทนค่าภายในของจำนวนจริง อย่างไรก็ตามจำนวนค่าที่เป็นไปได้ของประเภทจริงนั้นมีมากจนไม่สามารถเชื่อมโยงจำนวนเต็ม (จำนวน) กับแต่ละค่าได้

    ประเภทวันที่-เวลาออกแบบมาเพื่อจัดเก็บวันที่และเวลา อันที่จริงมันใช้รูปแบบจริงเพื่อจุดประสงค์เหล่านี้

    1.1.1 ประเภทลำดับ

    ประเภทลำดับได้แก่ (ดูรูปที่ 1.1) ประเภทจำนวนเต็ม ตรรกะ อักขระ แจงนับ และประเภทช่วง สามารถใช้ฟังก์ชัน Ord(x) กับฟังก์ชันใดก็ได้ ซึ่งจะส่งกลับค่าลำดับของนิพจน์ X


    ข้าว. 1.1 - โครงสร้างชนิดข้อมูล

    สำหรับ ทั้งหมดประเภท ฟังก์ชัน ord(x) ส่งกลับค่าของ x เอง เช่น Ord(X) = x สำหรับ x ที่เป็นของใดๆ ทั้งหมดพิมพ์. ใช้ Ord(x) กับ ตรรกะ , เป็นสัญลักษณ์และนับได้ประเภทให้จำนวนเต็มบวกในช่วง 0 ถึง 1 ( ประเภทบูลีน) ตั้งแต่ 0 ถึง 255 ( เป็นสัญลักษณ์) ตั้งแต่ 0 ถึง 65535 ( นับได้). ประเภท-ช่วงคงคุณสมบัติทั้งหมดของประเภทลำดับฐานไว้ ดังนั้นผลลัพธ์ของการใช้ฟังก์ชัน ord(x) กับมันจึงขึ้นอยู่กับคุณสมบัติของประเภทนี้

    คุณยังสามารถใช้ฟังก์ชันกับประเภทลำดับได้:

    เปร็ด(x)- ส่งกลับค่าก่อนหน้าของประเภทลำดับ (ค่าที่สอดคล้องกับเลขลำดับ ord(x) -1 เช่น ord(pred(x)) = ord(x) - 1;

    สำเร็จ(x)- ส่งกลับค่าถัดไปของประเภทลำดับ ซึ่งสอดคล้องกับเลขลำดับ ord(x) +1 เช่น ord(Succ(x)) = ord(x) + 1

    เช่น ถ้าโปรแกรมกำหนดตัวแปร

    จากนั้นฟังก์ชัน PRED(c) จะส่งกลับอักขระ "4" และฟังก์ชัน SUCC(c) จะส่งกลับอักขระ "6"

    หากเราจินตนาการถึงประเภทลำดับใดๆ ว่าเป็นชุดของค่าที่เรียงลำดับกัน โดยเพิ่มขึ้นจากซ้ายไปขวาและครอบครองส่วนใดส่วนหนึ่งบนแกนตัวเลข ฟังก์ชัน pred(x) จะไม่ถูกกำหนดไว้สำหรับด้านซ้าย และ succ (x) จะอยู่ทางด้านขวา จุดสิ้นสุดของส่วนนี้

    ประเภทจำนวนเต็ม - ช่วงของค่าที่เป็นไปได้ของประเภทจำนวนเต็มขึ้นอยู่กับการเป็นตัวแทนภายในซึ่งอาจเป็นหนึ่ง สอง สี่ หรือแปดไบต์ ในตาราง 1.1 แสดงชื่อของประเภทจำนวนเต็ม ความยาวของการแสดงภายในเป็นไบต์ และช่วงของค่าที่เป็นไปได้

    ตารางที่ 1.1 - ประเภทจำนวนเต็ม

    ชื่อ ความยาว, ไบต์ ช่วงของค่า
    พระคาร์ดินัล 4 0. .. 2 147 483 647
    ไบต์ 1 0...255
    สั้น 1 -128...+127
    สมอลท์ 2 -32 768...+32 767
    คำ 2 0...65 535
    จำนวนเต็ม 4
    ลองจินต์ 4 -2 147 483 648...+2 147 483 647
    Int64 8 -9*1018...+9*1018
    คำยาว 4 0. . .4 294 967 295

    ประเภท คำยาวและ Int64เปิดตัวครั้งแรกในเวอร์ชัน 4 และประเภทต่างๆ สมอลท์และ พระคาร์ดินัลไม่มีใน Delphi 1. ประเภท จำนวนเต็มสำหรับเวอร์ชันนี้ใช้ขนาด 2 ไบต์และมีช่วงค่าตั้งแต่ -32768 ถึง +32767 เช่นเดียวกันกับ สมอลท์ .

    เมื่อใช้ขั้นตอนและฟังก์ชันที่มีพารามิเตอร์จำนวนเต็ม คุณควรได้รับคำแนะนำจากประเภท "การซ้อน" เช่น ทุกที่ที่สามารถใช้งานได้ คำอนุญาตให้ใช้ ไบต์(แต่ไม่ใช่ในทางกลับกัน) ใน ลองจินต์“เข้า” สมอลท์ซึ่งรวมถึง สั้น .

    รายการขั้นตอนและฟังก์ชันที่ใช้กับประเภทจำนวนเต็มแสดงไว้ในตาราง 1.2. ตัวอักษร b, s, w, i, l แสดงถึงสำนวนประเภทต่อไปนี้: ไบต์ , Shortint, Word, จำนวนเต็ม และ Longint ,

    x คือนิพจน์ประเภทใดๆ เหล่านี้ ตัวอักษร vb, vs, vw, vi, vl, vx แสดงถึงตัวแปรประเภทที่เกี่ยวข้อง พารามิเตอร์ทางเลือกจะแสดงอยู่ในวงเล็บเหลี่ยม

    ตารางที่ 1.2 - ขั้นตอนมาตรฐานและฟังก์ชันที่ใช้กับทุกประเภท

    อุทธรณ์ ประเภทผลลัพธ์ การกระทำ
    หน้าท้อง(x) ภารกิจที่ 6 ส่งคืนโมดูล x
    CH(ข) ถ่าน ส่งกลับอักขระตามรหัส
    ธ.ค.(vx[,i]) - ลดค่าของ vx ลงด้วย i และในกรณีที่ไม่มี i - ลง 1
    Inc(vx[,i]) - เพิ่มค่าของ vx ด้วย i และในกรณีที่ไม่มี i - 1
    สวัสดี(ญ) ไบต์ ส่งกลับธนูสูงสุดของการโต้แย้ง
    สวัสดี(ฉัน) เดียวกัน ส่งกลับไบต์ที่สาม
    แท้จริง(ฉัน) ส่งกลับค่าไบต์ต่ำของอาร์กิวเมนต์
    ต่ำ) เดียวกัน
    คี่(ลิตร) บูลีน ส่งกลับค่า True ถ้าอาร์กิวเมนต์เป็นเลขคี่
    สุ่ม(ญ) เช่นเดียวกับพารามิเตอร์ ส่งกลับตัวเลขสุ่มเทียมที่กระจายสม่ำเสมอในช่วง 0...(w-l)
    ตร.ม.(x) เอ็กซ์ ส่งกลับกำลังสองของอาร์กิวเมนต์
    แลกเปลี่ยน(i) จำนวนเต็ม สลับไบต์ในคำเดียว
    สลับ(ญ) คำ เดียวกัน

    เมื่อดำเนินการกับจำนวนเต็ม ประเภทผลลัพธ์จะสอดคล้องกับประเภทของตัวถูกดำเนินการ และหากตัวถูกดำเนินการมีประเภทจำนวนเต็มต่างกัน ประเภททั่วไปที่มีตัวถูกดำเนินการทั้งสองตัว เช่น เมื่อใช้งานด้วย ย่อและ คำประเภททั่วไปจะเป็น จำนวนเต็ม- ในการตั้งค่าเริ่มต้น คอมไพเลอร์ Delphi จะไม่สร้างโค้ดเพื่อตรวจสอบว่าค่าอยู่นอกช่วงหรือไม่ ซึ่งอาจทำให้เกิดความเข้าใจผิดได้

    ประเภทบูลีน - ประเภทลอจิคัล ได้แก่ บูลีน, ByteBool, บูล, เวิร์ดบูลและ ลองบูล- ใน Pascal มาตรฐาน จะมีการกำหนดเฉพาะประเภทเท่านั้น บูลีนประเภทลอจิคัลอื่น ๆ จะถูกนำมาใช้ใน Object Pascal เพื่อความเข้ากันได้กับ Windows: ประเภท บูลีนและ ByteBoolแต่ละอันใช้หนึ่งไบต์ บูลและ เวิร์ดบูล- ละ 2 ไบต์ ลองบูล- 4 ไบต์ ค่าบูลีนสามารถเป็นหนึ่งในค่าคงที่ที่ประกาศไว้ล่วงหน้าเป็นเท็จหรือจริง

    เนื่องจากประเภทบูลีนเป็นประเภทลำดับ จึงสามารถนำมาใช้ในคำสั่งวนซ้ำของประเภทที่นับได้ ในเดลฟี 32 สำหรับ บูลีนความหมาย

    Ord (True) = +1 ในขณะที่ประเภทอื่นๆ ( บูล, เวิร์ดบูลฯลฯ)

    Ord(True) = -1 ดังนั้นตัวดำเนินการประเภทนี้ควรใช้ด้วยความระมัดระวัง! ตัวอย่างเช่น สำหรับเวอร์ชัน Delphi 6 คำสั่ง showMessage(" --- ") ที่ปฏิบัติการได้ในลูปต่อไปนี้ สำหรับจะไม่มีวันถูกดำเนินการ:

    สำหรับ L:= เท็จถึงจริงทำ

    ShowMessage("--);

    หากเราแทนที่พารามิเตอร์ลูปประเภท L ในตัวอย่างก่อนหน้าด้วย บูลีนลูปจะทำงานและข้อความจะปรากฏบนหน้าจอสองครั้ง [สำหรับ Delphi เวอร์ชัน 1 และ 2 ord (True) =+1 สำหรับประเภทบูลีนใดๆ]

    ประเภทตัวละคร - ค่าของประเภทอักขระคือชุดของอักขระ PC ทั้งหมด อักขระแต่ละตัวถูกกำหนดให้เป็นจำนวนเต็มในช่วง 0...255 หมายเลขนี้ทำหน้าที่เป็นรหัสสำหรับการแสดงสัญลักษณ์ภายใน ซึ่งจะถูกส่งกลับโดยฟังก์ชัน ord

    สำหรับการเข้ารหัสใน Windows จะใช้รหัส ANSI (ตั้งชื่อตาม American National Standard Institute ซึ่งเป็นสถาบันมาตรฐานของอเมริกาที่เสนอรหัสนี้) อักขระ PC ครึ่งแรกที่มีรหัส 0... 127 สอดคล้องกับตารางที่ 1.3 อักขระครึ่งหลังที่มีรหัส 128...255 จะแตกต่างกันไปตามแบบอักษรต่างๆ แบบอักษรมาตรฐานของ Windows Arial Cyr, Courier New Cyr และ Times New Roman ใช้รหัส 64 ตัวสุดท้าย (ตั้งแต่ 192 ถึง 256) เพื่อแสดงอักขระซีริลลิก (ไม่มีตัวอักษร "ё" และ "Ё"): "A"... "Z" เป็นค่าที่เข้ารหัส 192..223, “a”... “i” - 224...255 สัญลักษณ์ “Ё” และ “е” มีรหัส 168 และ 184 ตามลำดับ

    ตารางที่ 1.3 - การเข้ารหัสอักขระตามมาตรฐาน ANSI

    รหัส เครื่องหมาย รหัส. เครื่องหมาย รหัส. เครื่องหมาย รหัส เครื่องหมาย
    0 น.ล 32 บี.แอล. 64 @ 96 "
    1 ซอน 33 ! 65 97
    2 เอสทีเอ็กซ์ 34 66 ใน 98
    3 อีทีเอ็กซ์ 35 # 67 กับ 99 กับ
    4 อีโอที 36 $ 68 ดี 100
    5 ENQ 37 % 69 อี 101
    6 อ๊ากก 38 & 70 เอฟ 102
    7 เบล 39 " 71 103
    8" บี.เอส. 40 ( 72 เอ็น 104 ชม.
    9 HT 41 ) 73 ฉัน 105 ฉัน
    10 แอลเอฟ 42 * 74 เจ 106 เจ
    11 เวอร์มอนต์ 43 + 75 ถึง 107
    12 เอฟเอฟ 44 เอฟ 76 108 1
    13 CR 45 - 77 109
    14 ดังนั้น 46 78 เอ็น 110 n
    15 เอสไอ 47 / 79 0 111 โอ
    16 เดล 48 0 80 112
    17 ดีซี1 49 1 81 ถาม 113 ถาม
    18 ดีซี2 50 2 82 114
    19 ดีซี3 51 3 83 115
    20 ดีซี 4 52 4 84 116 ที
    21 นาเค 53 5 85 คุณ 117 คุณ
    22 ซิน 54 6 86 วี 118 โวลต์
    23 อีทีบี 55 7 87 119
    24 สามารถ 56 8 88 เอ็กซ์ 120 ภารกิจที่ 6
    25 อี.เอ็ม. 57 9 89 121 คุณ
    26 ย่อย 58 : 90 ซี .122 z
    27 เอสซี 59 ; 91 ที 123 {
    28 เอฟเอส 60 < 92 \ 124 1
    29 จี.เอส. 61 = 93 ] 125 }
    30 อาร์.เอส. 62 > 94 126 ~
    31 เรา 63 เอฟ 95 127

    อักขระที่มีรหัส 0...31 หมายถึงรหัสบริการ หากใช้รหัสเหล่านี้ในข้อความอักขระของโปรแกรม จะถือว่าเป็นช่องว่าง

    หากต้องการพิมพ์ ถ่านการดำเนินการเชิงสัมพันธ์สามารถใช้ได้ เช่นเดียวกับฟังก์ชันในตัว:

    ถ่าน (ค)- ฟังก์ชั่นประเภท ถ่าน- แปลงนิพจน์เป็นประเภท ไบต์ให้เป็นสัญลักษณ์และส่งกลับพร้อมกับมูลค่าของมัน

    อัพเคส(CH)- ฟังก์ชั่นประเภท ถ่าน- ส่งคืนอักษรตัวพิมพ์ใหญ่หาก сн เป็นอักษรละตินตัวพิมพ์เล็ก มิฉะนั้นจะส่งคืนสัญลักษณ์ сн เอง (สำหรับซีริลลิก จะส่งกลับอักขระดั้งเดิม)

    ประเภทอีนัม - ประเภทที่ระบุจะถูกระบุโดยการแจงนับค่าที่สามารถรับได้ แต่ละค่าจะถูกตั้งชื่อตามตัวระบุบางตัว และอยู่ในรายการที่ล้อมรอบด้วยวงเล็บ ตัวอย่างเช่น:

    สี = (แดง ขาว น้ำเงิน);

    การใช้ประเภทที่แจกแจงทำให้โปรแกรมมองเห็นได้ชัดเจนยิ่งขึ้น

    ความสอดคล้องระหว่างค่าของประเภทแจงนับและหมายเลขลำดับของค่าเหล่านี้ถูกกำหนดโดยลำดับการแจงนับ: ค่าแรกในรายการจะได้รับหมายเลขลำดับ 0, ค่าที่สอง - 1 เป็นต้น จำนวนสมาชิกสูงสุดของ ประเภทการแจงนับคือค่า 65536 ดังนั้นในความเป็นจริงประเภทการแจงนับระบุชุดย่อยบางส่วนของประเภททั้งหมด คำและถือได้ว่าเป็นการประกาศแบบกะทัดรัดของกลุ่มค่าคงที่จำนวนเต็มที่มีค่า 0, 1 เป็นต้น

    การใช้ประเภทที่แจกแจงจะเพิ่มความน่าเชื่อถือของโปรแกรมโดยอนุญาตให้คุณควบคุมค่าที่ตัวแปรที่เกี่ยวข้องได้รับ Object Pascal อนุญาตให้มีการแปลงแบบย้อนกลับ: นิพจน์ประเภทใดก็ได้ คำสามารถแปลงเป็นค่าประเภทแจกแจงได้ เว้นแต่ว่าค่าของนิพจน์จำนวนเต็มจะเกินจำนวนเชิงนับของประเภทนั้น การแปลงนี้ทำได้โดยใช้ฟังก์ชันที่ประกาศโดยอัตโนมัติพร้อมชื่อของประเภทที่แจงนับ

    ประเภท-ช่วง - ประเภทช่วงคือชุดย่อยของประเภทฐาน ซึ่งสามารถเป็นประเภทลำดับใดก็ได้ ยกเว้นประเภทช่วง

    ประเภทช่วงถูกกำหนดโดยขอบเขตของค่าภายในประเภทฐาน:

    <мин.знач.>..<макс.знач.>

    ที่นี่<мин. знач. >- ค่าต่ำสุดของช่วงประเภท<макс. знач. >- ค่าสูงสุดของมัน

    ไม่จำเป็นต้องอธิบายประเภทช่วงในส่วนประเภท แต่สามารถระบุได้โดยตรงเมื่อประกาศตัวแปร

    เมื่อกำหนดประเภทช่วง คุณต้องปฏิบัติตามกฎต่อไปนี้:

    อักขระ “..” สองตัวจะถือเป็นอักขระตัวเดียว ดังนั้นจึงไม่อนุญาตให้มีช่องว่างระหว่างอักขระเหล่านั้น ขอบด้านซ้ายของช่วงไม่ควรเกินขอบด้านขวา

    ประเภทช่วงจะสืบทอดคุณสมบัติทั้งหมดของประเภทพื้นฐาน แต่มีข้อจำกัดด้านพลังงานที่ต่ำกว่า โดยเฉพาะหากมีการกำหนดตัวแปรไว้

    ไลบรารีมาตรฐาน Object Pascal ประกอบด้วยสองฟังก์ชันที่รองรับการทำงานกับประเภทช่วง:

    สูง(x)- ส่งกลับค่าสูงสุดของประเภทช่วงที่ตัวแปร x อยู่

    ต่ำ(x)- ส่งคืนค่าต่ำสุดของประเภทช่วง

    1.1.2 แบบจริง

    ต่างจากประเภทลำดับซึ่งค่าจะถูกแมปกับชุดจำนวนเต็มเสมอและดังนั้นจึงแสดงอย่างแม่นยำในพีซี ค่าของประเภทจริงจะกำหนดตัวเลขตามใจชอบด้วยความแม่นยำจำกัดบางประการเท่านั้น ขึ้นอยู่กับรูปแบบภายในของจำนวนจริง .

    ตารางที่ 1.4 - ประเภทจริง

    ในรุ่นก่อนหน้าของประเภท Delphi 1...3 จริงครอบครอง 6 ไบต์และมีช่วงค่าตั้งแต่ 2.9*10-39 ถึง 1.7*1038 ในเวอร์ชัน 4 และ 5 ประเภทนี้เทียบเท่ากับประเภท สองเท่า- หากจำเป็น (เพื่อเหตุผลด้านความเข้ากันได้) ให้ใช้ขนาด 6 ไบต์ จริงคุณต้องระบุคำสั่งคอมไพเลอร์ (SREALCOMPATIBILITY ON)

    ดังที่เห็นได้จากตาราง เวอร์ชัน 1.4 ที่เป็นจำนวนจริงใน Object Pascal มีขนาดตั้งแต่ 4 ถึง 10 ไบต์ที่ต่อเนื่องกัน และมีโครงสร้างต่อไปนี้ในหน่วยความจำพีซี

    นี่คือหลักเครื่องหมายของตัวเลข e - ส่วนเอ็กซ์โปเนนเชียล; มีลำดับไบนารี m คือแมนทิสซาของตัวเลข

    แมนทิสซา m มีความยาว 23 (สำหรับ เดี่ยว) สูงสุด 63 (สำหรับ ขยาย) บิตไบนารี ซึ่งรับประกันความแม่นยำ 7...8 สำหรับ เดี่ยวและ 19...20 สำหรับ ขยายหลักทศนิยม จุดทศนิยม (ลูกน้ำ) จะแสดงเป็นนัยก่อนหลักซ้าย (สำคัญที่สุด) ของแมนทิสซา แต่เมื่อทำงานกับตัวเลข ตำแหน่งจะเลื่อนไปทางซ้ายหรือขวาตามลำดับไบนารี่ของตัวเลขที่เก็บไว้ในส่วนเอ็กซ์โปเนนเชียล ดังนั้นการดำเนินการกับจำนวนจริงจึงเรียกว่าเลขคณิตจุดลอยตัว (ลูกน้ำ)

    โปรดทราบว่าตัวประมวลผลร่วมทางคณิตศาสตร์จะประมวลผลตัวเลขในรูปแบบเสมอ ขยายและอีกสามประเภทจริงในกรณีนี้ได้มาโดยการตัดทอนผลลัพธ์ตามขนาดที่ต้องการและใช้เพื่อประหยัดหน่วยความจำเป็นหลัก

    ประเภทจะมีตำแหน่งพิเศษใน Object Pascal คอมพ์และ สกุลเงินซึ่งถือเป็นจำนวนจริงที่มีเศษส่วนที่มีความยาวคงที่: in คอมพ์ส่วนที่เป็นเศษส่วนมีความยาว 0 หลักนั่นคือ ขาดไป สกุลเงินความยาวของเศษส่วนคือทศนิยม 4 ตำแหน่ง ในความเป็นจริง ทั้งสองประเภทกำหนดจำนวนเต็มขนาดใหญ่ที่มีลายเซ็นซึ่งเก็บเลขทศนิยมที่สำคัญ 19...20 หลัก (ภายในมี 8 ไบต์ที่ต่อเนื่องกัน) ในเวลาเดียวกันในการแสดงออก คอมพ์และ สกุลเงินเข้ากันได้กับประเภทจริงอื่น ๆ อย่างสมบูรณ์: การดำเนินการจริงทั้งหมดถูกกำหนดไว้แล้ว สามารถใช้เป็นอาร์กิวเมนต์ของฟังก์ชันทางคณิตศาสตร์ ฯลฯ พื้นที่ที่เหมาะสมที่สุดสำหรับการประยุกต์ใช้ประเภทเหล่านี้คือการคำนวณทางบัญชี

    1.1.3 ประเภทวันที่-เวลา

    ประเภทวันที่และเวลาถูกกำหนดโดยตัวระบุมาตรฐาน TDateTimeและได้รับการออกแบบให้จัดเก็บทั้งวันที่และเวลาไปพร้อมๆ กัน ในการเป็นตัวแทนภายในนั้นมีขนาด 8 ไบต์และคล้ายกัน สกุลเงินเป็นจำนวนจริงที่มีเศษส่วนคงที่ โดยส่วนที่เป็นจำนวนเต็มจะเก็บวันที่ และส่วนที่เป็นเศษส่วนจะเก็บเวลา วันที่กำหนดเป็นจำนวนวันที่ผ่านไปตั้งแต่วันที่ 30 ธันวาคม พ.ศ. 2442 และเวลาเป็นเศษส่วนของวันที่ผ่านไปตั้งแต่ 0 ชั่วโมง ดังนั้นค่า 36444.837 จึงตรงกับวันที่ 10/11/1999 และเวลา 20:05. จำนวนวันอาจเป็นลบได้ แต่ค่าที่น้อยกว่า -693594 (ตรงกับวันที่ 00.00.0000 จากการประสูติของพระคริสต์) จะถูกละเว้นโดยฟังก์ชันสำหรับการแปลงวันที่เป็นประเภทสตริง

    เหนือประเภทข้อมูล TDateTimeการดำเนินการเดียวกันถูกกำหนดไว้เหมือนกับจำนวนจริง และนิพจน์ประเภทนี้อาจเกี่ยวข้องกับค่าคงที่และตัวแปรของจำนวนเต็มและประเภทจริง

    เพราะว่าประเภทนั้น TDateTimeเข้ากันได้กับรูปแบบของจำนวนจริงคุณสามารถกำหนดวันที่ล่วงหน้าหรือย้อนหลังหลายวันได้อย่างง่ายดาย: ในการทำเช่นนี้ก็เพียงพอที่จะเพิ่มหรือลบจำนวนเต็มที่ต้องการจากวันที่ที่กำหนดตามลำดับ

    1.2 ประเภทที่มีโครงสร้าง

    ประเภทที่มีโครงสร้างใดๆ (และใน Object Pascal มีสี่ประเภท: อาร์เรย์ บันทึก ชุด และไฟล์) มีลักษณะเฉพาะด้วยองค์ประกอบหลายหลากที่สร้างประเภทนี้ แต่ละองค์ประกอบสามารถอยู่ในประเภทที่มีโครงสร้างซึ่งช่วยให้เราสามารถพูดคุยเกี่ยวกับการซ้อนประเภทที่เป็นไปได้ Object Pascal อนุญาตความลึกของการซ้อนประเภทโดยพลการ แต่ความยาวรวมของประเภทใดประเภทหนึ่งในการเป็นตัวแทนภายในไม่ควรเกิน 2 GB

    เพื่อความเข้ากันได้กับ Pascal มาตรฐาน Object Pascal อนุญาตให้วางคำสงวนก่อนการประกาศประเภทที่มีโครงสร้าง บรรจุสั่งให้คอมไพเลอร์บันทึกเมื่อใดก็ตามที่เป็นไปได้หน่วยความจำที่จัดสรรสำหรับอ็อบเจ็กต์ประเภทที่มีโครงสร้าง แต่จริงๆ แล้วคอมไพลเลอร์ละเลยคำสั่งนี้: ข้อมูล "การบรรจุ" ลงใน Object Pascal จะถูกดำเนินการโดยอัตโนมัติทุกครั้งที่เป็นไปได้

    1.2.1 อาร์เรย์

    อาร์เรย์ใน Object Pascal มีความคล้ายคลึงกับประเภทข้อมูลที่คล้ายคลึงกันในภาษาโปรแกรมอื่นๆ หลายประการ คุณลักษณะที่โดดเด่นของอาร์เรย์คือส่วนประกอบทั้งหมดเป็นข้อมูลประเภทเดียวกัน (อาจมีโครงสร้าง) ส่วนประกอบเหล่านี้สามารถจัดระเบียบได้อย่างง่ายดาย และสามารถเข้าถึงส่วนประกอบใดส่วนหนึ่งได้ง่ายๆ โดยการระบุหมายเลขประจำเครื่อง

    คำอธิบายประเภทอาร์เรย์มีการระบุดังนี้:

    <имя типа>= อาร์เรย์[<сп.инд.типов>] ของ<тип>;

    ที่นี่<имя типа>- ตัวระบุที่ถูกต้อง อาร์เรย์ของ- คำสงวน (อาร์เรย์, จาก);<сп.инд.типов>- รายการประเภทดัชนีตั้งแต่หนึ่งรายการขึ้นไป คั่นด้วยเครื่องหมายจุลภาค วงเล็บเหลี่ยมที่จัดกรอบรายการเป็นข้อกำหนดด้านไวยากรณ์<тип>- Object Pascal ประเภทใดก็ได้

    ประเภทลำดับใดๆ ที่มีความจุไม่เกิน 2 GB สามารถใช้เป็นประเภทดัชนีใน Object Pascal ได้ (เช่น ยกเว้น คำยาวและ Int64)

    ความลึกของการซ้อนของประเภทที่มีโครงสร้างโดยทั่วไป และผลที่ตามมาของอาร์เรย์ จะขึ้นอยู่กับอำเภอใจ ดังนั้นจำนวนองค์ประกอบในรายการประเภทดัชนี (ขนาดอาร์เรย์) จึงไม่จำกัด อย่างไรก็ตาม ความยาวรวมของการแสดงภายในของใดๆ อาร์เรย์ต้องไม่เกิน 2 GB ในหน่วยความจำพีซี องค์ประกอบอาเรย์จะติดตามซึ่งกันและกันในลักษณะที่เมื่อย้ายจากที่อยู่ต่ำไปสูง ดัชนีขวาสุดของอาเรย์จะเปลี่ยนแปลงเร็วที่สุด

    ใน Object Pascal คุณสามารถใช้ตัวดำเนินการมอบหมายตัวเดียวเพื่อถ่ายโอนองค์ประกอบทั้งหมดของอาร์เรย์หนึ่งไปยังอีกอาร์เรย์ประเภทเดียวกันได้

    1.2.2 บันทึก

    บันทึก เป็นโครงสร้างข้อมูลที่ประกอบด้วยองค์ประกอบจำนวนคงที่ที่เรียกว่าเขตข้อมูลของบันทึก ส่วนประกอบ (ฟิลด์) ของเรกคอร์ดอาจมีประเภทต่างๆ ต่างจากอาร์เรย์ เพื่อให้สามารถอ้างอิงถึงองค์ประกอบหนึ่งหรือองค์ประกอบอื่นของเรกคอร์ด ฟิลด์ต่างๆ จะถูกตั้งชื่อ

    โครงสร้างของการประกาศประเภทโพสต์คือ:

    <имятипа>=บันทึก<сп.полей>จบ;

    ที่นี่<имя типа>- ตัวระบุที่ถูกต้อง บันทึก/สิ้นสุด- คำสงวน (บันทึก, จบ);<сп.полей>- รายชื่อสาขา; คือลำดับของส่วนของบันทึกที่คั่นด้วยเครื่องหมายอัฒภาค

    แต่ละส่วนของเรกคอร์ดประกอบด้วยตัวระบุฟิลด์ตั้งแต่หนึ่งตัวขึ้นไป โดยคั่นด้วยเครื่องหมายจุลภาค

    เสนอ กรณี...ของซึ่งเปิดส่วนของตัวแปรนั้น มีลักษณะเผินๆ คล้ายกับโอเปอเรเตอร์การเลือกที่สอดคล้องกัน แต่ในความเป็นจริงแล้ว มีบทบาทเป็นคำบริการประเภทหนึ่งที่แสดงถึงจุดเริ่มต้นของส่วนของตัวแปรเท่านั้น นั่นคือเหตุผลที่คุณไม่ควรใส่ในตอนท้ายของส่วนตัวแปร จบเหมือนเป็นคู่รัก กรณี...ของ- (เนื่องจากส่วนของตัวแปรจะเป็นส่วนสุดท้ายในบันทึกเสมอ จึงยังคงตามมาด้วยส่วนท้าย แต่เป็นคู่ที่จะบันทึกเท่านั้น) ปุ่มเลือกประโยค กรณี...ของถูกละเว้นอย่างมีประสิทธิภาพโดยคอมไพเลอร์: ข้อกำหนดเดียวใน Object Pascal คือคีย์จะกำหนดประเภทมาตรฐานหรือประเภทลำดับที่ประกาศไว้ล่วงหน้า

    ชื่อฟิลด์ต้องไม่ซ้ำกันภายในเรคคอร์ดที่มีการประกาศ อย่างไรก็ตาม หากเรคคอร์ดมีฟิลด์เรคคอร์ด นั่นคือ ซ้อนกันอยู่ภายใน ชื่อสามารถทำซ้ำได้ในระดับการซ้อนที่แตกต่างกัน

    1.2.3 ชุด

    ชุด - สิ่งเหล่านี้คือชุดของวัตถุประเภทเดียวกันที่เกี่ยวข้องกันทางตรรกะ ลักษณะของความสัมพันธ์ระหว่างอ็อบเจ็กต์นั้นเป็นเพียงโปรแกรมเมอร์เท่านั้นที่บ่งบอกเป็นนัย และไม่ได้ถูกควบคุมโดย Object Pascal ในทางใดทางหนึ่ง จำนวนองค์ประกอบที่รวมอยู่ในชุดอาจแตกต่างกันได้ตั้งแต่ 0 ถึง 256 (ชุดที่ไม่มีองค์ประกอบเรียกว่าว่างเปล่า) มันเป็นความไม่แน่นอนของจำนวนองค์ประกอบที่ตั้งค่าแตกต่างจากอาร์เรย์และบันทึก

    สองชุดจะถือว่าเท่ากันก็ต่อเมื่อองค์ประกอบทั้งหมดเหมือนกัน และลำดับขององค์ประกอบในชุดนั้นไม่แยแส หากองค์ประกอบทั้งหมดของชุดหนึ่งรวมอยู่ในอีกชุดหนึ่งด้วย พวกเขาบอกว่าชุดแรกจะรวมอยู่ในชุดที่สอง ชุดเปล่าจะรวมอยู่ในชุดอื่น

    คำอธิบายของประเภทชุดคือ:

    <имя типа>= ชุดของ<базовый тип>;

    ที่นี่<имя типа>- ตัวระบุที่ถูกต้อง ชุดของ- คำสงวน (ชุด, จาก);<базовый тип>- ประเภทพื้นฐานขององค์ประกอบชุด ซึ่งสามารถเป็นประเภทลำดับใดก็ได้ ยกเว้น Word, จำนวนเต็ม, Longint, Int64 .

    ในการกำหนดเซ็ต จะใช้สิ่งที่เรียกว่าตัวสร้างเซ็ต: รายการข้อกำหนดขององค์ประกอบของเซ็ต คั่นด้วยเครื่องหมายจุลภาค รายการจะล้อมรอบด้วยวงเล็บเหลี่ยม ข้อมูลจำเพาะขององค์ประกอบอาจเป็นค่าคงที่หรือนิพจน์ของประเภทฐาน หรือประเภทช่วงของประเภทฐานเดียวกัน

    โครงสร้างภายในของชุดนั้นแต่ละองค์ประกอบถูกกำหนดให้เป็นเลขฐานสองหนึ่งหลัก (หนึ่งบิต) หากองค์ประกอบรวมอยู่ในชุด บิตที่เกี่ยวข้องจะมีค่าเป็น 1 มิฉะนั้น - 0 ในเวลาเดียวกัน หน่วยหน่วยความจำขั้นต่ำคือหนึ่งไบต์ที่มี 8 บิต ดังนั้นคอมไพเลอร์จึงจัดสรรหนึ่งไบต์ให้กับชุด และ ส่งผลให้แต่ละธาตุมีความจุเท่ากันถึง 8 ธาตุ ความจุสูงสุดของชุดคือ 256 องค์ประกอบ สำหรับชุดดังกล่าว คอมไพลเลอร์จะจัดสรรไบต์ที่อยู่ติดกัน 16 ไบต์

    และอีกหนึ่งการทดลอง: เปลี่ยนช่วงของประเภทฐานเป็น 1..256 แม้ว่าความจุขององค์ประกอบประเภทนี้คือ 256 องค์ประกอบ แต่เมื่อพยายามคอมไพล์โปรแกรม คอมไพลเลอร์จะรายงานข้อผิดพลาด: ชุดอาจมีองค์ประกอบได้มากที่สุด 256 องค์ประกอบ เนื่องจากการกำหนดหมายเลขขององค์ประกอบชุดเริ่มต้นจากศูนย์โดยไม่คำนึงถึงขอบเขตล่างที่ประกาศในโปรแกรม คอมไพลเลอร์อนุญาตให้ใช้เป็นประเภทฐานของประเภทช่วงจำนวนเต็มที่มีขอบเขตขั้นต่ำ 0 และสูงสุด 255 หรือประเภทแจกแจงใดๆ ที่มีองค์ประกอบไม่เกิน 256 องค์ประกอบ (จำนวนสมาชิกสูงสุดของประเภทแจกแจงคือ 65536 องค์ประกอบ)

    1.3 สตริง

    ประเภทต่อไปนี้ใช้สำหรับการประมวลผลข้อความใน Object Pascal:

    สายสั้น shortStringหรือ สตริง [n]ที่ไหน<= 255;

    สายยาว เชือก ;

    เส้นกว้าง ไวด์สตริง ;

    สตริงเทอร์มินัล null แพร์ .

    สิ่งที่ประเภทเหล่านี้มีเหมือนกันคือ แต่ละสตริงจะถือเป็นอาร์เรย์อักขระหนึ่งมิติ จำนวนอักขระที่สามารถเปลี่ยนแปลงได้ในโปรแกรมที่รันอยู่: สำหรับสตริง [n] ความยาวของสตริงจะเปลี่ยนจาก 0 เป็น n สำหรับ เชือกและ แพร์- ตั้งแต่ 0 ถึง 2 GB

    Standard Pascal ใช้เฉพาะสตริงสั้นเท่านั้น สตริง [n]- ในหน่วยความจำ สตริงดังกล่าวได้รับการจัดสรรไบต์ n+i ไบต์แรกมีความยาวปัจจุบันของสตริง และอักขระเหล่านั้นเริ่มต้นจากไบต์ที่ 2 เนื่องจากความยาวของสตริงในกรณีนี้คือหนึ่งไบต์ ความยาวสูงสุดของสตริงแบบสั้นต้องไม่เกิน 255 อักขระ ประเภทมาตรฐานใช้ในการประกาศสตริงสั้นที่มีความยาวสูงสุด ShortString(เทียบเท่า สตริง).

    Windows ใช้สตริงเทอร์มินัล null อย่างกว้างขวาง ซึ่งเป็นสตริงอักขระที่คั่นด้วยอักขระ #o ความยาวสูงสุดของสตริงดังกล่าวถูกจำกัดโดยหน่วยความจำที่มีอยู่เท่านั้น และอาจมีขนาดใหญ่มากได้

    มีการแนะนำประเภทใหม่ใน Delphi เวอร์ชัน 32 บิต เชือกผสมผสานความสะดวกสบายทั้งสองประเภทเข้าด้วยกัน เมื่อทำงานกับประเภทนี้ หน่วยความจำจะถูกจัดสรรตามความจำเป็น (แบบไดนามิก) และถูกจำกัดโดยหน่วยความจำที่มีอยู่สำหรับโปรแกรม

    1.4 พอยน์เตอร์และหน่วยความจำแบบไดนามิก

    1.4.1 หน่วยความจำแบบไดนามิก

    หน่วยความจำแบบไดนามิก- นี่คือ PC RAM ที่มอบให้กับโปรแกรมระหว่างการทำงาน การจัดวางข้อมูลแบบไดนามิกหมายถึงการใช้หน่วยความจำแบบไดนามิกโดยตรงในขณะที่โปรแกรมกำลังทำงาน ในทางตรงกันข้าม การจัดสรรแบบคงที่จะกระทำโดยคอมไพเลอร์ Object Pascal เมื่อโปรแกรมถูกคอมไพล์ ด้วยตำแหน่งแบบไดนามิก ทำให้ไม่ทราบประเภทหรือจำนวนข้อมูลที่จะวางล่วงหน้า

    1.4.2 ป้ายบอกทาง

    PC RAM คือชุดของเซลล์สำหรับจัดเก็บข้อมูล - ไบต์ ซึ่งแต่ละเซลล์มีหมายเลขของตัวเอง หมายเลขเหล่านี้เรียกว่าที่อยู่ ซึ่งช่วยให้คุณเข้าถึงไบต์ของหน่วยความจำได้ Object Pascal ช่วยให้โปรแกรมเมอร์มีวิธีการที่ยืดหยุ่นในการจัดการหน่วยความจำแบบไดนามิก - ที่เรียกว่าพอยน์เตอร์ ตัวชี้คือตัวแปรที่มีที่อยู่ของไบต์ของหน่วยความจำเป็นค่า การใช้พอยน์เตอร์ทำให้คุณสามารถวางประเภทข้อมูลใดๆ ที่รู้จักใน Object Pascal ลงในหน่วยความจำแบบไดนามิกได้ เพียงบางส่วนเท่านั้น ( ไบต์, Char, ShortInt, บูลีน) ครอบครองหนึ่งไบต์ในการเป็นตัวแทนภายใน ส่วนที่เหลือ - หลายไบต์ที่อยู่ติดกัน ดังนั้นตัวชี้จึงระบุเฉพาะไบต์แรกของข้อมูลเท่านั้น

    โดยทั่วไปแล้ว ตัวชี้จะเชื่อมโยงกับข้อมูลบางประเภท เราจะเรียกพอยน์เตอร์ดังกล่าวว่าพิมพ์ หากต้องการประกาศตัวชี้ที่พิมพ์ ให้ใช้ไอคอน ^ ซึ่งอยู่ด้านหน้าประเภทที่เกี่ยวข้อง

    ใน Object Pascal คุณสามารถประกาศพอยน์เตอร์ได้โดยไม่ต้องเชื่อมโยงกับประเภทข้อมูลเฉพาะใดๆ มีการใช้ประเภทมาตรฐานสำหรับสิ่งนี้ ตัวชี้, ตัวอย่างเช่น:

    พอยน์เตอร์ประเภทนี้จะเรียกว่าไม่ได้พิมพ์ เนื่องจากพอยน์เตอร์ที่ไม่ได้พิมพ์ไม่เชื่อมโยงกับประเภทใดประเภทหนึ่ง จึงสามารถใช้เพื่อจัดสรรข้อมูลที่มีการเปลี่ยนแปลงโครงสร้างและประเภทแบบไดนามิกในขณะที่โปรแกรมทำงาน

    ดังที่ได้กล่าวไปแล้ว ค่าของพอยน์เตอร์คือที่อยู่ของตัวแปรในหน่วยความจำ ดังนั้นคุณจึงคาดหวังว่าค่าของพอยน์เตอร์ตัวหนึ่งสามารถส่งผ่านไปยังอีกตัวหนึ่งได้ อันที่จริงสิ่งนี้ไม่เป็นความจริงทั้งหมด ใน Object Pascal คุณสามารถส่งค่าระหว่างพอยน์เตอร์ที่เกี่ยวข้องกับประเภทข้อมูลเดียวกันเท่านั้น

    1.4.3 การจัดสรรและการเพิ่มหน่วยความจำแบบไดนามิก

    หน่วยความจำไดนามิกทั้งหมดใน Object Pascal จะถือเป็นอาร์เรย์ไบต์ต่อเนื่อง ซึ่งเรียกว่าฮีป

    หน่วยความจำสำหรับตัวแปรที่จัดสรรแบบไดนามิกใด ๆ จะถูกจัดสรรโดยขั้นตอนใหม่ พารามิเตอร์สำหรับการเรียกขั้นตอนนี้คือตัวชี้ที่พิมพ์ จากผลของการเข้าถึง ตัวชี้จะได้รับค่าที่สอดคล้องกับที่อยู่ที่สามารถวางข้อมูลได้ ค่าที่ตัวชี้ชี้ไป นั่นคือข้อมูลจริงที่จัดสรรให้กับฮีป จะถูกระบุด้วยเครื่องหมาย ^ ซึ่งวางอยู่หลังตัวชี้ทันที หากไม่มีเครื่องหมาย ^ หลังตัวชี้ แสดงว่าเป็นที่ตั้งของข้อมูล มันสมเหตุสมผลแล้วที่จะคิดอีกครั้งเกี่ยวกับสิ่งที่เพิ่งพูดไป: ค่าของตัวชี้คือที่อยู่ และเพื่อระบุว่าเราไม่ได้พูดถึงที่อยู่ แต่เกี่ยวกับข้อมูลที่อยู่ในที่อยู่นี้ a ^ จะถูกวางไว้หลัง ตัวชี้ (บางครั้งเรียกว่าตัวชี้แบบ dereferencing)

    ข้อมูลที่จัดสรรแบบไดนามิกสามารถใช้ที่ใดก็ได้ในโปรแกรมที่ถูกต้องสำหรับค่าคงที่และตัวแปรประเภทที่เหมาะสม

    หน่วยความจำแบบไดนามิกไม่เพียงแต่สามารถนำมาจากฮีปเท่านั้น แต่ยังส่งคืนกลับมาอีกด้วย เมื่อต้องการทำเช่นนี้ ให้ใช้ขั้นตอนการกำจัด ตัวอย่างเช่น ตัวดำเนินการ

    กำจัด(pJ);

    กำจัด(pR);

    จะกลับไปยังฮีปหน่วยความจำที่เคยกำหนดไว้ให้กับตัวชี้ pJ และ pR (ดูด้านบน)

    โปรดทราบว่าขั้นตอน Dispose (pPtr) จะไม่เปลี่ยนค่าของตัวชี้ pPtr แต่จะส่งคืนหน่วยความจำก่อนหน้านี้ที่เกี่ยวข้องกับตัวชี้นี้ไปยังฮีปเท่านั้น อย่างไรก็ตาม การนำขั้นตอนนี้ไปใช้กับตัวชี้อิสระจะส่งผลให้เกิดข้อผิดพลาดรันไทม์ โปรแกรมเมอร์สามารถทำเครื่องหมายตัวชี้ที่ว่างด้วยคำสงวน nil

    1.5 พิมพ์นามแฝง

    สำหรับประเภทใดๆ คุณสามารถประกาศนามแฝงได้มากเท่าที่คุณต้องการ ตัวอย่างเช่น:

    TMyInteger = จำนวนเต็ม;

    ในอนาคต สามารถใช้นามแฝงได้ในลักษณะเดียวกับประเภทพื้นฐาน:

    Mylnt: TMyInteger;

    Mylnt:= 2*รอบ(pi);

    นามแฝงประเภทนี้มักใช้เพื่อปรับปรุงการมองเห็นโค้ดโปรแกรม อย่างไรก็ตาม ใน Object Pascal คุณสามารถประกาศนามแฝงที่พิมพ์อย่างยิ่งได้โดยเพิ่มประเภทคำสงวนไว้หน้าชื่อของประเภทพื้นฐาน:

    TMyIntegerType = พิมพ์จำนวนเต็ม;

    MylntVar: TMyIntegerType;

    จากมุมมองของคอมไพลเลอร์ นามแฝงที่พิมพ์เข้ากันได้กับประเภทฐานในนิพจน์ประเภทต่างๆ แต่จริงๆ แล้วนามแฝงจะประกาศประเภทข้อมูลใหม่ ดังนั้นจึงไม่สามารถใช้เป็นพารามิเตอร์อย่างเป็นทางการสำหรับการเรียกรูทีนย่อยแทนประเภทฐานได้ เช่น หากมีการประกาศขั้นตอนปฏิบัติ

    ฟังก์ชัน MylntFunc (APar: จำนวนเต็ม): จำนวนเต็ม;

    ถ้าอย่างนั้นก็อุทธรณ์ต่อเธอ

    MylntFunc(MylntVar)

    จะถือว่าคอมไพเลอร์มีข้อผิดพลาด

    นามแฝงที่พิมพ์อย่างแน่นหนาบังคับให้คอมไพเลอร์สร้างข้อมูลประเภทรันไทม์ (RTTI) โดยปกติแล้วข้อมูลนี้จะถูกใช้โดยสภาพแวดล้อม Delphi เพื่อรองรับการทำงานของโปรแกรมแก้ไขประเภทต่างๆ