Skip to main content

C Programlama Örnekler

C PROGRAMLAMA DİLİ ÖRNEKLER 

C programlama dili nasıl kullanılır ? Projeler nasıl yapılır ? C programlama dilinde örnek projeler nasıl yapılır ? Bu ve benzeri sorulara cevap aradığımız C Programlama Dili Örnekler adlı yazımızda C Programlama dili ile yapılmış örnek projeleri sizlerle paylaşıyoruz.

C DİLİ ÖRNEKLER 

C Programlama Örneği 1 :

Bir Stack uygulaması için C programı yazalım.Stack anlam olarak yığın,dizi  anlamlarına gelmektedir.Stack LIFO (Last in First Out – Son girer , İlk çıkar) data yapısına sahiptir.Burada Push (içeri alma işlemi) , POP (Silme işlemi) ve Display (gösterme işlemi) kullanılacaktır.

Başlayalım ;

#include <stdio.h>
#include <conio.h>
#define MAXSIZE 5

struct stack /* Stack için yapı tanımlaması */
{
int stk[MAXSIZE];
int top;
};

typedef struct stack STACK;
STACK s;

/* Fonksiyon Bildirimi/Prototip*/

void push (void);
int pop(void);
void display (void);

void main ()
{
int choice;
int option = 1;

clrscr ();

s.top = -1;

printf (“Stack İslemleri\n”);
while (option)
{
printf (“——————————————\n”);
printf (” 1 –> PUSH \n”);
printf (” 2 –> POP \n”);
printf (” 3 –> DISPLAY \n”);
printf (” 4 –> EXIT \n”);
printf (“——————————————\n”);

printf (“Seciminizi Giriniz\n”);
scanf (“%d”, &choice);

switch (choice)
{
case 1: push();
break;
case 2: pop();
break;
case 3: display();
break;
case 4: return;
}

fflush (stdin);
printf (“Devam Etmek İstiyormusunuz (Seç : 0 ya da 1)?\n”);
scanf (“%d”, &option);
}
}

/*Stack’a element ekleme fonksiyonu*/
void push ()
{
int num;
if (s.top == (MAXSIZE – 1))
{
printf (“Stack Dolu\n”);
return;
}
else
{
printf (“İçeri alınacak elaman girişi yapınız\n”);
scanf (“%d”, &num);
s.top = s.top + 1;
s.stk[s.top] = num;
}
return;
}

/*Stack’dan element silme fonksiyonu*/
int pop ()
{
int num;
if (s.top == – 1)
{
printf (“Stack Bos\n”);
return (s.top);
}
else
{
num = s.stk[s.top];
printf (“pop edilen element  = %d\n”, s.stk[s.top]);
s.top = s.top – 1;
}
return(num);
}

/*Stack durum gösterme fonksiyonu*/
void display ()
{
int i;
if (s.top == -1)
{
printf (“Stack bos\n”);
return;
}
else
{
printf (“\nStack’ın durumu\n”);
for (i = s.top; i >= 0; i–)
{
printf (“%d\n”, s.stk[i]);
}
}
printf (“\n”);
}

Çıktılar :
Stack İşlemleri ;
——————————————
1 –> PUSH
2 –> POP
3 –> DISPLAY
4 –> EXIT
——————————————
Seçiminizi Giriniz ;
1
Push edilecek elementi giriniz :
23
Devam Etmek İstiyor musunuz ? (Seç : 0 ya da 1)?
1
——————————————
1 –> PUSH
2 –> POP
3 –> DISPLAY
4 –> EXIT
——————————————
Seçiminizi Giriniz ;
1
Push edilecek elementi giriniz :
45
Devam Etmek İstiyor musunuz ? (Seç : 0 ya da 1)?
1
——————————————
1 –> PUSH
2 –> POP
3 –> DISPLAY
4 –> EXIT
——————————————
Seçiminizi Giriniz ;
1
Push edilecek elementi giriniz :
78
Devam Etmek İstiyor musunuz ? (Seç : 0 ya da 1)?
1
——————————————
1 –> PUSH
2 –> POP
3 –> DISPLAY
4 –> EXIT
——————————————
Seçimizini Giriniz :
3

Stack’ın Statüsü :
78
45
23

Devam Etmek İstiyor musunuz ? (Seç :  0 ya da 1)?
1
——————————————
1 –> PUSH
2 –> POP
3 –> DISPLAY
4 –> EXIT
——————————————
Seçiminizi Giriniz :
2
poped element = 78
Devam Etmek İstiyor musunuz ? (Seç :  0 ya da 1)?
1
——————————————
1 –> PUSH
2 –> POP
3 –> DISPLAY
4 –> EXIT
——————————————
Seçimizini Giriniz :
3

Stack’ın Statüsü :
78
45
23

Devam Etmek İstiyor musunuz ? (Seç :  0 ya da 1)?
0

C Programlama Örneği 2 :

Tek bağlantılı olan bir listenin işlemlerini göstermek adına bir C programı yazalım ;

Başlayalım :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define MAX 30

struct EMP
{
int empno;
char empName[MAX];
char designation[MAX];
struct EMP *next;
};

/*Fonksiyon , karşı bağlantılı listeden bir node içeri alır */

/*front : Front pointer’ı , id : Çalışan ID , name : Çalışan ismi*/
/* desg:  Çalışan Gösterimi/Belirleme */

struct EMP* insert(struct EMP *front, int id, char name[], char desg[])
{
struct EMP *newnode;

newnode = (struct EMP*) malloc(sizeof(struct EMP));

if (newnode == NULL)
{
printf(“\nYerleştirme Yapılamadı\n”);
exit(2);
}
newnode->empno = id;
strcpy(newnode->empName, name);
strcpy(newnode->designation, desg);
newnode->next = front;
front = newnode;
return(front);
} /*insert() işleminin sonu */

/* Bağlantılılı listede gösterilecek nod fonksiyonu */
void printNode(struct EMP *p)
{
printf(“\nCalısan Detayları\n”);
printf(“\nCal No : %d”, p->empno);
printf(“\nİsim : %s”, p->empName);
printf(“\nGösterim : %s\n”, p->designation);
printf(“————————————-\n”);
} /*printNode()’un sonu */

