c# Faktöriyel bulma

Yılmaz Kanatlı

Hectopat
Katılım
8 Mayıs 2018
Mesajlar
11
1/1! + 1/2! + 1/3! +...+1/n! toplamını klavyeden girilen n değerine göre faktöriyelini hesaplayınız. Faktöriyel() fonksiyonu yazılacak. (c# kodları)

Diye bir sorum var arkadaşlar. Yardımcı olabilecek olan var mı?
 
Soruyu tam okumadan yazmışım pardon :D Düzenleyip tekrar yazacağım
---
C#:
    public static void Main()
    {
        double sonuc = 0;
        for(int i = 1; i <= 5; i++) {
            sonuc += (1.0 / faktoriyel(i));
        }
        Console.WriteLine(sonuc);
    }
   
    public static int faktoriyel(int sayi) {
        return (sayi == 1) ? 1 : sayi * faktoriyel(sayi - 1);
    }


i <= 5 dediğim yere hangi sayı isteniyorsa onu koyacaksınız. Input alarak da koyabilirsiniz.
 
Son düzenleme:
Form uygulaması için şöyle

1641814086840.png
Burada 2 label, 2 TextBox, 1 tane button oluşturuyoruz.
1- Label'leri "Girdi" ve "Çıktı" yazmak amacıyla koydum, tasarım için yani.
2- TextBox'lardan üsttekinin adı textBox1, alttakinin adı textBox2. Üsttekine sayı gireceğiz alttakine de faktöriyeli çıkacak.
3- textBox1'e sayıyı girdikten sonra button'a basacağız öyle çıkacak faktöriyeli.

Kodlar da şöyle
------------------------------------------------------------------------------------------------------
int girdi = 1; // bu her sayı olabilir
List<int> i_degerleri = new List<int>();
private void button1_Click(object sender, EventArgs e)
{
girdi = int.Parse(textBox1.Text); //int.parse string değer olan TextBox'ı integer değerine çevirmek içindi.
for (int i = 1; i <= girdi; i++)
{
i_degerleri.Add(i);
}

int charpim = 1; // sadece 1 yazılmalı
for (int i = 1; i < i_degerleri.Count(); i++)
{
charpim *= i_degerleri;
}
textBox2.Text = charpim.ToString(); // string değerindeki "toplam" değişkenini strine çevirdik textbox string türünden olduğu için.
------------------------------------------------------------------------------------------------------
Anlamadığın yerleri sorabilirsin.
 
Son düzenleyen: Moderatör:
Soruyu tam okumadan yazmışım pardon :D Düzenleyip tekrar yazacağım
---
C#:
    public static void Main()
    {
        double sonuc = 0;
        for(int i = 1; i <= 5; i++) {
            sonuc += (1.0 / faktoriyel(i));
        }
        Console.WriteLine(sonuc);
    }
  
    public static int faktoriyel(int sayi) {
        return (sayi == 1) ? 1 : sayi * faktoriyel(sayi - 1);
    }


i <= 5 dediğim yere hangi sayı isteniyorsa onu koyacaksınız. Input alarak da koyabilirsiniz.
Galiba kodlarda hata var düzgün çalıştıramadım . klavyeden girilen dediğine göre ReadLine olacak sanırım.
 
public static void Main()
{
double sonuc = 0;
for(int i = 1; i <= 5; i++) {
sonuc += (1.0 / faktoriyel(i));
}
Console.WriteLine(sonuc);
}

public static int faktoriyel(int sayi) {
return (sayi == 1) ? 1 : sayi * faktoriyel(sayi - 1);
}
Pratik olan kod bu fakat mantığını kavrayamadıysan daha temel şekilde:

[CODE title="C#"]public static void Main(string[] args)
{
int n;
float toplam=1;

n=Convert.ToInt32(Console.ReadLine());

for(int i=2; i<=n; i++){
toplam+=(1 / Convert.ToSingle( faktoryel2(i) ) );
}

Console.WriteLine(toplam);
}

public static int faktoryel2(int sayi ){
int faktoryel=1;
for(int j=sayi; j>0; j--){
faktoryel*=j;
}
return faktoryel;
}[/CODE]
 
Son düzenleme:
Pratik olan kod bu fakat mantığını kavrayamadıysan daha basit türden olanı:

public static void Main(string[] args)
{
int n;
float toplam=1;

n=Convert.ToInt32(Console.ReadLine());

for(int i=2; i<=n; i++){
toplam+=(1 / Convert.ToSingle( faktoryel2(i) ) );
}

Console.WriteLine(toplam);
}

public static int faktoryel2(int sayi ){
int faktoryel=1;
for(int j=sayi; j>0; j--){
faktoryel*=j;
}
return faktoryel;
}

Kod yazarken kod braketlerinin içine yazarsan daha düzgün görünür.
 
Pratik olan kod bu fakat mantığını kavrayamadıysan daha temel şekilde:

[CODE title="C#"]public static void Main(string[] args)
{
int n;
float toplam=1;

n=Convert.ToInt32(Console.ReadLine());

for(int i=2; i<=n; i++){
toplam+=(1 / Convert.ToSingle( faktoryel2(i) ) );
}

Console.WriteLine(toplam);
}

public static int faktoryel2(int sayi ){
int faktoryel=1;
for(int j=sayi; j>0; j--){
faktoryel*=j;
}
return faktoryel;
}[/CODE]
hocam sizdeki çıktı gözüntüsünü atabilir misiniz
 
Herkes standart çözümler atmış. Biraz da Lambda (Functional) örneği görün.
Belki bazılarının ilgisini çeker.

C#:
private static Func<long, long> Fact = n => n < 2 ? 1 : n * Fact(n - 1);

private static Func<int, double> SolveLambda = n => Enumerable.Range(1, n + 1).ToArray().Select(v => 1.0 / Fact(v)).Sum();
 
Uyarı! Bu konu 4 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı