iki sayı arasındaki tek sayıların faktöriyellerinin toplamını bulan programın kodları. hatayı bulamadım.

0 oy
7 Kasım 2015 mirac Stajyer (520 puan)   sordu
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(void){

int t=0;
int f=1;
int i, x, a, u;

printf("alt değerleri giriniz:\n  ");
scanf("%d",&a);
printf("üst değerleri giriniz:\n  ");
scanf("%d ",&u);

if(a%2==1){

    for(i=a+2;i<u;i+=2){
        for(x=1;x<=i;x++){
            f=f*x;
        }
        
    }
    t=t+f;    

}
else if(a%2==0){

    for(i=a+1;i<u;i+=2){
        for(x=1;x<=i;x++){
            f=f*x;
        }
        
    }
    t=t+f;    

}
printf("sayıların fact toplamı:%d \n",t);

return 0;

}

toplam faktöriyel yerine en büyük faktöriyel değerini veriyor.

3 Cevap

0 oy
7 Kasım 2015 mstfergl Uzman Yardımcısı (4,710 puan)   cevapladı

 if(a%2==1){

    for(i=a+2;i<u;i++){
        for(x=1;x<=i;x++){
            f=f*x;
        }

        i++;
        t=t+f;   
    }
     

}

 

 else if(a%2==0){

    

for(i=a+1;i<u;i++){
        for(x=1;x<=i;x++){
            f=f*x;
        }

        i++;

        t=t+f; 
    }



}

    

8 Kasım 2015 mirac Stajyer (520 puan)   yorumladı
istediğim çıktıyı elde edemiyorum
0 oy
9 Kasım 2015 molcay Kıdemli Uzman (12,350 puan)   cevapladı
9 Kasım 2015 molcay düzenledi

C veya C++ da o kadar iyi değilim ama Python kodu şu şekilde olabilir:

alt_taban = int(input("Alt Tabanı Giriniz: "))
ust_taban = int(input("Üst Tabanı Giriniz: "))

faktoriyel_toplam = 0 # en son print edilecek değer.
for i in range(alt_taban, ust_taban + 1): # for(int i = alt_taban; i <= ust_taban; i++)
    if (i % 2): # sayı tek ise normal de i % 2 == 1 de kullanılabilir ama dillerin çoğu bunuda destekler.
        faktoriyel_sonuc = 1 # gecici olarak tek sayıların faktoriyel sonuclarını tutacak.
        for j in range(1, i + 1): # for(int j = 1; j <= i; j++)
            faktoriyel_sonuc *= j # faktoriyel hesaplanıyor.
        faktoriyel_toplam += faktoriyel_sonuc # genel sonuç değişkeni hesaplanan değer kadar arttırılıyor. 

print(faktoriyel_toplam)

 

yorum satırları kodu kendi dilinde yazman için yardımcı olur inşallah.

Edit -> Java Kodu:

int alt_taban, ust_taban, faktoriyel_toplam = 0;
        int faktoriyel_sonuc = 1;
        
        Scanner reader = new Scanner(System.in);  // Input ları alacak nesne (java da bu şekilde kullanıcıdan alınıyor değerler)
        
        System.out.print("Alt Tabanı Giriniz: ");
        alt_taban = reader.nextInt(); // Alt taban değeri alınıyor.        
        System.out.print("Üst Tabanı Giriniz: ");
        ust_taban = reader.nextInt(); // Üst taban değeri alınıyor.

        for (int i = alt_taban; i <= ust_taban; i++) {
            if(i % 2 == 1){
                faktoriyel_sonuc = 1;
                for (int j = 1; j <= i; j++) {
                    faktoriyel_sonuc *= j;
                }
                faktoriyel_toplam += faktoriyel_sonuc;
            }
        }
        System.out.println(faktoriyel_toplam);

 

0 oy
10 Aralık 2015 AlhnGzl Stajyer (750 puan)   cevapladı

Kardeşim öncelikle hataların
   --> f = 1 atamasını yapman lazım. ( 2 < ... < 6 ) aralığını örnek olarak alırsak 3! sonucunu buluyor, 5! sonucunu             bunun üzerine koyarak ilerliyor. f 'i başlangıç değerine döndürmen lazım.

   --> t = t + f atamasını yapmalısın ki f = 1 atamasında önce f değerini hafızaya alasın.

 

----- ----- -----

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(void){

int t=0;
int f=1;
int i, x, a, u;

printf("alt değerleri giriniz:\n  ");
scanf("%d",&a);


printf("üst değerleri giriniz:\n  ");
scanf("%d",&u);

 

if(a%2==1){
    for(i=a+2;i<u;i+=2){
        for(x=1;x<=i;x++){
            f=f*x;
        }
        t=t+f; 
        f = 1;
    }
}
else if(a%2==0){
    for(i=a+1;i<u;i+=2){
        for(x=1;x<=i;x++){
            f=f*x;
        }
        t=t+f;
        f = 1;
    }
}
printf("sayıların fact toplamı:%d \n",t);
return 0;
}

...