โปรไฟล์

ปฎิทิน

เครดิต

ภาษาจาวา


ภาษาจาวา (อังกฤษ: Java programming language) เป็นภาษาโปรแกรมเชิงวัตถุ (อังกฤษ: Object Oriented Programming) พัฒนาโดย เจมส์ กอสลิง และวิศวกรคนอื่นๆ ที่ ซัน ไมโครซิสเต็มส์ภาษาจาวาถูกพัฒนาขึ้นในปี พ.ศ. 2534 (ค.ศ. 1991) โดยเป็นส่วนหนึ่งของ โครงการกรีน (the Green Project) และสำเร็จออกสู่สาธารณะในปี พ.ศ. 2538 (ค.ศ. 1995) ซึ่งภาษานี้มีจุดประสงค์เพื่อใช้แทนภาษาซีพลัสพลัส (C++) โดยรูปแบบที่เพิ่มเติมขึ้นคล้ายกับภาษาอ็อบเจกต์ทีฟซี (Objective-C) แต่เดิมภาษานี้เรียกว่า ภาษาโอ๊ก (Oak) ซึ่งตั้งชื่อตามต้นโอ๊กใกล้ที่ทำงานของ เจมส์ กอสลิง แต่ว่ามีปัญหาทางลิขสิทธิ์ จึงเปลี่ยนไปใช้ชื่อ "จาวา" ซึ่งเป็นชื่อกาแฟแทน และแม้ว่าจะมีชื่อคล้ายกัน แต่ภาษาจาวาไม่มีความเกี่ยวข้องใด ๆ กับภาษาจาวาสคริปต์ (JavaScript) ปัจจุบันมาตรฐานของภาษาจาวาดูแลโดย Java Community Process ซึ่งเป็นกระบวนการอย่างเป็นทางการ ที่อนุญาตให้ผู้ที่สนใจเข้าร่วมกำหนดความสามารถในจาวาแพลตฟอร์มได้

จุดมุ่งหมาย


จุดมุ่งหมายหลัก 4 ประการ ในการพัฒนาจาวา คือ

1. ใช้ภาษาโปรแกรมเชิงวัตถุ

2. ไม่ขึ้นกับแพลตฟอร์ม (สถาปัตยกรรม และ ระบบปฏิบัติการ)

3. เหมาะกับการใช้ในระบบเครือข่าย พร้อมมีไลบรารีสนับสนุน

4. เรียกใช้งานจากระยะไกลได้อย่างปลอดภัย

จาวาแพลตฟอร์ม และ ภาษาจาวา

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

ในความเป็นจริงนั้น ทั้งสองสิ่ง แม้จะทำงานเสริมกัน แต่ก็เป็นสิ่งที่แยกออกจากกัน

โดย ภาษาจาวานั้น คือภาษาสำหรับใช้เขียนโปรแกรมภาษาหนึ่ง ดังที่ได้อธิบายไปข้างต้น ส่วน จาวาแพลตฟอร์มนั้น คือสภาพแวดล้อมสำหรับการใช้งานโปรแกรมจาวา โดยมีองค์ประกอบหลักคือ จาวาเวอร์ชวลแมชีน(Java virtual machine) และ ไลบรารีมาตรฐานจาวา (Java standard library)

โปรแกรมที่ทำงานบนจาวาแพลตฟอร์มนั้น ไม่จำเป็นจะต้องสร้างด้วยภาษาจาวา เช่น อาจจะใช้ ภาษาไพทอน (Python) หรือ ภาษาอื่นๆ ก็ได้

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

ประวัติ

รุ่นต่าง ๆ ของภาษาจาวา

§ 1.0 (ค.ศ. 1996) — ออกครั้งแรกสุด

§ 1.1 (ค.ศ. 1997) — ปรับปรุงครั้งใหญ่ โดยเพิ่ม inner class

