Mobil Cihaz da Yüklü Depolama Kartlarını Bulmak

Windows Mobile işletim sistemi yüklü mobil cihazlarda kullandığımız storage card'larla ilgili bir uygulamayı anlatacağım. Cihaza bağlı herhangi bir storage kartı bulup için herhangi bir mesaj yazdıracağız. Cihazda toplamda kaç adet storage card olduğunu tespit edeceğiz. Emülatörünüze 1'den fazla storage card ekleyip sonuçları görebilirsiniz. Bu işlemleri VS 2008 ile beraber gelen emülatörle yapacağınız gibi Windows Mobile Developer Power Toys ile gelen emülatörlerle de aktif olarak deneyebilirsiniz. Windows Mobile için kullanıcı arayüz tasarımımız:   Kullanmamız ve eklememiz gereken namespace'ler: using System.IO; using System.Diagnostics; Kodumuz; publicpartialclassForm1 : Form {                public Form1()               {                       InitializeComponent();               }                conststring _cardsHelloWorldFileName = "helloworld.txt";               conststring _helloWorldMessage = "depolama kartının üzerine yazılan mesaj";               privatevoid menuFindCards_Click(object sender, EventArgs e)              {                        int cardCount = 0;                       DirectoryInfo rootInfo = newDirectoryInfo(@"\");                       foreach (DirectoryInfo dirInfo in rootInfo.GetDirectories())                      {                                    if ((dirInfo.Attributes & FileAttributes.Temporary) != 0)                                   {                                                Debug.WriteLine("Directory Name: " + dirInfo.Name);                                                 Debug.WriteLine(" Full Name: " + dirInfo.FullName);                                                cardCount++;                                                string filePathName = Path.Combine(dirInfo.FullName, _cardsHelloWorldFileName);                                               StreamWriter writer = newStreamWriter(filePathName);                                               writer.Write(_helloWorldMessage);                                              writer.Close();                                              Debug.WriteLine("Dosya yaratıldı: " + filePathName);                                             Debug.WriteLine("");                                   }                    }                   string endMessage = string.Format(" {0} tane  Storage Card bulundu", cardCount.ToString());                   Debug.WriteLine(endMessage);                   MessageBox.Show(endMessage);        } }  Programı çalıştırdıktan sonra görüntümüz; Emülatörler beraber yüklü hiçbir storage card olmadığı için bu mesajı verdi. Emülatöre donanım olarak storage card yükleyelim. Bunun için emülatörün menü seçeneklerinden File ardından configure sekmesine tıklayalım açılan pencerede shared folder kısmına bilgisayarmızdan bir klasör gösterelim mobil cihazda bu klasör storage card olarak gözükecektir. Sağdaki cihazda storage card'ı görebiliyoruz. File Explorerdan bu kontrolü yapabilirsiniz. Uygulamamızı çalıştırdıktan sonraki ekran görüntümüz; Yazan: Volkan Atasever kaynaklar: MSDN

Sayı tahmin oyunu

    Bu C# ile algoritmalar yazımda klasik bir sayı tahmin oyunu kodlayacağım. İtiraf etmek gerekirse en iyi algoritmayı kullandığım söylenemez. Daha fazla iyileştirilebilir. Sizin iyileştirilmiş kodlarınızı yazının altındaki yorum kısmına bekliyorum. Bilgisayarın tuttuğu sayı rakamları birbirinden farklı bir sayı olacak. 10 tahmin hakkımız var. Aynı zamanda eğer rakam doğru basamakta tahmin edildiyse + yanlış bir basamakta tahmin edildiyse - verilecek. Eğer hiç isabet etmemişse bir mesaj vermeyecek. Bunun için C# dili ile aşağıdaki algoritmayı uyguladım; classProgram {              staticvoid Main(string[] args)             {                   Random rnd = newRandom();                   int belirli = 0; bool flag = false;                  do{                        belirli = rnd.Next(1000, 9999);                        string ara=belirli.ToString();                       int hata=0;                       for (int i = 0; i < 3; ++i)                            if (ara[i] == ara[i + 1])                                hata++;                      if (ara[0] == ara[2])                               hata++;                     if (ara[1] == ara[3])                               hata++;                     if (ara[0] == ara[3])                              hata++;                       if (hata == 0)                           flag = true;                    else                         flag = false;                }while(!flag);              int tahmin = 0; int sayac = 0; string tah2;               do{                   Console.WriteLine("Say tahmin ediniz");                   tah2 = Console.ReadLine();                   tahmin = Convert.ToInt32(tah2);                   Console.WriteLine(belirli);                   if (belirli == tahmin){                       Console.WriteLine("Doru Tahmin bildiniz teekkrler");                       break;                  }                 Console.WriteLine(hesapla(tahmin, belirli));               }while(sayac<11);          }        staticstring hesapla(int sayi2,int tah){              string sayi = sayi2.ToString();              string tahmin = tah.ToString();              string sonuc = ""; int say = 0;              for (int i = 0; i < 4; ++i)               for(int j=say;j<4;++j)                {                      if (sayi[i] == tahmin[j])                         if (i == j)                              sonuc += "+";                         else                            sonuc += "-";                }                     return sonuc;          } }  

