รูทีนย่อยในการนำเสนอตัวอย่าง Pascal ขั้นตอนและหน้าที่ในการนำเสนอปาสคาลสำหรับบทเรียนวิทยาการคอมพิวเตอร์และไอซีที (ป.11) ในหัวข้อ III. คำอธิบายของวัสดุใหม่

การเรียกซ้ำในภาษาปาสคาลครู: Tlekhurai Yu.V. สถาบันการศึกษาเทศบาล "สถานศึกษาที่ 8" คุณเห็นอะไรในภาพเขียน? ปรากฏการณ์ทางศิลปะนี้เรียกว่า การเรียกซ้ำ “เพื่อที่จะเข้าใจการเรียกซ้ำ คุณต้องเข้าใจการเรียกซ้ำก่อน” การเรียกซ้ำ - คำจำกัดความบางส่วนของวัตถุผ่านตัวมันเอง คำจำกัดความของวัตถุโดยใช้วัตถุที่กำหนดไว้ก่อนหน้านี้

พูดตามหลักวิทยาศาสตร์:

การเรียกซ้ำ

- วิธีการกำหนดคลาสของอ็อบเจ็กต์หรือเมธอดโดยการระบุกรณีหรือเมธอดพื้นฐานตั้งแต่หนึ่งกรณีขึ้นไป (โดยปกติจะเป็นแบบง่าย) จากนั้นระบุกฎเกณฑ์สำหรับการสร้างคลาสที่ถูกกำหนดไว้บนพื้นฐานปีเตอร์ ดอยช์ ปีเตอร์ ดอยช์ การทำซ้ำของมนุษย์การเรียกซ้ำมาจากพระเจ้า การเรียกซ้ำในวิชาฟิสิกส์เมื่อสัญญาณจากเอาต์พุตไปถึงอินพุตจะถูกขยายอีกครั้งถึงอินพุตของวงจรและถูกขยายอีกครั้ง แอมพลิฟายเออร์ที่โหมดการทำงานนี้เป็นมาตรฐานเรียกว่าออสซิลเลเตอร์ในตัว ตัวอย่างของรายการพจนานุกรมแบบเรียกซ้ำ: "The Priest has a dog..." - การเรียกซ้ำทั่วไป เรื่องราวต่างๆ ของ Stanislaw Lem กล่าวถึงเหตุการณ์ที่มีการเรียกซ้ำอย่างไม่สิ้นสุด: เรื่องราวเกี่ยวกับสุสาน (“The Star Diaries of John the Quiet”) ซึ่งฮีโร่ย้ายจากบทความเกี่ยวกับสุสานไปยังบทความเกี่ยวกับการแยกศพอย่างต่อเนื่อง จากที่นั่นไปยังบทความเกี่ยวกับสุสานซึ่งมีการอ้างอิงถึงบทความ " sepulcaria" อีกครั้งเรื่องราวเกี่ยวกับเครื่องจักรอัจฉริยะที่มีความเฉลียวฉลาดและความเกียจคร้านเพียงพอที่จะสร้างเครื่องจักรที่คล้ายกันเพื่อแก้ปัญหาที่กำหนด และมอบความไว้วางใจในการแก้ปัญหา (ผลลัพธ์คือการเรียกซ้ำไม่รู้จบ เมื่อเครื่องจักรใหม่แต่ละเครื่องสร้างเครื่องจักรที่คล้ายกันและมอบหมายงานให้ มัน).

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

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

