Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ผลคูณของ N เศษส่วนในรูปแบบลดรูปในภาษา C

ได้รับตัวเศษ num และตัวส่วน den ของ N เศษส่วน งานคือหาผลคูณของ N เศษส่วนและแสดงผลในรูปแบบลดรูป

เช่นในรูปด้านล่าง เรามีสองเศษส่วน "4/5" และ "3/4" เราหาผลคูณของเศษส่วนทั้งสอง โดยตัวเศษของอันแรกคูณตัวเศษอันที่สอง และตัวส่วนของอันแรกคูณตัวส่วนอันที่สอง ผลลัพธ์สุดท้ายคือ "12/20" ซึ่งสามารถลดรูปได้ ดังนั้นเอาต์พุตควรเป็น "3/5" ต้องพัฒนาโปรแกรมแก้ปัญหานี้

ผลคูณของ N เศษส่วนในรูปแบบลดรูปในภาษา C

ตัวอย่าง

อินพุต

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

วิธีการแก้ปัญหา

เพื่อแก้ปัญหานี้ เราสามารถคูณตัวส่วนและตัวเศษทั้งหมด เก็บผลลัพธ์ในตัวแปร prod_den และ prod_num ซึ่งจะเป็นตัวส่วนและตัวเศษสุดท้าย ต่อมาเราต้องหารูปแบบลดรูป โดยหาตัวหารร่วมมาก (GCD) ของ prod_num และ prod_den แล้วหาร prod_num และ prod_den ด้วย GCD ของแต่ละตัว

อัลกอริทึม

Start
ประกาศ struct fraction มีสมาชิก
    1. num, 2. den
In function int GCD(int a, int b)
    Step 1: ถ้า a == 0 แล้ว Return b
    Step 2: Return GCD(b % a, a)
In function int product(int n, fraction f[])
    Step 1: กำหนด 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: ประกาศและกำหนด 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: ประกาศ struct fraction f[3] = {{1,2}, {2,1}, {5,6}}
    Step 2: ประกาศและกำหนด n เป็น sizeof(f)/sizeof(f[0])
    Step 3: product(n, f)
Stop

ตัวอย่างโค้ด

#include <stdio.h>

struct fraction {
    int num;
    int den;
};

// ฟังก์ชันคืนค่า GCD ของ a และ b
int GCD(int a, int b) {
    if (a == 0)
        return b;
    return GCD(b % a, a);
}

// ฟังก์ชันพิมพ์ผลลัพธ์
int product(int n, fraction f[]) {
    int prod_num = 1, prod_den = 1;
    // หาผลคูณของตัวเศษและตัวส่วนทั้ง N ตัว
    for (int i = 0; i < n; i++) {
        prod_num *= f[i].num;
        prod_den *= f[i].den;
    }
    // หา GCD ของตัวเศษและตัวส่วนใหม่
    int gcd = GCD(prod_num, prod_den);
    // หารูปแบบลดรูป
    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