/*Calısan numarasına göre deleteNode işlemi fonksiyonu*/
/* front: front pointer, id: anahtar deger */
/* Returns: ayarlı liste */

struct EMP* deleteNode(struct EMP *front, int id)
{
struct EMP *ptr;
struct EMP *bptr; /* bptr is pointing to the node behind ptr */

if (front->empno == id)
{
ptr = front;
printf(“\nNode silindi:”);
printNode(front);
front = front->next;
free(ptr);
return(front);
}

for(ptr=front->next, bptr=front; ptr!=NULL; ptr=ptr->next, bptr=bptr->next)
{
if (ptr->empno == id)
{
printf(“\nNode silindi:”);
printNode(ptr);
bptr->next = ptr->next;
free(ptr);
return(front);
}
}
printf(“\nCalısan numarası %d bulunamadı “, id);
return(front);
} /*deleteNode()’un sonu */

/* emp ID’e göre arama yapan fonksiyon */
/* front: front pointer, key: key ID. */

void search(struct EMP *front, int key)
{
struct EMP *ptr;

for (ptr = front; ptr != NULL; ptr = ptr -> next)
{
if (ptr->empno == key)
{
printf(“\nKey bulundu:”);
printNode(ptr);
return;
}
}
printf(“\nCalisan No %d bulunamadı “, key);
} /*End of search() */

/* Bağlantılı liste gösterme fonksiyonu */
void display(struct EMP *front)
{
struct EMP *ptr;

for (ptr = front; ptr != NULL; ptr = ptr->next)
{
printNode(ptr);
}
} /*display()’in sonu */

/* Bağlantılı listede menü işlemlerini gösterme fonksiyonu */
void menu()
{
printf(“*****************\n”);
printf(“Listeye nod eklemek icin 1’e basın. \n”);
printf(“Listeden nod silmek için 2’ye basın. \n”);
printf(“Listeyi göstermek için 3’e basın. \n”);
printf(“Listeyi aramak için 4’e basın \n”);
printf(“Cıkmak için 5’e basın \n”);
printf(“*******************\n”);
} /*menu() sonu */

/* Seçilmiş Fonksiyon */
char option()
{
char choice;

printf(“\n\n>> Seçiminizi Girin : “);
switch(choice=getche())
{
case ‘1’:
case ‘2’:
case ‘3’:
case ‘4’:
case ‘5’: return(choice);
default : printf(“\nYanlis Secim.”);
}
return choice;
} /*option() Sonu */

/*main() programı başlar ! */
void main()
{
struct EMP *linkList;
char name[21], desig[51];
char choice;
int eno;

linkList = NULL;

printf(“\nTek bağlantılı liste gösterimine hoşgeldiniz ! \n”);

menu(); /*Fonksiyon çağrısı */

do {
choice = option(); /*çalışacak işlemleri seçmek adına ; */

switch(choice)
{
case ‘1’: printf(“\nCalisan numarasını gir : “);
scanf(“%d”, &eno);

printf(“Calisan adını gir : “);
fflush(stdin);
gets(name);

printf(“Calisan tanımlamasını gir : “);
gets(desig);

linkList = insert(linkList, eno, name, desig);
break;

case ‘2’: printf(“\n\nSilinecek calisan numarasını gir: “);
scanf(“%d”, &eno);

linkList = deleteNode(linkList, eno);
break;

case ‘3’: if (linkList == NULL)
{
printf(“\nListe bos.”);
break;
}
display(linkList);
break;

case ‘4’: printf(“\n\nAranacak calisan numarasını gir : “);
scanf(“%d”, &eno);

search(linkList, eno);
break;

case ‘5’: break;
}
} while (choice != ‘5’);
} /*main() sonu*/

Çıktılar :

Tek Bağlantılı Liste Gösterimi :
———————————————
Listeye node eklemek için 1’e basınız !
Listeden node silmek için 2’e basınız !
Liste gösterimi için 3’e basınız !
Arama yapmak için 4’e basınız !
Çıkmak için 5’e basınız.
———————————————

>> Seciminizi Girin : 1
Calisan numarasını gir  : 1278
Calisan adını gir : Ahmet
Calisan tanımını gir  : İsci

>> Seciminizi Girin : 1
Calisan numarasını gir  : 9734
Calisan adını gir : Bayram
Calisan tanımını gir  : Mühendis

>> Seciminizi Girin : 1
Calisan numarasını gir  : 8761
Calisan adını gir : Kamil
Calisan tanımını gir  : Yönetici

>> Seciminizi Girin : 3

Calisan Detayları ;

Calisan No : 1278

İsim : Ahmet

Tanım : İsci
————————————-

Calisan Detayları ;

Calisan No : 9734

İsim : Bayram

Tanım : Mühendis
————————————-

Calisan Detayları ;

Calisan No : 8761

İsim : Kamil

Tanım : Yönetici
————————————-

>> Seciminizi Girin : 2

Silinecek Calisan Numarasını yazın : 1278

Node Silindi:
Calisan Detayları :

Calisan No : 1278

İsim : Ahmet

Tanım : İsci
————————————-

>> Seciminizi Girin : 3

Calisan Detayları ;

Calisan No : 9734

İsim : Bayram

Tanım : Mühendis
————————————-

Calisan Detayları ;

Calisan No : 8761

İsim : Kamil

Tanım : Yönetici
————————————-

>> Seçiminizi Girin : 4

Aratılacak calisan numarasını giriniz : 8762

8762 calisan numarası bulunamadı !

>> Seciminizi girin : 5

C Programlama Örneği 3 :

Bir array arama işlemi yapacağız.Eğer istenilen elementler bulunursa ‘başarılı arama’ , eğer bulunamazsa ‘başarısız arama’ olarak mesaj alacağız.

Başlayalım  ;