§ 1.2 (4 ธันวาคม, ค.ศ. 1998) — รหัส Playground ด้านจาวาแพลตฟอร์มได้รับการเปลี่ยนแปลงครั้งใหญ่ใน API และ JVM (API สำคัญที่เพิ่มมาคือ Java Collections Framework และ Swing; ส่วนใน JVM เพิ่ม JIT compiler) แต่ตัวภาษาจาวานั้น เปลี่ยนแปลงเพียงเล็กน้อย (เพิ่มคีย์เวิร์ด strictfp) และทั้งหมดถูกเรียกชื่อใหม่ว่า "จาวา 2" แต่ระบบเลขรุ่นยังไม่เปลี่ยนแปลง

§ 1.3 (8 พฤษภาคม, ค.ศ. 2000) — รหัส Kestrel แก้ไขเล็กน้อย

§ 1.4 (13 กุมภาพันธ์, ค.ศ. 2002) — รหัส Merlin เป็นรุ่นที่ถูกใช้งานมากที่สุดในปัจจุบัน (ขณะที่เขียน ค.ศ. 2005)

§ 5.0 (29 กันยายน, ค.ศ. 2004) — รหัส Tiger (เดิมทีนับเป็น 1.5) เพิ่มคุณสมบัติใหม่ในภาษาจาวา เช่น Annotations ซึ่งเป็นที่ถกเถียงกันว่านำมาจากภาษาซีชาร์ป ของบริษัทไมโครซอฟท์, Enumerations, Varargs, Enhanced for loop, Autoboxing, และที่สำคัญคือ Generics

§ 6.0 (11 ธันวาคม, ค.ศ. 2006) [1] — รหัส Mustang เป็นรุ่นในการพัฒนาของ Java SDK 6.0 ที่ออกมาให้ทดลองใช้ในเดือนพฤศจิกายน ค.ศ. 2004

§ 7.0 (กำลังพัฒนา กำหนดออก ค.ศ. 2008) — รหัส Dolphin กำลังพัฒนา [2]

ซอฟต์แวร์ที่เกี่ยวข้อง

รายชื่อของซอฟต์แวร์เสรีที่เกี่ยวข้องกับจาวา
คอมไพเลอร์และเวอร์ชวลแมชีน

§ JDK คอมไพเลอร์มาตรฐานของซัน ไมโครซิสเต็มส์

§ GCJ คอมไพเลอร์ภาษาจาวาของโครงการ GCC หรือ GNU Compiler Collection

§ Jikes คอมไพเลอร์ที่เดิมพัฒนาโดยไอบีเอ็ม

§ GNU Classpath ชุดไลบรารีสำหรับจาวาแพลตฟอร์ม โอเพนซอร์ส

§ Kaffe

§ SableVM

§ IKVM คอมไพเลอร์ภาษาจาวาบน .NET แพลตฟอร์ม

§ SuperWaba

§ JRockit JDK พัฒนาโดย บีอีเอ ซิสเต็มส์

สภาพแวดล้อมสำหรับการพัฒนา (IDE)

§ BlueJ เป็น IDE ที่เหมาะกับการศึกษา โดยเน้นที่แนวคิดเรื่องการเขียนโปรแกรมเชิงวัตถุ

§ ฺBorland JBuilder

§ Eclipse โอเพนซอร์ส

§ IntelliJ IDEA

§ JDeveloper ของบริษัทออราเคิล

§ JEdit (เป็นเอดิเตอร์ แต่สามารถติดตั้งปลั๊กอินเพื่อเพิ่มความสามารถด้าน IDE ได้)

§ JLab ของภาควิชาวิศวกรรมคอมพิวเตอร์ จุฬาลงกรณ์มหาวิทยาลัย ฟรีและเล็กเหมาะกับการศึกษา

§ NetBeans โอเพนซอร์ส

§ Rational Application Developer ของไอบีเอ็ม

§ Sun Java Studio ของซัน ไมโครซิสเต็มส์

