Entwickler-Ecke

Sonstiges (Delphi) - Binomialkoeffizient


Wuesty - Mi 10.01.07 17:47
Titel: Binomialkoeffizient
Huhu

Hab schon hier im Forum gesucht, aber nichts passendes gefunden.
Wir sollen einen Taschenrechner programieren, mein Problem ist folgendes, ich bin jetzt beim Binomialkoeffizient, ich hab da auch schon was geschrieben.

Nur jetzt kommt folgende Fehlermeldung


Quelltext
1:
2:
[Hint] taschenrechner.pas(418): Value assigned to 'binomialkoeffizient' never used
[Hint] taschenrechner.pas(417): Value assigned to 'binomialkoeffizient' never used


Der Quelltext sieht so aus

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
     function binomialkoeffizient(n,k: integer):double;
       begin
          if k = 0 then result := 1 ;
          if  k > n then result := 0 ;
          binomialkoeffizient := faculty(n) / (faculty(k) * faculty(n-k));
       end;

    procedure TForm1.nueberkClick(Sender: TObject);
        var n,k: integer;

    begin
      n := StrToInt(eingabe.Text);
      k := StrToInt(eingabe2.Text);
      eingabe.Text := FloatToStr(binomialkoeffizient(n,k));
    end;


Ich hab auch extra nen 2. Textfeld gemacht, nur kann man auch damit nicht rechnen.
Ich hab echt keine Ahnung mehr :(

Hoffe jemand kann mir vielleicht helfen :)

Lg,
Sarah

Moderiert von user profile iconGausi: Code- und Delphi-Tags hinzugefügt


jaenicke - Mi 10.01.07 17:56

Erstmal :welcome: hier im Forum!

Das, was du da als "Fehler" angegeben hast, ist kein Fehler, sondern ein Hinweis. Aber die Zuweisung von Result beendet die Prozedur nicht! Deshalb solltest du else benutzen, denn sonst wird die letzte Zeile doch ausgeführt und das Ergebnis wird als Rückgabewert zurückgegeben. (Vorausgesetzt du weist dort Result erneut zu...)
Dann: Warum nimmst du in der letzten Zeile nicht auch Result? :gruebel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function binomialkoeffizient(n,k: integer):double; 
begin 
  if k = 0 then 
    Result := 1
  else if k > n then
    Result := 0
  else
    Result := faculty(n) / (faculty(k) * faculty(n-k)); 
end;


Dann noch was allgemeines:
Damit der Quelltext korrekt dargestellt wird, benutze bitte die Delphi-Tags!
Hier steht wie das geht:
http://www.delphi-forum.de/help_schreiben_bbcodes_source.html&sub=,19,27,32
Die musst du natürlich nicht selbst tippen, du musst nur über dem Eingabefeld auf Bereiche und in diesem Fall dann auf das Plus hinter Delphi einmal vor und einmal nach dem Code schreiben klicken. Mehr dazu hier:
http://www.delphi-forum.de/help_schreiben_bbcodes.html&sub=,19,27,32


GTA-Place - Mi 10.01.07 17:56

Result ist ja das selbe wie Binomialkoeffizient (Funktionsname), d.h. du überschreibst in allen Fällen Result in der Funktion wieder.


EDIT: GRML, jetzt geht das schon wieder los, dass du schneller bist -_-


Wuesty - Do 11.01.07 12:14

Huch sorry und danke schonmal für die schnelle Antwort :)



Aufjedenfall hatte ich das result weggemacht, weils damit auch nicht wirklich funktionierte und er danach auch nichts mehr angezeigt hat.

Hab es jetzt auch wieder eingefügt die ; weggemacht, jetzt aber nächstes Problem


Delphi-Quelltext
1:
2:
[Error] taschenrechner.pas(418): Statement expected, but expression of type 'Boolean' found
[Fatal Error] Project1.dpr(7): Could not compile used unit 'taschenrechner.pas'


