search
Giriş
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
288 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

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;
}
131 puan

İlgili sorular

0 oy
1 cevap 553 gösterim
553 gösterim
#include<stdio.h> #include<conio.h> int main() { char *sehir="osmaniye"; int i=0; while(sehir[i]!='\0') {printf("%c-%p\n",*(sehir+i),(sehir+i)); i++;} getch(); } Arkadaşlar neden *sehir[] şeklinde tanımlamadık sonuçta osmaniye bir dizi ? anlatabilecek var mı?
21 Ocak 2016 C/C++ kategorisinde hasscript 139 puan sordu
0 oy
1 cevap 342 gösterim
342 gösterim
merhaba ,100-999 arasında bir sayı seçmem lazım daha sonra bilgisayara karşı bir oyun oynamam lazım ve bilgisayarın kazanması gerekiyor. sadece 1 ve 2 çıkarabiliyoruz sayıdan. eğer ben 1 seçersem bilgisayar onu 3'e tamamlamak için 2 seçecek ve bu 0'a kadar bu şekilde gidecek ama bir döngü oluşturamıyorum.kodlama konusunda yeniyim yardımcı olabilirseniz çok sevinirim.
25 Mart 2018 C/C++ kategorisinde irem_U 108 puan sordu
0 oy
1 cevap 718 gösterim
718 gösterim
Merhaba arkadaşlar c de dosyadan okuduğum verileri preorder,inorder,postorder'a göre sıralamam lazım bilgisi olan yönlendirme yapabilecek olan var mı?
21 Ocak 2016 C/C++ kategorisinde hasscript 139 puan sordu
0 oy
1 cevap 784 gösterim
784 gösterim
if (discrim < 0){ x1 = (-b + d) / (2 * a); x2 = (-b - d) / (2 * a); String root_1 = Double.toString(x1); String root_2 = Double.toString(x2); System.out.println("There are two imaginary roots at:" + root_1 + "and" + root_2); bu doğrumu arkadaşlar?
24 Şubat 2016 Java kategorisinde sevilay 106 puan sordu
0 oy
1 cevap 551 gösterim
551 gösterim
Sayılar dizisi şağıdaki gibi olsun. sayİlar(25,22,17,19,47,3,98,5,124,10) -Kullanıcıdan 1 ile 10 arasında bir sayı girilsin. -Kullanıcı N degerini girmiş ise, programımız dizideki en kucuk N.sayiyi ekrana yazdırsın. Örneğin; kullanıcı ... HERHANGİ BİRİNİ KULLANMADAN YAZINIZ. (Bu programı cozememe nedenim bu oldugu icin büyük harflerle yazdim.Yoksa kabarcık algoritmasıyla kolayca çözülebiliyor.)
12 Eylül 2018 C/C++ kategorisinde uzun53 102 puan sordu