Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C प्रोग्राम: फ्लोटिंग पॉइंट अंकगणित के बिना परिमेय संख्याओं पर बाइनरी खोज

समस्या विवरण

हमें एक क्रमबद्ध सरणी दी जाती है जिसमें परिमेय संख्याएं (p/q रूप में) होती हैं। हमें दिए गए तत्व को बाइनरी खोज का उपयोग करके ढूंढना है, लेकिन फ्लोटिंग पॉइंट अंकगणित का उपयोग किए बिना।

परिमेय संख्या क्या है?

परिमेय संख्या p/q रूप में व्यक्त एक संख्या है जहां p और q पूर्णांक हैं (q ≠ 0)। उदाहरण: ⅔, ⅕, ¾।

तुलना रणनीति

दो परिमेय संख्याओं a = p1/q1 और b = p2/q2 की तुलना करने के लिए:

  • p1 × q2 और p2 × q1 की तुलना करें
  • यदि p1×q2 = p2×q1 → बराबर
  • यदि p1×q2 > p2×q1 → a बड़ा है
  • अन्यथा → b बड़ा है

C प्रोग्राम

#include <stdio.h>

struct Rational {
    int p;  // अंश
    int q;  // हर
};

int compare(struct Rational a, struct Rational b) {
    if (a.p * b.q == a.q * b.p)
        return 0;
    if (a.p * b.q > a.q * b.p)
        return 1;
    return -1;
}

int binarySearch(struct Rational arr[], int l, int r, struct Rational x) {
    if (r >= l) {
        int mid = l + (r - l) / 2;
        if (compare(arr[mid], x) == 0)
            return mid;
        if (compare(arr[mid], x) > 0)
            return binarySearch(arr, l, mid - 1, x);
        return binarySearch(arr, mid + 1, r, x);
    }
    return -1;
}

int main() {
    struct Rational arr[] = {{1, 4}, {2, 3}, {3, 2}, {7, 2}};
    struct Rational x = {3, 2};
    int n = sizeof(arr) / sizeof(arr[0]);
    printf("तत्व इंडेक्स %d पर मिला", binarySearch(arr, 0, n - 1, x));
    return 0;
}

आउटपुट

तत्व इंडेक्स 2 पर मिला

मुख्य लाभ

  • सटीकता: फ्लोटिंग-पॉइंट त्रुटियों से पूरी तरह बचा जाता है
  • दक्षता: O(log n) समय जटिलता
  • सटीकता: पूर्णांक अंकगणित का उपयोग करके सटीक तुलना

सावधानियां

  • सरणी क्रमबद्ध होनी चाहिए
  • ओवरफ्लो से बचने के लिए long long का उपयोग करें यदि अंश/हर बड़े हैं
  • हर (q) शून्य नहीं होना चाहिए
  1. - नेस्टेड फॉर लूप का उपयोग करके 1 से 9 तक की संख्याओं की चार घातें प्रिंट करने का C प्रोग्राम

    नेस्टेड लूप में एक लूप दूसरे लूप के अंदर रखा जाता है। नेस्टेड फॉर लूप का उदाहरण for (initialization; condition; operation){ for (initialization; condition; operation){ statement; } statement; } इस उदाहरण में, आंतरिक लूप बाहरी लूप की प्रत्येक एकल पुनरावृत्ति के लिए अपनी पूरी

  1. फॉर लूप का उपयोग करके 1 से N तक की सभी अभाज्य संख्याएं प्रदर्शित करने का C प्रोग्राम फॉर लूप का उपयोग करके 1 से N तक की सभी अभाज्य संख्याएं प्रदर्शित करने का C प्रोग्राम

    समस्या एक C प्रोग्राम लिखें जो 1 और n के बीच की सभी अभाज्य संख्याओं को प्रदर्शित करे, जहां n उपयोगकर्ता द्वारा रनटाइम पर दिया गया मान है। समाधान उपयोगकर्ता द्वारा रनटाइम पर दिए गए मान n के बीच 1 और n की सभी अभाज्य संख्याओं को प्रदर्शित करने के लिए C प्रोग्राम नीचे समझाया गया है। एल्गोरिथम उपयोगकर्

  1. C प्रोग्राम: आर्मस्ट्रांग नंबर्स (Armstrong Numbers) C प्रोग्राम: आर्मस्ट्रांग नंबर्स (Armstrong Numbers)

    हमें उपयोगकर्ता द्वारा दर्ज संख्या n की जांच करनी है कि यह आर्मस्ट्रांग संख्या है या नहीं। एक आर्मस्ट्रांग संख्या वह है जिसके अंकों को अंकों की संख्या (क्रम) की घात तक बढ़ाकर उनका योग करने पर मूल संख्या प्राप्त होती है। सूत्र: wxyz... = wⁿ + xⁿ + yⁿ + zⁿ + ... एल्गोरिदम START फंक्शन power(a, b): a^b