ตัวอย่าง. การคำนวณแฟกทอเรียลของจำนวนธรรมชาติ สร้างฟังก์ชันแบบเรียกซ้ำที่คำนวณแฟกทอเรียลของจำนวน n ดังนี้ ฟังก์ชัน f (n: จำนวนเต็ม): longint; คำอธิบายของตัวแปร: n – จำนวนองค์ประกอบของอนุกรม; a, b – ค่าของสององค์ประกอบสุดท้ายของอนุกรม; c – ตัวแปรบัฟเฟอร์ (“สำรอง”); ฉัน – เคาน์เตอร์ อัลกอริทึมสำหรับการแก้ปัญหา: 1. รับค่าของ n 2. กำหนดค่า 0 และ 1 ให้กับ a และ b ตามลำดับ (นี่คือตัวเลขแรกของชุดฟีโบนัชชี) แสดงไว้บนหน้าจอ 3. เริ่มต้นจากองค์ประกอบที่ 3 ถึง n: a) แสดงผลรวมของ a และ b, b) เก็บค่าของตัวแปร b ใน c, c) เขียนผลรวมของ a และ b ถึง b, d) กำหนดค่า a ของค. โปรแกรม Pascal โดยใช้การวนซ้ำ: โปรแกรมฟีโบนัชชี; var a,b,c,i,n: จำนวนเต็ม; เริ่ม เขียน("n = "); อ่าน(n); ก:= 0; เขียน(ก," "); ข:= 1; เขียน(ข," "); สำหรับ i:=3 ถึง n จะเริ่มต้น เขียน(a+b," ");ค:=ข;<= 1 Then f:= n else f:= f(n– 1) + f(n - 2); end; Program chislaFibonacci; var n,i: integer; a: longint; function fib (n: integer): longint; begin If n <= 1 Then fib:= n else fib:= fib(n– 1) + fib(n - 2); End; begin write(‘n=’); readln(n); for i:=0 to n do begin A:= fib (n); write (‘ ’,a); end; readln; end. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа ข:= ก + ข;ก:=ค; จบ;อ่าน; ข:= ก + ข;= จบ.โปรแกรมปาสคาลใช้การเรียกซ้ำ: ข:= ก + ข;,คำจำกัดความแบบเรียกซ้ำสำหรับการคำนวณตัวเลขฟีโบนักชีมีดังต่อไปนี้: คำจำกัดความของตัวเลขฟีโบนักชีนี้สามารถแปลงเป็นฟังก์ชันแบบเรียกซ้ำได้อย่างง่ายดาย: function f(n: Integer) : longint;อ่าน; ข:= ก + ข;>จบ.โปรแกรมปาสคาลใช้การเรียกซ้ำ: ข:= ก + ข;,เริ่มต้น ถ้า nและ,ข.อ่าน; ข:= ก + ข;< จบ.โปรแกรมปาสคาลใช้การเรียกซ้ำ: ข:= ก + ข;,เริ่มต้น ถ้า nข:= ก + ข;,ถ้า

  • จากนั้นโหนด (
  • ข)=ก.
  • ข)=
  • โหนด (

ก -ข

งาน. สร้างโปรแกรมแบบเรียกซ้ำที่จะแก้ปัญหาด้านบนเกี่ยวกับหอคอยฮานอยด้วยจำนวนดิสก์เท่ากับ n (n = 1, 2, ...) สารละลาย. มากรอกชื่อยอดแหลมกัน:ก ข ค - อนุญาตฮานอย(n,a,b,c) - ฟังก์ชั่นที่จำเป็นที่ส่งคืนลำดับการเคลื่อนไหวของดิสก์ด้วยบนโดยใช้- ฟังก์ชั่นที่จำเป็นที่ส่งคืนลำดับการเคลื่อนไหวของดิสก์ด้วยบนตามกฎที่อธิบายไว้ข้างต้น เมื่อ n=1 เรารู้วิธีการแก้ปัญหา คุณเพียงแค่ต้องดำเนินการ "ย้าย" - ฟังก์ชั่นที่จำเป็นที่ส่งคืนลำดับการเคลื่อนไหวของดิสก์ด้วย- สมมติว่าเราสามารถแก้ไขปัญหานี้สำหรับดิสก์ n – 1 ได้ ย้ายดิสก์ n–1 จากกับ - ฟังก์ชั่นที่จำเป็นที่ส่งคืนลำดับการเคลื่อนไหวของดิสก์ด้วยบน- จากนั้นให้ย้ายดิสก์ที่เหลือหนึ่งแผ่นจาก โดยใช้และในที่สุดก็ย้ายดิสก์ n–1 จาก บน. บนป้อนข้อมูล : จำนวนแผ่นดิสก์บนหมุด a;สำนักพิมพ์ : ลำดับของการกระทำ; Step0:(กำหนดประเภทตัวแปร); ขั้นตอนที่ 1: (คำอธิบายขั้นตอนฮานอยซึ่งแสดงลำดับการดำเนินการ); ขั้นตอนที่ 1.1:(ย้าย (n-1) ดิสก์จาก peg a ไปยัง peg b);

  • ขั้นตอนที่ 1.2:(ย้ายดิสก์ที่ n จาก a ไปยัง c);
  • ขั้นตอนที่ 1.3:(ย้าย (n-1) ดิสก์จาก b ไปยัง c);
  • (ขั้นตอนที่ 1.2-1.3 ดำเนินการซ้ำ);
  • Step2:(โปรแกรมหลัก);
  • ขั้นตอนที่ 2.1:(ใส่จำนวนดิสก์);
  • ขั้นตอนที่ 2.2: (เรียกขั้นตอนฮานอย)
  • การแก้ปัญหาในโปรแกรม Pascal bahnya; var n: จำนวนเต็ม;ก,ข,ค: ถ่าน;
  • ขั้นตอนฮานอย (n: จำนวนเต็ม; a, b, c: char);
  • เริ่มต้นถ้า n>0 แล้วเริ่มต้น hanoi(n-1,a,c,b);
  • ค้นหาจำนวนจำนวนบวกระหว่างสี่ A, B, C, D
คำตอบสำหรับงานอิสระหมายเลข 2 โปรแกรมง่ายๆ<>var n, m, s: จำนวนเต็ม;

ฟังก์ชั่น prost (m, n: จำนวนเต็ม): บูลีน;

เริ่มต้น ถ้า n = m จากนั้น prost:= true อย่างอื่น prost:= (n mod m

0) และต่อมลูกหมาก (m+1, n);

จบ; เริ่มเขียน('n=');

อ่าน(n);


ม:=2;


ถ้า prost(m,n) ให้เขียน (n,’prostoechislo’) หรือเขียนอย่างอื่น (n,’sostavnoe’);


อ่าน;




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


ตัวอย่างที่ 1: ขั้นตอนที่ไม่มีพารามิเตอร์ที่พิมพ์สตริงดาว 60 ดวง ขั้นตอนราคา; var i: จำนวนเต็ม ; เริ่มต้นสำหรับ i:=1 ถึง 60 do write (* "); writeln; end; beginning pr; end.


ตัวอย่างที่ 2 สร้างโปรแกรมสำหรับสลับตัวเลขสองตัว c=5 และ d=7 โปรแกรม obmenDan var c,d:จำนวนเต็ม; การแลกเปลี่ยนขั้นตอน (a,b:จำนวนเต็ม); var m:จำนวนเต็ม; เริ่มต้น ม.:=a; ก:=ข; ข:=ม; writeln(ก,ข); จบ; start writeln("ใส่ตัวเลข 2 ตัว: "); อ่าน(c,d); แลกเปลี่ยน(c,d); writeln(c," ",d); จบ. c5 d 7 a 5 b 7 1) เมื่อเรียกโพรซีเดอร์ obmen ด้วยพารามิเตอร์สองตัว 5 และ 7 ตัวเลข 5 และ 7 เดียวกันจะถูกวางไว้ในตัวแปร a และ b ตามลำดับ: 2) จากนั้นในโพรซีเดอร์ค่าของหน่วยความจำ เซลล์ a และ b ถูกจัดเรียงใหม่: c5 d 7 a 7 b 5 3) แต่ในตัวแปร c และ d ข้อมูลไม่เปลี่ยนแปลงเพราะ พวกมันอยู่ในเซลล์หน่วยความจำอื่น


