วันอาทิตย์ที่ 30 มกราคม พ.ศ. 2554

4. การบ้านคือ บันไดสู่ประสบการณ์

การบ้าน (Project) : การสั่งงานให้นักเรียนได้ทำ เป็นสิ่งที่สำคัญมาก ผมได้เรียนแบบอาจารย์ที่เคยสอนผมเสมอ คือ สั่งงานเกือบทุกชั่วโมงเรียน ยกเว้นเทศกาล หรือวันหยุดราชการ ที่เว้นให้นักเรียนได้พักบ้าง สำหรับ project จะต้องใช้หลักการที่สำคัญทั้งหมดที่ได้เรียนมา หรือที่ศึกษาค้นคว้าเพิ่มเติม ด้วยตนเอง และต้องใหญ่พอที่จะใช้เวลาทำทั้งสัปดาห์ไม่เสร็จ แต่จะต้องใช้เวลาทำอย่างต่อเนื่อง ตลอดทั้งภาคเรียน การยอมรับคำวิงวอนให้ลดงานของนักเรียนนั้น อาจทำได้ตามความเหมาะสม กับบทเรียนที่ได้สอนไป แต่ขนาดงานก็ไม่ควรน้อยกว่า การทำให้นักศึกษา ได้ฝึกฝน และใช้เวลาศึกษาด้วยตนเอง (Self learning) อย่างน้อย 1 สัปดาห์ เพื่อทำให้โครงงานสำเร็จลุล่วง และในบางวิชาของการเขียนโปรแกรม ควรมีโครงงานทั้งก่อนสอบกลางภาค และปลายภาค คือมี Project 2 ชิ้น ในวิชานั้น และที่สำคัญที่สำคัญที่สุดสำหรับหลักการสั่งงานของผมคือ งานชิ้นใหญ่จะต้องเป็นงานเดี่ยว เพื่อให้ทุกคนได้มีโอกาสทำด้วยตนเอง มีความภูมิใจในความสำเร็จ และเป็นผู้รับผิดชอบขั้นตอนทั้งหมดด้วยตนเอง ผมจะไม่มอบ project ชิ้นใหญ่เป็นงานกลุ่ม เพราะไม่ต้องการให้นักเรียนคนใดเลย พลาดขบวนการเรียนรู้ แม้แต่ขั้นตอนเดียว และอาจารย์จะต้องมีเวลาที่จะตอบข้อซักถามเสมอ เพราะบ่อยครั้งที่อาจจะสอนผิด สั่งงานผิด นักเรียนนั่งหลับ นักเรียนจดผิด หนังสืออ้างอิงเขียนผิด หรือแม้แต่การตรวจงานผิดของอาจารย์ ก็เป็นได้
กรกฎาคม 2545 หลังจากผมสอนมาสิบปี พบว่าการมอบหมายงานให้นักศึกษาไปทำงานในคอมพิวเตอร์ที่บ้าน โดยให้ฝึกปฏิบัติด้วยตนเอง ประสบความล้มเหลวมาโดยตลอด เพราะมีนักศึกษาส่วนหนึ่ง ไม่มีคอมพิวเตอร์ ไม่สนใจที่จะเขียนโปรแกรม ไม่ต้องการที่จะคิด และยอมแพ้ ทุกครั้งที่ให้เขียนโปรแกรมง่าย ๆ ทั้ง ๆ ที่มีโปรแกรมยาก ๆ รออยู่อีกมากมาย แต่นักศึกษาทำไม่ได้ จึงนึกการให้งานแบบล่าสุดออกคือ การให้ลอกโปรแกรมด้วยมือ เช่น มีโปรแกรมง่าย ๆ หรือควรรู้อยู่ 15 โปรแกรม จึงมอบหมายให้ลอกลงกระดาษ 4 รอบ และให้เสร็จใน 1 สัปดาห์ ผลที่ได้คือนักศึกษาได้อ่านหนังสือ จดจำรูปแบบภาษาได้มากขึ้น งานที่ให้ลอกไม่ได้หยุดที่ 60 โปรแกรม แต่มากขึ้น หรือน้อยลงขึ้นกับความเข้าใจ และเนื้อหาที่สอน การทำให้นักศึกษา คิดเป็น และแก้ปัญหาโจทย์ได้ เป็นอีกปัญหาหนึ่งที่ต้องสอนในห้องปฏิบัติการ ส่วนการจำรูปแบบคำสั่งไม่ได้ แก้ไขได้ด้วยการสั่งให้ลอกโปรแกรมเท่านั้น ความคาดหวังของผู้สอนว่านักศึกษาจะตั้งใจเรียน แล้วกลับไปทำคอมพิวเตอร์ที่บ้าน โดยไม่ลอกเพื่อนเพียงอย่างเดียว ผมทำมา 10 ปี แต่ไม่ได้ผลเลย 

