วันอาทิตย์ที่ 14 มิถุนายน พ.ศ. 2552

output & input (การแสดงผลและการรับข้อมูล)

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

การแสดงผลในโค้ดโปรแกรมภาษา C# สำหรับผู้เริ่มต้นจะเป็นการแสดงผลในรูปแบบของ Console หรือ ข้อความเพียงอย่างเดียว ซึ่งเป็นการปูพื้นฐานความเข้าใจที่ดีในการเขียนโปรแกรม เรามาดูโค้ดการแสดงผลในรูปแบบ Console กันเลยดีกว่าครับ

System.Console.WriteLine( parameter ) ;

โค้ดนี้จะเป็นการสั่งให้แสดงผลออกมาเป็นข้อความใน Console ซึ่งให้สังเกตุโค้ดให้ดีๆครับ มันมีที่มาที่ไป ในการนิยาม กล่าวคือ เราได้ทำการเรียก Namespace ชื่อ System จากนั้นคั่นด้วย "." และตามด้วย Class ที่ชื่อ Console คั่นด้วย "." ตามด้วยการเรียน เมธอด WriteLine() เพื่อใช้งานอีกที การเขียนโค้ดส่วนใหญ่เราจะอ้างอิงจากใหญ่ลงมาถึงส่วนเล็ก นั่นก็คือ Namespace > Class > Method ซึ่งอาจจะดูยาวเกินจำเป็น เราสามารถ กำหนดในส่วนหัวของโค้ดว่า using System ; เพื่อที่เราจะได้ไม่ต้องนิยามถึง Namespace กล่าวคือ โค้ดที่เราจะเขียนจะเหลือเพียง

Console.WriteLine( parameter ) ;

ซึ่งจะเป็นผลดีที่เราไม่ต้องเขียนโค้ดยาวๆ ไม่เพียงแต่ namespace System เท่านั้น เราสามารถอ้างอิง namespace อื่นๆได้อีก ด้วยเหตุผลเดียวกัน

ในตอนนี้ขอให้ความสำคัญในส่วนของผลลัพธ์ก่อนแล้วเราจะมาพูดถึงการนิยามโค้ดที่ถูกต้องกันในภายหลัง

การแสดงผลข้อความใน Console จะมี 2 แบบ

  • Console.Write( ) ;
    เป็นการแสดงผลข้อความโดยจะไม่มีการเว้นบรรทัด หรือ cursor จะอยู่หลังข้อความที่โปรแกรมได้พิมพ์
  • Console.WriteLine( ) ;
    เป็นการแสดงผลข้อความโดยจะมีการเว้นบรรทัด หรือ cursor จะเลื่อนไปอยู่บรรทัดใหม่

รูปแบบการใช้งานของโค้ดแสดงผล

Console.WriteLine( parameter ) ;
parameter ที่จะใส่เข้าไปจะมีอยู่ 2 แบบ คือ

- รูปแบบของ string โปรแกรมจะทำการแสดงผล string ที่เราพิมพ์เอาไว้ใน " " มาแสดงผล

Console.Write("Hello World!!");
เมื่อ Compile จะได้

Hello World!!

- เป็น object (ตัวแปร) เมื่อเราส่งค่าที่เป็น object ไปเพื่อแสดงผล โปรแกรมจะนำค่าของ object มาแสดงผล

int Number = 20 ;
Console.Write(Number) ;
เมื่อ Compile จะได้

20

