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

DTS 05 - 22/07/2552

เป็นการเรียนการสอนเรื่อง Stack (สแตก)

สแตกเป็นโครงสร้างข้อมูลแบบลิเนียร์ลิสต์ ที่สามารถนำข้อมูลเข้าหรือออกได้ทางเดียวคือส่วนบนของสแตกหรือ หรือเรียกว่า ท๊อปของสแตก (Top Of Stack) ซึ่งคุณสมบัติดังกล่าวเรียกว่า ไลโฟลิสต์ (LIFO) หรือ พูชดาวน์ลิสต์ (Pushdown List) คือสมาชิกที่เข้าลิสต์ที่หลังสุดจะได้ออกจากลิสต์ก่อน หรือ เข้าหลังออกก่อน การเพิ่มข้อมูลเข้าสแตกจะเรียกว่าพูชชิ่ง (pushing) การนำข้อมูลจากสแตกเรียกว่า ป๊อปปิ้ง (poping) การเพิ่มหรือลบข้อมูลในสแตกทำที่ท๊อปของสแตก ท๊อปของสแตกนี้เองเป็นตัวชี้สมาชิกตัวท้ายสุดของสแตก

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

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

DTS 04 - 15/07/2552

เป็นการเรียนเรื่อง โครงสร้างข้อมูลลิงค์ลิสต์
วิธีแก้ปัญหาในการย้ายข้อมูลที่พบในการจัดเก็บที่มีรูปแบบเรียงตามลำดับ(Sequential)เปลี่ยนมาใช้รูปแบบไม่เรียงตามลำดับ (Non-sequential)ซึ่งรูปแบบการเรียงตามลำดับจะมีสมาชิกเรียงต่อเนื่องติดกันในทางตรรกะ (Logical) และทางกายภาพ(Physical) เป็นแบบเดียวกัน แต่รูปแบบไม่เรียงตามลำดับสมาชิกต่อเนื่องติดกันในทางตรรกะ ส่วนทางกายภาพไม่จำเป็นต้องเหมือนกัน โดยในทางตรรกะจะแสดงด้วยแต่ละสมาชิกมีการชี้ (Point) ต่อไปยังสมาชิกตัวถัดไป สมาชิกทุกตัวในรายการจึงถูกเชื่อมต่อ (Link) เข้าด้วยกันแต่ละสมาชิกเรียกว่าโหนด (Node)

การเขียนโปรแกรมแบบ stdio.h และ iostream.h

stdio.h

#include"stdio.h "
main()
{
int x,y;

printf("X :");
scanf("%d",&x);
printf("Y :");
scanf("%d",&y);
printf("\n\n");
printf("...............\n");
printf("x mod y = %d\n",x%y);
printf("x + y = %d\n",x+y);
printf("x - y = %d\n",x-y);
printf("x * y = %d\n",x*y);
printf("x / y = %d\n",x/y);
printf("...............\n");
}

iostream.h

#include"iostream.h "
main()
{
int x;
int y;

cout<<"X :"; cin>>x;
cout<<"Y :"; cin>>y;
cout<<"\n\n";
cout<<"...............\n";
cout<<"x mod y = "<< x%y<< endl;
cout<<"x + y = "<< x+y<< endl;
cout<<"x - y = "<< x-y<< endl;
cout<<"x * y = "<< x*y<< endl;
cout<<"x / y = "<< x/y<< endl;
cout<<"...............\n";
}

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

DTS 03 - 01/07/2552

เป็นการเรียนการสอนเรื่อง Pointer
ว่า Pointer คือตัวแปรที่เก็บค่าอ้างอิงไปยังตำแหน่งในหน่วยความจำ
ตัวอย่าง
int *y , x=10
y=&x;
หมายความว่า ตัวแปร y ซึ่งประกาศเป็นตัวแปร Pointer จะเก็บค่า 1000 ซึ่งเป็นตำแหน่งที่อยู่
เป็นต้น

แบบฝึกหัด

1. ให้นักศึกษากำหนดค่าของ Array 1 มิติ และ Array 2 มิติ
- Array 1 มิติ
ตัวอย่างเช่น กำหนดค่า char name[20] เราก็จะป้อนตัวตัวอักษรได้ไม่เกิน 20 ตัว
#include “stdio.h”
main()
{
char name[20];
printf(“Bookname\n”);
scanf(“%s”,&name);
printf(“Bookname is %s”);
}
- Array 2 มิติ
ถ้าเราประกาศ int b[][]=new int[5][5];ก็หมายถึง สมมติสร้างกล่องใหญ่ๆ มา 5 กล่อง และใน
กล่องใหญ่ๆ 5กล่องนั้น ก็มี อีก 5กล่องเล็ก อยู่ข้างใน { สรุปว่ามีกล่องเล็กทั้งหมด 25 กล่อง } ดังนี้

b[0][0] b[0][1] b[0][2] b[0][3] b[0][4]
b[1][0] b[1][1] b[1][2] b[1][3] b[1][4]
b[2][0] b[2][1] b[2][2] b[2][3] b[2][4]
b[3][0] b[3][1] b[3][2] b[3][3] b[3][4]
b[4][0] b[4][1] b[4][2] b[4][3] b[4][4]

ถ้าพูดถึง b[2][1] จะหมายถึงข้อมูลที่อยู่ในกล่องใหญ่ใบที่ 2 กล่องเล็กใบที่ 1 เป็นต้น

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
ตัวอย่าง Structure เป็นการขอข้อมูลลูกค้าของร้านขายหนังสือแห่งหนึ่ง
#include"stdio.h"
struct book
{
char name[20];
int id;
char bookname[20];
int date;
int month;
int year;
float price;
}
book;
void input_data()
{
printf("Custommer in rent of book\n");
printf("Name: ");
scanf("%s",&book.name);
printf("ID: ");
scanf("%d",&book.id);
printf("Bookname: ");
scanf("%s",&book.bookname);
printf("Date: ");
scanf("%d",&book.date);
printf("Month: ");
scanf("%d",&book.month);
printf("Year: ");
scanf("%d",&book.year);
printf("Price: ");
scanf("%f",&book.price);
}
void show_data()
{
printf("\n\nDate your is \n");
printf("Name: ");
printf("%s\n",book.name);
printf("ID: ");
printf("%d\n",book.id);
printf("Bookname: ");
printf("%s\n",book.bookname);
printf("Date-month-year : %d-%d-%d\n",book.date,book.month,book.year);
printf("Price: ");
printf("%0.2f\n",book.price);
}
main()
{
input_data();
show_data();
}

5. ให้นักศึกษาบอกความแตกต่างของการกำหนดตัวชนิด Array กับตัวแปร Pointer ในสภาพของการกำหนดที่อยู่ของข้อมูล
ตัวแปร Array คือ ตัวแปรเป็นชุดตารางใช้เก็บค่าต่างๆที่เป็นชนิดเดียวกัน ส่วนตัวแปร Pointer หรือ ตัวชี้ จะเป็นตัวแปรที่เก็บตำแหน่ง Address เท่านั้น ตัวแปรแบบ pointer แตกต่างจากตัวแปรในตัวอย่างข้างบน เพราะสิ่งที่ pointer เก็บคือเลขตำแหน่งหน่วยความจำ ซึ่งโดยปรกติแล้ว จะเป็นเลขตำแหน่งของตัวแปร หรือเลขตำแหน่งของสมาชิกของคลาสหรือ struct