C# ile A* (Star) Algoritması kullanarak 8 Taş Bulmacasını Çözmek | Yapay Zeka – Solving 8 Stone Puzzles using A * (Star) Algorithm with C# Artificial Intelligence

A star algoritması sezgisel bilgileri kullanarak bir durumdan bir amaca ulaşmaktır. Bu amaç duruma ulaşmak için minimum yolun bulunmasında daha az tarama yapmaya olanak tanımalıdır.

İyi seçilmiş bir sezgisel fonksiyon ile çok az dallanma yaparak hedefe yaklaşabiliriz.

Bu görselde yeşil kutudan kırmızı kutuya gitmeye çalışalım. Ancak kutuların ortasında bir duvar olsun.

Öncelikle yeşil kutudan başlayarak çevre alanları taramaya başlayacağız. Daha sonra taradığımız alanları açık bir listeye ekleyeceğiz.

Eğer karenin çevresinde duvar var ise bunu listeye eklemeyeceğiz.

Daha sonra ise başlangıç karesini kapalı bir listeye ekleyeceğiz.

Yukarıdaki görsel gibi çevresini tarayacağız.

Daha sonra açık listeye eklediğimiz kareleri her birisini F = G + H denklemi ile en küçük F değerini seçeceğiz.

G = Başlangıç noktasına göre yoldur.

H = Amacımıza ulaşmak için tahmini bir değerdir. (Heuristic) Tahmin

F değerinin en küçüğünü seçeceğiz çünkü o yol bizi kısadan amacımıza ulaştıracaktır.

Her kare hareketi için 10’ar puan diyelim. Köşegen üzerinde yapılan çaprak hareket 14 puandır (10*kök(2))

Yani ilk kutumuzu ele alırsak üstteki gibi bir sonuç çıkacaktır. Sol üst F değeri Sol alt G değeri sağ alt H değeridir.

Bu değerlere baktığımızda F değerinin en küçüğüne gideceği için kutumuz sağa gitmelidir.

Daha sonra aşağı aşağı gidecektir. Fakat bir kısa yolumuz daha vardır. Direk F 40 olan yere gitmek yerine çaprazdaki 54 değerine sahip olan kutuya gitmek bizi daha kısadan götürecektir.

Şu şekilde bir soru olabilir. Öncelikle F 54’e gidiyoruz daha sonra aşağı 74 gidiyoruz ama çapraz gitsek daha kısa olabilir denilebilir fakat duvar buna engel olacaktır. Kutu şeklinde hareket edeceği için önce aşağı sonra sağa gitmeliyiz.

A Star Algoritması Mantığı Özeti

Başlangıç karesini açık listeye ekle.

Çevresini dolaş en küçük F değerli kareyi bul. Seçilen kareyi kapalıya ekle.

Seçili kare için aynı şekilde yap. Duvar gibi engellere bakma.

Eğer amacımız gerçekleşirse yol bulunmuştur.

8 Taş Bulmacası

8 Taş bulmacasını da A* algoritması ile çözebiliriz.

Buradaki maliyetimiz her hareket için 1’dir.

Üstteki gibi bir başlangıcımız var ve bir amacımız var.

Boş olan kareyi hareket ettirmemiz gerekiyor.

Sadece yukarı, aşağı, sağa , sola hareket ettirebiliriz.

Üstteki fotoğraftaki gibi hareketler yaparak sonuca ulaşabiliriz.

C# ile yapmış olduğum programda başlangıç durumu ve amaç durumu 2 tane kullanıcının girmesi için beklenen yer vardır ve ‘,’ ile ayrılmalıdır.

Çöz denildiğinde çözdükten sonra animasyonlu olarak ‘0’ yer değiştirecektir. Yer değiştirmeler sağda gösterilir. Yaptığı işlemler en altta yazmaktadır.

Kodlar: https://github.com/eraykisabacak/A-Star-Algorimasi-8-Bulmacasi

