|
|
|
[Programming Technique] - #2 Eliminate nested 'if'
มาต่อตอน 2 ด้วยการกำจัดประโยค if ที่ซ้อนกันหลายๆ ชั้น ซึ่งเราจะได้ code ที่อ่านได้ง่ายขึ้น หลายคนคงเคยไล่ if block ที่ซ้อนกันหลายๆ ชั้น คงนึกออก 
ตัวอย่าง
while(1) { if(i == 0) { DoSomething_1(); if(j > 3) { if(k == 5) DoSomething_2(); else DoSomething_3(); } else DoSomething_4(); DoSomething_5(); } }
อันนี้ตัวอย่างง่ายๆ ถ้า code ยาวๆ แต่ละ block สัก 4-5 บรรทัด ก็จะเริ่มตาลายได้ ทีนี้เรามาเอา nested if block ออกกัน โดย
- inverse logic รวมกับการใช้ end block keyword ต่างๆ อันได้แก่ break continue - combine logic เข้าด้วยกัน
while(1) { if(i != 0) continue; DoSomething_1(); bool IsDoSomething_2 = j > 3 && k == 5; bool IsDoSomething_3 = j > 3 && k != 5; if(IsDoSomething_2) DoSomething_2(); else if(IsDoSomething_3) DoSomething_3(); else DoSomething_4(); DoSomething_5(); }
จบอีกตอน หวังว่า code ของท่านๆ จะสละสลวยเข้าตากรรมการยิ่งขึ้น

| Create Date : 29 ตุลาคม 2550 |
| Last Update : 30 ตุลาคม 2550 11:26:10 น. |
| |
|
|
|
|
[C++] - ค่า PI
สวัสดีทุกท่าน 
หลังจากผมมี Internet ใช้ที่บ้าน เหมือนชาวโลกเค้าแล้ว ก็เลยอยากจะ Update blog เน่าๆ นี้หน่อย
วันนี้ขอนำเสนอบทความเกี่ยวกับค่า PI บทความนี้จริงๆ ได้ถูกตีพิมพ์ในเดือนพฤษภาคมปี 2003 ใน "C/C++ User Journal" ที่หายสาบสูญไปแล้ว (ไปรวมกับ Dr. Dobb's Journal) - ขอไว้อาลัย ณ. ที่นี้ 
ผมจะเขียนมันขึ้นจากความทรงจำน่ะหล่ะ
ค่า PI ใน library ของภาษา C++ นั้นไม่ได้ถูก define ไว้ เพราะฉะนั้น เวลาเราจะใช้เรา ก็ต้องทำการ define มันขึ้นมา
#define PI 3.141926535897932384626433832795
เห็นอะไรไหมเอ่ย คือค่าข้างบนนี้เราพิมพ์ตกไปตัวนึง ที่ถูกต้องคือ
#define PI 3.1415926535897932384626433832795
อันนี้เป็นปัญหาค่า Constant value ในโปรแกรมต่างๆ ของเรา แต่เป็นโชคดีของ ค่า PI ที่เรามันวิธีแก้ปัญหานี้อย่างฉลาดๆ
เนื่องจาก Intel math co-processor ได้รวมคำสั่ง ที่สามารถนำ ค่า PI จาก processor มา push ลง stack ได้ คือ fldpi ดูตัวอย่างนะครับ
#include "stdio.h" class cPI { public: operator double () const { double Pi; _asm { fldpi; // Push the constant pi to the x87 stack fst Pi; // Store to Pi } return Pi; } }; static cPI PI; int main() { double x = PI; printf("Pi = %f\n", x); return 0; }
วิธีการนี้คือ เราสร้าง class cPI ขึ้นแล้ว overload double operator เพื่อทำ implicit conversion สำหรับตัวแปร double (ข้อดีของวิธีนี้ คือ จะเห็นได้ว่าตอนเรียกใช้ ค่า PI มันจะเหมือนเป็นตัวแปรตัวนึงเลย ไม่ได้อยู่ในรูป function)
จากนั้นใน function เราก็ return ค่า PI ออกมาจาก processor เท่านั้นเอง
จบแล้วครับ หวังว่าจะได้มาเขียนอีกบ่อยๆ เนี่ย เสียค่าเน็ทเดือนตั้งแพง เดี๋ยวใช้ไม่คุ้มหล่ะแย่เลย
| Create Date : 31 มีนาคม 2550 |
| Last Update : 30 ตุลาคม 2550 11:20:30 น. |
| |
|
|
|
|
[C++] - Swap integer without variable
Swap integer without variable
เขียนไว้กันลืม
void swap(int &a, int &b) { a^=b^=a^=b; }
| Create Date : 03 มีนาคม 2549 |
| Last Update : 30 ตุลาคม 2550 11:21:33 น. |
| |
|
|
|
| |
|
 |
กะต่อ |
|
 |
|
|
|