บทที่ 5

โปรแกรมแบบวนรอบทำซ้ำ

 หลักในการวนรอบซ้ำ หมายถึง คอมพิวเตอร์จะทำงานวนซ้ำในชุดคำสั่งที่กำหนด และมีการตรวจสอบเงื่อนไขการทำซ้ำเรียกว่าการวนลูป (Loop) ดังนั้นการใช้งานลูปก็คือการวนซ้ำ 
          สรุปการวนรอบซ้ำเป็นการสั่งให้วนรอบทำงานซ้ำคำสั่งเดิม โดยมีการกำหนดเงื่อนไขเพื่อให้โปรแกรมวนรอบทำงาน ดังนั้นการวนซ้ำในทางภาษาคอมพิวเตอร์ คือ การทำคำสั่งหรือชุดคำสั่งนั้นซ้ำกันหลายๆครั้ง
          ในภาษา C มีการใช้คำสั่งการวนรอบ หรือ การวนลูป (Loop)  ด้วย while, do-while และ for
  • while คือ วนรอบหากเงื่อนไขเป็นจริง (ตรวจสอบก่อนทำตามคำสั่ง - เช็คก่อนทำ)
  • do-while คือ รอบแรกจะทำก่อนเสมอแล้วจึงวนรอบหากเงื่อนไขเป็นจริง (ทำตามคำสั่งก่อนจึงตรวจสอบ - ทำก่อนเช็ค)
  • for คือ กำหนดจำนวนรอบที่แน่นอนได้ (การเลือกใช้คำสั่ง for เมื่อทราบจำนวนการวนรอบที่แน่นอน)
หมายเหตุ ข้อสังเกตของ while และ do - while นิยมใช้กับการทำงานที่เราไม่รู้จำนวนครั้งที่แน่นอน การวนรอบซ้ำ (loop) รับค่าจนกว่าจะได้ค่าที่ต้องการ วนรอบซ้ำ (loop) คำนวณค่าจนกว่าผลลัพธ์มีค่าเท่ากับศูนย์ คำสั่งที่อยู่ในการวนรอบ (loop) ต้องส่งผลให้เงื่อนไขที่ตรวจสอบมีโอกาสเป็นเท็จจึงจะสามารถออกจากการวนรอบ (loop) ได้ และคำสั่งที่อยู่ในการวนรอบ (loop) ต้องส่งผลกระทบต่อตัวแปรหรือค่าที่นำมาเป็นเงื่อนไขในการออกจากการวนรอบ (loop)

คำสั่ง while วนรอบหากเงื่อนไขเป็นจริง
          คำสั่ง while เป็นคำสั่งสำหรับการควบคุมทิศทางแบบวนรอบ โดยจะเริ่มต้นทำงานจากการตรวจสอบเงื่อนไข (condition)  (เงื่อนไข condition : หมายถึงเงื่อนไขที่ต้องการให้คอมพิวเตอร์ตัดสินใจ) ถ้าเป็นจริงจะทำงานตามคำสั่งของ while  เมื่อเสร็จแล้วก็จะวนกลับไปตรวจสอบเงื่อนไขใหม่ เป็นเช่นนี้ไปเรื่อยๆ จนกว่าเงื่อนไขจะไม่เป็นจริงจึงจะหลุดออกจากการทำงาน      
          รูปแบบคำสั่ง * ตรวจสอบเงื่อนไขให้เป็นจริงก่อนแล้วจึงทำ
          while( เงื่อนไข )
          {
          คำสั่ง 1 ;
          คำสั่ง 2 ;
          คำสั่งเพิ่มค่าหรือลดค่า ;
          }
          ตัวอย่างโปรแกรม วนรอบแสดงตัวอักษรจากแป้นพิมพ์ออกจอภาพ
          #include <stdio.h>
          void main()
            {       char  ch;
                     ch = getch( );
                     while(ch  != 'q')
                      {
                        printf("\n%c", ch);
                        ch = getch( );
                      }
            }
          ตัวอย่างโปรแกรม แสดงตัวเลขค่ารับเข้าระหว่าง 100 ถึง 1
