ผลต่างระหว่างรุ่นของ "01204111 model codes"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 81: แถว 81:
 
== นิพจน์เชิงตรรกและโครงสร้างคำสั่งแบบทางเลือก ==
 
== นิพจน์เชิงตรรกและโครงสร้างคำสั่งแบบทางเลือก ==
 
* ทุกตัวอย่างมีการใช้โปรแกรมย่อยเสมอ
 
* ทุกตัวอย่างมีการใช้โปรแกรมย่อยเสมอ
 +
=== ตัวอย่างโปรแกรม ===
 +
==== คิดค่าส่งไปรษณีย์ ====
 +
<syntaxhighlight lang="csharp">
 +
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);
 +
}
 +
}
 +
</syntaxhighlight>
  
 
== โครงสร้างคำสั่งแบบทางเลือกหลายชั้น ==
 
== โครงสร้างคำสั่งแบบทางเลือกหลายชั้น ==

รุ่นแก้ไขเมื่อ 21:34, 19 มิถุนายน 2559

ตัวอย่างโปรแกรมที่ควรเขียนได้และเข้าใจเมื่อเรียนเนื้อหาแต่ละส่วน

เนื้อหา

แนะนำคอมพิวเตอร์และการโปรแกรม

  • 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
  •  ?? ไม่ต้องสอนการประกาศตัวแปรแบบ const
  • ไม่ต้องสอน ConvertTo() และการทำ type casting ระหว่างตัวเลขเป็นตัวอักษร (เช่น (int)'A' หรือ (char)65)
  • ตัวดำเนินการพื้นฐาน +, -, *, /, %
    • ลำดับความสำคัญ และวงเล็บ
    • ยังไม่ต้องสอน ++, --, += และ -= ในตอนนี้
  • อาศัย interactive shell ในการแสดงลำดับการคำนวณ การใช้ตัวแปร และการนำเอาลำดับเหล่านี้มารวมกันเป็นโปรแกรมเพื่อทำงานทีเดียว
  • การใช้ Console.ReadLine() และ Console.WriteLine() เมื่อเริ่มนำมาเขียนเป็นโปรแกรม
  • แทรกเกร็ดเรื่อง formatting โดยใช้ Console.Write() ไปเรื่อย ๆ

โปรแกรมย่อยและไลบรารี

  • เป้าหมาย: การใช้โปรแกรมย่อยเพื่อการแบ่งปัญหาเป็นปัญหาย่อย และเพื่อให้โปรแกรมอ่านเข้าใจง่าย (ไม่ใช่เพื่อทำให้โปรแกรมสั้นลง)
  • 1 คาบ
  • การเรียกใช้ฟังก์ชันในคลาส Math และทบทวนการเรียกใช้ฟังก์ชันที่เคยทำมาแล้ว (ReadLine, WriteLine, Parse ฯลฯ)
  • การสร้างโปรแกรมย่อยและฟังก์ชันขึ้นมาด้วยตนเองเพื่อคำนวณสูตรที่ไม่มีให้ในไลบรารี
  • พารามิเตอร์และการส่งค่า
    • ความหมายของพารามิเตอร์และอาร์กิวเมนต์
    • ครอบคลุมเฉพาะ pass by value
  • สโคปของตัวแปร

โปรแกรมตัวอย่าง

หาพื้นที่สี่เหลี่ยม

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);
	}
}

โครงสร้างคำสั่งแบบทางเลือกหลายชั้น

Notes: ไม่ต้องสอน 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