การประยุกต์การเขียนโปรแกรม การแก้ปัญหาด้านเกี่ยวกับตัวเลข การหาผลรวมของตัวเลข การหาผลรวมของตัวเลขอาจมีขั้นตอน ดังนี้ 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
|