วันพุธที่ 19 สิงหาคม พ.ศ. 2552

สอนวิธีการทำแมโครในไมโครซอฟต์เวิร์ด

วิธีการทำแมโครในไมโครซอฟต์เวิร์ด
การสร้างเมนูคำสั่งใน MS Office ด้วย Macro
Macro คืออะไรMacro เป็นลักษณะการใช้งานพิเศษที่ผู้ใช้โปรแกรมประยุกต์ในกลุ่มของ Microsoft Office สามารถเรียกใช้งานเพื่อการสร้างคำสั่งขึ้นใหม่ซึ่งจะช่วยให้การใช้งานง่ายขึ้นและประหยัดเวลาในการใช้งานบางอย่างที่ต้องทำเป็นขั้นตอนซ้ำ ๆการสร้าง Macro ใน Microsoft Wordการบันทึก Macroเปิดเอกสารที่ต้องการจะบันทึก Macroคลิกที่เมนู Tools เลือกMacro > New Macro…











พิมพ์ชื่อของคำสั่งที่ต้องการใน Macro name box จากนั้นใน Store macro in box คลิกเลือกว่าต้องการเก็บ macro ที่สร้างนี้ไว้ที่ใด แล้วคลิกปุ่ม OK เพื่อเริ่มการบันทึก


บนจอภาพจะปรากฏกรอบแสดงปุ่มควบคุมการบันทึก และที่ pointer ของเมาส์จะปรากฏสัญลักษณ์เครื่องบันทึกเทป ณ ขณะนั้นถ้ามีการพิมพ์ หรือ คลิกเลือกคำสั่งใด กิจกรรมต่าง ๆ ที่เกิดขึ้นก็จะถูกเก็บบันทึกไว้ตามขั้นตอนที่เกิดขึ้น เมื่อต้องการหยุดการบันทึกชั่วคราวก็กดปุ่ม Pause หรือ กดปุ่ม Stop เมื่อสิ้นสุดกิจกรรมที่ต้องการบันทึกสำหรับ macro นั้นการเรียกใช้ Macroคลิกที่เมนู Tools เลือกคำสั่ง Macro > Macros… จะพบ Macro ที่ได้บันทึกไว้ในกรอบรายชื่อของ Macroถ้าต้องการให้ macro ใดทำงาน ให้คลิกเลือกชื่อ macro นั้น แล้วคลิกที่ปุ่ม Runการแก้ไข Macroคลิกที่เมนู Tools เลือกคำสั่ง Macro4Macros… คลิกเลือกชื่อ macro ที่ต้องการแก้ไข แล้วคลิกที่ปุ่ม Editจะปรากฏวินโดว์ของ Microsoft Visual Basic ซึ่ง Word กำหนดไว้ให้เป็น Editor พร้อมกับวินโดว์ที่แสดง Code คำสั่ง ซึ่ง Word ได้แปลงขึ้นจากกิจกรรมต่าง ๆ ที่ได้บันทึกไว้ ในกรณีที่เข้าใจคำสั่ง Visual Basic ก็สามารถทำการแก้ไข code ได้ตามต้องการเมื่อต้องการกลับไปที่ Word ให้คลิกที่ไอคอนของ Word บน Toolbarการสร้างเมนูคำสั่งสำหรับเรียกใช้ Macroเมื่อได้มีการสร้าง Macro แล้ว และต้องการจัดทำเป็นเมนูเพื่อให้สามารถเรียกใช้ Macro ได้โดยสะดวก ก็สามารถทำได้ตามขั้นตอนต่อไปนี้เปิด Document หรือ Template ที่มีได้บันทึก Macro ไว้คลิกที่เมนู Tools เลือกคำสั่ง Customize… เลือกแถบ Commands ที่ Categories box คลิกที่ Macrosคลิกที่ Macro ที่ต้องการ แล้วลากเมาส์เพื่อนำ Macro ไปวางที่ Menu barคลิกปุ่ม Closeเมื่อต้องการเรียกใช้ Macro นั้น ก็สามารถคลิกที่เมนูได้ตามต้องการMacro Security ใน Microsoft Officeเนื่องจากปัญหาการระบาดของ macro virus โปรแกรมในกลุ่ม Microsoft Office จึงกำหนดให้มีการตั้ง security สำหรับการตรวจหา macro และเตือนผู้ใช้ว่ามี custom macro ในแฟ้มที่กำลังจะเปิด ผู้ใช้ต้องระบุว่าจะต้องการเปิดแฟ้มในลักษณะที่ยอมให้ macro ทำงานหรือไม่ (diable หรือ enable macro)ใน Microsoft Office 2000 ถ้าต้องการปรับเปลี่ยน Security ของ Macro ให้คลิกที่ Tools เลือกคำสั่ง Macro > Security… ซึ่งจะพบว่ามีอยู่ 3 ระดับ ดังนี้High ถ้าเลือกระดับนี้ Macro ที่ได้ผ่านการรับรองเท่านั้นที่จะยอมให้ทำงานได้ Macro อื่น ๆ จะไม่สามารถทำงานได้Medium ถ้าเลือกระดับนี้ ผู้ใช้งานจะต้องเป็นคนกำหนดเองว่าจะยอมให้ macro ทำงานหรือไม่Low ถ้าเลือกระดับนี้ จะเป็นการยอมให้ macro ทำงานได้ทันทีที่มีการเปิดแฟ้มนั้น ๆ ซึ่งเป็นระดับที่ไม่ปลอดภัยในเรื่องการป้องกัน virusในกรณีที่มีการสร้าง macro ไว้ใช้งาน อาจจะเลือก Security ระดับ Medium และก่อนจะเปิดแฟ้มที่มี macro ควรจะให้แน่ใจว่ามาจากแหล่งที่เชื่อถือได้

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

5 คำสั่งภาษาซี

1.ฟังก์ชันรับข้อมูล scanf()
ความหมาย เป็นฟังก์ชันที่รับค่าจากอุปกรณ์นำเข้ามาตรฐาน และนำค่าที่ได้เก็บไว้ในตัวแปรในโปรแกรม ฟังก์ชันรับข้อมูลโดยกำหนดรูปแบบ ฟังก์ชันรับข้อมูลโดยกำหนดรูปแบบนั้นได้แก่ ฟังก์ชัน scanf() ฟังก์ชัน scanf() เป็นฟังก์ชันที่รับข้อมูลจากแป้นพิมพ์เข้ามาเก็บไว้ในตัวแปร โดยตัวแปรเหล่านี้ต้องเป็นพอยน์เตอร์ที่ชี้ไปยังข้อมูล ที่มีชนิดสอดคล้องกับรูปแบบการรับข้อมูลที่ได้กำหนดไว้ในฟังก์ชัน scanf() การรับข้อมูลของฟังก์ชัน scanf () นี้เป็นการอ่านจากอินพุตบัฟเฟอร์ (Input buffer) ซึ่งต้องเคาะปุ่ม Enter เพื่อบอกการสิ้นสุดของข้อมูล และค่าที่ส่งกลับมายังฟังก์ชัน scanf () จะมีค่าเท่ากับจำนวนข้อมูลที่ฟังก์ชันนี้รับได้ การรับข้อมูลจะต้องใช้เครื่องหมาย & นำหน้าตัวแปร ยกเว้นตัวแปรที่เป็นตำแหน่งที่อยู่ เช่น ตัวแปรสตริง หรือตัวแปรชุด ฟังก์ชัน scanf () นี้ถูกนิยามในแฟ้ม stdio.h มีรูปแบบดังนี้รูปแบบคำสั่ง
รูปแบบ scanf (control,argument-list) ;
argument-list
หมายถึง ตำแหน่งที่อยู่ของตัวแปรที่จะรับค่าจากแป้นพิมพ์ ถ้ามีมากกว่า 1 ค่าจะต้องแยกด้วยเครื่องหมายคอมม่า ( , )
control
หมายถึง รูปแบบที่ใช้ในการรับข้อมูล ซึ่งจะต้องเขียนภายใต้เครื่องหมายคำพูด (" ") และมีรูปแบบชนิดข้อมูลที่รับ โดยใช้สัญลักษณ์ดังตารางที่5.2 และแต่ละสัญลักษณ์จะต้องมีเครื่องหมาย % นำหน้า


รูปแบบการพิมพ์

เครื่องหมาย
ความหมาย
%d
พิมพ์ด้วยตัวเลขฐานสิบ
%f
พิมพ์ตัวเลขมีจุดทศนิยม
%c
พิมพ์ด้วยตัวอักษรตัวเดียว
%s
พิมพ์ด้วยข้อความ
%u
พิมพ์ด้วยตัวเลขไม่คิดเครื่องหมาย
ตัวอย่างคำสั่งscanf ("LKS isLumpang %s School",name);อธิบายตัวอย่างคำสั่งคำสั่ง scanf จะรับค่าจากแป้นพิมพ์ โดยค่าที่ได้จะเก็บไว้ในตัวแปร nameสังเกตว่าจะไม่มีผลลัพธ์ปรากฏบนจอภาพ เนื่องจากฟังก์ชัน scanf เป็นเพียงเก็บค่าไว้ในตัวแปรเท่านั้นและจะนำตัวแปร name ไปใช้งานอย่างไรนั้น ขึ้นอยู่กับนักเขียนโปรแกรมอีกที 1


