1. #1
    wartaal's Avatar
    Registered
    02/02/05
    Posts
    880
    iTrader
    1 (100%)
    Mentioned
    1 Post(s)
    Reputation
    1/19

    Vergelijking ASP.NET

    Hey,

    We zijn op school net hiermee begonnen, maar loop een beetje vast nu.

    Het is de bedoeling om y = 1 + x + x^2 + ... + x^n te berekenen.

    x en n moeten ingegeven worden door de gebruiker. Heb tot nu toe dit:

    Mijn bereken knop:
    Code:
     protected void bereken_Click(object sender, EventArgs e)
            {
                decimal getal1 = decimal.Parse(waarde1.Text);
                decimal getal2 = decimal.Parse(waarde2.Text);
    
    
                decimal futureValue = this.CalculateFutureValue(getal1, getal2);
                lblUitkomst.Text = futureValue.ToString();
    
    
            }
    Mijn loop

    Code:
    private decimal CalculateFutureValue(decimal getal1,decimal getal2)
    {
        decimal futureValue = 0;
                for (decimal i = 0; i >= getal2; i++)
                {
                    futureValue += (futureValue + 1) * (getal1 * getal1);
    
                   
                }
                return futureValue;
    
    }
    Mijn futureValue returned iedere keer een 0 in mijn lblUitkomst. Iemand enig idee hoe dit komt?

    Alvast bedankt voor de hulp
    no votes  

  2. #2
    Parnakra's Avatar
    Registered
    15/04/04
    Location
    Izegem
    Posts
    6,095
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Enerzijds moet je het wiskundig inzicht hebben om te zien dat je x+x²+x³ kan schrijven als x*(1+x*(1+x))) (zoek eens op de regel van Horner).

    Anderzijds moet je weten wat recursie inhoudt en hoe je het toepast.

    Dan is dit een relatief simpel probleem.
    no votes  

  3. #3
    Mee's Avatar
    Registered
    19/02/03
    Location
    Herent
    Posts
    13,647
    iTrader
    8 (100%)
    Mentioned
    0 Post(s)
    Reputation
    0/17
    Je kan het moeilijk maken ja, maar eenvoudig gaat het ook:

    Forluske van 0 tot n, en dan elke keer uw tussenresultaat + x^i doen:

    Code:
    int y = 0; //Resultaat
    int x = 5; //Begin
    int n = 3; 
    
    for(int i =0; i < n; i++)
    {
        y += x^i;
    }
    Er vanuit gaande dat je iets gemakkelijk tot de n-de macht kan verheffen natuurlijk.

    edit: Math.Pow kan je gebruiken voor met exponenten te werken, maar vermits het voor school is zal het wel degelijk meer naar Parnakra's richting zijn...
    Last edited by Mee; 15-02-2010 at 16:57.
    no votes  

  4. #4
    Parnakra's Avatar
    Registered
    15/04/04
    Location
    Izegem
    Posts
    6,095
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Quote Originally Posted by Mee View Post
    This quote is hidden because you are ignoring this member. Show
    Je kan het moeilijk maken ja, maar eenvoudig gaat het ook:
    Als je het over efficiëntie hebt, is mijn oplossing véél beter dan wat jij voorstelt.
    Last edited by Parnakra; 15-02-2010 at 17:25.
    no votes  

  5. #5
    wartaal's Avatar
    Registered
    02/02/05
    Posts
    880
    iTrader
    1 (100%)
    Mentioned
    1 Post(s)
    Reputation
    1/19
    Hmm, ik krijg al uitkomsten, maar die zitten er telkens precies een paar getallen naast. Volgens mij maak ik nog ergens een denkfout ofzo.

    Dit heb ik nu:

    Code:
    private decimal CalculateFutureValue(decimal getal1,decimal getal2)
    {
        decimal futureValue = 0;
                for (decimal i = 0; i < getal2; i++)
                {
                    futureValue += getal1*(getal1+1);
    
                   
                }
                return futureValue;
    
    }
    no votes  

  6. #6
    Albireo's Avatar
    Registered
    21/10/05
    Location
    Herentals
    Posts
    1,515
    iTrader
    5 (100%)
    Mentioned
    0 Post(s)
    Reputation
    2/13
    recursion makes my head explode

    zonder recursie maar toch ook efficiënt omdat het gebruik maakt van het feit dat x^n = x^(n-1) * x
    Code:
    static decimal CalculateFutureValue(decimal x, int n) {
                decimal y = 1; // x^0==1
                decimal x1 = 1;
                for (int i = 1; i <= n; i++) {
                    x1 *= x;
                    y += x1;
                }
                return y;
            }
    "And we wept, Precious. We wept to be so alone." --- Gollum
    "Sometimes there are no words. No clever quotes to neatly sum up what happened that day. Sometimes, the day just . . . ends." --- Hotch (Criminal Minds)
    no votes  

  7. #7
    wartaal's Avatar
    Registered
    02/02/05
    Posts
    880
    iTrader
    1 (100%)
    Mentioned
    1 Post(s)
    Reputation
    1/19
    Dat werkt Heel erg bedankt!
    no votes  

  8. #8
    Cycloon's Avatar
    Registered
    18/01/04
    Location
    Melle
    Posts
    10,535
    iTrader
    56 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/102
    Code:
    private decimal CalculateFutureValue(decimal getal1,decimal getal2)
    {
            decimal futureValue = 0;
            for (decimal i = 0; i < getal2; i++)
                futureValue = futureValue*getal1+1;
            return futureValue;
    }
    In de veronderstelling dat getal1 je 'x' is. (de methode die parnakra aanreikte).

    Eventueel i <= getal2 gebruiken als getal2 == n is, in het geval dat getal2 je aantal termen aanduidt is alles ok.
    “In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
    PSN: Cycloon - Final Fantasy XIV: A realm reborn character
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in