Pszeudokódját: kiszámításával rekurzív

szavazat
1

Már kapott egy követelmény (kihívást számomra legalábbis), hogy írjon egy logikai egy alkalmazásban. Nekem, hogy írjon egy üzleti logikát, ahol azt végre kell hajtania a következő funkciókat

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

Most tegyük ki az elemeket köteles szállítani a jelenlegi (A + B) lehet „X”

Szintén az egyes X járulhat hozzá a teljes áramfelvétel, így vennem kell számítani a teljes áramfelvétel újra ugyanolyan első lépés, beleértve az akkumulátor áramfelvétele

azaz

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

Most megint én kell számítani az elemeket szükséges. Mondjuk ezt az Y

azaz

hogy ellátási A + B + X”van szükségünk Y akkumulátorok száma.

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

Tud valaki segíteni nekem indulókészlete pszeudokód? Bármilyen javaslatot is nagyra értékelik,

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 ...
A kérdést 04/03/2010 19:32
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
0

Úgy tűnik számomra, hogy a pszeudo-kód már ott van, csak nem nagyon világos. De hátha ez az, amit szeretne:

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: Használhatja System.Linq ha szüksége funkciók dolgozni listák, mint például Sum ().

Válaszolt 04/03/2010 20:08
a forrás felhasználó

szavazat
0

A kérdés nem nagyon világos (mint mások megjegyezte megjegyzéseket), ezért hasznos lenne, ha tudna írni néhány konkrétabb vagy konkrét példát a számítás. Különben is, nekem úgy tűnik, hogy van néhány olyan számítást egy visszajelzést, és meg kell, hogy elérje a ponton, ahol a számítás leáll változik.

A matematikában ez leírható egy fix pont . Egy adott függvény f (a számítás) a fixpont egy olyan érték, hogy x = f (x) (ez azt jelenti, hogy ha újraszámolja a helyes értéket, akkor megáll változik). Nem vagyok biztos, hogy ez segíthet a kivitelezés, de ez mindenképpen egy hasznos fogalom, amelyek segítségével, ha gondolkodik a problémát.

Itt egy olyan eljárás példáját, amely kiszámítja egy fix-pont egy adott funkció (a C # 3.0 Func<T, T>küldötte). A módszer általános és képesnek kell lennie arra, hogy hasonlítsa össze az értékeket:

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 példát kiszámításához fix pont a cos függvény (lásd a második grafikon a jobb oldalon), ami akkor végre, mint ez:

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

Ez egy nagyon általános módon leírni néhány hurok fut, amíg nem talál egy stabil pont néhány számítás. Azonban az a kérdés nem egyértelmű, így ez nem lehet, amit keres ...

Válaszolt 04/03/2010 20:10
a forrás felhasználó

szavazat
0

Tennék valami mentén a következő:

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;
}
Válaszolt 04/03/2010 20:18
a forrás felhasználó

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