Çö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.
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.
 
Çözüm

Geri
Yukarı