Math.PI การควบคุมการไหลของโปรแกรม

advertisement
การโปรแกรม C#:
นิพจน์ เงื่อนไข และการทาซา้
01204111 คอมพิวเตอร์และการโปรแกรม
แผนการ
• นิพจน์ การอ่านข้อมูลเข้า และการแสดงผล
• การควบคุมการไหลของโปรแกรม
– นิพจน์ตรรกศาสตร์
– เงือ่ นไข
– การทาซ้า
ภาพรวม
การทาซา้
คาสั่งเงื่อนไข
การควบคุมการไหลของโปรแกรม: นิพจน์ ตรรกศาสตร์ (เงื่อนไข)
การแปลงข้ อมูล, เมธอดทางคณิตศาสตร์
พืน้ ฐาน
ตัวแปร, นิพจน์ , การอ่ านข้ อมูลเข้ า การส่ งข้ อมูลออก
คาเตือน
• เนื้อหาในการบรรยายครัง้ นี้จะค่อนข้างเยอะ เมือ่ เทียบกับการบรรยาย
ก่อนช่วงการสอบกลางภาค
• อย่างไรก็ตาม ไม่วา่ เราจะเขียนภาษาใด แนวคิดหลัก ๆ ของการ
โปรแกรมนัน้ จะยังเหมือนเดิม
• แต่สงิ่ ทีจ่ ะเปลีย่ นไปคือ
– ไวยากรณ์ทน่ี ิสติ จะต้องพยายามปรับเล็กน้อย
– แนวคิดปลีกย่อยต่าง ๆ ซึง่ จะได้เน้นต่อไป
โปรแกรมภาษา C#: ทบทวน
using System;
namespace Sample
{
class Program
{
static void Main()
{
Console.WriteLine("Hello, world");
}
}
}
• โปรแกรมจะเริม่ ทางานทีเ่ มธอด Main
• โปรแกรมประกอบด้วย namespace, class และ method
• อาจไม่ตอ้ งประกาศส่วน namespace ก็ได้
ภายในเมธอด Main
• การประกาศตัวแปร
• คาสัง่
static void Main(string[] args)
{
const double pi = 3.1416;
int radius;
double area;
radius = int.Parse(Console.ReadLine());
area = pi*radius*radius;
Console.WriteLine(area);
}
ข้อควรระวัง 1 การปิดคาสัง่
• ในภาษา C# ทุก ๆ คาสังจะต้
่ องปิดด้วยเครือ่ งหมาย ;
int x;
int y = 10;
x = int.Parse(Console.ReadLine());
if(x > y)
Console.WriteLine("Good");
• ยกเว้นกรณีทเ่ี ป็ นคาสังรวม
่
ทีร่ วมกันในเครือ่ งหมาย { }
if(x <= y)
{
Console.WriteLine("Ummm");
Console.WriteLine("Try harder.");
}
ตัวแปร: ทบทวน
• เมือ่ เราต้องการเก็บค่าระหว่างการทางาน เราจะใช้ตวั แปร
(variable)
• ในภาษา C# ก่อนใช้ตวั แปรต้อง
– มีการประกาศก่อน
– ระบุแบบชนิด (type) ของข้อมูลทีจ่ ะเก็บในตัวแปรนัน้
แบบชนิดข้อมูลพืน้ ฐานใน C#: ทบทวน
Type
Size
Description
bool
char
byte
1 byte
1 byte
1 byte
Store truth value
Store one character
Store positive integer
short
int
2 byte
4 byte
Store integer
Store integer
long
8 byte Store integer
double 16 byte Store real number
string
N/A
Store sequence of
characters
Range
true / false
character code 0 – 255
0 – 255
-32,768 -- 32,767
-2.1 x 109 -- 2.1 x 109
-9.2 x 1018 -- 9.2 x 1018
± 5.0x10-324 -± 1.7x10308
N/A
แบบข้อมูลที่สาคัญ
• ค่าตรรกะ bool
– มีสองค่า คือ true และ false
• จานวนเต็ม int
– เก็บค่าในขอบเขต 2.1 x 109 -- 2.1 x 109
• จานวนจริง double
– เก็บค่าในขอบเขต ± 5.0x10-324 -- ± 1.7x10308
แบบข้อมูลที่สาคัญ
• ข้อความ string
– เขียนในเครือ่ งหมายคาพูดคูเ่ ท่านัน้ เช่น "Hello"
– ถ้าต้องการเครือ่ งหมายคาพูด ให้นาหน้าด้วย \ เช่น
s = "He says \"I love you.\"";
Console.WriteLine(s);
He says "I love you."
• อักขระ char
– แทนอักษรตัวเดียว เขียนในเครือ่ งหมายคาพูดเดีย่ ว
ตัวแปร: ชื่อ
• ตัวแปรจะต้องมีชอ่ื การตัง้ ชือ่ จะต้องทาตามกฎง่าย ๆ ดังนี้
– ประกอบด้วย: ตัวเลข ตัวอักษรภาษาอังกฤษ หรืออักษรขีดเส้นใต้
– ตัวแรกต้องเป็ นตัวอักษรภาษาอังกฤษ หรือขีดเส้นใต้ (_)
– ไม่ซ้ากับชื่อสงวน (reserved words)
• ตัวพิมพ์เล็ก-ตัวพิมพ์ใหญ่ แตกต่างกัน
ตัวอย่ าง