#include<stdio.h>
int main(void)
{
system("cls");
int  num;
int  lineCount;
          printf("Enter an integer between 1 and 100:");
          scanf("%d",&num);
                    if(num>100)
                              num=100;
                    lineCount= 0;
          while(num>0)
          {
                    if(lineCount<10)
                              lineCount++;
                    else
                    {
                              printf("\n");
                              lineCount=1;
                    }
          
          printf("%4d",num--);
          }
getch();
return 0;
}

 

คำสั่ง do-while วนรอบหากเงื่อนไขเป็นจริง รอบแรกจะทำเสมอ
          คำสั่งวนรอบแบบ do - while จะทำงานตามคำสั่งของ do ก่อนหนึ่งรอบแล้วจึงเริ่มตรวจสอบเงื่อนไขที่ while เป็นครั้งแรกโดยถ้าเงื่อนไขเป็นจริงจะวนกลับไปทำงานอีกครั้ง แล้วกลับมาตรวจสอบเงื่อนไขใหม่ เป็นอย่างนี้ไปจนกว่าผลการตรวจสอบเงื่อนไขจะออกมาเป็นเท็จ ก็จะออกจาก loop ของ do-while
         สรุปคำสั่ง do -while เป็นอีกรูปแบบหนึ่งของคำสั่งที่ใช้ควบคุมโปรแกรม โดยให้โปรแกรมจะตรวจสอบเงื่อนไข หลังจากมีการเข้าไปทำในวงรอบ ของการทำซ้ำแล้วอย่างน้อย 1 รอบ ถ้าเงื่อนไขเป็นจริงก็จะโปรแกรมซ้ำอีกต่อไป จนกระทั่งเงื่อนไขที่เปรียบเทียบนั้นเป็นเท็จ จึงหยุดการทำซ้ำ 
          รูปแบบคำสั่ง * ทำก่อนแล้วจึงตรวจสอบเงื่อนไขเพื่อวนรอบกลับไปทำซ้ำ การใช้งาน ดังนี้
                    do
                    {
                      คำสั่งที่ 1;
                      คำสั่งที่ 2;      
                      คำสั่งเพิ่มค่าหรือลดค่า ;
                    }while (เงื่อนไข);
                     
          ตัวอย่างโปรแกรม ดังนี้ 
          #include <stdio.h>
          main()
          {
            int i;
            i=1;
                    do
                    {
                              printf("i = %d\n",i);
                              i++; //i=i+1
                    } while (i<=10);
            getch();
          }
          ตัวอย่างโปรแกรม วนรอบแสดงตัวอักษรจากแป้นพิมพ์ออกจอภาพ
          #include <stdio.h>
          void main()
            {     char  est;
                  do {
                       est = getch();
                       printf("\n%c", est);
                        }
                       while((est != 'a') && (est != 'b'));
            }
          // หมายเหตุ ตามแนวคิดทฤษฎี De Morgan's laws นั้น NOT (a  OR  b) เป็นเหมือนกับ NOT  a  AND  NOT  b.

คำสั่ง for  กำหนดจำนวนรอบที่แน่นอนได้
          คำสั่ง for เป็นคำสั่งที่ใช้สำหรับการควบคุมทิศทางของโปรแกรมให้ทำงานแบบวนรอบเช่นเดียวกับคำสั่ง while และ do-while
           สรุปการทำซ้ำแบบ for หรือ ลูป for จะเป็นการทำให้โปรแกรมทำซ้ำจนกว่าค่าตัวแปรจะครบตามที่ตั้งไว้ เริ่มแรกโปรแกรมจะกำหนดค่าเริ่มต้นให้กับตัวแปรเริ่มต้น (initialization) จากนั้นทำ คำสั่ง (statement)
          แต่คำสั่ง for มีรูปแบบการเรียกใช้งานที่แตกต่างไปจากคำสั่งอื่น 
รูปแบบ *เงื่อนไขที่ใช้ในการควบคุมการวนรอบ โดยถ้าเงื่อนไขเป็นจริงจะทำในการวนรอบ (loop) แต่ถ้าเงื่อนไขไม่จริงจะออกจากการวนรอบ (loop) ทันที
for (กำหนดค่าเริ่มต้นของตัวแปร ; กำหนดเงื่อนไข ; การเปลี่ยนค่าของตัวแปร)
   {
    คำสั่ง หรือ ชุดคำสั่งเมื่อเงื่อนไขเป็นจริง;
   }
