fixed the strange char problem (passed local building)

This commit is contained in:
Worajedt Sitthidumrong 2019-07-17 03:10:12 +07:00
parent 0b9ce8caae
commit 31b387a44f

View File

@ -1,14 +1,15 @@
--- ---
language: Pascal language: Pascal
filename: learnpascal.pas filename: learnpascal.pas
contributors: contributors:
- ["Ganesha Danu", "http://github.com/blinfoldking"] - ["Ganesha Danu", "http://github.com/blinfoldking"]
- ["Keith Miyake", "https://github.com/kaymmm"] - ["Keith Miyake", "https://github.com/kaymmm"]
translators:
- ["Worajedt Sitthidumrong", "https://github.com/Jedt3D"] - ["Worajedt Sitthidumrong", "https://github.com/Jedt3D"]
lang: th-th language: th-th
--- ---
>Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1] > Pascal (ปาสกาล) เป็นภาษาโปรแกรมมิ่งทั้งแบบ imperative และ procedural ที่ออกแบบโดย Niklaus Wirth (นิเคล้า เวิร์ท) เมื่อปี 1968-69 และเผยแพร่ตอน 1970 โดยเน้นให้เป็นภาษาที่เล็ก มีประสิทธิภาพ เพื่อเสริมการเขียนโปรแกรมที่มีแนวปฏิบัติที่ดีด้วยการใช้โครงสร้างของตัวภาษา และโครงสร้างข้อมูลมากำกับ ชื่อของภาษานี้ตั้งเป็นเกียรติให้กับนักคณิตศาสตร์ชาวฝรั่งเศส, นักปรัชญา และนักฟิสิกส์ ชื่อ Blaise Pascal (เบลส ปาสกาล) ข้อมูลจาก : [วิกิพีเดีย][1]
การคอมไพล์และรันโค้ดภาษาปาสกาลนี้ สามารถใช้ปาสกาลคอมไพลเลอร์ฟรีชื่อ Free Pascal ได้ โดย [ดาวน์โหลดที่นี่][2] การคอมไพล์และรันโค้ดภาษาปาสกาลนี้ สามารถใช้ปาสกาลคอมไพลเลอร์ฟรีชื่อ Free Pascal ได้ โดย [ดาวน์โหลดที่นี่][2]
@ -37,7 +38,8 @@ type
} }
var var
{ {
ตัวแปร ในภาษาปาสกาล ไม่เหมือนกับภาษาอื่น ๆ เพราะต้องประกาศในบล็อค var ก่อนใช้งานเสมอ ตัวแปร ในภาษาปาสกาล ไม่เหมือนกับภาษาอื่น ๆ
เพราะต้องประกาศในบล็อค var ก่อนใช้งานเสมอ
} }
//มาถึงส่วนโปรแกรมหลัก หรือ main fucntion นั่นเอง //มาถึงส่วนโปรแกรมหลัก หรือ main fucntion นั่นเอง
@ -65,7 +67,7 @@ var
var a,b : integer; var a,b : integer;
``` ```
โค้ดตัวอย่างนี้เป็นโปรแกรม Learn_More ที่เป็นโครงสร้างโปรแกรมง่าย ๆ ที่จบสมบูรณ์หนึ่งโปรแกรม มีบล็อค program, const, type, main (Begin..End.) โค้ดตัวอย่างนี้เป็นโปรแกรม Learn\_More ที่เป็นโครงสร้างโปรแกรมง่าย ๆ ที่จบสมบูรณ์หนึ่งโปรแกรม มีบล็อค program, const, type, main (Begin..End.)
```pascal ```pascal
program Learn_More; program Learn_More;
@ -77,10 +79,11 @@ const
// ค่าคงที่ ให้ตั้งชื่อเป็น ตัวพิมพ์ใหญ่ ทั้งหมด ใช้กับชนิดข้อมูลใดๆ ก็ได้ // ค่าคงที่ ให้ตั้งชื่อเป็น ตัวพิมพ์ใหญ่ ทั้งหมด ใช้กับชนิดข้อมูลใดๆ ก็ได้
// ค่าคงที่ ก็ตามชื่อเลย กำหนดค่าแล้ว ไม่สามารถเปลี่ยนแปลงได้ขณะรัน // ค่าคงที่ ก็ตามชื่อเลย กำหนดค่าแล้ว ไม่สามารถเปลี่ยนแปลงได้ขณะรัน
// การประกาศชนิดข้อมูลของเราเอง : ชนิดของตัวแปรสองแบบนี้ จะนำไปใช้ด้านล่าง // การประกาศชนิดข้อมูลของเราเอง
// "ชนิด" ของตัวแปรสองแบบนี้ จะนำไปใช้ด้านล่าง
type type
ch_array : array [0..255] of char; ch_array : array [0..255] of char;
// อะเรย์ เป็นชนิดข้อมูลอีกแบบ ที่มี ความยาว/ช่องเก็บข้อมูล และ ชนิดข้อมูล // อะเรย์ เป็นชนิดข้อมูลที่มี ความยาว/ช่องเก็บข้อมูล และ ชนิดข้อมูล
// โค้ดด้านบน เป็นการประกาศอะเรย์ของตัวอักษา 255 ตัวอักษา // โค้ดด้านบน เป็นการประกาศอะเรย์ของตัวอักษา 255 ตัวอักษา
// ซึ่งได้ ความยาว/ช่องเก็บข้อมูลในตัวแปรตัวนี้ 256 ช่องที่เป็นข้อความ // ซึ่งได้ ความยาว/ช่องเก็บข้อมูลในตัวแปรตัวนี้ 256 ช่องที่เป็นข้อความ
md_array : array of array of integer; md_array : array of array of integer;
@ -106,14 +109,14 @@ var
// ตัวอักษรเป็นแบบ ASCII 8 bit ดังนั้นจะไม่ใช่ UTF, Unicode // ตัวอักษรเป็นแบบ ASCII 8 bit ดังนั้นจะไม่ใช่ UTF, Unicode
str : string; str : string;
// ตัวแปรสตริงจะเก็บข้อความ หรือ char หลาย ๆ ตัว // ตัวแปรสตริงจะเก็บข้อความ หรือ char หลาย ๆ ตัว
// ชนิดข้อมูลนี้ไม่เป็นมาตรฐานภาษาแต่แทบทุกคอมไพเลอร์ปาสกาลก็จะมีให้ // ชนิดข้อมูลนี้ไม่เป็นมาตรฐานภาษาแต่คอมไพเลอร์ปาสกาลก็มักจะมีให้
// ทั่ว ๆ ไปแล้ว จะเป็นอะเรย์ของ char ความยาวตั้งต้น 255 // ทั่ว ๆ ไปแล้ว จะเป็นอะเรย์ของ char ความยาวตั้งต้น 255
s : string[50]; s : string[50];
// แบบนี้คือ กำหนดความยาว string เอง ให้เก็บ char 50 ตัว // แบบนี้คือ กำหนดความยาว string เอง ให้เก็บ char 50 ตัว
// แบบนี้ก็ทำให้ประหยัดหน่วยความจำมากขึ้นนั่นเอง // แบบนี้ก็ทำให้ประหยัดหน่วยความจำมากขึ้นนั่นเอง
my_str: ch_array; my_str: ch_array;
// ชนิดตัวแปร ใช้เป็นชนิดที่เรากำหนดเองก็ได้ อย่างตอนนี้ // ชนิดตัวแปร ใช้เป็นชนิดที่เรากำหนดเองก็ได้ อย่างตอนนี้
// ch_array เป็น "ชนิดข้อมูล" ที่เราสร้างขึ้นมาเอง ด้านบนที่บล็อค type // ch_array เป็น "ชนิดข้อมูล" ที่เราสร้างขึ้นมาในบล็อค type
my_2d : md_array; my_2d : md_array;
// ตัวแปรแบบอะเรย์ที่ไม่ประกาศขนาด (dynamically sized array) // ตัวแปรแบบอะเรย์ที่ไม่ประกาศขนาด (dynamically sized array)
// ก่อนเอาไปใช้จริงต้องระบุขนาดก่อนใช้เสมอ // ก่อนเอาไปใช้จริงต้องระบุขนาดก่อนใช้เสมอ
@ -126,11 +129,13 @@ var
li : longint; // มีช่วงข้อมูล [-2,147,483,648..2,147,483,647] li : longint; // มีช่วงข้อมูล [-2,147,483,648..2,147,483,647]
lw : longword; // มีช่วงข้อมูล [0..4,294,967,295] lw : longword; // มีช่วงข้อมูล [0..4,294,967,295]
c : cardinal; // ก็คือ longword c : cardinal; // ก็คือ longword
i64 : int64; // มีช่วงข้อมูล [-9223372036854775808..9223372036854775807] i64 : int64; // มีช่วงข้อมูล
// [-9223372036854775808..9223372036854775807]
qw : qword; // มีช่วงข้อมูล [0..18,446,744,073,709,551,615] qw : qword; // มีช่วงข้อมูล [0..18,446,744,073,709,551,615]
// ชนิดข้อมูลแบบ real เพิ่มเติม // ชนิดข้อมูลแบบ real เพิ่มเติม
rr : real; // มีช่วงข้อมูลที่ขึ้นกับระบบปฏิบัติการ (เช่นเป็นแบบ 8-bit, 16-bit, ฯลฯ) rr : real; // มีช่วงข้อมูลที่ขึ้นกับระบบปฏิบัติการ
// (เช่นเป็นแบบ 8-bit, 16-bit, ฯลฯ)
rs : single; // มีช่วงข้อมูล [1.5E-45..3.4E38] rs : single; // มีช่วงข้อมูล [1.5E-45..3.4E38]
rd : double; // มีช่วงข้อมูล [5.0E-324 .. 1.7E308] rd : double; // มีช่วงข้อมูล [5.0E-324 .. 1.7E308]
re : extended; // มีช่วงข้อมูล [1.9E-4932..1.1E4932] re : extended; // มีช่วงข้อมูล [1.9E-4932..1.1E4932]
@ -157,25 +162,26 @@ Begin
bool := true xor true; // bool = false bool := true xor true; // bool = false
r := 3 / 2; // หารด้วย / จะได้ผลเป็น real เสมอ r := 3 / 2; // หารด้วย / จะได้ผลเป็น real เสมอ
r := int; // เรากำหนดค่า integer ให้ตัวแปร real ได้ แต่ทำกลับกันไม่ได้ r := int; // เรากำหนดค่า integer ให้ตัวแปร real ได้
// แต่ทำกลับกัน โดยกำหนด real ให้ integer ไม่ได้
c := str[1]; // กำหนดค่าแรกใน array str ให้ตัวแปร c ที่เป็น char c := str[1]; // กำหนดค่าแรกใน array str ให้ตัวแปร c ที่เป็น char
str := 'hello' + 'world'; // เรารวม string เข้าด้วยกันด้วย + str := 'hello' + 'world'; // เรารวม string เข้าด้วยกันด้วย +
my_str[0] := 'a'; // กำหนดค่าให้ string เฉพาะตำแหน่งได้แบบตัวแปรอะเรย์ทั่วไป my_str[0] := 'a'; // กำหนดค่าให้ string เฉพาะตำแหน่งแบบอะเรย์ทั่วไป
setlength(my_2d,10,10); // ปรับขนาดอะเรย์ 2 มิติให้เป็นขนาด 10x10 setlength(my_2d,10,10); // ปรับขนาดอะเรย์ 2 มิติให้เป็นขนาด 10x10
// โดยตัวแปร my_2d นี้สร้างแล้วด้านบน // โดยตัวแปร my_2d นี้สร้างแล้วด้านบน
for c := 0 to 9 do // อะเรย์เริ่มจาก 0 และจบที่ ความยาว-1 for c := 0 to 9 do // อะเรย์เริ่มจาก 0 และจบที่ ความยาว-1
for d := 0 to 9 do // ตัวนับ (counter) จำเป็นต้องประกาศมาก่อนนำมาใช้ตรงนี้ for d := 0 to 9 do // ตัวนับ (counter) จำเป็นต้องประกาศก่อนใช้
my_2d[c,d] := c * d; my_2d[c,d] := c * d;
// เรากำหนดอะเรย์หลายมิติได้ด้วยการใช้วงเล็บก้ามปู (square brackets) ชุดเดียว // กำหนดอะเรย์หลายมิติ ด้วยการใช้วงเล็บก้ามปู (square brackets)
End. End.
// จบโปรแกรมบริบูรณ์ ด้วย "." // จบโปรแกรมบริบูรณ์ ด้วย "."
``` ```
ด้านล่าง เป็นตัวอย่างการเขียนโปรแกรมปาสกาลชื่อ Functional_Programming ด้านล่าง เป็นตัวอย่างการเขียนโปรแกรมปาสกาลชื่อ Functional\_Programming
```pascal ```pascal
program Functional_Programming; program Functional_Programming;
@ -200,9 +206,10 @@ Begin
End; // จบ ฟังก์ชั่น ด้วย ";" หลัง End ไม่เหมือนกับจบ โปรแกรม ที่จะใช้ "." End; // จบ ฟังก์ชั่น ด้วย ";" หลัง End ไม่เหมือนกับจบ โปรแกรม ที่จะใช้ "."
procedure get_integer(var i : integer; dummy : integer); procedure get_integer(var i : integer; dummy : integer);
{ เรารับ input จากผู้ใช้มาเก็บใน parameter i ที่เป็น integer ที่ตั้งขึ้นในพารามิเตอร์ { เรารับ input จากผู้ใช้มาเก็บใน parameter i ที่เป็น integer ที่ตั้งขึ้นใน
โดยใช้ var ประกาศ ทำให้ค่าที่รับเข้ามาจะเปลี่ยนปรับได้จากภายนอกการประกาศพารามิเตอร์นี้ พารามิเตอร์ โดยใช้ var ประกาศ ทำให้ค่าที่รับเข้ามาจะเปลี่ยนปรับได้จาก
ส่วน dummy เป็นตัวแปรที่ปรับเปลี่ยนได้ "เฉพาะจากภายในฟังก์ชั่น,โพรซีเยอร์นั้น ๆ } ภายนอกการประกาศพารามิเตอร์นี้ ส่วน dummy เป็นตัวแปรที่ปรับเปลี่ยนได้
"เฉพาะจากภายในฟังก์ชั่น,โพรซีเยอร์นั้น ๆ }
Begin Begin
write('Enter an integer: '); write('Enter an integer: ');
readln(i); readln(i);
@ -217,11 +224,13 @@ Begin
get_integer(i, dummy); get_integer(i, dummy);
writeln(i, '! = ', factorial_recursion(i)); writeln(i, '! = ', factorial_recursion(i));
// พิมพ์ค่า i! // พิมพ์ค่า i!
writeln('dummy = ', dummy); // จะให้ค่าเป็น '3' เสมอ เพราะจะไม่เปลี่ยนเนื่องด้วย writeln('dummy = ', dummy); // จะให้ค่าเป็น '3' เสมอ
// การประกาศพารามิเตอร์ในโพรซีเยอร์ get_integer ด้านบน // เพราะจะไม่เปลี่ยนเนื่องด้วย
// การประกาศพารามิเตอร์ใน
// โพรซีเยอร์ get_integer ด้านบน
End. End.
``` ```
[1]: https://en.wikipedia.org/wiki/Pascal_(programming_language) [1]: https://en.wikipedia.org/wiki/Pascal_(programming_language)
[2]: https://www.freepascal.org/ [2]: https://www.freepascal.org/