#include <stdio.h>
void main()
{
int table[20];
int i, low, mid, high, key, size;

printf(“Dizi boyutunu giriniz \n”);
scanf(“%d”, &size);

printf(“Dizi elementlerini giriniz ! \n”);
for(i = 0; i < size; i++)
{
scanf(“%d”, &table[i]);
}

printf(“Anahtar ifadeyi girin ! \n”);
scanf(“%d”, &key);

/* Arama başlatma */

low = 0;
high = (size – 1);

while(low <= high)
{
mid = (low + high)/2;
if(key == table[mid])
{
printf(“Basarılı Arama\n”);
return;
}
if(key < table[mid])
high = mid – 1;
else
low = mid + 1;
}

printf(“Basarisiz Arama\n”);
} /* main() fonk. sonu */

Çıktılar :
Dizi boyutunu giriniz !
5
Dizi Elementlerini giriniz !
12
36
45
78
99
Anahtar ifadeyi girin !
45

‘Basarili Arama’

C Programlama Örneği 4 :

Diskte depolanan verilerin nasıl okunduğunu bizlere gösteren bir C programı yazalım.

Başlayalım ;

#include <stdio.h>
#include <stdlib.h>

void main()
{
FILE *fptr;
char filename[15];
char ch;

printf(“Açılacak Dosya Adı nedir ? \n”);
gets(filename);

fptr = fopen (filename, “r”); /*okuma için aç*/

if (fptr == NULL)
{
printf(“dosya acılamaz\n”);
exit(0);
}

ch = fgetc(fptr);

while (ch != EOF)
{
printf (“%c”, ch);
ch = fgetc(fptr);
}

fclose(fptr);
} /*main()’in sonu */

Çıktılar :
Açılacak dosya adı nedir ?

emp.rec (örnek ! )
İsim = Mehmet
Yaş = 25
Ücret = 3000

C PROGRAMLAMA DİLİ ÖRNEKLER  SONUÇ : 

Bugün C programlama dili örnekler adlı yazımızı sizlerle paylaştık.Bu yazı dizisi ile C programlama diline daha hakim hale gelmek için örnek programları inceleyecek ve paylaşacağız.Umuyorum faydalı olacaktır.

İyi Çalışmalar

C# Programlama Dili Dersleri 2

C# PROGRAMLAMA DİLİ DERSLERİ İNCELEME – 2

C#’t a karakterler nedir ? Sayı tipleri nedir ? Aritmetik operatörler , mantıksal operatörler nedir ? C# dilinde sınıflar nedir ? Bu ve benzeri sorulara cevap aradığımız bu yazı dizisinde C# Programlama Dili Dersleri’ne ve  C#’a dair ilgili incelemelerimize devam ediyoruz.

C# PROGRAMLAMA DİLİ

C#’ta dokuz adet tamsayı tipi tanımlıdır (byte , sbyte , short , ushort ,int , uint , long , ulong)

İşaretli ve işaretsiz tamsayılar arasındaki fark ise , tamsayının üst bitinin (high order) yorumlanma durumlarına bağlıdır.İşaret bayrağı işaretli tamsayıda C# tarafından üst bite göre kod oluşturularak belirtilir.

Eğer işaret bayrağı 0 ise sayı pozitiftir , 1 ise sayı negatiftir.

C#’ta sinüs , kosinüs ve tanjantı hesaplamak adına Math.Sin() , Math.Cos () ve Math.Tan () kullanılmaktadır.Math.Sqrt () gibi trigonometrik metotlar double argüman ile çağrılıp double bir sonuç döndürürler.

Decimal Tipi :

Decimal tipi 1E-28 ile 7.9E+28 arasındaki değerleri simgelemek adına kullanılır.Decimal ondalık sayılara uygulandığında yuvarlama hatalarını ortadan kaldırır.

Bu tipi özellikle bellek gerektiren hesaplamalarda kullanmalısınız.

Karakterler :

C#’ta Unicode adı verilen 16 bitlik bir karakter tipi kullanılır.Standart 8 bit ASCII karakter seti , Unicode’un bir alt kümesidir ve 0’dan 127’ye kadar uzanır.

Bool Tipi :

Bool tipi ‘’ya doğru ya yanlış’’ True/False mantığında çalışır.1 true’ya dönüşmez , 0’da false’a .

Bazı Çıktı Seçenekleri :

WriteLine()’ı kullanıyorduk , bunu not edelim hemen.Ek olarak Formatted I/O (biçimlendirilmiş I/O) çıktı seçenekleride kullanılmaktadır.

Örnek olarak program çıktınız , 10/3 = 3.33333333 şeklinde olsun.Bu kadar çok ondalık basamak göstermek amaçlarınız için uygun olmayabilmektedir.O zaman ikinci bir WriteLine() stili öğrenelim .

WriteLine(“biçimlendirme karakter katarıi” , arg0 , arg1 ,  … , argN);

Burada ‘+’ işareti ile değilde , virgül ile ayrılır.

Burada baskı karakterleri ve biçimlendirme belirleyicileri olmak üzere iki öğe içerir.Ve biçimlendirme belirleyicileri şu şekilde bir görünüme sahiptir.

{argno , genişlik : fmt}

Argno  ; gösterilecek argüman sayısını (0’dan başlayarak) belirtir.Minimum genişliği genişlik ile ; biçim ise fmt ile belirtilir.

Yani bir biçimlendirme belirleyicisine rastladığında programda , argno’ya karşılık gelen argüman argno’nun yerine yerleştirilir.Genişlik ve fmt ise isteğe bağlı olarak kullanılır.

Örnek olarak  ;

Console.WriteLine (“Şubat {0}  yada {1} gündür ” 28 , 30);

Şubat 28 ya da 30 gündür çıktısını alırız buradan.

{0,10} şeklinde bir ifade koysaydık şubattan sonra  10 adet boşluk bırakarak 28’i yazacaktı.

Biçimlendirme de en çok kullanılan veri tipleri kayan noktalı ve ondalık değerlerdir.Bunun için WriteLine() ‘#’ konsolu kullanılır.