เพื่อให้ตัวแปร c และ d, a และ b อ้างถึงเซลล์หน่วยความจำเดียวกัน (หากค่าของ a และ b เปลี่ยนแปลงค่าของ c, d ก็จะเปลี่ยนไปด้วย) เมื่ออธิบายพารามิเตอร์ที่เป็นทางการ จำเป็นต้องเพิ่มคำว่า VAR ก่อนตัวแปรที่ต้องการ: การแลกเปลี่ยนโพรซีเดอร์ (var a,b:integer); с5 วัน 7 ก


ตัวอย่างที่ 3 กำหนดให้อาร์เรย์จำนวนเต็มต่างกัน 3 อาร์เรย์ (ขนาดของแต่ละอาร์เรย์ไม่เกิน 15) ในแต่ละอาร์เรย์ ให้ค้นหาผลรวมขององค์ประกอบและค่าเฉลี่ยเลขคณิต โปรแกรม proc; var i, n, sum: จำนวนเต็ม; sr: จริง; ขั้นตอนการทำงานของ (r:integer; var s:integer; var s1:real); var mas: อาร์เรย์ของจำนวนเต็ม ; เจ:จำนวนเต็ม; เริ่มต้น s:=0; สำหรับ j:=1 ถึง r เริ่มอ่าน (mas[j]); s:=s+mas[เจ]; จบ; s1:=s/r; จบ;