C# ile Sağlık Ocağı Hasta Takip Sistemi – Health Center Patient Tracking System – HBYS

C# ile Sağlık Ocağı Hastane Hasta Takip Sistemi hazırladım. Projemde MSSQL veri tabanını kullandım. Bazı yanlışlarım hatalarım olabilir.

Saglik-Ocagi-Hasta-Takip-Sistemi

Sağlık Ocağı Hasta Takip Sistemi – Health Center Patient Tracking System – HBYS

Sağlık Ocağı Hasta Takip Sistemi Sağlık ocaklarında hastaların poliklinik giriş ve çıkışlarının takibi ve raporlanması amacıyla detaylı bir otomasyon geliştirmeniz istenmektedir.

Kurulum

Projede Entity Framework kullanılmıştır. script.sql dosyasından Microsoft Management Studio’ya giderek New Query’ye tıkladıkdan sonra script.sql dosyasının içindeki kodu alıp Execute ettiğinizde tablolar ve veriler gelmiş olacaktır.

Uygulama İçi Fotoğraflar

Login

Login Uyarısı

Hasta İşlemleri

Taburcu Formu

Taburcu Formu

Poliklinik Tanıtma

Kullanıcı Tanıtma

Hasta Bulma

Detaylı Bilgiler

txtDosyaNo: Hasta ya ait unique numara dosya no metin kutusunun key press eventi enter tuşunu döndürürse hasta bilgileri formdaki alanlara doldurulur.

btnBul: Dosya numarası bilinmeyen hasta geldiğinde bul butonu ile acılan Dosya Arama Yardımı penceresinde hastaya ait bilgiler den biri seçilip sorgulanarak hastanın dosya numarasına erişilir, Gridden seçilen hasta dosya numarası ve bütün bilgileri formda ilgili alanlara doldurulur.

txtSevkTarihi: Muayeneye gelen hasta için her gelişinde sevk açılmaz, Sevk tarihi ile dosya numarası birlikte hastanın bir kez gelişini birlikte primary key olarak ifade eder.

btnHastaBilgileri: Hastanın Gerekli bilgilerinin düzenlendiği bir form açar. Burada hastaya ait kişisel, kurumsal, kimlik ve iletişim bilgileri bulunur.

cbPoliklinik: hastanın o sevkinde hangi poliklinikte muayene olacağı seçilir.

txtSıraNo: Hastanın poliklinikte muayene için bekleyeceği sıra numarası otomatik olarak verilir.

txtKayitSaati: hasta kaydının yapıldığı saati sistem saatinden çekip bu alana yazdırılır.

btnKaydet: hastanın bu sevkini kaydeder ve bu sevke tahlil ve işlem girilebilir. Groupbox Yapılan tahlil ve işlemler: bu groupbox içinde yer alan alanlar yapılan her bir işlem için doldurulup Ekle butonu ile alttaki gride eklenir. Dr. Kodu her bir doktorun sahip olduğu kod yazılır. Tarih ve saat sistemden çekilir.

btnKaydet: hastanın bu sevkini yapılan işlemler ile birlikte kaydeder (Gride eklenen kayıtlar direk veritabanına işlenirse bu butona gerek kalmayabilir).

btnSeçSil: Hastanın hesabında silinmek istenen işlem veya tahlil grid satır baslığından seçilerek bu buton ile silinir.

btnYeni: Formu temizleyerek yeni bir hastaya işlem yapabilmeye hazır hale getirir.

btnTaburcu: Hastanın gerekli işlemleri (Örneğin ücret tahsil edilmesi) bittikten sonra taburcu edilir. Yani veri tabanına çıkış saati yazılır.

btnYazdır: Hastanın bu sevkine ait bilgileri yazdırılır.

Toplam Tutar: Gridde hasta ya işlenen işlemlerin miktarları ve birim fiyatları çarpılarak işlem tutarı hanesinde görülecek, bu işlem tutarları toplamı toplam tutarda gösterilir,