Örnek : {0:#.##} şeklinde kullanılabilir.

Mesela  ; ConsoleWriteLine(“{0:###,###.###}” , 123456.12);

Çıktısı ise ; 123,456.12 çıktısını verecektir.

Literaller :

İnsanların okuyabileceği biçimde temsil edilen sabit değerlere karşılık gelir.Mesela ; 50 sayısı bir literaldir.Aynı şekilde literaller sabitler(constant) şeklinde de ifade edilirler.

Herhangi bir değer tipinde literal olabilir.Bu literallerin gösteriliş şekli ise literalin tipine bağlıdır.

Literaller int , uint , long ya da ulong tipinde olabilirler.Yada kayan noktalı literaller ‘double’ tipindedir.

C#’ta bir literal tipi belirtmek istiyorsanız ;

12 int tipindedir.L ekleyerek 12L’yi long tipinde gösterebilirsiniz.İşaretsiz bir tamsayı belirtmek adına u ve ya U ekleyebiliriz.Bir float’ı belirtmek adına u1 ve ya UL kullanabiliriz.

Onaltılık Literaller ; Hexadecimal olarak duyuyor ya da duyacak olduğunuz tiptir.0-9 arası rakamlarla , ardından A’dan F’e kadar harfler kullanılarak simgelenir.

Örnek olarak : 0xFF (ondalık taban karşılığı 255’tir.)

Karakter Kaçış Sekansları ; Tek tırnak ve çift tırnakların C#’ta özel anlamları da olduğu için  problemler meydana gelebilir.Bu sebeple de birkaç kaçış sekansı kullanılmaktadır.

\a -> uyarı(zil) anlamındadır.

\b-> backspace(geri al) anlamındadır.

\f-> form feed (form besleme) anlamındadır

\n-> newline(yeni satır) anlamındadır.

\r-> carriage return (paragraf sonu) anlamındadır.

\t->yatay sekme anlamındadır.

\v-> düşey  sekme anlamındadır.

\0-> Null anlamındadır.

\’->Tek tırnak anlamındadır.

\”->Çift tırnak anlamındadır.

\\-> Ters bölü anlamındadır.

Karakter Katarı Literalleri  :

Karakter katarı literali -> çift tırnak arasına alınan bir karakter kümesidir.

“bu bir deneme yazısıdır.”

Değişkenler ;

‘ Tip değişken-ismi ‘ şeklinde ifade edilirler.

Tip; değişken veri tipini , değişken-ismi de o değişkene verilen isimdir.

C#’ta tüm değişkenler kullanılmadan önce deklare edilmelidir.

Bir değişkene ilk değeri atayalım beraber ;

İnt count = 10 ;

Char ch = ‘C’;

Float f = 1.5F gibi.

Bu dilde değişkenlerin tümü Main() metodunun başında tanımlanmaktaydı ancak C# bir yerel değişkenin blok içerisinde deklare edilmesine imkan tanımaktadır.

En önemli kapsamlar ise ; bir sınıf ve bir metot tarafından tanımlananlardır.

Tip Dönüşüm ve Atamaları :

Bir integer değeri float değere atamak istediğimizi varsayalım ;

İnt i ;

Float f ;

İ = 10 ;

F = i ;

İnteger’ı float’a atıyoruz.(basit bir örnek)

Otomatik Dönüşüm ;

Bir tipteki verinin diğer bir tipteki değişkene atanmasının otomatik olarak dönüşmesi durumunu sağlayan koşullar;

  • Her iki tip uyumlu olmalı
  • Hedef tip , kaynak tipten daha büyük olmalıdır

Her iki koşul da sağlanırsa , genişletici dönüşüm (widening conversion) söz konusu olacaktır.

Operatörler  :

Toplama (+) , Çıkarma (-) , Çarpma (*) , Bölme (/) , Artırma (++), Eksiltme (–)

Eğer artırma/azaltma operandları ifadenin önünde kullanılırlarsa (–x / ++x) gibi , C# geri kalan kısımda operandın değerini hesap etmeden önce işlemi gerçekleştirir.

Örnek :

X = 10 ve y = ++x -> y = 11 değerini hemen alacaktır.

X = 10 ve y = x++ ->  y =10 değerini ilk başta alacaktır.

Mantıksal Operatörler :

Eşittir (==) , Eşit değildir (!=) , Büyüktür (>) , Küçüktür (<) , Büyüktür veya eşittir (>=) , Küçüktür veya eşittir (<=)

Ve (&) , Veya (|) , XOR özel veya(^) , Kısa devre veya (||) , Kısa devre ve (&&) , Değil (!)

Kısa Devre Mantıksal Operatörler ;

Bu operatörler  VE (&&) ve VEYA (||) operatörleridir.

Atama Operatörü ;

Atama operatörü (=)’dir.

Değişken = deyim ;

Bileşik Atamalar ;

X = x+ 10 ‘u  -> x +=10; şeklinde

X = x-50’yi -> x -=50; şeklinde yazabiliriz.

değişken op = deyim ; genel gösterimidir.

Aritmetik ve Mantıksal Atama Operatörleri ;

+= , -= , *= , /= , %= , &= , |= , ^=

Bit Tabanlı Operatörler ;

Yalnızca tamsayılar için geçerlidir.Bool , float , double üzerinde kullanılamazlar.

Bu operatörlere bit tabanlı adı verilmektedir çünkü bir tamsayı değeri oluşturan bitlerin test edilmesi , ayarlanması ve kaydırılması işlemlerinde kullanılır.

Bit Tabanlı VE (&) , Bit tabanlı VEYA (|) , Bit tabanlı XOR(^) , Sağa kaydırma (>>) , Sola kaydırma (<<)

? Operatörü ;

Genel olarak belirli olan if-then-else ifadelerinin yerine kullanılır.? Operatörüne üçlü (ternary) operatör denilir.Nedeni ise  üç adet operand gerektirmesidir.

Kullanım Formu : Deyim1 ? Deyim2 : Deyim3;

Bu ifade de deyim1 bool deyimdir ve deyim2 ile deyim3 birer deyimdir.Deyim2 ve deyim3’ün tipleri aynı olmalıdır.

Eğer deyim1’in değeri doğru ise deyim2 hesaplanır .Yalnışsa deyim3 hesaplanır.

Program Kontrol İfadeleri  :

1 ) İf (koşul) ifade ;

else ifade;

2) if (koşul)  ifade ;

else if (koşul) ifade ;

else if (koşul) ifade ;

else ifade ;

3)switch (deyim) {

case sabit1 : ifade break ;

case sabit2 : ifade break ;

……

Default : ifade break ;  }

