วันอาทิตย์ที่ 16 พฤศจิกายน พ.ศ. 2551

if else !!


If else

โดยปกติแล้วโปรแกรมที่เราเขียนจะมีลำดับการทำงานจากบนไปล่าง ทีละคำสั่ง จบหนึ่งคำสั่งถึงไปทำอีกคำสั่งหนึ่ง แต่ถ้าเราต้องการให้มันทำงานเป็นเงื่อนไข คือต้องตัดสินใจว่าจะทำคำสั่งนึงหรือไม่ โดยขึ้นกับอีกคำสั่งนึง เราก็จะต้องใช้ control statement จำพวก if..else ลองอ่านประโยคข้างล่างดู

Console.Write("Please input number : ");
string s = Console.ReadLine();
int x = Int32.Parse(s);
if(x <>
 x = -x; 
Console.WriteLine("Non-negative number of your input is {0}", x); 

นั่นคือส่วนของโปรแกรมง่าย ๆ ซึ่งจะรับค่าตัวเลขมาหนึ่งตัว(อย่าลืมนะครับว่า Console.ReadLine() รับค่าเข้ามาเป็น string เสมอ เราจึงต้องใช้ Int32.Parse() ในการแปลงมาเป็นตัวเลข) แล้วตรวจสอบว่าถ้าเป็นค่าติดลบ เราจะทำให้เป็นค่าบวกก่อน สังเกตนะครับ ในภาษานี้ไม่เหมือนภาษาอื่นตรงที่ไม่มีคำว่า then หลัง condition เพราะว่าตรง condition นั้นมี '(' และ ')' ครอบอยู่(ต้องใส่ทุกครั้งนะครับ) ')' โดยวงเล็บปิดจะเป็นตัวบอกว่าจบ condition แล้ว และเริ่ม statement ที่จะต้องทำงานเมื่อถูกเงื่อนไข และถ้าเราต้องการให้มีการ execute statement หลาย ๆ statement ในเงื่อนไขเดียว เราต้องใช้เครื่องหมาย '{' และ '}' (วงเล็บปีกกา) ครอบกลุ่มคำสั่งเหล่านั้นไว้ เช่น

if( ) 
// statement_1 
// statement_2 
// ... 
// statement_n 

ถึงแม้ว่า statement หลัง if จะมีแค่ statement เดียว เราก็ควรจะใส่วงเล็บปีกกาครอบไว้เสมอ เพื่อความเป็นระเบียบ ลองมาดูอีกแบบกันดีกว่า
 
DateTime dtToday = DateTime.Today; 
DayOfWeek thisDay = dtToday.DayOfWeek; 
if((thisDay == DayOfWeek.Sunday) || (thisDay == DayOfWeek.Saturday)) 
Console.WriteLine("Today is weekend"); 
} else 
Console.WriteLine("Today is weekday"); 
ง่าย ๆ นะครับ คล้าย ๆ กับ else ของภาษาอื่น Nested if คือ if else if else if แบบต่อเนื่องกันนั่นแหละครับ 

