ďťż
 
 
   [c++] Program w c++
 
 

Tematy

 
    
 

 

 

 

[c++] Program w c++





dawideo - 21-08-2007 21:38
Jestem dopiero raczkujący w programowaniu, a ten program znalazłem w necie; więc zwracam się z prośbą o wyjaśnienie mi tego kodu co on robi. Tzn wiem że służy do obliczania symbolu Newtona. Ale nie kumam jak on to robi. Bo na symbol Newtona jest wzór n!/(k!(n-k)!. a tutaj oni to jakoś inaczej obliczają np w pętli for czemu jest "n-k+1"???
Z góry dziękuje.

#include <iostream.h>
#include <string.h>
 
#define MAXNK 100
#define MAXWYNIK 1000000000

int main(){
  int t,a,b;
 
  cin >> t; /* wczytaj liczbĂŞ testów */
  while(t){
    cin >> a;
    cin >> b;
 
 
    cout << newton(a,b) << endl;
 
    t--;
  }
  return 0;
}
int newton(int n, int k)
{
double w= 1;
if (k>n/2)
k=n-k;
else k=k;
 
for (int i=n; i>=n-k+1; i--)
{
w=w*i;
}
 
for (int i=1; i<=k; i++)
{
w=w/i;
}
 
if (w>MAXWYNIK)
{
w=-1;
return w;
}
 
else
return w;
}



ponton - 21-08-2007 22:59
http://pl.wikipedia.org/wiki/Symbol_...i_algebraiczne



slawek1979 - 21-08-2007 23:02
Nasuwa mi się tylko jedno na początek. Nieodzowna raczej w programowaniu jest znajomość matematyki. Ale do rzeczy:

1. Obliczenie 3 razy silni to bardzo "dużo" (poczytaj nt. złożoności algorytmów), a więc lepiej trochę pokombinować.
2.n!=1*2*3*...*n, a (n-k)!=1*2*3*...*(n-k) no więc jak po skracasz górę i dół to dojdziesz do tego dlaczego jest tak a nie inaczej (+/-).

Pozdrawiam,
Sławek.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis