2007/Jul/04

ค่าต่างๆ และตัวแปร

หวังว่า หลังจากอ่านกันแล้วก็ได้ทดลองอะไรกันบ้างแล้วนะฮะ
เริ่มเอาคำสั่งต่างๆที่เรารู้จัก มาใช้ร่วมกันแล้วยัง?

วันนี้จะมานำเสนอ เรื่องเกี่ยวกับ ค่าต่างๆ และตัวแปร!

เริ่มมาจากค่าประเภท ตัวเลข ก่อน
ตัวเลข นั้นมีอยู่ 2 ประเภท คือ int และ float (ย่อมาจาก integer และ floating-point)
int ก็คือ ค่าประเภท จำนวนเต็ม (ไม่มีทศนิยม)
float ก็คือ ค่าประเภท มีจุดทศนิยม

เรามาลองทำอะไรแบบนี้กัน

เสร็จแล้วลองกด Add Shred ดูครับ มีผลออกมาทาง Console อย่างไรกันบ้าง?
ถ้าทำถูกต้อง ผลก็จะออกมาเป็น

0 :(int)
1 :(int)

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

เรามาดูความหมายของประโยคข้างบนกัน
int x;
แต่ก่อนเราเคยทำแบบนี้แล้ว คือ SinOsc s
อย่าง SinOsc s มันแปลว่า สร้าง Sinewave Oscillator ขึ้นมาหนึ่งตัว ชื่อ s
ส่วน int x ก็แปลว่า สร้าง จำนวนเต็ม ขึ้นมาหนึ่งตัว ชื่อว่า x

อย่างนี้นี่เอง
คราวนี้ เราลองสร้างตัวแปรอีกตัว แต่ดันเอาตัวเลข ไป ชักใส่ซะงั้น
เอา 1 ไปชักใส่ กลายเป็น
1 => int y;
ความหมายก็คือ สร้างจำนวนเต็มขึ้นมาหนึ่งตัว ให้ชื่อว่า y
แล้วกำหนดค่าเป็น 1

ทำให้เวลาพิมพ์ออกแล้ว เห็นค่า x, y เป็น 0, 1 ตามลำดับ
- - -

ต่อไป ลองทดลองกับข้อมูลชนิด float บ้าง
float x;
0.1 => float y;
<<< x >>>;
<<< y >>>;

ได้ผลอย่างไรกัน? มาดูผลที่ผมได้
0.000000 :(float)
0.100000 :(float)

ค่า x กับ y ที่เรากำลังใช้งานอยู่นี่ เราเรียกว่า ตัวแปร (variables)
ตัวแปรก็เหมือนสิ่งที่เอาไว้เก็บค่า และสามารถเปลี่ยนค่าไปเรื่อยๆได้ (มันแปรเปลี่ยนไปได้)

เรามาลองทำการคำนวณ และมีการ เปลี่ยนค่าของ x กัน
3 => int x;
<<< "x = ", x >>>;
2 * x - 1 => int y;
<<< "y = ", y >>>;
2 * y => x;
<<< "x = ", x >>>;

ได้ผลออกมาเป็น
x = 3
y = 5
x = 10

ลองวิเคราะห์ดูเล่นๆได้เลย ไม่ยากฮะ
กำหนด x เป็นจำนวนเต็ม ให้ค่าเป็น 3
เสร็จแล้วคำนวณ 2 คูณ x ลบด้วย 1 ก็คือ 2x3 - 1 = 6 - 1 = 5
ก็เอาค่านี้ ชักเข้าไปใส่ y ซึ่งเพิ่งถูกสร้างขึ้นมาเป็นจำนวนเต็มพอดี
หลังจากนั้น เอาค่า 2 คูณ y ไปชักใส่ x
พอพิมพ์ x อีกที จะเห็นว่า x ได้เปลี่ยนไปแล้ว ไม่ใช่ 3 อย่างเดิมแล้ว
จะมีค่าใหม่ คือ 10
- - -