Console.Write("Please input number : "); 
string s = Console.ReadLine(); 
int x = Int32.Parse(s); if(x <>
Console.WriteLine("{0} is negative number", x); 
else if(x > 0) 
{
Console.WriteLine("{0} is positive number", x);
} else {
Console.WriteLine("{0} is zero", x);
}


Dangling else
ภาษาหลาย ๆ ภาษาที่ไม่มีคำสั่ง end if (หรือ endif) มักจะเกิดปัญหาการตีความ ประโยคประมาณนี้

if(cond1) 
if(cond2) 
stmt1; 
else 
stmt2;

ถ้าอ่านแล้วจะตีความได้สองแบบ

แบบที่ 1
if(cond1)
if(cond2)
stmt1;
else
stmt2;

หรือ แบบที่ 2
if(cond1)
if(cond2)
stmt1;
else
stmt2;

ปัญหาข้างบนเกิดขึ้นบ่อยมาก ๆ สำหรับคนพึ่งหัดเขียนโปรแกรมใหม่ ๆ และมีการจัด indent ไม่ดี ทำให้คนเขียนเองก็ตีความสับสน วิธีจำง่าย ๆ ก็คือ

รักแท้ยังแพ้ความใกล้ชิด : else แท้ ๆ ก็รัก if ตัวที่อยู่ใกล้ที่สุด


เพราะฉะนั้นแบบที่สอง ถ.

ถ.
ถ.
ถ.
ถ. ถูกต้องนะค้าบ


ป.ล. บทความนี้ผมไม่ได้คิดเองนะครับ....
Credit: http://tidno1.exteen.com/

วันอังคารที่ 11 พฤศจิกายน พ.ศ. 2551

ลุงแจวเรือจ้าง....กับหนุ่มนักเรียนนอก

วันนี้พักเรื่องหนักๆมาอ่าน FW กันดีกว่านะครับ ( จริงๆแล้วขี้เกียจเขียนแหละครับ.. ) ลองเอาไปอ่านกันดูนะครับผมว่ามันได้คิดอะไรเยอะนะเนี่ย

ลุงแจวเรือจ้าง...กับหนุ่มนักเรียนนอก
เด็กหนุ่มคนหนึ่ง...เป็นชาวสงขลา...
เรียนเก่งมาก...
ได้ทุนไปเรียนอเมริกา...ตั้งแต่เด็ก...จนจบด็อกเตอร์...
จึงกลับมาเยี่ยมบ้าน...
บ้านของเด็กหนุ่ม...
อยู่อีกฟากหนึ่ง...ของทะเลสาบสงขลา...
ต้องนั่งเรือแจว...ข้ามไป...ใช้เวลาแจวประมาณหนึ่งชั่วโมง...
เรือที่ติดเครื่องยนต์...ไม่มีเหรอ...ลุง...?
ไม่มีหรอกหลาน...ที่นี่มันบ้านนอก...
มันห่างไกลความเจริญ...มีแต่เรือแจว...
โอ...ล้าสมัยมากเลยนะลุง...โบราณมาก...
ที่อเมริกา....เขาใช้เครื่องบินกันแล้วลุง...ลุงยังมานั่งแจวเรืออยู่อีก...
ไปส่งผมฝั่งโน้น...เอาเท่าไร...ลุง...?
80 บาท...
OK...ไปเลยลุง...
ในขณะที่ลุงแจวเรือ...
หนุ่มนักเรียนนอก...ก็เล่าเรื่องความทันสมัย...
ความก้าวหน้า...ความศิวิไลช์...ของอเมริกาให้ลุงฟัง...
เมืองไทย...เมื่อเทียบกับอเมริกาแล้ว...ล้าสมัยมาก...
ไม่รู้คนไทย...อยู่กันได้ยังไง...?
ทำไมไม่พัฒนา...ทำไมไม่ทำตามเขา...เลียนแบบเขาให้ทัน...?
ลุง...ลุงใช้คอมพิวเตอร์...ใช้อินเตอร์เน็ต...เป็นไหม...?
ลุงไม่รู้หรอก...ใช้ไม่เป็น...
โอโฮ้...ลุงไม่รู้เรื่องนี้น่ะ....ชีวิตลุงหายไปแล้ว...25 %....
แล้วลุงรู้ไหมว่า...เศรษฐกิจของโลก...ตอนนี้เป็นยังไง...?
ลุงไม่รู้หรอก...
ลุงไม่รู้เรื่องนี้นะ...ชีวิตของลุงหายไป...50 %
ลุง...ลุงรู้เรื่องนโยบายการค้าโลกไหม...ลุง...?
ลุง...ลุงรู้เรื่องดาวเทียมไหม...ลุง...?
ลุงไม่รู้หรอก...หลานเอ๊ย...
ชีวิตของลุง...ลุงรู้อยู่อย่างเดียว...
ว่าจะทำยังไง...ถึงจะแจวเรือให้ถึงฝั่งโน้น...
ถ้าลุงไม่รู้เรื่องนี้...ชีวิตของลุง...หายไปแล้ว...75 %
พอดีช่วงนั้น...
เกิดลมพายุพัดมาอย่างแรง...คลื่นลูกใหญ่มาก...ท้องฟ้ามืดครึ้ม...
นี่พ่อหนุ่ม...เรียนหนังสือมาเยอะ...จบดอกเตอร์จากต่างประเทศ...
ลุงอยากถามอะไรสักหน่อยได้ไหม...?
ได้...จะถามอะไรหรือลุง...?
เอ็งว่ายน้ำเป็นไหม...?
ไม่เป็นจ๊ะ...ลุง....
ชีวิตของเอ็ง...กำลังจะหายไป 100 % ...แล้วพ่อหนุ่ม...

อ่านแล้วเป็นไงบ้างครับ คิดเหมือนผมรึเปล่า คิดยังไงก้บอกกันบ้างนะครับ

วันจันทร์ที่ 10 พฤศจิกายน พ.ศ. 2551

มาหาจำนวนเฉพาะกันดีกว่า

หลังจากที่แล้วๆมาผมเขียนแต่บทความที่อ่านง่าย (ความรู้ผมมันมีแค่นั้นครับ) วันนี้ผมเลยไปเอาบทความ chaowman มาฝากกันครับ เผื่อคนที่เข้ามาจะเบื่อบทความของผมลองอ่านกันดูนะครับ

http://www.bloggang.com/viewblog.php?id=chaowman&date=18-07-2008&group=1&gblog=5

เป็นบทความที่เกี่ยวกับการเขียนโทย์แก้ปัญหาตัวประกอบที่เป็นจำนวนเฉพาะครับ...ลองอ่านกันดูนะครับ
If Statement

if เป็นคำสั่งที่จะให้ทำงานที่มีการตัดสินใจนะครับ... โดยจะมีรูปแบบในการเขียนเป็นแบบนี้นะครับ
if ( condition )
statement ;
โดยนี่เป็นการเขียน if กับ คำสั่งเพียงคำสั่งเดียว แล้วถ้าเราจะใช้หลายๆคำสั่ง(statements) จะทำได้โดยนำ { และ } มาครอบคำสั่งหลัง if ไว้
if ( condition )
{
statement1;
statement2;
....
statements;
}
โดยนี่เป็นหลักการใช้ if ง่ายๆครับ เรามาดูโค้ดตัวอย่างกันดีกว่านะครับ
// โปรแกรมตัดเกรดอย่างง่ายโดยการใช้ if อย่างเดียว ( ครั้งหน้าเราจะมาว่ากันเรื่อง if else )
โหลดได้ที่นี่นะครับ >>>http://th.moneyupload.com/75098_20081110081800_grade.cs.rar.html
แค่นี้เราก้จะได้โปรแกรมคำนวณเกรดแบบง่ายๆมาหนึ่งโปรแกรมแล้วครับ
ยังไงก้ลองไปหัดใช้ if กันมาละครับใครว่างก็ลองทำโปรแกรม ATM ดูนะครับ
คราวหน้าเรามาต่อบทความกับ If else นะครับ