Kansberekening Java Applet

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedenmiddag Tweakers,

Ik moet voor school een Java Applet maken waarin ik de binominaalcoefficient moet kunnen uitrekenen, dus kansberekening (n;k) "n" boven "k".
Nu had ik de layout al geschreven, alleen heb ik geen flauw idee hoe ik de EventHandler moet schrijven.
Ik had wel al bedacht dat ik iets met een integer fac moet doen, maar hoe verwerk ik dit erin?
Dit is wat ik nu heb:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

/**
  *
  * beschrijving
  *
  * @version 1.0 van 7-12-2009
  * @author
  */

public class kansberekning extends Applet {
  // Begin variabelen
  private Label label1 = new Label();
  private Label label2 = new Label();
  private TextField nVeld = new TextField();
  private TextField kVeld = new TextField();
  private Button knop = new Button();
  private TextField antwoord = new TextField();
  private Label label3 = new Label();
  // Einde variabelen

  public void init() {
    Panel cp = new Panel(null);
    cp.setBounds(0, 0, 300, 300);
    add(cp);
    // Begin componenten

    label1.setBounds(64, 16, 17, 16);
    label1.setText("N=");
    label1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label1);
    label2.setBounds(64, 56, 15, 16);
    label2.setText("K=");
    label2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label2);
    nVeld.setBounds(104, 16, 121, 24);
    nVeld.setText("");
    cp.add(nVeld);
    kVeld.setBounds(104, 56, 121, 24);
    kVeld.setText("");
    cp.add(kVeld);
    knop.setBounds(152, 96, 75, 25);
    knop.setLabel("Bereken");
    knop.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        knop_ActionPerformed(evt);
      }
    });
    cp.add(knop);
    antwoord.setBounds(104, 152, 121, 24);
    antwoord.setText("");
    cp.add(antwoord);
    label3.setBounds(32, 152, 56, 16);
    label3.setText("Antwoord");
    label3.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label3);
    // Einde componenten

  }
  // Begin eventmethoden
  public void knop_ActionPerformed(ActionEvent evt) {


  }
  public int fac(int g){
        if(g == 1){
            return 1;
        }
        else
        {
            return g * fac(g - 1);
        }
    }
  // Einde eventmethoden

}


zouden jullie me een klein beetje op weg willen helpen, want ik kom er niet uit.

Mvg, Jelmer Holtes

[ Voor 0% gewijzigd door NMe op 07-12-2009 17:26 . Reden: Code-tags. ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

En wat verwacht je nu van ons? Dat wij het er even in schrijven voor je? ;) Wat begrijp je precies niet? Waarmee loop je vast? Wat heb je gevonden in de handleiding/op internet en wat lukt er precies niet bij het implementeren daarvan?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 07 december 2009 @ 17:22:
zouden jullie me een klein beetje op weg willen helpen, want ik kom er niet uit.
Dat kan, als je een concrete vraag hebt. Nu zie ik alleen "Dit is mijn code en 't lukt me niet" en dat is hier niet de bedoeling. Dus graag zien we wat er dan precies niet lukt, wat je hebt geprobeerd etc.

* RobIII mept NMe

[ Voor 3% gewijzigd door RobIII op 07-12-2009 17:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou of jullie me zouden kunnen helpen om de EventHandler te kunnen schrijven bij de bereken knop.
Ik weet de berekening in tekst de berekening wel: namelijk kansbereking is:
n!
------
k!(n-k)

Maar hoe verwerk ik dit in Java taal, aangezien wij op school nogal een slecht boek hebben, wordt het ook nauwelijk uitgelegd.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:53

Haan

dotnetter

Het hele punt van de opdracht is waarschijnlijk nou juist om die berekening te doen, de rest lijkt mij bijzaak. Dan zou het toch jammer zijn als wij die berekening voor gaan zitten kauwen? ;)

Je weet toch wel hoe je een faculteit berekent? Dat kan je vast ook wel in code uitschrijven.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je zegt nog steeds niet wat het nu is dat je niet begrijpt. Het uitschrijven van die formule? Het implementeren van de handler? Het uitrekenen van de faculteit van een variabele?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Arie-
  • Registratie: December 2008
  • Niet online
Wat eerst duidelijk moet zijn is hoe je denkt over de code, wat moet er precies gebeuren als je op de knop drukt
1- er moet geregistreerd worden dat je op de knop drukt
2- er moeten twee waarde gelezen worden (n en k)
3- er moet een berekening gebeuren met die twee waarden
Waar kom je niet precies uit, mis ik een stap etc. Denk goed na over wat je wilt maken en hoe je dat kunt bereiken. Als je dat kunt kun je veel gerichter een vraag stellen, want wij gaan je niet met al deze punten helpen (lees: je huiswerk maken).
edit: Daarbij, niet alleen waar je niet uit komt, maar ook waarom niet en wat er dan niet lukt en wat je geprobeerd hebt.

