วันศุกร์ที่ 31 กรกฎาคม พ.ศ. 2552

DTS 06/29-07-2552

Stack เป็นโครางสร้งข้อมูลที่มีข้อมูลแบบลิเนียร์ลิสต์ที่มีคุณสมบัติ การเพิ่มหรือลบข้อมูลในสแตก จะกระทำที่ปลายข้างเดียวเรียกว่าtop ของสแตก และสแตกสามารถทำได้2แบบคือ
1.การแทนข้อมูลแบบลิงค์ลิสต์
2.การแทนข้อมูลของสแตกแบบอะเรย์
การใช้ สแตค เพื่อแปลรูปนิพจน์ทางคณิตศาสตร์รูปแบบนิพจน์ทางคณิตศาสตร์• นิพจน์ Infix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่ระหว่างตัวดำเนินการ (Operands) เช่น A+B-C• นิพจน์ Prefix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หน้าตัวดำเนินการ (Operands) เช่น +-AB• นิพจน์ Postfix คือ นิพจน์ที่เครื่องหมายดำเนินการ (Operator) อยู่หลังตัวดำเนินการ (Operands) เช่น AC*+

การคำนวณนิพจน์ทางคณิตศาสตร์ จะสามารถทำได้ 3 วิธี
1.นิพจย์ Infin
2.นิพจย์postfix
3.นิพจย์prefix

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

DTS 05/22-07-2552

Linked List จะมีคำสั่งในกระบวนการทำงานของแต่ะคำสั่งที่แต่ต่างกันไป เช่น กระบวนการการทำงานแบบ Traverse มีหน้าที่คือการท่องไปในลิสต์และจะทำการประมวลข้อมูล ผลลัพธ์ที่ได้ขึ้นอยู่กับการประมวลผล เช่นการแปลงค่าใน node การคำนวณค่าเฉลี่ยของฟิลด์ และยังมีฟังก์ชัน EmptyList เพื่อทดสอบว่าลิสต์ว่างหรือไม่ กระบวนการทำงาน Retrieve Node ใช้หาตำแหน่งในลิสต์การทำงานของLinked List คือกระบวนการ Destroy list คือการหยุดการทำงานของลิสต์Linked List แบบซ้อนเป็นลิงค์ลิสต์สมาชิกตัวสุดท้ายที่ชี้ไปที่สมาชิกตัวแรกของลิงค์ลิสต์จะเป็นการทำงานแบบวงกลม
เรื่อง"Stack"
เป้นโครงสร้างข้อมูลแบบลิเนียนลิสต์ ลักษณะที่สำคัญของสแตกคือข้อมูลที่ถูกใส่หลังสุดจะถูกนำออกมาแสดงก่อนข้อมูลที่เข้าไปก่อน เรียกขั้นตอนนีว่า LOFO ( Last in First Out ) จะมีการทำงานอยู่ 3 ขั้นตอน
1.การใส่ข้อมูลลงในสแตกหรือ Push
2.การนำข้อมูลออกจากส่วนบนสุดของสแตกหรือ Pop เมื่อนำข้อมูลออกจากสแตกแล้วจะเกิดภาวะสแตกว่าง stack empty และถ้าไม่มีข้อมูลอยู่ในสแตก
3.การคัดลอกข้อมูลที่อยู่บนสุดของสแตกไว้แต่ไม่ได้เป็นกการนำข้อมูลออกจากสแตก


ประวัติ นักศึกษา แบบ stdio.h and iostream.h

แบบ stdio.h

#include
struct student
{
char name[45];
char lastname[45];
int id;
}data;
void main()
{
printf("student data\n");
printf("name:");
scanf("%s",&data.name);
printf("lastname:");
scanf("%s",&data.lastname);
printf("id:");
scanf("%d",&data.id);
{
printf("\n\n\nDisplay data of studen\n");
printf("name:%s\n",data.name);
printf("lastname:%s\n",data.lastname);
printf("id:%d\n",data.id);
}
}

แบบ iostream.h

