Umut Sinav Logo

Archive for C Programlama

Özdevingen (recursive) fonksiyon ile ikili arama metodu

C programlama İkili Arama Metodunun Recursive Uygulaması

Bu yazıda binary (ikili) arama algoritmasının isme göre arama yapılmasını recursive (özdevingen) fonksiyon ile yazılmasının C programlama dilinde nasıl yapıldığını anlatmaya çalışacağım.

Recursive Fonksiyon

  • Kendini doğrudan veya dolaylı olarak çağıran fonksiyonlara recursive (özdevingen) fonksiyonlar adı verilir.
  • Recursive (özdevingen), iterasyonun (döngüler, tekrar) yerine geçebilecek çok güçlü bir programlama tekniğidir.
  • Orijinal problemin küçük parçalarını çözmek için, bir alt programın kendi kendini çağırmasını sağlayarak, tekrarlı işlemlerin çözümüne farklı bir bakış açısı getirir.

İkili Arama

İkili Arama, sıralı bir dizide, belirli değerin bulunmasına yönelik bir algoritmadır. Bu teknikteki her bir adımda, aranan değerin, dizinin orta değerine eşit olup olmadığı kontrol edilir. Eşit olmaması durumunda aranan değerin orta değer tarafından ikiye ayrılan kısımlardan hangisinde olduğu kontrol edilir, aranan değeri içeren kısım bir sonraki adımda arama yapılacak dizi olur ve bu sayede arama yapılan listedeki eleman sayısı her adımda yarıya indirilmiş olur.

Uygulama

Bilmeniz gerekenler

  • C programlama struct yapısı
  • C programlama strcmp fonksiyonu (iki karakter dizisini karşılaştırır eşit ise 0, birinci ifade büyük ise 1, ikinci ifade büyük ise -1 dönderir)

Aşağıda bulunan kodu inceleyerek bu işlemlerin nasıl yapıldığını anlamaya çalışın gerekli açıklamalar kodun yorum satırında mevcuttur.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* Şair defterine programcı yorum satırına şiirini yazar
* Umut SİNAV (@umutsinav)
*/
// person isimli struct yapımızı tanımlıyoruz
struct person {
  long telNo;
  char isim[12];
};
//İkili (binary) arama algoritmasının özdevingen (recursive) sürümü
int ikiliAramaRecursive(struct person personel[], char arananIsim[], int elemanSayisi, int alt, int ust)
{
	int konum=-1, orta, karsilastir;
	if(alt>ust) return -1;
	//orta kısmı buluyoruz
	orta =  (alt + ust)  /  2;
	//isimleri karşılaştırıyoruz strcmp fonksiyonu ile
	karsilastir = strcmp(arananIsim, personel[orta].isim);
	//karşılaştırma işleminden dönen değere göre return işlemimizi yapıyoruz
	if (karsilastir==0)	return orta;
	else if (karsilastir==-1) return ikiliAramaRecursive(personel, arananIsim,  elemanSayisi, alt, orta-1);
	else if(karsilastir==1) return ikiliAramaRecursive(personel, arananIsim,  elemanSayisi, orta+1, ust);
	//aranan kayit bulunamadı ise -1 değerini dönderiyoruz
	return -1;
}
void main()
{
	struct person
    personel[15]={
		3451280, "AYDIN",
			3892345,"BEKIR",
			3774860,"CEMIL",
			3886655,"DENIZ",
            3871288,"EREN",
			3661288,"EMRAH",
            3661090,"FIKRET",
			3213045,"GUL",
			3871280,"JALE",
			3223488,"LATIF",
			3981200,"NERMIN",
            3021288,"PERIHAN",
            3891123,"UMUT",
			3125466,"VELI",
			3014560,"ZEKI"
	};
	char  girilenIsim[12];
	int elemanSayisi=15, alt=0, ust=15, sonuc, devam=0;
	//elemanları listeliyoruz
	for(int i=0; i<elemanSayisi; i++)
		printf("\n\t %d %s", personel[i].telNo, personel[i].isim);
	do
	{
		//arama yapılacak ismi kullanıcıdan alıyoruz
		printf("\n\tListede Arama Yapmak Icin Kisinin Adini Giriniz:");
		scanf("%s", &girilenIsim);
		//fonksiyonumuzu çağırıyoruz
		sonuc=ikiliAramaRecursive(personel, girilenIsim, elemanSayisi, alt, ust);
		if(sonuc==-1)
			printf("\n\t uzgunuz istediginiz ismi bulamadik :)\n");
		else
			printf("\n\t Aranan ismin konumu: %d\n\t Aranan ismin numarasi: %d\n", sonuc+1, personel[sonuc].telNo);
		printf("Tekrar arama icin [1], cikmak icin [0]:");
		scanf("%d", &devam);
		if(devam==0) exit(0);
	}while(devam);

}

 

C programlama İkili Arama Metodunun Recursive Uygulaması

C programlama İkili Arama Metodunun Recursive Uygulaması

Oop Nesne yönelimli programlama

Türkçesi Nesne yönelimli programlama (NYP), İngilizcesi Object Oriented Programming Özetle bir bilgisayar programlama yaklaşımıdır. Günümüzde pekçok çağdaş programlama dili tarafından desteklenmektedir.
Nesneye yönelik programlama uygulamayı oluşturan varlıkları modellemek için; veriler ve onlar üzerinde işlem yapan yordamların bir arada bulunduğu “nesneler” kullanılır. Buna veri soyutlama adını veriyoruz. Nesneye yönelik programlama çeşitli temel unsurları vardır. Bu unsurlar şu şekilde sıralanabilir:

  • Kapsülleme (Encapsulation)
  • Kalıtım (Inheritance)
  • Çok biçimlilik (Polymorphism)
Nesneye Yönelik Programlama

Nesneye Yönelik Programlama

Kapsülleme: Yönettiği kod ve veriyi birbirine bağlayan ve bu ikisini dış kaynaklı karıştırma ve yanlış kullanımlardan koruyan mekanizmadır.

Kalıtım(Inheritance): Genel niteliklerini ebeveyninden alan ve böylece bir nesneyi daha genel bir durumun özel bir örneği yapan özelliktir.
Kalıtım
Şekilde görüldüğü gibi Kangal köpeği çoğu özelliğini hiyerarşik olarak kalıtım yoluyla kazanır

Çok Biçimlilik(Polymorphism): Genel anlamda bir adın birbiriyle ilişkili fakat teknik açıdan farklı iki veya daha fazla amaç için kullanılabilmesi yeteneğine denir.

Örnek çok biçimliliği pek desteklemeyen C’de, mutlak değer bulma işi üç ayrı fonksiyon adı gerektirir. Abs(), labs() ve fabs(). Bu fonksiyonlar sırasıyla bir tamsayının, bir uzun tamsayının(long integer) ve bir gerçel sayının (reel) mutlak değerini hesaplar. Fakat çok biçimliliği destekleyen C++’da bu fonksiyonlar abs() gibi tek bir isimle adlandırılır. Fonksiyonun çağırmak için kullanılan veri tipi, gerçekte hangi fonksiyonun çalışacağını belirler. Böylece bir fonksiyon adının birkaç amaç için kullanılması mümkündür. Buna fonksiyonların aşırı yüklemesi (function overloading) adı verilmektedir.
Nesneye Yönelik Programlama Örnek

escort bayan ankara ankara escort ankara escort bayan cebeci escort