5. ตัวอย่างโจทย์ปิรามิด คือแบบฝึกหัดที่ยาก

 ตัวอย่างปิรามิดที่มอบหมายให้นักศึกษาไปเขียน (ผมใช้สอนในทุกภาษาที่ผมสอนทีเดียว)
1.
11******11
 22****22
  33**33
   4444
Source Code .java
 2.
123***
234****
345*****
456******
Source Code .java
 3.
15*****
26******
37*******
48********
Source Code .java
 4.
*1
**212
***32123
****4321234
Source Code .java

5.
   11
  2**2
 3****3
4******4
 3****3
  2**2
   11
 6. (java % and /)
1010101010101
 10101010101
  101010101
   1010101
    10101
     101
      1
 7.
      111
     12221
    1233321
   123444321
  12345554321
 1234566654321
123456777654321
 8.
123**
 234***
  345****
   456*****
    567******
     678*******
      789********

9.
111111111
 2222222
  33333
   444
    5
 10.
    151
   12421
  1233321
 123424321
12345154321
 11.
    11
   2 2
  3  3
 4   4
5    5
 12.
123456789
 2345678
  34567
   456
    5

13.
987654321
  7654321
    54321
      321
        1
 14.
12        21
 23      32
  34    43
   45  54
    5665
 15. (2 * i - 1)
11111 11111
2222   2222
333     333
44       44
5         5
 16.
1        *
21      **
321    ***
4321  ****
54321*****

17.
19191919
28282828
37373737
46464646
55555555
 18.
1*1*****9
1**2****8
3***3***7
4****4**6
5*****5*5
 19.
1*********5
2******** 4
3*******  3
4******   2
5*****    1
 20.
1*1
22**22
333***333
4444****4444
55555*****55555

21.
*******1*7
******2**6
*****3***5
****4****4
***5*****3
 22.
*111111111*
* 2222222 *
*  33333  *
*   444   *
*    5    *
 23.
1******1
2***** 2
3****  3
4***   4
5**    5
 24.
1*1111111111
2***22222222
3*****333333
4*******4444
5*********55

25.
****5*****
***444****
**33333***
*2222222**
111111111*
 26.
11111*
2222**
333***
44****
5*****
 27.
1 *
2  **
3   ***
4    ****
5     *****
 28.
54321*12345
5432***2345
543*****345
54*******45
5*********5

29.
1*3***
2*4****
3*5*****
4*6******
5*7*******
 30.
*********1
 *******21
  *****321
   ***4321
    *54321
 31.
11111*****
2222  ****
333    ***
44      **
5        *
 32.
1234567***3
123456****4
12345*****5
1234******6
123*******7

33.
    *
   ***
  *****
   ***
    *
 34.
    *
   *2*
  *232*
   *2*
    *
 35.
   1*1*2
   2*3*4
   3*5*6
   4*7*8
   5*9*10
 36.
123*321
23***32
3*****3
23***32
123*321

6. ตัวอย่างโปรแกรมภาษา Pascal

ได้รับ mail จากคุณ ditthapong itthiwatthawong <ryojung@samart.co.th>
ว่าเขียน ปิรามิดด้วย pascal แบบเลือกตัวอักษรได้ เขียนอย่างไร ผมจึงเขียนไว้ให้ดูเป็นตัวอย่างดังข้างล่างนี้
โปรแกรมนี้รอรับตัวอักษรจากแป้นพิมพ์ แล้วนำไปใช้กำหนดเงื่อนไขในการพิมพ์
เช่น ส่งอักษร D ก็จะพิมพ์บรรทัด A ถึง บรรทัด D และถ้าส่งอักษร E ก็จะพิมพ์บรรทัด A ถึง บรรทัด E เป็นต้น 
รหัสต้นฉบับ (Source Code) ผลลัพธ์ (Output)
var
   i,j : integer;
   c : char;
