21 Mayıs 2011 Cumartesi

Structure(Yapılar)

Bu yapı paralel dizi oluşturmamıza gerek kalmadan birden fazla değişken türüyle yeni bir değişken türü oluşturmamıza yarayan yapıdır.
Kullanılışı aşağıdaki gibidir. integer ve char değişken türlerinden yeni bir değişken türü oluşturdum.
struct kitap_turu{
 int fiyat;
 char isim[100];
 char yazar[100];
};
Yukarıda yeni bir struct kitap_turu adında değişken türü oluşturduk. Şimdi bu türden bir kitap adında bir değişken oluşturalım.
struct kitap_turu kitap;
//hatta dizi değişken bile oluşturabiliriz.
struct kitap_turu kitap_dizisi[10];
Şimdi bir değişken daha oluşturalım ve değer atayalım.
#include "stdio.h"

struct kitap_turu{
 int fiyat;
 char isim[100];
 char yazar[100];
};

struct kitap_turu kitap2={10,"Define Adasi","Robert Louis Stevenson"};
int main(){
printf("Kitap ismi: %s\n",kitap2.isim);
printf("Kitap fiyat: %d TL\n",kitap2.fiyat);
printf("Kitap yazar: %s\n",kitap2.yazar);
return 0;
}
Structurelara değer atarken içerisindeki değişkenlerin sıralamasına uymalısınız.

26 Nisan 2011 Salı

Hafıza ile Çalışmak (malloc)

Bu dersimizde hafızadan nasıl yer ayrılır(allocate) ve ayrılan yer nasıl tekrar boşaltılır onu göreceğiz. Biz bunun için malloc (memory allocate) fonksiyonunu kullanıyoruz.
int *pointer=null;
pointer=malloc( sizeof(int) );
yukarıdaki kodda en başta bir pointer tanımlıyoruz. Daha sonra malloc ile hafızadan yer ayırıyoruz. Ve hafızanın baş adresini pointera atıyoruz. malloc fonksşyonunu kullanırken içine ayırmak istediğimiz hafıza miktarını yazıyoruz.
2 integer değişkeni tutacağımız kadar hafıza ayıralım ve hafızaların içini dolduralım.
#include "stdio.h"
#include "stdlib.h"
int main()
{
 int *pointer=(int *)malloc((2*sizeof(int)));
 *pointer=10;
 printf("Adres: %d , Deger: %d\n",pointer,*pointer);
 pointer++;
 *pointer=9;
 printf("Adres: %d , Deger: %d\n",pointer,*pointer);
 return 0;
}
Bu fonksiyonu kullanabilmek için stdlib.h kütüphanesini include etmeniz lazım. Daha karışık bir örnek dinamik dizi oluşturmak yazısında var.

15 Nisan 2011 Cuma

Structure (Yapılar) & Pointerlar

Şimdi bir structure oluşturalım ve bu structureın üyelerini 5 elemanlı bir dizi olsun daha sonra bu dizinin elemanlarını pointer kullanarak kullanıcıdan alalım.
#include "stdio.h"

struct yapi_turu{
 int yas;
};

struct yapi_turu insanlar[5];

int main()
{
 struct yapi_turu* pointer;
 pointer=insanlar;
 int i=0;
 for(i=0;i<5;i++)
 {
  printf("gir:");
  scanf("%d",pointer->yas);
  printf("%d degerini girdin!\n",(*pointer).yas);
  pointer++;
 }
 return 0;
}
Yukarıda pointerı tanımlarken türüne dikkat edin. elemanları kullanıcıdan alma işlemini bir fonksiyonla yapabilirsiniz.

7 Nisan 2011 Perşembe

FONKSİYONLAR VE PROGRAM YAPISI