2.ฟังก์ชัน gets
ฟังก์ชัน gets() ใช้สำหรับข้อมูลชนิดสตริงก์หรือข้อความซึ่งป้อนทางแป้นพิมพ์โดยมีรูปแบบดังนี้
gets(str);
เมื่อโปรแกรมทำงานถึงคำสั่งนี้จะหยุดเพื่อให้ป้อนข้อความ เมื่อป้อนเสร็จแล้วกด Enter ข้อความทั้งหมดจะถูกเก็บไว้ในอาร์เรย์สตริงก์ str โดย carriage return ( จากการกด Enter) จะแทนด้วยสตริงก์ศูนย์ดังได้กล่าว ฟังก์ชัน gets() จะทำให้เคอร์เซอร์ขึ้นบรรทัดใหม่หลังจากกด Enter และกำหนดในไฟล์ stdio.h
ตัวอย่าง โปรแกรมที่ 13
#include”stdio.h”
main()
{
char message[50];
printf(“ Enter a message(less than 49 characters)\n”);
gets(message);
printf(“ The message you entered is %s\n”,message);


3.ฟังก์ชัน getche() และ getch()
ฟังก์ชัน getche() และ getch() มีรูปแบบดังนี้
ch = getche();
ch = getch();
ฟังก์ชัน getche() จะรับตัวอักษร 1 ตัวที่ป้อนทางแป้นพิมพ์ และจะแสดงตัวอักษรบนจอภาพ เมื่อป้อนข้อมูลเสร็จไม่ต้องกด Enter และเคอร์เซอร์จะไม่ขึ้นบรรทัดใหม่
ฟังก์ชัน getch() จะคล้ายกับฟังก์ชัน getche() ต่างกันตรงที่จะไม่แสดงตัวอักษรขณะป้อนข้อมูล
ฟังก์ชัน getche() และ getch() กำหนดในไฟล์ conio.h ดังนั้นจะต้องระบไฟล์ดังกล่าวในโปรแกรม

ตัวอย่าง โปรแกรมที่ 11
#include”stdio.h”
#include”conio.h”
main()
{
char ch;
printf(“ Type one character “);
ch = getche();
printf(“\n”);
printf(“ The character you typed is “);
putchar(ch);
}


4.ฟังก์ชัน getchar()
ฟังก์ชัน getchar() ใช้สำหรับป้อนตัวอักษรผ่านทางแป้นพิมพ์โดยจะรับตัวอักษรเพียง 1 ตัวเท่านั้น และแสดงตัวอักษรบนจอภาพ
ch = getchar();
เมื่อโปรแกรมทำงานถึงคำสั่งนี้จะหยุดเพื่อให้ป้อนตัวอักษร 1 ตัว หลังจากนั้นกด Enter ตัวอักษรที่ป้อนจะถูกเก็บไว้ในตัวแปร ch ซึ่งเป็นชนิดตัวอักษรและเคอร์เซอร์จะขึ้นบรรทัดใหม่ ฟังก์ชัน getchar() กำหนดในไฟล์ stdio.h เช่นเดียวกับฟังก์ชัน scanf()
ตัวอย่าง โปรแกรมที่ 9
#include”stdio.h”
main()
{
char ch;
printf(“ Type one character “);
ch = getchar();
printf(“ The character you typed is %c\n”,ch);
}


5.ใช้คำสั่ง Print
ได้รับเมล์ สอบถามปัญหาเกี่ยวกับเรื่องคำสั่งในการแสดงผลบนจอ LCD ที่ต้องการแสดงค่าที่เป็นตัวแปร int ไอ้ผมจึงลองหาข้อมูลดู เจอครับ เจอจนได้ โดยเราสามารถใช้คำสั่ง printf ได้ จริงๆ แล้วก็ไม่ได้ใช้แทนหรอกครับ เป็นการรวมกันมากกว่าใช้ความสามารถของ printf เพื่อให้สะดวกในการแสดงผลบนจอ lcd ลองดูตัวอย่างของทั้งสอง code นี้ จะให้ผลลัพธ์เหมือนกันทั้งสอง code คือแสดงผล n = 1 ถึง n = 9 วนไปเรื่อยๆ
Syntax:
printf (string)
or
printf (cstring, values...)
}}--> }}--> or
printf (fname, cstring, values...)
fprintf (stream, cstring, values...)รายละเอียดของตัวแปรที่สามารถแสดงผลได้
C
Character
S
String or character
U
Unsigned int
x
Hex int (lower case output)
X
Hex int (upper case output)
D
Signed int
e
Float in exp format
f
Float
Lx
Hex long int (lower case)
LX
Hex long int (upper case)
lu
unsigned decimal long
ld
signed decimal long
%
Just a %
#include <16f877.h>#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP#use delay(clock=20000000)#define use_portb_lcd#include void main() { int count;lcd_init(); while(1){ for(count=0;count<=9;count++){ lcd_putc("fn = "); lcd_putc(count+'0'); delay_ms(1000); } };}ตัวอย่างนี้ใช้ lcd_putc เท่านั้น ข้อดีคือใช้หน่วยความจำน้อย #include <16f877.h>#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP#use delay(clock=20000000)#define use_portb_lcd#include void main() { int count;lcd_init(); while(1){ for(count=0;count<=9;count++){ printf(lcd_putc,"fn = %u",count); delay_ms(1000); } };}แบบนี้จะใช้หน่วยความจำมากกว่าหน่อยครับ แต่สะดวกดี เอ้าไปอ่านรายละเอียดเพิ่มเติมกันที่คำสั่ง print เอาเองละกัน

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