begin
   writeln ('What is your english character?');
   readln (c);
   c := upcase(c);
   writeln ('======');
   for i := 65 to ord(c) do
   begin
      for j := 65 to i do  write(chr(j));
      writeln;
   end;
   readln;
end.
 What is your english character?
F
======
A
AB
ABC
ABCD
ABCDE
ABCDEF

เมื่อเช้านี้น้องเค้า mail ถึงผมอีกว่า ใช้ function ที่ครูยังไม่สอน
ผมจึงเขียนใหม่แบบที่ไม่ต้องใช้ function รู้สึกง่ายกว่าเดิมอีกครับ
รหัสต้นฉบับ (Source Code) ผลลัพธ์ (Output)
var c,d,g : char;
begin
   writeln ('What is your english character?');
   readln (g);
   for c := 'A' to g do
   begin
     for d:= 'A' to c do write(d);
     writeln;
   end;
   readln;
end.
 What is your english character?
D
A
AB
ABC
ABCD

7. ตัวอย่างโปรแกรมภาษา Java Script

ได้รับ mail จากคุณ surasak boonarch <putter_@yahoo.com>
ว่าเขียน ปิรามิดด้วย java ได้ไหม อย่างไร ผมจึงเขียนไว้ให้ดูเป็นตัวอย่างดังข้างล่างนี้ รหัสต้นฉบับ (Source Code) ผลลัพธ์ (Output)
<body><font face="fixedsys" size=0>
<script language="JavaScript" type="text/javascript">
<!--
var k = 5;
for(i=1;i<=k;i++) {
  document.write( i + "<br>")
}
// -->
</script>
</body>
 1
2
3
4
5

รหัสต้นฉบับ (Source Code) ผลลัพธ์ (Output)
<html><title>teachp02.htm</title>
<body><font face="fixedsys" size=0>
<script language="JavaScript" type="text/javascript">
<!--
var k = 5;
for(i=1;i<=k;i++) {
  document.write( i + " - ")
  for(j=1;j<=i;j++) {
    document.write( 11 - j - i )
  }
  document.write("<br>")
}
// -->
</script>
</body></html>
 1 - 9
2 - 87
3 - 765
4 - 6543
5 - 54321

รหัสต้นฉบับ (Source Code) ผลลัพธ์ (Output)
<html><title>teachp01.htm</title>
<body><font face="fixedsys" size=0><pre>
<script language="JavaScript" type="text/javascript">
<!--
var k = 9;
for(i=1;i<=k;i++) {
  for(j=1;j<=k-i+1;j++) { document.write( " " ) }
  for(j=1;j<=i;j++) { document.write( j ) }
  document.write( i )
  for(j=i;j>=1;j--) { document.write( j ) }
  document.write("<br>")
}
// -->
</script>
</body></html>
         111
       12221
      1233321
     123444321
    12345554321
   1234566654321
  123456777654321
 12345678887654321
1234567899987654321

8. แบ่งระดับการเขียนโปรแกรม 4 ระดับ

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

9.แบบฝึกหัดสำหรับสอนการเขียนโปรแกรมเบื้องต้น