Bir program bir görevi yerine getirmek için yazılır. Eğer yapılacak iş pek kolay değilse, program oldukça uzun olabilir. Bazı programlar onbinlerce satır uzunluğunda olabilir. Böyle durumlarda, esas görevi daha küçük ve kolay idare edilebilir altgörevlere ayırmadan yerine getirmek hemen hemen olanaksızdır.
C, böyle altgörevleri ifade etmek ve birbirinden ayırmak için bir yöntem öngörmektedir. Bu yöntem sayesinde “bilgi saklama” ilkeleri kullanılabilir. C sadece bir tek altprogram çeşidi sağlamaktadır, bu da fonksiyondur. Matematiksel olarak; bir fonksiyon, argümanlarını döndürdüğü değere ilişkilendiren bir “kara kutu” gibidir. Aynı şey C için de geçerlidir, ancak bir fonksiyon birden fazla değer döndürecek, küresel veri yapılarında yan etkiler yapacak veya girdi/çıktı sağlayacak bir şekilde de tasarımlanabilir. Örneğin, printf fonksiyonu, argümanlarının değerlerinin çıktısını yapmak için kullanılır. Geri döndürdüğü değer, yazılan karakterlerin sayısıdır, ancak bu fazla ilgi çekici değildir.
Çok “basit” bir fonksiyon tanımı aşağıda verilmiştir:
void f (void)
{ }
Bu fonksiyon hiçbir şey yapmamasına rağmen, program geliştirmesi esnasında yer tutucu olarak kullanılabilir. Bu bölümde fonksiyon tanımı ve kullanımı hakkında daha fazla şeyler öğreneceğiz.
Kitabın başından beri görmekte olduğumuz main tanıtıcı sözcüğü, programın yerine getirmesi gereken görevi ifade eden fonksiyonun ismidir. Her makul C programı içinde main adı verilen bir fonksiyonun bulunması gerekir, çünkü program yürütülmeye başlandığında, program içinde bağlanmış bulunan bir başlangıç yordamı çalışmaya başlar, bu da kontrolü sonuçta main fonksiyonuna geçirir. Eğer bağlama esnasında, bağlayıcı (linker) main adı verilen bir fonksiyon bulamazsa, sizin için yürütülebilir bir kod oluşturamayacaktır. main’in bir anahtar sözcük olmadığına dikkat edin, yani isterseniz, main adında bir değişken de tanımlayabilirsiniz.
Fonksiyonların gücü, bizim tekrarlanan kod yazmamızdan kaçınmamızı sağlamalarında yatar. Herhangi bir kodu, bir fonksiyon şeklinde, bir defa belirtiriz, ona bir isim veririz ve daha sonra, bu kodu çalıştırma gereksinimi duyduğumuzda, bu fonksiyonu “çağırırız”. Bu iyi, fakat yeterli değildir. Birçok durumda bu kod o anki gereksinmelerimize “uyarlanmalıdır”. Örneğin, bir diziyi sıraya sokan bir kodumuz varsa, bu kodu her çağırdığımızda, değişik sayıda elemandan oluşan değişik bir dizi belirtecek şekilde bunu hazırlamamız daha iyi olur. Bu ise, fonksiyon argümanları kullanılarak yapılabilir.
Her fonksiyon diğerlerinden bağımsız olduğuna, yani bir fonksiyon içinde tanımlanmış değişkenler başka bir fonksiyonda kullanılamadığına göre, fonksiyonların birbirleriyle haberleşmelerini sağlayacak yöntemler geliştirilmiştir. Bir yöntem fonksiyonlara argüman geçirmektir. Başka bir yöntem küresel değişkenler kullanmaktır.
Şimdiye kadar olan örneklerde gördüğümüz bütün değişkenler fonksiyonlar (main fonksiyonu) içinde tanımlanmışlardı. Bu bölümde göreceğimiz gibi; değişken bildirimleri veya tanımlamalarını fonksiyonlar dışında yapmamız da olasıdır. Böyle değişkenlere küresel adını veririz, çünkü fonksiyon içinde tanımlanan yerel değişkenlerin aksine, bunlar, tanımlamadan sonra gelen program metni içindeki bütün fonksiyonlar tarafından kullanılabilirler.

7 Mart 2011 Pazartesi

Switch-case yapısı ve kullanımı