(โปรแกรมหลัก) เริ่มต้นสำหรับ i:=1 ถึง 3 เริ่มเขียน ("Vvedite razmer",i, "masiva: "); อ่าน(n); งาน(n, ผลรวม, sr); (งานขั้นตอนการโทร) writeln ("Summa elementov = ",sum); writeln("Srednearifmeticheskoe = ",sr:4:1); จบ; จบ.


ผลลัพธ์ของโปรแกรม: โปรแกรมเรียกขั้นตอนการทำงานสามครั้ง ซึ่งตัวแปรทางการ r, s, s1 จะถูกแทนที่ด้วยค่าจริง n, sum, sr ขั้นตอนป้อนองค์ประกอบอาร์เรย์ คำนวณผลรวมและค่าเฉลี่ย ตัวแปร s และ s1 จะถูกส่งกลับไปยังโปรแกรมหลัก ดังนั้นคำว่าบริการ var จะถูกวางไว้หน้าคำอธิบาย พารามิเตอร์เฉพาะที่ mas, j ใช้ได้เฉพาะในขั้นตอนเท่านั้น Global - i, n, sum, sr มีให้ตลอดโปรแกรม


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




ตัวอย่างที่ 4 เขียนฟังก์ชันรูทีนย่อยระดับ a x โดยที่ a, x เป็นตัวเลขใดๆ ลองใช้สูตร: a x = e x ln โปรแกรม p2; var f, b, s, t, c, d: จริง; (ตัวแปรโกลบอล) ฟังก์ชั่น stp (a, x: real) : real; var y: จริง; (ตัวแปรท้องถิ่น) เริ่มต้น y:= exp (x * ln (a)) ; stp:= y;(การกำหนดชื่อฟังก์ชันให้กับผลลัพธ์ของการคำนวณรูทีนย่อย) สิ้นสุด; (คำอธิบายฟังก์ชันเสร็จสมบูรณ์) เริ่มต้น d:= stp (2.4, 5); (การคำนวณกำลังของตัวเลขและตัวแปรต่างๆ) writeln (d, stp (5,3.5)); อ่าน(f, b, s, t); c:= stp (f, s)+stp (b, t); เขียน(c); จบ.


ฟังก์ชัน รูทีนย่อยเป็นส่วนหนึ่งของโปรแกรม ซึ่งได้รับการออกแบบให้เป็นโครงสร้างวากยสัมพันธ์ที่แยกจากกัน และมาพร้อมกับชื่อ (บล็อกโปรแกรมอิสระ) สำหรับการแก้ปัญหาแต่ละรายการ คำอธิบายของขั้นตอน: ขั้นตอน () (ส่วนสำหรับการดำเนินการชื่อท้องถิ่น) เริ่มต้น (ส่วนสำหรับการดำเนินการดำเนินการ) สิ้นสุด; คำอธิบายฟังก์ชั่น: ฟังก์ชั่น (): ประเภท; (ส่วนสำหรับอธิบายชื่อท้องถิ่น) Begin (ส่วนสำหรับคำสั่งปฏิบัติการ) := ; (พารามิเตอร์ที่จำเป็น) สิ้นสุด; ขั้นตอนการเรียก: (); การเรียกใช้ฟังก์ชัน: := (); 1. ทางด้านขวาของผู้ปฏิบัติงานที่ได้รับมอบหมาย 2. ในการแสดงออกในเงื่อนไขของตัวดำเนินการแยกสาขา 3. ในขั้นตอนเอาต์พุตอันเป็นผลมาจากฟังก์ชัน คำอธิบายของรูทีนย่อยขั้นตอน


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