#include
struct student
{
char name[45];
char lastname[45];
int id;
}data;
void main()
{
printf("student data\n");
printf("name:");
scanf("%s",&data.name);
printf("lastname:");
scanf("%s",&data.lastname);
printf("id:");
scanf("%d",&data.id);
{
printf("\n\n\n\nDisplay data of studen\n");
printf("name:%s\n",data.name);
printf("lastname:%s\n",data.lastname);
printf("id:%d\n",data.id);
}
}



จงยกตัวอย่าง Stack ที่ใช้ในชีวิตประจำวันของนักศึกษา

Print

1.ใส่กระดาษ
2.สั่งพิมพ์
3.กระดาษออก

ลูกชิ้นปิ้ง

1เสี่บลูกชิ้นลุกที่1-4
2ปิ้ง
3กินลูกที่4321ตามลำดับ

ลูกชิ้นที่บนจะเป็นลูกสุดท้ายที่เสี่บเป็นลูกที่4
ลูกที่อยู่ด้านล้างเป็นลูกแรกจะเป็นลูกที่1

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

DTS 04/15-07-2552

สรุปเรื่อง set and string
ตอนท้าย ได้รูว่าอะเรย์ของสตริงมีจำนวนมาก ก็ทำให้ทำให้เป็นอะเรย์ของสตริงเพื่อจะได้เขียนโปรแกรมได้สะดวก และอะเรย์ของสตริงที่ยาวไม่เท่ากันทำได้ก็ต่อเมื่อกำหนดค่าเริ่มต้นเท่านั้นอะเรย์ที่ยาวเท่ากันจะถือว่าเป็นอะเรย์ที่แท้จริงสามาตรได้ทั้งเมื่อกำหนกเป็นตัวแปรจะแตกต่างจากความยาวไม่เท่ากันคือแบบความยาวไม่เท่ากันจะเติมท้ายด้วยnull characterให้เพียงตัวเดียว แบบความยาวเท่ากันจะเติมครบทุกช่อง การกำหนดการเกี่ยวกับสตริงคือ ฟังก์ชั่นstrlen(str)ให้หาความยาวของสตริง ฟังก์ชั่นstrcpy(str1,str2) ให้คัดลอกข้อมูลจากอันหนึ่งไปยังอีกอันหนึ่ง
เรื่อง Linked List ได้รู้ถึงการสร้างลิงค์ลิสต์ และการทำงานของลิงค์ลิสต์ว่าทำงานแบไหนและข้อมูลของอิลิเมนต์โดยมีพอยเตอร์เป็นตัวเชื่อมแต่ละอิลิเมนท์เรียกว่าNodeแบ่งได้เป็น2ส่วนคือData จะเก็บข้อมูลของอิลิเมนท์ และLink Field จะทำหน้าที่เก็บตำแหน่งของโนดต่อไปในลิสต์
โครงสร้างขอ้มูลแบบลิงค์ลิสต์จะแบ่งออเป็น2ส่วนคือ
1.Head Structure มี3ส่วน
-จำนวนโนดในลิสต์ Count
-พอยเตอร์ที่ที่ชี้ไปยังโนดเพื่อเข้าถึง Pos
-พอยเตอร์ที่ชี้ไปยังโหนดข้อมูลแรกของลิสต์ Head
2.Data Node Stucture จะประกอบด้วยข้อมูล Data และพอยเตอร์ที่ชี้ไปยังข้อมูลตัวถัดไป
กระบวนงานและฟังก์ชั่นที่ใช้ในการดำเนินงานพื้นฐานมีดังนี้
1.กระบวนงาน Create List
2.กระบวนงาน Insert Node
3.กระบวนงาน Delete Node
4.กระบวนงาน Search list

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

DTS 03/01-07-2552

Pointer

ตัวแปร pointer เป็นตัวแปรที่ทำหน้าที่เก็บตำแหน่งที่อยู่ของตัวแปร สามารถอ้างอิงกลับไปกลับมาได้ มีขนาด 2 ไบต์เท่ากันหมด ไม่ว่าจะเป็น char,int,floatหรืออื่นๆ