Poliklinik Tanıtma: Sağlık ocağındaki polikliniklerin insert, update, delete edildiği form, dbPoliklinik te burada kayıtlı ve geçerli poliklinikler görüntülenecek. Poliklinik adı girilip textbox üzerinde entere basıldığında kayıt varsa form doldurulur, yoksa böyle bir kayıt bulunamadı açayım mı diye msgbox uyarısı verir, evet seçilirse alttaki komponente geçer aksi halde formu temizler.

Kullanıcı tanıtma: Kullanıcı adı yazılıp enterlandıgında bilgileri gelir, yetkili kullanıcılar haricindekilere Referanslar ana menüsü görünmez.

Doktor tanıtma: kodu girildiğinde bilgiler gelir ya da mesajla bu kaydı açayım mı diye sorar, doktor kodları hasta işlemleri formunda işlem eklemede ve raporlarda imza olarak kullanılır.

Sağlık Personeli tanıtma: hemşireler vb. personel tanıtılır doktor tanıtmanın benzeri işlemler yapılır.

Demo: https://www.youtube.com/watch?v=ydSiWok7wN8&t=95s&ab_channel=ErayK%C4%B1sabacak

Github : https://github.com/eraykisabacak/Saglik-Ocagi-Hasta-Takip-Sistemi

C# ile Sayı Bulma Oyunu Find the Numbers Game

Sayı Bulma Oyunu

✓ Basamak sayısı kullanıcı tanımlı olmalı ve rasgele üretilmelidir.

✓ Sayının rakamları için tekrarlı ve tekrarsız seçeneği olmalıdır.

✓ Kullanıcı sayıyı bulmasına yardımcı olmak için yerinde olanlara mavi renk; yerinde olmayıp içinde geçen sayılara kırmızı renk ile işaretlenmelidir.

✓ Hak sayısı ise kullanıcı tarafından belirlenebilmelidir.

✓ Her hak için belirli bir süre tanınmalıdır.

✓ Skor listesi tutulmalı ve gerekli bilgiler bir dosyada tutulmalıdır.

Github: https://github.com/eraykisabacak/Say-Bulma-Oyunu-Find-the-Numbers-Game

C# ile Adam Asmaca Oyunu – Hangman Game with C#

Adam Asmaca Oyunu

✓ Bilinemeyen her harf için adamı asılmaya bir adım daha yaklaştıran kelime oyununu Windows uygulaması şeklinde kodlamanız istenmektedir.

✓ Form tasarımları gerekenlere göre özgün bir şekilde oluşturulmalıdır.

✓ Kelime veritabanı olarak kullanılmak üzere bir metin dosyası oluşturun. Bu metin dosyasına yeni kelime ekleme ve dosyadan kelime silme işlemleri yapılabilmelidir.

✓ Kullanıcını oyuna başladığında opsiyonel olarak belirlediği harf sayısı kadar veya rasgele boyutlarda bir kelime, veritabanındaki uygun kelimelerden seçilmedir.

✓ Sorulan kelimeye uzunluğunun 2 fazlası kadar bir hak tanıyarak kullanıcının kelimeyi bulması istenmelidir.

✓ Sorulan kelimenin her harfi için farklı metin kutuları kullanılmalıdır.

✓ Yanlış tahmin edilen harfler form üzerinde görülmelidir.

✓ Tahminlerde harf tekrarına izin verilmemeli ve kullanıcının hak sayısından düşürülmemelidir.

✓ Skor listesi yapılmalıdır ve bu bilgiler bir dosyada tutularak oyun yediden başladığında görüntülenebilmelidir

Github : https://github.com/eraykisabacak/Adam-Asmaca-Oyun-Hangman-Game

Hangman Game

✓ A word game that brings man one step closer to hanging for each unknown letter You will be prompted to code it as a Windows application.

✓ Form designs should be created in an original way according to the requirements.

