मुझे ए ^ बी की गणना करने के लिए एक फ़ंक्शन लिखना है लेकिन मुझे pow का उपयोग करने की अनुमति नहीं है। कोई विचार? मै खो गया हूँ। ऐसा लगता है कि समस्या अब मुख्य रूप में है... कहीं न कहीं यह वही मिलता है जो मैं इसकी विशेषता बताता हूं। तो अगर मैं उस vys = 1 को मुख्य रूप से सेट करता हूं तो मुझे आउटपुट में 1 मिलता है ..

#include <stdio.h>
#include <time.h>
#include <math.h>
#include <unistd.h>

void multiplied(int b, int n)
{
  int i=1, vys=1;
  while (i<=n)
  {
    vys *=b;

    i++;
  }
  return vys;
}


main(void)
{
  int b=0, n=0, vys=1;
  printf("Give numbers b and n but they must be in interval <0,10>!\n");
  scanf("%d %d", &b, &n);
  if ((b < 0 || b>10) || (n<0 || n>10))
  {
    printf("Numbers are not in interval <0,10>!\n");
  }
  else
  {
    printf("Number is in interval so i continue...\n");
    sleep(2);
   vys= multiplied(&b, &n);
    printf("%d", vys);
}
c
-4
Dušo Morháč 8 मई 2018, 17:24

2 जवाब

सबसे बढ़िया उत्तर

यहां आपके पास एक साधारण कोड है:

#include <stdio.h>

long long intpow(int a, int b)
{
    long long tempres = 1;
    while(b--) 
        tempres *= a;
    return tempres;
}

int main(void) {

    printf("%lld\n", intpow(5,10));
    return 0;
}

परिणाम को समायोजित करने के लिए आपको बहुत बड़ा int चाहिए।

आप इसके साथ स्वयं खेल सकते हैं: https://ideone.com/4JT6NQ

0
P__J__ 8 मई 2018, 18:31

चलो स्पष्ट हो।

सबसे पहले, यह

void multiplied(int *b, int *n)

एक इंट लौटाता है, इसलिए ऐसा कहें।

int multiplied(int *b, int *n)

इसके बाद, आपने मुख्य रूप से वैरिएबल इनिशियलाइज़ किया: यहाँ भी ऐसा ही करें।

  int i, vys;

इस कदर:

  int i=1, vys=1;

अब आइए लूप को देखें:

  while (i<=n)
  {
    vys=*b**b;

    i++;
  }

जैसा कि यह खड़ा है, आप लूप में बार-बार vys सेट कर रहे हैं। आप गुणा करना चाहते हैं, उदा। 2, फिर 2*2, फिर 2*2*2, .... यदि आप दो की शक्ति चाहते हैं:

  while (i<=n)
  {
    vys *= *b;

    i++;
  }

अब, आपको पॉइंटर्स पास करने की आवश्यकता नहीं है।

int multiplied(int b, int n)
{
  int i=1, vys=1;
  while (i<=n)
  {
    vys *= b;

    i++;
  }
  return vys;
}

संपादित करें:

जब आप फ़ंक्शन को कॉल करते हैं तो देखें:

main(void)
{
   int b=0, n=0, vys;

   //input and checking code as you have it

    multiplied(&b, &n); //<---- return ignored
    printf("%d", vys); //<-- print uninitialsed local variable
}

आप अंतिम दो पंक्तियों को बदलें:

    vys = multiplied(&b, &n); //<---- return captured
    printf("%d", vys); //<-- print returned variable

2 संपादित करें:

फ़ंक्शन में int का उपयोग करने के लिए परिवर्तन के साथ और पॉइंटर्स नहीं, इनट्स पास करें उनके पते नहीं:

    vys = multiplied(b, n); //<---- pass the ints not their addresses
    printf("%d", vys); //<-- print returned variable, which should vary now
1
doctorlove 8 मई 2018, 18:26