วันอาทิตย์ที่ 26 กรกฎาคม พ.ศ. 2552

iostream

การแปลงค่าชั่วโมงเป็นวินาที โดยรับค่าชั่วโมงทางแป้นพิมพ์


#include
main()
{
int hour,second;
printf("Enter your hour: ");
scanf("%d",&hour);
second=hour*60;
printf("Second is %d\n",second);
}


#include
main()
{
int hour,second;
cout<<"Enter your hour:";
cin>>hour;
second=hour*60;
cout<<"Second is "<}

วันเสาร์ที่ 25 กรกฎาคม พ.ศ. 2552

DTS : 06-29/07/2552

Stack

สแตก (Stack) เป็นโครงสร้างข้อมูลแบบลิเนียร์ลิสต์ ที่มีคุณสมบัติที่ว่า การเพิ่มหรือลบข้อมูลในสแตก จะกระทำที่ ปลายข้างเดียวกัน เรียกว่า Top ของสแตก (Top Of Stack) ลักษณะที่สำคัญของสแตก คือ ข้อมูลที่ใส่หลังสุดจะถูกนำออกมา จากสแตกเป็นลำดับแรกสุด เรียกคุณสมบัตินี้ว่า LIFO (Last In First Out)

การดำเนินงานพื้นฐานของสแตก
1. Push การเพิ่มข้อมูลลงในสแตก คือ การนำเข้ามูลเข้าสู่สแตกโดยทับข้อมูลที่อยู่บนสุดของสแตก ข้อมูลจะสามารถนำเข้าได้เรื่อยๆ จนกว่าสแตกจะเต็ม สมมติว่าสแตคจองเนื้อที่ไว้ N ตัว ถ้าหากค่า TOP เป็น 0 แสดงว่าสแตคว่าง หากค่า TOP = N แสดงว่าสแตคเต็มไม่สามารถเพิ่มข้อมูลลงในสแตคได้อีก

2. Pop การนำข้อมูลออกจากส่วนบนสุดของสแตก การนำข้อมูลออกจากสแตก ถ้าสแตกมีสมาชิกเพียง 1 ตัว แล้วนำสมาชิกออกจากสแตก จะเกิดสภาวะสแตกว่าง (Stack Empty) คือ ไม่มีสมาชิกอยู่ในสแตกเลย
แต่ถ้าไม่มีสมาชิกในสแตก แล้วทำการ pop สแตก จะทำให้ เกิดความผิดพลาดที่เรียกว่า Stack Underflow

การแทนที่ข้อมูลของสแตค ทำได้ 2 วิธี คือ
1. การแทนที่แบบลิงค์ลิสต์ ประกอบด้วย 2 ส่วน คือ
- Head Node ประกอบด้วย top pointer และจำนวนสมาชิกในสแตค
- Data Node ประกอบด้วยข้อมูลและพอยเตอร์ที่ชี้ไปยังข้อมูลตัวถัดไป
2. การแทนที่แบบอะเรย์
การดำเนินการเกี่ยวกับสแตค
1. Create Stack จัดสรรหน่วยความจำและส่งค่าตำแหน่งที่ชี้ไปยัง Head ของสแตคกลับมา
2. Push Stack การเพิ่มข้อมูลลงสแตค
3. Pop Stack การนำข้อมู,บนสุดออกจากสแตค
4. Stack Top เป็นการคัดลอกที่อยู่บนสุด โดยไม่มีการลบข้อมูล
5. Empty Stack เป็นการตรวจสอบการว่างของสแตค เพื่อไม่ให้เกิด Stack Underflow
6. Full Stack เป็นการตรวจสอบว่าสแตคเต็มหรือไม่ เพื่อไม่ให้เกิด Stack Overflow
7. Stack Count เป็นการนับจำนวนสมาชิกในสแตค
8. Destroy Stack เป็นการลบข้อมูลในสแตคทั้งหมด

การประยุกต์ใช้สแตค
สามารถนำไปประยุกต์ใช้ในงานด้านปฏิบัติการของเครื่องคอมพิวเตอร์ในขั้นตอนการทำงานเก็บข่าวสารอันดับแรกสุดไว้ใช้หลังสุด เช่น การทำงานของโปรแกรมแปลภาษานำไปใช้ในเรื่องของการเรียกใช้โปรแกรมย่อย การคำนวณนิพจน์ทางคณิตศาสตร์ และรีเคอร์ชั่น