Not : Default ifadesi isteğe bağlıdır.Case ilişkili ifadelerin bir sonraki case içerisinde devam etmesi hatalıdır ve buna bir sonraki seçeneğe kaymama (no-fall-through) kuralı denir.

4) for (başlangıç ; koşul ; iterasyon) ifade ;

Not : iterasyon döngünün her tekrarlanışında döngü kontrol değişkeninin ne ölçüde değiştirileceğini tanımlar.

5) while (koşul) ifade ;

6)do { ifadeler ;  0    } while (koşul) ;

7)continue  ifadesi ile , döngüyü bir sonraki tekrarını gerçekleştirmeye zorlayarak , arada yer alan kodun dikkate alınmamasını sağlayabiliriz.

Sınıf – Nesne – Metotlar :

Sınıflar , C#’ın özüdür.Tüm C# faaliyetleri bir sınıf içerisinde meydana gelmektedir.Sınıf bir nesnenin şeklini tanımlayan bir şablondur.

Nesne tanımlanması için sınıf spesifikasyonu kullanılır.

Sınıf ‘class’ anahtar kelimesi kullanılarak oluşturulur.

Örnek ;

Class sınıfismi {

Erişim tip değişkeni1;

Erişim tip değişkeni2;

Erişim tip değişkenin ;

Erişim dönüş-tipi metot1 (parametreler) {  metod gövdesi }

…..

}

Burada erişim ilgili üyeye ne şekilde erişileceğini belirten bir erişim belirleyicisidir.Örnek olarak ; Public vb.

Bina adında bir sınıf oluşturalım ;

class bina {

public int katlar ;

public int odalar ;

}

Kullanım : erişim tip değişken-ismi ;

Bir bina nesnesi oluşturmak için ;

Building house = new Building (); Building tipinde bir nesne oluşturur.Ve fiziksel gerçeklik kazandırır.

Nokta (.) operatörü bir nesnenin ismini bir üyenin ismi ile bağlar.

Örnek : nesne.üye

Örnek = house.floors = 2;

C# PROGRAMLAMA DİLİ DERSLERİ 2 SONUÇ :

Bugünki yazımızda C# Programlama Dili Dersleri 2 adlı yazımızı sizlerle paylaştık.Bu seri de C#’a dair bir takım bilgileri beraber incelemek umuyorum hepimiz için faydalı olacaktır.Hemen hemen aynı mantık üzerinden programların çalışmasını anlamaya çalışarak , istediğiniz dilde daha hızlı ilerleyebileceğimizi düşünmekteyiz.İyi çalışmalar.

Ücretsiz Full C Programlama Dili Öğren -4 | C Programlama Eğitimi

C PROGRAMLAMA DİLİ EĞİTİM ve ÖRNEKLER -3

C programlama dili birlikler nedir ? C programlama Dosya İşleme ve Veri Hiyerarşisi Nedir ? Veri Yapıları Nedir ? Bildiriler Nedir ?Bugün C programlama dili eğitim ve örnekler serisinin 4. yazısını sizlerle paylaşıyoruz.

Başlayalım.

C PROGRAMLAMA DİLİ EĞİTİMİ -3

BİRLİKLER : 

Birliklerde yapılar gibi türetilmiş veri tipleridir.Aynı depolama alanını kullanırlar.

Birliğin elemanı her tipte olabilir.Birlik içerisinde verinin uygun tipte kullanılmasını sağlamak programcının sorumluluğundadır.

Bir birlik ‘union’  anahtar kelimesi ile yapılarla aynı biçimde bildirilir.

Örnek : union kelimesi ile ;

Union sayi {

İnt x ;  double y;    };

Bit Operatörleri :

Her bit yalnızca 0 ya da 1 değerini alabilir.8 bit 1 byte’ı oluşturur.

Bit operatörleri şunlardır ;

And (&) , Or (|) , Exclusive Or (^),  Sola kaydırma (<<)  , Sağa kaydırma (>>) , Tümleyen (~)

And : İki operandın ikisinin de ilgili bitlerinde 1 varsa , sonuçtaki bitler 1 yapılır

Or : İki operandın ilgili bitlerinden en az biri 1 ise sonuçtaki bitler 1 yapılır

Exclusive or : iki operandın ilgili bitlerinden yalnızca biri 1 ise sonuçtaki bitler 1 yapılır

Sola Kaydırma : İlk operandın bitleri ikinci operandında belirtilen sayı kadar sola kaydırır.Sağdan itibaren 0 ile doldurur.

Sağa kaydırma : İlk operandındaki bitleri ikinci operandında belirtilen sayı kadar sağa kaydırır.Soldan itibaren yapılacak doldurma makine bağımlıdır.

Tümleyen : Tüm 0 bitleri  1 , tüm 1 bitleri 0 yapılır.

Bit Atama Operatörleri :

&=   And atama operatörü

|=   Or atama operatörü

^=  Exclusive Or atama operatörü

<<=  Sola kaydırma atama operatörü

>>=  Sağa kaydırma atama operatörü

Sayma Sabitleri :

Bir sayma , enum anahtar kelimesi ile tanıtılır ve tanıtıcılar ile temsil edilen tamsayı sabitlerinin kümesidir.

Bu sayma sabitleri , değerleri otomatik olarak belirlenen sembolik sabitlerdir.

‘Enum’ içindeki değerler aksi belirtilmedikçe 0 ile başlar ve 1 artırılır.