✓ Create a text file for use as a word database. This text Adding and deleting words from the file should be possible.

✓ The number of letters that the user can specify when starting the game or A word of random size should be selected from the appropriate words in the database.

✓ By giving the user the right to a word more than 2 should be asked.

✓ Different text boxes should be used for each letter of the asked word.

✓ Incorrectly guessed letters should appear on the form.

✓ Repetition of letters should not be allowed in predictions and should not be reduced.

✓ Score list should be made and this information is kept in a file when the game starts from seven must be able to be displayed

Github : https://github.com/eraykisabacak/Adam-Asmaca-Oyun-Hangman-Game

C# – Ajanda Yazılımı – Personel Girişi ve FileStream Dosya İşlemleri

NYP ilkeleri ile geliştirilecek personel bilgilerini tutan bir Ajanda yazılımı tasarlamanız istenmektedir. Bu amaçla kullanılmak üzere aşağıda verilen Form tasarımlarını yapmalıdır. Ayrıca personel bilgilerine erişmek ve sorgulama işlemlerinde kullanmak üzere Personel.cs ve Ajanda.csisminde iki sınıf tasarlanacaktır. Girilen kayıtlar dosyaya kaydedilecek ve program kapatıldığında bilgi kaybı olmayacaktır. Program yeniden çalıştırıldığında veriler dosyadan okunacak ve çalışmaya devam edecektir. Veri tabanı kullanılması istenmemektedir.

Program çalıştırıldığında ilk olarak Login Penceresi gelecek ve Kullanıcı Adı – Şifre eşleşmelerini “users.txt” dosyasından kontrol edilecek. Yetkili bilinen bir kullanıcı ise Login formu gizlenecek; Ana Form açılacak.

Ana Formun Menustrip kontrolünde Görünüm sekmesinden yeni veri kaydı yapılacak olan Personel Kayıt Ekranına ve Arama Ekranlarına erişim sağlanacaktır.

Tasarlanacak Personel sınıfı için;

a)Personel bilgilerinin ( Ad, Soyad, Doğum Tarihi, Meslek, Cinsiyet, Medeni durum ve maaş ) ve sorgulama metotlarının kodlanacağı bir sınıf tasarlayın. Tüm alanlar için uygun veri türlerini belirleyin.

b)Sınıftaki tüm değişkenler için property tanımlamalarını yapın.

c)Personel adını ve soyadını parametre olarak alan bir kurucu metot tanımlayın.

d)Yaş adında bir sadece get bloğu olan bir property tanımlayın. Bu property için doğum_tarihi değişkenine bağlı olarak personelin yaşını geri dönderecek şekilde kodlamasını yapın.

e)Cinsiyet ve Medeni Durum alanları için enum tanımları yapın.

f)ZamYap, KalanGünSayısı, DosyadanOku, DosyayaYaz isimlerinde 4 metot tasarlamanız gerekmektedir:

ZamYap Metodu: Parametre olarak verilen miktar kadar personelin maaş değişkeninin değerini günceller.

KalanGünSayısı Metodu: 57 yaş baz alınarak personelin emekliliğine kalan gün sayısını hesaplar ve geri dönüş değeri olarak verir.

DosyadanOku Metodu: Belirli bir konumda tutulan “data.txt” isimli dosyadan kayıtların tamamını okur ve her biri için Personel nesnesi oluşturur. Bunları Personel tipinde bir diziye yerleştirip ve bu diziyi geri dönüş değeri olarak verir. Amacı program başlangıcında kayıtların okunmasıdır.

i.Birinci yöntem olarak; burada henüz bilmediğiniz (!) Generic List yapılarını araştırıp kullanabilirsiniz.

Örnek: List<Personel> liste = new List<Personel>();

ii.İkinci bir yöntem olarak; dosyanın ilk satırında toplam kayıt sayısını tutarak kaç elemanlı bir dizi oluşturacağınızı bilebilirsiniz.

