Toon posts:

[c++]wiskundige faculteit

Pagina: 1
Acties:
  • 743 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ok, ik ben een klein progje aan het maken, alleen nu moeten ik zoiets als een faculteit gebruiken. Dus 5 faculteit=5!=5×4×3×2×1. Ik kan op zich wel een loop maken, maar ik denk dat er al zoiets bestaat zodat je met een opdracht zoiets kan maken. K heb matlab al doorgespit maar kon nix vinden...:( .

[ Voor 12% gewijzigd door Verwijderd op 21-05-2003 17:32 ]


Verwijderd

Is het niet nPr()?
Number of permutations?

Op mn GR gaat dat zo:
code:
1
2
3
4
5
5! = 120
5 nPr 5 = 120

x! = y
x nPr x = y

[ Voor 250% gewijzigd door Verwijderd op 21-05-2003 17:36 ]


Verwijderd

Topicstarter
een permutatie is iets anders als een faculteit. een permutatie is in c++ zo uit mn hoofd perm() Maar dat heb ik dus niet nodig :)

edit: je hebt gelijk...dank je ;)

[ Voor 13% gewijzigd door Verwijderd op 21-05-2003 17:36 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Hier is geen standaardfunctie voor; je zult hem dus inderdaad zelf moeten implementeren. (Dat is natuurlijk niet echt moeilijk.)

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 09:43

RayNbow

Kirika <3

Je kan de faculteit zoals je zegt met een loop berekenen, maar je kan ook een recursieve functie schrijven. Gebruik daarbij de volgende eigenschappen: faculteit(0)=1, faculteit(n)=n*faculteit(n-1).

Als je ook functies zoals permutaties en combinaties wilt schrijven:

nPr = n! / (n-r)!
nCr = n! / ( (n-r)! * r!)

[ Voor 1% gewijzigd door RayNbow op 21-05-2003 18:55 . Reden: typo ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • TheDuke
  • Registratie: Juni 1999
  • Niet online
een loop is hier toch echt tig malen sneller dan die recursieve functie van je...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
RayNbow schreef op 21 mei 2003 @ 18:54:
Je kan de faculteit zoals je zegt met een loop berekenen, maar je kan ook een recursieve functie schrijven. Gebruik daarbij de volgende eigenschappen: faculteit(0)=1, faculteit(n)=n*faculteit(n-1).
Een recursieve functie is maar zelden een goede implementatie voor een recursieve definitie. Dat geldt ook al voor je volgende suggestie:
Als je ook functies zoals permutaties en combinaties wilt schrijven:

nPr = n! / (n-r)!
nCr = n! / ( (n-r)! * r!)
Het uitrekenen van n! en (n-r)! en het delen daarvan is vele malen minder efficient dan simpelweg een uitgekiend lusje, aangezien n! / (n-r)! veel beter berekent kan worden door vermenigvuldiging van de getallen n tot n-r.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Zonder loop:
C++:
1
2
3
4
5
6
int fac( int n ) {
  std::vector A( n, 1 );
  std::vector B( n );
  std::partial_sum( A.begin(), A.end(), B.begin() );
  return std::accumulate( B.begin(), B.end(), 1, std::multiplies<int>() );
}
:)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

en nog mooie code ook :D

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 08-06 11:02
ik dacht dat 69! niet meer past op een gewoon rekenmachinetje, dus wat je ook zou kunnen doen is een tabel maken die je een keer uitrekent met een proggie en dat ie het dan als sourcecode in een bestand zet die je dan include.

C:
1
2
3
4
5
#include "faccul.h"

....
printf("10! = %ld\n", faccul[10]);
....

Als je dat doet is het uiteindelijke wel sneller natuurlijk en kost nouwelijks ruimte.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17-08 23:56

Janoz

Moderator Devschuur®

!litemod

PiepPiep schreef op 21 May 2003 @ 23:46:
ik dacht dat 69! niet meer past op een gewoon rekenmachinetje, dus wat je ook zou kunnen doen is een tabel maken die je een keer uitrekent met een proggie en dat ie het dan als sourcecode in een bestand zet die je dan include.

C:
1
2
3
4
5
#include "faccul.h"

....
printf("10! = %ld\n", faccul[10]);
....

Als je dat doet is het uiteindelijke wel sneller natuurlijk en kost nouwelijks ruimte.
De reden dat je rekenmachine niet verder gaat dan 69! heeft niks met 'tijd' te maken, maar meer met het feit dat 70! zo groot is dat het niet meer door je reken machine onthouden kan worden. Het heeft meer nut om een datatype met een groter bereik te gebruiken dan een lookup table.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

In een long van 32 bits past maximaal 12! (479001600)
En in een 64 bits int past maximaal 21! (51090942171709440000)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 08-06 11:02
C:
1
2
3
....
printf("10! = %f\n", faccul[10]);
....


Zo beter? :|

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • djazete
  • Registratie: Juli 1999
  • Laatst online: 07-02-2020

djazete

steel

laatst iemand zoiets horen roepen, wellicht heb je er wat aan (dit was voor SQL...)
exp(sum(log(n))
maar misschien vertel ik nu iets raars want ik ben niet zo'n wiskundige...

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Dat klint aardig, maar SUM werkt via 1+2+3+4+... wat net zo moeilijk is als 1*2*3*4*...,
en dan komt de exp en de log() er nog bij.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nou ja als sum (n) = 1+2+3+4+...+n, dan sum(n) = n * (n+1) / 2
Bij log (1) + log (2) + ... + log (n) gaat dat echter niet op ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Opi
  • Registratie: Maart 2002
  • Niet online

Opi

Verwijderd schreef op 21 May 2003 @ 17:31:
K heb matlab al doorgespit maar kon nix vinden...:( .
Try het commando "factorial" :)
Pagina: 1