Pseudokode: beregning av den totale rekursivt

stemmer
1

Jeg har fått et krav (utfordrende for meg i alle fall) å skrive en logikk i et program. Jeg har til å skrive en forretningslogikk, hvor det skal utføre følgende funksjonalitet

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

Nå kan si batteriene som kreves for å forsyne strøm (A + B) være 'X'

Også hver X kan bidra til den totale strømforbruk, derav jeg trenger å beregne den totale strømforbruket på nytt på samme måte som første trinn inkludert batteri strømforbruk

dvs

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

Nå igjen jeg bør beregne batterier nødvendig. La oss si dette som Y

dvs

til forsyning A + B + X vi trenger Y antall batterier.

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

Kan noen hjelpe meg med første sett av pseudo? Enhver form for forslag er også verdsatt

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 ...
Publisert på 04/03/2010 klokken 18:32
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Det virker for meg at pseudo-kode som allerede er der, bare ikke helt klart. Men se om dette er hva du vil:

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: Du kan bruke System.Linq hvis du trenger funksjoner skal fungere på lister, som Sum ().

Svarte 04/03/2010 kl. 19:08
kilden bruker

stemmer
0

Spørsmålet er ikke veldig klart (som andre har nevnt i kommentarene), så det ville være nyttig om du kunne skrive litt mer konkret eller konkret eksempel på beregningen. Uansett, synes det for meg at du har noen beregning med en tilbakemelding, og du trenger for å nå et punkt der beregningen stopper endring.

I matematikk, kan denne bli beskrevet ved hjelp av et fast punkt . For en gitt funksjon f (beregningen) den Fixpoint er en verdi slik at x = f (x) (som betyr at hvis du beregne verdien på nytt, vil det slutte å endre). Jeg er ikke sikker på om dette kan hjelpe deg med implementeringen, men det er definitivt en nyttig konsept som du kan bruke når du tenker på problemet.

Her er et eksempel på en metode som beregner et fast punkt på en gitt funksjon (ved bruk av C # 3,0 Func<T, T>delegere). Metoden er generisk og må være i stand til å sammenligne verdiene:

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 har et eksempel på beregning fast punkt i et cos funksjon (se den andre grafen til høyre), som du kan implementere slik:

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

Dette er en meget generell måte å beskrive noen løkker som går inntil den finner et stabilt punkt av noen beregning. Imidlertid er spørsmålet ditt ikke veldig klart, så dette kan ikke være det du leter etter ...

Svarte 04/03/2010 kl. 19:10
kilden bruker

stemmer
0

Jeg ville gjøre noe langs linjene av følgende:

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;
}
Svarte 04/03/2010 kl. 19:18
kilden bruker

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