स्यूडोकोड: कुल कंप्यूटिंग रिकर्सिवली

वोट
1

मैं एक आवश्यकता एक आवेदन में एक तर्क लिखने के लिए (मुझे कम से कम के लिए चुनौतीपूर्ण) दिया गया है। मैं एक व्यावसायिक तर्क लिखने के लिए जिसमें यह निम्नलिखित कार्यक्षमता प्रदर्शन करना चाहिए है

Total current consumption = current from A elements + current from B elements.
A and B are different types of devices

अब कहते हैं कि बैटरी वर्तमान आपूर्ति करने की आवश्यकता की सुविधा देता है (ए + बी) हो 'एक्स'

इसके अलावा प्रत्येक एक्स कुल वर्तमान खपत में योगदान कर सकते हैं, इसलिए मैं सिर्फ बैटरी वर्तमान खपत सहित पहले कदम के रूप में फिर से कुल वर्तमान खपत की गणना करनी है

अर्थात

`Total current consumed : A + B + X`  
where X is the current consumption of the battery 

अब फिर से मैं आवश्यक बैटरी की गणना करना चाहिए। हमें वाई के रूप में इस मान लीजिए

अर्थात

आपूर्ति एक करने के लिए + बी + एक्स हम बैटरी के वाई नंबर की जरूरत है।

Now check whether X == Y ?
If same, then return Y and exit 
else add more X to the sum (A + B  + X) till X == Y

किसी को भी मुझे स्यूडोकोड की प्रारंभिक सेट के साथ मदद कर सकते हैं? सुझाव किसी भी तरह का भी सराहना की

Yes the end result this logic should return is number of batteries required. However it should return this result only after computing the total current consumption recursively till X == Y, where 
A : total current consumption of some active elements in a system.
B : total current consumption of some passive elements in a system

Total current consumption is A + B
to supply current of (A+B) amperes i require 'X' no. of batteries.
However each battery also adds some delta amount of current to the total value i.e 
A + B + X
if the batteries required to supply this delta is still 'X', then return X as the end result, else add more batteries --> calculate current --> no of batteries required ---> check again and so on ...
04/03/2010 को 19:32
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
0

मुझे ऐसा लगता है कि छद्म कोड पहले से ही वहाँ सिर्फ बहुत स्पष्ट नहीं है,। लेकिन देखना है कि अगर यह तुम क्या चाहते है:

private const decimal CurrentSuppliedPerBattery = 100;
private const decimal CurrentNeededPerBattery = 5;
private int BatteriesNeeded( List<A> As, List<B> Bs) {
    decimal currentToSupply = As.Sum( eachA => eachA.Current ) + Bs.Sum( eachB => eachB.Current );
    int batteries = 0;
    while(currentToSupply > 0)
    {
        int extraBatteries = Floor(1.0*currentToSupply/CurrentSuppliedPerBattery );
        batteries += extraBatteries;
        currentToSupply -= extraBatteries*CurrentSuppliedPerBattery;
        currentToSupply += extraBatteries*CurrentNeededPerBattery;
    }
    return batteries ;
}

पुनश्च: यदि आपको System.Linq उपयोग कर सकते हैं यदि आप, सूची पर काम करने के लिए कार्यों की जरूरत है योग की तरह ()।

04/03/2010 को 20:08
का स्रोत उपयोगकर्ता

वोट
0

प्रश्न बहुत स्पष्ट (के रूप में दूसरों टिप्पणी में उल्लेख किया है) नहीं है, तो यह उपयोगी हो अगर आप गणना के कुछ और ठोस या विशिष्ट उदाहरण लिख सकता होगा। वैसे भी, मुझे लगता है कि आप एक राय के साथ कुछ गणना है और आप एक बिंदु है, जिसमें गणना बदल रहा बंद हो जाता है तक पहुँचने के लिए की आवश्यकता है।

गणित में, यह एक का उपयोग कर वर्णित किया जा सकता निश्चित सूत्री । किसी दिए गए समारोह के लिए (अपने गणना) fixpoint एक मूल्य ऐसी है कि है एक्स = f (x) (जिसका अर्थ है कि यदि आप मूल्य फिर से पुनर्गणना, इसे बदलने बंद हो जाएगा)। मुझे यकीन है कि अगर यह आपके कार्यान्वयन के साथ मदद कर सकता है नहीं कर रहा हूँ, लेकिन यह निश्चित रूप से एक उपयोगी अवधारणा है कि आप जब समस्या के बारे में सोच का उपयोग कर सकते है।

यहाँ एक विधि है कि किसी भी समारोह (सी # 3.0 का उपयोग करने का एक निश्चित बिंदु की गणना करता है का एक उदाहरण है Func<T, T>प्रतिनिधि)। विधि सामान्य है और मूल्यों की तुलना करने में सक्षम होने की जरूरत है:

static T FixedPoint<T>(T initial, Func<T, T> calculateNext) 
    where T : IComparable<T> {
  T state = initial;
  T previous = default(T);
  do {
    previous = state;
    state = calculateNext(state);
  } while (previous.CompareTo(state) != 0);
  return state;
}

विकिपीडिया की गणना एक की निश्चित बिंदु का एक उदाहरण है क्योंकि समारोह (दाईं ओर दूसरा ग्राफ देखें) है, जो आपको इस तरह लागू कर सकते हैं:

double val = FixedPoint(-1.0, f => Math.Cos(f));
Console.WriteLine(val);

यह एक बहुत ही सामान्य तरीके से कुछ पाशन जब तक यह कुछ गणना की एक स्थिर बिंदु पाता है चलाता है कि वर्णन करने के लिए है। हालांकि, अपने प्रश्न बहुत स्पष्ट नहीं है, इसलिए इस नहीं हो सकता है कि आप क्या ढूंढ रहे हैं ...

04/03/2010 को 20:10
का स्रोत उपयोगकर्ता

वोट
0

मैं निम्नलिखित की तर्ज पर कुछ करना होगा:

double CurrentFromEachBattery=100.0;
double CurrentNeededPerBattery=10.0;

int NumberOfBatteriesRequired(double activeCurrent, double passiveCurrent)
{
    int batteries=0;
    double currCurrent=0.0;
    double neededCurrent=activeCurrent+passiveCurrent;

    while( currCurrent < neededCurrent )
    {
        int newBatt = Math.Ceiling((neededCurrent - currCurrent) / CurrentFromEachBattery);
        neededCurrent += newBatt * CurrentNeededPerBattery;
        currCurrent += newBatt * CurrentFromEachBattery;
        batteries += newBatt;
    }

    return batteries;
}
04/03/2010 को 20:18
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more