Pseudo-Code: Berechnung der Gesamt rekursiv

stimmen
1

Ich habe eine Anforderung (eine Herausforderung für mich zumindest) gegeben eine Logik in einer Anwendung zu schreiben. Ich habe eine Business-Logik zu schreiben, wobei es die folgenden Funktionen ausführen sollte

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

Lassen Sie uns nun sagen , dass die benötigten Batterien den Strom zu versorgen (A + B) ‚X‘

Auch kann jeder X auf den Gesamtstromverbrauch beitragen, daher muss ich den Gesamtstromverbrauch wieder nur als ersten Schritt, einschließlich der Batteriestromverbrauch berechnen

dh

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

Nun wieder soll ich die Batterien erforderlich berechnen. Lassen Sie uns sagen, dass dies als Y

dh

zur Versorgung A + B + X“brauchen wir Y Anzahl der Batterien.

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

Kann mir jemand mit anfänglichem Satz von Pseudo-Code helfen? Jede Art von Vorschlag wird auch geschätzt

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 ...
Veröffentlicht am 04/03/2010 um 19:32
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
0

Es scheint mir, dass der Pseudo-Code ist schon da, nur nicht ganz klar. Aber sehen, ob dies ist, was Sie wollen:

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 ;
}

ps: Sie können System.Linq verwenden, wenn Sie Funktionen benötigen auf Listen zu arbeiten, wie Sum ().

Beantwortet am 04/03/2010 um 20:08
quelle vom benutzer

stimmen
0

Die Frage ist nicht ganz klar (wie andere in den Kommentaren angegeben), so wäre es nützlich, wenn Sie etwas konkreter oder konkretes Beispiel für die Berechnung schreiben können. Wie auch immer, es scheint mir, dass Sie einige Berechnung mit einem Feedback haben und Sie müssen einen Punkt erreichen, in dem die Berechnung zu ändern aufhört.

In der Mathematik kann dies mit einem beschriebenen Festkomma . Für eine gegebene Funktion f (Ihre Berechnung) ist der Fixpunkt einen Wert , so dass x = f (x) ( das heißt, wenn Sie den Wert wieder neu zu berechnen, stoppt es zu ändern). Ich bin mir nicht sicher , ob dies Ihnen bei der Implementierung helfen kann, aber es ist auf jeden Fall ein nützliches Konzept , die Sie verwenden können , wenn über das Problem nachzudenken.

Hier ist ein Beispiel für ein Verfahren , das einen Festpunkt einer gegebenen Funktion (unter Verwendung von C # 3.0 berechnet Func<T, T>delegieren). Das Verfahren ist generisch und muss in der Lage sein , die Werte zu vergleichen:

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;
}

Wikipedia hat ein Beispiel für die Berechnung festPunkt eine cos - Funktion (siehe zweite Grafik rechts), die Sie wie folgt implementieren:

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

Dies ist ein sehr allgemeiner Weise einige Looping zu beschreiben, die ausgeführt wird, bis sie einen stabilen Punkt einiger Berechnung findet. Allerdings ist Ihre Frage nicht ganz klar, so kann dies nicht sein, was Sie suchen ...

Beantwortet am 04/03/2010 um 20:10
quelle vom benutzer

stimmen
0

Ich würde etwas entlang der Linien der folgenden Aktionen ausführen:

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;
}
Beantwortet am 04/03/2010 um 20:18
quelle vom benutzer

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