§ ฺVisual Age ของไอบีเอ็ม (ปัจจุบันเลิกพัฒนาแล้ว ถูกแทนที่ด้วย Rational Application Developer)

§ ฺVisual Cafe' ของบริษัท Symantec

§ WebSphere Studio Application Developer ของไอบีเอ็ม ปัจจุบันถูกแทนที่ด้วย Rational Application Developer


1. แนวคิดการสอนเขียนโปรแกรม

หลายครั้งที่ผมต้องเริ่มสอนเขียนโปรแกรม ให้นักเรียนกลุ่มใหม่ และก็ต้องบอกเล่า ด้วยประโยคเดิมทุกครั้งว่า "การเขียนโปรแกรม ทุกภาษานั้นเหมือนกัน" สิ่งที่แตกต่างกัน ของแต่ละภาษาคือ syntax แต่สิ่งที่เหมือนกันของทุกภาษาคือ การใช้ประสบการณ์จากภาษาหนึ่ง ไปใช้ในอีกภาษาหนึ่งได้ ด้วยการซึมซับ เรื่องของ Structure Programming จนเข้าใจ เพื่อควบคุมในสิ่งที่คล้าย ๆ กันคือ input, process และ output ซึ่งหมายความว่า ถ้าท่านเขียนโปรแกรมอะไร ในภาษาหนึ่งได้แล้ว การเขียนโปรแกรมแบบนั้น ในภาษาอื่นย่อมไม่ใช่เรื่องยากอีกต่อไป เพียงแต่ต้องศึกษาถึง syntax หรือ รูปแบบการเขียนของภาษาใหม่นั้นเพิ่มเติม แล้วนำประสบการณ์ที่เคยเขียน ไปสั่งให้ภาษาใหม่ทำงานตามต้องการ ผมจึงมักสนับสนุนให้นักเรียน ได้ศึกษาภาษาที่ไม่มีตัวช่วยมาก เพื่อให้เข้าใจในหลักการ และขั้นตอนการทำงาน อย่างละเอียดชัดเจน จากการทำงานของตัวแปรภาษาที่มีตัวช่วยน้อย ทำงานบน dos สามารถแปลเป็น exe และ นำไปใช้ได้โดยไม่ยุ่งยาก เช่น c, pascal, basic, fox... หรือ clipper เป็นต้น


2. ความหมายของ Structure Programming

การโปรแกรมแบบมีโครงสร้าง หรือ การโปรแกรมโครงสร้าง คือ การกำหนดขั้นตอนให้เครื่องคอมพิวเตอร์ทำงานโดยมีโครงสร้างการควบคุมพื้นฐาน 3 หลักการ ได้แก่ การทำงานแบบตามลำดับ(Sequence) การเลือกกระทำตามเงื่อนไข(Decision) และ การทำซ้ำ(Loop)

ตำราหลายเล่มจะขยายความออกไปว่า Decision แยกเป็น If และ Case ส่วน Loop แยกเป็น While และ Until ถ้าแยกให้ละเอียดก็อาจได้ถึง 5 หลักการ แต่ในที่นี้ขอนำเสนอไว้เพียง 3 หลักการ ดังนี้

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

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

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

Sequence

Decision

Repeation

รายละเอียดเพิ่มเติมที่ http://www.thaiall.com/flowchart

 

3. การเริ่มต้นเขียนโปรแกรม

