» »

Izračun fakultete...

Izračun fakultete...

djv ::

A v C++ obstaja kakšna funkcija, ki ti izračuna fakulteto. Npr...jaz vnesem število členo za katere želim izračunati vsoto vrste po formuli =1/n!.........torej n!...5!=1*2*3*4*5!!!!
Torej, če jaz vnesem št. členov 5, mi mora program izračunat tako:
=1/1! + 1/2! + 1/3! * 1/4! + 1/5!
A obstaja torej kakšna funkcija ki ti to izračuna, al je treba to z zanko naredit in kako??

Hvala!!
  • spremenilo: djv ()

Sergio ::

v pascalu (znajo bit napake, pisem na pamet):

Program Izracun;
uses crt; //ne sprasuj zakaj, navada ;)
var stevilo, fakulteta, i, j:integer;
resitev:real;
begin
fakulteta=1;
stevilo:=0;
resitev:=0;
Write ('Vpisi zeleno stevilo: ');
Readln (stevilo); //vpisi integer, ne bom ti pisal kode ki bo pregledvala to
For i:=1 to stevilo do begin
For j:=1 to (stevilo - 1) do begin //racunanje fakultete
fakulteta:=fakulteta * (fakulteta + 1);
end;
resitev:=resitev + (1 / fakulteta);
end;
Writeln ('Zeleno stevilo je ',stevilo);
end.


a sm car al sm car... se programirat znam, vidm ;))
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

jeti ::

Ma napiši si sam funkcijo.

ali pa tole prekopiraj (pisano v C-ju)

int fakulteta(int N) {
int i, rezultat;
if (N<0) //argument N ne sme biti negativno stevilo
exit();
if (N==0)
return 1; //po definiciji je 0!=1

rezultat=1;
for(i=1;i<=N;++i)
rezultat=rezultat*i;
return rezultat;
};


funkcijo imas, tisto tvojo vsoto pa pac izracunas v eni zanki, kjer nek stevec i povecujes za 1 in trenutni vsoti pristejes 1/fakulteta(i), kar bi pa ze moral znati. ;)

LP
Bolje vrabec v roki kot (p)tič v riti!
Včasih je bil http://come.to/jeti

djv ::

Ja, ok, saj bi naredo z funkcijo, samo...mali problem...mi še jih nismo jemali!:'( Sej sam izračun fakultete jaz tudi vem sam napisat. Problem se pojavi pri ulomku!!!

Senitel ::

Ja pa nardiš brez funkcije...

#define MAX 10

void main(void)
{
int n=0,k;
float f=0, long t=1;
while (n< MAX)
{
for (k=1; k<= n; k++) t*=k; // Popravljeno, da ne pride do division by zero...
f+=1/t; t=1; // t=1, da zgornja zanka nebo zgoraj t nebo šel predaleč
n++;
}
}

Monster ::

evo ti v C++

#include "iostream.h"

int main()
{
int n, f=1;

cin >> n ; //pac stevilo
for (int i = 1; i<=n; i++)
{
f=f*i;
}
cout << f;
reutn 1;
}
Ka zaboga...

Tr0n ::

Rekurzivni izracun bo najhitrejsi.

wintermute ::

TrOn:

Rekurzivni izracun bo najhitrejsi.

Not really. V najboljsem primeru enako hiter (ce je compiler kolikor toliko dober pri optimizaciji). Vsekakor je rekurzija nesmiselna pri tako enostavnih primerih, kot je izracun fakultete.

Zal je ta vaja (poleg Fibonaccijeve vrste) edina, ki jo razni "profesorji" uporabljajo za razlago rekurzije. Rekurzija dobi smisel takrat, ko je ekvivalenten iterativni postopek prezapleten. Dva tipicna primera sta quicksort in pregledovanje drevesnih struktur.

Sicer pa je rekurzivna metoda za izracun n! v C++ taksnale:


double factorial(unsigned short n)
{
if (n == 0) return 1;
else return n * factorial(n - 1);
}

Tr0n ::

Yup. Sem se pac slucajno spomnil, da smo to vcasih, pred mnogimi leti delali na SERSu ;).

com ::

Ali sem jaz šmack ali pa vsi ostali. Kode, ki so postane so večinoma napačne. Jeti - res si car, tvoj rezultat je cisto nepredvidljiv. Zadevo sem pognal: 1. fakulteta=1806, 2. fakulteta=5287454, 3.fakulteta(overflow)=-768815826, rezultat je pa stevilo, ki ga vpises. Ostalih kod nisem poganju, vendar lahko hitro opazis napake. Sentinel - k=0, ce fakulteto na zacetku pomnozis z niclo ti ne pomaga prav zelo rezultat.
Ostali ste domačo nalogo kar dobro naredili - vendar samo fakulteto. Kaj pa izračun funkcije? Saj je vendar oboje zelo enostavno narediti le v eni zanki. (Domaca naloga!!!) Bolj zanimivo je resiti tako funkcijo za malce vecja/majhna stevila. Recimo 100 clenov. (100!=.933200000...) (By Senitel - dej please ne dajat kilometerskih besed, ker pol skripta vse skupaj mal preveč raztegne, OK).

Sergio ::

com: vpis mojo kodo v turbo pascal pa poglej, kje se zalomi... da vidm, ako sm "šmack" al ne :D
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Brane2 ::

Nimam Pascala a tole ni videt da bi delal.
For one thing, stevilu najprej dodelis vrednost, nato ga RdLine-as, nato se ga med izracuni niti ne dotaknes in kr naenkrat je rezultat v spremenljivki stevilo...
How come ?

Senitel ::

V mojem programu je problem samo to, da je pri k=0 potem prišlo do division by zero...

jeti ::

com: šmack si seveda ti. Meni lepo dela, razen ce vstavis preveliko stevilo, seveda, potem jasno da ne bo delalo, saj je spremenljivka rezultat tipa int in če vstaviš preveliko število, bo prišel ven čuden rezultat. Bolje bi bilo, če bi v sami funkciji deklarirar rezultat kot long int, pa bi se doseg povečal, ampak še vedno - če boš vstavil preveliko število, zadeva ne bo delovala, ker funkcija n! narašča še hitreje kot eksponentna. Kar poskusi v nek kalkulator vstaviti 50 ali pa 100 (dve relativno majhni števili), pa me prav zanima če ti bo prebavil n!. Tako da se ne peesdi brezveze, da je zadeva napačna, gre za omejtive, ki se jih je treba zavedati in na katere ne moreš vplivati (imaš pač maksimalno vrendost pri long int, ki je ne moreš preseči). Potem se pa človek buni, zakaj da zadeva pri N=1806 ven čuden rezultat...:\
No, seveda, če se pa ne strinjas, mi pa najdi napako v algoritmu. Ne bo ti uspelo, hehe.8-)
Bolje vrabec v roki kot (p)tič v riti!
Včasih je bil http://come.to/jeti


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Rekurzija

Oddelek: Programiranje
82379 (1839) lebdim
»

Java metode;

Oddelek: Programiranje
354941 (4133) ragezor
»

[Naloga][C++] vsota vrste

Oddelek: Programiranje
71956 (1796) bozjak
»

Problemi pri C++ programiranju...

Oddelek: Programiranje
363901 (3376) George
»

programska uganka

Oddelek: Programiranje
361752 (1285) StratOS

Več podobnih tem