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

การบ้าน iostream.h และ stdio.h

เขียนโปรแกรมโดยใช้ stdio.h

#include
main ()
{
char name [20];
char brand [20];
float price [10];
char color [10];
printf ("--------- show room ---------\n");
printf ("name:");
scanf ("%s",& name);
printf ("\nbrand:");
scanf ("%s",& brand);
printf ("\nprice:");
scanf ("%f",& price);
printf ("\ncolor:");
scanf ("%s",& color);
printf ("--------- Thank You ----------\n");
}


เขียนโปรแกรมโดยใช้ iostream.h

#include
main ()
{
char name [20];
char brand [20];
float price [10];
char color [10];
cout <<"------------show room ------------\n";
cout <<"name:";
cin >>name;
cout <<"\nbrand:";
cin >> brand;
cout << "\nprice:";
cin >>price;
cout <<"\ncolor:";
cin >>color;
cout<< "----------------Thank You--------------"; }

DTS 05-22-07-2552

สรุปการเรียน
เรื่อง Linked List และ Stack


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


Stack

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

การดำเนินงานพื้นฐานของสแตก

การทำงานต่าง ๆ ของสแตกจะกระทำที่ปลายข้างหนึ่งของ สแตกเท่านั้น ดังนั้นจะต้องมีตัวชี้ตำแหน่งข้อมูลบนสุดของสแตกด้วยการทำงานของสแตกจะประกอบด้วยกระบวนการ 3 กระบวนการที่สำคัญ คือ

1.Push คือ การนำข้อมูลใส่ลงไปในสแตกเช่น สแตก s ต้องการใส่ข้อมูล i ในสแตก จะได้push (s,i) คือ ใส่ข้อมูล i ลงไปที่ทอปของสแตกในการเพิ่มข้อมูลลงในสแตก จะต้องทำการตรวจสอบว่าสแตก เต็มหรือไม่ ถ้าไม่เต็มก็สามารถเพิ่มข้อมูลลงไปในสแตกได้ แล้วปรับตัวชี้ตำแหน่งให้ไปชี้ที่ตำแหน่งข้อมูลใหม่ ถ้าสแตกเต็ม (Stack Overflow) ก็จะไม่สามารถเพิ่มข้อมูลเข้าไปในสแตกได้อีก

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

3. Stack Top เป็นการคัดลอกข้อมูลที่อยู่บนสุดของสแตก แต่ไม่ได้นำเอาข้อมูลนั้นออกจากสแตก

*ตัวอย่างเข้าหลังออกก่อน*

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

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

DTS 04-15-07-2552

สรุปการเรียน

เรื่องลิงค์ลิสต์

ลิงค์ลิสต์ (Linked List) เป็นวิธีการเก็บข้อมูลอย่างต่อเนื่องของอิลิเมนต์ต่าง ๆ โดยมีพอยเตอร์เป็นตัวเชื่อมต่อแต่ละอิลิเมนท์ เรียกว่าโนด (Node) ซึ่งในแต่ละโนดจะประกอบไปด้วย 2 ส่วน คือ Data จะเก็บข้อมูลของอิลิเมนท์ และส่วนที่สอง คือ Link Field จะทำหน้าที่เก็บตำแหน่งของโนดต่อไปในลิสต์

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

- ในลิงค์ลิสต์จะมีตัวแปรสำหรับชี้ตำแหน่งลิสต์ (List pointer variable)ซึ่งเป็นที่เก็บตำแหน่งเริ่มต้นของลิสต์ ซึ่งก็คือโหนดแรกของลิสต์นั่นเอง ถ้าลิสต์ไม่มีข้อมูล ข้อมูลในโหนดแรกของลิสต์จะเป็นNull


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

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

- การลบโหนดออกจากลิงค์ลิสต์ จะกระทำโดยการเปลี่ยนพอยเตอร์บางตัว เริ่มต้นก็จะต้องหาโหนดที่มาก่อน โหนดที่ต้องการลบ จากนั้นก็ทำการเปลี่ยนพอยเตอร์

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

DTS 03-1-07-2552

สรุปการเรียน

pointer(พอยน์เตอร์)

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

การประกาศตัวแปร Pointer เราสามารถประกาศตัวแปร Pointer ได้โดยที่ตัวแปร Pointer ก็จะมีประเภทของตัวแปรตามแบบตัวแปร ปกติเช่น int,float การประกาศตัวแปร Pointer จะแตกต่างจากการประกาศตัวแปรแบบปกติ ตรงที่เวลาเราประกาศต้องมีเครื่องหมาย * นำหน้าชื่อตัวแปรด้วย เช่น
- int *A;
มีความหมายว่าตัวแปร A เป็นตัวแปร Pointer ที่สามารถชี้ไปที่ ที่อยู่ของตัวแปรที่เป็น int ได้
โดยปกติถ้าเราจะใช้ตัวแปร Pointer เราจะนิยมตั้งชื่อเพื่อสื่อความหมาย เช่น
-int *Poi;
การประกาศตัวแปร Pointer ในต่างประเทศจะนิยมให้เครื่องหมาย * อยู่ข้างหน้าประเภทของตัวแปร เช่น
-int* Poi;
แต่การประกาศแบบนี้อาจทำให้ดูสับสน และเข้าใจยากก็ได้ เพราะมีโปรแกรมเมอร์ C++ หลายคนคิดว่าถ้าเขียน Source code แบบนี้
-int* A,B,C;
จะเป็นตัวแปร Pointer ทั้ง 3 ตัว ซึ่งความจริงแล้ว จะเป็นตัวแปร Pointer ตัวเดียวเท่านั้นคือตัวแปร A ส่วน B และ C จะเป็นตัวแปร int ธรรมดา


เซ็ต(Set)

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


1.set intersection


2.set union


3.set difference

สตริง(String)

สตริง หมายถึง ชุด(array)ของตัวอักขระ(character) ที่เรียงต่อกัน สตริงจะเป็นคำหรือ ข้อความที่มีความหมาย ใน C++ ไม่มีชนิดข้อมูลประเภท string การกำหนด string คือการกำหนด เป็นอาร์เรย์ของข้อมูลชนิด char หลาย ๆ ตัวนำมาเชื่อมต่อกันเป็น string เช่น character 'C','o','m','p','u','t','e','r' เก็บไว้ในอาร์เรย์รวมเป็นข้อมูล string ซึ่งจะได้ข้อความ "Computer" ข้อมูล string เป็นได้ทั้งค่าคงที่(constant) และตัวแปร (variable)