C# faktöriyel bulma programı çalışmıyor

Anunswin

Hectopat
Katılım
20 Ekim 2020
Mesajlar
2.117
Çözümler
5
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp9.
{
class Program.
{
static void Main(string[] args)
{
float s;
int si, f;
bool a = true;
for (; a;)
Console.Write("Lütfen faktöriyelinin girilmesini istediğiniz sayıyı girin: ");

s = Convert.ToSingle(Console.ReadLine());
si = (int)s;
if (si != s || s < 1)
{
Console.WriteLine("Lütfen pozitif tam sayı girin.");
a = true;
}
else.
{
a = false;
for (f = 1; si > 1; si--)
f *= si;
Console.Write("Faktöriyeli={0}", f);
}
Console.ReadKey();

}
}
}

Arkadaşlar, yeni yeni öğrenmeye başladım. Nerede sorun yaptım anlamadım. Program sonsuz bir döngünün içinde faktöriyelinin girilmesini istediğiniz sayıyı yazın diyor.
 
Son düzenleyen: Moderatör:
Parantezleri olmayan bir for sadece kendiden bir sonraki satırı çalıştırır.
Ayrıca o for döngüsü nedir?

O kadar uğraşmanıza gerek yok. Recursive bir biçimde 3-4 satırda halledilebilir.
C#:
static int factorial(int f)
{
    if (f <= 1)
        return 1;
    return f* factorial(f - 1);
}


Hatta arrow function kullanarak tek satıra kadar düşürülebilir.
C#:
static int factorial(int f) => f <= 1 ? 1 : f * factorial(f - 1);
 
Son düzenleme:

Benim staj yerim ödev olarak verdi staj notlarım bunların üzerinden verilecek verdikleri fotokopi de böyleydi pratik yaparak aklımda kalıcı yapmaya çalışıyorum kodları.
 
Benim staj yerim ödev olarak verdi staj notlarım bunların üzerinden verilecek verdikleri fotokopi de böyleydi pratik yaparak aklımda kalıcı yapmaya çalışıyorum kodları.
For, While, If-else tek satır üzerinde çalışmayacaksa parantez kullanılmalı. Yoksa sadece altındaki/yanındaki ilk satır çalıştırılır.
Normalde sonsuz döngüleri sevmem ancak, sonsuz döngüler için while(true) veya for(;;) yeterli. İçerisine önceden true değeri atanmış bool yazmanıza gerek yok.
 
for (;a )ifadesinden sonra bir { ve alttaki readline'dan sonra bir } eklersen çalışır. kullanıcıdan veri alma / diyalog kısmı gereksiz karışık.

Ayrıca si ve f değişkenleri nedir? Internette yayınlayacağınız zaman değişken isimlerini başkaları tarafından kolaylıkla anlaşılacak şekilde düzenlemelisiniz.
 
Ben sanırım bu kod işin de becerikli olamayacağım ya yazılım mühendisi olmayı çok istiyorum hoşuma gidiyor kodlar ile bir şeyler yapmak ancak bazen çok fazla karmaşık geliyor.
 
Ben sanırım bu kod işin de becerikli olamayacağım ya yazılım mühendisi olmayı çok istiyorum hoşuma gidiyor kodlar ile bir şeyler yapmak ancak bazen çok fazla karmaşık geliyor.
Bu tür kodlar için C# yerine Python veya Raku gibi pratik diller kullansanız kod daha sade olur. Örneğin buradaki işlemi Raku ile tek satırda yapmak mümkün:
[CODE lang="perl" title="örnek"]say [*] 1 .. prompt("faktöryeli alınacak sayı? ")[/CODE]
prompt kullanıdan sayı alıyor.
sayı 5 ise 1 .. 5 ardışık artan seri oluşturuyor : 1 2 3 4 5
serinin başındaki köşeli parantez indirgeme / reduction operatörü olup içerdiği operatörü serinin ilk elemanından başlayarak sonuna kadar uygular.
içerdiği operatör * çarpım operatörü o yüzden seriyi 1 * 2 * 3 * 4 * 5 şeklinde dönüştürür
en baştaki say ise tahmin edebileceğiniz gibi, çıkan sonucu basar.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…