[ addo19 @ 27.04.2005. 13:03 ] @
Zdravo,

Znali neko gdje se moze naci primjer n! > n faktorijela

Npr, ako neko unese 6 sa tastature > izlaz bi bio x= 6*5*4*3*2*1 = 720 ako sam tacno pomnozio.

Treba mi jedan takav primjer u C++, ali da radi sa svakim unesenim brojem.

Hvala
[ X Files @ 27.04.2005. 17:42 ] @
na primer, moze (rekurzivna) funkcija za to i u jednom redu:
Code:

// netestirano!!!
int f( int n ) { return ( n > 1 ? n * f( n-1 ) : 1 ); }

ili malo razumljivije:
Code:

// netestirano!!!
int f( int n )
{
   if ( n > 1 )
      return ( n * f( n - 1 ) );
   else
      return ( 1 );
}
[ Lazar-I @ 27.04.2005. 22:19 ] @
Ako ne ume da napise prog. koji racuna faktorijel, sigurno nece razumeti ni rekurziju. Zato evo iteracije.

Code:
//takodje netestiranno
int fakt(int n)
{
    int rezultat=1;
    for(int i=1;i<=n;i++)
         rezultat=rezultat*i;
    retrun rezultat;
}


[ virtualx @ 27.04.2005. 23:22 ] @
da ti netreba slucajno za seminarski iz predmeta osnove racunarske tehnike.
:)))

[ addo19 @ 29.04.2005. 21:44 ] @
treba : ) ) ) .. problem je sto me programiranje toliko ni ne zanima ... .znam neke osnove i to je sve ... Evo naso sam jedan dobar primjer ... moram ga jos samo objasniti, a neke linije ne razumijem ..


Code:
#include <stdio.h>
void main()


    {
        long N , b , c , p ; // use int for fast calculation and small range of calculation..
                                // use double for factor bigger than 12!
    Restart:
    
        printf("Enter N!: ");
        scanf("%d", &N);
            if(N < 0)


            {
                printf("\t\n R.estart, I.nvalid P.arameter! (N > -1)\n");
                goto Restart;
            }
            else
            c = N - 1;
            p = 1;
            while(c>0) 


                {
                    p = 0;
                    b = c;


                            while(b>0) {
                    
                                    if ( b & 1 )


                                        {
                                        p += N; // p = p + N;
                                        }
                                // if you would like to use double choose the alternative forms instead shifts 
                             // the code is fast even!
                                // you can use the same tips on double or 64 bit int etc.... but you must... ;-)
                                b >>=1; // b/=2; (b = b / 2;) ( b >> 1; a.s.r. is more efficent for int or long..!)
                                N <<=1; // N += N; N = N + N; N = N * 2; (N <<=1; a.s.l. is more efficent for int or long..!)
                                } // end of: while(b>0)
                                N = p;
                                c--; // c = c - 1;
                        } // end of: while(c > 0)
                        printf("[%d] is the factorial! \n", p);
                }
                //p.s.
                //using recursion is much slower!
                //for example:
                //
                //int fact(int);
                //void main()


                    //{
                    // int N;
                    // printf("Enter the number: ");
                    // do
                    // { scanf("%d",&N);}
                    // while(N<0);
                    // printf("\n %d", fact(N));
                    // }
                    // int fact(int N)


                        // {
                        // int f;
                        // if(N==0)f=1;
                        // else f=N*(fact(N-1));
                        // return f;
                        // }


AL dobro sve je lijepo objasnjeno pa nece biti neki problem ....
[ virtualx @ 29.04.2005. 23:01 ] @
da nisi slucajno iz bihaca jer sam i ja dobio seminarski iz c++
prof.osman cehajic nas nista nije naucio a daje prekomplicirane seminarske za nas.
ja sam dobio shell sort i nemam pojma kako da to uradim
moracu pretraziti po netu,ali malo sam sta nasao i ne ono sto mi treba.
[ toroman @ 30.04.2005. 16:07 ] @
programiranje se uči iz knjiga, a od profesora, teško ...

X Files je napisao program za faktorijele ... btw, mi u Banjoj Luci smo to radili u osmom razredu osnovne škole ...
[ IronTIRANIN @ 04.05.2005. 07:09 ] @
Isprobano i radi super (Visual Studio 6)
Code:

#include<iostream.h>

    
    void stepen()
    {
        int i,a,b;
        long int c=1;
        cout<<"\n\n";
        cout<<"    F-ja koja racuna n-ti stepen unetog broja\n\n";
        cout<<"    Unesite izlozilac : ";
        cin>>a;
        cout<<"    Unesite stepen : ";
        cin>>b;
        for (i=1; i<=b; i++)
            c=c*a;
        cout<<"    Rezultat je : " <<c;
    }
        

    void faktorijel()
    {
        int i,a;
        long int c=1;
        cout<<"\n\n";
        cout<<"    F-ja koja racuna faktorijel unetog broja\n\n";
        cout<<"    Unesite broj : ";
        cin>>a;
        for (i=1; i<=a; i++)
            c=c*i;
        cout<<"    Rezultat je : " <<c;
    }



    void main()
    {
        int izbor;
        cout<<"\n\n";
        cout<<"    Ovaj program racuna neke f-je na osnovu unetih podataka.\n\n";
        cout<<"    Ukoliko zelite da izracunate stepen nekog broja ukucajte 1\n";
        cout<<"    Ukiliko zelite da izracunate faktorijel nekog broja ukucajte 2\n";
        cout<<"\n    Vas izbor (1,2) ? ";
        cin>>izbor;
        if (izbor!=1)
        {
            if (izbor!=2)
                cout<<"\n    Greska! Niste u mogucnosti da koristite opciju " <<izbor <<"!";
            else
                faktorijel();
        }
        else
            stepen();
        cout<<"\n\n";
    }


