17 Kasım 2015 Salı




SELECTION SORT

Selection sort bir sıralama algoritmasıdır. Karmaşık bir dizide en küçük olanı bulur. Bu sayıyı dizinin en başındaki elemanla yer değiştirir. O(n^2) karmaşıklığında olduğu için büyük verilerle kullanılmaz. Basitçe anlatacak olursak;



karmaşık dizisinde ilk olarak en küçük elemanı aramaya yönelik işlem gerçekleşir. En küçük eleman yani 1 bulunduktan sonra dizinin başındaki eleman 7 ile yer değiştirilir.

           

Yer değiştirmeden sonra işleme sıralanmayan kısımdan başlanır. Her seferinde en küçük eleman sıralı olanın sonuna eklenir.

         
           
           
           
                                             



Selection Sort'a ait örnek kod ise:

        public int [] SelectionSortFonk(int list[]){
int enKucukIndex;

for (int i=0; i<list.length-1; i++){
enKucukIndex=i; //her seferinde sıralı olmayan kısımdan başlatmak için
for(int j=i; j<list.length; j++){
if(list[j] < list[enKucukIndex])
enKucukIndex=j;
}
int temp =list[enKucukIndex];
list[enKucukIndex]=list[i];
list[i]=temp;
}
                return list[];
}




8 Kasım 2014 Cumartesi

C#'da txt dosyasından veri alıp textBox'da gösterme


Formumuza ToolBox'dan openFileDialog eklemekle başlıyoruz. Ardından butonumuza çift tıklayark aşağıdaki kodu yazıyoruz. using System.IO kütüphanesini de eklemeyi unutmuyoruz.


private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                openFileDialog1.FileName = "Okunacak Dosyayı Seçiniz";
                openFileDialog1.Filter = "Yazı Dosyaları (*txt) | *.txt";
                openFileDialog1.ShowDialog();
                StreamReader okumaIslemi = new StreamReader(openFileDialog1.FileName);
                textBox1.Text = okumaIslemi.ReadToEnd();
                okumaIslemi.Close();
            }
            catch (Exception hata)
            {
                MessageBox.Show(hata.Message);
            }
        }

21 Ocak 2014 Salı

MongoDB Nedir? Windows MongoDB Kurulumu Nasıl Yapılır?

MongoDB C++ dili ile yazılmış, açık kaynak NoSQL bir döküman veritabanıdır. İlişkisel veri tabanı uygulamalarının yetersiz kaldığı durumlarda performansı ile öne çıkan NoSQL uygulamaları arasında sık kullanılan, güzel dokümante edilmiş bir veritabanıdır. Tutulan dökümanın her özelliğine, anahtarına(key) göre indeksleme sağlamaktadır. MongoDB ile çalışmanın en önemli hususlarından biri anahtarlandırmadır. Tüm veriyi baştan aşağıya okumak yerine anahtarlandırılmış kısımda arama yapıp ilgili veriyi okumak perfonması çarpıcı bir biçimde artırır.


Eğer kurulum kısmına geçersek http://www.mongodb.org/downloads adresinden bize uygun 64 bitlik windows işletim sistemi için olanı indiriyoruz. Kurulumu yapacağınız yeri belirleyin. Ben kendi bilgisayarımda D:\ sürücüsü üzerine kurdum. D:\ sürücüsü içine "MongoDB"adlı bir dizin açılır ve bu dizin içine "logs" ve "data" isimlerinde iki dizin daha açılır. İndirilen dosyalarda MongoDB dizinine taşınır.







"logs" dizini içerisine "mongolog.txt" isminde yeni bir metin dosyası oluşturulur. 
Başlat çubuğuna cmd komutunu yazıp sağ tıklatarak yönetici konumunda çalıştırılır. Ardından aşağıdaki komut yazılır.







Kurulum tamamlandığına göre oluşturduğumuz MongoDB servisi çalıştırılabilir. Başlat -> “Yerel hizmetleri görüntüle” Hizmetler penceresinden MongoDB servisi başlatılır.
    Web tarayıcımıza localhost:28017 yazdığımızda servisimizin çalışıp çalışmadığını kontrol edebiliriz.





Peki MongoDB nasıl kaldırılır?

D:\mongodb\bin\mongod.exe --remove
komutunu cmd ekranına yazmamız yeterli olacaktır. 










19 Ocak 2014 Pazar