คำสั่งภาษาC
C is case Sensitive. หมายความถึง ว่าในภาษา C นั้น อักษรตัวใหญ่ กับตัวเล็ก มีความหมายที่แตกต่างกัน คือ เราสามารถใช้ A เป็นตัวแปร ซึ่งจะเป็นตัวแปรคนละตัวกับ aEvery Statement is definited by a semicolon หมายความว่าทุกข้อความที่เป็นคำสั่งในภาษา C นั้นจะลงท้ายด้วยเครื่องหมาย semicolon (;)ตัวอย่างของโปรแกรม#include/* This is my first program. */main(){ clrscr(); printf("Hello,world \n"); printf("Press any key to stop \n"); getch();} /*end of main*/จากตัวอย่างข้างต้นเราสามารถอธิบายได้หลายอย่าง ให้สังเกต ณ บรรทัดแรกที่เขียนว่า #include บรรทัดนี้กำลังจะบอกเราว่าให้เรานั้นไปเอาไฟล์ที่มีสกุล .h นั้นมาเป็นส่วนหนึ่งของโปรแกรมเรา ซึ่งส่วนนี้ในทุกโปรแกรมจะต้องมี ส่วนไฟล์ที่เราไปเอามานั้นคือ header file ที่มีชื่อว่า stdio.h ถ้าจะจำกันให้ง่ายนั้นมันย่อมาจาก standard Input Output คือเป็นไฟล์ที่ใช้จัดการกับการ รับค่า และ แสดงค่าของโปรแกรม จากโครงสร้างในส่วนต้นนี้คือก่อนที่จะถึงตรงส่วนของคำว่า main() เราจะเรียกส่วนนี้ว่า Preprocessor บรรทัดถัดมาเขียนว่า /*........*/ ในส่วนนี้เราเรียกว่าส่วนของการ comment คือให้เราเขียนข้อความอะไรก็ได้ลงไปซึ่ง อาจจะเป็นการอธิบายโปรแกรมเป็นต้น ในที่นี้เราเขียนว่า This is my first program คือเป็นการบอกว่านี่คือโปรแกรมแรกของฉัน บรรทัดถัดมาเขียนว่า main() ข้อความนี้เขียนเพื่อบอกให้รู้ว่าหลังจากคำนี้จะมีเครื่องหมาย { และจะจบด้วยเครื่องหมาย } ข้อความหรือคำสั่งที่อยู่ระหว่างเครื่องหมาย { และ } ทั้งหมดนั้นเป็นคำสั่งที่ใช้ในส่วนของ main โปรแกรม ในทุกโปรแกรมจะต้องมีส่วนของ main ปรากฎอยู่เพราะเมื่อเราสั่ง compile โปรแกรม ตัว compile จะทำการวิ่งไปหา main ทุกครั้งเสมอ C a collection of functions one of which must be main() function คำกล่าวนี้บอกเราว่า การโปรแกรม C ประกอบไปด้วย function ซึ่ง function หนึ่งที่จะต้องมี ก็คือ ฟังก์ชัน main() ตอนนี้เราได้เข้ามาสู่ main() เรียบร้อยแล้ว บรรทัดแรกใน main function คือ clrscr(); สังเกตได้ว่าข้อความนี้จบลงด้วย เครื่องหมาย semicolon แสดงว่าข้อความนี้เป็นคำสั่ง และขอบอกไว้เลยว่าคำสั่ง clrscr(); นี้คือ คำสั่ง clear screen นั่นเองคือ เมื่อ โปรแกรมได้ run มาถึงส่วนนี้และได้ทำคำสั่งนี้หน้าจอที่ปรากฎจะถูก clear เพื่อรอทำคำสั่งต่อไป คำสั่งถัดมาคือ print("....ข้อความ..... \n"); ความจริงแล้วคำสั่ง printf(อ่านว่า พริ้นซ์-เอฟ) มีอยู่หลายรูปแบบแต่เดี๋ยวเราค่อยๆดู กันไปก่อนในแบบแรกนี้คือว่า คำสั่งนี้จะทำการพิ่มพ์ ข้อความที่ปรากฎอยู่ระหว่างเครื่องหมาย " และ " ออกมาบนหน้าจอในที่นี้จะ พิมพ์คำว่า Hello,world ปรากฎขึ้นบนหน้าจอ ส่วนเครื่องหมาย \n ที่ปรากฎอยู่นั่นเป็นเครื่องหมาย tab ซึ่งมีอยู่หลายรูปแบบ เช่นเดียวกันในที่นี้ \n หมายความว่า หลังจากพิมพ์ข้อความแล้วให้ cursor ย้ายไปขึ้นบรรทัดใหม่ บรรทัดถัดมาก็จะมีความหมายเช่นเดียวกับบรรทัดแรกคือ จะพิมพ์คำว่า Press any key to stop จากนั้น cursor ก็จะวิ่งไปขึ้นบรรทัดใหม่เพราะตัว tab \n ที่ผ่านมาคือคำสั่ง printf จะเห็นได้ว่าเป็นคำสั่งประเภท output คือสั่งพิมพ์ออกทางหน้าจอ ต่อมาจะมีคำสั่ง Input บ้าง นี่คือ คำสั่ง getch(); เป็นคำสั่งสำหรับรับค่าจากทาง keyboard เข้ามา ซึ่งจริงๆแล้วรูปแบบของคำสั่งก็มีหลายรูปแบบเช่นกัน แต่ในที่นี้ ที่เราจะต้องใช้คำสั่งนี้ก็เพื่อว่า เมื่อเราพิมพ์ข้อความทั้งสองข้างต้นไปแล้วให้ผู้ใช้ กดปุ่มใดๆก็ได้เพื่อจบโปรแกรม บรรทัดต่อมามีเครื่องหมาย } เป็นการแสดงว่าจบโปรแกรมในส่วนของ main ส่วนข้อความ /* end of main */ ที่ปรากฎก็คือ comment เช่นเดียวกับที่ได้อธิบายไปข้างต้นแล้ว เราจะสังเกตได้ว่า เมื่อมีเครื่องหมาย ปีกกาเปิด ก็ต้องมีเครื่องหมาย ปีกกาปิด เสมอ และอยู่กันเป็นคู่ๆด้วย ขอให้ทุกคนลองดัดแปลงโปรแกรมข้างต้นและสังเกตความเปลี่ยนแปลงที่เกิดขึ้นเช่น อาจจะเปลี่ยนข้อความในระหว่างเครื่องหมาย " และ " ใน printf หรือลองตัดเครื่องหมาย \n ออก หรือ ลองเปลี่ยน \n เป็น \t หรือ \r ดูว่าจะเกิดอะไรขึ้น หรือลองลบคำสั่ง getch(); ทิ้งไป แล้วดูว่าจะเกิดอะไรขึ้นชนิดของข้อมูล (Data types)ชนิดของข้อมูลประกอบไปด้วยcharacter (char) ใช้ 1 byte บน Dos มีค่า -128 ถึง127 นิยมใช้เก็บตัวอักษร 1 ตัวอักษรinteger (int) ใช้ 2 byte มีค่า -32768 ถึง 32767 และยังมี long ซึ่งคล้าย integer แต่เก็บด้วย ช่วงตัวเลขที่ยาวกว่าจึงกินเนื้อที่ ถึง 4 bytefloat ใช้ 2 byte ใช้เก็บตัวเลขทศนิยม และยังมี double ซึ่งคล้าย float แต่เก็บด้วยช่วงตัวเลขที่ยาวกว่าจึงกินเนื้อที่ถึง 4 byteในภาษา C จะไม่มีชนิดข้อมูลเป็น string แต่จะใช้ สายของอักษร หรือ Array ของ Char แทน ความจริงแล้วชนิดของข้อมูลยังสามารถจำแนกไปได้อีกมาก แต่ในที่นี้ขอแนะนำเพียงเท่านี้ก่อน ก็เพียงพอDerive Data Type- Array - recore [structure] ที่กล่าวมาข้างต้นว่าถ้าพบข้อความ เช่น "This is a book" ในการโปรแกรมทั้งข้อความนี้เราเรียกว่า string และเนื่องจากในภาษา C ไม่มีตัวแปร String ทำให้เราต้องใช้ Array มาจัดการ นั่นคือเมื่อ C มองเห็น string จะจอง พื้นที่ในหน่วยความจำเป็น Array ของ Character บางคนอาจจะสงสัยว่าการจองพื้นที่ในหน่วยความจำของ Array เป็นอย่างไร ทำไมต้องจอง ก็ขอบอกว่า เวลาที่เราประกาศตัวแปรชนิดใดก็ตาม C ก็จะทำการไปหาเนื้อที่ในหน่วยความจำ ขนาดเท่าๆ กับ ชนิดข้อมูลที่เรากำหนดเอาไว้ ซึ่ง ถ้าเราประกาศตัวแปร 2 ตัว ไม่จำเป็นว่าตัวแปรสองตัวนี้จะถูกจองตรงเนื้อที่ที่มันติดกัน แต่ ถ้าเราจองเนื้อที่เป็นแบบ array นั่นหมายความถึงว่า ทุกๆ สมาชิกที่เป็นสมาชิกของ array จะถูกจองเนื้อที่ติดๆกันไป ตามขนาดความยาวของ array นั้น นั่นเอง ถ้าใครยังไม่เข้าใจก็อย่าเพิ่งตกใจเพราะเดี๋ยวจะมีการพูดถึง array อีกในตอนหลังตอนนี้ มาดูก่อนว่า ถ้าเราจะเก็บ string ที่มีข้อความว่า APICHAT จะต้องเก็บอย่างไรAPICHATNULL CharacterVariable declarationในภาษา C หากต้องการใช้ตัวแปร จะต้องทำการประกาศตัวแปรไว้ที่ส่วนบนก่อนที่จะถึงบรรทัดที่เป็นประโยคคำสั่งการประกาศตัวแปรจะเป็นการบอก compiler ว่าตัวแปรของเรานั้นเป็นตัวแปรชนิดใดDatatypeKeywordcharacterintegerfloatdoublecharintfloatdouble รูปแบบของการประกาศคือKeyword list of variable ;ตัวอย่างเช่น เราจะประกาศตัวแปรชื่อ chr1 และ chr2 เป็นตัวแปรชนิด Character เราจะใช้ว่าchar chr1 , chr2 ; ข้อสังเกต เราจะเห็นได้ว่าหลังการประกาศตัวแปรจะมีเครื่องหมาย ; แสดงว่าการประกาศตัวแปรก็เป็น C Statement (คำสั่ง)เช่นกันทดลองสังเกตตัวอย่างต่อไปนี้#include /* my second program */main(){ int First , Second , Sum; /* variable declaration */ First = 10 ; Second = 20 ; Sum = First + Second ; printf( " The sum of %d and %d is %d " , First , Second , Sum );} ดูโปรแกรมแล้วพบว่านี่คือโปรแกรมที่จะทำการบวกเลข 2 จำนวนคือ 10 และ 20 โดย การเก็บค่า 10 เอาไว้ในตัวแปรชื่อ First และเก็บค่า 20 ไว้ในตัวแปร Second จากนั้นก็ทำการบวกทั้งสองค่าโดยเก็บผลลัพธ์ที่ได้ไว้ในตัวแปรที่ชื่อว่า Sum จากนั้นทำการ แสดงค่าของทั้ง 3 ตัวแปรออกมาทางจอภาพอธิบายโปรแกรมโดยละเอียด จะได้ว่า ที่บรรทัด int First , Second , Sum ; นั้นเราได้สั่งให้มีการประกาศตัวแปรชนิด integer 3 ตัวคือ First , Second และ Sumบรรทัดถัดมา คือ First = 10 ; เป็นการกำหนดค่า จำนวนเต็ม 10 ให้กับตัวแปรที่เป็นจำนวนเต็ม (integer) ส่วนนี้สำคัญคือ เรากำหนดตัวแปรเป็น integer นั่นก็คือ ตัวแปรชนิดนี้จะเก็บเฉพาะค่าที่เป็นจำนวนเต็มเท่านั้น หากเราใส่ค่า 10.2 ให้กับตัวแปร ตัวแปรนั้นก็ยังคงเก็บเลขจำนวนเต็มอยู่เสมอบรรทัดถัดมา คือ Second = 20 ; ก็คือการกำหนดค่า 20 ให้กับตัวแปร Secondบรรทัดถัดมา คือ Sum = First + Second ; คือการนำค่าของ 2 ตัวแปรมาบอกกันและเก็บไว้ที่ตัวแปร Sumบรรทัดต่อมาคือ printf( " The sum of %d and %d is %d " , First , Second , Sum ); จะต้องอธิบายกันยาวหน่อยดังนี้ฟังก์ชัน printf( ) ฟังก์ชัน printf( ) มีรูปแบบดังนี้printf ( " control string " , variable list ); โดย control string อาจจะเป็นตัวอักษร ข้อความ หรือ ตัวกำหนดชนิดข้อมูล (Specifier) ซึ่งใช้กำหนดชนิดข้อมูลที่จะพิมพ์ ตัวกำหนดข้อมูลที่ควรทราบมีดังนี้ตัวกำหนดชนิดข้อมูลความหมาย%c%d%f%lf %s%%แทนตัวอักษรแทนเลขจำนวนเต็ม แทนเลขทศนิยม ( float )แทนเลขทศนิยม (double)แทนสตริงก์แทนเครื่องหมาย %ส่วน variable list ก็คือ list ของตัวแปร จากตัวอย่างprintf( " The sum of %d and %d is %d " , First , Second , Sum );พบว่า เรามี ตัวกำหนดชนิดข้อมูลคือ %d ซึ่งแทนชนิดข้อมูลที่เราจะพิมพ์คือ integer ซึ่ง %d ตัวแรกจะใช้แทนค่าของ First ตัวที่สองจะใช้แทนค่าของ Second ตัวที่สามจะใช้แทนค่าของ Sumจากโปรแกรมข้างต้นผล run ที่ออกมาจะปรากฎดังนี้The sum of 10 and 20 is 30นอกจากนี้เรายังพบว่าเรายังสามารถกำหนดลักษณะการพิมพ์ได้ดังต่อไปนี้#include main(){ int a; float b ; a = 50 ; b = 10.583 ; printf ( " a = %d \n " , a ) ; printf ( " b = %f \n " , b ) ; printf ( " a = %05d \n " , a ); printf ( " b = %10.4f \n " , b ); printf ( " b = % -10.4f \n " , b ); } พบว่า ผล run ที่ได้คือ a = 50 b = 10.583000 พบว่าแสดงทศนิยม 6 หลัก เป็นปกติa = 00050 พบว่า a มีความยาว 5 ตำแหน่ง นับจากซ้ายb = ___10.5830 พบว่า เราสั่งให้ %10.4 คือ การสั่งให้มีความยาวทั้งหมด 10 ตำแหน่ง รวมด้วยการมีทศนิยม 4 ตำแหน่งb = 10.5830 คล้ายกับบรรทัดก่อนหน้าแต่เราใส่เครื่องหมาย - เพื่อให้มันพิมพ์ชิดซ้ายสังเกตได้ว่าในส่วน control string นี้จะลงท้ายด้วย \n เขาเรียกว่าเป็น backslash character constant ซึ่งเป็นการกำหนดให้ขึ้นบรรทัดใหม่ แต่ยังมีอีกหลายรูปแบบที่น่าสนใจดังนี้สัญลักษณ์ความหมาย\b\f\n\r\t\"\'\o\ \\v\a\N\XNbackspaceform feednewlinecarriage returnhorizontal tabdouble quotesingle quotenullblackslashvertical tabbelloctal number (N=octal constant)hexadecimal constant (N = hexadecimal constant)ขอบอกว่าที่ใช้อยู่จริงๆ ก็มีแค่ \n \t \o เท่านั้นส่วนอื่นๆ ถ้าต้องการใช้จริงๆ ค่อยมาเปิดตำราอ่านเอาเองนะเมื่อมาถึงจุดนี้สรุปการใช้คำสั่ง printf อย่างคร่าวๆ คือ1. ถ้าต้องการแค่พิมพ์ข้อความขึ้นบนหน้าจอหรือที่เรียกว่า prompt เพื่อให้ผู้ใช้รู้ว่าจะต้องเติมข้อมูลอะไรลงไป หรือเพียงต้องการพิมพ์ Title ของโปรแกรมที่เราเขียนเท่านั้น เช่น เราต้องการเขียนว่า First Program Version 1.1 เราก็จะใช้ คำสั่ง printf("First Program Version 1.1"); หรือ เราต้องการให้ผู้ใช้ใส่ชื่อของผู้ใช้เองลงในโปรแกรม ก็สั่ง printf("Please Enter your Name : "); ซึ่งเหตุผลที่จะต้องมีข้อความนี้เพราะ แน่นอนว่าเมื่อเรา Run โปรแกรมขึ้นมาแล้วปรากฎว่าไม่มีข้อความนี้ แสดงอยู่ แล้วผู้ใช้จะไปทราบได้อย่างไรว่า จะต้องใส่ชื่อของตนเองลงไป2. ถ้าต้องการพิมพ์ ข้อความ แล้วตามด้วย ค่า ที่เราคำนวณได้ หรือ ค่า ที่เก็บไว้ในตัวแปร นั้นๆ เราสามารถทำได้ง่ายๆ ยกตัวอย่างเช่น เรามีตัวแปร width ที่เก็บค่าความยาว และตัวแปร high ที่เก็บค่าความสูง และเราต้องการสั่งพิมพ์ข้อความที่ว่า "This table is width ........... feet " ตรงส่วนที่เว้นไว้คือ ให้แสดงค่าความกว้างที่เก็บอยู่ในต้วแปรชื่อ width ดังนั้นเราสามารถสั่งได้โดย printf("This table is width %d feet",width); ในคำสั่งนี้จะเห็นได้ว่าประกอบไปด้วย 2 ส่วนคือส่วนสีแดง และส่วนสีน้ำเงิน มาดูในส่วนสีแดง พบว่ามีสัญลักษณ์ %d ซึ่งกล่าวไว้ตั้งแต่ต้นแล้วว่า เป็นการแทนเลขจำนวนเต็ม เมื่อตัว compile มองมาในคำสั่ง และเห็นตัว %d เข้าแล้ว มันจะไปมองหาตัวแปรในส่วนของสีน้ำเงินทันทีเพื่อทำการเอาค่าจากตัวแปรในสีน้ำเงินมาแสดงทับตัว %d ตัวอย่างเช่น int width = 6;printf("This table is width %d feet",width);เมื่อ Run โปรแกรมแล้วจะแสดงข้อความดังนี้ This table is width 6 feetต่อไปถ้าเราต้องการแสดงค่า 2 ค่า เช่น แสดงทั้งความกว้างและความยาวทำได้โดยint width = 6;int high =4;printf("This table is width %d feet and high %d feet",width,high);เมื่อ compile ตัว compile มองเห็น %d ตัวแรกมันก็จะมองไปหาตัวแปรตัวแรกในส่วนที่สอง(ส่วนสีน้ำเงิน)ทันทีนั่นก็คือ width จากนั้นเมื่อมันเห็น %d ตัวที่สอง มันก็จะมองไปหาตัวแปรตัวที่สองในส่วนที่สอง(ส่วนสีน้ำเงิน)นั่นคือ high ในทันทีตัวอย่างต่อไป ถ้าต้องการแสดงค่า พื้นที่ของ โต๊ะตัวนี้นั่นก็คือ กว้าง คูณ ยาว เราสามารถสั่งพิมพ์ได้ดังนี้printf("Area of this table is %d",width*high); ในที่นี้ ส่วนสีน้ำเงินคือ กว้าง*ยาว ถือได้ว่าเป็นค่า 1 ค่า ดังนั้นเมื่อ compiler มองเห็น %d ในส่วนสีแดง ก็จะมองหาค่าค่าแรกในส่วนสีน้ำเงิน นั่นคือ ค่าของ กว้าง*ยาว มาใส่แทน %d ในทันทีโดยคร่าวๆ แล้ว คำสั่ง printf มีการใช้เพียงเท่านี้ แต่ความจริงแล้วยังมีลูกเล่นอีกมากมาย แต่ไม่ขอพูดในที่นี้ถึงเวลานี้เรารู้จักชนิดของตัวแปร รู้จักการแสดงข้อความออกทางหน้าจอเรียบร้อยแล้ว ต่อไปเราจะมาศึกษากันว่าหากต้องการรับค่าจาก keyboard จะต้องทำอย่างไรInput Commandคำสั่งในการ input ที่ใช้ง่ายๆก็คือ คำสั่งscanf(" ตัวกำหนดชนิดข้อมูล",&ตัวแปร);ยกตัวอย่างเช่น ต้องการรับค่า จำนวนเต็ม มาใส่ไว้ในตัวแปรที่ชื่อ number จะสั่งดังนี้ int number;scanf("%d",&number); สำคัญอย่าลืมเครื่องหมาย & และหากรับตัวแปร 2 ตัว โดย รับค่า จำนวนเต็มไว้ในตัวแปรชื่อ num1 และ รับค่า จำนวนจริง ไว้ในตัวแปร num2 ทำได้โดยint num1,num2;scanf("%d %f",&num1,&num2);หากต้องการรับข้อความ Apichat ซึ่งก็คือ 7 character ทำได้โดยchar name[7];scanf("%c",name);สังเกตไหมครับว่าที่คำสั่ง scanf อันหลังนี้ตรงตัวแปร name ทำไมไม่มีเครื่องหมาย & ปรากฎอยู่ นั่นก็เป็นเพราะว่าเราได้ทำการกำหนดตัวแปร name ไว้เป็นตัวแปร array ชนิด character ดังนั้นการที่เราเรียกชื่อตัวแปรที่เป็น array นั่นก็หมายความว่าเราได้ทำการเรียก"ที่อยู่" ของตัวแปรกลุ่มนั้นไว้แล้วจึงไม่จำเป็นต้องใส่เครื่องหมาย & แต่อย่างใด นั่นเป็นการแสดงให้เห็นว่า เมื่อเราเรียกคำสั่ง scanf ตัวคำสั่งนี้จะทำการยัดค่าที่ผู้ใช้ ใส่ให้เก็บไว้ในตัวแปรตามที่อยู่ที่ให้ไว้นั่นคือscanf("%d",&number);ก็เป็นการยัดค่าตัวแปร integer(รู้ได้จาก %d) ไว้ในที่อยู่(&)ของตัวแปรที่ชื่อ number และเรายังรู้อีกว่าโดยปกติการกำหนดค่าให้กับตัวแปรที่เป็น array นั้นจำเป็นจะต้องมีการใส่ index ให้กับ ตัวแปรนั้นเสมอว่า จะเก็บไว้ใน array ช่องใด เช่นสมมติ ตัวแปรชนิด integer ชื่อ num[7] คือตัวแปรที่ชื่อ num ที่มีช่องสมาชิกย่อยทั้งหมด7ช่องด้วยกันโดย ตัวแปร num จะมีโครงสร้างดังนี้num[0]num[1]num[2]num[3]num[4]num[5]num[6]และหากเราต้องการจะกำหนดค่าให้กับตัวแปร num ในแต่ละช่องสามารถทำได้โดย num[0]=10; หรือ num[1]=20; เป็นต้น นั่นคือการเขียนชื่อตัวแปรแล้วตามด้วย index ของตัวแปรนั้นว่าต้องการจะกำหนดค่า ของเราไว้ในช่องใดของ array num นั้น และที่เราต้องรู้อีกอย่างก็คือ หากเราเรียกชื่อตัวแปร array เฉยๆ โดยไม่ได้ทำการใส่ index ให้กับตัวแปรนั้นเช่นเราเรียก num นั่นจะกลายเป็นการชี้ไปยังที่อยู่ของตัวแปร num ที่อยู่ใน หน่วยความจำของเครื่อง ตอนนี้อยากให้มองหน่วยความจำ เป็นช่องๆที่เรียงติดกันยาวมาก และเดิมทีการที่เราประกาศตัวแปร ก็คือการที่ตัวชี้ชี้ลงไปยังช่องๆในหน่วยความจำนั้นอย่างสุ่มคือ เราก็ไม่รู้ว่าเมื่อเราประกาศตัวแปรแล้วมันจะไปชี้ที่ใดของหน่วยความจำมันจะทำการจองจำนวนช่องตามชนิดของตัวแปร เช่นถ้าประกาศตัวแปรชนิด integer มันอาจจะจองสัก 2 ช่องที่ติดกัน ถ้าประกาศตัวแปร double มันอาจจะจองสัก 4 ช่องติดกันเป็นต้น และหากเราจองตัวแปรชนิด array ที่เป็น integer ตามข้างต้น มันก็จะจองทั้งหมด 7 ช่องติดกัน โดยแต่ละช่องก็จะมีคุณสมบัติเป็นช่องของ integer ซึ่งอาจจะจอง2ช่อง ใน num[0] จนถึง num[6]โอ๋ย ! เผลอพูดเรื่อง array มาซะยืดยาว บางคนอาจเข้าใจบางคนอาจจะไม่เข้าใจ แต่จริงๆ แล้วในตอนนี้อยากจะบอกเพียงว่า หากเรียกชื่อตัวแปรที่เป็น array เฉยๆ โดยไม่ใส่ index ให้มันมันก็จะทำการชี้ไปที่ที่อยู่ของตัวแปรนั้นนั่นเอง ที่อยากจะบอก. จากนั้นจึงเป็นเหตุผลว่าทำไมคำสั่ง scanf ที่รับตัวแปรที่เป็น array ของ character เราจึงไม่ต้องใส่เครื่องหมาย & อยากจะบอกแค่นี้แหละ แต่ตอนนี้ก็ต้องถือว่าเรามีความรู้เรื่อง array กันบ้างแล้วไม่มากก็น้อย ขอย้ำว่าเป็นเฉพาะตอนรับ array ของ character(หรือในความหมายคือการรับ string นั่นแหละ เนื่องจากในภาษาซีไม่มีตัวแปรชนิด string จึงจำเป็นต้องใช้ตัวแปรที่เป็น array ของ character มาแทน ) เท่านั้นนะ ที่ไม่ต้องใส่ & หน้าตัวแปรในคำสั่ง scanf อย่าเข้าใจผิดหากเป็นตัวแปรชนิดอื่นก็ทำไปตามกฎซะนะคำสั่งที่ใช้ในการรับค่าจากแป้นพิมพ์คำสั่งต่อไป ก็ขอแนะนำคำสั่ง gets( ) เป็นคำสั่งที่ใช้รับค่า string จากแป้นพิมพ์ คำสั่งนี้อาจารย์สุรพล มักจะบังคับให้เด็กนักเรียนใช้มากกว่าคำสั่ง scanf เพราะท่านบอกว่าคำสั่งนี้มันปลอดภัยดี คือรับอะไรมามันก็จะเป็นการรับ string ทั้งสิ้น ไม่เหมือนกับคำสั่ง scanf ซึ่งจะต้องกำหนดชนิดตัวแปรที่รับเช่นต้องกำหนดว่ารับ %d ให้กับตัวแปรที่เป็น integer อาจารย์ท่านว่า หากคนที่ใช้โปรแกรมมันอุตริว่า เขาให้เต็มตัวเลข มันไปเติมเป็นตัวหนังสือซะ เดี๋ยวโปรแกรมมันจะผิดพลาดกันไปหมด แกเลยแนะนำให้ใช้คำสั่ง gets( ) ในการรับค่าแทน แล้วอยากจะแปลงค่า string ที่ได้ไปเป็นตัวแปรชนิดใด ค่อยใช้คำสั่งแปลงกัน เช่นเมื่อรับ string มาแล้วต้องการแปลงมันให้เป็น integer ก็สามารถใช้คำสั่ง atoi( ) ได้ จะขอยกตัวอย่างดังนี้#include #include int x,y;char s[80];main(){ printf(" Enter first integer : "); gets(s); x=atoi(s); printf(" Enter second integer: "); gets(s); y=atoi(s); printf("the sum is %d",x+y);} ดูตัวอย่างนี้ให้ดี มีตัวแปรที่เป็นจำนวนเต็ม x และ y และมีตัวแปร character s ซึ่งเป็น array ของ character จากนั้นมีการเขียนข้อความให้ ผู้ใช้ใส่ค่าจำนวนเต็ม แต่ตอนรับค่านี่สิ ดันใช้คำสั่ง gets(s) ก็คือ รับค่าที่ผู้ใช้ใส่มาให้อยู่ในรูปของ string หรือ array ของ character ซะ จากนั้นค่อยใช้คำสั่ง atoi(s) เพื่อแปลงค่า string s ให้กลายเป็นค่าจำนวนเต็ม เก็บไว้ที่ตัวแปร x ซึ่งเป็นตัวแปรจำนวนเต็ม และ y ตามลำดับ จากนั้นจึงทำการพิมพ์ค่า ผลบวกของทั้งสองตัวแปรออกมาและนอกจากจะมีฟังก์ชัน atoi เพื่อแปลง string ไปเป็น integer แล้ว ยังมี atof เพื่อทำการแปลง string ไปเป็น float อีกด้วย ตัวชื่อฟังก์ชันก็สื่อความหมายให้เราเข้าใจดีอยู่แล้ว เช่น atoi ตัว a อาจหมายถึง alphabet หรือตัวอักษร to ก็อาจหมายถึง แปลงไปยัง ส่วน i ก็หมายถึง integer ดังนั้น atoi ก็สื่อความหมายชัดเจนดี ถ้าจะแปลงไปเป็น float ก็กลายเป็น atof แต่ที่สำคัญคือ ทั้ง atoi และ atof นั้นการที่เราจะเรียกใช้ได้ต้องทำการ include ด้วยเพราะทั้ง 2 ฟังก์ชันนั้นอยู่ใน library นี้นอกจากคำสั่ง scanf , gets แล้วยังมีอีกหลายคำสั่งมากมายเช่น getchar( ),getche( ), getch( ) เป็นต้นซึ่งทั้ง 3 อันหลังนี้ก็มีคุณสมบัติแตกต่างกัน คือgetchar( ) จะรับตัวอักษรทางแป้นพิมพ์โดยจะรับเพียง 1 ตัวเท่านั้นและมีการแสดงตัวอักษรนั้นทางจอภาพด้วยgetche( ) จะรับตัวอักษร 1 ตัวจากทางแป้นพิมพ์และจะแสดงตัวอักษรนั้นทางจอภาพด้วยเช่นกันแต่เมื่อป้อนเสร็จไม่ต้องกด Enter ซึ่งจะคล้ายกับ getchar( ) แต่ getchar( ) นั้นเมื่อป้อนตัวอักษรเสร็จแล้วจะต้องกด Enter ด้วยเพื่อทำงานต่อไปgetch( ) จะคล้ายกับ getche( ) จะแตกต่างตรงที่จะไม่แสดงตัวอักษรที่รับทางแป้นพิมพ์ออกทางจอภาพ.วิธีใช้ของทั้ง 3 ฟังก์ชันคล้ายกันก็คือ ประกาศตัวแปร char สมมติชื่อ ch จากนั้นก็เรียกฟังก์ชันตามปกติดังนี้#include main(){char ch; printf("Input one character"); ch=getchar( ); หรือ ch=getche( ); หรือออาจจะเป็น ch=getch( ); printf("The character you type is %c \n",ch);} ขอให้ลองไปใช้กันดูโดยลองเปลี่ยนบรรทัดที่ 6 ของโปรแกรมข้างบนนี้เป็นทั้ง 3 แบบดูนะ อย่าเขียนทั้ง 3 แบบพร้อมๆกันหละเลือกเอาอันใดอันหนึ่งเท่านั้นนะOK. ขอสรุปช่วงนี้หน่อย ตอนนี้เรารู้จักวิธี แสดงข้อมูล และวิธีรับข้อมูล และได้รู้จัก array บ้างนิดหน่อยแล้ว ขอให้จดจำและสังเกตวิธีการใช้ อย่างแม่นยำและทดลองเขียนโปรแกรมเองให้มากๆ จึงจะจำและสามารถใช้ได้คล่อง จากประสบการณ์ที่เคยเป็น Teacher Assistance วิชา ที่มีการโปรแกรมภาษา C มาแล้วพบว่า ผู้ที่เรียนยังสับสนกับการใช้คำสั่ง printf ตรงที่ว่าจะต้องใส่ตัวแปรในคำสั่งด้วยหรือเปล่า หรือว่า ลืมใส่ %d %c เมื่อจำเป็นต้องใส่ อะไรทำนองเนี้ย ลองทบทวนดูนะข้างต้นเขียนไว้ละเอียดแล้วในระดับนึง ส่วนคำสั่ง scanf ก็จะมีปัญหากันมากเลย ตรงที่ลืมเครื่องหมาย & บ้าง หรือไปใส่เครื่องหมาย & ตรงที่ที่ไม่ควรใส่เช่นตรง array ของ character เนี่ยแหละที่เป็นปัญหาหากเราจะรับ stringนStructure Programmingอยากจะบอกว่าในส่วนนี้เราจะทำการเรียนรู้เกี่ยวกับโครงสร้างของการโปรแกรมที่มีลักษณะเป็นแบบ sequential lines นั่นคือ compiler จะทำงานโดยการเริ่มไล่จากบรรทัดบนสุดแล้วทำงานไล่ลงมาเป็นบรรทัดๆ ไปเรื่อยๆจนจบโปรแกรม ซึ่งจะต่างจากการทำงานของการโปรแกรมแบบ OOP (object oriented programming) ซึ่งในที่นี้เราจะไม่พูดถึงในการโปรแกรมนี้เราจำเป็นจะต้องรู้จัก โครงสร้างของ loop หรือการวนซ้ำก่อน ถามว่าทำไมจะต้องมีการวนซ้ำ ก็เป็นเพราะในการโปรแกรมส่วนใหญ่นั้นการวนซ้ำหรือ loop นี้มีความสำคัญหรือมีส่วนเกี่ยวข้องอยู่มาก เช่นหากเราต้องการจะ ทำการบวกเลขตั้งแต่ 1 ถึง 100 หากเรามานั่งเขียนหรือตั้งตัวแปรแล้วค่อยๆมาบวกกันเป็นคู่ๆ หรือบวกกันทีเดียวในบรรทัดเดียวก็อาจทำได้แต่มันก็ไม่สมควรหากเราต้องการบวกตัวเลขมากกว่า 100 เช่น 1000 เป็นต้นตัวอย่างที่ผิด เรากำหนดให้ n เป็นตัวแปรในการรับค่าคำตอบของการบวกกันของตัวเลข ตั้งแต่ 1 ถึง 100 เราจึงเขียนเป็นว่าn=1+2+3+4+5+6+7+8+9+10+11+12+...+96+97+98+99+100;ในส่วนที่ละไว้นั้น (... ) ในส่วนของการโปรแกรมเราจะต้องเขียนให้หมด ซึ่งถ้าเขียนหมดจริงๆ ก็ตายกันพอดีดังนั้น การวนซ้ำจึงเข้ามามีบทบาทในการทำ ก็เลยจะขออธิบายโครงสร้างก่อนก็แล้วกันคำสั่ง for loopfor(ตัวนับ= i;เงื่อนไขที่จะให้ยังทำงานอยู่ใน loop; การเพิ่มหรือการลดตัวนับ){ statement ;}ก่อนอื่นต้องขออธิบายก่อนว่านี่คือโครงสร้างของ for loop โดยขอให้สังเกตบรรทัดแรกตรงที่มีคำสั่ง for แล้วให้ดูในวงเล็บ ปรากฎว่าตามรูปแบบมาตรฐานนั้น ในส่วนของวงเล็บหลังคำว่า for จะประกอบไปด้วย 3 ส่วน ส่วนแรกก็คือ การกำหนดค่าเริ่มต้นให้กับตัวนับ อาจจะงงว่าตัวนับที่พูดถึงคืออะไร ใน for loop นั้น จำเป็นจะต้องมีตัวนับอยู่ด้วยเสมอ ซึ่งตัวนับนี้ จะเป็นตัวบอกเราว่า loop ของเรานั้นทำการวนซ้ำมาเป็นรอบที่เท่าไรแล้ว และในส่วนแรกนี้เราจำเป็นจะต้องมีการกำหนด ค่าเริ่มต้นให้กับตัวนับก่อน ในส่วนที่สอง เงื่อนไขที่จะให้ยังทำงานอยู่ใน loop นี้ โดยส่วนใหญ่จะเป็นการกำหนดว่าเมื่อตัวนับมีการวนซ้ำ ถึงจำนวนรอบเท่านั้นเท่านี้ก็จะให้หลุดจาก loop ในส่วนที่สาม การเพิ่มหรือการลดตัวนับ ตรงนี้สำคัญ ซึ่งจะเป็นส่วนที่ทำให้ ตัวนับของเรามีการเพิ่มค่าหรือลดค่า ในแต่ละรอบของการวนซ้ำเช่นอาจเพิ่มทีละหนึ่ง หรือ เพิ่มทีละ3 เป็นต้นหรืออาจจะลดทีละ 1 หรือลดทีละ 3 ก็แล้วแต่โปรแกรมจะกำหนด หลังจากวงเล็บที่อยู่หลัง for ก็จะมีเครื่องหมาย ปีกกาเพื่อให้เข้าสู่ส่วนของคำสั่ง ที่จะต้องทำหลังจากบรรทัด for ก็มาถึง statement ซึ่งจะเป็นส่วนที่ให้เราเขียนคำสั่งว่า ในแต่ละรอบนั้น เราจะให้โปรแกรมทำงานอะไร ซึ่งก็อาจมีได้หลายคำสั่ง บรรทัดสุดท้ายก็คือ ปีกกาปิดเพื่อจบโครงสร้าง for loopดูตัวอย่าง การบวกเลขตั้งแต่ 1 ถึง 100#includemain(){ int i,ans; ans=0; for(i=1;i<=100;i++){ ans=ans+i; } printf("answer is %d",ans);} ในที่นี้เราทำการกำหนดให้ตัวแปร i เป็นตัวแปรนับ ส่วน ans เป็นตัวแปรที่ใช้เก็บค่าคำตอบ ในบรรทัด for นั้นไม่มีปัญหาอะไรยกเว้น ที่เราเจอ i++ นั่นก็หมายถึง i+1 นั่นเอง คือ ใน loop นี้เราจะทำการเพิ่มตัวนับ i ไปทีละ 1 สมมตินะครับสมมติ ว่าหากเราต้องการจะ แสดงเฉพาะเลขคี่ที่อยู่ระหว่าง 1 ถึง 100 เราจะทำอย่างไร ดูต่อครับดูตัวอย่าง การแสดงเฉพาะเลขคี่ที่อยู่ในช่วงตั้งแต่ 1 ถึง 100#includemain(){ int i ; for(i=1;i<=100;i=i+2){ printf("Odd number is %d\n",i); }} นั่นคือเราก็วน loop เหมือนเดิมเพียงแต่ในแต่ละรอบนั้นเราทำการเพิ่มค่า i ไปทีละ 2 ซึ่งเดิมค่า i มีค่าเท่ากับ 1 พอ compiler มา check ว่า 1<=100 นั้นจริงไหม ปรากฎว่าจริงก็ให้ทำงานใน loop ต่อ โดยมีการเพิ่มค่า i=i+2 นั่นหมายความว่าตอนนี้ i มีค่าเป็น 1+2 ก็คือ 3 นั่นเอง ในรอบต่อมาเราก็แสดงค่า 3 ทำเช่นนี้ไปเรื่อยๆ เราก็จะได้เฉพาะเลขคี่ 1,3,5,7,...,99สมมตินะครับสมมติ ว่าหากเราต้องการจะ แสดงเฉพาะเลขคู่ที่อยู่ระหว่าง 1 ถึง 100 เราจะทำอย่างไร ดูต่อครับ ดูตัวอย่าง การแสดงเฉพาะเลขคู่ที่อยู่ในช่วงตั้งแต่ 1 ถึง 100#includemain(){ int i ; for(i=2;i<=100;i=i+2){ printf("Odd number is %d\n",i); }} เช่นเคยครับไม่ค่อยแตกต่างอะไรกับการ แสดงเฉพาะเลขคี่ แต่จะต่างกันตรงการเริ่มต้นค่าให้กับตัวนับครับ นั่นคือเราทำการเริ่มต้นค่า ตัวนับด้วย 2 นั่นคือตัวแปร i จะมีค่าเริ่มต้นเป็น 2 ในการวน loop รอบแรกครับจากนั้นก็เหมือนเดิมในแต่ละรอบ ค่า i จะถูกเพิ่มทีละ 2 ครับ ดังนั้นสุดท้ายเราก็จะได้ 2,4,6,8,10,...,100 ไปตามระเบียบและหากเราต้องการจะแสดงเฉพาะเลขคู่นี่แหละแต่ต้องการให้ แสดง ถอยหลัง คือ แสดง 100,98,96,94,...,8,6,4,2 จะทำได้อย่างไรดูตัวอย่าง การแสดงเฉพาะเลขคู่(ถอยหลัง)ที่อยู่ในช่วงตั้งแต่ 1 ถึง 100#includemain(){ int i ; for(i=100;i>=1;i=i-2){ printf("Odd number is %d\n",i); }}นั่นคือในบรรทัด for เรากำหนดค่าเริ่มต้นเป็น 100 ที่สำคัญคือเงื่อนไขเดิมเรากำหนดเป็น น้อยกว่าเท่ากับ แต่ในที่นี้เรากำหนดเป็นว่า i มากกว่าเท่า 1 loop จึงจะยังทำงานต่อ และที่สำคัญเช่นเดียวกันคือเราทำการลดค่า i ไปทีละ 2 ครับ เท่านี้เราก็จะได้ ค่า 100,98,96,...,4,2 แล้วครับ ขอให้ลองไล่โปรแกรมดูสักนิด แล้วก็จะเข้าใจโดยกระจ่างเองครับคำสั่ง while loop มีอีกหนึ่งโครงสร้างที่มีลักษณะคล้ายกับ for loop ที่อธิบายมาข้างต้น นั่นก็คือ while loop ก่อนอื่นต้องขอบอกถึง ความแตกต่าง ที่เห็นได้ชัดเจนระหว่าง for loop กับ while loop เสียก่อน นั่นคือ เราจะเห็นได้ว่า for loop นั้น เราจะมีการบอกถึง ค่าเริ่มต้น ค่าสิ้นสุด ของตัววิ่ง(จากข้างต้นก็คือตัว i นั่นเอง) แต่ while loop นั้นจะบอกแค่เงื่อนไขการจบเท่านั้น ซึ่งถ้าใน for loop นั้น เงื่อนไขการจบก็คือ การที่ตัววิ่ง วิ่งถึงค่าสิ้นสุด ก็จะหลุดออกจาก loop for แต่ while loop ก็มีลักษณะคล้ายกันแต่อาจจะไม่เหมือนกัน สักทีเดียว ลองมาดูกันwhile ( เงื่อนไขที่ทำให้ยังต้องเข้าไปใน loop ) { statement ;}เรามักจะแปลได้ว่า "ขณะที่(.....เงื่อนไข......ยังเป็นจริงอยู่) ก็เข้าไปทำคำสั่งหลังเครื่องหมาย { "ต่อไปนี้จะขอสร้างตัวอย่างขยายข้อความข้างบนหน่อย โดยเราจะสั่งให้มีการบวกเลขตั้งแต่ 1-100 เหมือนตัวอย่างใน for loop นั่นแหละ(มันเป็นตัวอย่างเอาไว้หากิน!!!)#includemain(){ int i , ans; i=1; /* initial variable */ ans=0; while ( i <= 100 ) { ans = ans + i ; i=i+1; /* increase variable */ } printf("answer is %d",ans); } จากตัวอย่างนี้ สิ่งที่สำคัญที่สุด ก็คือ การกำหนดค่าเริ่มต้นให้กับตัวแปร i , ans อันนี้สำคัญมากเราจะต้องกำหนดไว้เสมอ หากเราไม่กำหนดไว้ตั้งแต่เริ่มต้น โปรแกรมจะไปหยิบค่าอะไรก็ไม่รู้จากใน memory มาเก็บไว้ในตัวแปร i และ ans ซึ่งจะทำให้โปรแกรมของเราผิดพลาดทันที ส่วนใน while loop นั้นอธิบายได้ง่ายๆ ว่า ขณะที่ i ยังน้อยกว่าหรือเท่ากับ 100 อยู่ ก็ให้ทำคำสั่งหลังเครื่องหมาย { นั่นก็คือ ans=ans+i และจุดที่สำคัญอีกจุดหนึ่ง ไม่แพ้การ กำหนดค่าเริ่มต้นให้กับตัวแปร นั่นก็คือ บรรทัด i=i+1 ซึ่งเป็นการบอกว่าให้เพิ่มค่า i ไปทีละ 1 ในทุกๆรอบ หากขาดบรรทัดนี้ไป loop ของเรา จะวิ่งไม่หยุดหรือที่เรียกกันว่า infinite loop นั่นเอง เพราะหากเราไม่เพิ่มค่า i แล้ว ค่า i ตลอดโปรแกรมก็จะยังคงเท่ากับ 1เหมือนที่เรากำหนดไว้ตอนเริ่มต้น ดังนั้นเมื่อ compiler มาตรวจดูเงื่อนไขของ while loop ก็พบว่า ยังเป็นจริงอยู่ นั่นก็คือ 1 ยังคงน้อยกว่าหรือเท่ากับ 100 อยู่วันยังค่ำ นั่นก็คือ loop นี้จะวิ่งไปเรื่อยๆ ไม่มีวันหยุดนั่นเอง ถึงตอนนี้ขอให้ลองเปรียบเทียบตัวอย่างนี้กับตัวอย่างที่เป็น for loop ดูสิว่ามีอะไรแตกต่างกันบ้าง่ก่อนจะสรุปอะไรไปมากกว่านี้ ต้องบอกเลยว่า ทั้ง for loop และ while loop นั้นมีความคล้ายคลึงกันมากๆๆๆ หรืออาจจะมองเป็นสิ่งเดียวกันก็ได้ หรืออาจจะมองเป็นคนละสิ่งก็ได้ แล้วแต่ว่าเราจะกำหนดให้มันทำงานอย่างไรมากกว่า เหมือนกันอย่างไร นั่นคือ ใน for loop นั้นซึ่งมีโครงสร้างบรรทัดแรกดังนี้for(ตัวนับ= i; เงื่อนไขที่จะให้ยังทำงานอยู่ใน loop; การเพิ่มหรือการลดตัวนับ){เราจะพบว่าจะต้องมีการกำหนดค่าเริ่มต้นให้กับตัวนับหรือตัววิ่งนั่นเอง ซึ่งพบว่าใน while loop ข้างต้นเราก็ต้องกำหนดค่าเริ่มต้นให้กับ i ตอนก่อนเข้า loop เหมือนกัน และใน for loop ก็มีการกำหนดเงื่อนไขที่จะยังให้ทำงานอยู่ใน loop ซึ่งใน while loop ก็มีเช่นเดียวกัน ตรงข้อความหลัง while และในส่วนสุดท้ายของ for loop ซึ่งมีการกำหนดให้ เพิ่มตัวนับหรือลดตัวนับ ซึ่งก็ถือเป็นส่วนสำคัญของ while loop เช่นเดียวกันนั่นคือ บรรทัด i=i+1 จากบรรทัดข้างต้นนั่นเอง ต่อไปจะขอแปลงตัวอย่างทั้งหมดจาก for loop มาเป็น while loop ให้ดูกัน แล้วลองเปรียบเทียบกันเองนะครับว่าเหมือนหรือแตกต่างกันอย่างไรดูตัวอย่าง การแสดงเฉพาะเลขคี่ที่อยู่ในช่วงตั้งแต่ 1 ถึง 100#includemain(){ int i ; i=1; while(i<=100){ printf("Odd number is %d\n",i); i=i+2; }}ดูตัวอย่าง การแสดงเฉพาะเลขคู่ที่อยู่ในช่วงตั้งแต่ 1 ถึง 100#includemain(){ int i ; i=2; while(i<=100){ printf("Odd number is %d\n",i); i=i+2; }}ดูตัวอย่าง การแสดงเฉพาะเลขคู่(ถอยหลัง)ที่อยู่ในช่วงตั้งแต่ 1 ถึง 100#includemain(){ int i ; i=100; while (i>=1){ printf("Odd number is %d\n",i); i=i-2; }}ประโยคเงื่อนไข (Condition statement) สำหรับประโยคเงื่อนไขนะครับ หลายคนอาจจะสงสัยว่า จะต้องใช้เมื่อไหร่ และจะใช้อย่างไร ก็คงจะตอบได้ว่า ประโยคเงื่อนไขนั้นเราจะใช้เมื่อเราต้องการจะตัดสินใจอะไรบางอย่างเช่นคำพูดที่เราพูดกันเรื่อยๆว่า ถ้าเป็นอย่างนี้แล้วให้เป็นอย่างนั้นถ้า คำพูดของเขาเป็นความจริง แล้ว ฉันก็จะไปกับเขา ไม่เช่นนั้น ฉันก็จะไม่ไปจากประโยคที่ให้มานี้ เราจะพบว่าเงื่อนไขที่จะบอกว่า ฉันจะไปกับเขา หรือไม่ไปนั้น มันขึ้นกับว่า คำพูดของเขา จริงหรือเท็จ นั่นเอง ดังนัเน เงื่อนไขของข้อความนี้ก็คือ คำพูดของเขาเป็นความจริง ถ้าลองเขียนเป็นรูปแบบภาษาซีที่เกี่ยวข้องกับการตัดสินใจ ก็จะเขียนได้ว่าif (คำพูดของเขาเป็นความจริง){ ฉันก็จะไปกับเขา}else{ ฉันก็จะไม่ไป} เราลองมาดูอีกตัวอย่างให้ชัดๆไปเลย เช่น ถ้าเรามีเงินมากกว่า 100 บาท เราจะซื้อของขวัญ A แต่ถ้าน้อยกว่าเราก็จะซื้อของขวัญ B เราสามารถเขียนให้อยู่ในรูปภาษาซีได้ดังนี้if ( เงินที่มี > 100 ){ ซื้อของขวัญ A}else{ ซื้อของขวัญ B}ดังนั้นจะขอสรุปเกี่ยวกับโครงสร้าง if-then-else ได้ดังนี้นะครับโครงสร้างที่ 1 if-then มีรูปแบบดังต่อไปนี้if( เงื่อนไขเป็นจริง ){ statement;} นั่นคือถ้าเงื่อนไขเป็นจริง ก็จะมาทำคำสั่งที่ statement; ถ้าเงื่อนไขนั้นไม่จริง ก็ไม่ต้องทำอะไรโครงสร้างที่ 2 if-then-else มีรูปแบบดังต่อไปนี้if( เงื่อนไขเป็นจริง ){ statement1;}else{ statement2;} นั่นคือถ้าเงื่อนไขเป็นจริง ก็จะมาทำคำสั่งที่ statement1; ถ้าเงื่อนไขนั้นไม่จริง ก็จะมาทำ statement2;โครงสร้างที่ 3 if-then-elseif- มีรูปแบบดังต่อไปนี้if( เงื่อนไขที่หนึ่งเป็นจริง){ statement1;}elseif( เงื่อนไขที่สองเป็นจริง ){ statement2;}else{ statement3;} นั่นคือถ้าเงื่อนไขที่หนึ่งเป็นจริง ก็จะมาทำคำสั่งที่ statement; แต่ถ้าไม่จริงให้มาตรวจสอบเงื่อนไขที่สองถ้าเงื่อนไขที่สองเป็นจริงให้ทำคำสั่ง statement2 แต่ถ้าไม่จริงให้หลุดมาทำ statement 3ลองมาดูตัวอย่างกันสักหน่อยหากเราตรวจการดูค่าตัวแปร x ว่า ถ้า x มีค่าน้อยกว่า 100 ให้พิมพ์คำว่า Less than 100 ถ้า x ไม่น้อยกว่า 100 ให้พิมพ์คำว่า Not less than 100 เราสามารถเขียนโปรแกรมได้ดังนี้#includemain(){ int x=50; if (x<100){ x="200" x="100;">50){ printf("More than 50\n"); }elseif(x>80){ printf("More than 80\n"); }else{ printf("More than 50 and 80\n"); }}จากโปรแกรมนี้ผลที่ได้ปรากฎว่ามันจะพิมพ์เพียงข้อความเดียวคือ More than 50 ทั้งนี้เนื่องจากเมื่อเรากำหนดเงื่อนไขว่า x=100 และพอโปรแกรมตรวจสอบในเงื่อนไขแรกคือ x>50 ซึ่งเป็นจริง โปรแกรมจะมาทำข้อความภายในเครื่องหมาย {} ที่ติดกับเงื่อนไขเท่านั้น และจากนั้นจะหลุดออกจากโครงสร้าง if ไปเลย แต่ถ้าลองมาดูโปรแกรมอีกโปรแกรมดังต่อไปนี้#includemain(){ int x=100; if(x<70){>main(){ int x=70; if( x>50 && x<100 x="70">50 และ x<100>50 ต้องจริง และ เงื่อนไข x<100>main(){ int x=100; if(x>50 x>150){ printf("TRUE\n"); }else{ printf("FALSE\n"); } } จากโปรแกรมนี้เรากำหนดค่า x=100 ให้กับตัวแปร x และเงื่อนไขในโครงสร้าง if มี สองเงื่อนไขคือ x>50 หรือ x>150 นั่นหมายความว่า ถ้าเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริงก็จะถือว่าเงื่อนไขทั้งหมดเป็นจริง ในโปรแกรมนี้ 100>50 นั่นหมายความว่าเงื่อนไขแรกเป็นจริง แต่เงื่อนไขที่สองคือ 100>150 อันนี้ไม่จริง แต่เนื่องจากเราเชื่อมสองเงื่อนไขด้วยสัญลักษณ์ (หรือ) จึงทำให้เงื่อนไขทั้งหมดเป็นจริง โปรแกรมนี้จึงพิมพ์คำว่า TRUEตัวอย่างสุดท้าย ปิดท้ายโครงสร้าง if นี้คือโปรแกรมตัดเกรด โปรแกรมยอดนิยมในการเขียนโครงสร้าง if นั่นคือ หากเรากำหนดกฎเกณฑ์ในการตัดเกรดดังนี้คือคะแนนเกรด80-100A70-79B60-69C50-59Dน้อยกว่า 50Fนั่นหมายความว่าถ้าคะแนนของเราตกลงในช่วงคะแนนใด เราก็จะได้เกรดนั้น หากเรากำหนดให้ตัวแปร x เป็นคะแนนที่เราได้ โปรแกรมจะสามารถเขียนได้ดังนี้#includemain(){ int x=74; if(x>=80 && x<=100){ printf("Grade is A\n"); }elseif(x>=70 && x<=79){ printf("Grade is B\n"); }elseif(x>=60 && x<=69){ printf("Grade is C\n"); }elseif(x>=50 && x<=59){ printf("Grade is D\n"); }else{ printf("Grade is F\n"); }} จากโปรแกรมข้างต้นนั้นเรากำหนดค่า 74ให้กับตัวแปร x สมมติเป็นคะแนนที่เราได้ จากนั้นโปรแกรมจะทำการตรวจสอบเงื่อนไขทีละเงื่อนไขจากบนลงล่างนั่นคือ x >=80 && x<=100 หมายความว่า x มีค่าตั้งแต่ 80 ถึง 100 จริงหรือไม่ ซึ่งปรากฎว่าไม่จริง จึงมาตรวจสอบเงื่อนไขที่สองคือ x >= 70 && x<=79 หมายความว่า x มีค่าตั้งแต่ 70 ถึง 79 จริงหรือไม่ ปรากฎว่าจริง เพราะ 74>=70 และ 74<=79 จริงทั้งสองเงื่อนไขทำให้เงื่อนไขนี้เป็นจริง ดังนั้นโปรแกรมจึงพิมพ์ค่า Grade is B ออกมาทางหน้าจอนั่นเอง จากโปรแกรมนี้เราสังเกตได้ว่าหากเราพิมพ์ค่าอื่นๆที่นอกเหนือจาก 50 ถึง 100 โปรแกรมจะให้เกรด F ในทันที นั่นหมายความว่าหากเราพิมพ์คะแนนเป็น 101 ก็จะไม่ได้เกรด A แต่จะเป็นเกรด F แทนนั่นเองครับ