Data Type Conversion การแปลงชนิดของข้อมูล.. !!!

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

  • Implicit Conversion
    เป็นการแปลงชนิดข้อมูลที่เกิดขึ้นโดยอัตโนมัติ เกิดจากการที่เรานำข้อมูลชนิดเดียวกันหรือต่างกันมากระทำกันทางคณิตศาสตร์ แล้วผลลัพธ์ที่ได้เกินขอบเขตของชนิดข้อมูล โดยจะแปลงไปสู่ขนาดของข้อมูลที่ใหญ่กว่าเสมอ เช่น

    int number1 = 20 ;
    double number2 = 3.5 ;

    ** ข้อมูลชนิด int จะรับข้อมูลที่เป็นตัวเลขเฉพาะจำนวนเต็มเท่านั้น
    number1 + number2 จะมีค่าเท่ากับ 23.5 ในโค้ดส่วนนี้จะเป็นตัวอย่างการกระทำการทางคณิตศาสตร์ ซึ่งจะทำให้ข้อมูลที่ได้ ถูกแปลงไปเป็น double โดยอัตโนมัติ (เนื่องด้วย number2 เป็นชนิดตัวแปรที่ใหญ่กว่า number1) ดังนั้น ต้องนำชนิดตัวแปรที่มีขอบเขตครอบคลุมผลลัพธ์ที่ได้ด้วยเพื่อป้องกันการ error ของโปรแกรม

    double Result = number1 + number2 ;
    // จริงๆแล้วชนิดข้อมูลที่นำมารองรับไม่จำเป็นต้องเป็น double ก็ได้ เพียงแต่ขอให้รองรับกับผลลัพธ์ของ number1 + number2 ได้ก็พอ

    int Resule = number1 + number2 ; // ตัวอย่างของโค้ดที่ผิด จะทำให้โปรแกรม error เพราะเกินขอบเขตของตัวแปร integer
  • Explicit Conversion
    การแปลงข้อมูลที่เราสามารถกำหนดให้เกิดความชัดเจน เช่น

    int number1 = 20 ;
    double number2 = 3.5 ;

    int Result = (int)(number1 + number2);
    ** จะเป็นการแปลง number1 + number2 เป็นข้อมูลชนิด int เพื่อที่จะทำให้ไม่เกินขอบเขตของตัวแปร Result ที่มารับ (ผลลัพธ์ ที่เป็นทศนิยมจะถูกปัดทำให้เกิดความคลาดเคลื่อนได้)
  • การใช้ เมธอด Parse
    เป็นการแปลงข้อมูลชนิด string หรือข้อความเมื่อข้อความนั้นเป็นข้อความของตัวเลข เป็นข้อมูลชนิดตัวเลข (สามารถกำหนดเป็น int หรือ double ก็ได้) ตัวอย่างของโค้ด

    string Number = " 200" ; // 200 ในชนิดของ string ไม่สามารถนำไปคำนวณได้
    int ConvertNum = int.Parse(Number) ;
    ก็จะได้ตัวแปร ConvertNum ที่มีค่าเท่ากับ 200 สามารถนำไปใช้ในการคำนวณได้ต่อไป
    ** ส่วนใหญ่เราจะใช้ เมธอด Parse แปลงข้อมูล string ตัวเลข ที่รับมาจากการใส่ค่าของผู้ใช้โปรแกรม
    ** ในส่วนของ Parse(Number) Number จะถูกเรียกว่า argument หรือตัวแปรที่จะส่งค่าไปเพื่อแปลงเป็น string

    เช่น int InputNum = int.Parse(Console.ReadLine( )) ; // ซึ่งจะอธิบายต่อไปในส่วนของการรับค่า
  • การใช้ เมธอด ToString
    เป็นการแปลงข้อมูลที่ทำหน้าที่ตรงกันข้ามกัน เมธอด Parse ซึ่งก็คือจะแปลงข้อมูลชนิดตัวเลข ไปเป็นข้อมูลชนิด string ซึ่งส่วนใหญ่จะแปลงไปเพื่อไปแสดงผลในรูปแบบต่างๆ ตัวอย่างโค้ดเช่น

    double ShirtCost = 599 ;
    string ShowCost = Convert.ToString(ShirtCost) ;
    ตัวแปร ShowCost จะมีค่าเป็น 599 ในชนิด string เพื่อที่จะนำไปแสดงผลต่อไป
    ** ในส่วนของ ToString(ShirtCost) ShirtCost จะถูกเรียกว่า argument หรือตัวแปรที่จะส่งค่าไปเพื่อแปลงเป็น string

วันอังคารที่ 9 มิถุนายน พ.ศ. 2552

