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();
 

Yeni konular

Geri
Yukarı