การทำงานของโปรแกรมที่มีโปรแกรมย่อย
สแตคจะเข้ามาช่วยในการทำงานของโปรแกรมหลักที่เรียกใช้โปรแกรมย่อย และแต่ในละโปรแกรมย่อยมีการเรียกใช้โปรแกรมย่อยต่อไป คือ แต่ละจุดของโปรแกรมที่เรียกใช้โปรแกรมย่อยจะเก็บเลขที่ของคำสั่งถัดไปที่เครื่องต้องกลับมาทำงานไว้ในสแตค หลังจากเส็จสิ้นการทำงานของโปรแกรมย่อยแล้วจะทำการ pop ตัวเลขที่คำสั่งออกมาจากสแตค เพื่อกลับไปทำงานที่คำสั่งที่เรียกใช้โปรแกรมย่อย

การคำนวณนิพจน์ทางคณิตศาสตร์
สามารถเขียนได้ 3 รูปแบบ คือ
1. นิพจน์ Infix นิพจน์รูปแบบนี้ operator จะอยู่กลางระหว่างตัวถูกดำเนินการ 2 ตัว
2. นิพจน์ Postfix นิพจน์รูปแบบนี้จะเขียนตัวดำเนินการตัวที่ 1 และ 2 แล้วตามด้วย operator
3. นิพจน์ Prefix นิพจน์รูปแบบนี้จะเขียน operator ก่อนแล้วจึงตามด้วยตัวถูกดำเนินการตัวที่ 1 และ 2
การเขียนโปรแกรมคอมพิวเตอร์ด้วยภาษาระดับสูง คำสั่งที่เป็นพจน์ทางคณิตศาสตร์จะเขียนในรูปแบบ Infix การคำนวณ โดยการที่ตัวแปนภาษาต้องทำการตรวจสอบนิพจน์จากซ้ายไปขวา เพื่อหาเครื่องหมายที่ต้องคำนวณ จึงเริ่มคำนวณได้ ทำแบบนี้ซ้ำๆจนกว่าจะคำนวณเครื่องหมายครบทุกตัว

ตัวอย่างการทำงานแบบ Lifo ที่ข้าพเจ้าเห็นในชีวิตประจำวัน
เช่น ยาสีฟัน ที่มีการบรรจุยาสีฟันส่วนที่อยู่ล่างสุด แต่เมื่อเราบีบยาสีฟันออกมาใช้ เราบีบส่วนที่อยู่บนสุดของหลอดบรรจุยาสีฟันออกมาใช้ก่อน

DTS : 05-22/07/2552

Linked List

ลิงค์ลิสต์ คือ วิธีการเก็บข้อมูลอย่างต่อเนื่องของอิลิเมนต์ โดยมีพอยเตอร์เป็นตัวเชื่อม แต่ละอิลิเมนต์ เรียกว่า โหนด แต่ละโหนดประกอบด้วย 2 ส่วน คือ


1. Data จะเก็บข้อมูลข่าวสารที่มีโครงสร้างข้อมูลเบื้องต้นหรือเรียบง่าย
2. Link Field เป็นตัวชี้หรือพอยเตอร์เก็บค่าแอดเดรสใช้อ้างไปยังโหนดถัดไปในหน่วยความจำ

โครงสร้างข้อมูลแบบลิงค์ลิสต์
1. Head Structure ประกอบด้วย 3 ส่วน คือ จำนวนโนดแต่ละลิสต์, พอยเตอร์ที่ชี้ไปยังโหนดที่เข้าถึง และพอยเตอร์ที่ชี้ไปยังข้อมูลแรกของลิสต์
2. Data Node Structure ประกอบด้วยข้อมูลและพอยเตอร์ที่ชี้ไปยังข้อมูลตัวถัดไป