เริ่มต้นเขียนโปรแกรม เริ่มต้นตรงไหน : สำหรับผม เมื่อได้มาทำหน้าที่สอนหนังสือ โดยเฉพาะการเขียนโปรแกรมทุกภาษา ผมจะสอนให้นักศึกษาเขียนโปรแกรมควบคุมตัวเลข เช่นการพิมพ์ 1 ถึง 10 หรือ สูตรคูณ หรือปิรามิดของตัวเลข ที่ต้องฝึกใช้ Structure Programming ให้ชำนาญ และปัญหาก็เกิดขึ้นทุกครั้ง คือ "นักเรียนบ่นว่าไม่ชอบเขียน ไม่มีประโยชน์" หรือ "เขียนไม่ได้ ถึงเขียนได้ ก็ไม่รู้จะเขียนไปทำไม" แล้วผมก็ต้องกลับไปอธิบายอีกครั้งว่า การเริ่มต้นแบบนี้ "จะทำให้รู้จักควบคุมโปรแกรม ตามหลักการของโปรแกรมแบบมีโครงสร้างได้ชำนาญขึ้น รู้จักเรียนรู้ และแก้ปัญหาด้วยตนเอง รวมทั้งรู้จักแก้ไข Syntax พื้นฐานไม่ให้ผิดพลาด เมื่อสามารถเขียนโปรแกรมในระดับต่อ ๆ ไปได้"

เริ่มต้นเขียนโปรแกรมทำอย่างไร (จากหนังสือ พื้นฐานเว็บมาสเตอร์บทที่ 17)

1.            เลือกภาษา สำหรับนักเรียน นักศึกษานั้นง่ายที่จะเลือก เพราะอาจารย์คอยชี้แนะ

2.            หาแหล่งข้อมูลอ้างอิงจากห้องสมุด ถ้าท่านไม่มีอะไรอยู่ในมือเลย คงนึกโครงสร้างภาษาไม่ออกเป็นแน่

3.            หาตัวแปลภาษา ทุกภาษาต้องมีตัวแปลภาษา มีหลายภาษาที่ถูกสร้างเป็น Free compiler ต้องหาดู

4.            เขียนโปรแกรมตัวแรกที่ง่าย เช่น พิมพ์เลข 5 เป็นต้น

5.            ศึกษาการทำซ้ำ และการเลือกตามเงื่อนไข เช่นพิมพ์สูตรคูณ หรือพิมพ์ 1 ถึง 10 เป็นต้น

6.            ติดต่อแฟ้มข้อมูล เพื่ออ่านมาแสดงผล หรือปรับปรุงข้อมูลได้

7.            เขียนเมนู เพื่อเลือกกระทำโปรแกรมตามตัวเลือก

8.            ทำรายงานจากการเชื่อมแฟ้มหลายแฟ้ม โดยกำหนดได้หลายตัวเลือก

9.            เขียนโปรแกรมเพิ่มข้อมูล เช่น ซื้อ ขาย ยืม คืน หรือโปรแกรมลงทะเบียนนักศึกษาแต่ละภาคเรียนเป็นต้น