Nisam imao pametnija posla i eto malo se zezao sa c++. Gore navedeni program racuna stepene i faktorijel. Uostalom probaj da ga iskompajliras pa ces i sam videti.
Poz!
[ blaza @ 04.05.2005. 17:20 ] @
Problem sa Vasim resenjima je u tome sto mogu da racunaju najvise 14!-15!. Resenje koje dajem moze da racuna i 1000!. Zurio sam, tako da je moguce da se potkrala koja greska.
Code:
#include <iostream>
const int VEL = 1000;
const int D = 1000UL;
unsigned long proizvod[VEL] = {};
int main(void){
    int n;
    std :: cout << "Unesi n = ";
    std :: cin >> n;
    std :: cout << "\nn! = ";
    proizvod[VEL - 1] = 1UL;
    for(int i = 1; i <= n; i++){
        unsigned long temp = 0UL;
        for(int j = VEL - 1; j >= 0; j--){
            proizvod[j] = proizvod[j] * i + temp;
            temp = proizvod[j] / D;
            proizvod[j] %= D;
        }
    }    
    bool lz = true;
    for(int j = 0; j < VEL; j++){
        if(lz && proizvod[j])
            lz = false;
        if(!lz)
            std :: cout << proizvod[j];
    }
    std :: cout << "\n";
    system("pause");
}



[Ovu poruku je menjao blaza dana 19.05.2005. u 17:42 GMT+1]
[ virtualx @ 05.05.2005. 15:34 ] @
sorry al moze li mi tko pomoci u vezi teme shell sort.
dakle najbolje bi bilo da nadjem negdje gotov izvorni kod,a za literaturu cu lakse.
bio sam nesto nasao ali neradi,nece da kompajlira,ima neka greska.
ako nije komplikovano molio bi da netko napise kod.
[ frxtvz @ 18.05.2005. 13:37 ] @
//n faktorijel
#include <stdio.h>
int main()
{
int n,i,p=1;
printf("unesi n->");
scanf("%d",&n);
for(i=1;i<=n;i++)p*=i;
printf("rezultat je %d \n",p);
}

to je racunanje faktorijela
[ yooyo @ 18.05.2005. 17:51 ] @
Svi pocetnici neka pogledaju http://remus.rutgers.edu/~rhoads/Code/code.html.
Tamo ima resenja za vase zadatke. Nadam se da engleski nije problem?

yooyo
[ blaza @ 18.05.2005. 18:56 ] @
Primer za faktorijel sa datog linka je nepotrebno iskomplikovan i spor.
[ X Files @ 18.05.2005. 19:30 ] @
Citat:

Primer za faktorijel sa datog linka je nepotrebno iskomplikovan i spor.

da, ali:
Citat:

Calculates factorials up to 1000! without overflow.

... ako smo gledali isti kod ;)
[ blaza @ 19.05.2005. 06:24 ] @
Jesmo. Pogledaj moj prvi post u ovoj temi.
[ dragansm @ 19.05.2005. 16:29 ] @
Faktorijel za bilo koje N :)

Code:

// factoriel.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include <vector>
using namespace std;

void dump( vector<int> &result, int fac )
{
    printf( "[%d]! = ", fac );
    for ( int i = result.size() - 1; i > -1; --i ) printf( "%d", result[i] );
    printf( "\n" );
}

void dump( vector<int> &result, char *debugName )
{
    printf( "[%s]%d:", debugName, result.size() );
    for ( int i = result.size() - 1; i > -1; --i ) printf( "%d", result[i] );
    printf( "\n" );
}

int GetAt( vector<int> &result, int at )
{
    if ( at < result.size() ) return result[at];
    else return 0;
}

void SetAt( vector<int> &result, int at, int value )
{
    if ( at < result.size() ) result[at] = value;
    else { 
        while ( at > result.size() )  result.push_back( 0 );
        result.push_back( value );
    }
}

void add( vector<int> &out, vector<int> &result )
{
    int i = 0;
    int c = 0;
    for ( ; i < max( out.size(), result.size() ); ++i )
    {
        int val = GetAt( out, i ) + GetAt( result, i ) + c;
        c = val / 10;
        SetAt( out, i, val % 10 );
    }
    while ( c )
    {
        SetAt( out, i, c % 10 );
        ++i;
        c /=  10;
    }
}

void mul( long n, vector<int> &result )
{
    vector<int> tempResult;
    vector<int> outResult;
    for ( int i = 0; i < result.size(); ++i )
    {
        tempResult.clear();
        long r = GetAt(result, i)*n;
        int k = i;
        while ( r )
        {
            SetAt( tempResult, k, r % 10 );
            ++k;
            r /= 10;
        }
        add( outResult, tempResult );
    }
    for ( int i = 0; i < outResult.size(); ++i )
    {
        SetAt( result, i, outResult[i] );
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    
    vector<int> result;
    result.push_back( 1 );
    long N = 100;
    for ( long i = 1; i < N; ++i )
    {
        mul( i, result );
        dump( result, i );
    }
    return 0;
}


[ gstudios @ 04.09.2007. 18:19 ] @
Code:
#include <iostream>
using namespace std;
int faktorijel(int n);
int main()
{
int n,s;
cout<<"Unesite broj "<<endl;
cin>>n;
s=faktorijel(n);
cout<<n<<"!="<<s<<endl;
system("pause");
return 0;
}
int faktorijel(int n)
{
cout<<"f1("<<n<<")=";
if(n==0)
{
cout<<1<<endl;
return 1; //bazni slucaj
}
else
{
cout<<n<<" *f1("<<n-1<<")\n";
return (n*faktorijel(n-1));
}
}