C Language

http://tvxq.siam2web.com/

 

 

การประยุกต์การเขียนโปรแกรม

การแก้ปัญหาด้านเกี่ยวกับตัวเลข
          การหาผลรวมของตัวเลข
การหาผลรวมของตัวเลขอาจมีขั้นตอน ดังนี้
1. กำหนดตัวแปรที่เก็บผลรวมให้สอดคล้องกับตัวเลขที่จะหาผลรวม เช่น int float  โดยตั้งชื่อตัวแปรให้สื่อความหมาย เช่น sum
2.  กำหนดค่าเริ่มต้นของตัวแปร เป็น 0 เช่น sum = 0;
3. วิเคราะห์ความสัมพันธ์ของตัวเลขที่จะทำการหาผลรวม ซึ่งส่วนนี้ จะทำให้โปรแกรมต่างกันไป
4. เขียนโปรแกรมให้สอดคล้องกับความสัมพันธ์ใหนข้อ 3.

ตัวอย่าง  จงเขียนโปรแกรมหาผลรวมของ  5 10 15 20 25 30 35 40 45 50
  /* ex11_1.c */
#include
#include
#include
main()
{
    int sum,x[10] , i ;
    sum = 0;     i =0;     x[0]=5;
    clrscr();
    while (x[i]<=50)
    { 
        sum = sum + x[i];
        printf("\nValue of sum. of  x = %d to x = %d  is %d ",x[0], x[i] ,sum);   /*  แสดงค่าผลรวมในแต่ละขั้นตอนเพื่อตรวจสอบ ไม่จำเป็นต้องเขียนคำสั่งนี้ก็ได้  */
        i=i+1;
        x[i] = x[i-1] + 5;           /* เพราะตัวเลขต่อไปมีค่าเท่ากับของเดิม + 5   */
    }
    printf("\n sum of all \( %d to %d \)  =  %d",x[0],x[i-1] ,sum);   /* คำตอบที่ต้องการ */
}

ตัวอย่าง จงหาผลรวมของ ตัวเลขต่อไปนี้  57  25  91  20  215 13 35  41 33 11
    /* ex11_2.c */
#include
#include
#include
main()
{
    int sum,i,j,x[13];    /* ใช้ array เพื่อให้สะดวกในการเขียนโปรแกรมและไม่ต้องตั้งชื่อตัวแปรมาก */
    i =0;
    clrscr();
    printf("Please enter number of digit. ");
    scanf("%d",&i);    /* เพื่อนำไปใช้ในการกำหนดจำนวนรอบของการทำซ้ำ  */
    sum = 0;
    for  (j=0;j        printf("\nEnter the value that you want to use in summation.");
        scanf("%d",&x[j]);   /* เนื่องจากตัวเลขแต่ละค่าไม่มีความสัมพันธ์กันจึงเลือกการป้อนทางแป้นพิมพ์ */
        sum = sum + x[j] ;
        printf("Value of summation when x[%d] = %d is %d ",j,x[j],sum);/* เพื่อตรวจสอบ ไม่จำเป็นต้องมีก็ได้ */
    }
     printf("\nsum of all = %d",sum);  /* คำตอบที่ต้องการ */
}   /* จบโปรแกรม */

การหาค่าเฉลี่ยของตัวเลข
            การหาค่าเฉลี่ยของตัวเลขต้องมีการหาผลรวมด้วยวิธีการดังที่ผ่านมา และการหาค่าเฉลี่ย ผลลัพธ์ปกติจะเป็นทศนิยมดังนั้น จึงต้องมีตัวแปรซึ่งใช้ในการคำนวณเป็นตัวแปรที่เก็บเลขทศนิยม โดยเฉพาะตัวแปรที่เก็บผลลัพธ์ โดย ค่าเฉลี่ย  = ผลรวมของตัวเลข / จำนวนตัวเลข

