Skip to main content

C İle Veri Yapıları : Kuyruk Ve Kuyruk İşlemleri

Bundan önceki yazımda temel veri yapılarından biri olan Yığın (Stack) kavramına göz atmıştık.  Stack   tek yönlü bir veri yapısıydı,  bir  yığına ilk giren eleman  , yığından en son çıkan eleman oluyordu. Kuyruk   ise yine temel veri yapılarından bir tanesidir.  Aslında günlük hayatta belkide farkında olmadan kullandığımız bir yapı.  Örneğin bir hastahanede muayne olmak isteyen hastaların sırasını göze alalım.  Bu sıraya dahil olmak isteyen hastalar  en sondan  kuyruğa dahil olmak zorundadır. Aynı şekilde   doktor muayne olacak hastayı en önden   çağırmaktadır.   Kısaca diyebiliriz ki , bir kuyruğuna eleman eklerken sondan , eleman çıkartırken önden  işlem yapacağız.

Bu durumda böyle bir yapı tanımlarken   kuyruğun önü ve arkasını gösteren  iki adresimiz olacağını çıkartabiliriz.
Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : Yiğin İşlemleri

C Programlama ile Veri Yapıları diğer dillere oranla biraz daha emek istiyor. C makine diline daha yakın olduğu doğal olarak kodlaması zor. Ama bence C ‘de veri yapılarını kavramış bir insan diğer dillerde hiç ama hiç zorlanmaz. Sonuçta Pointer kavramı C ve C++ ‘ta karşımıza çıkıyor. Üst düzey diller olan Java, C# gibi programlama dillerinde gerçek anlamda bir pointer kavramı yok, ve işleler çok daha basit bir şekilde halledilebiliyor. Ama programcılığı gerçek manada öğrenmek istiyorsanız ve ufkunuzu genişletmek istiyorsanız en azından veri yapılarını C ‘de kodlayabilmeniz şart.

Bugün Veri Yapılarının temel konularından olan Stack (Yığın) kavramına göz atacağız. Bir yığın nedir, nerelerde kullanılır , nasıl çalışır sorularına cevap bulacak ve örnek yığın kodu ile makeleyi sonrandıracağım.
Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : Pointer Ve Dizi İlişkisi

Göstericilerle çalışmak zordur, göstericileri  eğer programlama başlarken  iyice sindirmezseniz muhtemelen daha sonra göstericileri kullanarak bir şeyler geliştirmek oldukça zor olacaktır.  Bu yazımda göstericilere  giriş olması açısından Pointer ve dizi ilişkisi adına bir şeyler yazacağım. Öncelikle gösterici nedir , ne işe yarar ?  Gösterge değişkenler ( Pointer)  bir değişkenin adresini tutan bir değişkendir. Örneğin biz  C  Programlama dilinde

int a  =5 ;   gibi bir tanımlama yaptığımızı düşünelim.       Pointer dediğimiz değişkenler bu a değişkenin değerine ulaşmak için direk a  değişkenini adresini kullanırlar  ve bu yöntem klasik yönteme göre çok daha hızlı ve performanslıdır.    Bu yüzden özellikle bir program geliştirirken ve büyük özellikle büyük verilelerle çalışan programlar çalışırken  pointer değişkenlerini kullanırız.   Tahmin edebilirsiniz ki bu hızı kazanırken bir şeylerden feragat ediyoruz kolaylık.   Dizi değişkenlerle çalışmak  , pointerlarla  çalışmaktan daha zordur.    Pointer değişkenler bu yüzden öğrenilmesi zaman alan , yada söyle diyelim öğrenildiği zannedilen ama pratikte kullanılmadığı sürece öğrenilmeyen bir kavramdır.
Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : Kabarcık Sıralama

Birden çok arama ve sırama algoritmaları mevcut. Bu sıralama algoritmalarından bir tanesi de Buble Sort adı verilen Kabarcık sıralamadır.  Kabarcık Sıralama algoritması aşağıdaki gibi gibi çalışır.

Kabarcık Sıralaması, bilgisayar bilimlerinde kullanılan yalın bir sıralama algoritmasıdır. Sıralanacak dizinin üzerinde sürekli ilerlerken her defasında iki öğenin birbiriyle karşılaştırılıp, karşılaştırılan öğelerin yanlış sırada olmaları durumunda yerlerinin değiştirilmesi mantığına dayanır. Algoritma, herhangi bir değişiklik yapılmayıncaya kadar dizinin başına dönerek kendisini yineler. Adına “Kabarcık” sıralaması denmesinin nedeni büyük olan sayıların aynı suyun altındaki bir kabarcık gibi dizinin üstüne doğru ilerlemesidir.