เนื่องจากนักศึกษาที่ผมสอน ทำข้อสอบกลางภาคไม่ได้ เพราะไม่ได้ใช้เวลาที่บ้านฝึกฝน แม้จะให้การบ้านไปทำ แต่ก็ไม่ได้ไปลงเครื่องให้เกิดความชำนาญ จึงต้องให้งาน 60 โปรแกรมนี้ใหม่ เป็นโปรแกรมที่ง่าย เพราะถ้ายังลอกอีก ก็จะไม่ผ่านการสอบปากเปล่า ในการถามจุดผิดพลาดว่าโปรแกรมที่เขียนมาผิดจุดใด กลุ่ม 1 พิมพ์ข้อมูลอย่างง่าย
พิมพ์ รหัสนักศึกษา
พิมพ์ ชื่อตนเอง
พิมพ์ ตัวเลข จากตัวแปร
พิพม์ ชื่อ และสกุล คนละบรรทัด
พิพม์ รหัส ชื่อ และสกุล คนละบรรทัด
พิมพ์ ผลบวก ของเลข 2 จำนวน
พิมพ์ ผลบวก ลบ คูณ หาร ของเลข 2 จำนวน
กลุ่ม 2 รับข้อมูลมาคำนวณ
พิมพ์ ตัวเลข ที่รับมาจากแป้นพิมพ์
พิมพ์ อักษร ที่รับมาจากแป้นพิมพ์
พิมพ์ ผลบวก ของเลข 2 จำนวน ที่รับมาจากแป้นพิมพ์
พิมพ์ ผลบวก และลบ ของเลข 2 จำนวน ที่รับมาจากแป้นพิมพ์
พิมพ์ ผลคูณ และหาร ของเลข 2 จำนวน ที่รับมาจากแป้นพิมพ์
พิมพ์ ผลบวก ของเลข 3 จำนวน ที่รับมาจากแป้นพิมพ์
กลุ่ม 3 รับข้อมูล และเลือกพิมพ์
รับตัวเลขจากแป้นพิมพ์ 2 จำนวน แต่พิมพ์ตัวหลังก่อนตัวแรก
รับตัวเลขจากแป้นพิมพ์ 2 จำนวน ให้พิมพ์ตัวที่มากกว่า
รับตัวเลขจากแป้นพิมพ์ 2 จำนวน ให้พิมพ์ตัวที่น้อยกว่า
รับตัวเลขจากแป้นพิมพ์ ถ้ามากกว่า 5 ให้พิมพ์คำว่า wow
รับตัวเลขจากแป้นพิมพ์ ถ้าน้อยกว่า 5 ให้พิมพ์คำว่า oho
รับตัวเลขจากแป้นพิมพ์ 3 จำนวน ให้พิมพ์ตัวที่มากที่สุด
รับตัวเลขจากแป้นพิมพ์ 3 จำนวน ให้พิมพ์ตัวที่น้อยที่สุด
กลุ่ม 4 ทำซ้ำอย่างง่าย
พิมพ์ 1 ถึง 10 ด้วย for
พิมพ์ 1 ถึง 10 ด้วย while
พิมพ์ 10 ถึง 1 ด้วย for
พิมพ์ 10 ถึง 1 ด้วย while
พิมพ์ 10 ถึง 20 ด้วย for
พิมพ์ 10 ถึง 20 ด้วย while
พิมพ์ 20 ถึง 10 ด้วย for
พิมพ์ 20 ถึง 10 ด้วย while
พิมพ์เลขคู่ระหว่าง 1 ถึง 10
พิมพ์เลขคี่ระหว่าง 1 ถึง 10
 กลุ่ม 5 ทำซ้ำซ้อนกัน