Joa was sagt mir das jetzt?!


Corpsman - Do 11.01.07 12:27

hier Empfehle ich dir mal dieses Kleine Sample [http://tyrann.deadbyte.de/corpsman/klickcounter.php?url=download/binomial.zip] von mir. damit kannst du dann auch so sachen wie 49 über 6 berechnen.


ManniTwo - Do 11.01.07 12:28

Hi,

user profile iconWuesty hat folgendes geschrieben:



Delphi-Quelltext
1:
2:
[Error] taschenrechner.pas(418): Statement expected, but expression of type 'Boolean' found
[Fatal Error] Project1.dpr(7): Could not compile used unit 'taschenrechner.pas'


Joa was sagt mir das jetzt?!


also zunächst mal sagt es mir und vermutlich den meisten anderen auch ziemlich wenig, da niemand weiß wie genau jetzt deine Zeile 418, in der der gepostete Fehler auftrat, aussieht.
Poste also noch einmal wie genau dein Quelltext jetzt aussieht und dir wird sicher geholfen. :-)

Gruß,
ManniTwo


Wuesty - Do 11.01.07 14:58

Achja


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
     function binomialkoeffizient(n,k: integer):double;
       begin
          if k = 0 then result := 1
          else  k > n then result := 0
          else
          result := faculty(n) / (faculty(k) * faculty(n-k));
       end;

   procedure TForm1.nueberkClick(Sender: TObject);
        var n,k: integer;

    begin
      n := StrToInt(eingabe.Text);
      k := StrToInt(eingabe2.Text);
      eingabe.Text := FloatToStr(binomialkoeffizient(n,k));
    end;


und



Delphi-Quelltext
1:
else  k > n then result := 0                    


Ist die betroffene Zeile und genau hinter then


starsurfer - Do 11.01.07 15:00


Delphi-Quelltext
1:
else if k > n then result := 0                    


damit müsste es gehen...


Wuesty - Do 11.01.07 15:01

user profile iconCorpsman hat folgendes geschrieben:
hier Empfehle ich dir mal dieses Kleine Sample [http://tyrann.deadbyte.de/corpsman/klickcounter.php?url=download/binomial.zip] von mir. damit kannst du dann auch so sachen wie 49 über 6 berechnen.


Erstmal danke *hehe*
Aber ehrlich gesagt hab ich da nicht so den Durchblick und das ist alles ziemlich viel und mir fällt das sowieso ziemlich schwer das alles nachzuvollziehen, da wir bei Delphi ziemlich auf uns alleine gestellt sind und recht wenig bis gar nichts mit dem Kurs zusammen gemacht haben. Also ich selbst hab wenig Grundlagen dafür.


Wuesty - Do 11.01.07 15:08

user profile iconstarsurfer hat folgendes geschrieben:

Delphi-Quelltext
1:
else if k > n then result := 0                    


damit müsste es gehen...


Daaaaaankeschön :)

Und allen anderen auch x) Meine Helden *lol*


Horst_H - Do 11.01.07 15:09

Hallo,

@Corpsman
Dein Programm berechnet n=49 und k= 7 zu einer >negativen< Zahl -687142768.
Ich weiss nicht wie häufig sich das zwischendurch kürzen lohnt, es geht auch so sehr gut und effektiv.


Delphi-Quelltext
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:
{$APPTYPE Console}
var
  k,n:integer;

function Binom(n,k:integer): int64;
var
  i : integer;
begin
  {triviales abfangen fehlt}
  
  //k mit n-k tauschen, falls es sich lohnt
  i := n-k;
  If k>i then
    k := i;

  result := 1;
  For i := 1 to k do
    begin
    result := (n*result) div i;// Ist immer ohne Rest
    dec(n);
    end;
end;

begin
  n := 49;
  For k := 0 to n do
    writeln(n,'|',k,' = ',binom(n,k));
  readln;
end.



Gruß Horst