En basit olarak bir kabarcık sıralaması örneği aşağıda verilmiştir.

 

Uygulanmasına bir örnek verecek olursak ;

 

Adım-Adım Uygulama

Elimizde  5 1 4 2 8 değerlerine sahip 5 elemanlı bir dizi olsun. Bunu bubble sort kullanarak adım adım sıralayalım:

İlk Döngü:
5 1 4 2 8 ) –> ( 1 5 4 2 8 ), İlk iki elemanı karşılaştırıyorum ve swapping yapıyorum.
( 1 5 4 2 8 ) –> ( 1 4 5 2 8 ),  5 > 4 swap yapıyorum
( 1 4 5 2 8 ) –> ( 1 4 2 5 8 ), 5 > 2 swap yapıyorum
( 1 4 2 5 8 ) –> ( 1 4 2 5 8 ), 8>5 olduğundan bu adımda swap yapmıyorum
İkinci Döngü:
1 4 2 5 8 ) –> ( 1 4 2 5 8 )
( 1 4 2 5 8 ) –> ( 1 2 4 5 8 ),  4 > 2 swap yapıyorum
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ), İlk döngüm bittiğine göre sondaki elemanımın en büyük olduğunu biliyorum. gereksiz bir adımdır.
Sıralama işlemi tamamlandı, fakat bunu algoritma bilmiyor bunun için bir adım daha dolaşışır.
Üçüncü Döngü:
1 2 4 5 8 ) –> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ) –> İki karşılaştırmada swap işlemi yapmadığımdan sıralama gerçekleşmiştir.
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ), sondan bir önceki adıma da ikinci döngü sayesinde bakmama gerek yoktur.
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ), gereksiz adım

 

Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : Bisection Metodu ile Fonksiyonların Köklerini Bulmak

Verilen matematiksel bir fonksiyonun köklerini bulmak için bir çok algoritma kullanılabilir. Bunlardan biride Bisection yöntemidir.  Daha gelişmiş yöntemler olmasına rağmen ( Newton İterasyon Yöntemi) bu yöndemde sık sık kullanılır. Bu yöntemi Türkçemize ikiye bölme yöntemi olarak çevirebiliriz. Peki bu algoritma nasıl çalişir ?

Aradığımız değerlerin belli bir aralıkta olduğunu düşünelim. Bu değeri bulmak için önce belirlediğimiz aralığım tam ortasını deneriz,  eğer aradığımız değer tam ortada değilse ya  sağımızda yada solumuzda kalmıştır gerçeğinden hareket ediyoruz.  Bu durumda elimizde yeni bir aralık  oluyor ve  Rekürsif bir algoritma  ( Özyineleme) kullanarak  bu aralıkları tek tek deneyerek sonuca ulaşabiliyoruz.

Çözüme ulaşmak için kullandığımız C Kodları aşağıdaki gibidir.
Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama :Yıldız Karakteriyle İçi Boş Kare Yazdırmak

Şimdi kodlarını paylasağım program yine eğitmenler tarafından C  dili öğretilirken  öğremcilere  sorulan bir sorudur. Aynı şekilde C  dilini öğreten bir çok kitaptada buna benzer  sorular bulummaktadı. Program  kullanıcıdan bir sayı alır ve o  sayıyı kullanarak ekrana içi boş kare çizer.

Örneğin kullanıcının programa 15 değerini girdiğini varsayarsak C programın çıktısı aşağıdaki gibi oluşacaktır.

c_programcikti

Programın kodları şu şekildedir ve gerekli açıklmalar yorum satırı olarak program içersinde belirtilmiştir.

Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : İki Matrisin Toplamı

İki matrisin toplamını bulmak istediğimizi düşünelim.  Elimizde  A ve B olmak üzere iki matris olsun ve matislerin boyutu 3×3 boyutunda olsun. Yani her iki matrisinde 3 satır 3 sütündan oluştuğunu düşünelim. Bu iki matrisim toplamını bulmak için aşağıdaki gibi bir yol izlememiz gerekmektedir.

  • Birinci matrisin 1. satır 1. sutun elemanı (  şekle göre 1  ) ile  ikinci  matrisin 1.satir 1. sutun elamanı toplanır .   ( 2. Matriste 1.1 elemanı 0’dır)
  • Aynı işlemler bütün elamanlar için tekrarlanır örneğin. Birinci  matrisin 3,2 elamanı ile ikimci matrisin 3,2 elamanı toplanır ( 2+1)

