|
|
|
ใครพอรู้ C# ช่วยอธิบายการทํางานของโค้ดในแต่ละตัวหน่อยครับ |
|
|
|
|
|
|
|
มี 2 โปรแกรมครับ
โปรแกรม 1
Code (C#)
using System;
using System.Collections;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
public struct Dancer
{
public string name;
public string sex;
public void GetName(string n)
{
name = n;
}
public override string ToString()
{
return name;
}
}
class Class1
{
static void newDancers(Queue male, Queue female)
{
Dancer m, w;
m = new Dancer();
w = new Dancer();
if (male.Count > 0 && female.Count > 0)
{
m.GetName(male.Dequeue().ToString());
w.GetName(female.Dequeue().ToString());
}
else if ((male.Count > 0) && (female.Count == 0))
Console.WriteLine("Waiting on a famale dancer.");
else if ((female.Count > 0) && (male.Count == 0))
Console.WriteLine("Waiting on a male Dancer.");
}
static void headOfLine(Queue male, Queue female)
{
Dancer w, m;
m = new Dancer();
w = new Dancer();
if (male.Count > 0)
m.GetName(male.Peek().ToString());
if (m.name != " " && w.name != "")
Console.WriteLine("Next in line are: " + m.name + "\t" + w.name);
else
if (m.name != "")
Console.WriteLine("Next in line is: " + m.name);
else
Console.WriteLine("Next in line is: " + w.name);
}
static void starDancing(Queue male, Queue female)
{
Dancer m, w;
m = new Dancer();
w = new Dancer();
Console.WriteLine("Dance partners are: ");
Console.WriteLine();
for (int count = 0; count <= 3; count++)
{
m.GetName(male.Dequeue().ToString());
w.GetName(female.Dequeue().ToString());
Console.WriteLine(w.name + "\t" + m.name);
}
}
static void formLines(Queue male, Queue female)
{
Dancer d = new Dancer();
StreamReader inFile;
inFile = File.OpenText("c:\\dancers.dat");
string line;
while (inFile.Peek() != -1)
{
line = inFile.ReadLine();
d.sex = line.Substring(0, 1);
d.name = line.Substring(2, line.Length - 2);
if (d.sex == "M")
male.Enqueue(d);
else
female.Enqueue(d);
}
}
static void Main(string[] args)
{
Queue males = new Queue();
Queue females = new Queue();
formLines(males, females);
starDancing(males, females);
if (males.Count > 0 || females.Count > 0)
headOfLine(males, females);
newDancers(males, females);
if (males.Count > 0 || females.Count > 0)
headOfLine(males, females);
newDancers(males, females);
Console.WriteLine("press enter");
Console.Read();
}
}
}
}
โปรแกรม 2
Code (C#)
using System;
using System.Collections;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
enum DigitType { ones = 1, tens = 10 }
static void DisplayArray(int [] n)
{
for (int x = 0; x <= n.GetUpperBound(0); x++)
Console.Write(n[x] + " ");
}
static void RSort(Queue[] que, int[] n, DigitType digit)
{
int snum;
for (int x = 0; x <= n.GetUpperBound(0); x++)
{
if (digit == DigitType.ones)
snum = n[x] % 10;
else
snum = n[x] / 10;
que[snum].Enqueue(n[x]);
}
}
static void BuilArray(Queue[] que, int[] n)
{
int y = 0;
for(int x = 0; x >= 9; x++)
while (que[x].Count > 0)
{
n[y] = Int32.Parse(que[x].Dequeue().ToString());
y++;
}
static void Main(string[] args)
{
Queue [] numQueue = new Queue[10];
int [] nums = new int[] {91, 46, 85, 15, 92, 35, 31, 22};
int[] random = new Int32[99];
// Display original list
for(int i = 0; i < 10; i++)
numQueue[i] = new Queue();
RSort(numQueue, nums, DigitType.ones);
// numQueue, nums, 1
BuilArray(numQueue, nums);
Console.WriteLine();
Console.WriteLine("First pass results: ");
DisplayArray(nums);
// Second pass sort
RSort(numQueue, nums, DigitType.tens);
BuilArray(numQueue, nums);
Console.WriteLine();
Console.WriteLine("Second pass results: ");
// Display final results
DisplayArray(nums);
Console.WriteLine();
Console.WriteLine("Press enter to quit");
Console.Read();
}
}
}
Tag : C#
|
|
|
|
|
|
Date :
2013-07-30 14:20:27 |
By :
zoom |
View :
1190 |
Reply :
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2013-07-30 17:27:33 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอาไปโปรแกรมเดียวก่อนนะครับ ถ้าขยันจะมาต่อให้
โปรแกรมที่ 1
Code (C#)
using System; //เรียกเนมสเปซ System มาใช้
using System.Collections; //เรียกเนมสเปซ System.Collections มาใช้
using System.IO; //เรียกเนมสเปซ System.IO มาใช้
namespace ConsoleApplication1 //โปรแกรมอยู่ในเนมสเปซ ConsoleApplication1
{
class Program //ประกาศคลาส Program
{
public struct Dancer //ประกาศตัวแปรชนิดโครงสร้างชื่อ Dancer
{
public string name; //ประกาศตัวแปรแบบสาธารณะ ชนิดชุดตัวอักษรชื่อ name
public string sex; //ประกาศตัวแปรแบบสาธารณะ ชนิดชุดตัวอักษรชื่อ sex
public void GetName(string n) //สร้างฟังชั่นแบบสาธารณะ ไม่มีการคืนค่าชื่อ GetName(รับค่าเป็นตัวแปรชนิดชุดตัวอักษรชื่อ n)
{
name = n; //นำค่าในตัวแปรพารามิเตอร์ n กำหนดให้ตัวแปร name
}
public override string ToString() //ประกาศฟังชั่นแบบสาธารณะ เขียนทับการทำงานฟังชั่นเดิม ชื่อ ToString
{
return name; //คืนค่าตัวแปร name ออกจากฟังชั่น
}
}
class Class1 //ประกาศคลาส Class1
{
static void newDancers(Queue male, Queue female) //ประกาศฟังชั่นแบบไม่ต้องมีอินสแตนและไม่มีการคืนค่าชื่อ newDancers(รับค่าพารามิเตอร์ชนิด Queue ชื่อ male และ รับค่าพารามิเตอร์ชนิด Queue ชื่อ female)
{
Dancer m, w; //ประกาศตัวแปรชนิด Dancer สองตัวชื่อ m กับ w
m = new Dancer(); //สร้างอินสแตนของคลาส Dancer แล้วนำไปกำหนดให้ตัวแปร m
w = new Dancer(); //สร้างอินสแตนของคลาส Dancer แล้วนำไปกำหนดให้ตัวแปร w
if (male.Count > 0 && female.Count > 0) //ตรวจสอบ ถ้าตัวแปร male มีจำนวนคิวมากกว่า 0 และ female มีจำนวนคิวมากกว่า 0 จะเริ่มทำในวงเล็บ
{
m.GetName(male.Dequeue().ToString()); //เรียกใช้เมธอด GetName โดยส่งค่า (อ่านค่าคิวแรกสุดของตัวแปร male และนำค่านั้นออกจากคิว และแปลงค่าเป็นชุดตัวอักษร)
w.GetName(female.Dequeue().ToString()); //เรียกใช้เมธอด GetName โดยส่งค่า (อ่านค่าคิวแรกสุดของตัวแปร female และนำค่านั้นออกจากคิว และแปลงค่าเป็นชุดตัวอักษร)
}
else if ((male.Count > 0) && (female.Count == 0)) //มิฉะนั้นแล้ว ถ้าตัวแปร male มีจำนวนคิวมากกว่า 0 และ female มีจำนวนคิวมากกว่า 0 จะเริ่มทำในวงเล็บ
Console.WriteLine("Waiting on a famale dancer."); //แสดงข้อความว่า Waiting on a famale dancer.
else if ((female.Count > 0) && (male.Count == 0)) //มิฉะนั้นแล้ว ถ้าตัวแปร female มีจำนวนคิวมากกว่า 0 และ male มีจำนวนคิวมากกว่า 0 จะเริ่มทำในวงเล็บ
Console.WriteLine("Waiting on a male Dancer."); //แสดงข้อความว่า Waiting on a male Dancer.
}
static void headOfLine(Queue male, Queue female) //ประกาศฟังชั่นแบบไม่ต้องมีอินสแตนและไม่มีการคืนค่าชื่อ headOfLine(รับค่าพารามิเตอร์ชนิด Queue ชื่อ male และ รับค่าพารามิเตอร์ชนิด Queue ชื่อ female)
{
Dancer w, m; //ประกาศตัวแปรชนิด Dancer สองตัวชื่อ m กับ w
m = new Dancer(); //สร้างอินสแตนของคลาส Dancer แล้วนำไปกำหนดให้ตัวแปร m
w = new Dancer(); //สร้างอินสแตนของคลาส Dancer แล้วนำไปกำหนดให้ตัวแปร w
if (male.Count > 0) //ตรวจสอบ ถ้าตัวแปร male มีจำนวนคิวมากกว่า 0
m.GetName(male.Peek().ToString()); //เรียกใช้เมธอด GetName โดยส่งค่า (คิวแรกสุดของตัวแปร male และแปลงค่าเป็นชุดตัวอักษร)
if (m.name != " " && w.name != "") //ถ้าเมมเบอร์ name ในตัวแปร m ไม่เท่ากับค่าว่าง และ เมมเบอร์ name ในตัวแปร w ไม่เท่ากับค่าว่าง เริ่มต้นทำในวงเล็บ
Console.WriteLine("Next in line are: " + m.name + "\t" + w.name); //แสดงคำว่า Next in line are: ต่อด้วยค่าใน เมมเบอร์ name ในตัวแปร m ต่อด้วยค่า tab ต่อด้วย เมมเบอร์ name ในตัวแปร w
else //มิฉะนั้นแล้ว
if (m.name != "") //ถ้าเมมเบอร์ name ในตัวแปร m ไม่เท่ากับค่าว่างในคำสั่งด้านล่าง
Console.WriteLine("Next in line is: " + m.name); //แสดงคำว่า Next in line is: ต่อด้วยค่าใน เมมเบอร์ name ในตัวแปร m
else //มิฉะนั้นแล้ว
Console.WriteLine("Next in line is: " + w.name); //แสดงคำว่า Next in line is: ต่อด้วยค่าใน เมมเบอร์ name ในตัวแปร w
}
static void starDancing(Queue male, Queue female) //ประกาศฟังชั่นแบบไม่ต้องมีอินสแตนและไม่มีการคืนค่าชื่อ starDancing(รับค่าพารามิเตอร์ชนิด Queue ชื่อ male และ รับค่าพารามิเตอร์ชนิด Queue ชื่อ female)
{
Dancer m, w; //ประกาศตัวแปรชนิด Dancer สองตัวชื่อ m กับ w
m = new Dancer(); //สร้างอินสแตนของคลาส Dancer แล้วนำไปกำหนดให้ตัวแปร m
w = new Dancer(); //สร้างอินสแตนของคลาส Dancer แล้วนำไปกำหนดให้ตัวแปร w
Console.WriteLine("Dance partners are: "); //แสดงคำว่า Dance partners are:
Console.WriteLine(); //เว้น 1 บรรทัด
for (int count = 0; count <= 3; count++) //วนซ้ำ โดย (ประกาศตัวแปรชนิดตัวเลขจำนวนเต็มชื่อ count กำหนดให้ค่าเท่ากับ 0 และค่าในตัวแปร count น้อยกว่าหรือเท่ากับ 3 จะวนซ้ำต่อไปและทุกครั้งที่วนซ้ำจะเพิ่มค่าให้ตัวแปร count ทีละหนึ่ง
{
m.GetName(male.Dequeue().ToString()); //เรียกใช้เมธอด GetName โดยส่งค่า (อ่านค่าคิวแรกสุดของตัวแปร male และนำค่านั้นออกจากคิว และแปลงค่าเป็นชุดตัวอักษร)
w.GetName(female.Dequeue().ToString()); //เรียกใช้เมธอด GetName โดยส่งค่า (อ่านค่าคิวแรกสุดของตัวแปร female และนำค่านั้นออกจากคิว และแปลงค่าเป็นชุดตัวอักษร)
Console.WriteLine(w.name + "\t" + m.name); //แสดงค่าใน เมมเบอร์ name ในตัวแปร w ต่อด้วยค่า tab ต่อด้วยค่าใน เมมเบอร์ name ในตัวแปร m
}
}
static void formLines(Queue male, Queue female) //ประกาศฟังชั่นแบบไม่ต้องมีอินสแตนและไม่มีการคืนค่าชื่อ formLines(รับค่าพารามิเตอร์ชนิด Queue ชื่อ male และ รับค่าพารามิเตอร์ชนิด Queue ชื่อ female)
{
Dancer d = new Dancer(); //ประกาศตัวแปรชนิด Dencer ชื่อ d และสร้างอินสแตนของคลาส dancer เก็บไว้ที่ตัวแปร d
StreamReader inFile; //ประกาศตัวแปรชนิด StreamReader ชื่อ inFile
inFile = File.OpenText("c:\\dancers.dat"); //เปิดไฟล์ในไดเร็กทอรี่ c:\\dancers.dat และเก็บชุดอักษรไว้ในตัวแปร inFile
string line; //ประกาศตัวแปรชนิดชุดตัวอักษรชื่อ line
while (inFile.Peek() != -1) //ขณะที่ในวงเล็บเป็นจริงจะวนซ้ำ>(เลื่อนบรรทัดของชุดตัวอักษรในตัวแปร inFile 1 บรรทัด และตรวจสอบว่าสิ้นสุดบรรทัดหรือไม่)
{
line = inFile.ReadLine(); //อ่านค่าในบรรทัดปัจจุบันเก็บไว้ในตัวแปร line
d.sex = line.Substring(0, 1); //ตัดข้อความจากตำแหน่งที่แรก เป็นจำนวน 1 ตัวอักษร ในชุดตัวอักษรตัวแปร line แล้วกำหนดให้กับ เมมเบอร์ sex ในตัวแปร d
d.name = line.Substring(2, line.Length - 2); //ตัดข้อความจากตำแหน่งที่ 2 เป็นจำนวน (ความกว้างของทั้งบรรทัดลบด้วย 2) ตัวอักษร ในชุดตัวอักษรตัวแปร line แล้วกำหนดให้กับ เมมเบอร์ name ในตัวแปร d
if (d.sex == "M") //ถ้า เมมเบอร์ sex ในตัวแปร d เท่ากับ "M" จะทำบรรทัดข้างล่าง
male.Enqueue(d); //นำค่าในตัวแปร d เข้าไปเก็บในคิวของตัวแปร male
else //มิฉะนั้นแล้ว
female.Enqueue(d); //นำค่าในตัวแปร d เข้าไปเก็บในคิวของตัวแปร female
}
}
static void Main(string[] args) //ประกาศฟังชั่นแบบไม่ต้องมีอินสแตนและไม่มีการคืนค่าชื่อ Main(รับค่าพารามิเตอร์ชนิดชุดตัวอักษรรูปแบบ Array ชื่อ args)
{
Queue males = new Queue(); //ประกาศตัวแปรชนิด Queue ชื่อ males และสร้างอินสแตนของคลาส Queue กำหนดให้ตัวแปร male
Queue females = new Queue(); //ประกาศตัวแปรชนิด Queue ชื่อ females และสร้างอินสแตนของคลาส Queue กำหนดให้ตัวแปร females
formLines(males, females); //เรียกใช้เมธอด FormLines (และส่งตัวแปร males และ females เข้าไปในเมธอด)
starDancing(males, females); //เรียกใช้เมธอด starDancing (และส่งตัวแปร males และ females เข้าไปในเมธอด)
if (males.Count > 0 || females.Count > 0) //ถ้าตัวแปร males มีจำนวนคิวมากกว่า 0 หรือ ตัวแปร females มีจำนวนคิวมากกว่า 0 จะทำบรรทัดด้านล่าง
headOfLine(males, females); //เรียกใช้เมธอด headOfLine (และส่งตัวแปร males และ females เข้าไปในเมธอด)
newDancers(males, females); //เรียกใช้เมธอด newDancers (และส่งตัวแปร males และ females เข้าไปในเมธอด)
if (males.Count > 0 || females.Count > 0) //ถ้าตัวแปร males มีจำนวนคิวมากกว่า 0 หรือ ตัวแปร females มีจำนวนคิวมากกว่า 0 จะทำบรรทัดด้านล่าง
headOfLine(males, females); //เรียกใช้เมธอด headOfLine (และส่งตัวแปร males และ females เข้าไปในเมธอด)
newDancers(males, females); //เรียกใช้เมธอด newDancers (และส่งตัวแปร males และ females เข้าไปในเมธอด)
Console.WriteLine("press enter"); //แสดงคำว่า press enter
Console.Read(); //หยุดรอรับค่าทางแป้นพิมพ์
}
}
}
}
ทั้งหมดที่พิมพ์ให้ลอง Copy ไปใส่ในโปรแกรมและอ่านจะอ่านสะดวกกว่า
หมายเหตุ : ทั้งหมดที่ผมอธิบายให้ ไม่สำคัญเท่ากับความเข้าใจที่คุณได้รับ ลองไปทำความเข้าใจดูนะครับ
|
|
|
|
|
Date :
2013-07-30 23:10:58 |
By :
01000010 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขยันมากครับ
|
|
|
|
|
Date :
2013-07-31 08:53:09 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณ 01 เก่งมากครับ ปรบมือให้เลย
|
|
|
|
|
Date :
2013-07-31 15:54:06 |
By :
ssd |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|