Switch-case  yapısı olasılık ifade eder. “Mesala bir ‘a’ değişkenimiz olsun. Bunun değeri 5 ise şunu yap, 10 ise şunu yap, hiçbiri değilse şunu yap” şeklinde kullanırız. Kullanımı:
1switch(degisken_adi){
2 
3case 3: kodlar;break;
4 
5case 5: kodlar;break;
6 
7default: kodlar;break;
8 
9}
Görüldüğü üzere her olasılığın sonunda break; kullandık. Bunun nedeni ise onu kullanmazsak gerçekleşen olasıktan sonraki her olasılığın kodları da çalışır :(
Şimdi bu şekilde bir hesap makinesi yapalım. Hatırlarsanız if-else yapısıyla bir tane yapmıştık. Bu da obna benzeyecek :) Kodların açıklamasını kodların içinde yaptım. Hemen burada söyleyeyim :
//Burada açıklama
veya
kodlar; //Burada açıklama
şeklindeki satırlarda “//” ile başlayan yerler yorum satırlarıdır. Programın akışını değiştirmez :-)
01#include <iostream>
02 
03#include <windows.h>
04 
05using namespace std;
06 
07main(){
08 
09int sayi1,sayi2,islem;
10 
11cout << "Birinci sayiyi giriniz:  ";
12 
13cin >> sayi1;
14 
15cout << "Ikinci sayiyi giriniz:  ";
16 
17cin >> sayi2;
18 cout << "Islemi seciniz: " << endl;
19 
20cout << "---Menu---" << endl;
21 
22cout << " 1 : Toplama " << endl;
23 
24cout << " 2 : Cikarma " << endl;
25 
26cout << " 3 : Carpma " << endl;
27 
28cout << " 4 : Bolme " << endl;
29 
30cout << " ----------- " << endl;
31 
32cout << "Islem secin ( 1-2-3-4-) : " <<  endl;
33 
34cin >> islem ; //Buraya kadar her şey aynı.
35 
36switch (islem){ //Switch-case yapısını başlattık.
37 
38case 1:{ //Toplama seçildiyse
39cout << "Toplamlari : " << sayi1+sayi2 << endl;}
40break;
41 
42case 2:{ //Çıkarma seçildiyse
43cout << "Farklari : " << sayi1-sayi2 << endl;}
44break;
45 
46case 3:{
47cout << "Carpimlari : " << sayi1*sayi2 << endl;}
48break;
49 
50case 4:{
51cout << "Bolumleri : " << sayi1/sayi2 << endl;}
52break;
53 
54default:{
55cout <<  "Geçerli bir işlem girmediniz" << endl;}
56break;
57}
58 
59system("pause");
60 
61return 0;
62 
63}
Evet arkadaşlar bu dersimizde bu kadar. Bir sonraki dersimizde görüşmek üzere

3 Mart 2011 Perşembe

C Diline Giriş

İlk Programımız (C Dilinde Bir Programın Yapısı)
#include <stdio.h>
main()
{
int i ;
scanf("%d",&i);
i=i*i;
printf("%d",i);
}

Veri Tipleri

Int TipInteger = Tamsayı
Tamsayıları içerir. Bellekte 2 Byte tutar.
5 , -19 , 25000 gibi
Minimum: -2^31 = -32768
Maksimum :2^31-1=32767

Gerçel Tipler (Float, Double)

Gerçel sayıları içerirler.

float: Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer alır. Hassasiyet 7-8 basamaktır.
double :Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında değer alır. Hassasiyet 15-16 basamaktır.


Char Tip

Char : Karakter: Alfanumerik karakterleri içerir.
'5' , '*' , 'K'

Sabitler (CONST)

Bir program içinde değerinin değişmesini istemediğimiz değişkenler için kullanılır.

const float pi=3.14; gibi


Değişkenler
Değeri programın çalışması boyunca değiştirilecektir. Kullanım biçimi:
Tip Belirleyici [Belirleyici];
int i;
float alan;

Belirleyiciler (Identifier)

Bileşenlere isim verme.(Sabit, değişken, altprogram, etiket, tipler (kullanıcı tanımlı)).

Kısıtlamalar

1.İlk karakteri rakam olamaz
2.Sadece harfler, rakamlar ve _ (underscore) karakterinin birleşiminden oluşabilir.
3.C diline ait saklı (reserved) sözcükler kullanılamaz.
4.En fazla 31 karakter olabilir.
5.Küçük - büyük harf ayırımı vardır.

İsimlerin Seçimi
* Belirleyicinin kullanım amacına uygun anlamlı isim seçin. (Hungarian notation)
* Ne fazla kısa ne de fazla uzun olsun. 3 - 10 karakter uzunluğunda olmasını alışkanlı edinin.

Matematiksel ifadeler
+              toplama
-               çıkarma
*              çarpma
/               bölme
%            tam bölümden kalan (mod)
++          1 artırma
--            1 eksiltme

İşlem Öncelik Sırası
( )
* / %
+ - ++ --
Aynı önceliğe sahip işlemler soldan sağa doğru yapılır


Atama Deyimi (Assignment)

Bir değişkene bir değer(sabit, değişken, ifade) vermek.
DeğişkenAdı = değer;
x = 8 ;
y = x + 15 ;
y = (8 - x) / (2 - x) ;
okul=“Kilis Meslek Yüksekokulu”;

10 Şubat 2011 Perşembe

Dinamik Dizi Oluşturmak

azacağımız program önce kullanıcıdan dizinin kaç elemanlı olacağını sorsun. Daha sonra dizinin elemanlarını kendi atayarak ekrana yazdırsın.
#include "stdio.h"
#include "stdlib.h"

int main()
{
  int boyut=0;
  printf("Dizi boyutunu girin:");
  scanf("%d",&boyut);
  int* dizi;
  dizi=(int *)malloc((boyut*sizeof(int)));
  
  int i=0;
  for(i=0;i<boyut;i++)
  {
   *dizi=i;
   printf("%d",*dizi);
   dizi++;                   
  }
 
  return 0;
}