3 kenarı belli olan üçgen çizilebilir mi?

  Buradaki sorumuz ise 3 kenarı belli olan üçgen çizilebilir mi çizilemez mi bunu hesaplamak olacak. Bu algoritmayı oluşturabilmek için bilmemiz gereken üçgenin kenarları ile ilgili kural ve bağıntılardır. Buna göre bir üçgenin çizilebilmesi için; 1 ) Bir üçgende iki kenarın toplamı, üçüncü kenarından büyüktür. 2 ) Bir üçgende iki kenarın farkı üçüncü kenarından küçüktür. Buna göre kodumuz aşağıdaki gibi olacaktır; classProgram {         staticvoid Main(string[] args)        {               string a, b, c;               Console.WriteLine("1. kenar uzunluunu girin");              a = Console.ReadLine();              Console.WriteLine("2. kenar uzunluunu girin");              b = Console.ReadLine();              Console.WriteLine("3. kenar uzunluunu girin");              c = Console.ReadLine();             bool sonuc = is_trangle(Convert.ToInt32(a),Convert.ToInt32(b),Convert.ToInt32(c));             if (sonuc)                  Console.WriteLine("gen izilebilir");             else                Console.WriteLine("gen izilemez");       }       privatestaticbool is_trangle(int a, int b, int c)      {            bool flag1=false; bool flag2=false;            if ((a + b) > c && (a + c) > b && (b + c) > a)               flag1 = true;            if ((a - b) < c && (a - c) < b && (b - c) < a)               flag2 = true;           return flag1 && flag2;       } }  

Euler sayısını hesaplamak

  e sayısı veya Euler sayısı, matematik, doğal bilimler ve mühendislikte önemli yeri olan sabit bir reel sayı, doğal logaritmanın tabanı. e sayısı aşkın bir sayıdır, dolayısıyla irrasyoneldir, ve tam değeri sonlu sayıda rakam kullanılarak yazılamaz. Yaklaşık değeri şöyledir: e sayısı, aşağıdaki sonsuz toplama eşittir: Buna göre C# ile e sayısını bulmak için aşağıdaki kod parçasını kullanmalıyız tabi normalde sonsuz bir toplama eşit olduğu için yaklaşık değeri elde etmek için hassasiyeti n sayısına vereceğimiz değerlere bulabiliriz. classProgram {        staticvoid Main(string[] args)       {              double e = 0.0;              int n = 20;              for (int i = 0; i < n; i++)              {                    e = e + (1 / fakt(i));              }              Console.WriteLine(e);        }        staticdouble fakt(double f)       {            if (f == 0)           {                return 1;           }           else          {                 return f * fakt(f - 1);          }      } } Kaynaklar: Euler sayısı tanımı, wikipedia  

