จากจำนวนตัวเศษและตัวหารของเศษส่วน 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