ตัวอย่างอธิบาย เช่น for(a=0;a<5;a++) จะอธิบายได้ คือ
for (เริ่มต้นของตัวแปร a มีค่า =0 ; เงื่อนไข ถ้า a มีค่าน้อยกว่า 5 ; ค่าของ a จะเพิ่มที่ละ 1)
ดังนั้น ถ้า a มีค่าน้อยกว่า 5 เป็นจริง (ใช่) จะทำในการวนรอบ
และ ถ้า a มีค่าน้อยกว่า 5 เป็นเท็จ (ไม่ใช่) ออกจากการวนรอบ
ตัวอย่างโปรแกรม เรียงตัวอักษร a ถึงอักษร z ออกมาแสดงทางหน้าจอ
#include <stdio.h>
void main()
{
    char kchar ;
    for (kchar='a'; kchar<='z'; kchar++)
    printf("%c_", kchar);
}
ตัวอย่างโปรแกรม เพิ่มค่าจากตัวเลข 0 ที่ละ 2 จนถึง 100
#include<stdio.h>
main()
{
    int x,y;
    for (x=0,y=0; x+y<=100; x++,y++)
     printf("X+Y = %d\n", x+y);
}
ตัวอย่างโปรแกรม เรียงตัวเลขจากศูนย์ถึงตัวเลขที่รับเข้ามา
#include<stdio.h>
int main(void)
{
          int i;
          int limit;
          system("cls");
          printf("\nPlease enter the limit:");
          scanf("%d",&limit);
                    for (i=1;i<=limit;i++)
                              printf("\t%d\n",i);
          getch();
          return 0;
}
กฎของคำสั่ง for
กฎในการใช้คำสั่ง for มีดังนี้
  • ค่าที่เพิ่มขึ้นในแต่ละรอบของตัวแปรควบคุมนั้นจะเป็นเท่าไรก็ได้ เช่น for (x=0;x<=100;x=x+5)
  • ค่าที่เพิ่มขึ้นของตัวแปรควบคุมถูกกำหนดให้ลดลงได้
  • ตัวแปรควบคุมอาจเป็นชนิดตัวอักษรได้ (character) เช่น for (ch=‘a’; ch<=‘z’ ; ch++)
  • ตัวแปรควบคุมสามารถมีได้มากกว่า 1 ตัวแปร
  • ถ้าไม่มีส่วนของการเปลี่ยนค่าของตัวแปร ให้เพิ่มการเพิ่มค่าหรือลดค่าลงไปในการวนรอบเพื่อสร้างเงื่อนไขการออกจากการวนรอบ (loop)
  • ถ้ามีการละเลย (กำหนดค่าเริ่มต้นของตัวแปร ; กำหนดเงื่อนไข ; การเปลี่ยนค่าของตัวแปร) จะเป็นการสั่งให้ทำงานในวงจร for โดยไม่รู้จบก็ทำได้โดยใช้คำสั่ง break เข้ามาช่วย  เช่น for (;;) {  printf(“This loop will run forever \n”);  break;  }
  • คำสั่ง for สามารถมีคำสั่ง for ซ้อนอยู่ภายใต้ได้

1.รับข้อมูลจากผู้ใช้ด้วย Inputbox


กล่องโต้ตอบกับผู้ใช้อีกแบบหนึ่ง ที่สามารถรับข้อมูลจากผู้ใช้ได้ด้วย นั่นก็คือ Input Box ลักษณะของ Input Box นี้จะเป็นกล่องโต้ตอบที่มีข้อความเพื่อบอกให้ผู้ใช้ทำอะไร หรือใส่อะไรลงในช่อง และ ช่องสำหรับให้ผู้ใช้กรอกข้อมูล ลักษณะดังภาพข้างล่าง