_data 
name
Name

point9

9point
class

class_A

class_”A”


การประกาศตัวแปร: ทบทวน
• จะต้องระบุแบบชนิด
• สามารถกาหนดค่าเริม่ ต้นไปพร้อม
กันได้
int radius;
string firstName;
double GPA;
int radius = 5;
string firstName = "john";
double GPA = 2.4;
นิพจน์
• การคานวณค่าต่าง ๆ จะเขียนเป็ นนิพจน์ (expression)
คล้ายคลึงกับใน Python
นิพจน์
นิพจน์เลขคณิต
นิพจน์ตรรก
ตัวดาเนินการ
• สาหรับตัวดาเนินการเลขคณิตโดยมากแล้วทางานเหมือนใน
ไพธอน ยกเว้นเครือ่ งหมายหาร ( / )
– ตัวดาเนินการ: + - * /
– ตัวดาเนินการ: % (หารเอาเศษ)
• การคานวณค่าของนิพจน์จะประมวลผลตัวดาเนินการ
ตามลาดับความสาคัญ
ตัวดาเนินการ
• นิพจนเหล
านี
ี าเท
์
่ ้มค
่ าใด?
่
– 11 + 5  16
หารจานวนเต็ม ได้ ผลลัพธ์ เป็ นจานวนเต็ม
– 39 / 5  7
– 39.0/5  7.8 การหารที่เกี่ยวข้ องกับจานวนจริง ผลลัพธ์ เป็ นจานวนจริง
– 39 % 5  4
– 5.0 % 2.2  0.6
การอ่านข้อมูลเข้า
• เมธอดหลักทีเ่ ราจะใช้ในการอ่านข้อมูลเข้าเป็ นสตริงในภาษา
C# คือเมธอด
Console.ReadLine()
string name = Console.ReadLine();
Console.WriteLine("Your name is {0}", name);
การแปลงข้อมูลจากสตริง
• อย่างไรก็ตาม ถ้าเราต้องการนาข้อมูลไปคานวณ เราจาเป็ น
จะต้องแปลงสตริง ให้เป็ นข้อมูลประเภททีเ่ ราต้องการ
– เมธอด int.Parse แปลงสตริงเป็ นจานวนเต็ม
– เมธอด double.Parse แปลงสตริงเป็ นจานวนจริง
string sc = Console.ReadLine();
int count = int.Parse(Console.ReadLine());
int age = int.Parse(Console.ReadLine());
double time = double.Parse(Console.ReadLine());
การแสดงผล
• เมธอด Console.Write กับ Console.WriteLine ทา
หน้าทีห่ ลักในการแสดงผลออกทางจอภาพ
– เมธอด Console.Write ทางานเหมือนกับ Console.WriteLine แต่
ไม่ขน้ึ บรรทัดใหม่
• เราสามารถจัดรูปแบบการแสดงผลได้โดยง่ายด้วยเมธอดทัง้
สองนี้
การใช้งานเมท็อด Console.WriteLine
• การใช้งานทัวไป
่
Console.WriteLine("Hello");
Console.WriteLine(area);
• การระบุกรอบสาหรับพิมพ์
Console.WriteLine(”Size {0}x{1}”, width, height);
• การกาหนดรูปแบบการพิมพ์
double salary=12000;
Console.WriteLine("My salary is {0:f2}.", salary);
20
มุมนักคิด
• เขียนโปรแกรมรับส่วนสูง (เป็ นเมตร) และน้าหนัก (เป็ น
กิโลกรัม) จากนัน้ คานวณค่า BMI ตามสูตรต่อไปนี้
BMI =
Weight in Kilograms
(Height in Meters) X (Height in Meters)
Enter weight (in kg): 83
Enter height (in m): 1.7
Your BMI is 28.72.
เฉลยมุมนักคิด
public static void Main(string[] args)
{
Console.Write("Enter weight (in kg): ");
double w = double.Parse(Console.ReadLine());
Console.Write("Enter height (in m): ");
double h = double.Parse(Console.ReadLine());
Console.WriteLine("Your BMI is {0}.",
w / (h*h));
(กดเพือ่ แสดง)
Console.ReadLine();
}
จัดรูปแบบไม่ สวย
Enter weight (in kg): 83
Enter height (in m): 1.7
Your BMI is 28.719723183391.
การจัดรูปแบบการพิมพ์อย่างง่าย
• ในการแสดงผลจานวนจริง WriteLine อาจแสดงผลด้วยความละเอียด
ทีม่ ากเกินไป
Console.WriteLine("Your BMI is {0:f2}.", w / (h*h));
เพิ่มรูปแบบการแสดงผล :f2 เข้ าไปในสตริงระบุวิธีการพิมพ์
f หมายถึงแสดงจานวนจริงเป็ นทศนิยม, 2 ระบุจานวนหลักของทศนิยม
Enter weight (in kg): 83
Enter height (in m): 1.7
Your BMI is 28.72.
มุมนักคิด 1: มดข้ามสะพาน
• มีสะพานอันหนึ่งยาว m เมตร มดตัวหนึ่งเริม่ ต้นเดินจากปลายสะพาน
ด้านหนึ่งด้วยความเร็ว v เมตร/วินาที เมือ่ เดินไปถึงปลายอีกข้างก็จะ
กลับหลังหันแล้วเดินกลับมาทันทีดว้ ยความเร็วเท่าเดิม มดตัวนัน้ เดิน
ไปเป็ นเวลา t นาที ถามว่ามดเดินข้ามสะพานครบกีร่ อบ (เดินรอบ
หนึ่งคือเดินไป-กลับมาทีจ่ ุดเริม่ ต้นไม่นบั รอบทีเ่ ดินไม่ครบ
เขียนโปรแกรมรับค่า m, v, และ t เป็ นจานวนจริง
แล้วคานวณว่ามดเดินไปได้ครบกี่รอบ
แนวคิด
• จากเวลาและความเร็วสามารถคานวณระยะทางทีม่ ดเดินได้
• จากระยะทางทีม่ ดเดิน และความยาวของสะพาน สามารถหา
จานวนรอบทีม่ ดเดินได้ โดยการหาร
– อย่างไรก็ตาม เราจะต้องปดั เศษทีไ่ ด้จากการหารทิง้ ด้วย เพราะ
เราต้องการได้จานวนรอบทีเ่ ดินได้ครบ
– เราจะเขียนส่วนทีค่ านวนแล้วได้จานวนรอบเป็ นทศนิยมก่อน แล้ว
ค่อยมาปรับแก้ในส่วนนี้
เฉลยมุมนักคิด 1 (ครึ่งทาง)
• แสดงเฉพาะส่วนเมธอด Main
static void Main()
{
Console.Write("Enter m (m): ");
double m = double.Parse(Console.ReadLine());
Console.Write("Enter v (m/s): ");
double v = double.Parse(Console.ReadLine());
Console.Write("Enter t (min): ");
double t = double.Parse(Console.ReadLine());
(กดเพือ่ แสดง)
double dist = v * t * 60;
double walk = dist / (2*m);
Console.WriteLine("Number of times = {0}", walk);
Console.ReadLine();
}
การแปลงแบบชนิดข้อมูล
• ข้อมูลหลายแบบชนิดสามารถแปลงไปมาได้
• ภาษา C# จะแปลงข้อมูลแบบชนิดทีเ่ ล็กกว่าไปหาข้อมูลที่
แบบชนิดใหญ่กว่าให้โดยอัตโนมัติ
short  int 
long
int  double
การบังคับแปลงแบบชนิดข้อมูล
• สาหรับการแปลงทีน่ อกเหนือจากนัน้ เราจะต้องบังคับให้เกิดการแปลง
เอง (เรียกว่าการ cast) รูปแบบของการแปลงเป็ นดังนี้
(แบบชนิดข้อมูลใหม่) ค่า
• ตัวอย่างเช่น ถ้าเราต้องการแปลงจานวนจริง 2.75 เป็ นจานวนเต็ม
เราจะเขียน
ได้ผลลัพธ์เป็ น 2
(int) 2.75
ในการแปลง
เป็ นต้น
double เป็ น int
• บางครัง้ จะต้องใส่วงเล็บในส่วนค่าทีจ่ ะแปลงด้วย
จะปัดลงเสมอ
เฉลยมุมนักคิด 1
• แสดงเฉพาะส่วนเมธอด Main
static void Main()
{
Console.Write("Enter m (m): ");
double m = double.Parse(Console.ReadLine());
Console.Write("Enter v (m/s): ");
double v = double.Parse(Console.ReadLine());
Console.Write("Enter t (min): ");
double t = double.Parse(Console.ReadLine());
(กดเพือ่ แสดง)
double dist = v * t * 60;
int walk = (int)(dist / (2*m));
Console.WriteLine("Number of times = {0}", walk);
Console.ReadLine();
}
ตัวดาเนินการเพิ่มเติม
• ในภาษา C# ยังมีตวั ดาเนินการอีกสองแบบทีม่ ปี ระโยชน์
– ตัวดาเนินการสาหรับการเพิม่ ลดค่าทีละหนึ่ง
– ตัวดาเนินการสาหรับปรับค่า
ตัวดาเนินการสาหรับปรับค่า
• เช่นเดียวกับในภาษาไพธอน ภาษา C# มีตวั ดาเนินการทีใ่ ช้
สาหรับปรับค่าตัวแปร
x = x + 10
x += 10
y = y * 7
y *= 7
z = z / 7
z /= 7
ตัวดาเนินการ ++, -• หลายครัง้ ทีเ่ ราต้องการเพิม่ ค่าตัวแปรครัง้ ละ 1 เรามีตวั
ดาเนินการพิเศษสาหรับการนี้โดยเฉพาะ
x = x + 1
x += 1
x++
x = x - 1
x -= 1
x--
ตัวอย่าง: ไล่พิมพ์ค่า
int a = 1;
while(a <= 10)
{
Console.WriteLine(a);
int a = 1;
while(a <= 10)
{
Console.WriteLine(a);
a = a + 1;
}
}
int a = 1;
while(a <= 10)
{
Console.WriteLine(a);
a++;
}
a += 1;
ฟั งก์ชนั ทางคณิตศาสตร์
• ภาษา C# มีชุดคาสังเพื
่ อ่ คานวณทางคณิตศาสตร์ เมธอด
เหล่านี้รวมอยูใ่ นคลาส Math ดังแสดงเป็ นรายการในหน้า
ถัดไป
รายการเมธอดทางคณิตศาสตร์
Method/
Constant
Value returned
Example Call
Result
PI
Value of 
Math.PI
3.1415927
Max(x,y)
Larger of the two
Math.Max(1,2)
2
Abs(x)
Absolute value of x
Math.Abs(-1.3)
1.3
Sqrt(x)
Square-root of x
Math.Sqrt(4.0)
2.0
Round(x)
Nearest integer to x
Math.Round(0.8)
1
Pow(x,y)
xy
Math.Pow(3,2)
9.0
Log(x)
Natural log of x
Math.Log(10)
2.302585
Ceiling(x)
Smallest integer greater Math.Ceiling(4.1)
than or equal to x
5
Cos(x)
Cosine of x radians
-1
Math.Cos(Math.PI)
มุมนักคิด
จงเขียนโปรแกรมรับรัศมีของวงกลม จากนัน้ คานวณพืน้ ทีข่ อง
วงกลมนัน้
Enter radius: 6
The area is 113.0973
คาแนะนา: Math.PI
การควบคุมการไหลของโปรแกรม
• หัวใจของการควบคุม: เงือ่ นไข หรือ นิพจน์ตรรกศาสตร์
• กรอบของการควบคุม:
– คาสังเงื
่ อ่ นไข: if, if-else
– คาสังท
่ าซ้า: while, do-while, for
height <= True
140
x > 0
x > 0
True
x < 0
True
x < 0
x == 0
เงื่อนไข: นิพจน์ ตรรกศาสตร์
• เงือ่ นไขเกิดจากการ
– เปรียบเทียบ
– รวมเงือ่ นไขย่อย ๆ เข้าด้วยกัน
ตัวดาเนินการ
เปรี ยบเทียบ
ตัวดาเนินการ
ตรรกศาสตร์
ข้อมูลประเภท bool
• แบบชนิดข้อมูลทีใ่ ช้แสดงสถานะทางตรรกศาสตร์คอื แบบชนิด
ข้อมูล bool
– จริง : true
– เท็จ : false
เช่นเดียวกับภาษาไพธอน
ตัวพิมพ์เล็กกับพิมพ์ใหญ่
แตกต่างกันในภาษา C#
ดังนันระวั
้ งว่า True
นันไม่
้ เท่ากับ true
ตัวดาเนินการเปรียบเทียบ
ตัวดาเนินการ
==
!=
<
<=
>
>=
ความหมาย
ตัวอย่ าง
เท่ ากับ
a == 5
ไม่ เท่ ากับ
done != False
น้ อยกว่ า
data < 10
น้ อยกว่ าหรือเท่ ากับ
count <= 15
มากกว่ า
money > 0
มากกว่ าหรือเท่ ากับ interest >= 0.02
ตัวดาเนินการตรรกศาสตร์
และ
&&
หรือ
||
นิเสธ
(not)
!
ตัวอย่าง
x ไม่เท่ากับ 0
หรือ y เท่ากับ 10
(x!=0) || (y==10)
i น้ อยกว่า n
และ x ไม่เท่ากับ y
(i<n) && (x!=y)
a มีค่าระหว่าง b
ถึง c
(a >= b) &&
(a <= c)
คาสัง่ if
• คาสัง่ if ใช้ควบคุมการทางานของโปรแกรมตามเงือ่ นไข
if( เงือ่ นไข )
คำสั่ง
คาสัง่ if-else
• คาสัง่ if-else ใช้ควบคุมการทางานของโปรแกรมสองส่วน
if( เงือ่ นไข )
คำสั่ง
else
คำสั่ง
ตัวอย่าง
รถไฟฟ้ามีสว่ นลด 50% ให้กบั เด็กทีม่ อี ายุไม่เกิน 10 ปี ราคาเต็มสาหรับ
ผูใ้ หญ่คอื 50 บาท รับอายุจากนัน้ ให้พมิ พ์ราคาค่าตั ๋ว
static void Main()
{
int age = int.Parse(Console.ReadLine());
if(age <= 10)
Console.WriteLine("Price = 25");
else
Console.WriteLine("Price = 50");
}
ข้อระวัง
• ในภาษาไพธอน คาสัง่ if ไม่จาเป็ นต้องเขียนเงือ่ นไขในวงเล็บ
if age <= 10:
print("Hello!")
• แต่ในภาษา C# วงเล็บตามหลังคาสัง่ if (และคาสัง่ while)
เป็ นส่วนหนึ่งของไวยากรณ์ของภาษา ไม่สามารถละได้
if(age <= 10)
Console.WriteLine("Hello");
คาสังว่
่ าง
• เช่นเดียวกับในภาษาไพธอน ในภาษา C# เราสามารถมีคาสัง่
ทีไ่ ม่ทาอะไรได้ ซึง่ เรียกว่าคาสังว่
่ าง โดยเขียนเป็ น
;
• เช่น if(x > 15)
;
else
Console.WriteLine("hello");
การควบคุมหลายคาสัง่
• คาสัง่ if และ if-else จะควบคุมคาสังถั
่ ดไปแค่คาสังเดี
่ ยวเท่านัน้ ยิง่
ไปกว่านัน้ ในภาษา C# การย่อหน้าไม่มผี ลในเชิงความหมายใด ๆ
กับโปรแกรม (ไม่เหมือนภาษาไพธอน)
if age <= 10:
print("Hello, kid")
print("Your price is 25 baht")
แปลงเป็ น C#
if(age <= 10)
Console.WriteLine("Hello, kid");
Console.WriteLine("Your price is 25 baht");
บล็อค (block) การรวมคาสัง่
• เราสามารถรวมคาสังหลายค
่
าสังเข้
่ าด้วยกันเป็ นบล็อค (block) โดยใช้
เครือ่ งหมายวงเล็บปีกกา { }
• บล็อคจะทาหน้าทีเ่ หมือนคาสังหนึ
่ ่งคาสัง่
if age <= 10:
print("Hello, kid")
print("Your price is 25 baht")
if(age <= 10)
{
Console.WriteLine("Hello, kid");
Console.WriteLine("Your price is 25 baht");
}
แปลงเป็ น C#
บล็อก
ข้อระวัง
• ในภาษา C# สิง่ ทีก่ าหนดบล็อกคือวงเล็บปีกกาเท่านัน้ การ
เว้นย่อหน้าไม่มผี ลใด ๆ
if(x > 0)
total += x;
count++;
มีความหมาย
ไม่เหมือนกับ
มีความหมาย
เหมือนกับ
if(x > 0)
total += x;
count++;
if(x > 0)
{
total += x;
count++;
}
มุมนักคิด
• จากการคานวณ BMI ในตัวอย่างก่อน ให้บอกกับผูใ้ ช้เพิม่ เติม
ว่าผูใ้ ช้มสี ถานะด้านน้าหนักเป็ นอย่างไร ตามตารางด้านล่างนี้
BMI
สถานะ
ต่ากว่ า 18.5
Underweight
มากกว่ าหรื อเท่ ากับ 18.5 แต่ น้อยกว่ า 25
Normal
มากกว่ าหรื อเท่ ากับ 25.0 แต่ น้อยกว่ า 30
Overweight
มากกว่ าหรื อเท่ ากับ 30
Obese (Extremely Fat)
ให้เขียนเฉพาะส่วนของโปรแกรมทีร่ ะบุสถานะเทานั
่ ้น
ให้สมมติวาค
่ า่ BMI ถูกคานวณไวแล
้ ว
้ ในตัวแปร bmi
เฉลย 1: if ธรรมดา
if(bmi < 18.5)
Console.WriteLine("Underweight");
if((bmi >= 18.5) && (bmi < 25))
Console.WriteLine("Normal");
if((bmi >= 25) && (bmi < 30))
(กดเพือ่ แสดง)
Console.WriteLine("Overweight");
if(bmi >= 30)
Console.WriteLine("Extremely fat");
เฉลย 2: if ซ้อนกัน
if(bmi < 18.5)
Console.WriteLine("Underweight");
else
if(bmi < 25)
Console.WriteLine("Normal");
else
(กดเพือ่ แสดง)
if(bmi < 30)
Console.WriteLine("Overweight");
else
Console.WriteLine("Extremely fat");
การใช้คาสัง่ if ที่ซ้อนกัน
if(a > 5)
if(b < 10)
Console.WriteLine("Hello");
else
Console.WriteLine("Good-bye");
if(a > 5)
if(b < 10)
Console.WriteLine("Hello");
else
Console.WriteLine("Good-bye");
โปรแกรมทัง้ สองนี ้
เหมือนกัน เพราะว่ าใน
ภาษา C# ช่ องว่ างและ
การเว้ นย่ อหน้ าไม่ มีผล
ต่ อความหมายของ
โปรแกรม
แล้ ว else ในโปรแกรม เชื่อมกับ if ตัวใด?
การจับคู่ else กับ if
if(a > 5)
if(b < 10)
Console.WriteLine("Hello");
else
Console.WriteLine("Good-bye");
if(a > 5)
if(b < 10)
Console.WriteLine("Hello");
else
Console.WriteLine("Good-bye");
ในกรณีท่ ไี ม่ มีการระบุอย่ างชัดเจน
else จะจับคู่กับ if ที่อยู่ใกล้ กว่ าเสมอ
การใช้บล็อค
• ถ้าต้องการให้ else จับคูแ่ บบอื่น เราจะต้องระบุโดยการสร้าง
บล็อคให้ชดั เจน
if a > 5:
if b < 10:
print("Hello")
else:
print("Good-bye")
if(a > 5)
{
if(b < 10)
Console.WriteLine("Hello");
}
else
Console.WriteLine("Good-bye");
ตัวอย่าง: หักภาษี
• ในการหักลดหย่อนภาษี ถ้ามีบุตร สามารถหักลดหย่อนได้คน
ละ 15,000 บาท แต่หกั ได้ไม่เกิน 3 คน
• ต้องการเขียนโปรแกรมดังด้านล่าง
Do you have any children (Y/N)? N
Your deduction is 0 baht.
Do you have any children (Y/N)? Y
How many children do you have? 2
Your deduction is 30000 baht
Do you have any children (Y/N)? Y
How many children do you have? 5
Your deduction is 45000 baht
ลดหย่อน: แผนการ
• เก็บมูลค่าการลดหย่อนในตัวแปร deduction
• เขียนส่วนเงือ่ นไขแรก ทีถ่ ามว่ามีบุตรหรือไม่ก่อน
• จากนัน้ ค่อยเพิม่ รายละเอียดส่วนอื่น
ลดหย่อน: ขัน้ แรก
public static void Main(string[] args)
{
Console.Write("Do you have any children (Y/N)? ");
string ans = Console.ReadLine();
int deduction = 0;
if(ans == "Y")
{
// ส่วนจัดการกรณีทม
่ี บี ุตร
}
else
deduction = 0;
Console.WriteLine("Your deduction is {0} baht.", deduction);
Console.ReadLine();
}
Y หรือ y
• ถ้าต้องการให้ผใู้ ช้ตอบ Y ได้ทงั ้ ตัวพิมพ์เล็ก และพิมพ์ใหญ่ จะ
แก้สว่ นเงือ่ นไขใน if อย่างไร?
if(ans == "Y")
if((ans == "Y") || (ans == "y"))
{
// ………
}
ใช้ตัวเชือ
่ ม "หรือ" ( || )
ลดหย่อน: สมบูรณ์
public static void Main(string[] args)
{
Console.Write("Do you have any children (Y/N)? ");
string ans = Console.ReadLine();
int deduction = 0;
if((ans == "Y") || (ans == "y"))
{
Console.Write("How many children do you have? ");
int ccount = int.Parse(Console.ReadLine());
if(ccount > 3)
ccount = 3;
deduction = ccount * 15000;
}
else
deduction = 0;
Console.WriteLine("Your deduction is {0} baht.", deduction);
Console.ReadLine();
}
การทาซา้
• ในส่วนนี้เราจะศึกษาคาสังที
่ ใ่ ช้ในการทาซ้าสองคาสังคื
่ อ
คาสั่ง while
ตรวจเงื่อนไขก่ อน ค่ อยทา
คาสั่ง do-while
ทาก่ อน แล้ วค่ อยตรวจเงื่อนไขเพื่อทาซา้
คาสัง่ while
• คาสัง่ while มีลกั ษณะการทางาน
เหมือนกับคาสัง่ while ในภาษาไพธอน
while( เงือ่ นไข )
คำสั่ง
condition
true
statement 1
false
statement 2
:
statement n
63
คาสัง่ do-while
• คาสัง่ do - while ไม่มใี นภาษาไพธอน
statement 1
statement 2
do
คำสั่ง
while( เงือ่ นไข );
:
statement n
true condition
false
64
ตัวอย่าง
• รับรหัสผ่าน จนกว่าผูใ้ ช้จะพิมพ์ "hellocsharp"
string pwd;
เขียนด้วย while
pwd = Console.ReadLine();
while(pwd != "hellocsharp")
pwd = Console.ReadLine();
string pwd;
เขียนด้วย do-while
do
pwd = Console.ReadLine();
while(pwd != "hellocsharp");
นิสิตคิดว่าแบบใดเข้ าใจได้ ง่ายกว่า ?
ตัวอย่าง
• รับจานวนเต็ม n พิมพ์เลข 1 – n บรรทัดละหนึ่งตัว
เขียนด้วย while
int n = int.Parse(
Console.ReadLine());
int i = 1;
while(i <= n)
{
Console.WriteLine(i);
i++;
}
int n = int.Parse(
Console.ReadLine());
int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while(i <= n);
เขียนด้วย do-while
ข้อระวัง
• แม้วา่ คาสัง่ while กับ do-while จะคล้ายกันมาก ข้อแตกต่างที่
สาคัญคือ คาสัง่ do-while จะไม่ตรวจสอบเงือ่ นไขในการ
ทางานครัง้ แรก
จากตัวอย่างที่แล้วถ้า n เป็ น 0 ค่า 1 จะถูกพิมพ์ออกมาด้วย
int n = int.Parse(
Console.ReadLine());
int i = 1;
do
{
Console.WriteLine(i);
i++;
}
while(i <= n);
มุมนักคิด
• ต้องการรับจานวนเต็ม n จากนัน้ พิมพ์ 1 ไล่ไปจนถึง n โดย
พิมพ์เลขบรรทัดละ 8 ตัว คันแต่
่ ละคูด่ ว้ ยช่องว่าง ไปจนจบ
พิมพ์เลข: แผนการ
• พิมพ์เลขทุกตัวในบรรทัดเดียวกันให้ได้ก่อน
• จากนัน้ ค่อยมาแยกบรรทัดเมือ่ ถึงตัวทีต่ อ้ งการ
พิมพ์เลข: 1
int n = int.Parse(
Console.ReadLine());
int i = 1;
while(i <= n)
{
Console.Write(i);
i++;
}
20
12345678910111213141516171
81920
• ปรับโปรแกรมให้พมิ พ์โดยไม่ขน้ึ บรรทัดใหม่
– ขัน้ ตอนต่อไป: เพิม่ ช่องว่างระหว่างพิมพ์
พิมพ์เลข: 2
int n = int.Parse(
Console.ReadLine());
int i = 1;
while(i <= n)
{
Console.Write("{0} ", i);
i++;
}
20
1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20
• จัดรูปแบบการพิมพ์เป็ น "{0}
– ขัน้ ตอนต่อไป: ขึน้ บรรทัดใหม่
"
พิมพ์เลข: 3
int n = int.Parse(
Console.ReadLine());
int i = 1;
while(i <= n)
{
Console.Write("{0} ", i);
i++;
}
20
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20
if(___________________)
Console.WriteLine();
• เราจะแทรกคาสังส
่ าหรับขึน้ บรรทัดใหม่ในโปรแกรมนี้
• จะขึน้ บรรทัดใหม่เมือ่ ครบ 8 ตัว นันคื
่ อเมือ่ i มีคา่ เป็ น 8, 16, 24, …
พิมพ์เลข: เสร็จ
int n = int.Parse(
Console.ReadLine());
int i = 1;
while(i <= n)
{
Console.Write("{0} ", i);
if(i % 8 == 0)
Console.WriteLine();
i++;
}
20
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20
• คาถาม: ถ้าแทรกหลังคาสัง่ i++ จะได้ผลลัพธ์เป็ นอย่างไร?
สรุป
• เนื้อหาส่วนนี้ เป็ นการอธิบายไวยากรณ์ของภาษา C# ในการ
ทางานพืน้ ฐานต่าง ๆ ทีเ่ ทียบเท่ากับในภาษาไพธอน
• สังเกตได้วา่ แม้เราจะเปลีย่ นภาษาไป แนวคิดพืน้ ฐานในการ
เขียนโปรแกรมก็ไม่ต่างกันมากนัก
Download