จากจำนวนตัวเศษและตัวหารของเศษส่วน N ภารกิจคือการหาเศษส่วน N ผลคูณและผลลัพธ์ควรอยู่ในรูปแบบที่ลดลง
ดังรูปข้างล่างนี้ เรามีเศษส่วนสองส่วน ”4/5” และ “3/4” เราพบผลคูณของสองกลุ่มนั้น โดยที่ตัวเศษของตัวแรกคูณด้วยตัวเศษของวินาทีและตัวส่วนของตัวแรกจะคูณ ตัวส่วนของวินาที ตอนนี้ผลลัพธ์สุดท้ายคือ “12/20” ซึ่งสามารถลดลงได้ดังนั้นผลลัพธ์จะเป็น “3/5” เช่นเดียวกัน เราต้องพัฒนาโปรแกรมเพื่อแก้ปัญหาที่กำหนด
ป้อนข้อมูล
fraction f[3] = {{1,2}, {2,1}, {5,6}}
ผลผลิต
5/6
คำอธิบาย − 1/2 * 2/1 * 5/6 =10/12 เราก็ลดเป็น 5/6 ได้
ป้อนข้อมูล
fraction f[2] = {{2, 3}, {1,4}}
ผลผลิต
1/6
คำอธิบาย − 2/3 * 1/4 =2/12 ซึ่งลดลงได้เป็น 1/6
แนวทางที่ใช้ด้านล่างมีดังต่อไปนี้ในการแก้ปัญหา
เพื่อแก้ปัญหาข้างต้น เราสามารถผลคูณทั้งตัวส่วนและตัวเศษ เก็บผลลัพธ์ไว้ในตัวแปรอื่น prod_den และ prod_num ที่จะเป็นตัวส่วนสุดท้ายและตัวเศษสุดท้ายตามลำดับ ตอนนี้เราต้องหารูปแบบที่ลดรูปแล้ว เราต้องหา GCD (ตัวหารร่วมที่ยิ่งใหญ่ที่สุด) ของ prod_num และ prod_den แล้วหาร prod_num และ prod_den ด้วย GCD ตามลำดับ
อัลกอริทึม
Start Declare a struct fraction with following elements 1. num, 2. den In function int GCD(int a, int b) Step 1→ If a == 0 then, Return b Step 2→ Return GCD(b % a, a) In function int product(int n, fraction f[]) Step 1→ Initialize prod_num = 1 prod_den = 1 Step 2→ Loop For i = 0; i < n; i++ prod_num = prod_num * f[i].num prod_den = prod_den * f[i].den Step 3→ Declare and initialize gcd = GCD(prod_num, prod_den) Step 4→ prod_num = prod_num / gcd Step 5→ prod_den = prod_den / gcd Step 6→ Print prod_num, prod_den In Function int main() Step 1→ Declare struct fraction f[3] = { {1,2}, {2,1}, {5,6}} Step 2→ Declare and initialization n as sizeof(f)/sizeof(f[0]) Step 3→ product(n, f) Stop
ตัวอย่าง
#include <stdio.h> struct fraction{ int num; int den; }; // Function to return gcd of a and b int GCD(int a, int b){ if (a == 0) return b; return GCD(b % a, a); } //fucntion to print the result int product(int n, fraction f[]){ int prod_num = 1, prod_den = 1; // finding the product of all N // numerators and denominators. for (int i = 0; i < n; i++) { prod_num *= f[i].num; prod_den *= f[i].den; } // Finding GCD of new numerator and // denominator int gcd = GCD(prod_num, prod_den); // finding reduced form prod_num /= gcd; prod_den /= gcd; printf("%d/%d\n", prod_num, prod_den); return 0; } int main(){ struct fraction f[3] = { {1,2}, {2,1}, {5,6}}; int n = sizeof(f)/sizeof(f[0]); product(n, f); return 0; }
ผลลัพธ์
หากรันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -
5/6