Örnek : enum aylar {OCA=1 , SUB , MAR , NIS , MAY , HAZ , TEM , AGU , EYL , EKI , KAS, ARA};

Burada ilk değer 1 yapıldığından , kalan değerler 1 arttırılarak 1-12 değerleri oluşturulur.

Saymada kullanılan tanıtıcılar özel olmalıdır.

Sayma sabitleri için yalnızca büyük harfler kullanmak program içinde bu sabitlerin daha belirgin hale gelmesini sağlar.

DOSYA İŞLEME :

Değişken ve diziler içinde depolanan veriler geçicidir ve program sonlandığında   kaybolurlar.

Dosyalar ise büyük miktarda veriyi kalıcı olarak tutmak için kullanılırlar.

Veri Hiyerarşisi :

Neticede bilgisayar tarafından işlenen tüm veriler , sıfır ve birlerin kombinasyonlarına indirgenirler.

Bilgisayarlar tarafından işlenen veri parçaları , bitlerden karakterlere , karakterlerden alanlara ve bu şekilde ilerleyerek daha büyük ve karmaşık bir hale geldikçe bir veri hiyerarşisi oluşturur.

Bir alandaki ilgili dosyaların topluluğuna genellikle veritabanı (database) denir.Veri tabanı oluşturmak ve veri tabanını yönetmek için kullanılan programlara veri tabanı yönetim sistemleri(data base management system) denir.

C programlama dili eğitimleri

Dosya ve Akışlar (Stream) :

Program çalışmaya başladığında , üç dosya ve bu dosyalarla ilişkili akışlar ; standart giriş , standart çıkı ve standart hata otomatik olarak açılır.

FILE yapısını  (<stdio.h> içinde tanımlanmıştır) gösteren bir gösterici döndürür.Bu yapı ise açık dosya tablosu (open file table) adı verilen işletim sistemi dizisi için dizin gösteren bir dosya belirteci (file descriptor) içerir.

Her dizi elemanı da işletim sisteminin bir dosyayı yönetebilmesi için kullandığı dosya kontrol bloğunu (File Control Block) içerir.

Standart giriş / çıkış ve hata stdin , stdout , stderr göstericileri ile yönetilir.

Fgetc fonksiyonu , getchar fonksiyonu gibi fonksiyonlar dosyadan bir karakter okur.

Fputc fonksiyonu , argüman olarak yazdırılacak bir karakter ve karakterin yazdırılacağı dosyayı gösteren bir gösterici alır

Programda kullanıcıya her kayıt için çeşitli alanları doldurması ya da veri girişinin sonlandığını belirten dosya sonu belirteci girmesini söyleyen mesaj için ;

While (! feof (stdin))  kullanılabilir.

Feof satırı stdin’in belirttiği dosyanın dosya sonu belirtecinin elde edilip edilemediğine karar verir.

‘ w ’  : yazma modu (Yazma yapmak için bir dosya yarat)

‘ r ’  : okuma modu (Bir dosyayı okumak için aç)

‘ a ‘  : varolan dosyaya kayıtlar eklemek için dosyayı ekleme modunda açmak için gerekir.

‘ r+’ modu : dosyayı okumak ve yazmak için açar (Bir dosyayı güncellemek)

‘ w+’ modu : yazma ve okuma için bir dosyayı yaratır. (Güncelleme için bir dosya yarat)

‘ a+ ‘ modu : dosyayı okuma  ve yazma yapmak için açar ve önceki içerikler kaybolur (Güncelleme için)

Eğer dosyayı herhangi bir moda açarken bir hata oluşursa  fopen NULL  döndürür.

Not : Genel hatalardan birisi var olmayan bir dosyayı okuma yapmak için açmaktır.

Sıralı Erişimli Dosyadan Veri Okumak :

Sıralı erişimli bir dosyadan verileri geri elde etmek için , program okuma yapmaya dosyanın başından başlar ve istenen veri bulunana kadar sırayla tüm veriler okunur.

Rewind (cfPtr) ; gibi bir ifade programın dosya pozisyon göstericisini (okuma yazma işlemindeki bir sonraki byte numarasını belirtir).cfPtr ile gösterilen dosyanın başına (0. Byte’a) geri döndürmesini sağlar.

Rasgele Erişimli Dosyalar ;

Biçimlendirilmiş çıktı fonksiyonu fprintf ile oluşturulan kayıtlar aynı uzunlukta olmak zorunda değildir.Ancak rasgele erişimli bir dosyadaki tüm kayıtlar sabit uzunluğa sahiptirler.

Fwrite fonksiyonu , hafızada belirlenmiş bir konumdan aldığı belli sayıdaki byte’ı dosyaya aktarır.

Fread fonksiyonu dosya içinde dosya pozisyon göstericisi ile belirlenen konumdan aldığı belli sayıdaki byte’ı , belirlenen adresten başlayarak hafızaya aktarır.

Not : sizeof operatörü parantez içindeki nesnenin boyutunu byte olarak döndürür.sizeof operatörü işaretsiz bir tamsayı döndüren derleme zamanlı tekli bir operatördür.

Fseek fonksiyonunun prototipi ise , ANSI standartına göre ;

int fseek (FILE *stream , long int offset , int whence);

Burada offset , stream ile belirtilen dosyadaki whence konumundan itibaren byte sayısıdır.

Whence argümanı , dosyada aramanın başlayacağı konumu belirten SEEK_SET , SEEK_CUR , SEEK_END değerlerinden biridir.

SEEK_SET : aramanın dosyanın başından başlayacağını

SEEK_CUR : aramanın dosyadaki o anda bulunulan konumdan başlayacağını

SEEK_END : aramanın dosya sonundan başlayacağını belirtir

Bu üç sembolik <stdio.h> öncü dosyasında tanımlanmıştır.

VERİ YAPILARI :

Dinamik Hafıza Tahsisi :

Dinamik veri yapıları yaratmak ve yönetmek için dinamik hafıza tahsisi yapmak gerekir.

Malloc ve free fonksiyonları ile sizeof operatörü , dinamik hafıza tahsisi için gereklidir.