กระบวนงานและฟังก์ชั่นที่ใช้ดำเนินงานพื้นฐาน
1. กระบวนงาน Create List ทำหน้าที่สร้างลิสต์ว่าง
2. กระบวนงาน Insert Node ทำหน้าที่เพิ่มข้อมูลในลิสต์ บริเวณที่ต้องการ
3. กระบวนงาน Delete Node ทำหน้าที่ลบสมาชิกในลิสต์ บริเวณตำแหน่งที่ต้องการ
4. กระบวนงาน Search list ทำหน้าที่ค้นหาข้อมูลในลิสต์ที่ต้องการ
5. กระบวนงาน Traverse ทำหน้าที่ท่องไปในลิสต์เพื่อเข้าถึงและประมวลผล
6. กระบวนงาน Retrieve Node ทำหน้าที่หาตำแหน่งข้อมูลจากลิสต์
7. ฟังก์ชั่น EmptyList ทำหน้าที่ทดสอบว่าลิสต์ว่าง
8. ฟังก์ชั่น FullList ทำหน้าที่ทดสอบว่าลิสต์เต็มหรือไม่
9. ฟังก์ชั่น list count ทำหน้าที่นับจำนวนข้อมูลที่อยู่ในลิสต์
10. กระบวนงาน destroy list ทำหน้าที่ทำลายลิสต์

Linked List แบบซับซ้อน
1. Circular Linked List หรือลิงค์ลิสต์ทางเดียว โดยปกติการใช้ลิงค์ลิสต์ทางเดียว เมื่อตัวพอยเตอร์ P ชี้ไปยังโหนดหนึ่งจะไม่สามารถชี้กลับไปยังโหนดก่อนหน้านี้ได้ วิธีการอย่าหนึ่งที่ทำให้สามารถวิ่งจากโหนดหนึ่งไปยังโหนดอื่นๆได้ในลิงค์ลิสต์ โดยให้ชี้ของโหนดสุดท้ายซึ่งเดิมเป็นค่า Null
2. Double Linked List ลิงค์ลิสต์ที่มีการทำงาน 2 ทิศทาง บางครั้งการทำงานแบบลิงค์ลิสต์อาจต้องการวิ่งไปยังโหนกต่างๆในลิงค์ลิสต์โดยการถอยกลับไปยังโหนดก่อนหน้าหรือลบแต่ละโหนด เพื่อให้เกิดความสะดวกและประสิทธิภาพ จึงนำลิงค์ลิสต์ 2 ทางมาใช้แทนลิงค์ลิสต์ทางเดียว

วันเสาร์ที่ 18 กรกฎาคม พ.ศ. 2552

แบบฝึกบทที่ 2