Şimdi kaynak kodları verelim. Biz burada matrise değerleri elle girdik. İsterseniz siz matris bilgilerini kullanıcıdan aldırabilirsiniz.

Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : Girilen Sayının Asal Carpanlarını Bulmak

Algoritma oluştururken lise matematik dersinde kullandığımız  yöntemden yararlandık. Kullanıcının girdiği sayı ilk önce ikiye  bölünmek isteniyor. Eğer bölünürse 2’nin bir asal çarpan olduğu anlaşılıyor ve ekrana yazdırılıyor. i = i – 1 ataması ile, sayı tekrar 2’ye bölünmeye çalışılıyor. 2’ye daha fazla bölünemiyorsa bu sefer aynı işlemler 3 için tekrarlanıyor. Bu şekilde devam ederek sonuca ulaşabiliriz.

Not : Farklı yontemlerle de sonuca gidilebilir.

 

 
 
#include <stdio.h>
#include<conio.h>
	int main ()
	{
		int s;
	   	int i;
 
	   	printf (" Bir sayi giriniz: ");
	   	scanf  ("%d", &s);
 
	   	printf ("\n");
 
	   	// Algoritma oluştururken lise matematik dersinde kullandığımız
	   	// yöntemden yararlandık. Kullanıcının girdiği sayı ilk önce ikiye
	   	// bölünmek isteniyor. Eğer bölünürse 2'nin bir asal çarpan olduğu
	   	// anlaşılıyor ve ekrana yazdırılıyor. i = i - 1 ataması ile, sayı
	   	// tekrar 2'ye bölünmeye çalışılıyor. 2'ye daha fazla bölünemiyorsa
	   	// bu sefer aynı işlemler 3 için tekrarlanıyor...
 
	   	for (i = 2; s != 1; i ++)
	   	{
			if (s % i == 0)
			{
		   		s /= i;
 
		   		printf ("%5d", i);
 
		   		i --;
			}
	   	}
 
	   	printf ("\n");
 
	   getch();
	}

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : Stringte bir karakteri sayma

C de bir string içersinde  herhangi bir karakter aradığımızı düşünelim.  Bunun için yapmamız gereken adımlar şu şekildedir.

  • Kullanıcıdan bir string oku
  • Stringin uzunluğunu bul
  • String dizisinin sonu gelinceye kadar devam edecek bir döngü oluştur.
  • Oluşturduğun döngü içersindeki döngü değerine göre  string dizisinin o anki karakteri ile aradığın karakteri karsılastır.
  • Eğer karakter aradığın karakterle aynı ise sayac değerini bir attır. Aynı değilse bir değişiklik yapma.
  • Döngü sonunda kac adet istenilen karakterden bulunduğunu ekrana yazdır.

Şimdi bu işlemleri yapan kaynak kodları paylaşalım. Aslında yukarıdaki algoritmayı kafamızda kurduktan sonra yapılacak işlemler çok cok basit. Aşağıdaki program  girilen string içersinde A  karakterini arar.

 

 
#include 
#include 
#include 
int main()
{
char adDizi[255];
int uzunluk;
int sayac=0;
int i;
printf("Bir String Giriniz :");
//gets(adDizi);   Bu sekildede okunabilirdi.
scanf("%s",adDizi); // Stringi okudul
for(i=0;adDizi[i]!='\0';i++)  //   String dizisinin sonuna gelene kadar yap
{
   if (adDizi[i]=='A' || adDizi[i]=='a')  // eğer i elemanı A yada kücük a ise sayac değerini bir attır
      sayac++;  
}
printf("Girdiginiz Stringte %d tane",sayac );    
system("PAUSE");
}

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : Kayan Yazı Uygulaması

Aşağıdaki program klavyeden girilen stringi ekranda kaydırarak yazdırmaya yarar.

 

 
 
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
main()
{
    char d[35];
    int j,sayi,i,son;
 
    gets(d);
 
 
son=strlen(d);
    for (j=0;;j++)
    {
        system("clear");
   printf("\n");
        for(i=0;i<j;i++)
        {
            printf(" Aytac cici");
       j=j%(164-son);
        }
        puts(d);
    }
}

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS