Kategori arşivi: Programlama

Doğru Algoritma Hayat Kurtarır

 

İlginç bir başlık, belki de çok iddalı. Olabilir belki bir hayat kurtarmayabilir ama bence zamanın önemini anlatıyor.

Dün gece bir iş için geliştirmem gereken 10 haneli bir şifre algoritmasını düşünürken aslında bilgisayarımı ne kadar fazla yorduğumu gördüm.

Topu topu 500.000 adet unique şifre üretme işlemi 16 saat (evet yazıyla on altı saat) sürer mi? Ben de sürdü. Bugün yazmış olduğum kodları incelerken bu süreyi nasıl kısaltırım, bu iş  bu kadar sürmemesi lazım diye düşünürken ne kadar fazla gereksiz kod kullandığımı gördüm.

İşe ilk olarak onları temizlemekle başladım. Sonra baktım ciddi bir hızlanma söz konusu…

Derken doğru döngülerin, doğru metotların hatta doğru değişkenlerin doğru yerde kullanılmasının hızı ne kadar etkilediğini görünce gözlerime inanamadım.

16 saatte ürettiğim 500.000 adet şifreyi 50 dakika 02 saniye gibi bir sürede üretince “her kod yazanın programcı olamayacağını” bir kez daha anladım…

C# ile Dosyalama ve Şifreleme Örneği

Uzun zamandır programlama örneği vermiyordum. Bu yazımızın konusu yarın yapacağım sınav öncesinde öğrencilerime pratik olsun diye hazırlattığım bir uygulama.

Soru:Bir Metin (text) dosyası içerisine yazılanları şifreli olarak saklayacak ve o metin dosyası, yazacağımız program dışında başka herhangi bir metin editörü ile açıldığında şifreli olarak görüntülenecektir. Yazının şifrelenmemiş halini ancak kendi yazdığımız program ile görüntüleyebileceğiz.

İşlem Basamakları:

1)Form üzerine 1 Label, 1 TextBox, 2 Button, 1 OpenFileDialog ve son olarak da 1 SaveFileDialog elemanlarını aşağıdaki şekildeki gibi form üzerine yerleştiriyoruz.

2)Nesnelere aşağıdaki özellikleri tanımlıyoruz;

  • Label1.Text = “Metin İçeriği:”
  • button1.Text = “Kaydet”
  • button2.Text = “Aç”
  • saveFileDialog1.Filter = “Metin Dosyası (*.txt)|*.txt”
  • openFileDialog1.Filter = “Metin Dosyası (*.txt)|*.txt”

3) sifrele ve sifreCoz isimli 2 adet metot oluşturuyoruz.

[sourcecode language=”csharp”]private string sifrele(string icerik)
{
string sifrelenmisi = "";
foreach (char harf in icerik)
{
sifrelenmisi += Convert.ToChar(harf+2);
}
return sifrelenmisi;
}[/sourcecode]

 

[sourcecode language=”csharp”]private string sifreCoz(string sifreliIcerik)
{
string cozulmusIcerik = "";
foreach (char harf in sifreliIcerik)
{
cozulmusIcerik += Convert.ToChar(harf – 2);
}
return cozulmusIcerik;
}[/sourcecode]

4) button1 tıklandığında;

[sourcecode language=”csharp”]saveFileDialog1.Filter = "Metin Dosyası (*.txt)|*.txt";
saveFileDialog1.ShowDialog();
string yol=saveFileDialog1.FileName;
File.CreateText(yol).Close();
string icerik = textBox1.Text;
string yeniIcerik = sifrele(icerik);
File.WriteAllText(yol, yeniIcerik);
MessageBox.Show("Kayıt İşlemi Gerçekleştirildi");
textBox1.Clear();[/sourcecode]

  5) button2 tıklandığında;

[sourcecode language=”csharp”]openFileDialog1.ShowDialog();
string yol = openFileDialog1.FileName;
string sifreliIcerik = File.ReadAllText(yol);
string yeniIcerik = sifreCoz(sifreliIcerik);
textBox1.Text = yeniIcerik;[/sourcecode]

komutlarını yazıyoruz.

Şifreleme işleminde parametre olarak gönderilen metinsel (string) ifadeyi, karakter karakter okutup, ilgili karakteri, kendisinden 2 karakter sonra gelen karakter ile değiştirme yöntemiyle metnimizi şifreliyoruz. (Örneğin a=c,b=d,c=e…)

Şifre çözme işleminde de şifreleme işleminde yaptığımız işlemin tam tersini yapıp, gelen karakteri, kendisinden 2 karakter önce gelen karakter ile değiştirerek kullanıyoruz.

Programa ait çalışma anı görselleri için aşağıdaki ekran görüntülerini inceleyebilirsiniz.

İskambil Kağıt Resimleri

Geçtiğimiz gün sınıfta öğrencilerle ne programı yazsak ne programı yazsak diye düşünürken aklımıza iskambil kağıtlarıyla oynanan basit bir oyun yazmaya karar verdik.

Ancak oyun kartlarını hemen bulabileceğimizi tahmin ediyordum ki yanılmışım. Bir çok yerli ve yabancı sitede aramamız sonucunda 52 kartın tümünün bir yerde Wikipedia’da bulduk. Buradan da tüm resimler tek tek indirerek kendi paketimizi oluşturmuş olduk.

Şimdi aşağıdaki linkten 1 deste 52 kartımızı indirebilirsiniz. (Kartlar 691px X 1056px boyunda ve PNG formatındadır.)

Dosyaları indirmek için tıklayınız.

Nesne Tabanlı Programlama Dersi 1.Dönem 3.Sınavı Soru ve Cevapları

Bugün TL-12/A sınıfına gerçekleştirmiş olduğum Nesne Tabanlı Programlama Dersi 1.Dönem 3.Sınavı Soru ve Cevaplarını bu yazının sonundaki linkten indirebilirsiniz.

SORU-1) Aşağıdaki formu tasarlayıp, textbox’lara girilen sayıların toplamını, ortalamasını, en büyük ve en küçük olanlarını buldurup label içerisine yazdıran programı aşağıdaki adımları göz önünde bulundurarak tasarlayınız.

SORU-2)Aşağıdaki fonksiyonun sonucunu ilk 50 eleman için hesaplayıp CONSOLE ekranına yazdıran programın kodunu yazınız.

SORU-3) Bir bankanın kredi bölümünde çalışanların işini kolaylaştıracak bir uygulama yazın. Uygulama kullanıcıdan çekilmek istenen kredi miktarını, faiz oranı ve vadeyi alıp müşterinin ödeyeceği faiz miktarını hesaplayacaktır. Faiz miktarını mesaj kutusu yardımıyla gösteren programı hazırlayınız.Faizi hesaplamak için kullanacağımız formül:
Faiz = ( Ana Para x Faiz Oranı x Gün ) / 360

Programı ve sınav evraklarını indirmek için http://www.rtyucel.com/site/notlarim/NTP_TL_12_A.rar adresini ziyaret ediniz.

C# – Dizi Örneği (#1)

Öğretmenliğe ilk başladığım yıllarda görev yaptığım okuldaki bölüm şefim Salih AYDOĞAN’ın meşhur programlama örneğinin biraz değiştirilmiş versiyonu:

İstanbul’dan Avusturalya’ya doğru yola çıkan bir yolcu uçağı ıssız bir ada üzerinde düşer. Uçaktan sağ olarak kurtulan yolcular, adanın yerlileri tarafından ele geçirilir ve herkese 1’den başlayan bir sıra numarası verilerek halka şeklinde sıralanırlar.

Yerliler halka şekline sıralanmış olan yolculardan 2 kişiyi atlayıp 3.’yü yeme taktiğiyle sırayla öldürürler.

Yolcu sayısı klavyeden girilecek olan programla sona kalan yolcunun numarasını bulan programın kodunu yazınız.

Kodlar: C# – Dizi Örneği (#1) yazısına devam et

Kontrol Deyimleri Modülü

Geçtiğimiz sene derslerin ve içeriklerin revizyonu kapsamında yazmış olduğum Bilişim Teknolojileri Alanı 10.Sınıflar Programlama Temelleri dersine ait “Kontrol Deyimleri” modülünü buradan indirebilirsiniz.

Bu modülle ilgili görüşlerinizi buradan bana direk iletebilirsiniz.