Operator (สัญลักษณ์การดำเนินการ) 1#

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

  • ตัวดำเนินการทางคณิตศาสตร์ ( Arithmetic Operator )
    1.) " + " เครื่องหมาย บวก ตัวอย่างการใช้งาน

    int a = 5 ;
    int b = 3 ;
    int c = a + b ;
    (ดังนั้น c = 8)


    2.) " - " เครื่องหมาย ลบ

    int a = 5 ;
    int b = 6 ;
    int c = b - a ;
    (ดังนั้น c = 1)

    3.) " * " เครื่องหมาย คูณ

    int a = 5 ;
    int b = 2 ;
    int c = a * b ;
    ( c = 10 )

    4.) " / " เครื่องหมายการ หาร

    int a = 6 ;
    int b = 3 ;
    int c = a/b ;
    ( c = 2 )


    5.) " % " เครื่องหมายการ หารเอาเศษ

    int a = 3 ;
    int b = 2 ;
    int c = a%b ;
    ( c = 1 ) (ค่า c จะเป็นเศษของการหาร)

    ขั้นตอนการคำนวณของคอมพิวเตอร์ในตัวดำเนินการทางคณิตศาสตร์ (สิ่งที่จะเรียงลำดับต่อไปนี้ จะเป็นสิ่งที่คอมพิวเตอร์จะให้ความสำคัญ หรือทำงานก่อนลำดับถัดไป)
    1.
    วงเล็บ " ( " , " ) " ไม่ว่าอย่างไรก็ตาม คอมพิวเตอร์จะทำการคำนวณในวงเล็บให้เสร็จก่อนดำเนินการต่อไป
    2. การคูณ และ การหาร (*), (/) นับจากซ้ายไปขวา เจอเครื่องหมายใด (คูณ หรือ หาร) ก็จะทำก่อน
    3. การบวก และ ลบ (+), (-) จากซ้ายไปขวาเช่นกัน เจอเครื่องหมายใด (บวก หรือ ลบ) ก็จะทำก่อน

    มาดูตัวอย่างกันซักหน่อยเพื่อความเข้าใจ
    10/5 + (6+1*12)/2 = ?
    ตอบ 11 ครับ
    ขั้นแรกให้ทำในวงเล็บก่อนครับ โดยในวงเล็บให้ทำเครื่องหมายคูณก่อน จะได้ (6+12) จากนั้นพอคำนวณในวงเล็บเสร็จเราจะได้ 10/5 + 18/2 จากนั้น ในทำการหารจากซ้ายไปขวา (เจออันไหนทำก่อน) จะได้ 2 + 9 = 11 นั่นคือคำตอบ

  • ตัวดำเนินการในการกำหนดค่า ( Assignment Operator )
    เป็นสัญลักษณ์ในการป้อนค่าต่างๆให้กับตัวแปรเพื่อที่จะเก็บค่านำไปประมวลผลต่อ

    1. " = " ทำหน้าที่นำ ค่า/ข้อความ จากฝั่งขวาของ "=" ใส่ในตัวแปรที่อยู่ฝั่งซ้ายของ "=" เช่น
    int c = 12 ; // เป็นการป้อนค่า 12 ให้กับตัวแปร c
    string text = "hello" ; // เป็นการป้อนข้อความ hello ให้ตัวแปร text

    2. " += " ทำหน้าที่ บวก ค่าเดิมของตัวแปรฝั่งซ้ายกับ ค่า/ข้อความ ทางฝั่งขวา ก่อนจะรับค่าเข้ามาอีกทีหนึ่ง เช่น
    int a = 3 ; // กำหนดค่าเริ่มต้นให้ a เท่ากับ 3 ;
    a += 6 ; // มีความหมายเหมือนกับ a = a+6
    (ดังนั้น a = 9)

    3. " -= " ทำหน้าที่ ลบ ค่าเดิมของตัวแปรฝั่งซ้ายกับ ค่า/ข้อความ ทางฝั่งขวา ก่อนจะรับค่าเข้ามาอีกทีหนึ่ง เช่น
    int b = 6;
    b -= 3 ; // มีความหมายเหมือนกับ b = b-3
    (b = 3)


    4. " *= " ทำหน้าที่ คูณ ค่าเดิมของตัวแปรฝั่งซ้ายกับ ค่า/ข้อความ ทางฝั่งขวา ก่อนจะรับค่าเข้ามาอีกทีหนึ่ง เช่น
    int x = 10 ;
    x *= 2 ; // มีความหมายเหมือนกับ x = x*2
    ( x = 20 )


    5. " /= " ทำหน้าที่ หาร ค่าเดิมของตัวแปรฝั่งซ้ายกับ ค่า/ข้อความ ทางฝั่งขวา ก่อนจะรับค่าเข้ามาอีกทีหนึ่ง เช่น
    int y = 20 ;
    y /= 2 ; // มีความหมายเหมือนกับ y = y*2
    ( y = 10 )


    6. " %= " ทำหน้าที่ หารเอาเศษ ค่าเดิมของตัวแปรฝั่งซ้ายกับ ค่า/ข้อความ ทางฝั่งขวา ก่อนจะรับค่าเศษเข้ามาอีกทีหนึ่ง เช่น
    int g = 20 ;
    g %= 6 ; // มีความหมายเหมือนกับ g = g % 6
    ( g = 2 )