Örnek:Personel[] kayıt= new Personel[1000];

iii.Bu biçimlendirmeyi okumak için String sınıfının Split metodundan faydalanabilirsiniz.

DosyayaYaz Metodu: Personel kayıt listesini parametre olarak alır ve “data.txt”isimli dosyaya aşağıdaki biçimlendirmeye uygun şekilde herbir satıra bir kayıt olacak biçimde dosyayı oluşturur.

Örnek Kayıt Biçimlendirmesi şu şekilde olmalıdır:

ad | soyad | dogum_tarihi | meslek | cinsiyet | medeni_durum | maas | email | adres | telefonlar

Burada telefonlar ajanda nesnesinden alınacağı için birden fazla olabilir:

telefonlar : telAdı1,telNo1 + telAdı2,telNo2 + telAdı3,telNo3

Bu biçimlendirmeyi oluşturmak için String sınıfının Join metodundan faydalanabilirsiniz.

Bir personelin birden fazla telefon bilgisi (ev, iş, GSM, GSM2, vb.) olabilir. Bu nedenle telefonları tutmak amacıyla Ajanda.cs isminde bir sınıf tasarlamanız istenmektedir. Ajanda sınıfında telefonAdı ve telefonNo isimli uygun türlerde iki değişken tanımlamasını ve bu değişkenlerin property tanımlamalarını yapınız. Ayrıca uygun bir kurucu metot tanımlayınız.

Örnek:telefonAdı = ev , telefonNo = 332 223 33 36

Daha sonra Personel sınıfı içinde bir Ajanda dizisi oluşturun ve o personele ait telefonları bu diziye ekleyin. (Not:Ajanda dizisini generic list olarak veya 10 elemanlı bir dizi olarak oluşturabilirsiniz. )

DİKKAT EDİLMESİ GEREKENLER

1.Ana Form MdiParent olarak, diğerleri child formlar olarak çalışacaktır.

2.Sınıflar için yukarıda tanımlayacağınız metot ve değişkenlerin tamamı form arayüzünde kullanılmayacak olabilir. Önemli olan sizden istenilenlerin eksiksiz yapılmasıdır.

3.Personel Kayıt işlemi aşağıda tasarımı görülen form üzerinden yapılacaktır. Bu esnada tasarlanacak olan Personel ve Ajanda sınıflarının kullanılması zorunludur. Sınıflar kullanılmadan yapılan ödevler bütünüyle geçersiz sayılacaktır.

4.Personel Kayıt Arama Ekranında personel adına göre arama işlemi yapılacak; ilk bulunan kayıt bilgileri yeni bir FormKayıt Penceresi içinde gösterilecektir.

5.30.05.2019 Perşembe günü ders saatinde şahsen yapılacaktır. Kontrole gelmeyenlerin ödevleri geçersiz sayılacaktır.

6.Dosya adı: öğrenci_numarası.rar şeklinde olmalıdır.

Kodlar : https://github.com/eraykisabacak/Ajanda-Yaz-l-m-

C# ile 5’e Bölünen 7’ye Bölünemeyen Sayıları Bulan Program

Merhaba arkadaşlar bugün sizlere C#’da 5’e bölünen 7’ye bölünemeyen sayıları bulmaya çalışacağız.

Öncelikle 2 tane textbox koyalım. Daha sonra sayıları eklemek için listbox ekleyelim.

Daha sonra ise kod tarafına geçelim. Burada öncelikle textboxtaki sayıları değişkene ekleyelim.

Sonra bir döngü ile bütün sayıları alalım ve if yardımı ile 5 ile bölünenleri bulalım içerisinede 7’ye bölünemeyenleri bulalım. Listbox’a ekleyelim. Daha detaylı bakmak için kodları alt tarafta bulabilirsiniz.

Kodlar:
https://github.com/eraykisabacak/csharp/tree/master/5e%20Bolunen%207ye%20Bolunmeyen%20Sayilar

