
Page
นี้จะมีรายละเอียดเกี่ยวกับการเขียนโปรแกรมมากมาย
เพราะฉะนั้น เรา...

(
3 )
ตอนนี้มาพูดถึงเนื้อหาเริ่มที่จะลึกๆ
ลงไปบ้าง ผู้ที่กำลังเข้ามาครั้งแรกสามารถดูบทเรียนก่อนๆได้ที่ข้างล่างนี้นะครับ
ตรง prevoius title 1 และ 2
ถ้ามีอะไรไม่เข้าใจ post
message ไว้นะครับ
และอย่าลืมแสดงความคิดเห็นบ้าง
อย่าปล่อยให้พื้นที่ post message หรือ guestbook หรือ e-mail มันเหงา !
มันกะลังคอยคนเขียนอะไรไปหามันบ้าง

3. ว่ากันด้วยเรื่องตัวอักษร
สำหรับภาษา C
นั้นฟังก์ชั้นมาตรฐานที่ใช้ในการอ่านค่าจากคีย์บอร์ดคือ
getchar(); รูปแบบการใช้คือ c=getchar( ); เมื่อ c
ต้องถูกประกาศตัวแปรเป็นแบบ
char (ลองเขียนโปรแกรมดูเองนะครับ)
และฟังก์ชันสำหรับแสดงตัวอักษรที่หน้าจอคือ
putchar( ); ใช้ว่า putchar(ชื่อตัวแปรชนิด
char) เราสามารถใช้ putchar หรือ
printf
ในการพิมพ์ค่าไปสู่หน้าจอก็ได้ครับ
ถ้ายังไม่เข้าใจมาดูโปรแกรมตัวอย่างดีกว่า
โปรแกรม #3
1:#include <stdio.h>
2:main()
3:{
4: char c;
5: c=getchar();
6: while ( c != 'q' )
7: {
8: putchar(c);
9: c=getchar();
10: }
11:} |
ตกลงกันก่อนว่า ตัวเลข 1:
หรือ 2: ไปจนถึง 10:
นั้นไม่ต้องพิมพ์ลงไปนะครับ
ผมใช้ช่วยการการอธิบายเท่านั้น
โดยถือว่า 1:
ก็คือบรรทัดที่ 1 นะครับ
ลองสั่ง run โปรแกรมนี้ดู
จะพบว่าโปรแกรมจะรออ่านค่าจากคีย์บอร์ดทีละตัวเมื่อเรากดอะไรก็ตาม
มันก็จะแสดงให้เราเห็นด้วย
จนกว่าเราจะกดตัว q
และกด enter
มันถึงจะออกมาจากโปรแกรม
เป็นไงล่ะ !
บางคนเห็นบรรทัดแรกแล้วงง
ว่าทำไมต้องมีตัวนี้ด้วย
ไอ้ตัวที่มี #
นำหน้านั้นน่ะเค้าเรียกว่า
pre-processer มีประโยชน์ต่อการเขียนโปรแกรมมากทีเดียว
โดยคำสั่ง #include
<stdio.h> นี้จะหมายความว่าให้นำเอาไฟล์
stdio.h
เข้ามารวมไว้ในโปรแกรมของเราด้วย
(เพราะคำสั่ง putchar และ getchar
อยู่ในไฟล์นี้)
บรรทัดที่ 2 และ 3 คงไม่ต้องบอกนะครับ
ส่วนบรรทัดที่ 4
ก็กำหนดให้ตัวแปร c
ให้เก็บข้อมูลแบบตัวอักษร
บรรทัดที่ 5
กำหนดให้รอรับอักษรจากแป้นพิมพ์แล้วนำไปกำหนดไว้ในตัวแปร
c
จากนั้นเป็นการทดสอบว่าค่า
c ไม่เท่ากับ q หรือเปล่า
ถ้าไม่เท่ากับให้ทำตามคำสั่งในบล๊อคย่อย
แต่ถ้าสมมุติเท่ากับ q
แล้วโปรแกรมก็จะหลุดออกมาแลย
แบบนี้อาจจะงง
สรุปคำสั่งได้ว่า
1. อ่านค่า c
2. ทดสอบว่า c ใช่ตัว 'q'
หรือเปล่า
3.
ถ้าไม่ใช้ให้ลงมาในลูป {.....}
ก็คือพิมพ์ค่า c
แล้วอ่านค่า c
อีกครั้งหนึ่ง
4. ย้อนกลับไปที่ประโยค
while อ่านค่า c ต่อ
5. ทดสอบค่า c
เช่นนี้เรื่อยไป
จนกว่าค่า c มีค่าคือ 'q'
จะกระโดดออกจากการวนลูป
6. จบโปรแกรม
นอกจากนี้ถ้าจะให้โปรแกรมสั้นลงเราสามารถเขียนโปรแกรมสั้นๆ
ได้ดังนี้
โปรแกรม #4
1:#include <stdio.h>
2:main()
3:{ char c;
4: while (( c =
getchar()) != 'q') putchar(c); } |
สั้นไหมครับ
แต่การเขียนแบบนี้อาจจะงงได้สำหรับผู้ที่ไม่เคยชิน
ลองไล่ดูประโยคดูนะครับ
การทำงานเหมือนกันเปี๊ยบเลย
ในเมื่อมีตัวอักษรแล้ว
ต่อมาก็ต้องมีข้อความใช่ไหม
ข้อความคืออะไร
ข้อความก็คือตัวอักษรโดดหลายตัวมารวมกันเราเรียกตรงนี้ว่า
string ในภาษาปาสคาลจะมีตัวแปรประเภทหนึ่งคือตัวแปรสตริงโดยเฉพาะ
ผู้ใช้ปาสคาลอย่าพึ่งสับสนนะครับ
เพราะผมจะบอกว่าในภาษา C
จะไม่มีตัวแปรประเภทนี้
แต่ภาษา C
ใช้ตัวแปรประเภท char แทน
หลายคนเริ่มสงสัยว่าตัวแปรประเภท
char
มันเก็บอักษรได้ตัวเดียวนี่นา
ก็ถูกครับ
แต่เราสามารถระบุให้มันเก็บเป็นข้อความได้โดยใช้ตัวที่เรียกว่า อาร์เรย์ (Array)
ผู้ใช้ปาสคาลคงอ๋อแล้วใช่ไหม
เพราะความยืดหยุ่นของภาษา
C นี่เองทำให้เราสามารถใช้
array
ร่วมกับตัวแปรได้หลายชนิด
ซึ่งมีประโยชน์ (อย่างมาก)
ในการเขียนโปรแกรมจำพวกเกม
สิ่งที่ควรรู้ก็คือ
การระบุค่าของตัวแปรเราจะใช้
char line[25];
ก็หมายความว่าตัวแปร line
นี้เก็บข้อมูลแบบตัวอักษรได้
24 ตัวอักษร ย้ำว่า 24
ตัวอักษรนะครับ
ที่เป็นอย่างนี้
เพราะภาษา c
จะกำหนดไว้ว่า ไบต์(หรือที่เก็บตัวอักษร)สุดท้ายของข้อความต้องเก็บเป็นรหัส \0 เสมอ ซึ่งค่า \0
นี้ก็คืออักษร null
ของรหัสแอสกี ( รหัส ASCII 00 )
ซึ่งก็คือความว่างเปล่านั่นเอง
ลองมาดูโปรแกรมตัวอย่างกันอีกทีนะ
โปรแกรม #5
1:#include <stdio.h>
2:main()
3:{
4: char line[51];
5: int i=0;
6: while (i<51 && (line[i] = getchar()) !=
'\n') i=i+1;
7: if (i<51) line[i]='\0';
8: printf(" %s \n",line);
9: i=i-1;
10: while( i>=0) {
11: putchar(line[i]);
12: i=i-1;
13: }
14:} |
จะเห็นได้ว่าโปรแกรมยาวขึ้นและยุ่งยากขึ้น
ไม่เป็นไรครับเรามีเวลาเหลือเฟือ
ดูไปทีละนิดละกัน
อ้ออีกอย่างหนึ่งตรงเลขบรรทัดนั้น
เพื่อนๆคิดว่าควรจะใส่ดีหรือเปล่าครับ
แสดงความคิดเห็นกันหน่อย
และเนื่องจากข้อจำกัดของภาษา
HTML
ทำให้ไม่สามารถเว้นวรรคได้ตามต้องการขออภัยด้วยครับ
เอาล่ะมาดูโปรแกรมกันดีกว่า
โปรแกรมนี้จะทำการอ่านข้อมูล
1 ประโยค (จบประโยคโดยการกด
ENTER )
และพิมพ์ประโยคเดิมออกมาทั้งเหมือนเดิมและสลับซ้ายขวา
จากบรรทัดที่ 4
เรากำหนดให้ตัวแปร line
เก็บข้อมูลแบบตัวอักษรได้
50 ตัวนะครับ จากนั้นกำหนดให้
i เก็บข้อมูลตัวเลขและมีค่าเริ่มต้นเท่ากับ
0 ( ค่านี้เปลี่ยนแปลงได้
) เราใช้ค่า i ในการบ่งบอกตำแหน่งที่อยู่ของตัวอักษรแต่ละตัวใน
1 ประโยค
มากถึงบรรทัดที่ 6
อาจจะดูยุ่งยากสักนิด
แต่บรรทัดนี้
จะอ่านค่าตัวอักษรทีละตัวไปเรื่อยๆ
จนกว่าจะครบ 50 ตัว
หรือเรากด ENTER
สิ่งที่ควรรู้ในตอนนี้คือ
สัญลักษณณ์ \n
นั้นหมายถึงการกด enter
หรือการขึ้นบรรทัดใหม่
บรรทัดที่ 7
คือเราจะใส่ค่า
อักษรตัวสุดท้าย (51)
ให้เป็น \0
คือการจบประโยคนั่นเอง
จากนั้นจะเป็นการพิมพ์ค่าออกมาโดยใช้คำสั่ง
printf
สังเกตว่าเราไม่ต้องระบุตำแหน่งให้
line อีกแล้ว
เพราะถ้าใช้โดดๆ
แบบนี้จะหมายความถึงทั้งประโยคเลยครับ
( ส่วน line[5] หมายถึงอักษรตัวที่
5 หรือแม้กระทั่ง line[i]
ก็จะหมายถึงตัวอักษรตัวที่
i) ลงมาดูบรรทัดที่ 9
ที่เราให้ i=i-1
นั้นก็เพราะว่าตอนนี้ค่า
i
ของเราได้มาถึงตัวสุดท้ายของข้อความแล้ว
สมมุติว่าเป็น 51 เมื่อผ่านบรรทัดนี้จะเหลือ
50
ที่เราทำเช่นนี้ก็เพราะต้องการที่จะพิมพ์ตัวอักษรแบบสลับซ้ายขวา
ลองไล่ดูประโยค while
ทั้งบล๊อคนะครับ
จะเห็นได้ว่าจะพิมพ์ย้อนกลับมาจากตัวที่
50 เป็นตัวที่ 49,48
มาเรื่อยๆ จน i=0
จึงออกจาก block มาตามเงื่อนไขที่ระบุไว้ใน
while
เสริมนิดนึง
ลืมพูดถึงไป ก็คือ #define
จะระบุไว้ในส่วนไหนก็ได้แต่ต้องนอกบล๊อก
{ ... }
ส่วนมากจะกำหนดไว้ที่หัวโปรแกรมพร้อมกับ
#include, #define
ก็คือการกำหนดค่าคงที่ที่จะใช้ในโปรแกรม
ก็เหมือน const
ในภาษาปาสคาลนั่นเอง
เช่น เราจะกำหนดว่า #define MAX 90 และ #define MIN 1 ก็หมายความว่าให้ค่าคงที่
MAX มีค่าเท่ากับ 90
และค่าคงที่ MIN มีค่าเท่ากับ
1 ทั้ง 2
ตัวนี้จะมีค่าคงที่เสมอไม่ว่าจะเกิดอะไรขึ้น
และไม่สามารถเปลี่ยนแปลงได้ในโปรแกรมครับ
ความสามารถของเรื่องสตริงหรือตัวอักษรและ
array
ไม่ได้มีเรื่องเท่านี้นะครับ
คราวหน้าเราจะพูดถึงส่วนที่สำคัญ
และนำมาใช้เรื่องนี้โดยตรงและยืดหยุ่นกว่าได้เช่นกัน
นั่นก็คือเรื่อง ponter ครับ

เป็นไงบ้างครับ จบบทที่
3 นั่งทำตอน 6 โมงเย็น upload
มาไว้ตอนห้าทุ่ม
หลังแข็งเหมือนกันนะเนี่ย
ขอให้ฝันหวานเป็นภาษาซีนะครับ
5 5 5 :D noii99@hotmail.com
Post
Message
มีข้อคิดเห็น
/ คำถาม / คำติชม
เกี่ยวกับการเขียนโปรแกรม
เชิญ Click Post ข้อความได้ที่นี่ครับ