ซึ่งในภาพจะเห็นว่า มีข้อความให้ผู้ใช้กรอกชื่อตนเองใส่เข้าไปในช่อง นอกจากนี้ก็ยังมีปุ่ม อยู่ 2 คือ OK และ Cancel เพื่อแสดงการตอบรับหรือปฏิเสธกล่องโต้ตอบนี้

รูปแบบ

     inputbox("ข้อความที่ต้องการแสดงออกทางกล่องโต้ตอบ")


ตัวอย่าง
    ผมต้องการให้ผู้ใช้กรอกชื่อตนเองลงในช่องรับข้อมูล แล้วกดปุ่ม OK ลงในโปรแกรมย่อย (sub)ที่ชื่อว่า request ที่มีหนึ่งคำสั่งคือ inputbox อยู่ภายใน Code ของโปรแกรมสามารเขียนได้ดังนี้


Sub request()
    InputBox ("Please type your name in the box below and then click OK.")
End Sub

เมื่อทำการทดสอบการทำงานของโปรแกรม โดยการกดปุ่ม F5 จะได้ผลลัพท์ดังนี้


ซึ่งจะเห็นว่าในกล่องโต้ตอบแบบ Input box นี้ จะมีการแสดงข้อความของเราออกมาและมีช่องรับข้อมูลให้มาด้วย  แต่โดยทั่วไปกล่องโต้ตอบแบบ Input Box นี้มักจะต้องเกี่ยวข้องกับการนำข้อมูลในช่องรับข้อมูลที่ผู้ใช้กรอกเข้ามาไปประมวลผลต่อ ดังนั้นเราจะต้องเขียน Code เพื่อเก็บค่าที่ผู้ใช้กรอกเข้ามาไว้ด้วย โดยจะเก็บค่าดังกล่าวไว้ในรูปของตัวแปรใดตัวแปรหนึ่ง ตัวอย่างต่อไปนี้คือการนำค่าที่ผู้ใช้กรอกเข้ามาไปเก็บไว้ในตัวแปรที่ชื่อว่า UserName

Sub request()
    UserName = InputBox("Please type your name in the box below and then click OK.")
End Sub

แต่เพื่อต้องการตรวจสอบว่าตัวแปร UserName เก็บค่าที่ถูกต้องตามที่ผู้ใช้กรอกเข้ามาหรือไม่เราอาจทดสอบโดยการเพิ่มคำสั่งให้แสดงกล่องโต้ตอบที่มีข้อความเป็นค่าที่ผู้ใช้กรอกเข้ามาเพิ่มอีกหนึ่งคำสั่งดังนี้

Sub request()
    UserName = InputBox("Please type your name in the box below and then click OK.")
    MsgBox (UserName)
End Sub

เมื่อทำการทดสอบการทำงานของโปรแกรม โดยกดปุ่ม F5 แล้วป้อนคำว่า VBA เข้าไปในช่องรับข้อมูลแล้วกดปุ่ม OK จะพบว่ามีกล่องโต้ตอบแสดงข้อความ VBA ออกมา ซึ่งแสดงว่าตัวแปร UserName เก็บค่าที่เราป้อนเข้าไปถูกต้อง ผลลัพธ์ดังแสดงในภาพข้างล่าง






2.การจัดการข้อผิดพลาดในภาษา Python


ข้อผิดพลาดในภาษา Python

ข้อผิดพลาดในภาษา Python ในการเขียนโปรแกรมมีอยู่ 2 ชนิด คือ
  1. Syntax Errors
  2. Exceptions
1. Syntax Errors
เป็นการเขียนผิดหลักไวยากรณ์ของภาษา Python มักจะพบบ่อย เมื่อลืมใส่วงเล็บหรือใช้คำสั่งผิด import ไลบรารีผิด หรือนำโค้ด Python 2 มารันบน Python 3
ตัวอย่าง
1
2
3
4
5
>>> print "Hi"
  File "<stdin>", line 1
    print "Hi"
          ^
SyntaxError: invalid syntax
2. Exceptions
แม้ว่าจะเขียนโค้ดโปรแกรมถูกหลักไวยากรณ์ของภาษา Python แต่หากจะมีปัญหาในการดำเนินการทำงานของโปรแกรม เช่น ใช้ชนิดของตัวแปรผิด
ตัวอย่างของปัญหานี้คือ ZeroDivisionError, NameError และ TypeError
ตัวอย่างข้อผิดพลาดนี้
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> a = 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: Attempted to divide by zero.
 
