Vraag & Antwoord

Programmeren

[QB] Som van variabelen optellen.

Anoniem
no_name
17 antwoorden
  • Ik heb nu dit werkend nodig. voorbeeld:

    A = B/C

    B is een getal en dat getal wordt gedeelt door C en C is B min 1 en dan weer min 1. Maar dat heb ik al.

    Dus hier komt het op neer

    A = B/C-1
    A = B/C-1-1
    A = B/C-1-1-1
    A = B/C-1-1-1-1
    enz.

    En uit A komen dan verschillende getallen. Daar moet ik de som van hebben. Maar ik weet niet hoe ik dat moet doen. Kan ik ergens de getallen opzij zetten zodat Qbasic er later weer me rekenen kan? of kan het anders?
  • Als je weet hoeveel het er zijn:
    [code:1:8d4695823e]
    'evt hier aangeven wat variabele 'aantal' is, anders 'aantal' veranderen
    dim getallen(aantal)

    getallen(1) = B/C-1
    getallen(2) = B/C-1-1
    getallen(3) = B/C-1-1-1
    getallen(4) = B/C-1-1-1-1
    getallen(5) = B/C-1-1-1-1-1
    'enzovoort

    for x = 1 to aantal
    totaal = totaal + getallen(x)
    next
    [/code:1:8d4695823e]
  • Hieronder is er van uitgegaan dat je het getal waarmee je begint ook bij het totaal wil optellen. De getallen 50 en 20 moet je aan je eigen situatie aanpassen.

    [size=9:729bb960ca]Dim A(20)
    Begin = 50:Totaal = 0
    For x = 1 to 20
    A(x) = Begin/(Begin-x)
    Totaal = Totaal + A(x)
    Next x
    Totaal = Begin + Totaal
    [/size:729bb960ca]
  • Bij nader inzien vermoed ik dat het niet de bedoeling is dat op het eind het begingetal nog eens bij het totaal wordt opgeteld. Waarschijnlijk wil je de berekening gebruiken in een situatie waarbij je tot 0 terugtelt. Uitgaande van mijn vorige code met begingetal 50, moet de lus dan worden: For x = 1 to 49. De laatste regel moet dan vervallen, de berekende variabele Totaal (zonder Begin er bij opgeteld) is dan tevens het eindtotaal. De opdracht Dim A(20) uiteraard wijzigen in Dim A(49).
  • Nog een aanvulling: bovenstaand Basic-programmaatje [b:16903017a2]berekent[/b:16903017a2] alleen het gevraagde. Wil je in QBasic het eindtotaal ook nog op het scherm zien, dan moet je er uiteraard nog een laatste opdracht aan toevoegen, nl:
    Print Totaal
  • Bedankt voor de reactie's, maar hier kan ik niet mee wat ik nodig heb. Het moet zo gaan.

    [code:1:3e6cc3d1db]
    screen 12
    X = 1
    DO

    X = X + 1
    PRINT X
    SLEEP 1
    LOOP

    [/code:1:3e6cc3d1db]
    Telkens als ie LOOPt wordt X 1 hoger. Als X dan tot een bepaalt getal komt moet ie alle waarden die X daarvoor gehad heeft optellen.
    Bijv.
    X = 1
    X = 2
    X = 3
    Dan moet ie die optellen is 6. (en dan moet ie dat getal vergelijken, maar dat snap ik wel.) Als dat is gebeurt dan doet ie het volgende.
    X = 1
    X = 2
    X = 3
    X = 4
    totaal is 10. enzovoort. Zo moet het als het waare zijn.
  • [quote:f75f3176ad="webspider"]Als je weet hoeveel het er zijn:
    [code:1:f75f3176ad]
    'evt hier aangeven wat variabele 'aantal' is, anders 'aantal' veranderen
    dim getallen(aantal)

    getallen(1) = B/C-1
    getallen(2) = B/C-1-1
    getallen(3) = B/C-1-1-1
    getallen(4) = B/C-1-1-1-1
    getallen(5) = B/C-1-1-1-1-1
    'enzovoort

    for x = 1 to aantal
    totaal = totaal + getallen(x)
    next
    [/code:1:f75f3176ad][/quote:f75f3176ad]

    Dat kan ik wel doen, maar het loopt in de miljoenen dus heb ik variabelen nodig.
  • [quote:63ad7e4c45="no_name"]Ik heb nu dit werkend nodig. voorbeeld:

    A = B/C

    B is een getal en dat getal wordt gedeelt door C en C is B min 1 en dan weer min 1. Maar dat heb ik al.

    Dus hier komt het op neer

    A = B/C-1
    A = B/C-1-1
    A = B/C-1-1-1
    A = B/C-1-1-1-1
    enz.

    En uit A komen dan verschillende getallen. Daar moet ik de som van hebben. Maar ik weet niet hoe ik dat moet doen. Kan ik ergens de getallen opzij zetten zodat Qbasic er later weer me rekenen kan? of kan het anders?[/quote:63ad7e4c45]

    SomAantal = (aantal * (B/C)) - (((aantal^2)/2) + (aantal*0.5))
  • Als je (uitgaande van de probleemstelling van gisteren) ook telkens de subtotalen wil weergeven (wat ik opmaak uit je tekst), dan hoeft het programma daarvoor niet wezenlijk te veranderen, je moet dan enkel een printopdracht geven om de subtotalen (die toch al berekend worden) op het scherm weer te geven.
    Probeer dit eens (in Qbasic uiteraard), voor de duidelijkheid laat ik alle tussenberekeningen weergegeven:
    [size=9:5835d60054]
    Dim A(4)
    Begin = 4:Totaal = 0
    For x = 1 to 3
    A(x) = Begin/(Begin-x)
    Totaal = Totaal + A(x)
    Print x, A(x), Totaal
    Next x
    [/size:5835d60054]
    Je krijgt nu 3 kolommen. In de 1e wordt de waarde van x weergegeven, in de 2e A/A-1, en in de 3e het (sub)totaal. Je krijgt dan:
    in [b:5835d60054]kolom[/b:5835d60054] 1: 1 - 2 - 3
    In [b:5835d60054]kolom[/b:5835d60054] 2: 1,33 - 2 - 4
    In [b:5835d60054]kolom[/b:5835d60054] 3: 1,33 - 3,33 - 7,33

    Is ook dit niet wat je wenst, dan graag een [b:5835d60054]duidelijke omschrijving[/b:5835d60054] van het in principe eenvoudige probleem.
    PS: Ik begrijp niet wat je bedoelt met: "en dan moet ie dat vergelijken".
  • [quote:537b034608="Aimable"]Als je (uitgaande van de probleemstelling van gisteren) ook telkens de subtotalen wil weergeven (wat ik opmaak uit je tekst), dan hoeft het programma daarvoor niet wezenlijk te veranderen, je moet dan enkel een printopdracht geven om de subtotalen (die toch al berekend worden) op het scherm weer te geven.
    Probeer dit eens (in Qbasic uiteraard), voor de duidelijkheid laat ik alle tussenberekeningen weergegeven:
    [size=9:537b034608]
    Dim A(4)
    Begin = 4:Totaal = 0
    For x = 1 to 3
    A(x) = Begin/(Begin-x)
    Totaal = Totaal + A(x)
    Print x, A(x), Totaal
    Next x
    [/size:537b034608]
    Je krijgt nu 3 kolommen. In de 1e wordt de waarde van x weergegeven, in de 2e A/A-1, en in de 3e het (sub)totaal. Je krijgt dan:
    in [b:537b034608]kolom[/b:537b034608] 1: 1 - 2 - 3
    In [b:537b034608]kolom[/b:537b034608] 2: 1,33 - 2 - 4
    In [b:537b034608]kolom[/b:537b034608] 3: 1,33 - 3,33 - 7,33

    Is ook dit niet wat je wenst, dan graag een [b:537b034608]duidelijke omschrijving[/b:537b034608] van het in principe eenvoudige probleem.
    PS: Ik begrijp niet wat je bedoelt met: "en dan moet ie dat vergelijken".[/quote:537b034608]

    Met "en dan moet ie dat vergelijken" bedoel ik dat het totaal met een cijfer dat ergens anders is berekent wordt vergelijkt.

    Wat jij op gaf is wel handig. Maar de getallen die ik heb zijn al berekent. En kunnen niet tussen For en next commando worden geplaatst.

    Is er niet iets dat je de getallen ergens kunt opslaan?
  • Zoals ik in het programmaatje getallen opsla in A(x), waarbij x variabel is, zo kun je ook andere waarden opslaan.
    Ik heb overigens geen flauw benul waar je heen wil. Als je nu eens in gewone woorden je probleem goed en duidelijk zou omschrijven, dan komen we misschien verder, want op deze manier weet ik niet wat ik hier verder mee aan moet.
  • [quote:e02760873c="no_name"][quote:e02760873c="Aimable"]Als je (uitgaande van de probleemstelling van gisteren) ook telkens de subtotalen wil weergeven (wat ik opmaak uit je tekst), dan hoeft het programma daarvoor niet wezenlijk te veranderen, je moet dan enkel een printopdracht geven om de subtotalen (die toch al berekend worden) op het scherm weer te geven.
    Probeer dit eens (in Qbasic uiteraard), voor de duidelijkheid laat ik alle tussenberekeningen weergegeven:
    [size=9:e02760873c]
    Dim A(4)
    Begin = 4:Totaal = 0
    For x = 1 to 3
    A(x) = Begin/(Begin-x)
    Totaal = Totaal + A(x)
    Print x, A(x), Totaal
    Next x
    [/size:e02760873c]
    Je krijgt nu 3 kolommen. In de 1e wordt de waarde van x weergegeven, in de 2e A/A-1, en in de 3e het (sub)totaal. Je krijgt dan:
    in [b:e02760873c]kolom[/b:e02760873c] 1: 1 - 2 - 3
    In [b:e02760873c]kolom[/b:e02760873c] 2: 1,33 - 2 - 4
    In [b:e02760873c]kolom[/b:e02760873c] 3: 1,33 - 3,33 - 7,33

    Is ook dit niet wat je wenst, dan graag een [b:e02760873c]duidelijke omschrijving[/b:e02760873c] van het in principe eenvoudige probleem.
    PS: Ik begrijp niet wat je bedoelt met: "en dan moet ie dat vergelijken".[/quote:e02760873c]

    Met "en dan moet ie dat vergelijken" bedoel ik dat het totaal met een cijfer dat ergens anders is berekent wordt vergelijkt.
    [/quote:e02760873c]
    Dus het gaat jouw alleen om het uiteindelijke resultaat? Die vergeleken dient te worden met een ander getal.

    Zo ja, heb je mijn vorige reaktie, met de formule, niet gezien ofzo? :-?
    [quote:e02760873c="no_name"]
    Wat jij op gaf is wel handig. Maar de getallen die ik heb zijn al berekent. En kunnen niet tussen For en next commando worden geplaatst.

    Is er niet iets dat je de getallen ergens kunt opslaan?[/quote:e02760873c]
    Wat wil je nou?
    Het gaat je toch alleen maar om het uiteindelijke resultaat? :-?
  • [quote:48a4a1fcf0="no_name"]Ik heb nu dit werkend nodig. voorbeeld:

    A = B/C

    B is een getal en dat getal wordt gedeelt door C en [b:48a4a1fcf0]C is B min 1 en dan weer min 1[/b:48a4a1fcf0]. Maar dat heb ik al.

    Dus hier komt het op neer

    A = B/C-1
    A = B/C-1-1
    A = B/C-1-1-1
    A = B/C-1-1-1-1
    enz.

    En uit A komen dan verschillende getallen. [b:48a4a1fcf0]Daar moet ik de som van hebben[/b:48a4a1fcf0]. Maar ik weet niet hoe ik dat moet doen. Kan ik ergens de getallen opzij zetten zodat Qbasic er later weer me rekenen kan? of kan het anders?[/quote:48a4a1fcf0]
    hmm, die beschrijving van de berekening van C komt niet overeen met het voorbeeld.
    Mijn eerdere formule gaat trouwens uit van het voorbeeld met de twee constanten B en C.

    Het lijkt me beter als je gewoon met een concreet voorbeeld komt.
  • Misschien is dit de bedoeling:

    CALL Bereken(Vergelijk)
    ' De routine Bereken geeft als resultaat de te vergelijken waarde.

    Deelgetal = 5645
    Startwaarde = 12
    MaxWaarde = 456
    Result = 0
    CALL Zoekuit(DeelGetal,StartWaarde,MaxWaarde,Result)

    Print Result
    IF Vergelijk = Result THEN PRINT "O.K." ELSE PRINT "FOUT"

    END

    Als je wilt dat de variabele Startwaarde ongewijzigd blijft, roep de routine dan aan met Startwaarde * 1.
    i.p.v. structuurspatie's breng ik even underscores aan.

    SUB Zoekuit(DeelWaarde,Beginwaarde,MaximumWaarde,TotaalGevonden)
    __TotaalGevonden = 0 ' Voor alle zekerheid
    __If BeginWaarde > MaximumWaarde THEN EXIT SUB ' Fout!
    __DO
    ____INCR TotaalGevonden,DeelWaarde / BeginWaarde
    ____IF BeginWaarde = MaximumWaarde THEN EXIT LOOP
    ____INCR BeginWaarde
    __LOOP
    END SUB

    SUB Bereken(Resultaat)
    __?
    __?
    END SUB
  • Kan je niet gewoon doen:

    [code:1:a7bab345f1]a=a+(b/c)[/code:1:a7bab345f1]
  • Laat maar, ik heb zelf nu wat bedacht. Maar toch bedankt voor jullie inspanningen!.
  • [quote:4b610a52a3="no_name"]Laat maar…..[/quote:4b610a52a3]De kwaliteit van de antwoorden is mede afhankelijk van de formulering van het probleem. Jouw probleem was voor de lezers niet helemaal duidelijk, dat blijkt uit de reacties. Als nu bij herhaling om uitleg wordt gevraagd en je weigert die uitleg te verstrekken, dan zullen diezelfde lezers minder geneigd zijn om nog op vragen van jou te reageren.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.