Merhaba!
Yanılmıyorsam permutasyon ve kombinasyon tanımları aşağıdaki gibi olacak:
P(n,r)= n! / (n-r)!
C(n,r)= n! / ((n-r)! * r!)
Tabi buradaki ilk girilen sayı, permutasyondaki ve kombinasyondaki n değerine tekabül ediyor.
İkinci girilen A sayısı, permutasyondaki r değerine,
Üçüncü girilen B sayısı, permutasyondaki r değerine tekabül ediyor diye düşündüm.
Algoritmasını ana hatlarıyla yazarsak:
1) Sayıları al.
2) Sayıları kontrol için ekrana yazdır.
3) Verilen sayılara göre permutasyon ve kombinasyon al.
- Önce n! i bul. Sonucu (n-r)! e böl. Sonucu permutasyon sonucu olarak yazdır.
- Önce n! i bul. Sonucu (n-r)! e böl. Çıkan sonucu r! e böl. Sonucu combinasyon olarak yazdır.
n! i bulmak için:
n=Sayı;
r=A;
soln_1=1;
i=1;
while(i<=n)
{
soln_1=soln_1*i;
i++;
} /* n! bulundu */
i=1;
while(i<=(n-r))
{
soln_1=soln_1/i;
i++;
} /* n! / (n-r)! bulundu */
printf("P(Sayi,A) = %d",soln_1);
Bu kod dizisinin başına
r=A; yerine r=B; yaz. soln_1 yerine de soln_2 eklersen
yazarsan B değeri için n! / (n-r)! ı hesaplamış olursun. Bir daha aşağıdaki yolla bu sonucu bölersen kombinasyonu da hesaplamış olursun:
while(i<=r)
{
soln_2=soln_2/i;
i++;
} /* n! / ((n-r)!*r!) bulundu */
Bunda da soln_2 yu yazdır:
printf("C(Sayi,B) = %d",soln_2);
Bayağıdır bu permutasyon kombinasyon meselesine bakmamıştım. O yüzden kodu kontol etmeni tavsiye ederim.
Aynı ekranda tekrar tekrar hesap yaptırabilmek istiyorsan programın başında bütün programı kapsayacak şekilde do while yap. İşlemi bir kez tamamlayınca bir karakter aldır. Do while loopu bu karakteri istenilen karakterle karşılaştırsın. Koşul sağlanıyorsa devam etsin. Aksi halde dursun. Böyle yapabilirsin:
do
{
char devam="d"
...
scanf("%c",&a)
} while (a==devam) ;
Eğer alınan a değeri, loopun devamı için gerekli olan devam karakteriyle aynıysa (burada devam karakteri d) bir daha permutasyon ve kombinasyon hesabına devam et demek.
Benden bu kadar umarım işini görür.