สรุปเครื่องหมายบวกลบคูณหารให้:
+ บวก
- ลบ
* คูณ
/ หาร
% หาเศษจากการหาร (หรือเรียกว่า โมดูโล - modulo)


เพื่อทำการทดสอบ ลองค่าเหล่านี้ได้
<<< 7 + 3 >>>;
<<< 7 - 3 >>>;
<<< 7 * 3 >>>;
<<< 7 / 3 >>>;
<<< 7 % 3 >>>;
- - -
การเปลี่ยนจาก int เป็น float และ float เป็น int

ปกติ ตัวแปรชนิด int ก็จะเก็บค่าที่เป็นจำนวนเต็มแบบเดียว พวกทศนิยมจะถูกตัดทิ้ง
มาครับ ทำให้ดู:

โค้ดลงไปดังนี้ได้ผลออกมาดังนี้
1 => int x;
<<< x >>>;
x + 2 => x;
<<< x >>>;
1 :(int)
3 :(int)
1 => int x;
<<< x >>>;
<<< x + 1.6 >>>;
1 :(int)
2.600000 :(float)
1 => int x;
x + 1.6 => x;
เกิดปัญหา error ขึ้น
โปรแกรมไม่อนุญาตให้สั่งทำงาน
เนื่องจาก
cannot resolve operator '=>' on types 'float' and 'int'...
แปลว่า ไม่อนุญาตให้เอาค่า float
ไปเก็บในตัวแปร int!
ดังนั้นถ้าเก็บใส่ตัวแปรชนิด float แทน
ก็จะไม่มีปัญหา
1 => int x1;
x1 + 1.6 => float x2;
<<< x1, x2 >>>;
1 2.600000

แต่ถ้าเราต้องการจะต้องเก็บมันลงไปในตัวแปรชนิด int จริงๆ
หรือต้องเอาไปใช้งานในลักษณะเป็นจำนวนเต็มแท้ๆ
สามารถบังคับให้ผลลัพท์ออกมาเป็น int ได้
ด้วยการทำ casting
เราสามารถ cast ชนิดของข้อมูลได้ด้วยเครื่องหมาย $
เช่น
โค้ดลงไปดังนี้ได้ผลออกมาดังนี้
<<< 1 $ float >>>;
1.000000 :(float)

ก็เป็นการ cast จากค่าชนิด int
ไปเป็นค่าชนิด float
<<< 1.1 $ int >>>;
<<< 0.1 $ int >>>;
<<< -0.9 $ int >>>;
1 :(int)
0 :(int)
0 :(int)

เป็นการ cast จากค่าชนิด float
ไปเป็นค่าชนิด int
สังเกตได้ว่า "ทศนิยมถูกตัดออก"
แหละแต่จำนวนเต็มข้างหน้า

แบบนี้ เราก็เก็บค่าที่คำนวณ เข้าไปในตัวแปร int ได้แล้ว
1 => int x;
(x + 3.2) $ int => x;
<<< x >>>;
4 :(int)


เป็นอย่างไรบ้างครับ
อันนี้ก็เป็นการเริ่มต้นเกี่ยวกับข้อมูลชนิดที่เป็นตัวเลขกัน

วันนี้ พอแค่นี้ก่อนเน้อ ไปนอนล่ะ อิอิ

- kij
ชื่อ: 
เว็บไซต์: 
คอมเมนต์:




smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry
อ่านแล้วซับซ้อนซ่อนเงื่นจริงๆเลยอ่ะนาย*
#1  by  Space360 (58.10.234.116) At 2007-08-14 13:17, 
แลลว่า งง มากเรยคับเพิ่งเคยเจอก็ ที่นี่แหละ..อยากรู้ว่าเข้าใช้กันแบบไหน อะ ??? ช่วยผมที
#2  by  Sheep_Box@hotmail.com (125.24.108.144) At 2007-09-11 13:17, 

<< Home


กิจจาศักดิ์ ตริยานนท์
View full profile