Malloc fonksiyonu ; tahsis edilecek byte sayısını argüman olarak alır ve tahsis edilen alanı gösteren void* tipte bir gösterici döndürür.

Malloc fonksiyonu normalde sizeof operatörü ile kullanılır.

Örnek  :   yeniPtr = malloc (sizeof (struct dugum)) ifadesi ‘struct dugum’ tipindeki yapının boyutunu byte olarak hesaplar.

Free fonksiyonu tahsis edilen alanı serbest bırakır.(Hafıza sisteme geri döndürülür , böylece ileride yeniden tahsis edilebilir.)Malloc çağrısı dinamik olarak tahsis edilen hafıza alanını serbest bırakmak içindir.

Bağlı Listeler :

Bir bağlı liste , düğüm adı verilen ve gösterici bağları sayesinde birleştirilmiş kendine dönüşlü yapıların doğrusal bir birlikteliğidir.

Yığınlar :

Bir yığın , bağlı listelerin kısıtlanmış bir çeşididir.Yeni düğümler yığına yalnızca en üstten eklenir ve düğümler yığının yalnızca en üstünden çıkartılabilir.Bu sebeple yığınlar son giren ilk çıkar (LIFO last in – first out) veri yapıları olarak adlandırılır.Burada kullanılan temel fonksiyonlar ;

Push ve pop fonksiyonlarıdır.

Push fonksiyonu ; yeni bir düğüm yaratır ve yığının üstüne yerleştirir.

Pop fonksiyonu ; yığının üstündeki düğümü çıkartır , çıkartılan bu düğüm için tahsis edilmiş olan hafızayı serbest bırakır ve çıkartılmış değeri döndürür.

Yığınlar bir fonksiyonun her çağrısında yaratılan otomatik değişkenler için bir alan içerir.

Sıralar :

Sıralar , oldukça yaygın bir veri yapısıdır.Bu veri yapısında ilk giren ilk çıkar (FIFO First in First out) veri yapısı mantığı kullanılır.

Ekleme çıkarma işlemleri sirayaGir ve siradanCik olarak bilinir.

Ağaçlar :

Bağlı listeler , yığınlar ve sıralar doğrusal veri yapılarıdır.Bir ağaç , doğrusal olmayan iki boyutlu ve özel amaçlı bir veri yapısıdır.

Ağaç düğümleri iki ya da daha fazla bağ içerebilir.

Kök düğüm (root node) ağaçtaki ilk düğümdür

Kökteki her bağ bir çocuğu (child) belirtir

İlk sol çocuk , sol ağaççıktaki (subtree) ilk düğümdür ve sağ çocuk sağ ağaççıktaki ilk düğümdür.

Bu düğümün çocuklarına kardeşler (siblings) denir.

Çocukları olmayan düğüme, yaprak düğüm (leaf node) denir.

C ÖNİŞLEMCİSİ :

Bütün önişlemci komutları ‘ # ‘ ile başlar.

#INCLUDE Önişlemci Komutu :

Bu komut belirlenen dosyanın kopyasının , komutun bulunduğu yere eklenmesini sağlar.

İki şekilde kullanılır ;   #include <dosyaismi>     ve #include “dosyaismi”

İkisi arasındaki fark , önişlemcinin dahil edilecek dosyayı aradığı konumdur.Eğer dosya ismi tırnak içinde ise , önişlemci dosyayı aranan dosya eklendikten sonra derlenecek dosyanın bulunduğu dizin içinde arar.

Eğer ‘ <  > ‘ içinde ise , bu yöntem standart kütüphane öncü dosyalarını eklemek için kullanılır.

#include komutu stdio.h ve stdlib.h gibi öncü dosyaları eklemek için kullanılır.

#DEFINE Önişlemci Komutu :

#define komutu ,sembolik sabitler ve makrolar yaratır.Örnek :

#define tanıtıcı yer değiştirme_metni

Örnek : #define PI 3.14159 ; Bu komutla PI sembolik sabiti ile karşılaşılan heryerde PI , 3.14159 nümerik sabiti ile değiştirilir.

Define Önişlemci Komutu : Makrolar

Bir makro , #define önişlemci komutu içinde tanımlanmış bir işlemdir.

Örnek olarak bir çemberin alanı içinde tek argümanlı bir makro ele alalım :

#define CEMBER_ALANI  (x)   ( (PI) * (x) * (x) )

Sembolik sabit ve makroların geçerliliğini sonlandırmak için #undef önişlemci komutu kullanılır.

#undef komutu bir sembolik sabiti ya da makro ismini tanımsız hale getirir.

Not :    #define  getchar ()  getc ( stdin )

Getchar’ın makro tanımı , getc fonksiyonunu standart girişten bir karakter almak için kullanmaktadır.

Stdio.h içerisindeki putchar fonksiyonu ve ctype.h içindeki karakter işleme fonksiyonları sıklıkla makro olarakta uygulanır.

Koşullu Derleme  :

Koşullu derleme , programcının önişlemci komutlarının çalışmasını ve program kodunun derlenmesini kontrol edebilmesini sağlar.

Koşullu önişlemci oluşturmak , if seçim yapısına oldukça benzer.

Örnek :     #if !defined  (NULL)   #define NULL0    #endif

Bu komutlar NULL’un tanımlı olup olmadığına karar vermektedir.

#ifdef kısaltması = # if defined

#ifndef kısaltması = #if ! defined

Programcı programda kodun derlenmemesi için ;

#if

Derlenmesi engellenen kod

#endif    kullanabilirler.

Not : Çok kısımlı bir koşullu önişlemci oluşumu , #elif ve #else komutları kullanılarak denenebilir.

#ERROR ve #PRAGMA  Önişlemci Komutları :

#error komutu olan #error atomlar ; komutta belirlenen atomları içeren mesajları , uygulama-bağımlı olarak yazdırır.Atomlar  , boşluklarla birbirinden ayrılmış karakter serileridir.

#pragma komutu olan #pragma atomlar ; uygulama-bağımlı bir işlem gerçekleştirir.Uygulama tarafından tanınamayan bir pragma ihmal edilir.