ตัวอย่าง พิจารณาโปรแกรม แล้วคาดคะเนผล
/* ex11_3.c */
#include
#include
#include
main()
{
    int n,j;
    float num[20],sum = 0,average;
    char numstring[20];
    clrscr();
    printf("Enter the number of data that you want to find the average :");
    n = atoi(gets(numstring)); 
    for ( j=0;j    {
        printf("Enter data no. =%d :",j+1);
        num[j] = atof(gets(numstring));  /* เปลี่ยนข้อความเป็นเลขทศนิยมเก็บไว้ในตัวแปร num[j] */
        sum = sum + num[j];
    }  /* จบการทำซ้ำแบบ for */
    average = sum / n;
    clrscr();
    for (j=0;j       printf("\nnum[%d]  = %6.2f ",j,num[j]);  /* จบการทำซ้ำแบบ for */
    printf("\nSum = %6.2f \t  Average = %6.2f",sum,average);
}  /* จบโปรแกรม */

การจัดเรียงข้อมูล
            วิธีการจัดเรียงข้อมูลมีหลายวิธีการแต่ละวิธีการ จะมีวิธีการ ขั้นตอน จำนวนครั้งในการกระทำ และประสิทธิภาพของการจัดเรียงไม่เหมือนกัน วิธีการจัดเรียงวิธีหนึ่ง เรียกว่า selection sort ซึ่งอาจสรุปการจัดเรียงจากน้อยไปมาก เป็นขั้นตอน ดังนี้
1. กำหนดตัวแปรที่ทำการเก็บข้อมูลชั่วคราวขึ้นมา 1 ตัว เพื่อใช้ในการทำการสลับค่าเพื่อหาข้อมูลที่น้อยที่สุด
2. นำข้อมูลตัวที่1 ไปสลับที่อยู่กับข้อมูลที่มีค่าน้อยที่สุด โดยการทำสำเนาค่าของข้อมูลตัวที่1 ไว้กับตัวแปรที่เก็บข้อมูลชั่วคราว นำไปเปรียบเทียบกับข้อมูล ต่าง ๆ ตั้งแต่ตัวที่2 ไปจนถึงข้อมูลตัวสุดท้าย ในระหว่างทางอาจมีการทำสำเนาข้อมูลตัวที่น้อยกว่ามาเก็บแทนในตัวแปรที่เก็บข้อมูลชั่วคราวนั้น แต่ยังไม่มีการแทนที่เมื่อเปรียบจนถึงข้อมูลตัวสุดท้ายแล้วถึงมีการสลับตำแหน่งระหว่างข้อมูลตัวที่1 กับข้อมูลที่มีค่าน้อยที่สุด
3. นำข้อมูลตัวที่2 มาทำสำเนาเก็บในตัวแปรที่เก็บข้อมูลชั่วคราวไปเปรียบเทียบกับข้อมูลตัวที่3 จนถึงข้อมูลตัวสุดท้ายเพื่อหาข้อมูลที่มีค่าน้อยที่สุดที่เหลืออยู่ (ซึ่งข้อมูลตัวนี้จะมีค่ามากกว่าตัวที่น้อยที่สุดที่ไปอยู่ในลำดับที่1แล้ว) แล้วสลับตำแหน่งข้อมูลด้วยวิธีการเดียวกับ 2. ด้วยวิธีการนี้ข้อมูลที่จะถูกเปรียบเทียบจะน้อยลงครั้งละ 1 ตัว
4. ทำซ้ำด้วยวิธีการในข้อ2. และ 3. กับข้อมูลตัวที่ 3 จนกระทั่งตัวที่ n - 1 ดังนั้นจำนวนรอบในการเปรียบเทียบ จะเป็น จำนวน n - 1 รอบ(โดยการได้มาซึ่งข้อมูลที่เรียงลำดับครบถ้วน อาจใช้จำนวนรอบไม่ครบ n - 1 รอบ แล้วแต่ข้อมูลแต่ละชุด แต่ก็ต้องเขียนโปรแกรมให้มีการเปรียบเทียบให้ครบเพราะไม่เช่นนั้นอาจเกิดการผิดพลาด) ซึ่งอาจเขียนแสดงตำแหน่งของข้อมูลในแต่ละรอบ ดังรูป


 

ตัวอย่าง ศึกษาโปรแกรม /*  ex11_5.c */  คาดคะเนผลการทำงาน และทดสอบโปรแกรม
/*  ex11_5.c */
 #include
 #include
 #include      /* atoi()  in this file */
 void main(void)
{
            int  num[100];  int  n, j , k , index , temp;   char numstr[20];  clrscr(); 
/* input */
            printf("Enter Total of number(n<=100) : ");
            n=atoi(gets(numstr));
            for(j=0; j                        printf("Enter Number # %d : ",j+1);
                        num[j]=atoi(gets(numstr));
      }
            /* selection sorted */
            for(k=0; k                        index = k;             /* สำเนาดัชนีของตัวเลข เพื่อเป็นดัชนีชั่วคราว */
                        temp  = num[k];       /* สำเนาค่าตัวเลขไปไว้ในตัวแปรที่เก็บค่าชั่วคราว */
                        for(j=k+1; j                           if( num[j] < temp)       /* ascending */
                             {   index = j;
                              temp  = num[j];     /* สำเนาค่าตัวเลขที่น้อยที่สุดในรอบนี้ไว้ในตัวแปรชั่วคราว */
                             }
                        temp = num[index];               /* สำเนาค่าตัวเลขที่น้อยที่สุดในรอบไว้ในตัวแปรที่เก็บข้อมูลชั่วคราว*/
                        num[index] = num[k];           /* สำเนาค่าตัวเลขไปไว้แทนตัวเลขที่น้อยที่สุดในรอบ */
                        num[k] = temp;              /* นำค่าที่น้อยที่สุดในรอบนี้ที่เก็บในตัวแปรชั่วคราวมาเก็บแทนที่ตัวเลข */
            printf("\nresult of sort round = %d\n",k+1);         /* คำสั่งตั้งแต่บรรทัดนี้ จนถึงจบ คำสั่ง for ต่อไปนี้  */
        for(j=0; j                        printf("number[%d]=%d ",j,num[j] );           /* เข้าใจถึงค่าที่ได้  ในแต่ละรอบ */
        }            /* จบการจัดเรียง  */
             /* output */
             printf("\n**Ascending Selection Sorted Data**\n");
             for(j=0; j


Advertising Zone    Close

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