>>> b+5/1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
 
>>> "5"-1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'int'

การจัดการข้อผิดพลาดในภาษา Python

เวลาเราเขียนโปรแกรมแล้วนำไปรัน ถ้า พบข้อผิดพลาดจะหยุดการทำงานโปรแกรมทันที หากเราต้องการให้โปรแกรมต่อไปได้เมื่อพบข้อผิดพลาด เราต้องใช้ บล็อก Try และบล็อก Except ครับ
มีหลัการใช้งานดังนี้
1
2
3
4
try:
  คำสั่งรันโปรแกรม
except:
  คำสั่งเมื่อพบปัญหาจากคำสั่งที่รัน
Exception Errors
ที่ควรรู้มีดังนี้ครับ
  1. IOError
    ไม่สามารถเปิดไฟล์ได้
    1
    2
    3
    4
    5
    6
    >>> try:
    ...  open('a.txt','r')
    ... except IOError:
    ...  print("IOError")
    ...
    IOError
  2. ImportError
    ไม่พบไลบรารีที่ระบุไว้
    1
    2
    3
    4
    5
    6
    >>> try:
    ...     import mom
    ... except ImportError:
    ...     print("No")
    ...
    No
  3. ValueError
    ชนิดของค่าที่ได้จากการตัวดำเนินการหรือฟังก์ชั่นจากอาร์กิวเมนต์ไม่เหมาะสม
    1
    2
    3
    4
    5
    6
    7
    8
    >>> try:
        a = int(input("Enter a number:\n"))
    except ValueError:
        print("numbers only")
     
    Enter a number:
    g
    numbers only
  4. ZeroDivisionError
    เป็นข้อผิดพลาดที่พบเมื่อคุณนำค่าจำนวนเต็มหรือจำนวนจริงหารด้วย 0 เพราะการหารด้วย 0 ไม่สามารถหารได้
    1
    2
    3
    4
    5
    6
    >>> try:
    ...     a = 6/0
    ... except ZeroDivisionError:
    ...     print("ZeroDivisionError")
    ...
    ZeroDivisionError
  5. KeyboardInterrupt
    เมื่อการกระทำกับปุ่ม interrupt ของคีย์บอร์ด (Control-C หรือ Delete)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def foo():
        try:
            x=0
            while 1:
                x += 1
            print(x)
        except KeyboardInterrupt:
            print("Interrupted!")
    foo()
สำหรับรายการ Exception Errors สามารถอ่านเพิ่มเติมได้ที่ https://docs.python.org/3/library/exceptions.html
Try ... except ... else
หลังจากที่เรากำหนดการทำงาน Exception Errors แล้ว หากเรารันโปรแกรมแล้วไม่พบข้อผิดพลาดที่เราได้กำหนดไว้ เราสามารถใช้บล็อก else ทำงานตามเงื่อนไขที่กำหนดไว้ได้
1
2
3
4
5
6
try:
  คำสั่งรันโปรแกรม
except:
  คำสั่งเมื่อพบปัญหาจากคำสั่งที่รัน
else:
  คำสั่งเมื่อไม่พบปัญหาจากการรันโปรแกรม
ตัวอย่าง
1
2
3
4
5
6
7
8
>>> try:
...  import sys
... except ImportError:
...  print("Import Error")
... else:
...  print("Hello : )")
...
Hello : )
finally
เป็นการกำหนดคำสั่งเมื่อสิ้นสุดการทำงานบล็อก try except โดยบล็อก finally จะทำงานไม่ว่าจะมีข้อผิดพลาดเกิดขึ้นหรือไม่ก็ตาม
1
2
3
4
5
6
try:
  คำสั่งรันโปรแกรม
except:
  คำสั่งเมื่อพบปัญหาจากคำสั่งที่รัน
finally:
  คำสั่งสิ้นสุดการทำงานหลังจากบล็อก  try  except
ตัวอย่างการใช้งาน
1
2
3
4
5
6
try:
    a = 6 / 0
except:
    print("Error")
finally:
    print("Good Bye. :(")


3.การออกแบบหน้าต่างโปรแกรม

การเขียนโปรแกรมภาษา C# ด้วย Visual Studio นั้นแบบ Windows Form Application นั้น จะต้องอาศัยการออกแบบหน้าจอหรือหน้าต่างของโปรแกรมก่อน ด้วยการนำเครื่องมือต่างๆ จากแถบกล่องเครื่องมือ (Toolbox) มาวางประกอบกันในพื้นที่การออกแบบโปรแกรม (Work space) ตามลักษณะการทำงานของโปรแกรมที่ต้องการ


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

นอกจากนี้เรายังสามารถปรับแต่ง ตั้งค่าต่างๆ เกี่ยวกับเครื่องมือแต่ละชิ้น ได้จากหน้าต่าง Properties ซึ่งเครื่องมือแต่ละตัวนั้นก็จะมีรายละเอียดการตั้งค่าที่ต่างกันไป ยกตัวอย่างเช่น Textbox สามารถเปลี่ยนสีพื้นหลัง ปรับขนาดอักษร กำหนดจำนวนตัวอักษรภายในได้ เป็นต้น


ตัวอย่างการตั้งค่าเปลี่ยนสีพื้นหลังของ Textbox



 เครื่องมือที่มีให้เลือกสำหรับการเขียนโปรแกรมสำหรับการเขียนโปรแกรมด้วย Visual Studio นั้นมีมากมายหลายชิ้น แต่เครื่องมือที่ใช้ประจำหรือนิยมใช้ในการเริ่มหัดเขียนโปรแกรมด้วย Visual Studio ที่ควรรู้จัก ได้แก่
  • Textbox กล่องข้อความสำหรับให้ผู้ใช้พิมพ์ข้อความลงไปได้
  • Label ป้ายแสดงข้อความตัวอักษร
  • Button ปุ่มสำหรับให้ผู้ใช้คลิกเพื่อสั่งให้โปรแกรมทำงานตามต้องการ
  • CheckBox ตัวเลือกแบบหลายทางเลือก
  • RadioButton ตัวเลือกแบบทางเลือกเดียว
  • PictureBox เครื่องมือสำหรับแสดงผลรูปภาพ
  • Progressbar แท็บแสดงค่าตั้งแต่ 0-100
  • Timer ตัวนับเวลาเพื่อให้โปรแกรมทำงานซ้ำ
  • ListBox กล่องแสดงรายการต่างๆ
  • ComboBox เมนูแสดงรายการคล้ายๆ List Box
 ตัวอย่าง การออกแบบหน้าต่างโปรแกรมเครื่องคิดเลข โดยใช้ Button และ Textbox



ตัวอย่าง การออกแบบหน้าจอของเกมจับคู่รูปภาพ

ตัวอย่าง หน้าจอของโปรแกรมแสดงรูปภาพ


สรุป
การออกแบบหน้าต่างโปรแกรม สามารถทำได้โดยการลากเครื่องมือต่างๆ จาก Toolbox นำมาวางในส่วนของพื้นที่ทำงานหรือหน้า Form โดยเครื่องมือที่ใช้บ่อย ได้แก่
  • Textbox กล่องข้อความสำหรับให้ผู้ใช้พิมพ์ข้อความลงไปได้
  • Label ป้ายแสดงข้อความตัวอักษร
  • Button ปุ่มสำหรับให้ผู้ใช้คลิกเพื่อสั่งให้โปรแกรมทำงานตามต้องการ
  • CheckBox ตัวเลือกแบบหลายทางเลือก
  • RadioButton ตัวเลือกแบบทางเลือกเดียว
  • PictureBox เครื่องมือสำหรับแสดงผลรูปภาพ
  • Progressbar แท็บแสดงค่าตั้งแต่ 0-100
  • Timer ตัวนับเวลาเพื่อให้โปรแกรมทำงานซ้ำ
  • ListBox กล่องแสดงรายการต่างๆ
  • ComboBox เมนูแสดงรายการคล้ายๆ List Box

ไม่มีความคิดเห็น:

แสดงความคิดเห็น