Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
33 gösterim
Yapmak istediğim x^(n-1)/(n-1)! şeklinde girilen sayıya göre dizi oluşturmak, örneğin:

N=5,x=4 ise

4^0/0!+4^1/1!+4^2/2!+4^3/3!
şeklinde olacak.




#include<stdio.h>



int belirle(int,int);
int fak(int);

int main()
{
int x, neksi, n;
int sonuc;

printf("x degerini giriniz:\n");
scanf("%d", &x);

printf("\nn degerini giriniz:\n");
scanf("%d", &n);

neksi=n-1;

for(int i=0;i<=neksi;i++)
{
if(i<neksi)
printf("%d^%d/%d! +", x,i,i);


if(i==neksi)
primtf("%d^%d/%d! ", x,i,i);
}



printf("sonucunuz: %d", belirle(x,neksi));



}

int belirle(int iks, int neks)
{
int belirten;
int sonuc;

if(neks==0)
return 1;
else if(neks==1)
return iks+belirle(iks,neks-1);
else
{
belirten=iks;
for(int i=2;i<=neks;i++)
belirten *= belirten;

sonuc=belirten/fak(neks);


return sonuc+belirle(iks, neks-1);
}
}

int fak(int nek)
{
int bir;

bir=1;
for(int i=1;i<=nek;i++)
bir *= i;

return bir;
}



1-Mesela x e 5 n ye 0,1,2,3 girince cevabı doğru buluyor. Ancak 4 e gelince cevabı yanlış buluyor.
2-Bu fonksiyonlarda float ekleme nasıl yapılıyor?
3- Fonksiyonu voidle oluştururken voidin özelliği ne?


Şimdiden teşekkürler.
C/C++ kategorisinde (102 puan) sordu

1 cevap

0 oy
Selamlar,

void fonksiyonun bir deger donmeyecegi anlamina geliyor.

N=5 icin dogru calismamasinin nedeni 64/6'nin tam sayi olmamasindan kaynaklaniyor. Bu sorunun zaten farkinda oldugun 2. sorundan belli oluyor.

Bir fonksiyonun float donmesini saglamak icin donen veri tipini int (integer=tam sayi) yerine float olarak degistirmen gerekiyor. Ayrica ondalikli islem yapacagin her yerdeki veri tiplerini de float olarak degistirmen gerekiyor:
    float sonuc;

Son olarak bir sey daha yapman gerekiyor. C dilinde islem yaptigin tum degerler tam sayi olmasina ragmen islem sonucu ondalikli sayi olacaksa bunu kodlama yaparken ozellikle belirtip veri tipi degisimini zorlaman gerekiyor. Bir ornekle aciklamak gerekirse:
    float x;
    int y=5,z=2;
    x=y/z;

Bu islemin sonucu 2 olarak hesaplanir. Tam olarak ondalikli sayiyi gormek istersen islem yaptigin degerlerden birisi icin tip degisikligi yapman gerekir. Mesela:

    float x;
    int y=5,z=2;
    x=(float)y/z;

float parametreleri yazdirman icin %d yerine %f kullanmak gerekiyor. Kodun son hali soyle:

#include<stdio.h>

float belirle(int,int);
int fak(int);

int main()
{
    int x, neksi, n;
    int sonuc;

    printf("x degerini giriniz:\n");
    //scanf("%d", &x);
    x=4;

    printf("\nn degerini giriniz:\n");
    //scanf("%d", &n);
    n=5;    

    neksi=n-1;

    for(int i=0;i<=neksi;i++)
    {
        if(i<neksi)
            printf("%d^%d/%d! +", x,i,i);

        if(i==neksi)
            printf("%d^%d/%d! ", x,i,i);
    }

    printf("sonucunuz: %d", belirle(x,neksi));

}

float belirle(int iks, int neks)
{
    int belirten;
    float sonuc;

    if(neks==0)
        return 1;
    else if(neks==1)
        return iks+belirle(iks,neks-1);
    else
    {
        belirten=iks;
        for(int i=2;i<=neks;i++)
            belirten *= belirten;

        sonuc=(float)belirten/fak(neks);

        return sonuc+belirle(iks, neks-1);
    }
}

int fak(int nek)
{
    int bir;

    bir=1;
    for(int i=1;i<=nek;i++)
        bir *= i;

    return bir;
}
(161 puan) cevapladı

İlgili sorular

0 oy
1 cevap 51 gösterim
51 gösterim 21 Ocak 2016 C/C++ kategorisinde hasscript (131 puan) sordu
0 oy
1 cevap 22 gösterim
0 oy
1 cevap 98 gösterim
98 gösterim 21 Ocak 2016 C/C++ kategorisinde hasscript (131 puan) sordu
0 oy
1 cevap 157 gösterim
0 oy
1 cevap 30 gösterim
30 gösterim 4 Ocak 2016 C/C++ kategorisinde Batuhan (108 puan) sordu
...