Merhaba arkadaşlar,
Bu yazımızda Lasa Sayıları üzerinde bir örnek yapacağız. Lasa sayıları nedir diye bakacak olursak, bir sayının Lasa sayısı olması için önce asal olması gerekiyor. Daha sonra sayının kendisinin tersininde asal olması(Örnek: 17) fakat sayının kendisinin tersinin kendisine eşit olmaması gerekiyor(Örnek: 131). Bu uygulamanın kodunu C# kullanarak yazacağız. Ben yazarken fonksiyonları kullanarak kodlama oluşturdum. İlk 100 Lasa sayısını bulduran uygulamayı nasıl yazdığımızı incelerken kodlara da bir göz atalım!
Sayının asal olup olmadığını kontrol etmek için kullandığımız fonksiyon aşağıdaki gibi:
public static bool asal_mi(int sayi) { bool asal = true; for (int i = 2; i < sayi; i++) { if (sayi % i == 0) { asal = false; } } return asal; }
Böylece asallık kontrolü kodunu her seferinde yazıp satır kalabalığı yapmayacağız ve hata bulma aşamamız kolay olacak.
İkinci metodumuz ise bir sayının tersinin nasıl alınacağı hakkında, bir tam sayının tersini nasıl alırız bu konuda aşağıdaki metod bize yardımcı olacak.
public static int tersiniAl(int sayi) { int tersi = 0; while (sayi > 0) { tersi = tersi * 10 + sayi % 10; sayi /= 10; } return tersi; }
Ana programa geçmeden önceki son metodumuz ise ekrana yazdırma metodu. Oluşturduğumuz 100 adet Lasa sayısını ekrana bu fonksiyon aracılığı ile ekrana yazdıracağız.
public static void ekranaYaz(int[] gelenDizi) { for (int i = 1; i <= gelenDizi.GetLength(0); i++) { Console.Write(gelenDizi[i - 1] + " "); if (i % 10 == 0) Console.Write("\n"); } }
Böylece mevcut bütün fonksiyonlarımızı incelemiş olduk. Ana programı inceleyelim ve uygulamayı test edelim. Kod parçalarımızın tamamı aşağıda görüldüğü gibidir.
public static bool asal_mi(int sayi) { bool asal = true; for (int i = 2; i < sayi; i++) { if (sayi % i == 0) { asal = false; } } return asal; } public static int tersiniAl(int sayi) { int tersi = 0; while (sayi > 0) { tersi = tersi * 10 + sayi % 10; sayi /= 10; } return tersi; } public static void ekranaYaz(int[] gelenDizi) { for (int i = 1; i <= gelenDizi.GetLength(0); i++) { Console.Write(gelenDizi[i - 1] + " "); if (i % 10 == 0) Console.Write("\n"); } } static void Main(string[] args) { int[] lasaSayilari = new int[100]; int sayac = 0,sayilar=10,ters; bool asallik,t_asallik; while (sayac < 100) { asallik=asal_mi(sayilar); if (asallik) { ters = tersiniAl(sayilar); t_asallik = asal_mi(ters); if (t_asallik) { if (ters != sayilar) { lasaSayilari[sayac] = sayilar; sayac++; } } } sayilar++; } ekranaYaz(lasaSayilari); Console.ReadKey(); }
Ana programda görüldüğü gibi, ben limiti 100 olarak belirledim fakat bulunmasını istendiği sayıların limitini while döngüsünde kendiniz arttırabilirsiniz. Tabi bu işlemi yaparken dizi boyunu da arttırmayı unutmayın.
Teşekkürler!