[ Voor 10% gewijzigd door Arie- op 07-12-2009 18:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Java heeft, voor zover ik weet, geen functie die n boven k voor je berekent. Je zult de berekening dus zelf moeten uitschrijven. Je leraar kan je vast wel uitleggen hoe je dat doet. Verder zijn er ook wiskunde- of statistiekboeken te vinden waarin wordt uitgelegd hoe n boven k werkt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Arie- schreef op maandag 07 december 2009 @ 17:59:
Wat eerst duidelijk moet zijn is hoe je denkt over de code, wat moet er precies gebeuren als je op de knop drukt
1- er moet geregistreerd worden dat je op de knop drukt
2- er moeten twee waarde gelezen worden (n en k)
3- er moet een berekening gebeuren met die twee waarden
Waar kom je niet precies uit, mis ik een stap etc. Denk goed na over wat je wilt maken en hoe je dat kunt bereiken. Als je dat kunt kun je veel gerichter een vraag stellen, want wij gaan je niet met al deze punten helpen (lees: je huiswerk maken).
edit: Daarbij, niet alleen waar je niet uit komt, maar ook waarom niet en wat er dan niet lukt en wat je geprobeerd hebt.
Kijk hier heb ik wat meer aan, dit bedoel ik...
En ja ik maak gewoon m'n huiswerk, maar in mijn boek staat niet duidelijk aangegeven hoe je waardes leest uit n en k, en hoe je n faculteit dus bijvoorbeeld 3! dat ie daar automatisch 1x2x3 van uitrekend, ik ga het weer een stukje verder proberen en zal jullie zeggen waar ik verder vastloop

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 07 december 2009 @ 18:18:
[...]

Kijk hier heb ik wat meer aan, dit bedoel ik...
En ja ik maak gewoon m'n huiswerk, maar in mijn boek staat niet duidelijk aangegeven hoe je waardes leest uit n en k, en hoe je n faculteit dus bijvoorbeeld 3! dat ie daar automatisch 1x2x3 van uitrekend, ik ga het weer een stukje verder proberen en zal jullie zeggen waar ik verder vastloop
No offense, maar natuurlijk staat niet elk praktisch of wiskundig probleem waar je ooit tegenaan zou kunnen lopen omschreven in zo'n boek. Het gaat er juist om dat je zélf bedenkt hoe je loop-structuren kunt gebruiken om gemakkelijk een faculteit van een willekeurig getal te berekenen. 't Zou een slecht boek zijn als ze dat wél voor je uit gingen kauwen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 07 december 2009 @ 18:18:
Kijk hier heb ik wat meer aan, dit bedoel ik...
En ja ik maak gewoon m'n huiswerk, maar in mijn boek staat niet duidelijk aangegeven hoe je waardes leest uit n en k, en hoe je n faculteit dus bijvoorbeeld 3! dat ie daar automatisch 1x2x3 van uitrekend, ik ga het weer een stukje verder proberen en zal jullie zeggen waar ik verder vastloop
Je hebt toch in je lap code reeds een faculteit functie geschreven 8)7 (die trouwens compleet gaar gaat gaan op elk getal kleiner dan 1)
Hmm, en wat je daar in tekstvorm als binomiaalformule schrijft is ook nog fout (ontbreekt een faculteit): Wikipedia: Binomial coefficient

[ Voor 14% gewijzigd door Verwijderd op 07-12-2009 18:37 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Daarnaast wil je 100 boven 99 niet uitrekenen als fac(100)/((fac(99)*fac(1)).

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:15
Verwijderd schreef op maandag 07 december 2009 @ 17:36:
Ik weet de berekening in tekst de berekening wel: namelijk kansbereking is:
n!
------
k!(n-k)
Overigens is het in verband met het risico op overflow meestal beter om de berekening van de binomiaalcoëfficient te baseren op de recurrente betrekking (memoization vereist):
code:
1
2
3
f(n,1) = 1
f(n,n) = 1
f(n,k) = f(n - 1, k - 1) + f(n - 1, k)

De Driehoek van Pascal dus eigenlijk. Hiermee loop je niet het risico op tussentijdse overflow omdat je tussenresultaten altijd kleiner zijn dan het eindresultaat, en bovendien kun je overflow in het eindresultaat detecteren door te checken of een tussenresultaat negatief is (dat kun je niet missen omdat je steeds slechts twee positieve getallen optelt).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt allemaal voor jullie tips, ik ga d'r mee aan de slag en laat jullie het weten hoe het verloopt.
Pagina: 1