ในการประกาศตัวแปร pointer จะต้องนำหน้าด้วยเครื่องหมาย * เช่น int*x // เป็นตัวแปร pointer

เครื่องหมาย & เป็นเครื่องหมายที่บอกตำแหน่งที่อยู่ของตัวแปรที่เก็บไว้ในหน่วยความจำ

** ในกรณีที่ตัวแปรใดมีเครื่องหมาย & นำหน้าจะไม่สามารถนำมาคำนวณได้

ตัวอย่าง
int *ptr,count // เป็นการประกาศตัวแปร ptr เป็นตัวแปร pointer และประกาศตัวแปร count
count = 100 // เป็นการกำหนดค่าให้กับ count มีค่าเท่ากับ 100
ptr = &count // เป็นการกำหนดค่าให้กับ ptr มีค่าเท่ากับตำแหน่งที่อยู่ของ count

String

string หมายถึงอักขระที่มีความยาวมากกว่า 1 ตัวแรงต่อกันเป็นข้อความ โดยข้อมูลชนิดขด้อความต้องเขียนอยู่ภายในเครื่องหมาย " " (Double quote)
หรือพูดง่าย ๆ ก็คือ String เป็น Array ของ อักขระนั่นเอง ตัวอย่างเช่น
char name[20];
หมายถึง string ที่เก็บข้อความได้ 19 ตัวอักษร ตามปกติแล้วจุดสิ้นสุดของ string จะเป็น \0
มีฟังก์ชั่นที่เกี่ยวข้องกับ String ดังนี้
getchar(); // ใช้สำหรับรับข้อมูลชนิดอักขระเข้ามาจากคีย์บอร์ด โดยรับครั้งละ 1 อักขระเท่านั้น
gets(); // จะใช้รับข้อมูลชนิดข้อความเข้ามาทางคีย์บอร์ด
putchar(); // คือการแสดงผลอักขระออกทางหน้าจอ
puts(); // ใช้ในการแสดงข้อความออกจากหน้าจอ

(set)

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

แบบฝึกหัด

1.ให้นักศึกษากำหนดค่าของArray1มิติ และ Array2มิติ

ตอบ arrray1มิติ int num[10]={2,4,6,8,10,12,14,16,18,20};
arrray2มิติint a[2][3] = {{1,2,3},{4,5,6}}

2.ให้นักศึกษาหาค่าของ A[2], A[6] จากค่า A={2,8,16,24,9,7,3,8}

ตอบ A[2], A[6] = 16,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

ตอบ #include "stdio.h"
struct time
{
int day
;int month
;int year;
};
struct Account
{
char id[20];
char acct_type[30];
char acct_name[30];
char name[30];
float balance;
struct time date;
}details;
void input_data()
{
printf("Savings Bank\n");
printf("id = ");
scanf("%s",&details.id);
printf("Bank_Name : ");
scanf("%s",&details.acct_name);
printf("Name : ");
scanf("%s",&details.name);
printf("Balance : ");
scanf("%f",&details.balance);
printf("Day-Month-Year : ");
scanf("%d-%d-%d",&details.date.day,&details.date.month,&details.date.year);
}
void show_data()
{
printf("Information Account\n");
printf("Your ID : %s\n",details.id);
printf("Your Bank_Name : %s\n",details.acct_name);
printf("Your Name : %s\n",details.name);
printf("Your Balance : %f\n",details.balance);
printf("Date : %d-%d-%d",details.date.day,details.date.month,details.date.year);
}
main()
{
input_data();
show_data();
return(0);
}

5.ให้นักศึกษาบอกความแตกต่างของการกำหนดตัวแปรชนิด Array กับตัวแปร Pointer ในสภาพของการกำหนดที่อยู่ของข้อมูล

ตอบ การกำหนดที่อยู่ของ array จะเป็นการกำหนดแบบแยกประเภท เช่น int, char, float จะไม่รวมอยู่ด้วยกันการกำหนดที่อยู่ของ pointer จะเป็นการใส่ข้อมูลลงไปใน address และจะมีการประกาศค่าก่อนที่จะใช้งาน