10.    สร้างโปรแกรมขึ้นมาระบบหนึ่งให้สมบูรณ์ (ความสมบูรณ์ก็คือการสนองทุกความต้องการของผู้ใช้


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 ระดับ

ระดับในการเขียนโปรแกรมมีหลายระดับ

1.            เขียนตามที่ครูสอน ( ระดับต้น )

2.            เขียนโครงงานส่งครู ( ระดับกลาง )

3.            เขียนโปรแกรมประยุกต์ไว้ใช้งาน ( ระดับสูง )

4.            เขียนโปรแกรมเชิงวัตถุให้ถูกเรียกใช้ภายหลัง ( ระดับมืออาชีพ )

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


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

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

กลุ่ม 1 พิมพ์ข้อมูลอย่างง่าย

1.            พิมพ์ รหัสนักศึกษา

2.            พิมพ์ ชื่อตนเอง

3.            พิมพ์ ตัวเลข จากตัวแปร

4.            พิพม์ ชื่อ และสกุล คนละบรรทัด

5.            พิพม์ รหัส ชื่อ และสกุล คนละบรรทัด

6.            พิมพ์ ผลบวก ของเลข 2 จำนวน

7.            พิมพ์ ผลบวก ลบ คูณ หาร ของเลข 2 จำนวน 
กลุ่ม 2 รับข้อมูลมาคำนวณ

8.            พิมพ์ ตัวเลข ที่รับมาจากแป้นพิมพ์

9.            พิมพ์ อักษร ที่รับมาจากแป้นพิมพ์

10.    พิมพ์ ผลบวก ของเลข 2 จำนวน ที่รับมาจากแป้นพิมพ์

11.    พิมพ์ ผลบวก และลบ ของเลข 2 จำนวน ที่รับมาจากแป้นพิมพ์

12.    พิมพ์ ผลคูณ และหาร ของเลข 2 จำนวน ที่รับมาจากแป้นพิมพ์

13.    พิมพ์ ผลบวก ของเลข 3 จำนวน ที่รับมาจากแป้นพิมพ์ 
กลุ่ม 3 รับข้อมูล และเลือกพิมพ์

14.    รับตัวเลขจากแป้นพิมพ์ 2 จำนวน แต่พิมพ์ตัวหลังก่อนตัวแรก

15.    รับตัวเลขจากแป้นพิมพ์ 2 จำนวน ให้พิมพ์ตัวที่มากกว่า

16.    รับตัวเลขจากแป้นพิมพ์ 2 จำนวน ให้พิมพ์ตัวที่น้อยกว่า

17.    รับตัวเลขจากแป้นพิมพ์ ถ้ามากกว่า 5 ให้พิมพ์คำว่า wow

18.    รับตัวเลขจากแป้นพิมพ์ ถ้าน้อยกว่า 5 ให้พิมพ์คำว่า oho

19.    รับตัวเลขจากแป้นพิมพ์ 3 จำนวน ให้พิมพ์ตัวที่มากที่สุด

20.    รับตัวเลขจากแป้นพิมพ์ 3 จำนวน ให้พิมพ์ตัวที่น้อยที่สุด 
กลุ่ม 4 ทำซ้ำอย่างง่าย

21.    พิมพ์ 1 ถึง 10 ด้วย for

22.    พิมพ์ 1 ถึง 10 ด้วย while

23.    พิมพ์ 10 ถึง 1 ด้วย for

24.    พิมพ์ 10 ถึง 1 ด้วย while

25.    พิมพ์ 10 ถึง 20 ด้วย for

26.    พิมพ์ 10 ถึง 20 ด้วย while

27.    พิมพ์ 20 ถึง 10 ด้วย for

28.    พิมพ์ 20 ถึง 10 ด้วย while

29.    พิมพ์เลขคู่ระหว่าง 1 ถึง 10

30.    พิมพ์เลขคี่ระหว่าง 1 ถึง 10

กลุ่ม 5 ทำซ้ำซ้อนกัน

31.    พิมพ์สูตรคูณแม่ 2

32.    พิมพ์สูตรคูณแม่ 3

33.    พิมพ์สูตรคูณแม่ 2 จนเสร็จ แล้วพิมพ์แม่ 3 ต่อ

34.    พิมพ์สูตรคูณแม่ 2 และ 3 คนละ Column

35.    พิมพ์ตัวเลขแบบ for ซ้อนด้วย for

36.    พิมพ์ตัวเลขแบบ for ซ้อนด้วย while

37.    พิมพ์ตัวเลขแบบ while ซ้อนด้วย for

38.    พิมพ์ตัวเลขแบบ while ซ้อนด้วย while 
กลุ่ม 6 อาร์เรย์

39.    อ่านข้อมูลจากอาร์เรย์แบบตัวเลข 3 สมาชิกมาพิมพ์ ไม่ใช้ for

40.    อ่านข้อมูลจากอาร์เรย์แบบตัวอักษร 3 สมาชิกมาพิมพ์ ไม่ใช้ for

41.    อ่านข้อมูลจากอาร์เรย์แบบตัวเลข 3 สมาชิกมาพิมพ์ ใช้ for

42.    อ่านข้อมูลจากอาร์เรย์แบบตัวอักษร 3 สมาชิกมาพิมพ์ ใช้ for

43.    รับข้อมูลจากแป้นพิมพ์เก็บลงอาร์เรย์ แล้วนำมาพิมพ์ใหม่

44.    รับข้อมูลจากแป้นพิมพ์เก็บลงอาร์เรย์ แล้วนำมาพิมพ์ใหม่ เฉพาะมากกว่า 10

45.    รับข้อมูลจากแป้นพิมพ์เก็บลงอาร์เรย์ แล้วนำมาพิมพ์ใหม่ เฉพาะน้อยกว่า 10 
กลุ่ม 7 คำนวณเบื้องต้น

46.    พิมพ์ค่าสูงสุด จากอาร์เรย์ที่ถูกกำหนดเป็นค่าคงที่ในโปรแกรม

47.    พิมพ์ค่าต่ำสุด จากอาร์เรย์ที่ถูกกำหนดเป็นค่าคงที่ในโปรแกรม

48.    พิมพ์ค่าผลรวม จากอาร์เรย์ที่ถูกกำหนดเป็นค่าคงที่ในโปรแกรม

49.    พิมพ์ค่าเฉลี่ย จากอาร์เรย์ที่ถูกกำหนดเป็นค่าคงที่ในโปรแกรม

50.    พิมพ์ค่าสูงสุด จากอาร์เรย์ที่รับค่าจากแป้นพิมพ์

51.    พิมพ์ค่าต่ำสุด จากอาร์เรย์ที่รับค่าจากแป้นพิมพ์

52.    พิมพ์ค่าผลรวม จากอาร์เรย์ที่รับค่าจากแป้นพิมพ์

53.    พิมพ์ค่าเฉลี่ย จากอาร์เรย์ที่รับค่าจากแป้นพิมพ์ 
กลุ่ม 8 แฟ้มข้อมูล หรือฐานข้อมูล

54.    อ่านข้อมูลจากแฟ้มข้อมูล มาแสดงทางจอภาพ

55.    อ่านข้อมูลจากแฟ้มข้อมูล มาแสดงทางจอภาพ โดยมีเลขลำดับกำกับ

56.    อ่านข้อมูลจากแป้นพิมพ์ แล้วเขียนลงแฟ้มข้อมูล

57.    อ่านข้อมูลจากแฟ้มข้อมูล เขียนลงแฟ้มใหม่อีกแฟ้มหนึ่ง

58.    เพิ่มข้อมูลในแฟ้มข้อมูล เมื่อได้รับข้อมูลจากแป้นพิมพ์

59.    ลบข้อมูล แบบต่าง ๆ

60.    แก้ไขข้อมูล แบบต่าง ๆ

งานที่มอบหมายให้นักศึกษาไปฝึก หรือทำแก้ตัวหลังสอบกลางภาค 
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

11. โปรแกรมเมอร์คนแรกของโลก

:: Augusta Lovelace Ada คือ โปรแกรมเมอร์คนแรกของโลก

:: Edsger Wybe Dijkstra ใช้คำว่า โปรแกรมเมอร์ (Programmer) กับโลกของคอมพิวเตอร์เป็นคนแรก 


Do not try to change the world. Give the world the opportunity to change itself 
Edsger Wybe Dijkstra เป็น theoretical physicist และเสียชีวิตด้วยโรคมะเร็ง ส.ค. 2002 (อายุ 72 ปี) 
http://www.twoguru.com/playground/article/dijkstra.htm 
http://www.cs.utexas.edu/users/dahlin/Classes/GradOS/papers/p341-dijkstra.pdf


 

12. 143 ภาษาคอมพิวเตอร์

:: ข้อมูลจาก http://www.thaiall.com/language

:: ข้อมูลจาก http://dmoz.org/Computers/Programming/Languages/ 143 ภาษา

:: ข้อมูลจาก http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm 2500 ภาษา

:: ข้อมูลจาก http://www.levenez.com/lang/ 50 ภาษา (Computer Languages Timeline)

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

Comments