1 ฟังก์ชัน f (n: จำนวนเต็ม): จำนวนเต็ม; เริ่มต้นถ้า n = 1 แล้ว f:= 1 อื่น f:= n * f (n -1); (ฟังก์ชัน f เรียกตัวเองว่า" title="Example 5. สร้างฟังก์ชันแบบเรียกซ้ำที่คำนวณแฟกทอเรียลของจำนวน n ดังนี้: n! = 1 ถ้า n= 1 n!= (n -1)! · n ถ้า n > 1 ฟังก์ชัน f (n: จำนวนเต็ม): จำนวนเต็ม เริ่มต้น ถ้า n = 1 แล้ว f:= 1 อย่างอื่น f:= n * f (n -1);" class="link_thumb"> 19 !}ตัวอย่างที่ 5 สร้างฟังก์ชันแบบเรียกซ้ำที่คำนวณแฟกทอเรียลของจำนวน n ดังนี้: n! = 1 ถ้า n= 1 n!= (n -1)! · n ถ้า n > 1 ฟังก์ชัน f (n: จำนวนเต็ม): จำนวนเต็ม; เริ่มต้นถ้า n = 1 แล้ว f:= 1 อื่น f:= n * f (n -1); (ฟังก์ชัน f เรียกตัวเอง) สิ้นสุด; 1 ฟังก์ชัน f (n: จำนวนเต็ม): จำนวนเต็ม; เริ่มต้นถ้า n = 1 แล้ว f:= 1 อื่น f:= n * f (n -1); (ฟังก์ชั่น f เรียกตัวเอง"> 1 ฟังก์ชั่น f (n: จำนวนเต็ม): จำนวนเต็ม; เริ่มต้นถ้า n = 1 แล้ว f:= 1 อย่างอื่น f:= n * f (n -1); (ฟังก์ชัน f เรียกตัวเอง) สิ้นสุด; " > 1 ฟังก์ชัน f (n: integer): จำนวนเต็ม; เริ่มต้นถ้า n = 1 แล้ว f:= 1 อย่างอื่น f:= n * f (n -1); (ฟังก์ชัน f เรียกตัวเองว่า" title="Example 5 สร้างฟังก์ชันแบบเรียกซ้ำที่คำนวณแฟกทอเรียลของจำนวน n ดังนี้: n! = 1 if n= 1 n!= (n -1)! n if n > 1 function f (n: integer): integer; 1 จากนั้น f:= 1 อื่น f:= n * f (n -1);"> title="ตัวอย่างที่ 5 สร้างฟังก์ชันแบบเรียกซ้ำที่คำนวณแฟกทอเรียลของจำนวน n ดังนี้: n! = 1 ถ้า n= 1 n!= (n -1)! · n ถ้า n > 1 ฟังก์ชัน f (n: จำนวนเต็ม): จำนวนเต็ม; เริ่มต้นถ้า n = 1 แล้ว f:= 1 อื่น f:= n * f (n -1); (ฟังก์ชัน f เรียกตัวเอง"> !}




รูทีนย่อย วี เทอร์โบปาสคาล


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

เหตุผลในการใช้กิจวัตรประจำวัน

  • ลดความซับซ้อนของการพัฒนาโปรแกรมขนาดใหญ่โดยการแบ่งย่อย (แบ่ง) งานออกเป็นหลาย ๆ งานย่อย
  • การมองเห็นโปรแกรมมากขึ้น
  • ประหยัดหน่วยความจำ

ประเภทของรูทีนย่อย

ขั้นตอน

ฟังก์ชั่น

  • ขั้นตอนเป็นส่วนที่มีชื่ออิสระของโปรแกรมที่ออกแบบมาเพื่อดำเนินการเฉพาะ

