Ψευδοκώδικας: Υπολογισμός του συνολικού αναδρομικά

ψήφοι
1

Μου δόθηκε μια απαίτηση (πρόκληση για μένα τουλάχιστον) να γράψει μια λογική σε μια εφαρμογή. Έχω να γράψω μια επιχειρηματική λογική στην οποία θα πρέπει να εκτελέσει τις ακόλουθες λειτουργίες

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

Τώρα ας πούμε οι μπαταρίες που απαιτούνται για τον εφοδιασμό της τρέχουσας (Α + Β) να είναι «X»

Επίσης κάθε Χ μπορεί να συμβάλει στη συνολική κατανάλωση ρεύματος, ως εκ τούτου, εγώ πρέπει να υπολογίσει εκ νέου τη συνολική κατανάλωση ρεύματος ακριβώς όπως το πρώτο βήμα συμπεριλαμβανομένης της μπαταρίας κατανάλωση ρεύματος

δηλαδή

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

Τώρα και πάλι εγώ θα πρέπει να υπολογίσει τις μπαταρίες που απαιτούνται. Ας πούμε αυτό ως Υ

δηλαδή

να εφοδιασμού Α + Β + X»χρειαζόμαστε αριθμός Υ των μπαταριών.

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

ps: Μπορείτε να χρησιμοποιήσετε System.Linq αν χρειαστεί λειτουργίες για να εργαστούν σε καταλόγους, όπως Sum ().

Απαντήθηκε 04/03/2010 στις 20:08
πηγή χρήστη

ψήφοι
0

Το ερώτημα δεν είναι πολύ σαφής (όπως και άλλοι σημειώνεται στα σχόλια), οπότε θα ήταν χρήσιμο εάν θα μπορούσατε να γράψετε κάποιο πιο συγκεκριμένο ή συγκεκριμένο παράδειγμα του υπολογισμού. Τέλος πάντων, νομίζω ότι έχετε κάποια υπολογισμών, με σχόλια και θα πρέπει να φτάσει σε ένα σημείο στο οποίο ο υπολογισμός σταματήσει να αλλάζει.

Στα μαθηματικά, αυτό μπορεί να περιγραφεί χρησιμοποιώντας ένα σταθερό σημείο . Για μια δεδομένη συνάρτηση f (υπολογισμός σας) το σταθερού σημείου είναι μια τιμή τέτοια ώστε x = f (x) (που σημαίνει ότι αν υπολογίσει εκ νέου και πάλι την τιμή, θα σταματήσει να αλλάζει). Δεν είμαι σίγουρος αν αυτό μπορεί να σας βοηθήσει με την εφαρμογή σας, αλλά είναι σίγουρα μια χρήσιμη ιδέα που μπορείτε να χρησιμοποιήσετε όταν σκεφτόμαστε το πρόβλημα.

Εδώ είναι ένα παράδειγμα μιας μεθόδου που υπολογίζει ένα σταθερό σημείο του μια συγκεκριμένη λειτουργία (χρησιμοποιώντας C # 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;
}

Wikipedia έχει ένα παράδειγμα υπολογισμού σταθερό σημείο ενός cos λειτουργίας (δείτε το δεύτερο γράφημα στα δεξιά), το οποίο μπορείτε να εφαρμόσετε ως εξής:

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

Αυτό είναι ένα πολύ γενικό τρόπο για να περιγράψει κάποια looping που τρέχει μέχρι να βρει ένα σταθερό σημείο κάποιου υπολογισμού. Ωστόσο, η ερώτησή σας δεν είναι πολύ σαφής, έτσι αυτό μπορεί να μην είναι αυτό που ψάχνετε για ...

Απαντήθηκε 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