NoSQL Nedir?



NoSQL'in açılımı "Not Only SQL" dir. Klasik olarak bildiğimiz ve kullandığımız ilişkisel veritabanı sistemlerine (RDBMS) alternatif olarak 1998 yılında ortaya çıkmıştır.  NoSql ilişkisel veri tabanındaki tüm verileri farklı tablolar yerine tek bir dökümanda saklayan veri tabanı modelidir. İnternetin gün geçtikçe artan verisini depolayabilmek ve yüksek trafiğe sahip sistemlerin ihtiyaçlarına cevap verebilmek amacıyla ortaya çıkmış sistemlerdir. 

NoSQL sistemleri yüksek erişilebilirlik sunarlar. 

Sql de tablolar, alanlar ve ilişkisel veritabanı gibi kavramlar bulunmaktadır.  NoSQL'de ise bu kavramlar tam olmasa da ortadan kalkıyor. Okuma ve yazma performansları olarak RDBMS’lerden göreceli olarak daha performanslı olabilirler. Binlerce sunucu bir arada küme olarak  çalışabilir ve çok büyük veri üzerinde işlem yapabilirler.

NoSQL Ram'da çalışmaktadır. Veriler XML veya JSON şeklinde tutulur. NoSQL Excel'e benzetilebilir. BigTable olarak veriler tutulmaktadır. 

Veri güvenliği konusunda da RDBMS’ler kadar gelişmiş özelliklere henüz sahip değillerdir. Fire and Forget prensibi ile çalışır.Verinin çok önem arzettiği uygulamalarda NoSQL kullanılmamalıdır. Bunun sebebi ram üzerinde çalışmasıdır. Herhangi bir olumsuz durumda NoSQL sistemi bir problemle karşılaştığında güncelleme ve yedekleme sistemine güvenemeyiz. Bu da hızlı olmasının getirdiği bir sıkıntıdır.



11 Temmuz 2013 Perşembe

TEMPLATE METHOD PATTERN

Template method gerekli işlemleri soyut olarak tanımlar ve algoritma iskeleti belirler. Bazı adımların gerçekleştirilmesi alt sınıflara bırakılır ve bu adımlar gerçekleştirilirken algoritmanın ana yapısı değişmez.
Template method ile alt sınıflardaki ortak adımlarda kod tekrarının önüne geçilir ve kod tekrar kullanılabilir. Ayrıca bu method sayesinde kod değiştirilmek istenirse tek bir yerden değiştirilebilir.




Mesela iki tane sınıfımız olsun Class1 ve Class2 adıyla. Bu sınıflar Base sınıfından türetilsin ve sınıfların ortak fonksiyonları functionA() ve functionD() olsun. Ortak fonksiyonlar Base sınıfında private olarak, ortak olmayanlar ise protected içinde abstract olarak tanımlanır. Public olan process() ise bütün fonksiyonları çağırıcı olarak rol yapar.Koda geçersek:

class Base{
private:
       void functionA(){
             cout<<"Common function A for both Class1 and Class2..."<<endl;
       }

       void functionD(){
           cout<<"Common function D for both Class1 and Class2..."<<endl;
    }

protected:
       virtual void functionB()=0;
       virtual void functionC()=0;
       virtual void functionE()=0;

public:
       void process(){
           functionA();
           functionB();
           functionC();
           functionD();
           functionE();
       }

};


Base sınıfta protected olarak tanımlanmış ortak olmayan fonksiyonlar, bu sınıftan türetilmiş olan Class1 ve Class2 sınıflarında public olarak tanımlanır ve kendilerine ait özellikleri taşır.

class Class1:public Base{
public:
       void functionB(){
             cout<<"Function B for Class1..."<<endl;
       }
       void functionC(){
             cout<<"Function C for Class1..."<<endl;
       }
       void functionE(){
             cout<<"Function E for Class1..."<<endl;
       }
};


class Class2:public Base{
public:
       void functionB(){
             cout<<"Function B for Class2..."<<endl;
       }
       void functionC(){
             cout<<"Function C for Class2..."<<endl;
       }
       void functionE(){
             cout<<"Function E for Class2..."<<endl;
       }

};



Main de ise nesne oluşturulurken ve process() fonksiyonu çağırılırken:

      Base *c1=new Class1();
       Base *c2=new Class2();

       c1->process();
       c2->process();