แบบฝึกหัดท้ายบทที่ 2
1. ให้นักศึกษากำหนดค่าของ Array 1 มิติ และ Array 2 มิติ
ตอบ char name[15];
int b[4][5];
2.ให้นักศึกษาหาค่าของ A[2],A[6]จากค่า A={2,8,16,24,9,7,3,8}
ตอบ A[2]=16
A[6]=3
3.จากค่าของ int a[2][3]={{6,5,4},{3,2,1}};ให้นักศึกษา หาค่าของ a[1][0]และ a[0][2]
ตอบ a[1][0]=3
a[0][2]=4
4.ให้นักศึกษากำหนด Structure ที่มีค่าของข้อมูลจากน้อย 6 Records
ตอบ struct student
#include int main()
{
struct
{
char name;
char lastname;
char address;
char phoneno;
int age;
char sex;
5.ให้นักศึกษาบอกความแตกต่างของการกำหนดตัวชนิด Array กับ ตัวแปร Pointer ในสภาพของการกำหนดที่อยู่ของข้อมูล
ตอบ Array คือโครงสร้างข้อมูลชนิดหนึ่งซึ่งจะรวบรวมตัวแปรชนิดเดียวกัน และมีลักษณะการใช้งานเหมือนกันมารวมอยู่ด้วยกันภายใต้ชื่อตัวแปรเดียวกัน เช่น ตัวเลขจำนวนเต็ม 10 จำนวน ตัวอักขระ 5 จำนวน ตัวเลขทศนิยม 15 จำนวน เป็นต้น
ลักษณะของตัวแปร Array ในโปรแกรมภาษาซี สังเกตจากชื่อตัวแปรจะต่างจากชื่อตัวแปรธรรมดาคือ ชื่อของตัวแปร Array จะมีตัวต่อท้ายเสมอ เช่น A[1],B[3],C[4] เป็นต้น ตัวเลขที่อยู่ในเครื่องหมาย [ ] เรียกว่า ตัวชี้หรืออินเด็กซ์ (Index)
ลักษณะการทำงานของตัวแปร Array คือเมื่อเราประกาศตัวแปร Array ในโปรแกรมภาษาซีแล้วเมื่อเราประมวลผลโปรแกรมภาษาซีขึ้นมา ตัวแปรภาษาซีจะทำการจองพื้นที่ในหน่วยความจำของเครื่องคอมพิวเตอร์ เช่น int A[5];
พอยน์เตอร์ คือ ตัวแปรอย่างหนึ่ง ที่มีลักษณะพิเศษกว่าตัวแปรชนิดอื่นๆ ตรงที่จะเก็บ “ ตำแหน่ง ” (address) ของตัวแปร ที่ใช้อ้างอิงไปยัง “ ค่า ” (value) ของตัวแปร ที่เก็บอยู่ในหน่วยความจำ (memory)
ดังนั้น สิ่งที่พอยน์เตอร์เก็บ คือ ตัวเลขที่บอกตำแหน่งในหน่วยความจำ เป็นเหตุที่ทำให้พอยน์เตอร์แตกต่างไปจากตัวแปรชนิดอื่นๆ ตรงที่ตัวแปรชนิดอื่นๆ จะเก็บค่าข้อมูล ตามชนิดของตัวแปรที่ได้เคยประกาศไว้

DTS : 04-15/07/2552

Set and String

โครงสร้างข้อมูลแบบเซ็ต
เป็นโครงสร้างข้อมูลแต่ละตัวที่ไม่มีความสัมพันธ์กัน

โครงสร้างข้อมูลแบบสตริง
สตริง เป็นโครงสร้างข้อมูลที่เป็นการรวบรวมโครงสร้างข้อมูลคาร์แรกเตอร์ ซึ่งเป็นตัวอักษรและสัญลักษณ์ต่างๆ เป็นชนิดข้อมูลที่ถูกใช้งานมากชนิดหนึ่ง ภาษาเขียนโปรแกรมหลายภาษาจะกำหนดให้มาใช้งานได้ทันที เช่น ภาษาปาสคาล โครงสร้างข้อมูลแบบสตริงสามารถนำมาประยุกต์ให้เกิดประโยชน์ได้ เช่นการนำไปใช้สร้างโปรแกรมประเภทบรรณาธิการข้อความ หรือโปรแกรมประเภทประมวลผลคำ

ความยาวของสตริง
เป็นการบอกให้ทราบว่าสตริงตัวนั้นมีตัวอักษรหรือความยาวเท่าไร จะกำหนดฟังก์ชั่นเป็น Length ที่ส่งค่าความยาวกลับมา

การกำหนดตัวแปร country แตกต่างกับการกำหนดตัวแปรอะเรย์ เพราะเป็นการกำหนดตัวแปรพอยเตอร์ 4 ตัว
ในการเขียนค่าเริ่มต้น คือ ค่าคงตัวสติง เขียนไว้ในเครื่องหมายวงเล็บปีกกา แล้วข้อมูลในเครื่องหมายคำพูด คือ ค่าคงตัวสติง
ฟังก์ขัน puts() ใช้พิมพ์สตริงออกทางจอภาพ โดยการผ่านแอดเดรสของสตริงไปให้เท่านั้น

อะเรย์ของสตริงทียาวเท่ากัน
อะเรย์นี้ถือเป็นอะเรย์ที่แท้จริง และสามารถกำหนดได้ทั้งเมื่อมีการให้ค่าเริ่มต้น และกำหนดเป็นตัวแปร โดยดำเนินการตามแบบอะเรย์ 2 มิติ การกำหนดตัวแปนลักษณะนี้จะแตกต่างกับการกำหนดตัวแปรแบบความยาวไม่เท่ากัน ตรงที่ ในแบบความยาวไม่เท่ากัน ท้ายของสตริงจะเติม null character ให้เพียงตัวเดียว แต่ในแบบความยาวเท่ากัน จะเติม null character ให้จนครบทุกช่อง

การดำเนินการเกี่ยวกับสตริง
จะมีฟังก์ชันที่อยู่ในแฟ้ม ข้อมูล stdio.h เก็บอยู่ใน C Library อยู่แล้วสามารถนำมาใช้ได้ โดยการใช้คำสั่ง #include ในการเรียกใช้ เช่น
- ฟังก์ชัน strlen(str) ใช้หาความยาวของสตริง

- ฟังก์ชัน strcpy (str1,str2) ใช้คัดลอกข้อมูลจากสตริงหนึ่งไปอีกสตริงหนึ่ง

- ฟังก์ชัน strcat (str1,str2) ใช้เชื่อมต่อข้อความ 2 ข้อความเข้าด้วยกัน

- ฟังก์ชัน strcmp(str1,str2) ใช้เปรียบเทียบข้อความ 2 ข้อความว่ามีค่าเท่ากันหรือไม่

วันอังคารที่ 14 กรกฎาคม พ.ศ. 2552

DTS : 01-24/06/2552

ทบทวนเรื่องภาษา C

คำสั่งพื้นฐานที่สำคัญๆของภาษา C
เช่น pintf, scanf
Format code ที่นิยมใช้ในการแสดงผล เช่น %d-decimal integer, %c-character, %f-floating point number, %s-string
นิพจน์ หมายถึง การนำตัวแปรค่คงที่มาสัมพันธ์กันโดยใช้เครื่องหมายอย่างใดอย่างหนึ่ง
เช่น x+1, a*b/c นิพจน์จะทำงานจากซ้ายไปขวา
ข้อดีของฟังก์ชัน
1. เขียนครั้งเดียว แต่ใช้ได้หลายครั้ง
2. สามารถนำกลับมาใช้ใหม่ในโปรแกรมอื่นได้
3. ถ้าต้องการแก้ไข จะแก้ไขเพียงที่เดียว
4. ทำให้โปรแกรมมีความเป็นโครงสร้าง สามารถแบ่งเป็นโมดูลย่อยๆได้

ประเภทของฟังก์ชัน
แบ่งเป็น 2 ประเภท คือ
1. Library Function เก็บไว้ในแฟ้ม C Library เรียบร้อยแล้ว ผู้ใช้สามารถเรียกใช้ได้เลย
วิธีเรียกใช้งาน Library Function
- เรียกชื่อของฟังก์ชันที่ต้องการใช้งาน
- เอาค่าที่จะส่งไปทำงานในฟังก์ชันใส่ในวงเล็บตามหลังชื่อฟังก์ชันนั้น
2. User Defined Function คือ ฟังก์ชั่นที่ผู้เขียนโปรแกรมสามารถเขียนฟังก์ชั่นขึ้นใฃ้เอง โดยฟังก์ชั่นนี้อาจรวมอยู่กับโปรแกรมหลักเป็นแฟ้มเดียวกัน หรือแยกฟังก์ชั่นเหล่านี้ไว้คนละแฟ้มข้อมูลก็ได้

Function Prototype
เป็นตัวบอกให้ compiler ทราบว่ามีการประกาศฟังก์ชั่นขึ้นและฟังก์ชันนั้นมีค่าที่ส่งกลับเป็นอะไร มีการรับพารามิเตอร์อะไรบ้าง มีประโยชน์ในการตรวจสอบข้อผิดพลาดระหว่างการเรียกใช้ฟังก์ชั่น เราจะเขียน Function Prototype ไว้ที่ต้นโปรแกรม เอาไว้เหนือฟังก์ชั่น main เพื่อให้ทุกฟังก์ชั่นสามารถเรียกใช้ได้

Invocation
คือ การเรียกใช้ฟังก์ชั่น
ลักษณะของฟังก์ชั่น
*ฟังก์ชั่นที่ไม่มีการส่งค่ากลับ การเรียกใช้ ทำได้โดยอ้างถึงชื่อฟังก์ชัน
*ฟังก์ชั่นที่มีการส่งค่ากลับ การเรียกใช้ทำได้เหมือนแบบแรก แต่ต้องมีตัวแปรมารับค่าที่จะส่งกลับมาด้วย
*ฟังก์ชั่นที่มีการรับค่า argument การเรียกใช้ทำได้โดยอ้างถึงชื่อของฟังก์ชั่นพร้อมทั้งส่งค่าของตัวแปรไปด้วย โดยจะต้องมีชนิดสอดคล้องกับ argument ของฟังก์ชั่นที่เรียกใช้

การผ่านค่า Argument ให้ฟังก์ชั่น
ทำได้ 2 แบบ คือ
1. Pass by value คือ การส่งค่าไปยังฟังก์ชันที่ถูกเรียกใช้โดยส่งค่าของตัวแปรหรือค่าคงที่ไปโดยตรง ค่าของอาร์กิวเมนต์ที่ผ่านให้กับฟังก์ชั่นจะถูกคัดลอกส่งให้กับฟังก์ชั่น และจะถูกเปลี่ยนแปลงเฉพาะภายในฟังก์ชั่น โดยค่าของอาร์กิวเมนต์ในโปรแกรมที่เรียกใช้จะไม่เปลี่ยนแปลง
2. Pass by reference คือ การส่งค่าไปยังฟังก์ชั่นที่ถูกเรียกใช้โดยส่งเป็นค่าตำแหน่งที่อยู่ของตัวแปรไป ซึ่งหากภายในฟังก์ชันมีการเปลี่ยนแปลงค่าของอาร์กิวเมนต์ที่ส่งไป ก็จะมีผลทำให้ค่าของอาร์กิวเมนต์นั้นในโปรแกรมที่เรียกใช้เปลี่ยนไปด้วย
ฝึกทบทวนโดยการเขียนโปรแกรมภาษาซี ถามตอบเกี่ยวกับโปรแกรมภาษาซี

DTS : 03-24/06/2552

Pointer
เป็นตัวแปรชนิดหนึ่งที่ทำหน้าที่เก็บตำแหน่งที่อยู่ (Address) ของตัวแปรที่อยู่ในหน่วยความจำ
การกำหนด address ให้ pointer วิธีนำเลข address ไปใส่ pointer ทำได้โดยใช้เครื่องหมาย & (address operator)
Pointer ที่เกิดจากเครื่องหมาย &
เมื่อเครื่องหมาย & ถูกใส่ไว้หน้าตัวแปรใดๆ ก็ตาม จะมีความหมายถึงค่าของตำแหน่งในหน่วยความจำที่ใช้เก็บค่าของตัวแปรนั้น ที่เราจะเห็นกันอยู่บ่อยๆ ก็คือ ในคำสั่ง scanf เช่น
int x;
scanf(“%d”,&x);
มีความหมายว่า ให้รับค่าทางคีย์บอร์ดแล้วให้แปลงเป็น integer แล้วนำไปใส่ในหน่วยความจำที่เป็นตำแหน่งของ x

*** เราสามารถอ้างถึงค่าที่อยู่ในตัวแปร x ได้โดยการใส่ * หน้า &x ก็จะมีความหมายเช่นเดียวกับ x นั่นเอง เช่น
x=5;
printf(“%d %d”, x, *(&x) );
ผลรัน จะเป็น 5
Pointer ที่เกิดจากการกำหนดตัวแปร array
การอ้างถึงชื่อของตัวแปร array โดยไม่ได้ระบุตัวชี้ลำดับ(subscript) จะหมายถึงตำแหน่ง(ในหน่วยความจำ)ของ array ตัวแรก ในภาษาซีจะไม่อนุญาตให้เปลี่ยนแปลงตำแหน่งของตัวแปร array ดังกล่าวได้ เช่น
char a[100];
a+=10; // error
ในกรณีนี้ &a จะมีความหมายเช่นเดียวกับ a ซึ่งก็คือค่าตำแหน่งในหน่วยความจำของ array ตัวแรกนั่นเอง
การประกาศชนิดของตัวแปรพอยน์เตอร์
รูปแบบ
type *variable-name
type หมายถึง ชนิดของตัวแปร
* หมายถึง เป็นเครื่องหมายที่แสดงว่าตัวแปรที่
ตามหลังเครื่องหมายนี้เป็นตัวแปรพอยน์เตอร์
variable-name เป็นชื่อของตัวแปรที่ต้องการประกาศว่าเป็น
ชนิดพอยน์เตอร์
ข้อสรุปเรื่อง pointer
• ทำหน้าที่ชี้ไปยังตำแหน่งเก็บข้อมูลในหน่วยความจำ
• การประกาศ pointer ต้องกำหนด data type ด้วย