C# ile Akrep ile yelkovan arasındaki açıyı bulma

  Akrep ile yelkovan arasındaki açıyı bulmak için farklı algoritmalar ve yöntemler kullanabilirsiniz. Benim buradaki amacım en iyi algoritmayı kullanmak. Bu işi tek satırda çözebildim. Tabiki Kullanıcı arayüz kısmını değil ana işi yapan metoddaki algoritmik kısmı. Aşağıdaki kod Akrep ile yelkovan arasındaki açıyı en kısa şekilde bulmaktadır. En iyi kod işi en iyi şekilde ve en kısa yoldan çözen yani en iyi algoritmaya sahip koddur. Bunu unutmamanız gerekir. classProgram {        staticvoid Main(string[] args)       {               string a, b;               Console.WriteLine("saat giriniz");               a = Console.ReadLine();               Console.WriteLine("dakika giriniz");               b = Console.ReadLine();              int aci = get_angle(Convert.ToInt32(a), Convert.ToInt32(b));              Console.WriteLine("Aci " + aci);       }       privatestaticint get_angle(int saat, int dakika)      {                 returnMath.Abs((int)(saat * 30) - (int)(dakika * 5.5)); // tek satır kodla istediğimiz işlemin sonucunu elde ettik!      } }  

Mobil İçin Evrensel Download Aracı

  Bu araç sayesinde windows mobile ile birlikte gelen internet explorer tarzı tarayıcılar üzerinden download yapabilme işlemini evrensel bir hale getirmiş bulunmaktayız. Bu uygulama sayesinde yolu verilen uygulama mobile cihaza indirilmektedir. Mobile cihaz için hazırlanan bir cab dosyası ise direkt çalıştıralabilir şekilde indirebilirsiniz. Mobile için bazı uygulamalar ise active sync bağlantısını veya vista üzerinde windows mobile device center’a ihtiyaç duyacaktır.   Uygulamamızın tasarımı yukarıdaki şekilde olsun. Download butonuna bastığımızda uygulamayı mobil cihazımıza indirsin. Kodlamaya geçerken temel değişkenlerimizi ve isim uzaylarımızı ekleyelim. Bir windows uygulaması açtığımızda standart gelen namespace’lere ilave olarak; using System.Net; using System.IO; isim uzaylarınıda eklememiz gerekmektedir. Bu isim uzaylarındaki sınıflar download işlemini yapmamız için yeterli düzeydedir. Sabit olarak;              const string _downloadUrl = @"http://download.microsoft.com/download/6/c/0/6c03246d-e97f-460f-893e-785c1dda82b1/mnyppc06.exe";         const string _localFileName = @"\Program Files\mnyppc06.exe";                const int _downloadBlockSize = 4096; kullanacağız. downloadUrl, bizim uygulamayı indirceğimiz url. localFileName hedey klasör ve isim. Block size olara 4096 değerini veriyoruz. Menüdeki download isimli butonumuzun click event’ine ise aşağıdaki kodu yazalım; HttpWebRequest httpRequest = null; HttpWebResponse httpResponse = null; Stream responseStream = null; FileStream localFileStream = null; try            {     httpRequest = (HttpWebRequest)WebRequest.Create(_downloadUrl);     httpRequest.Method = "GET";     httpResponse = (HttpWebResponse)httpRequest.GetResponse();     responseStream = httpResponse.GetResponseStream();     localFileStream = new FileStream(_localFileName, FileMode.Create);     Byte[] buffer = new Byte[_downloadBlockSize];     int bytesRead = responseStream.Read(buffer, 0, _downloadBlockSize);     while (bytesRead > 0)     {          localFileStream.Write(buffer, 0, bytesRead);          bytesRead = responseStream.Read(buffer, 0, _downloadBlockSize);     }         MessageBox.Show("Success!!", "Download Complete"); }            catch (Exception ex) {         MessageBox.Show(ex.Message, "Download Failed"); } finally  {       if (httpResponse != null)            httpResponse.Close();        if (responseStream != null)            responseStream.Close();        if (localFileStream != null)            localFileStream.Close(); } Yukarıdaki kodda gördüğünüz standart windows veya konsol uygulamaları denemelerimde kullandığım HttpWebRequest gibi sınıflardır. Bu sayede tarayıcıya bağlı kalmaktan kurtulmuş ve windows mobile için evrensel bir dosya indirme aracı yapmış oluyoruz. Bu uygulamayı kendiniz daha fazla geliştirebilirsiniz. Örneğin bir url kutusu koyabilirsiniz. Emülatörle denemelerinizi yaparken bilgisayar ile internet bağlantısı yapmayı unutmayın.  Kaynak: MSDN

PCWorld Ocak 2010 Sayısı - Mobil Programlama - İkinci Yazım

PCWorld, Ocak 2010 sayısında mobil programlama yazı dizisinin ikinci serisi yayınlandı. İkinci yazımda .Net Compact Framework ve getirileri ile ilgili anlatımların yanı sıra bir projenin baştan sona çalışması hakkında bilgi edinebilirsiniz. Dünyanın en çok satan bilgisayar dergisinde yazmak oldukça keyifli bir deneyim. Konu Başlığım: Mobil Programlama: Visual Studio 2008 içinde mobil geliştirme araçları 

High Capacity Color Barcode (Microsoft Tag) - 2

  Teknik ve Uygulaması Bu api Microsoft tarafından Microsoft Tag Beta Public API ismi altında yayımlanmakta ve herkese açık bir web servis olarak sunulmaktadır. Beta versiyonuna başvurduğunuz size Public API’yi kullanmanız için bir anahtar verilmektedir. Bu anahtarla; https://ws.tag.microsoft.com/MIBPService.wsdl adresinden bu api’yi kullanabilmektesiniz. Hesabınıza 500 tane kategori açma ve 5000’e kadar tag oluşturma ve silme izni verilmektedir. Bu tag’in web servisini nasıl projeme tanıtabilirim?a-) Visual Studio projesi yaratın b-) Project explorer menüsünden service reference’a sağ tıklayıp add service reference seçeneğini seçin. c-) Adres olarak: https://ws.tag.microsoft.com/MIBPService.wsdlgirin d-) İsim uzaylarınızı kontrol edin ve aynı isim uzayında birleştirin. Nasıl Tag Yaratabilirim ? Bunun için KEY’inizi almış olmanız gerekmektedir.     private void CreateTag()    {            try        {             MIBPContractClient OMIBPClient = new MIBPContractClient();          UserCredential oCredential = new UserCredential();        oCredential.AccessToken = "Erişim anahtarınızı giriniz";       URITag uriTag = new URITag();       uriTag.MedFiUrl = http://www.birurlgir.com;       uriTag.UTCStartDate = new DateTime(yyyy, mm, dd);       uriTag.UTCEndDate = new DateTime(yyyy, mm, dd);       OMIBPClient.CreateTag(oCredential, "Kategori", uriTag);      }      catch      {             throw;      }    }  Nasıl Tag Editleyebilirim ?   private void UpdateTag()     {         try         {             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";                     vTag.Title = "Yeni tag ismi";               OMIBPClient.UpdateTag(oCredential, "Kategori ismi", "oluşturulan tagın ismi", vTag);         }         catch         {             throw;         }     }  Tagi nasıl aktif hale getirebilir veya durdurabilirim ? private void ActivateTag()     {         try         {             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";                     OMIBPClient.ActivateTag(oCredential, "Kategori ismi", "Tag ismi");         }         catch         {             throw;         }     }         private void PauseTag()     {         try         {             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";                     OMIBPClient.PauseTag(oCredential, "Kategori ismi", "Tag ismi");         }         catch         {             throw;         }     } Nasıl Kategori tanımalayabilirim ?     private void CreateCategory()     {         try         {             Category oCat = new Category();             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";             oCat.Name = "Kategori ismi";             oCat.UTCEndDate = new DateTime(yyyy, mm, dd);             oCat.UTCStartDate = new DateTime(yyyy, mm, dd);               OMIBPClient.CreateCategory(oCredential, oCat);         }         catch         {             throw;         }     }        Kategoriyi nasıl düzenleyebilirim ?     private void UpdateCategory()     {         try         {             Category oCat = new Category();             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";             oCat.Name = "Yeni kategor ismi";             oCat.UTCEndDate = new DateTime(yyyy, mm, dd);             oCat.UTCStartDate = new DateTime(yyyy, mm, dd);               OMIBPClient.UpdateCategory(oCredential, "kategori ismi", oCat);         }         catch         {             throw;         }     } Kategoriyi nasıl aktif hale getirir veya durdurabilirim ?     private void ActivateCategory()     {         try         {             Category oCat = new Category();             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";             OMIBPClient.ActivateCategory(oCredential, "kategori ismi");         }         catch         {             throw;         }     }           private void PauseCategory()     {         try         {             Category oCat = new Category();             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "Erişim anahtarınızı giriniz";             OMIBPClient.PauseCategory(oCredential, "kategori ismi");         }         catch         {             throw;         }     }       Nasıl Barkod yaratabilirim ? private void CreateBarcode()     {         try         {             MIBPContractClient OMIBPClient = new MIBPContractClient();             UserCredential oCredential = new UserCredential();               oCredential.AccessToken = "erişim anahtarınızı giriniz";             byte[] oBarcode = OMIBPClient.GetBarcode(oCredential, "kategori ismi", "Tag ismi",                                                      ImageTypes.tiff, Size,                                                      DecorationType.HCCBRP_DECORATION_NONE,                                                      Is Black or White);        }         catch         {             throw;         }     }  Microsoft Tag’in beta sürümünde şu anda bu özellikler kullanılabilmektedir. Sonuç Bu makalede özellikle yüksek kapasiteli renkli barkod uygulamasının Microsoft firmasının Microsoft Tag ticari ismi ile piyasaya sunduğu bir teknolojiyi inceledik. Uygulamanın hali hazırda piyasada kullanım alanlarını incelerken kullanılabilecek olası sahalarada örnek verdik.  Görmüş olduğunuz gibi kullanım alanlarının sınırının oldukça geniş olan bu teknoloji avantajlar getirdiği gibi dezavanatajları da yapısı ile birlikte getirmektedir. Biz yazılım mühendisleri veya yazılım uzmanları açısından en can sıkıcı nokta bu uygulamanın beta aşamasında dahi belli bir Tag ve kategori oluşturma sınırı ile sunulması oldu. Teknolojinin web servis kullanılarak dağıtılması HardCore yazılımcılar açısından bir dezavantaj. Uygulumalarında yüksek seviye kontrol edilebilirlik arayanlar 3. Parti yazılımları genellik bir library veya DLL alarak kullanmaya alışmıştı. En azından bir müddet sıkıntı yaratsada Bulut Teknolojilerinin biz yazılım geliştiricilere yansıması da bu olsa gerek. Yazan: Volkan Atasever  Kaynaklar: Microsoft Research                     Microsoft Tag Developer Portal                 

High Capacity Color Barcode (Microsoft Tag) - 1

Bu makalemde Yüksek Kapasiteli Renkli Barkod (High Capacity Barcode Teknolojisi) bahsederken aynı zamanda kullanım alanına gerçek yaşamdan örnek verip günlük hayatımızda veya  toplumun belli bir kesmi tarafından ne kadar yoğun olarak kullanılabileceğini inceleyeceğiz. Önce geçmiş Barkod teknolojisi ve yeni bir teknoloji olan Hisgh Capacity Color Barcode teknolojisini inceleyeceğiz. 1940'ların sonunda bir lisansüstü öğrencisi olan ABD'li Bernard Silver, öğrenim gördüğü Drexel Teknoloji Enstitüsü'ne gelen bir market zinciri sahibinin kasada tüm ürün bilgilerini otomatik kaydedecek bir sistem geliştirilmesini istediğini, ama enstitünün konuyla ilgilenmediğini gördü. Bu fikir Silver'in ilgisini çekti ve doktora öğrencisi olan arkadaşı ABD'li Norman Woodland'a bundan söz etti. Konu üzerinde birlikte çalışmaya başladılar. İlk barkod uygulamasını yaza Bernard ve arkadaşı bu sayede bu teknolojilerle tanışmamızı sağladı. Fakat 1940’larda keşfedilen bu teknoloji zamanla geliştirildi fakat günümüz dünyasında her alanda kullanılabilecek ve daha fazla veri saklayabilecek 2 boyutlu analog medyalara ihtiyaç duyuldu.  Yeni teknolojinin ismi ise High Capacity Color Barcode olarak duymaya başladık.   High Capacity Color Barcode(Yüksek Kapasiteli Renkli Barkod) Teknolojisi High Capacity Color Barcode teknolojisi, Microsoft Research tarafından geliştirilmiş olup dijital verileri analog medyalar üstünde saklamamıza olanak sağlamaktadır. Bu teknolojisi sayesinde görüntü alabilen herhangi bir cihaz sayesinde bu görüntüyü dijital ortama aktarıp veriyi çekebilmemize olanak sağlamaktadır.Microsoft’a göre klasik barkod uygulamalarının yerini almaktansa daha büyük verileri saklamak amaıcyla kullanılacak bir teknoloji. Bu uygulamayı kullanmak için ise günümüzde en uygun cihaz PDA diye tabir ettiğimiz Windows Mobile kullanan smartphone veya profosyonel avuçiçi bilgisayarlardır. Her hücre birden fazla renk ile ifade edildiği için daha fazla sayıda bilgi saklamaya elverişli hale gelmiştir. Daha fazla bilgi saklarken yapısı gereği çok küçük bir alanı kaplayabilmektedir.   Solda; 8 renk barkod 84 RAW byte saklayabilmektedir. Sağda; 4 renk barkod 58 RAW byte saklayabilmektedir. En solda siyah beyaz matris 1byte yani 8 bit saklayabilmektedir ve 8 sembol kullanıyor. 4 renk barkod 1 byte saklayabiliyor ve 4 sembol kullanıyor. En sağdaki ise 8 renkli barkod 1byte saklıyor ve 2.66 sembol kullanmakta.   Oluşturulan Tag’ler herhangi bir mürekkep püskürtmeli veya lazer yazıcıyla basılabilmekte olup 600dpi çözünürlüklü herhangi kartvizit tarayıcısıyla okunabilmektedir. Bu teknolojinin temeli ise renkli üçgenlerden oluşuyor diyebilmekteyiz. Yukarıdaki görüntü herhangi bir 320x240 çözünürlüklü bir webcam ile okunabilmektedir. HCCB ile kimlik numarası, e-mail adresi ve internet site adresini saklayabilmektedir.   Microsoft Tag’ları herhangi bir platform veya işletim isteminde çalışmaktadır. Buradaki asıl amaç Mobil cihazlardaki kullanım alanın arttırılması ve mobilize yaşama geçişte önemli bir adım olarak görülmektedir.Yukarıda resimde 70 piksellik bir görüntüde dahi barkod okunabilmektedir.    UYGULAMA ALANLARI Ülkemizde bu uygulamanın öncülerinden biride Hürriyet Gazetesidir. Haberlerinin yanında vermiş olduğu yüksek kapasiteli tag’lerle insanlara aynı anda haberin video’sunuda izleme olanağı sunmaktadır. Kullanım alanları ise çok geniş olduğu için bunlara değinip incelemek istemekteyim. Yukarıdada bahsettiğim gibi Tag’leri kullanabilmek için herhangi bir kamerası olan ve yeterli güçte realtime görüntü yakalayabilen her cihaz bu tagleri hareketli ortamda dahi yakalayabilmektedir. Bu makalenin ikinci serisinde teknik alan ve kullanımlar irdelenecektir. Yazan: Volkan Atasever Kaynaklar: Microsoft Research                     Microsoft Tag Developer Portal                     WikiPedia  

Yapay Zeka Programlama Dilleri ve PROLOG

Yapay zeka programlama dillerinin en ünlüleri LISP ve PROLOG’tur. Bu bağlamda PROLOG yapay zeka programlama dili incelenecektir. PROLOG, yapay zeka içeren sistemler yaratmamızı sağlar. Günlük sıradan cümleleri belli bir yapıda kabul edip bunların sonuçlarına varabiliriz. Standart programlama dillerinden çok farklı yapıya sahiptir. Bir prolog programı;     male(james1).   male(charles1).   male(charles2).   male(james2).   male(george1).     female(catherine).   female(elizabeth).   female(sophia).     parent(charles1, james1).   parent(elizabeth, james1).   parent(charles2, charles1).   parent(catherine, charles1).   parent(james2, charles1).   parent(sophia, elizabeth).   parent(george1, sophia).   Sorgulamalarımızı nasıl yapmamız gerekiyor? Bunları burada formülize ediyoruz.      George I, Charles I’in ailesimidir ?               Query: parent(charles1, george1).      Charles I’in ailesi kimdir?              Query: parent(charles1,X).      Charles I’in çocuğu kimdir?              Query: parent(X,charles1).   Aile yapımız inputlara göre şöyle olmaktadır;                                 James I                                  |                                  |                 +----------------+-----------------+                 |                                  |              Charles I                          Elizabeth                 |                                  |                 |                                  |      +----------+------------+                     |      |          |            |                     | Catherine   Charles II   James II               Sophia                                                    |                                                    |                                                    |                                                 George I     Bu sorguları elimizdeki inputlar oranında daha da fazlalaştırabiliriz. Düşünsenize bir database’inizin elinizde olduğunu ve bu tür sorgulamaları database üzerinden yapabildiğinizi! Veritabanının çok geniş içeriklerde veri içerdiğini ve bu verileri çok hızla işleyebildiğimiz PROLOG diliyle sorgulama yapmamız bize avanatj kazandırabilmektedir.   .NET Ortamında PROLOG: PROLOG.NET Projesi!!! .NET ortamına aktarılmaya çalışan ve .NET Framwork altyapısıyla birlikte PROLOG Programlama dilinin çalışması için bir proje sürmekte kişisel imkanlarla yürütülen bu projenin ismi PROLOG.NET. En son release tarihi 2006 yıllarına geldiği için rafa kalkmış bir proje diyebiliriz. Projenin sayfasını ziyaret etmek için: http://prolog.hodroj.net/downloads.html Bu kadar olumsuzluklara rağmen süregelen .NET ortamına geçirme çalışmaları ve farklı projelerde mevcut. Bunlardan bazıları; P# adı altında .NET ortamı için prolog Prolog for .net developers adı altındada çalımalar mevcuttur.   Kaynaklar: http://www.cs.toronto.edu/~hojjat/384f06/simple-prolog-examples.html