01204111 model codes
ตัวอย่างโปรแกรมที่ควรเขียนได้และเข้าใจเมื่อเรียนเนื้อหาแต่ละส่วน
เนื้อหา
- 1 แนะนำคอมพิวเตอร์และการโปรแกรม
- 2 ตัวแปร นิพจน์ โปรแกรมเชิงลำดับอย่างง่าย อินพุต/เอาท์พุต
- 3 โปรแกรมย่อยและไลบรารี
- 4 นิพจน์เชิงตรรกและโครงสร้างคำสั่งแบบทางเลือก
- 5 โครงสร้างคำสั่งแบบทางเลือกหลายชั้น
- 6 โครงสร้างคำสั่งแบบวนซ้ำ
- 7 โครงสร้างคำสั่งแบบวนซ้ำและอาร์เรย์ 1 มิติ
- 8 โครงสร้างคำสั่งแบบวนซ้ำหลายชั้น
- 9 โปรแกรมย่อยขั้นสูง
- 10 อาเรย์หลายมิติ
- 11 การแก้โจทย์เชิงประยุกต์
แนะนำคอมพิวเตอร์และการโปรแกรม
- 1 คาบ
- องค์ประกอบคอมพิวเตอร์เบื้องต้น
- ฮาร์ดแวร์ ซอฟต์แวร์ และระบบปฏิบัติการ
- การแทนข้อมูล
- ระบบเลขฐาน
- เครือข่ายคอมพิวเตอร์และอินเทอร์เน็ต (?)
- มโนทัศน์การโปรแกรม
- ภาษาระดับต่ำ
- ภาษาระดับสูง
- การแปลภาษา
- ขั้นตอนวิธีและการแตกปัญหาเป็นปัญหาย่อย
- โฟลว์ชาร์ท
ตัวอย่างโปรแกรม
โปรแกรมการกินข้าว
1. ขณะที่ ข้าวในจานยังไม่หมด ให้ทำดังนี้ 1.1 ถ้า ยังกินไหว ให้ทำดังนี้ 1.1.1 ตักข้าวเข้าปาก 1.2 ถ้าไม่เช่นนั้น 1.2.1 เลิกกิน 2. ถ้า ยังไม่อิ่ม และ เงินยังไม่หมด ให้ทำดังนี้ 2.1 ซื้อข้าวอีกจาน 2.2 กลับไปทำข้อ 1
ตัวแปร นิพจน์ โปรแกรมเชิงลำดับอย่างง่าย อินพุต/เอาท์พุต
- 1 คาบ
- แนะนำ data type เท่าที่จำเป็น
- int สำหรับจำนวนเต็ม (ไม่ต้องมี short หรือ byte)
- double สำหรับทศนิยม (ไม่ต้องมี float)
- char
- string
- ตัวดำเนินการพื้นฐาน +, -, *, /, %
- ลำดับความสำคัญ และวงเล็บ
- ยังไม่ต้องสอน ++, --, += และ -= ในตอนนี้
- อาศัย interactive shell ในการแสดงลำดับการคำนวณ การใช้ตัวแปร และการนำเอาลำดับเหล่านี้มารวมกันเป็นโปรแกรมเพื่อทำงานทีเดียว
- ??การประกาศตัวแปรด้วยคีย์เวิร์ด var
- การใช้ Console.ReadLine() และ Console.WriteLine() เมื่อเริ่มนำมาเขียนเป็นโปรแกรม
- แทรกเกร็ดเรื่อง formatting โดยใช้ Console.Write() ไปเรื่อย ๆ
- ?? ไม่ต้องสอนการประกาศตัวแปรแบบ const
- ไม่ต้องสอน ConvertTo() และการทำ type casting ระหว่างตัวเลขเป็นตัวอักษร (เช่น (int)'A' หรือ (char)65)
โปรแกรมย่อยและไลบรารี
- เป้าหมาย: การใช้โปรแกรมย่อยเพื่อการแบ่งปัญหาเป็นปัญหาย่อย และเพื่อให้โปรแกรมอ่านเข้าใจง่าย (ไม่ใช่เพื่อทำให้โปรแกรมสั้นลง)
- 1 คาบ
- การเรียกใช้ฟังก์ชันในคลาส Math และทบทวนการเรียกใช้ฟังก์ชันที่เคยทำมาแล้ว (ReadLine, WriteLine, Parse ฯลฯ)
- การสร้างโปรแกรมย่อยและฟังก์ชันขึ้นมาด้วยตนเองเพื่อคำนวณสูตรที่ไม่มีให้ในไลบรารี
- พารามิเตอร์และการส่งค่า
- ความหมายของพารามิเตอร์และอาร์กิวเมนต์
- ครอบคลุมเฉพาะ pass by value
- ?? การกำหนดพารามิเตอร์ด้วย keyword argument ตัวอย่างเช่น
double bmi(double weight, double height)
{
return weight/(height*height)*10000;
}
Console.WriteLine(bmi(height:175,weight:72));
- สโคปของตัวแปร
ลำดับของโปรแกรมที่จะพัฒนา
1. โปรแกรมคำนวณพื้นที่วงกลม 1
ตัวอย่างแรกสุดที่แสดงการเรียกโปรแกรมย่อยโดยไม่ต้องส่งพารามิเตอร์ใดๆ เพื่อแสดง top-down design ขั้นพื้นฐาน
using System;
namespace SRch1_circleArea
{
class CircleArea {
static void Main() {
ComputeCircleArea();
Console.ReadKey(true);
}
static void ComputeCircleArea() {
Console.Write("Enter a radius:");
double radius = double.Parse(Console.ReadLine());
double area = Math.PI*radius*radius;
Console.WriteLine("Area of a circle with radius {0} is {1}", radius, area);
}
}
}
โปรแกรมตัวอย่างอื่น ๆ
หาพื้นที่สี่เหลี่ยม
using System;
class MainClass
{
static double SquareArea (double sideLength)
{
return sideLength * sideLength;
}
public static void Main (string[] args)
{
double s = Double.Parse (Console.ReadLine ());
double area = SquareArea (s);
Console.WriteLine ("{0}", area);
}
}
ตัวอย่าง 2 (มีการใช้หลาย method)
- TODO
ตัวอย่าง 3 (มีการใช้หลาย method, ใน method มีการเรียนใช้ method อื่น)
- TODO
นิพจน์เชิงตรรกและโครงสร้างคำสั่งแบบทางเลือก
- ทุกตัวอย่างมีการใช้โปรแกรมย่อยเสมอ
ตัวอย่างโปรแกรม
คิดค่าส่งไปรษณีย์
using System;
class MainClass
{
const double MinWeightThreshold = 100;
static double CalculatePrice (double weight)
{
if (weight < MinWeightThreshold) {
return 1;
} else {
return weight / 100;
}
}
static double CalculatePriceWithFastDelivery (double weight)
{
if (weight < MinWeightThreshold) {
return 5;
} else {
double wlevel = weight / 100;
return 5 * wlevel * wlevel;
}
}
public static void Main (string[] args)
{
Console.Write ("Package weight:");
double weight = Double.Parse (Console.ReadLine ());
Console.Write ("Fast delivery? (Y/N)");
string answer = Console.ReadLine ();
double price;
if ((answer == "Y") || (answer == "y")) {
price = CalculatePriceWithFastDelivery (weight);
} else {
price = CalculatePrice (weight);
}
Console.Write ("You have to pay {0} baht.", price);
}
}
โครงสร้างคำสั่งแบบทางเลือกหลายชั้น
- ไม่ต้องสอน switch/case
- ใช้ flow-chart และตัวอย่างเยอะ ๆ
โครงสร้างคำสั่งแบบวนซ้ำ
- Notes: while, do-while ใช้ flow-chart ช่วย, แทรก ++/-- ณ จุดนี้
โครงสร้างคำสั่งแบบวนซ้ำและอาร์เรย์ 1 มิติ
- Notes: for-loop, ใช้ flow chart ไฟล์อินพุต
โครงสร้างคำสั่งแบบวนซ้ำหลายชั้น
- Notes: continue และ break
โปรแกรมย่อยขั้นสูง
- Notes: เช่น pass by reference, ส่ง array เข้าเมท็อด, string processing
อาเรย์หลายมิติ
- Notes: นำเข้าข้อมูลจาก csv
การแก้โจทย์เชิงประยุกต์
- Notes: เสริมเนื้อหาเช่น GUI