C# ile Basit Hesap Makinesi Yapımı

Merhabalar bu yazımız da basit düzey de nasıl yapacağımızı göstereceğim.

İlk öncelikle 2 tane textbox koyalım ve 1 tanede button koyalım. Sonuçlarını yazdırmak içinde 1 tane label koyalım ve 4 tane radiobuttonu koyalım.

Daha sonra kod tarafına geçelim ve öncelikle 2 tane double sayı1 sayi2 tanımlayalım. Buradaki önemli nokta double olması çünkü 2 sayıya bölündüğünde virgülden sonraki görebilmemiz içindir.

Bu sayıları alırken textbox’daki text alalım ve convert ile double’a dönüştürelim. Daha sonra ise radiobuttonlarının hangisinin işaretlendiğini anlamak için checked ile kontrolümüzü yapalım.

Daha sonra ise if’lerin içine toplama çıkartma çarpma bölme olarak yapalım.

Böylelikle basit bir hesap makinesi yapmış oluyoruz. Kodları alt taraftaki github linkinden bulabilirsiniz.

Kodlar :
https://github.com/eraykisabacak/csharp/tree/master/HesapMakinesi

C# ile Form Ekran Tasarımı

Merhaba arkadaşlar bugün sizlerle beraber örnek bir tane form tasarımını sizlerle paylaşacağım.

Kodlar:
https://github.com/eraykisabacak/csharp/tree/master/UygulamaDesign1

C# ile Formu Hareket Ettirme Sağ Sol Yukarı Aşağı

Merhabalar bu yazımda C# ile form ekranını yukarı aşağı sağ sol olmak üzere 4 tarafa buttonlar ile nasıl hareket ettirileceğinin kodunu sizlerle paylaşacağım.

Öncelikle programıma 4 adet buton ekliyoruz. Daha sonra butonların üzerine çift tıklayarak tıklandığında ne olması gerektiğini içerisine yazıyoruz.

Burada öncelikle isterseniz butonları isimlerini değiştirebilirsiniz. Ben değiştirdim. Sonra 2. form ekliyoruz. Daha sonra 1. form açıldığında load yerine yani yüklendiğinde 2.formun açılmasını istiyoruz. En üstte ise bunu tanımlıyoruz nesne olarak. Daha sonra yukarı butonu için form2 yani fr2’ye top -25 ekleyerek yukarı gitmesini sağlıyoruz. Daha sonra sol için left -25 sağ için left +25 ve aşağı için top +25 eklemesi yaparak her tıklandığında bunu arttırıyoruz.

Kodların Tamamı :
https://github.com/eraykisabacak/csharp/tree/master/Sag_Sol_Yukari_Asagi/Sag_Sol_Yukari_Asagi

C# ile Bir Formdan Diğer Forma Bilgi Aktarma

Bu yazımızda C# ile Form1’den Form2’ye nasıl bilgileri değerleri aktarabileceğimizi göstereceğim.

Öncelikle 1 tane textbox koyuyoruz. Daha sonra 1 tane de buton koyuyoruz.

Daha sonra butona çift tıklayarak butona tıklandığında neler olması istediğimizi buraya yazıyoruz.

Burada öncelikle form2’yi projenin Solution Explorer kısmından Add diyerek 1 tane Windows Form oluşturuyoruz. Sonra bu oluşturduğumuz yeni forma 1 tane label ekliyoruz. Daha sonra geri gelerek butona bastığımızda ne olacak olan button1_click geliyoruz. Buraya öncelikle form2 nesnesini oluşturuyoruz. Daha sonra textbox’dan almış olduğumuz değeri form2 nesnesinin label’ına eşitliyoruz ve form2’yi show ediyoruz. Yani form2’yi ekrana getirmiş oluyoruz.

Kodları Aşağıda bulabilirsiniz.

Github : https://github.com/eraykisabacak/csharp/tree/master/Diger_Forma_Bilgi_Aktarma