พิมพ์สูตรคูณแม่ 2
พิมพ์สูตรคูณแม่ 3
พิมพ์สูตรคูณแม่ 2 จนเสร็จ แล้วพิมพ์แม่ 3 ต่อ
พิมพ์สูตรคูณแม่ 2 และ 3 คนละ Column
พิมพ์ตัวเลขแบบ for ซ้อนด้วย for
พิมพ์ตัวเลขแบบ for ซ้อนด้วย while
พิมพ์ตัวเลขแบบ while ซ้อนด้วย for
พิมพ์ตัวเลขแบบ while ซ้อนด้วย while
กลุ่ม 6 อาร์เรย์
อ่านข้อมูลจากอาร์เรย์แบบตัวเลข 3 สมาชิกมาพิมพ์ ไม่ใช้ for
อ่านข้อมูลจากอาร์เรย์แบบตัวอักษร 3 สมาชิกมาพิมพ์ ไม่ใช้ for
อ่านข้อมูลจากอาร์เรย์แบบตัวเลข 3 สมาชิกมาพิมพ์ ใช้ for
อ่านข้อมูลจากอาร์เรย์แบบตัวอักษร 3 สมาชิกมาพิมพ์ ใช้ for
รับข้อมูลจากแป้นพิมพ์เก็บลงอาร์เรย์ แล้วนำมาพิมพ์ใหม่
รับข้อมูลจากแป้นพิมพ์เก็บลงอาร์เรย์ แล้วนำมาพิมพ์ใหม่ เฉพาะมากกว่า 10
รับข้อมูลจากแป้นพิมพ์เก็บลงอาร์เรย์ แล้วนำมาพิมพ์ใหม่ เฉพาะน้อยกว่า 10
กลุ่ม 7 คำนวณเบื้องต้น
พิมพ์ค่าสูงสุด จากอาร์เรย์ที่ถูกกำหนดเป็นค่าคงที่ในโปรแกรม
พิมพ์ค่าต่ำสุด จากอาร์เรย์ที่ถูกกำหนดเป็นค่าคงที่ในโปรแกรม
พิมพ์ค่าผลรวม จากอาร์เรย์ที่ถูกกำหนดเป็นค่าคงที่ในโปรแกรม
พิมพ์ค่าเฉลี่ย จากอาร์เรย์ที่ถูกกำหนดเป็นค่าคงที่ในโปรแกรม
พิมพ์ค่าสูงสุด จากอาร์เรย์ที่รับค่าจากแป้นพิมพ์
พิมพ์ค่าต่ำสุด จากอาร์เรย์ที่รับค่าจากแป้นพิมพ์
พิมพ์ค่าผลรวม จากอาร์เรย์ที่รับค่าจากแป้นพิมพ์
พิมพ์ค่าเฉลี่ย จากอาร์เรย์ที่รับค่าจากแป้นพิมพ์
กลุ่ม 8 แฟ้มข้อมูล หรือฐานข้อมูล
อ่านข้อมูลจากแฟ้มข้อมูล มาแสดงทางจอภาพ
อ่านข้อมูลจากแฟ้มข้อมูล มาแสดงทางจอภาพ โดยมีเลขลำดับกำกับ
อ่านข้อมูลจากแป้นพิมพ์ แล้วเขียนลงแฟ้มข้อมูล
อ่านข้อมูลจากแฟ้มข้อมูล เขียนลงแฟ้มใหม่อีกแฟ้มหนึ่ง
เพิ่มข้อมูลในแฟ้มข้อมูล เมื่อได้รับข้อมูลจากแป้นพิมพ์
ลบข้อมูล แบบต่าง ๆ
แก้ไขข้อมูล แบบต่าง ๆ