ขั้นตอนที่ไม่มีพารามิเตอร์

  • รูปแบบการบันทึก :

ขั้นตอน ;

จบ ;

  • ตัวแปรทั้งหมดที่ใช้ในขั้นตอนที่ไม่มีพารามิเตอร์จะมีการอธิบายไว้ในโปรแกรมหลัก (ในโมดูล Var)

ตัวอย่าง . เขียนโปรแกรมหาปริมาตรของทรงกระบอก

กระบอกโปรแกรม

วาร์ R, H, V: จริง;

ขั้นตอนการป้อนข้อมูล ; (ขั้นตอนการป้อนข้อมูล)

Writeln('ระบุค่ารัศมี');

writeln('ระบุค่าความสูง');

สูตรขั้นตอน { ขั้นตอน การคำนวณ ปริมาณ }

วี: =PI*สแควร์(R)*H;

ขั้นตอนการส่งออก ; (ขั้นตอนการส่งออกผลลัพธ์)

writeln('V=',V);


ขั้นตอน โดยใช้ พารามิเตอร์

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

ขั้นตอน โดยใช้ พารามิเตอร์

  • ตัวแปรร่วม

ตัวอย่าง .

โปรแกรมซาดาชา;

Var a, b: จำนวนเต็ม;

ขั้นตอนท้องถิ่น

var a, x: ถ่าน; สำหรับ ขั้นตอน ท้องถิ่น:

เริ่ม ตัวแปร x – ตัวแปรท้องถิ่น

ก:=’! - (โปรแกรมไม่สามารถเปลี่ยนค่าได้)

ข:= ข +1; ตัวแปร บน – ตัวแปรโกลบอล

จบ ; (การเปลี่ยนแปลงค่าของตัวแปรนี้ทั้งหมดในขั้นตอน

BEGIN จะถูกบันทึกไว้แม้ว่าจะออกจากขั้นตอนแล้วก็ตาม)

ข:=100; ตัวแปร - ฟังก์ชั่นที่จำเป็นที่ส่งคืนลำดับการเคลื่อนไหวของดิสก์ด้วย ในโปรแกรมหลัก ประเภททั้งหมด

ท้องถิ่น ; และในขั้นตอน - ประเภทสัญลักษณ์ ตัวแปร

writeln('a =', a); ไม่มีประเภทจำนวนเต็มในขั้นตอนท้องถิ่น

writeln('b=',b);

ผลลัพธ์ของการรันโปรแกรม: a=0; ข =101.


- เริ่ม ; จบ ; "ความกว้าง="640"

การส่งผ่านพารามิเตอร์ไปที่ เทอร์โบ ปาสคาล

  • 1. การส่งผ่านพารามิเตอร์ตามค่า
  • พารามิเตอร์-ค่า ตัวแปรที่อธิบายไว้หลังชื่อขั้นตอนในวงเล็บ ไม่มีคำว่า Var อยู่ข้างหน้า
  • รูปแบบการบันทึก :

ขั้นตอน (:

ตัวแปร);

จบ ;


  • พารามิเตอร์ที่เป็นทางการ .
  • พารามิเตอร์จริง .

ตัวอย่าง .

พารามิเตอร์ของโปรแกรม

Var m, n: จำนวนเต็ม;

สรุปขั้นตอน (a, b: จำนวนเต็ม);

writeln('S=',S);

สรุป(ม,น); หรือผลรวม (100,10);

ตัวแปร - ฟังก์ชั่นที่จำเป็นที่ส่งคืนลำดับการเคลื่อนไหวของดิสก์ด้วย และ บน เป็นพารามิเตอร์ที่เป็นทางการและตัวแปร และ n - ข้อเท็จจริง ค่าพารามิเตอร์จริง =100 และ n =10 ถูกส่งไปยังพารามิเตอร์อย่างเป็นทางการ - ฟังก์ชั่นที่จำเป็นที่ส่งคืนลำดับการเคลื่อนไหวของดิสก์ด้วย และ บน .

การเปลี่ยนแปลงพารามิเตอร์จริงจะเกิดขึ้นภายในขั้นตอนเท่านั้น และไม่มีผลกระทบต่อพารามิเตอร์ภายนอกขั้นตอน