วันเสาร์ที่ 6 มิถุนายน พ.ศ. 2552

Magic Math Chapter 8

มาดูเทคนิคการคูณต่อครับ
แต่จะเป็นการคูณเลข 2 หลักที่ ลงท้ายด้วย 1 นะครับ
เช่น

51 x 81 = ?

ขั้นแรกให้ตั้งหลักหน่วยไว้เลยครับ ก็คือ 1
จากนั้นนำ 8 + 5 = 13 เก็บ 3 ไว้เป็นหลักสิบนะครับ จากนั้น เลข 1 เก็บไว้เพื่อนำไปทดในหลักร้อย
และนำ 8 x 5 = 40 ให้เป็นหลักพัน และ หลักร้อยครับ (หลักร้อยมีการบวกกับตัวทดด้วย)

ฉะนั้น คำตอบในข้อนี้จะได้เป็น

51 x 81 = 4131 ง่ายไหมม !!!! (ไม่เชื่อลองกดเครื่องคิดเลขดูได้เลยครับ)

มาดูตัวอย่างอีกซักข้อแล้วกันครับ

61 x 31 = ?

เหมือนเดิมครับตั้งหลักหน่วย ไว้เป็น 1
จากนั้นนำ 6 + 3 = 9 ตั้งไว้เป็นหลักสิบครับ
จากนั้นนำ 6 x 3 = 18 ครับ
ขั้นตอนสุดท้ายได้เวลารวมคำตอบครับ

61 x 31 = 1891 !!!

วันศุกร์ที่ 5 มิถุนายน พ.ศ. 2552

Magic Math Chapter 7

บทความนี้มาดูการคูณจำนวนสองหลักและสามหลัก กับ เลข 99 และ 999 กันครับ

มาเริ่มกันที่ การคูณเลขสองหลัก ด้วย 99 กันครับ
ดูโจทย์พร้อมกับทำความเข้าใจกันไปเลยแล้วกันนะครับ

53 x 99 = ?
ขั้นแรกให้นำ 53 - 1 = 52 เก็บเอาไว้เป็นหลักพันและหลักร้อยของคำตอบนะครับ
จากนั้น หาผลต่างของ 99 และ 52 ได้เท่าไหร่ นั่นคือ หลักสิบ และ หลักหน่วยของคำตอบครับ
ซึ่งก็ได้เท่ากับ 47 ครับ

ดังนั้น 53 x 99 = 5247 ครับ ง่ายไหม !!!
(ใครไม่เชื่อลองกดเครื่องคิดเลขดูเลยเอ้า)

มาต่อกันที่ การคูณเลขสามหลักด้วย 999 กันครับ

123 x 999 = ?
ขั้นแรกเหมือนเดิมครับให้นำ 123 - 1 = 122 เก็บเอาไว้เป็นหลักแสน หลักหมื่น และหลักพันของคำตอบครับ
จากนั้น หาผลต่างของ 999 และ 122 ครับ ได้เท่าไหร่ นั่นคือ หลักร้อย หลักสิบ หลักหน่วยของคำตอบครับ
ซึ่งก็จะได้เท่ากับ 877

ดังนั้น 123 x 999 = 122877 ครับ มันช่างง่ายดายเสียจริงถูกไหม ?

วันอังคารที่ 2 มิถุนายน พ.ศ. 2552

Object Foundation พื้นฐานความรู้ด้านอ๊อบเจ็ค

ในเมื่อ C# นั้นเป็นภาษาเชิง OOP 100% การที่จะข้ามการกล่าวถึง Object ไปดูจะเป็นอะไรที่ไม่สมเหตุสมผลเอาเสียเลย งั้นเรามาทำความเข้าใจกันก่อนดีกว่าครับ

อ๊อบเจ็ค (Object)
เกริ่นให้เข้าใจเกี่ยวกับอ๊อบเจ็คกันซักเล็กน้อย ในชีวิตประจำวัน อ๊อบเจ็ค คือ วัตถุที่สามารถสัมผัสได้ทั้งทางตรงและทางอ้อม และมีคุณสมบัติและความสามารถหลายประการ

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

ยกตัวอย่างให้เข้าใจถึงอ๊อบเจ็คง่ายๆ เช่น ดินสอ (นี่ก็คือวัตถุ) คุณสมบัติ (property) ของดินสอ อาจจะมีลักษณะยาวหรือสั้น ตามแต่ชนิด ส่วนประกอบ แกรไฟต์ ความยาว ความกว้าง เส้นผ่านศูนย์กลาง นี่คือคุณสมบัติครับหรือจะเรียนลักษณะทางกายภาพก็ได้เช่นกัน ความสามารถ (Method) ของดินสอก็คือ สามารถทำให้เกิดลวดลายบนแผ่นกระดาษได้ นำไปเคาะทำให้เกิดเสียงได้ เป็นต้น สำหรับที่กล่าวมานี่เป็นการอธิบายอ๊อบเจ็คที่เรียกว่าดินสอนะครับ ดินสอก็มีหลายชนิดใช่ไหมครับ 2B เอย 3B เอย ในเชิงอ๊อบเจ็คจะเรียกชนิดของอ๊อบเจ็คว่า "Class" ครับจะเป็นการบ่งบอกชนิดของอ๊อบเจ็ค

**คุณสมบัติ (Property) ลักษณะทางกายภาพของวัตถุ เช่น ความกว้าง ความยาว ความสูง สี กลิ่น รส (ถ้ามีนะ)

**ความสามารถ (Method) ผลที่เกิดหรือพฤติกรรมเมื่อมีการใช้งานวัตถุ

เนื่องจากภาษา C# ก็เป็นหนึ่งในภาษาที่มีแนวคิดแบบ OOP
( Object Oriented Programming ) 100%
จึงทำให้การเขียนโปรแกรมขนาดใหญ่เป็นเรื่องง่ายๆ เพราะการเขียนโปรแกรมจะเป็นในเชิงของวัตถุกล่าวคือ "เป็นอิสระจากกัน" ฟังดูอาจจะงงครับ ให้คุณผู้อ่านนึกถึงเครื่องคอมพิวเตอร์เครื่องหนึ่งที่มี ตู้ระบบรวมอุปกรณ์ต่างๆ อาทิเช่น แผงวงจรหลัก (เมนบอร์ด) การ์ดแสดงผล การ์ดเสียง ฮาร์ดดิส ฟรอปปี้ดิส และอีกมากมาย โอ๊คกำลังจะบอกว่า อุปกรณ์แต่ละมันทำหน้าที่เฉพาะเจาะจงของมันถูกไหมครับ การ์ดแสดงผลก็ควบคุมในส่วนของการแสดงผล การ์ดเสียงก็ควบคุมทางด้านเสียง ฮาร์ดดิสส่วนของการจัดเก็บข้อมูล เห็นไหมครับ แต่ละอุปกรณ์ล้วนมีหน้าที่เฉพาะเจาะจง เปรียบกับการเขียนโปรแกรมก็เช่นเดียวกัน เราจะเขียนการทำงานเฉพาะเจาะจงให้กับอ๊อบเจ็คแต่ละตัว โดยไม่มีความสัมพันธ์ใดๆต่อกัน เมื่อต้องการปรับแก้การทำงาน เราก็สามารถทำในส่วนของอ๊อบเจ็คนั้นๆได้ โดยที่เราไม่ต้องแก้โค้ดใหม่ทั้งหมด ซึ่งจะทำให้เสียเวลา หรือถ้าเป็นโปรแกรมใหญ่ๆก็จะเสียทั้งเงินต้นทุน และเวลามากมาย แนวคิด OOP จึงเป็นอีกทางเลือกของการเขียนโปรแกรมในปัจจุบัน

เพื่อเป็นแนวทางให้เข้าใจถึง อ๊อบเจ็ค อย่างดีก่อน แล้วเราจะมาพูดกันถึงการใช้งานของอ๊อบเจ็คกันอีกครั้ง.......

รับปรับมุมมองในการโปรแกรมมิ่งสำหรับผู้เริ่มต้นเขียนโปรแกรม

รับปรับมุมมองในการโปรแกรมมิ่งจากเรื่องยากๆไม่เข้าใจ จะช่วยทำให้เป็นเรื่องง่ายและสนุก แอดมาคุยกันได้ครับ (ขอจำกัดไว้สำหรับผู้เพิ่งเริ่มต้นเขียนโปรแกรมเท่านั้น ในระดับสูงไปกว่านี้เช่นเขียนจนชำนาญแล้วจะไม่รับนะครับ)
Powered By Blogger