งานที่มอบหมายให้นักศึกษาไปฝึก หรือทำแก้ตัวหลังสอบกลางภาค
A. จากโจทย์แต่ละข้อ ให้เขียนโปรแกรมที่ถูกต้อง และที่ผิดอย่างละโปรแกรม โดยบอกว่าที่ผิด ผิดอย่างไร
B. ให้แต่ละข้อทำที่ถูกมา 1 ครั้ง และให้ทำที่ผิดมา 2 โปรแกรม โดยแยกเฉลยจุดผิดออกจากกัน
C. ให้นักศึกษาสลับกัน หาจุดผิดพลาดในโปรแกรมของเพื่อน
D. ตัวอย่างจุดผิดพลาดที่แนะนำนักศึกษา
- เขียนคำสั่งผิด เช่น class เป็น ClaSs เป็นต้น
- ลืมเครื่องหมาย เช่น . , ; ( { = เป็นต้น
- ลืมประกาศตัวแปร หรือ ประกาศตัวแปรซ้ำ
- ใช้งานผิดประเภท เช่น ตัวเลข เป็นตัวอักษร หรือไม่เปลี่ยนประเภทก่อนนำมาประมวลผล
- ลืมประกาศ include หรือ IOException หรือ อื่น ๆ
- จำนวน { ไม่เท่ากับ }
- Compile ไม่ผ่าน แต่พยายามเรียกใช้งาน
- ผิดพลาดขณะแปลอย่างไร หรือประมวลผล หรือตรวจสอบระหว่างประมวลผลผิดพลาด 

10. เปรียบเทียมหาค่ามากกว่า

การเขียนโปรแกรมต้องมีตัวแปลภาษา ตัวอย่างชุดนี้เป็น javascript ที่ประมวลผลได้ทันทีใน Internet Explorer ถ้ามีข้อสงสัยเรื่อง javascript เพิ่มเติมให้เปิดจาก thaiall.com/java สำหรับตัวอย่าง 10.2 ถึง 10.4 มี 2 แบบคือ หาเฉพาะค่า max และเรียงลำดับค่ามากไปน้อย ซึ่งมีหลักการคล้ายกัน 10.1 เปรียบเทียบค่าคงที่ 2 ค่า
: ใช้ if เลือกค่าที่มากกว่ามาแสดงผล  <script>
var a = 5;
var b = 6;
if(a > b)
  document.write(a + "" + b);
else
  document.write(b + "" + a);
</script>

10.2 เปรียบเทียบค่าคงที่ 3 ค่า แบบที่ 1
: ใช้ if และ and เปรียบเทียบพร้อมกันทั้ง 3 ค่า ทุกกรณี
: สัญลักษณ์ && คือ and ในภาษา javascript
<script>
var a = 5;
var b = 7;
var c = 6;
if(a > b && a > c) document.write(a);
if(b > a && b > c) document.write(b);
if(c > a && c > b) document.write(c);
</script>
 <script>
var a = 5;
var b = 7;
var c = 6;
if(a > b && b > c) document.write(a + "" + b  + "" + c);
if(a > c && c > b) document.write(a + "" + c  + "" + b);
if(b > a && a > c) document.write(b + "" + a  + "" + c);
if(b > c && c > a) document.write(b + "" + c  + "" + a);
if(c > a && a > b) document.write(c + "" + a  + "" + b);
if(c > b && b > a) document.write(c + "" + b  + "" + a);
</script>

10.3 เปรียบเทียบค่าคงที่ 3 ค่า แบบที่ 2
: ใช้ if เปรียบเทียบค่าที่ละคู่ตามเงื่อนไข
: ผลการเปรียบเทียบจึงใช้ if else หลายกรณี
<script>
var a = 5;
var b = 7;
var c = 6;
if(a > b)
  if (b > c) document.write(a);
  else {if(c > a) document.write(c);}
else if(b > c) document.write(b);
  else document.write(c);
</script>
 <script>
var a = 5;
var b = 7;
var c = 6;
if(a > b)
  if (b > c) document.write(a + "" + b  + "" + c);
  else if(a > c) document.write(a + "" + c  + "" + b);
     else document.write(c + "" + a  + "" + b);
else if (a > c) document.write(b + "" + a  + "" + c);
  else if(b > c) document.write(b + "" + c  + "" + a);
     else document.write(c + "" + b  + "" + a);
</script>

10.4 เปรียบเทียบค่าคงที่ 3 ค่า แบบที่ 3
: ใช้การสลับที่ของ 2 ตัวแปร ผ่านตัวแปร t
<script>
var a = 5;
var b = 7;
var c = 6;
var t = a;
if(b > t) t = b;
if(c > t) t = c;
document.write(t);
</script>
 <script>
var a = 5;
var b = 7;
var c = 6;
var t;
if(b > a) { t = a; a = b; b = t; }
if(c > b) { t = c; c = b; b = t; }
if(b > a) { t = a; a = b; b = t; }
document.write(a + "" + b  + "" + c);
</script>

10.5 เปรียบเทียบค่าในอาร์เรย์ด้วย Bubble Sort
: การจัดเรียงข้อมูลที่ง่ายที่สุดวิธีหนึ่ง
: bubble แปลว่าฟอง หลักการนี้แสดงการลอยขึ้นของค่าทีละตัว  <script>
var a = new Array ();
a = [5,6,8,2,1,3,4,7,9];
var tmp;
for(i=0;i<a.length;i++)
  for(j=0;j<=i;j++)
    if (a[j] < a[j + 1]) {
       tmp = a[j];
       a[j] = a[j + 1];
       a[j + 1] = tmp;
       j-=2;
    } 
for(i=0;i<a.length;i++)
document.write(a[i]);
</script>