8 Temmuz 2013 Pazartesi

SINGLETON PATTERN

Singleton Pattern belirli bir nesneden sadece bir örneğinin olmasını ve yaratılan bu tek nesneye global olarak erişimi sağlar.  Bir sınıf alınır ve tek bir örneğini yönetmek için izin verilir. Bir örneği elde etmek için sınıfın kendisi üzerinden gidilmelidir. Başka bir sınıfta yeni bir örnek oluşturulamaz. Bir örneğe ihtiyacımız olduğunda sınıfı sorgularız ve tek bir örnek bize döndürülür. 








uniqueInstance değişkeni bizim oluşturacağımız tek bir örneği temsil eder. getInstance() fonksiyonu ise class dışından ulaşılabilmesi için public olarak tanımlanır. Bu fonksiyon içinde tek nesne oluşturulur. Kod kısmına geçersek:



class Singleton {
private:
       static Singleton *uniqueInstance;
       Singleton() {...}

public
       static Singleton* getInstance(){
             if(uniqueInstance == NULL){
                    uniqueInstance = new Singleton();
             }
             return uniqueInstance; 
       }
}


20 Kasım 2012 Salı

STACK (YIĞIN)



Verilerin geçici olarak saklandığı bir yapıdır. Son giren ilk çıkar mantığı ile çalışır.(LİFO) Ara elemanlara doğrudan erişim yapılamaz.Genelde aynı tipte veriler tutulur. Aritmetik deyimlerin bilgisayar ortamında uygulamasında ( Infix, Postfix, Prefix) kullanılabilir. Ayrıca mikro işlemcinin iç yapısında stack adı verilen bir bölge vardır ve biz bunu farkında olmadan kullanırız.Mesela iki programı aynı anda çalıştırıyorken birinden diğerine geçtiğimizde interrupt işlemi gerçekleşir ve ilk program stackde kaydedilmiştir. Böylece ilk çalıştırdığımız programa geri döndüğümüzde kaldığımız yerden devam edebiliriz.
Aşağıda örnek olarak dizi tabanlı bir yığın oluşturan menü tabanlı c++ kodlu program verilmiştir. yığın boyutu 10 dur. Menüde Ekle, Getir, Listele, Say, Programdan Çık işlemleri bulunmaktadır.


yigin.h

#include <iostream>
#define n 10

class yigin
{
public:
yigin ();
int koy();
    int al();
    void temizle();
    int listele();
void say();
private:
int eklenecek;
};

yigin.cpp

#include <iostream>
#include "yigin.h"
using namespace std;
int yveri[n]={0};
int yi=0;
int sayac=0;

yigin::yigin()
{
eklenecek=0;
}
int yigin::koy()
{
cout<<"eklemek istediginiz sayiyi giriniz:";
cin>>eklenecek;

    if(yi>=n)
cout<<"yigin dolu!"<<endl;
    else
{
yveri[yi]=eklenecek;
        yi++;
        cout<<eklenecek<<" yigina eklendi\n"<<endl;
        sayac++;
}
return 0;
}

int yigin::al()
{
if(yi<=0)
cout<<"yigin bos";
       else{
            cout<<yveri[yi-1]<<" elemani yigindan cikarildi\n"<<endl;
            sayac--;
            return yveri[--yi];
  }
}



int yigin::listele()
{
int i;
    if(yi<=0)
    cout<<"yigin bos!!!\n";
else{
    for(i=0;i<sayac;i++){
     cout<<i+1<<".eleman="<<yveri[i]<<endl;
}
}
return 0;
    }
void yigin::say()
{
cout<<"eleman sayisi:"<<sayac;
}



yiginTest.cpp

#include <iostream>
#include "yigin.h"
using namespace std;


int main()
{   yigin y;
    char secim;
cout<<"yigina eklemek icin:'e'\nyigindan eleman cikarmak icin:'g'\nlistelemek icin:'l'\nsaymak icin:'s'\ncikis icin:'q'"<<endl;
    while(1)
    { 
            secim=getchar();
            switch(secim)
            { case 'e':
            y.koy();
break;
            case 'g':
                y.al();
                 
break;
  
     case 'l':
          y.listele();
          
 break;
          case 's':
               y.say();
  break;
 case 'q':
 return 0;
 
                          }
            }
    
  system ("PAUSE");
  return 0;
}