Archive for the 'Labs' Category

Functional programming
Friday, June 29th, 2007

เทอมนี้ลงเรียนวิชา Logic and Functional Programming ไป แล้วก็รุ้สึกว่าได้พบเจออะไรใหม่ๆ ที่ไม่เคยเจอมาก่อน นั่นก็คือ Declarative Programming นั่นเอง คือเขียนโปรแกรมโดยการอธิบายปัญหาให้คอมพิวเตอร์ฟัง แล้วใส่คำตอบเข้าไป ก็จะได้คำตอบออกมาเลย ไม่ต้องคิดขั้นตอนวิธี รู้สึกสนุกดีเหมือนกัน ไม่ได้รู้สึกแบบนี้นานแล้ว ใครที่อยากรู้ว่ามันสนกุยังไง ก็ลองดูบรรทัดข้างล่าง แล้วลองเดาเอาครับ ว่าน่าจะได้ผลลัพธ์เท่าไหร่
let rec f = function 0->1 | 1->1 | 2->1 | x -> f(x-1) + f(x-2) in f 8;;
ยังมีอีก โค้ดข้างล่างนี่เป็นโค้ดสำหรับหา Powerset เมื่อให้ Array หนึ่งชุดครับ ลองคิดดูว่าถ้าเขียนใน C++ นี่ต้องคิดขนาดไหน ข้างล่างนี่ อาจจะเห็นว่ามันยุ่งๆ แต่ถ้าเข้าใจจริงๆ แล้ว มันเขียนง่ายกว่าเขียนเป็น C++ เยอะเลยครับ
let [...]

Algorithm Design lab 2: Matrix multiplication
Monday, June 25th, 2007

วันนี้ได้การบ้านจาก Lab Algorithm Design and Analysis มาอีก 4 ข้อด้วย เป็นโจทย์การคูณ Matrix ซึ่งมีทั้งแบบธรรมดา และแบบพิสดารของอาจารย์ ซึ่งคราวนี้ ให้ใช้วิธีของคุณ Strassen เขา ถ้าอยากรู้ว่าทำไง ลองเข้าไปอ่านจาก หน้า Wikipedia เอา แล้วอ่านกับที่จดมาจากในห้องเรียน น่าจะพอเข้าใจ
ไม่ได้เขียน Comment กำกับไ้ว้นะคราวนี้ แต่เขียนเป็นภาษา Java คิดว่าถ้าวันนี้ทำได้ ก็น่าจะอ่านโค้ดออกกันได้ไม่ลำบากอะไร แล้วก็ไม่ได้ตรวจเช็คกับคนอื่นด้วย ตรวจไปแค่ข้อ 3 ถ้าเกิดว่าเจอ Bug หรือข้อผิดพลาดก็บอกด้วยแล้วกัน
โค้ดนี้เขียนใน Eclipse น่ะนะ ไม่รู้ว่าเอาไปเปิดใน NetBeans แล้วจะมีปัญหาอะไรรึเปล่า แต่คิดว่าไม่น่าเป็นอะไร เพราะรู้สึกว่า Eclipse มันเตือนเรื่องมาตรฐาน (Convention) การเขียนโค้ด Java บ่อยมาก โดยเฉพาะการตั้งชื่อไฟล์หรือ package นี่ยิ่งเยอะ แต่ IDE เขียน [...]

Are you CS?
Monday, June 25th, 2007

คุณเป็นนักเรียนวิทยาการคอมพิวเตอร์จริงหรือเปล่าครับ? หรือว่าแค่มาเอาวิธีการเขียนโปรแกรมกับใบปริญญาไปหาิกิน คุณรู้จัก Pointer มากแค่ไหน คุณเป็นนิสิตปี 3 จริงๆ หรือเปล่า หรือว่าแค่น้องปี 1 บางคน คุณยังสู้เขาไม่ได้?
วันนี้ผมได้ไปอ่าน Blog หน้าหนึ่งของโปรแกรมเมอร์ที่ได้เกรด 0.0 วิชา Compilers มา เขาเขียนไว้ถึงเหตุผล ว่าทำไมเราถึงควรจะเรียน Compiler และวิชาสำคัญอื่นๆ อย่างเช่น OS และ AI (ใช่ครับ เขาได้ 0.0 แบบที่มีค่าเป็น False นั่นแหล่ะ ทุกบิทเป็น 0 หมด) เตือนก่อนว่ามันยาวมากๆ และเป็นภาษาอังกฤษหมด ถ้าคิดว่าไปอ่านแล้วคงเบื่อ ก็อย่าคลิกเข้าไปเลยครับ ชีวิตคุณจะมีความสุขขึ้นเยอะ แต่ถ้าเกิดว่าคุณอยากจะรู้ ว่าจบออกไปเป็นโปรแกรมเมอร์ตามบริษัทกินเงินเดือนไปวันๆ เขียนเป็นแต่ภาษา Java กับโปรแกรมเมอร์ที่หนวดยาวๆ วันๆ อยู่แต่ในห้องนอน ไม่อาบน้ำ ไม่กินข้าว แต่โปรแกรมที่เขาเขียนนั้นเปลี่ยนแปลงโลกได้ นั้นต่างกันยังไง ก็ลองเข้าไปอ่านดูครับ - Stevey’s [...]

Algorithm Design lab 1: Polynomial division
Saturday, June 23rd, 2007

เมื่อวันจันทร์ที่ผ่านมา ในแลปวิชา Algorithm Design and Analysis (จริงๆ มันไม่ใช่ Fundamental Algorithm นะ รู้สึกว่าจะเข้าใจผิดกันอยู่นาน) อาจารย์ให้การบ้านมาทำ 3 ข้อ คือให้เขียนฟังก์ชั่นการคำนวณค่า Polynomial เมื่อให้ Array สัมประสิทธิ์กับค่า x มา โดย 3 วิธีนี้จะใช้จำนวนการคูณต่างกัน ซึ่งก็ไม่ยากเท่าไหร่ เพราะอาจารย์เขียนเป็น Pseudo-code มาให้แล้ว แต่ว่ามันติดอยู่หนึ่งข้อที่ต้องทำการหาร Polynomial ก่อนจะเอาไปคำนวณ ซึ่งเพื่อนๆ ก็นั่งงงกันแล้วเดินมาถามเต็มเลย
นี่ก็เลยลองเขียนดู ว่าจริงๆ มันยากหรือเปล่า ก็เขียนด้วย Visual C++ อ่านะ แต่ว่าคิดว่าคงจะอ่านกันได้ ไม่ได้เขียนใช้อะไรพิศดารมากมาย เพราะปกติเขียนแต่ VB.NET ก็ลองอ่านดูก่อนแล้วกัน รอบนี้เขียน Comment เป็นภาษาไทยให้ด้วย
Algorithm ที่ใช้ก็คือวิธีหารยาวธรรมดาน่ะนะ จริงๆ ลองคิดๆ ดูแล้ว เวลาที่ใช้ในการหารที่มันเสียเวลาในระดับ O(n2) เลยนะ [...]

Simple Postfix evaluator
Friday, June 8th, 2007

นอนไม่หลับอีกแล้ว อุตส่าห์เข้านอนตั้งแต่สามทุ่ม ก็เลยลุกขึ้นมานั่งทำอะไรเล่นแก้เบื่อ กำลังอ่านเรื่อง ?-calculus ที่เรียนในวิชา Logic and Functional Programming ก็เลยนึกถึงเรื่องของ Postfix ขึ้นมา แล้วก็เลยเอามาทำเป็นโจทย์เสียเลย
โจทย์ก็คือ ให้เขียนโปรแกรมคำนวณตัวเลขในแบบ Postfix โดยที่ไม่มีการใส่วงเล็บ โดยต้องทำให้เร็วที่สุด กำหนดไฟล์ Input.txt ให้ บรรทัดแรกเป็นจำนวนของข้อมูลทั้งหมด และบรรทัดต่อๆ มาเป็นข้อมูลที่เรียงกันจากบรรทัดแรกไปจนถึงบรรทัดสุดท้าย เลขจำนวนเต็มบวกถือเป็นตัวเลขที่ใช้ในการคำนวณปกติ เลขจำนวนเต็มลบนั้นถ้ามีค่า -10 -20 -30 -40 และ -50 ถือว่ามีความหมายเป็นเครื่องหมายบวก ลบ คูณ หาร และกลับค่าจากบวกเป็นลบ ตามลำดับ ให้คำนวณนิพจน์ Postfix ที่กำหนดให้ แล้วบันทึกผลลัพธ์ลงในไฟล์ Output.txt
การเขียนนิพจน์แบบ Postfix นั้นคือการเขียนนิพจน์โดยนำตัวดำเนินการใส่ไว้ข้างหลังแทน และการดำเนินการนั้นจะทำกับตัวเลขสองตัวข้างหน้า ตัวอย่างเช่น
10 20 + มีค่าเหมือนกับ 10 + 20 และ 10 [...]