Çözüldü C kombinasyon hesaplama

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Jacquez

Hectopat
Katılım
19 Ekim 2019
Mesajlar
125
Yer
Ankara
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar, cevap hep 0 oluyor. Nerede hata yapıyorum?

Kod:
#include<stdio.h>
İnt main(){
Int A, B, komb;
Int ust=1;
Int alt=1;

Printf("eleman sayisi:");
Scanf("%D",&a);
Printf("secim sayisi:");
Scanf("%D",&b);
While(b!=0){
While(a!=0){
A--;
}
Ust*=a;
Alt*=b;
B--;
}

komb=ust/alt;

Printf("cevabiniz:%D",komb);

Return 0;
}
 
Son düzenleyen: Moderatör:
Çözüm
Programlama mantığına aykırı o. Fonksiyonlar o yüzden var. Fonksiyonunuzun adı kombinasyon ise içinde sadece kombinasyon olacak. İçinde faktöriyel (adı öyle olmasa da yaptığınız şey o) olduğunda onu da ayrı bir fonksiyon olarak oluşturmak en doğrusu.

Ben herhangi bir IDE'ye yapıştırmadan senin kodundan hiçbir şey anlamıyorum. Kodların yazım tarzları arasındaki farka da dikkat et.
Sadece kodunu düzeltmem bile vaktimi alıyor. Düzeltmekten kastım okunabilir hale getirmek.
Kod:
#include<stdio.h>

int main(){
    int a, b, komb;
    int ust = 1;
    int alt = 1;

    printf("Eleman sayisi: ");
    scanf("%d", &a);
  
    printf("Secim sayisi: ");
    scanf("%d", &b);
  
    for(; b != 0; b--){
        for(; a != 0; a--){

        }
        ust *= a;
        alt *= b;

    }

    komb = ust / alt;
    printf("Cevabiniz: %d", komb);

    return 0;
}

Çalışmasına gelecek olursak 2 tane for açmışsın ama tekinin içi boş.
Amacını da hala tam anlamadım. Kombinasyon eleman sayısının faktöriyelinin seçim sayısının faktöriyeline bölümü değil. Permütasyon o, ki onda da tam olarak böyle işlemiyor.
Yaptığın for döngüsünde içeridekine ilk girdiğinde a zaten sıfır oluyor. Sonra çarp babam çarp. Pay her türlü sıfır olduktan sonra ne anlamı kaldı ki?
Alt ve üst dediklerin sanırım pay ve paydayı ifade ediyor. Onları o şekilde hesaplayamazsın, ya ek değişken ya da farklı bir şey kullanmalısın.

Şöyle yapalım biz. Bilinen, n'den r kadar aç formülünü kullanalım.
Dikkat et, for'lar artık iç içe değil.
Kod:
#include<stdio.h>

int main(){
    int a = 0;
    int b = 0;
    int ust = 1;
    int alt = 1;
    int c = 0;

    printf("Eleman sayisi: ");
    scanf("%d", &a);
    
    printf("Secim sayisi: ");
    scanf("%d", &b);
    
    c = a - b;
    
    for (; a != c; --a){
        ust *= a;
    }
    for (; b != 0; --b){
        alt *= b;
    }

    printf("Cevabiniz: %d", ust / alt);

    return 0;
}

Bence math kütüphanesi kullanılsa daha da kolay olabilirdi.
Normalde öyle yaparım ama yeni başladığı belli. Kendisinin nasıl yapması gerektiğini anlatmak istedim. Her şey için kütüphane eklemek de biraz saçma oluyor. Sınavda hoca üs alma sorduğunda ve kütüphane kullanmak yasak dediğine boş kağıt verenler gördü bu gözler.
for(; b > 0; b--) şeklinde yazmanız gerekli.
b != 0 ile aynı işi yapar. Verim açısından dediğiniz daha iyi tabii.
İkisi içinde 0 olmaması gerektiğini belirtiyorum. Neden 0 ile çarpılıyor?
While önce içini yaptıktan sonra kontrol eden bir yapıya sahip olması gerek diye hatırlıyorum. Muhtemelen sıfırları 1 yaptığınızda düzelecektir.
 
While önce içini yaptıktan sonra kontrol eden bir yapıya sahip olması gerek diye hatırlıyorum. Muhtemelen sıfırları 1 yaptığınızda düzelecektir.
1 yaptığımda da sorun çözülmedi. Döngüleri for döngüsü yaptım fakat o da fayda etmedi.

#include<stdio.h>
int main(){
int a,b,komb;
int ust=1;
int alt=1;

printf("Eleman sayisi:");
scanf("%d",&a);
printf("Secim sayisi:");
scanf("%d",&b);
for(;b!=0;b--){
for(;a!=0;a--){

}
ust*=a;
alt*=b;

}

komb=ust/alt;

printf("Cevabiniz:%d",komb);

return 0;
}
Eki Görüntüle 732376

Kombinasyonun hazır bir formülü var zaten. Direkt formülü uygulayabilirsin.
Algoritma mantığını çalışmak için kendim yazmaya çalışıyorum.
 
Makarna kod yazmayın.
Amacınız kombinasyonun değerlerini bulmak değil, sayısını bulmak. Formülü uygulamak o kadar da zor değil.

Kod:
#include <stdio.h>

int fact(int a){
    int result = 1;
    
    for(int i = 1; i <= a; ++i){
        result *= i;
    }
    
    return result;
}

int comb(int n, int r){
    return fact(n) / (fact(r) * fact(n-r));
}

int main(){
    printf("%d", comb(5, 2));
    return 0;
}
 
Amacım zaten yeni olduğum için değer azaltarak bulmak istememdi. Formülle yaptığım zaten hazır bir tane var.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…