- 28 Mar 2020
- 6,312
- 4,767
Giriş
Merhaba, C# uygulama geliştirme serimizin dördüncü yazısına hoş geldiniz.
Bu yazımızda bir Sezar Şifrelemesi yapan bir program yapacağız.
Serinin önceki yazılarını okumak isteyenler için
Örnekler İle C# Geliştirme - Bölüm 1
Örnekler İle C# Geliştirme - Bölüm 2
Örnekler İle C# Geliştirme - Bölüm 3
İyi okumalar dilerim!
Yapılış
İlk önce projemizi oluşturmakla başlayalım.
Ben programın ismini "Sezar Şifreleyici" şeklinde koyuyorum, siz de kendinize göre isimlendirebilirsiniz.
Proje oluştuktan sonra formun ismini Özellikler > Text bölümünden 'Sezar Şifreleyici' değiştiriyorum.
Sonrasında Araç Kutusundan aşağıdaki araçları ekliyorum.
3 adet Panel
2 adet Label
2 adet RichTextBox
1 adet NumericUpDown
Not: Burada NumericUpDown yerine TextBox ve Button da kullanılabilirdi tabi ama bir farklılık yapayım dedim.
Ayrıca ikinci bir not: Bu programı gerçek zamanlı olarak çalışacak şekilde ayarlayacağız, yani hem RichTextBox içindeki değer değiştiğin de hem de NumericUpDown içindeki değer değiştiğinde şifrelenen değer de ona göre anlık olarak değişecek.
Bunun için öncelikle kodlara gidiyoruz ve Donustur() adında bir fonksiyon oluşturuyoruz.
Kodlara nasıl gidileceğini bilmeyenler için: F7 tuşuna basarak kod bölümünü açabilirsiniz.
Şimdi ise kodumuzun içeriğini inceleyelim.
C#:
string DuzMetin = richTextBox1.Text;
// Burada DuzMetin adında bir değişken oluşturuyoruz ve Şifrelemek istediğimiz değeri yazdığımız RichTextBox1 içindeki değeri aktarıyoruz.
string SifreliMetin = "";
// Burada ise şifrelenen değerleri depolayabileceğimiz bir değişken oluşturuyoruz.
for (int i = 0; i < DuzMetin.Length; i++) // Burada ise DuzMetin uzunluğu kadar çalışacak bir döngü oluşturduk. Yani 'Merhaba' yazıyorsa 7 kere çalışacak.
{
char karakter = DuzMetin[i];
/*
Bu kısımda ise char değişkenimizin içine DuzMetin'den karakterleri atıyoruz.
Burada ki index mantığına gelirsek.
Az önceki örnekteki gibi değerimiz 'Merhaba' diyelim. i 5 desek karakter = 'b' oluyor.
Daha detaylı şekilde anlatmak gerekirse aşağıdaki gibi olacak.
[0] = M
[1] = e
[2] = r
[3] = h
[4] = a
[5] = b
[6] = a
*/
if (char.IsLetter(karakter)) // Bu kodumuzda karakter değişkenimizin harf olup olmadığını kontrol ediyoruz.
{
char baslangic = char.IsUpper(karakter) ? 'A' : 'a';
// Burada ise karakterimizin büyük olup olmadığını kontrol edeceğiz.
int kaydirmaMiktari = (int)numericUpDown1.Value % 26;
/*
Burada ise verilen sayının modunu alıyoruz.
Mesela 32 girildi ise bunu %26 modunu alıyor.
Yani 32 => 6 oluyor.
*/
if (kaydirmaMiktari < 0) // Burada ise sıfırdan büyük olup olmadığını kontrol ediyoruz.
kaydirmaMiktari += 26; // Eğer sıfırdan küçükse değere +26 ekleniyor.
karakter = (char)((karakter - baslangic + kaydirmaMiktari) % 26 + baslangic);
}
SifreliMetin += karakter;
// Burada her tur oluşturduğumuz yeni değeri += ile SifreliMetin'e ekliyoruz.
}
richTextBox2.Text = SifreliMetin;
// Burada da işlem sonunda elde edilen değeri RichTextBox2 içine aktarıyoruz.
Evet, şifreleme kısmımız tamamlandı. Şimdi bu fonksiyonu anlık olarak çalıştırma kısmına geçelim.
Bunun için NumericUpDown ve RichTextBox1 üstüne iki kere tıklıyoruz ve açılan kod kısmına Donustur() fonksiyonunu giriyoruz.
Bunlarla birlikte genel olarak işlemimiz bitti. Tek kalan kısım NumericUpDown aracının eksi değer alabilmesini sağlamakta.
Bunun için NumericUpDown üstüne basıyoruz ve Minumum değeri eksiltiyoruz. Ben 100 ve -100 arası olmasını istediğim için bu şekilde ayarladım.
Sizler aradaki farkın ne kadar olmasını istiyorsanız ayarlarsınız.
Bununla birlikte de programımız bitmiş bulunmakta.
Aşağıdan çalışma şeklini izleyebilirsiniz.
Kapanış
Evet, bugünkü projemiz bitmiş bulunmakta.
Gelecekte ki derslerde görmek istediğiniz bir program olursa yazabilirsiniz.
Okuduğunuz için teşekkür ederim, iyi forumlar!