- ตัวแปร Var:); เริ่ม ; จบ ; "ความกว้าง="640"

การส่งผ่านพารามิเตอร์ไปที่ เทอร์โบ ปาสคาล

  • 2. การส่งผ่านพารามิเตอร์ตามชื่อ
  • พารามิเตอร์ตัวแปร ตัวแปรที่อธิบายหลังชื่อขั้นตอนในวงเล็บและนำหน้าด้วยคำบริการ Var
  • รูปแบบการบันทึก :

ขั้นตอน (:

ตัวแปร; วาร์

ตัวแปร:);

จบ ;



b แล้วก็นาที:= b; ถ้า min c แล้ว min:= c; จบ ; BEGIN writeln('ใส่ตัวเลขสามตัว'); อ่าน(a1, b1, c1); writeln('ใส่ตัวเลขสามตัว'); อ่าน(a2,b2,c2); ขั้นต่ำ(a1,b1,c1, min1); ขั้นต่ำ(a2,b2,c2,min2); ส:= นาที 1 + นาที 2; writeln('S=', S); จบ. ตัวอย่าง. ให้ตัวเลขสามเท่าสองตัว: a 1, b 1, c 1 และ a 2, b 2, c 2 ค้นหาค่าของผลรวม: S=min (a1, b1, c1) + min (a2, b2, c2) "ความกว้าง=" 640"

Var a1,b1,c1,a2,b2,c2, min1, min2, S: จริง;

ขั้นตอนขั้นต่ำ (a,b,c: จริง; Var min: จริง);

ถ้า min b แล้ว min:= b;

ถ้า min c แล้ว min:= c;

writeln('ใส่ตัวเลขสามตัว');

อ่าน(a1, b1, c1);

writeln('ใส่ตัวเลขสามตัว');

อ่าน(a2,b2,c2);

ขั้นต่ำ(a1,b1,c1, min1);

ขั้นต่ำ(a2,b2,c2, min2);

ส:= นาที 1 + นาที 2;

writeln('S=', S);

ตัวอย่าง- ให้ตัวเลขสามเท่าสองตัว: a 1, b 1, c 1 และ a 2, b 2, c 2 ค้นหาค่าของผลรวม: S=min (a1, b1, c1) + min (a2, b2, c2)


การทำงานเป็นรูทีนย่อยที่ผลลัพธ์เป็นค่าที่แน่นอน

  • รูปแบบการบันทึก :

การทำงาน (:

จบ ;

  • ในเนื้อความของฟังก์ชัน ชื่อฟังก์ชันจะต้องถูกกำหนดให้กับผลลัพธ์ของการดำเนินการ
  • เมื่อเรียกใช้ฟังก์ชัน จะต้องรวมชื่อพร้อมกับรายการพารามิเตอร์จริงไว้ในนิพจน์เป็นตัวถูกดำเนินการ

โปรแกรม vyrazenie;

โมดูลฟังก์ชัน (a: จริง) : จริง;

writeln('ป้อนค่าตัวแปร');

y:= โมดูล(x-3) + โมดูล(x+6);

writeln('y=', y);

ตัวอย่าง . คำนวณค่าของนิพจน์: y = | x -3 | - x +6 |

หากต้องการใช้ตัวอย่างการนำเสนอ ให้สร้างบัญชี Google และเข้าสู่ระบบ: https://accounts.google.com


คำอธิบายสไลด์:

ขั้นตอนและฟังก์ชันในภาษาปาสคาล การเรียกซ้ำ ดำเนินการโดยครูวิทยาการคอมพิวเตอร์ โรงเรียน GBOU 1362 Sanina Marina Sergeevna

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

ฟังก์ชันขั้นตอนรูทีนย่อย PROCEDURE FUNCTION

ขั้นตอนและฟังก์ชันในภาษา Pascal ได้รับการประกาศไว้ในส่วนการประกาศที่อยู่ด้านหลังส่วนตัวแปร

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

รูทีนย่อยยังมีตัวแปรอีกด้วย ซึ่งต่อมาเธอทำงานด้วย แบ่งออกเป็นสองประเภทอีกครั้ง: 1) ตัวแปรส่วนกลาง นั่นคือ ตัวแปรที่ทำหน้าที่ตลอดทั้งโปรแกรม 2) ตัวแปรเฉพาะที่ - ตัวแปรที่ทำหน้าที่ในขั้นตอนหรือฟังก์ชันเท่านั้น

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

โครงสร้างของโพรซีเดอร์คล้ายกับโครงสร้างของโปรแกรมและประกอบด้วยส่วนหัวและบล็อก (เนื้อหาของโพรซีเดอร์) ขั้นตอน ชื่อขั้นตอน; var ... start ...// ส่วนท้ายของขั้นตอน ; start //เนื้อความของโปรแกรมหลัก end

ขั้นตอนที่ไม่มีพารามิเตอร์ ขั้นตอน pr; var i: จำนวนเต็ม ; start for i:=1 to 60 do write (' * "); writeln ; end . beginning pr ; end. โปรแกรมนี้พิมพ์สตริงที่มีเครื่องหมายดอกจัน 60 อัน

ขั้นตอนด้วยพารามิเตอร์ สร้างโปรแกรมสำหรับสลับตัวเลขสองตัว c=5 และ d=7 โปรแกรม obmenDan ; var c,d:จำนวนเต็ม ; การแลกเปลี่ยนขั้นตอน (a,b:จำนวนเต็ม); var m:จำนวนเต็ม; เริ่มต้น ม.:=a; ก:=ข; ข:=ม; writeln(ก,ข); จบ; start writeln("ใส่ตัวเลข 2 ตัว: "); อ่าน(c,d); แลกเปลี่ยน (c,d) ; writeln(c," ",d); จบ.

การวิเคราะห์ปัญหา 1) เมื่อเรียกโพรซีเดอร์ obmen ด้วยพารามิเตอร์สองตัว 5 และ 7 ตัวเลข 5 และ 7 จะถูกวางไว้ในตัวแปร a และ b ตามลำดับ: c 5 d 7 a 5 b 7

เพื่อให้ตัวแปร c และ d, a และ b อ้างถึงเซลล์หน่วยความจำเดียวกัน (หากค่าของ a และ b เปลี่ยนแปลงค่าของ c, d ก็จะเปลี่ยนไปด้วย) เมื่ออธิบายพารามิเตอร์ที่เป็นทางการ จำเป็นต้องเพิ่มคำว่า VAR ก่อนตัวแปรที่ต้องการ: การแลกเปลี่ยนโพรซีเดอร์ (var a,b:integer); ค 5 วัน 7 ก

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

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

คำอธิบายฟังก์ชั่น: ฟังก์ชั่น () : ประเภท; (ส่วนคำอธิบายชื่อท้องถิ่น) เริ่มต้น (ส่วนคำสั่งปฏิบัติการ):=; (พารามิเตอร์ที่จำเป็น) สิ้นสุด;

การเรียกใช้ฟังก์ชัน: := (); 1. ทางด้านขวาของผู้ปฏิบัติงานที่ได้รับมอบหมาย 2. ในการแสดงออกในเงื่อนไขของตัวดำเนินการแยกสาขา 3. ในขั้นตอนเอาต์พุตอันเป็นผลมาจากฟังก์ชัน

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

สร้างฟังก์ชันแบบเรียกซ้ำที่คำนวณแฟกทอเรียลของ n ดังนี้: n ! = 1 ถ้า n= 1 n!= (n -1)! n ถ้า n > 1

ฟังก์ชัน f (n: จำนวนเต็ม): จำนวนเต็ม; เริ่มต้นถ้า n = 1 แล้ว f:= 1 อื่น f:= n * f (n -1); (ฟังก์ชัน f เรียกตัวเอง) end ;

งาน เปลี่ยนค่าของตัวแปร a, b, c เพื่อให้จัดเรียงแบบไม่ลดลง (a ≤ b ≤ c) ให้ n จำนวนเต็ม ค้นหาจำนวนที่ผลรวมของหลักมีค่าสูงสุด