วันอังคารที่ 25 สิงหาคม พ.ศ. 2552

DTS 06-29/07/52

Stack (ต่อ)

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


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


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

ขั้นตอนการแปลงจากนิพจน์ Infix เป็นนิพจน์Postfix
1. อ่านอักขระในนิพจน์ Infix เข้าทีละตัว
2. ถ้าเป็นตัวถูกดำเนินการจะถูกย้ายไปเป็นตัวอักษรในนิพจน์ Postfix
3. ถ้าเป็นตัวดำเนินการ จะนำค่าลำดับความสำคัญของตัว ดำเนินการที่อ่านเข้ามาเทียบกับค่าลำดับความสำคัญของตัวดำเนินการที่อยู่บนสุดของสแตก
- ถ้ามีความสำคัญมากกว่า จะถูก push ลงในสแตก
- ถ้ามีความสำคัญน้อยกว่าหรือเท่ากัน จะต้อง pop ตัวดำเนินการที่อยู่ในสแตก
4. ตัวดำเนินการที่เป็นวงเล็บปิด “)” จะไม่ push ลงในสแตกแต่จะดำเนินการตัวอื่น ๆ ถูก pop ออกจากสแตกนำไป เรียงต่อกันในนิพจน์ Postfix จนกว่าจะเจอ “(” จะ popวงเล็บเปิดออกจากสแตกแต่ไม่นำไปเรียงต่อ
5. เมื่อทำการอ่านตัวอักษรในนิพจน์ Infixหมดแล้ว ให้ทำการ Pop ตัวดำเนินการทุกตัวใน
สแตกนำมาเรียงต่อในนิพจน์Postfix

วันพฤหัสบดีที่ 23 กรกฎาคม พ.ศ. 2552

DTS 05-22/07/52

Linked List :
กระบวนการทำงานและฟังก์ชั่นที่ใช้ดำเนินงานพื้นฐาน (ต่อ)
1. กระบวนการทำงาน Traverse : การท่องไปใน list เพื่อเข้าถึงการประมวลผลข้อมูลนำเข้าของ list ก็ขึ้นอยู่กับประมวลผลด้วย
2. กระบวนการทำงาน Retrieve Node : การเรียกกับคืน โดยบอกตำแหน่งของข้อมูลและนำตำแหน่งที่ได้ค่าแสดง
3. ฟังก์ชั่น Empty list : ทดสอบว่า list ว่าง ถ้าจริง list ก็ว่าง ถ้าไม่จริง list ไม่ว่าง
4. ฟังก์ชั่น Full list : การทดสอบ list เต็มหรือไม่ ถ้าจริงหน่วยความจำเต็ม ถ้าไม่จริง สามารถมี node อื่นได้
5. ฟังก์ชั่น List count : นับจำนวนใน list โดยเอาค่า count มาแสดงที่อยู่ใน head node
6. กระบวนการทำงาน Destroy List : การทำลาย list

Stack:
สแตก คือ เป็นข้อมูลที่เป็นลิเนอร์ลิสต์ มีคุณสมบัติเพิ่มหรือลบข้อมูล จะกระทำข้างเดียว เรียกว่า Top ของสแตก โดยมีลักษณะที่เป็นข้อมูลที่ใส่หลังสุดจะถูกนำออกจากสแตกเป็นลำดับแรกสุด
การดำเนินงานพื้นฐานของสแตก
การกระทำที่ปลายข้างหนึ่งของสแตกเท่านั้น ดังนั้นจะต้องมีตัวชี้ตำแหน่งข้อมูลบนสุดของสแตกด้วย สแตกจะประกอบด้วยกระบวนการ 3 กระบวนการ คือ
1. Push คือ การนำข้อมูลใส่ในสแตก และสามารถตรวจสอบว่าสแตกเต็มหรือไม่ ถ้าไม่เต็มสามารถเพิ่มข้อมูลลงไปได้ แล้วปรับตัวชี้ตำแหน่งให้ไปชี้ที่สแตกว่าง ถ้าเต็ม (Stack Overflow) ก็ไม่สามารถเพิ่มข้อมูลได้
2. Pop คือ การนำข้อมูลออกจากส่วนบนสุดของสแตก ถ้ามีข้อมูลออกจากสแตกเพียงหนึ่งตัว จะเกิดสภาวะว่าง (Stack Empty) คือการไม่มีข้อมูลในสแตก ถ้าไม่มีข้อมูลในสแตก แล้วทำการ Pop จำทำให้เกิดความผิดพราดที่เรียกว่า Stack Underflow ดังนั้นก่อนการนำข้อมูลออกจากสแตกต้องทำการตรวจสอบก่อนว่าว่างหรือเปล่า จึงจะนำข้อมูลออกได้ และปรับตัวชี้ตำแหน่งให้ไปชี้ตำแหน่งข้อมูลที่ต่อจากข้อมูลที่ถูกนำออกไป
3. Stack Top คือ การคัดลอกข้อมูลที่อยู่บนสุดของสแตก แต่ไม่ได้นำข้อมูลออกจากสแตก


การบ้าน
ยกตัวอย่างในการใช้ชีวิตประจำวันเกี่ยวกับ Stack


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

DTS 04-15/07/52

Linked List :
ลิงค์ลิสต์ คือ การเชื่อมต่อรายการ
อิลิเมนท์ คือ ตัวแปรแต่ละตัวเป็นสมาชิก โดยมีพอยเตอร์เป็นตัวเชื่อม
Node คือ จุดเชื่อมต่อเข้าด้วยกัน ลักษณะของ Node ไม่จำเป็นต้องเป็นรูปวงกลม ประกอบด้วย 2 ด้วย คือ Data กับ Link Field โดย Data เชื่อมต่อกับ list ถ้า Data ของ list ไม่ได้มีการเชื่อมต่อกับตัวใดจ ะมีเครื่องหมายกากบาดในช่องนั้น และถ้า Node แรกนั้นไม่มีข้อมูลในดนดแรกของลิสต์นั้นจะเป็น null
กระบวนการทำงานและฟังก์ชั่นที่ใช้ดำเนินงานพื้นฐาน
1. กระบวนการทำงาน Create List : การสร้าง list ว่าง เพราะยังไม่มี data node จะใส่ 0 ไว้ในช่องว่างก่อน
2. กระบวนการทำงาน Insert Node : เพิ่มข้อมูลลงไปใน list ที่ต้องการ สามารถเปลี่ยนแปลงได้
3. กระบวนการทำงาน Delete Node : ต้องการลบในตำแหน่งที่ต้องการ จะมีการเปลี่ยนแปลงสมาชิกลดลง โดยถึงจะทำการสั่งให้ลบ
4. กระบวนการทำงาน Search List : ค้นหาข้อมูลใน list ที่ต้องการนำเข้าข้อมูล ถ้าจริงจะพบข้อมูล ถ้าไม่จริงจะไม่พบข้อมูลที่ต้องการ


การบ้าน
เขียนโปรแกรมเปรียบเทียบการใช้ฟังก์ชั่น stdio.h กับ iostream.h แต่ผลลัพธ์ออกมาต้องเหมือนกัน

การหาพื้นที่วงกลม สี่เหลี่ยมผืนผ้า สามเหลี่ยมจตุรัส
#include stdio.h
#include conio.h
void main(){
clrscr();
float area;int m, a, b;
printf(“1.Area of Circle\n2.Area of Rectangular\n3.Area of Square\n99.Stop\n”);

printf(“Press”);scanf(“%d”,& m);
while(m!=99){
if(m>=1 && m<=3){

switch(m){
case 1:
printf( “\nInput Radius” );
scanf(“%d”,& a);
area = (22.0/7) * a * a;
break;
case 2:
printf( “\nInput Width”);
scanf(“%d”,& a);
printf( “Input Long”);
scanf(“%d”,& b);
area = a * b; break;
case 3:
printf( “\nInput Width”);
scanf(“%d”,& a);
area = a * a;
break;
default:
break;
}
printf(“Area \n”);
}
else{
printf(“Invalid Data. Try again (Choose Integer 1-3 or 99 Exit)\n”);
}
printf( “Press”);
scanf(“%d”,& m);
}
printf(“End Program. Bye \n” , “Press Enter to Exit”);
getch(); }
……………………………………………..
#include iostraem.h
#include conio.h
void main(){
clrscr();
float area;

int m, a, b;
cout << “1.Area of Circle\n2.Area of Rectangular\n3.Area of Square\n99.Stop\n”;

cout << “Press “;
cin >> m;
while(m!=99){
if(m>=1 && m<=3){

switch(m){
case 1: cout << “\nInput Radius “; cin >> a;
area = (22.0/7) * a * a;
break;
case 2:
cout << “\nInput Width “;cin >> a;cout << “Input Long “;cin >> b;
area = a * b;
break;
case 3:
cout << “\nInput Width “;cin >> a;
area = a * a;
break;
default:
break;
}
cout << “Area ” <<>> m;
}
cout << “End Program. Bye \n” << “Press Enter to Exit”;

getch(); }


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

DTS 03 -01/07/52

Structure กับ pointer
pointer เป็นตัวแปรที่ทำหน้าที่เก็บตำแหน่ง (address) ของตัวแปรที่อยู่ในหน่วยความจำในการประกาศตัวแปร pointer จะต้องนำหน้าด้วยเครื่องหมาย * และเครื่องหมาย & เป็นเครื่องหมายที่บอกตำแหน่งที่อยู่ของตัวแปรที่เก็บไว้ในหน่วยความจำ
เช่น การกำหนดตัวแปร x = 10
x
10
1000 ....... address
โดยการกำหนดตัวแปร X ซึ่งอยู่ที่ตำแหน่ง 1000 มีค่า 10 เก็บอยู่
การประกาศ parameter เป็นตัวแปรแบบพอยน์เตอร์
เช่น void swap (int*p,int*q) .......การส่งพารามิเตอร์ 2 ตัว
Set and string
สตริงเป็นข้อมูลที่ประกอบด้วยตัวอักษร ตัวเลขหรือเครื่องหมายเรียงติดกันไป รวมทั้งช่องว่าง โดยการกำหนดค่าคงที่ตัวสตริง สามารถ กำหนดได้ทั้งนอกและในฟังก์ชัน เมื่อกำหนดไว้นอกฟังก์ชัน ชื่อค่าคงตัวเป็นพอยน์เตอร์ไปยังหน่วยความจำที่เก็บสตริง และเมื่อกำหนดไว้ในฟังก์ชัน จะเป็นพอยน์เตอร์ไปยังหน่วยความจำที่เก็บตัวมันเอง
การกำหนดค่าให้กับสตริง จะใช้เครื่องหมาย double quote (“ ”)
เช่น (“ ABC ”) คือ ชุดอักขระที่มีขนาด 4 โดยรวม \0 ด้วย

วันอังคารที่ 30 มิถุนายน พ.ศ. 2552

ประวัติส่วนตัว


นางสาวอารีรัตน์ ตั้งอำนวยชัย
Miss Areerat Tangamnuaychai
กำลังศึกษาปริญญาตรีปีที่ 3
รหัสนักศึกษา 50152792046
หลักสูตรบริหารธุรกิจ (คอมพิวเตอร์ธุรกิจ)
คณะวิทยาการจัดการ
มหาวิทยาลัยราชภัฏสวนดุสิต

วันจันทร์ที่ 29 มิถุนายน พ.ศ. 2552

DTS 02-24/06/52

Array and Record
การกำหนดอะเรย์เริ่มจากชื่อของอะเรย์ ตามด้วย Subscript มีมากกว่า 1 จำนวน และเป็นตัวบอกอะเรย์หลายมิติและการกำหนด Subscript จะมีค่าสูงสุดที่เรียกว่า ขอบเขตบน และค่าต่ำสุด เรียกว่า ขอบเขตล่าง
การจัดเก็บอะเรย์ในหน่วยความจำหลักของอะเรย์ในมิติต่าง ๆ เช่น อะเรย์ 1 มิติ หรืออะเรย์หลายมิติ โดยอะเรย์จะส่งให้ฟังก์ชันได้ 2 ลักษณะ คือ
1. การกำหนด array element เป็นพารามิเตอร์ส่งค่าให้กับฟังก์ชัน โดยอ้างชื่อพร้อมระบุ Subscript
ตัวอย่าง int(num[10],num[5]);
2. ส่งอะเรย์ทั้งชุดให้ฟังก์ชัน โดยอ้างถึงชื่ออะเรย์ ไม่มี Subscript
ตัวอย่าง float a[0]; float salary;
การประกาศอาร์กิวเมนต์ในฟังก์ชันเป็นอะเรย์ มีหน้าที่รับค่า และไม่ต้องมีการประกาศขนาดของอะเรย์ที่ในการรับค่า โดยตัวแปรที่ทำหน้าที่รับค่าถูกกำหนดเป็นพอยเตอร์
Structure เป็นโครงสร้างที่มีข้อมูลแต่ละตัวแตกต่างกันได้ โดยมีสมาชิกเป็นจำนวนเต็ม ทศนิยม อักขระ อะเรย์หรือพอยเตอร์ หรือ structure ด้วยกันก็ได้
การประกาศสมาชิกแต่ละตัวของ structure จะเป้นตัวธรรมดา หรือ structureอื่น ๆ ก็ได้ โดยชื่อสมาชิกแต่ละตัวต้องต่างกัน
การบ้าน
#include stdio.h
#includ string.h
main() {
struct student {
char name [30];
char adds[30];
int age;
char sex[10];
float salary;
char apartment_name[20];
int floor;
int room;
float rent;
}student1;
strcpy(student1.name,"areerat");
strcpy(student1.adds," Ratchatawee,bangkok ");
student1.age,22;
strcpy(student1.sex,"female");
student1.salary,5000;
strcpy(student1.apartment_name,"A&D");
student1.floor,3;
student1.room,306;
student1.rent,3700;
printf ("This is my resume\n\n");
printf ("Name :%s\n",student1.name);
printf ("Address:%s\n",student1.adds);
printf ("Age :%d\n",student1.age);
printf ("Sex :%s\n",student1.sex);
printf("Salary :%.2f\n",student1.salary);
printf ("Appartment :%d\n",student1.apartment_name);
printf ("Floor :%d\n",student1.floor);
printf ("Room :%d\n",student1.room);
printf ("Rent :%.2f\n",student1.rent); }