# ve ## Operatörleri :

# ve ## önişlemci operatörleri , standart C içinde mevcuttur.

# operatörü , bir yerdeğiştirme metni atomunun , tırnak içine alınmış bir string haline dönüştürülmesini sağlar.

# operatörü , makro içinde argümanlarla kullanılmak zorundadır çünkü # operatörünün operandı makro içindeki bir argümanı belirtir.

## operatörü ise , iki atomu birleştirir.

#define ATOMEKLE(x,y)  x##y

Satır Numaraları :

#line önişlemci komutu , kendinden sonra gelen tüm kaynak kod satırlarının ,belirlenen tamsayı sabitinin değerinden başlanarak numaralandırılmasını sağlar.

#line 100 ; komutundan sonraki kaynak satırı , 100’den başlayarak numaralandırılır.

#line komutu içinde bir dosya ismi yer alabilir . Örnek : #line 100 ‘’file1.c’’

ÖNCEDEN TANIMLANMIŞ SEMBOLİK SABİTLER :

__LINE __     : Kullanılan kaynak kodun satır numarası

__FILE__       : Kaynak kodun varsayılan ismi

__DATE__     : Kaynak kodun derlendiği tarihtir

__TIME__      : Kaynak dosyanın derlendiği zamandır

BİLDİRİLER (Assertions) :

Assert makrosu , (assert.h öncü dosyası içinde tanımlanmıştır) bir deyimin değerini test eder.

Eğer deyimin değeri 0 ise assert bir hata mesajı yazdırır ve abort fonksiyonunu programı sonlandırması için çağırır.

NDEBUG sembolik sabiti ise , ondan sonraki bildirileri ihmal eder.

#define NDEBUG kullanılarak , tüm bildirileri elle silmek yerine otomatik olarak geçersiz kılmak mümkün olur.

UNIX ve DOS Sistemlerinde GİRİŞ/ÇIKIŞI Yeniden Yönlendirmek :

$ , Unix komut satır başlangıcını belirtir.

$ toplam<giriş

Girişi değiştirmenin ikinci yolu ise piping’dir.Bir pipe (|) , bir programın çıktısının diğer programın çıktısının diğer programın girişi olarak kullanılmasını sağlar.

Rasgele programının toplam programında giriş olarak kullanılması için ;

$ rasgele | toplam    şeklinde bir komut kullanılır

Uzunluğu Değişebilen Argüman Listeleri :

Stdarg.h’ın makroları ve tanımlamaları ;

Va_list        : va_start , va_arg ve va_end makrolarının ihtiyaç duyduğu bilgiyi tutmak için uygun bir tiptir.Değişken uzunlukta argüman listesindeki argümanlara erişmek için va_list tipinde bir nesne bildirilmelidir.

Va_start    : Değişken uzunlukta bir argüman listesindeki argümanlara erişmeden önce çağrılan bir makrodur.

Va_arg       : Değişken uzunlukta argüman listesi içindeki bir sonraki argümanın tipi ve değerinde bir deyime genişleyen bir makrodur.

Va_end      : Değişken uzunluktaki argüman listesi va_start ile belirlenmiş bir fonksiyondan , normal geri dönüş yapılmasını sağlayan bir makrodur.

Exit ve Atexit İle Program Sonlandırma :

Atexit fonksiyonu , argüman olarak fonksiyonu gösteren fonksiyon ismini bir gösterici alır.

Exit fonksiyonu bir argüman alır.

Dosyalar Üzerinde Notlar :

Standart kütüphane “wb+” modunda geçici bir dosya açan tmpfile fonksiyonunu sunar.

Rb   : ikili dosyayı okumak için aç

Wb  :  Yazmak için ikili bir dosya yarat.Önceki dosyanın içeriğini siler

Ab   :  Ekle , ikili bir dosyayı okumak için ya da dosyanın sonuna yazma yapmak için aç

Rb+  :  ikili bir dosyayı güncellemek için aç

Wb+  : Güncellemek için ikili bir dosya yarat

Ab+  : Ekle , İkili bir dosyayı güncellemek için aç ya da yarat.

Sinyal İşleme :

SIGABRT :  Programın normal olmayan şekilde sonlanması

SIGFPE  : Hatalı bir aritmetik işlem , örneğin sıfıra bölme ya da taşma ile sonuçlanacak bir işlem

SIGILL : İllegal emrin tespiti

SIGINT  : Etkileşimli sinyalin alınması

SIGSEGV  : Depolamaya geçersiz erişim

SIGTERM : Programı sonlandırma isteği

Dinamik Hafıza Tahsisi : Calloc ve Realloc Fonksiyonları :

Prototip : void *calloc (size_t nmemb , size_t size);

Bu prototip iki argüman alır , eleman sayısı (nmemb) ve her elemanın boyutu (size)

Malloc ile Calloc arasındaki temel fark ; calloc fonksiyonunun tahsis ettiği hafızayı temizlemesi ancak malloc’un temizlememesidir.

Realloc fonksiyonu kendinden önce malloc , calloc ya da realloc çağrılarak tahsis edilmiş nesnenin boyutunu değiştirir.

Not : C , tamsayı ve ondalıklı sayı sabitlerinin tiplerinin belirlenmesi için sonekler kullanılmasına izin vermektedir.

Tamsayı sonekleri unsigned bir tamsayı için u ya da U , long tamsayılar için I yada L ve unsigned long tamsayı için ul , lu , UL ya da LU olarak belirlenmiştir.Eğer bir tamsayı sabitine sonek eklenmişse , tipi o büyüklükteki bir değeri tutabilecek ilk tip olarak belirlenir.

C PROGRAMLAMA DİLİ EĞİTİM ve ÖRNEKLER -2 SONUÇ :

Bugünki yazımızda C programlama dili eğitim ve örnekler yazı dizinin 4. yazısını sizlerle paylaştık.Umuyorum faydalı birtakım bilgiler edinmişsinizdir.

İyi Çalışmalar.