WwW.WoLF-TeaM.TK

WwW.WoLF-TeaM.TK

Sitemizden Daha İyi Yararlanmak Ve Güvenliğiniz İçin Lütfen Google Chrome Kulannın,ChatBoxta Online Olursanız Sevınırım.
 
AnasayfaSSSAramaKayıt OlGiriş yap
Sitemize Yetkili Alımları Vardır! Lütfen Forum Kurallarını Okuyarak Hareket Ediniz

Paylaş | 
 

 C++ Gecis

Önceki başlık Sonraki başlık Aşağa gitmek 
YazarMesaj
Ronin
Co-Admin
Co-Admin
avatar


<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 1541
<b>Nerden</b> Nerden : Adana
<b>Kayıt Tarihi</b> Kayıt Tarihi : 28/07/10
<b>Rep Puanı</b> Rep Puanı : 125
Başarı Seviyesi : 18. Seviye



MesajKonu: C++ Gecis   Çarş. Ağus. 11, 2010 5:13 pm

Evet C derslerinin ilk dokumanı. Öncelikle C programları yazabilmek için gerekli aletleri temin edelim. Bir adet notpad ve bir C compiler (yada bir linux makine, shell). Pek de bir şey gerekmiyormuş ne güzel. Compiler olarak miracle C, borland yada visual C compilerı öneririm. Compilerın nasıl kullanıldığına sonra değineceğiz.

Çok teorik girişler yapılabilir ama ben pratikten girecem biraz. Direk bir program yazıyorum ve üzerinde temel açıklamaları yapıyorum. Kod yazmaya başlamadan önce belirteyim. C de bir satırda // işaretlerinden sonra yazılanlar kod olarak kale alınmaz. Dokumanlarımızda kodları acıklama amaçlı olarak // işaretleri kullanılacaktır:

#include // 1.satır
main() // 2.satır
{ // 3. satır
printf("Holey ilk programimi compile ettim"); // 4. satır
return 0; // 5. satır
} // 6. satır


Bu programı compile eder çalıştırırsanız, “Holey ilk programımı compile ettim” diye bir yazı verecek ekrana. Simdi bu kodları inceleyelim mantığını öğrenelim. 1. satırda #include yazıyor. Bunu her programımızın başına yazacaz. Bu komut, compiler'a programımızda kullanacağımız library (kutuphane) dosyalarını gösterir. stdio.h bir kütüphane dosyasıdır. İçinde girdi ve çıktıları yöneten fonksiyonların komut bilgisini tutar."stdio" nun acılımı "standart input output" dur standartın üc harfi, input ve outputun ilk harfleri: stdio.h

sonundaki .h da dosyanın uzantısıdır.C de kütüphane dosyaları hep .h uzantılı olur.Her compiler'la beraber lib klasoru altında hazır vardır bu kütüphane dosyaları. input girdi output da cıktı anlamına gelir. Program ekranımıza bir yazı veriyorsa bu bir outputtur. Program çalışınca durup bir girdi bekliyorsa bu bir inputtur. 4.satırda yazdığımız printf bir output komutudur. Ekrana bilgi verir.

Eğer biz programın başına #include yazmazsak compiler bu output komutunu tanımaz. Çünkü printf in kullanımı stdio.h dosyasının içinde yazılıdır. ilk satırın mantığı anlaşılmıştır artık sanırım.

Gelelim 2.satıra burada yazan main() bir fonksiyondur. Programımızın ana fonksiyonu. Tüm programın yapacağı iş bu fonksiyonun içinde anlatılır compiler'a. C de fonksiyonlar ismi, yanında açılan parantezler, ve içindekileri belirten { } kısımlarından oluşur.

main()
{

}


seklinde. Burdaki { } lar fonksiyonun içeriğini ve sınırlarını belirler. main fonksiyonun ismidir.main ismi compiler tarafından ana kısım olarak tanınır. Her programda bulunması şarttır. () parantezler ise fonksiyonun bi girdi alıp almadığını gösterir. Şimdilik biz main fonksiyonunu bir girdi almadan kullanıyoruz bu yüzden parantezlerin içi boş. Fonksiyonları sonraki dokümanlarda geniş bir şekilde anlatacam.

4.satırda printf komutunun kullanımı görülmektedir.input ve output komutları sonra detaylı bir şekilde anlatılacak.

5.satırda return fonksiyonun çıktısının ne olacağını belirler. Biz ana fonksiyonumuzun bir çıktı vermesini şu an istemiyoruz.

Zaten printf komutu ile çıktımızı aldık. return 0; diyerek compiler'a main fonksiyonumun baska çıktısı yoktur diyoruz. Bu satırı yazmak da şart değildir. Ama bazı compiler'lar sorun çıkarabilir diye ekledik bu komutu da.

Dikkat edilmesi gereken bir şey de C de her komuttan sonra noktalı virgül (;) kullanılmasıdır.Bu, cümlelerden sonra nokta koymak gibidir.

Gelelim compile etme işine. Programımızı bir notpad de yazdıktan sonra bunu mesela "ilkprogramim.c" seklinde uzantısı .c olacak şekilde kaydediyoruz. Sonra shell kullanıyorsak "gcc ilkprogramım.c" komutu ile compile ediyoruz. Bulunduğumuz klasörde a.out diye bir çalıştırılabilir dosya oluşacaktır. ./a.out yazarsanız program çalışır. exploit derleyenler bilirler Eğer windows'da bir compiler kullanıyorsak. Compiler'ın bulunduğu klasöre ilkprogramim.c yi atacaz ve compiler'ımızın kullanımına göre mesela benim kullandığım borland için "bcc32 ilkprogramım.c" yazacaz komut isteminde.(ama komut isteminde compilerın bulundugu klasore gelmemiz lazım once). Sonra ilkprogramım.obj diye bir dosya oluşturacak compiler. Son adım olarak "make ilkprogramım.obj" yazarsak ilkprogramım.exe diye bir çalıştırılabilir dosya oluşacak. Artık ilkprogramım.
exe yazarak programı calıstırabiliriz.

Temel C Dokümanları 2 (Değişkenler ve Operatörler)


İlk dokümanda bir C programın ana yapısının nasıl olduğunu ve mantığını öğrendik.

Bu dokümanda C de en önemli olan ve ilk öğrenilmesi gereken değişkenler ve operatörler üzerine yazacam.

Önce değişken nedir niye bize lazımdır onu bir anlatayım...

Lise matematiğinden fonksiyonları bilirsiniz. Henüz liseye geçmemiş olan kardeşlerimiz de bu yazıyı okuyor olabilir tabi

F(x)=x+3 diye bir fonksiyonu düşünelim. Bu fonksiyon bize şunu ifade eder: Ben fonksiyona bir sayı verdiğim zaman fonksiyon o sayıya 3 ekleyip bana geri verir. Yani fonksiyonun yaptığı iş aldığı sayıyı 3 ile toplamaktır. Böyle bir sistemi ifade edebilmek için, fonksiyonun adını ve fonksiyonun yaptığı isi göstermesi icin bir değişken kullanmak zorundayız.

Bu örnekte değişken "x" dir. Biz bu "x" yerine ".. uot; yazsaydık ( F(a)=a+3 seklinde ) bir şey değişmezdi. Amaç fonksiyonun yaptığı işi anlatmak. Yani adı farketmez ama bir değişken kullanmalıyız ki yapılan işi tarif edebilelim.

Programlamada da mantık aynıdır. Programın yaptığı işi compiler'a anlatabilmemiz için değişkenler kullanmak zorundayız.

C'de de aynı “x” veya “a” gibi değişkenler kullnıcaz. Ama C değişkenin ne tür bir değişken olduğunu bilmek ister. Ne türden kastım değişkenin ne tür bir şeyi ifade edeceğidir. Mesela bir tamsayı mı yada bir harf mi yada virgüllü bir sayımı ? F(x)=x+3 gibi bir fonksiyona 'A' diye bir harf verirseniz A+3 diye bir şey saçma olur. Böyle karışıklıklar olmaması için C de değişken türleri vardır.

En temel değişken türleri:

int : integer yani tam sayı demek

double : virgüllü sayı

float : bu da bi çeşit virgüllü sayı ama kullanımı biraz farklı.

char : character yani harf demek.

Şimdi gelelim bu değişken türlerinin kullanımına. C de bir değişken kullanmadan önce tanıtılır. Tanıtma işlemini de bu değişken türleri ile yaparız. Mesela “x” diye bir değişken kullanacaksak ve bu değişkeni tam sayılar için kullanıyorsak:

int x;

seklinde bir satır yazmamız lazım kodumuza. Bu şekilde ben “x” diye bir değişken kullanıcam ve türü tam sayıdır demiş oluyoruz compiler'a.

Değişken belirlemeyi öğrendiğimize göre simdi değişkenlerin kullanımına geçebiliriz. Değişkenler operatorlerle kullanılır.

Nedir bu operatorler ?

Çeşit, çeşit operator var ama ben bu dokumanda matematiksel operatorlerden bahsedecem:

= bir değişkene değer atamaya yarar yada bir değişkeni başka bir değişkene eşitler.

+ : toplama

- : çıkarma

/ : bölme

* : çarpma

% :bölme işleminden kalanı verir.

Başka operatorler de var ama onlara sonra değinecez. Yavas yavas

Değişkenleri ve operatorleri oğrendik. Simdi de örnek bir program yapıp kullanımlarını örğenelim:

#include [Linkleri görebilmek için üye olun veya giriş yapın.]
[Linkleri görebilmek için üye olun veya giriş yapın.]
main() //3. satır
{ [Linkleri görebilmek için üye olun veya giriş yapın.]
int x; // 5.satır
int y; // 6.satır
scanf("%d",&x); // 7.satır
y=x+3; // 8.satır
printf("%d",y); [Linkleri görebilmek için üye olun veya giriş yapın.]
return 0;
}


Bu program F(x)=x+3 fonksiyonunu temsil eden bir program oldu. Program çalışınca sizden bir input isteyecek.Girdiğiniz inputa 3 ekleyip ekrana verecek.

Şimdi satır, satır bu programı inceleyelim:

İlk satırların mantığını geçen dokumanda anlatmıştık zaten. 5.satırdan başlıyorum. 5.satırda x diye bir değişken belirleniyor int komutu ile. Ve x in int türünde yani tamsayı taşıyacak olan bir değişken olduğu anlatılıyor. 6.satırda aynı şekilde y diye bir tam sayı değişkeni belirleniyor.Fakat daha bu değişkenlere bir değer atanmadı. 7.satırda şimdiye kadar hiç anlatılmamış bir fonksiyon var: scanf . printf in ekrana output vermek için kullanıldığını anlatmıştık. scanf de input almak için kullanılıyor. scanf ve printf gecen örneğimizde olduğundan farklı bir şekilde kullanılmış bu sefer. parantez icinde %d ve & gibi daha öğrenmediğimiz karakterler var. Şimdilik bunların mantığını konuşmiycaz. Bunların mantığı bir sonraki derste anlatılacak. Şimdilik scanf ve printf in bu kullanımlarını ezberlemenizi istiyorum. sacanf de ,&x yazan kısım x değişkenine kullanıcının girdiği inputu atamasını söylüyor. Program çalışırken 7.satır execute edildikten(isleme sokulduktan) sonra artık x değişkeni ekrana yazdığımız sayıya eşit olacak.Yani x e bir değer atanmış olacak. 8.satırda y değişkenine x+3 un değeri atanıyor. Burda = ve + operatörlerini kullanmış oluyoruz. Mesela biz program çalıştığında ekrana 5 yazdıysak x, 5 oluyor y de 5+3 yani 8 olmuş oluyor. 9.satırda da printf in icinde yazan ,y kısmı ekrana y değişkeninin taşıdığı değeri vermesini sağlıyor. Yani bizim ilk yazdığımızın 3 fazlası.Burada printf in içinde değişkenden önce & işaretini yazmadığımıza dikkat edin. & işareti scanf i kullanırken değiskenin önüne gelir. Bunu şimdilik bir kural olarak oğrenin ve scanf ile printf in icine yazdığımız formatı ezberleyin. Bir sonraki derste scanf ve printf in kullanım şekillerini anlatacam.

Bu derste oğreneceklerimiz bu kadar. Gelelim ödeve…

Öncelikle bu yazdıgımız programı compile edip calıstırın.programı tekrar, tekrar calıstırıp her seferinde ekrana değişik bir sayı yazıp enter a basın. Bakalım her seferinde 3 fazlasını veriyormu... Bir de tam sayı yerine virgüllü sayı veya harf yazıp enter a basın bakalım ne oluyor ?

Temel C Dokümanları 3 (Girdi çıktı fonksiyonları,kontrol operatörleri ve döngüler)


Bu derste printf ve scanf in kullanımları, kontrol operatorleri, if ve switch kontrol statement larını ve while dongusunu ilsiycez...

Once gecen dersin odevinin yorumlarını yapalım. Girdi olarak virgüllü sayı veya harf yazın demistik. Yapanlar gördü ki yanlıs sonuclar veriyor program. Bunun sebebi girdimizi, programa int yani tam sayı olarak tanıtmamız. Girdi virgüllü olunca tam sayı kısmı alınıp öyle işlem yapılıyor dogal olarak. Yada harf girince harfi 61 diye bir tam sayı olarak kabul ediyor. Bu compiler' a ve girdiğiniz harfe gore degisebilir. 61 e takılmayın. Önemli olan burada beklenmedik sonuçlar aldığımızı gozlemlemek ve değişken turlerinin onemini anlamak...

printf ve scanfin kullanımları:

printf("hello"): bu ornegi inceleyelim:

prinft her fonksiyon gibi yanında parantezler açılarak kullanılır.parantezlerin içinde iki kısım vardır. Birincisi "" isaretlerinin icinde kalan kısım ikincisi "" isaretlerinin icinde olmayan kısım. ikinci kısım değişkenlerin değerlerini ekrana verirken kullanılır. Bu orneğimizde değişken olmadıgı icin ikinci kısım yok.Birinci kısım yani "" lerin icinde kalan kısım ekrana yazılacak yazıları belirler.Bu örnekte ekrana “hello” yazılır.Birinci kısımda kullanılan bazı özel karakterler vardır. Bunlar olduğu gibi ekrana yazılmaz.Yazılacak yazının formatını belirler.Mesela \n karakteri alt satıra geç demektir.

printf("hello\nhello") yazarsak ekrandaki görünümü şöyle olur:

hello

hello

özel karakterlerden biri de % işaretidir. Bu işaret, bir değişkenin değeri ekrana yazdırılacaksa değişkenin turunu ve ekranda yazılacağı yer ve formatı belirlemek için kullanılır . % den sonra gelen kısım degiskenin hangi türde kabul edileceğini söyler. Mesela %d tam sayı demektir. "" işaretlerinin içinde %d olan yere tırnak işaretlerinin dışında kalan değiskenin değeri ekrana yazdırılır. Örnek:

x=3;

printf("degiskenin degeri %d dür",x);

burda ekrana gelecek olan yazı şöyledir:

degiskenin degeri 3 dür

gordugunuz gibi %d yerine x in değeri geliyor. Biz bir önceki dersimizde "" lerin icine başka bir yazı yazmadık. Sadece %d yazdık. Bu yüzden sadece ekrana değişkenin değeri geldi.

printf sadece bir değişkenle kullanılmak zorunda değildir.

x=3;

y=4;

printf("%d %d",x,y);

bu ornekte ekrana

3 4

şeklinde bir output gelir.Gordugunuz gibi her degisken icin bir tane %d yazdık.

printf("x'in degeri %d y'nin degeri %d",x,y); seklinde yassaydık output soyle olacaktı:

x'in degeri 3 y'nin degeri 4



scanf in kullanımı da çok benzerdir. Tek fark "" işaretlerinin içine herhangi bir yazı yazmaya gerek duymamız. Ve değişkenlerden önce

& işareti konulması.

scanf("%d %d",&x,&y);

bu örnekte ekrana 3 5 yazdığımızda “x“e 3 “y” ye 5 atanır. %d lerin arasında boşluk bıraktığımıza dikkat edin. Boşkul bırakmasaydık inputumuzu da 35 seklinde girmemiz gerekirdi...

Şimdi kontrol operatorlerini gorelim:

> : büyük mudur ?

< : küçük mudur ?

== : eşit midir ?

!= : eşit değilmidir ?

>= : büyük veya eşit midir ?

<= : küçük veya eşit midir ?

&& : ve

|| : veya

bu sorguların cevapları doğru ise yanıt 1, yanlış ise yanıt 0 olur. Peki bu sorguları nerde kullanırız ? Bunlar kontrol işlemleriyle kullanılır. Bu islemlerin baslıcaları if ve switch dir:

if in kullanımı:

if ( x==3)

{

}

seklinde kullanılır. if den sonra acılan parantezlerin icine kontrol edilecek durum yazılır. Eger durum dogru (1) ise { } lerin icindeki islemler yaplılır. Degil (0) ise { } lerin icindeki islemler gecilir. Bu ornek eger x degiskeni 3 e esit ise aşağıdakileri yap seklinde acıklanabilir.

if ( x== 3 && y<10) mesela burda eger “x” 3 e esit ise ve “y” de 10 dan kucuk ise assagıdakileri yap demek oluyor. Bu iki durumdan biri bile yanlıs ise durum yanlıs olarak kabul edilir. && yerine || kullansaydık iki durumdan biri bile dogru olsa durum dogru kabul edilirdi. ve ile veya nın farkı budur.

“=” ile “==“isaretlerini karıstırmayalım. Birincisi deger atamak icin kullanılırken ikincisi degerin esitligini kontrol etmek icin kullanılır.

else :

if "eger" demektir else de "degilse" anlamına gelir. Bir if satement ının sonuna else yazarsanız. Durum yanlıs ise yapılacakları belirleyebilirsiniz.

if(x==3)

{

y=y+1;

z=z-1;

}

else

{

y=y-1;

z=z+1;

}

yukarıda: eger x 3 e esitse y ye bir ekle, z den bir cıkar.x 3'e esit degilse(else) y yi bir azalt z ye bir ekle. Demek oluyor. else i kullanmak zorunda degilsiniz. else i kullanmazsanız durum yanlıs ise yapılacak islemleri belirlememis olursunuz. Durum yanlıs ise if in icindekiler kale alınmaz.

switch:

switch bir durumun bir kaç ihtimalini goz onune alarak. Yapılacakların belirlenmesini sağlar.

kullanımı:

switch(x)

{

case 3:

printf("x 3 e esitmis");

case 4:

printf("x 4 e esitmis");

default:

printf("x 3 e de 4 e de esit degilmis");

}

switch in yanına gelen parantezlerin icine kontrol edilecek degisken yazılır. case lerden sonra da x in neye esit olup olmadıgı kontrol edilir. Bu ornekte: x 3 e esit ise ekarana "x 3 e esitmis" yaz, x 4 e esit ise ekrana "x 4 e esitmis" yaz, “x”, yukardaki durumların hicbirine uymuyorsa(default) "x” 3 e de 4 e de esit degilmis" yaz. switch in kullanımı da budur. Ama sadece tek degiskeni ve esitlik durumunu kontrol edebilir. Bu nedenle ben switch i pek sevmem ve kullanmam. daha cok islerimizi if ile gorecez...

C de encok kullanacagımız seylerden biri de dongulerdir. Donguler bi islemi tekrar, tekrar yaptırmaya yarar.

Bu gunluk while dongusunu anlatacam:

while(x<10)

{

}

while ın kullanım formatı bu sekildedir. parantez icindeki durum dogru oldugu surece durmadan { } lerin icindeki islemler gerceklestirilir. Bi ornekle acıklayalım.

y=15;

x=1;

while(x<3)

{

y=y-x;

x=x+1;

}

bunun yapacagı işi acıklayalım:

ilk basta x=1 y=15 dir. program, x<3 mudur diye kontrol etti baktıki dogru. Sonra while in icine girdi. y=y-x; i isleme soktu.

Yani “y” yi “y” eksi “x” e esitledi. Yani y nin yeni degeri 15 - 1=14 oldu. “x” i “x+1” e yani 2 ye esitledi. x in yeni degeri 2 oldu. Sonra tekrar başa dondu. baktı “x<3”(x küçük 3) mudur. 2<3 dür yani dogru. Tekrar while ın icine girdi. y=y-x; i tekrar calıstırdı.”y” 14 olmuştu. “x” de 2. yeni”y” 14-2 yani 12 oldu. “x” de tekrar 1 arttırıldı ve 3 oldu. Sonra tekrar basa dondu. Baktı x<3 mü hayır 3<3 doğru değil.

while döngüsü tamamlandıgında x in degeri 3 y nin degeri de 12 oldu.

Dongulerin mantıgı da boyle... Dongulerin uzunlugunu sınırlamak icin genelde x=x+1 gibi bir satır bulunur. Bu satıra denk gelen bir satır vardır: x++; bu x in degerini bir artır demektir. x--; de x in degerini 1 azalt demektir. Aklımızda bulunsun.

şimdi örnek bir program:

bu program 0 dan verilen bir sayıya kadar olan tüm sayıların toplamını buluyor. Mesela 5 yazarsak bize 1+2+3+4+5 yani 15 veriyor.

#include
main()
{
int i, x, toplam;
scanf("%d",&x);
toplam=0;
i=1;
while(i<=x)
{
toplam=toplam+i;
i++;
}
printf("%d",toplam);
retırn 0;
}

bu prgramı calıstırıp inceleyin. Gecen dokumandaki ödev kolaydı bu hafta yeni başlayanlar için kazık bir ödev veriyorum. Girdiginiz sayının asal olup olmadıgını bulan bir program yapacaksınız. Girdiginiz sayı asalsa ekrana 1 degilse 0 yazacak.

Biraz ipucu veriyim.Asal sayının ne oldugunu herkes biliodur heralde bi while dongusu yapıp girilen sayıyı 2 den baslayarak girilen sayıya kadar tek tek boldureceksiniz. Ve her seferinde kalanın 0 olup olmadıgını kontrol ettireceksiniz. Butun sayılara bolumunden kalan hic 0 cıkmassa o sayı asaldır demeeki... Yani 1 ve kendisi dışında hic bir sayıya tam bolunmuyo demektir.

Kalanı kontrol etmek icin bir onceki dersimizde verdigimiz % operatorunu kullanacaksınız. Mesela

x=10;

y=3;

z=x%y;

derseniz z = 1 olur...

Temel C Dokümanları 4 (For döngüsü ve Diziler)


Bundan once degiskenleri, degisken tanıtmayı, operatorleri, if, switch, while yapılarını scanf ve printf in kullanımlarını gorduk. Buraya kadar isledigimiz seylerde komutların kullanımlarına dikkat etmenizi istiyorum. Cunku kullanım sekilleri cok onemlidir. Virguller noktalı virguller parantezler { } ler, " " ler nerelerde nasıl kullanılıyor bunları bir daha tekrar edip iyice oğrenin. Çünkü bunlar yanlış kullanılırsa kodları compile edemeyiz. Bir de compile hatalarını anlamaya çalısın. Bunlar iyice anlanırsa program yazmada fazla sorun yaşamazsınız...

Bir de gecen dersin odevinin cevabını verelim başlamadan once

3. odevin cevabı:

#include
main()
{
int x,i;

scanf("%d",&x);

i=2;
while(i{
if(x%i==0)
{
printf("%d asal degil",x);
exit(-1);
}
i++;
}

printf("%d asal",x);

return 0;
}


pek uzun bir program değil aslında dimi Şimdi bu programı biraz anlatayım...

İlk once iki degisken belirliyoruz: i ve x . x girdiyi tutucak. i de while in icinde 2 den baslatılarak surekli x e bolunecek ve her seferinde bir arttırılıcak. Ta ki x den bir kucuk olana kadar. While in icinde bir if var. Bu if “x” i “i” ye boldugunde kalanın 0 a esit olup olmadıgına bakıyor. Eger herhangi bir seferde “x” “i” ye tam bolunmuşse bu sayının asal olmadıgını anlıyor ve ekrana "x asal değildir" yazıp programdan cıkıyor. Programdan cıkmak icin exit(-1) komutunu kullandım. Daha once bu komuttan bahsetmemistik. Bu komut direk programdan cıkar. Altındaki satırları isleme sokmaz... eger while ın icinde hic bi zaman x%i==0 olmamışsa program, while dan cıkar ve alt satırdaki printf("%d asal",x) komutunu isleme sokarak ekrana "x asal" yazar.( x yerine “x” in değerini yazacak)....

Gelelim daha kolay odevler isteyenlere...

ilk basit odev: 2 sayı gireceksiniz. size hangisi büyükse onu verecek...

İkinci basit odevimiz: Program iki sayı alacak. ikinci sayıyı ilkinin kuvveti olarak hesaplıycak. Yani 2 3 girerseniz. 2 üzeri 3 ü bulacak yani 8 verecek ekrana.

Bi kac tavsiye ve hatırlatmadan sonra gelelim bu dersimizde ne işleyecegimize. Bu dersimizde diğer bir dongu olan “for” u ve dizileri(array) işleyecez...

for dongusu:

for dongusu de tıpkı while gibidir. Farkı, kullanım seklidir...

kullanımı:

for(i=0; i<5; i++)

{

}

Bu ornekte goruldugu gibi for parantezlerinin icinde 3 bolum var. Bu bolumler noktalı virgul isareti ile birbirinden ayrılıyor. Bu bolumler for dongusunun kac kere tekrar edilecegini belirlemek icin kullanılıyor. Bunu belirlemek icin de bir degisken kullanıyoruz. Bu örnekte “i” diye bir degisken kullanılmıs. Bunun yerine istediginiz degisken adını kullanabilirsiniz. Birinci bolumde “i” nin ilk degerinin ne oldugu belirleniyor.Bu ornekte 0( i=0 ). Ücüncü bolumde “i” nin dongunun her isleme girdigi seferde “i” ye ne yapılacagı belirleniyor. Bu ornekte “i” her seferinde 1 artırılıyor( i++ ).İkinci bolumde ise for dongusunun devam etmesi icin gereken şart belirleniyor. Bu ornekte “i” 5 den kucuk oldugu surece dongu devam edecek. Yani dongu 5 kere isleme sokulacak.i her seferinde 1 artırılıp en sonunda 5 e eşit olunca program donguden cıkacak.

gecen odevin cevabında kullandıgım while dongusuyle aynı isi yapacak olan bir for dongusu yazayım ornek olarak:

for ( i=2; i{
if(x%i==0)
{
printf("%d asal degil",x);
exit(-1);
}
}


While la arasındaki farka iyi bakın.Bu sefer for un icinde i++; komutunu kullanmadım. Cunku for parantezleri icinde bu islem tanımlanmıs zaten. while dan bir farkı da for dongusunu yazmadan once i=2; komutunu kullanarak i nin ilk degerini atamaya gerek yok. Bu da zaten for un parantezleri icindeki ilk bolumde belirtiliyor...

Gelelim arraylere (diziler)...

Bu diziler de bir takım degiskenlerdir. Degisken dizileridir. Matematikde x1 x2 x3 x4..... xn seklinde diziler vardır. Bilirsiniz biraz. n tane x degiskeni... Yani C de n sayıda aynı isimli segiskenler dizisi belirlemeye yarar. Bu cok kullanıslı ve gerekli biseydir. Mesela 50 tane farklı sayıyı ayrı ayrı degiskenlere atamak istiyoruz. Eger diziler olmasaydı bunun icin kodumuzun icinde 50 tane degisken belirlememiz ve 50 satırda bu degiskenlere degerlerini atamamız gerekirdi. Ama bunun yerine sadece bir degisken dizisi ve bir dongu kullanarak 50 tane sayıyı programa okutabiliriz kolaylıkla...

array(dizi) tanıtmak:

int a[50];

bu satırla a adında 50 tane tam sayı turunde degisken tasıyan bir dizi tanıttık...Matematiksel olarak a1 a2 a3 ... a50 seklinde.

Fakat arrayler de dikkat edilmesi gereken şey dizinin ilk elemanının a[0] olarak gosterilmesidir. 2. eleman a[1], 3. eleman a[2], 50. eleman a[49] seklindedir.

Simdi dizinin ilk elemanına bir deger atayalım...

a[0]=5;

bu satırla dizinin ilk elemanını 5 yaptık. Şu an diger elemanlara bir deger atanmamıs durumda...

mesela...

double B[10];

diye bir satır yazsak virgullu sayı turunde 10 tane degiskeni olan B adında bir dizi belirlemis olurduk...

Simdi array kullanılan basit bir program ornegi vereyim. Bu program 3 tane girdi alacak. Bu girdilerin degerini bir dizide depolayacak ve ekrana dizinin ikinci elemanını verecek:

#include

main()

{

int x[3];

scanf("%d %d %d",&x[0],&x[1],&x[2]);

printf("%d",x[1]);

return 0;

}


bu programda goruldugu gibi scanf ve printf in icinde normal degiskenleri kullandıgımız gibi dizi degiskenlerini kullandık...

Bu program dizi kullanılmadan da 3 degisken belirlenerek kolayca yazılabilirdi. Ama diyelimki bu program 50 tane degisken alsaydı ve 45 inci degiskeni ekrana verseydi dizi kullanmadan 50 degisken i ayrı ayrı tanıtmak ve scanf in icinde 50 tane degisken yazmak cok sıkıcı olurdu Bu durumu onlemek icin dizi kullanacaz ve scanf le dizinin elemanlarına deger atamak icin bir dongu kullanacaz. Şöyle:

#include

main()

{

int i;

int x[50];

for(i=0; i<50; i++)

{

scanf("%d" &x]);

}

printf("%d",x[44]);

return 0;

}


Array kullanarak bukadar kısa bir kodla, 50 tane degişkenin ustesinden geldik. for da ne yapıldıgına bakarsak. i degiskeni basta 0 a esitleniyor ve boylelikle once x[0] ın degeri scanf ile okunup atanıyor. Sonra i bir artırılıp a[1] in degeri atanıyor. Bu boyle 49 a kadar giderek en son elemanın da degeri alındıkdan sonra i 50 oluyor ve i<50 şartını saglamadıgı icin for dongusunden cıkılıyor. Sonra printf komutu ile 45. eleman ekrana veriliyor. printf in icine x[44] yazdık ama bize 45. eleman verilecek. Bunun sebebi ilk elemanın x[0] olması... Bu programı compile edip calıstırırsanız 50 kere sayı yazıp enter a basmak zorunda kalacaksınız uyarmadı demeyin

Arrayleri ve donguleri da ogrendiniz. Buraya kadar C ogrenmekte buyuk bir yol kateddiniz. Artık bir cok matematiksel program yapabilirsiniz... Bence kendi kendinize programlar uydurup yapmaya çalısın...

Temel C Dokümanları 5 (Stringler)


Gecen dersimizde arrayleri gorduk... Artık string lerle ugrasabiliriz. Daha once degisken turlerinden bahsetmistik. Programlarımızda int, double, float gibi sayı tutan degiskenlerden bahsettik ve bunların dizilerde kullanıslarını gorduk. Ama daha once adını verdigimiz char degisken turunden pek bahsetmedik. Hatırlarsak char harfleri tutan bir degiskendi. C de bir kelimeyi yada cumleyi taşıyan bir degisken turu yok. Ve bizi de programlarımızda harflerden cok kelimeler ve cumleler ilgilendirecek. Peki nasıl ustesinden gelecez bu kelime ve cumlelerin ? char turunde yani harf taşıyan diziler kullanarak. Bu tur dizilere C de string deniyor. Yani string kelime ve/veya kelimelerden olusan cumlelere deniyor... Simdi mesela programımızın radres kelimesini aklında tutmasını ve bu kelimeye gerekli değişiklikleri yapmasını istiyoruz.Bunun icin char arrayi kullanacaz... bir int arrayı nasıl yapıyorduk hatırlayalım.

int A[6];

A adında 6 tane tamsayı taşıyabilecek olan bir dizi yaptık...char arrayini de su sekilde yapacaz.

char A[6];

Burda da 6 tane harf tutabilen bir array yapmıs olduk. Simdi ben bu array'ın elemanlarına sırayla radres in harflerini atarsam bu kelimeyi basarıyla programımıza depolatmıs oluruz...

Su sekilde:

A[0]='r';

A[1]='a';

A[2]='d';

A[3]='r';

A[4]='e';

A[5]='s';

A[6]='\0'

Burda dikkat edilecek iki nokta var.

Birincisi = den sona harfleri atarken ' ' isaretlerini kullandık. char turunde bir degiskene deger atarken bu sekilde yapıyoruz. Eger A[0]=r diye yassaydık program “r” nin bir degişken oldugunu sanacaktı. Halbuki r diye bir degişkenimiz yok. Burada r sadece bir harf bunu belirtmek icin 'r' seklinde yazıyoruz.

İkincisi ise A[6]='\0' da kullandıgımız \0 isareti... Burda \ ile ozel bir karakter kullandıgımızı belirtiyoruz. Hatırlarsanız printf in icinde de \n diye bir şey kullanmıstık bu alt satıra geç demek oluyordu. \0 ise A stringimizin( yani A char arrayimizin ) sonuna geldigimizi yani kelimemizin yada cumlemizin bittigini anlatıyor.Her stringin son elemanı \0 dır. Ancak bu isareti gordugu zaman program stringimizin sonuna geldigimizi anlar.

Yukardaki kodlarda bir string yapmanın çok zahmetli oldugunu goruyorsunuz. Tek tek butun elemanları yani harfleri yazdık. Bunu yapmanın daha kolay bir yolu var tabiki... Ben acıklayıcı olması icin boyle yaptım. Normalde bir string oluşturmak için şoyle bir kod kullanılır.

A [] = "radres";

Burdaki tek satırda daha once yaptıgımız uzun işin tam olarak aynısı compiler tarafından yapılır. Burda da dikkat edilecek iki şey var.

Birincisi [ ] lerin içini bos bıraktık. Yani arrayimizin sınırlarını belirlemedik. Aslında dizileri bir şeye eşitlemeden kaç elemanlı oldugunu belirlemezsek compiler hata verir. Ama bu komutta gene compiler bizim yerimize stringimizin kaç harfden olustugunu sayıp arrayimizin sınırları belirliyor.Ve son elemana \0 karakterini gene kendisi atıyor.

İkinci dikkat edilecek şey ise " " isaretleri. String belirlerken tırnak işaterleri kullanıyoruz. Harf ve karakter belirlerken ise ' ' isaretlerini... Bunlar karıştırılmasın....

Simdi elimizde bir stringimiz var ve biz bunu istedigimiz gibi değistirebiliriz. mesela bu stringin 3. harfden sonrasını silelim...

A[3]='\0';

Bu komutla bu işi yaptık bile... A[3] r harfi idi, artık \0 karakteri oldu. Bundan sonra A stringini ver bize dedigimizde program, 3. elemandan sonraki elemanın yani A[3], yani dorduncu elemanın \0 oldugunu gorecek ve gerisini okumayacak. Bize sadece “rad” kısmını verecek. Şimdi de ilk elemanın baş harfini buyuk yapalım..

A[0]='R';

Bu komuttan sonra stringimiz Rad oldu...( unutmayın C buyuk harf kucuk harf ayrımı yapar. Asla R ile r aynı sey degildir.)

Peki biz bu stringleri programa input olarak nasıl okuturuz

? Yada output olarak nasıl verdiririz.

Output:

printf("%s",A);

Bu komut ekrana direk Rad yazar... Burda " " lerin icinde %s kullandık. Cunku A bir stringdir. int turunde bir degisken yazdırırken %d kullanıyorduk. String için de %s kullanacaz...

Eger stringimizin sadece ilk harfini yazdırmak isteseydik şu komutu kullanacaktık..

printf("%c",A[0]);

Bu komutun cıktısı sadece R olacaktır. Bu sefer " " lerin içine %c yazdık, % c char turunde bir cıktı alacagımızı soyluyor. Cunku A[0] bir harftir. Burada kafalar karışmasın. A stringdir. A'nın elemanları ise mesela A[0] bir harftir, char turundedir...

Input:

scanf("%s",A);

printf in tıpkısının aynısı scanf in daha onceki kullanımlarında degiskenden once & isaretini koyuyorduk. String okuturken ise bu isareti kullanmıyoruz. Bunun sebebi çok derin bir konu ileride pointerlar dokümanında anlayacaksınız...

Yukardaki komutun olduğu bir program da ekrana “radres” yazar enter a basarsanız A direk “radres”i alır gerekli şekilde depolar. Ama bu sefer A nın sınırlarını daha onceden belirlememiz gerekecek.

Simdi yukarda yazdıgımız kodları birleştirip basit bir program yapalım:

#include

main()

{

char A[10];

scanf("%s",A);

A[3]='\0';

A[0]='R';

printf("%s",A);

return 0;

}


Bu programı calıştırıp “radre”s yazar ve entera basarsanız. Ekrana Rad yazacak...

Stringlerde input ve output larla ugrasmak icin printf ve scanfden daha kolay kullanımları olan komutlar var onlardan da haberdar edeyim sizi.

puts ve gets komutları:

printf("%s",A) yerine puts(A) yazarsak aynı işi gorür.

scanf("%s",A) yerine de gets(A) yazmak aynı şey değil. Bir fakı var. gets tüm satırı okurken scanf tüm satırı değil ilk kelimeyi okur. Çünkü scanf her boşluktan sonra gelen şeyi başka bir input olarak alır. gets ise her satırı bir input olarak gorür.

gets(A); kullanılan bir programda ekrana “Rad radres yazarsanız A[]="Rad radres" olur. Ama scanf kullanırsanız A[]="Rad" olur. Bu farkı da aklımızdan cıkarmayalım...

Simdi bu ogrendiklerimizi ve onceki bildiklerimizi kullanarak bir program yazacam bunu compile edip calıstırın programın ne yaptıgını ve mantıgını anlamaya calışın...

#include

main()

{

char S[250], buf[250];

int string_uzunlugu,i,j;

gets(S);

i=0;

while(S != '\0')

{

i++;

}

string_uzunlugu=i;

i=i-1;

for(j=0; j
{

buf[j]=S;

i=i-1;

}

buf[string_uzunlugu]='\0';

puts(buf);

return 0;

}

Temel C Dokümanları 6 (Fonksiyonlar)


Bu derste fonksiyonlardan bahsedecem....

Simdiye kadarki yazdıgımız programlarda main() diye bir kısım vardı bilirsiniz... Programın yapacağı islerin hepsini bu main in icine yazıyorduk. Bu main() aslında bir fonksiyon. Programımızın ana fonksiyonu... Biz istersek programı başka fonksiyonlara bolerek de çalıştırabiliriz. Peki bunu niye yapalım ? Baska fonksiyonlar da kullanmak zorundamı kalıyoruz bazen ? Hayır.. sadece main fonksiyonunun icinde her şeyi halledebiliriz ama bazen belli kodları tekrar, tekrar yazmamız gerekebilir. Biz de işimizi kolaylastırmak ve programımızı duzenli bi hale getirmek icin belli isleri yapan kodlardan bir fonksiyon olustururuz ve bu kodlar tekrar, tekrar yazılacagına sadece fonksiyonumuzu cagırarak buyuk bi kufletten kurtulmus oluruz. Kısaca fonksiyonlar belli kod kumelerini tasıyan tek satırlık komutlardır diyebiliriz...

Bir fonksiyon oluşturmak icin temel olarak iki şey yapılmalıdır. Birincisi fonksiyonun adını ve kullanımını belirleyip tanıtmak(decleration) türkçeye de deklare etmek diye gecmiştir. İkincisi fonkiyonun icerdigi kodları yani yaptıgı işleri yazmak. Buna da implementation deniyor. Turkcesini bilmiyorum

Şimdi "yazdır" diye bir fonksiyon yapalım...

void yazdır(); // bu satırda yazdır adında bir fonksiyon tanıttık yani deklare ettik...

void yazdır() // burada da fonksiyonumuzun implementation ını yaptık.. yani fonksiyonun

{ // yapacağı işi { } ler acarak icine yazdık.. burda fonksiyonumuz ekrana

printf("Merhab.. uot;); // Merhaba yazıyor... yaptığı iş bu....

}

peki bu fonksiyonun başına yazdıgımız void de neyin nesi ?

Bu sorunun cevabını vermek icin bir fonksiyonun nelerden olustuguna deginmek gerek.

Bir fonksiyonun girdileri ve bir cıktısı vardır. Mesela iki tam sayıyı birbiri ile toplayıp sonucu veren bir fonksiyon duşunelim. Bu fonksiyonun iki tane girdisi olacak ( toplanacak sayılar) ve bir cıktısı ( toplamanın sonucu ). Bir fonksiyonu tanıtırken kac tane girdi aldıgını bu girdilerin turunun ne oldugunu ( tam sayımı, virgullu sayımı yada harf mi ) ve cıktısının turunu belirlememiz gerekir.

Yazdır fonksiyonunda, fonksiyon herhangi bir girdi almıyor ve bir cıktısıda yok. girdi almadıgını belirtmek icin yazdır dan sonra actıgımız parantezlerin icini bos bırakıyoruz yazdır() seklinde.

Cıktısının olmadıgını belirtmek icin de başına void yazıyoruz. void, cıktısının olmadıgını anlatıyor.

Bu noktada fonksiyonun çıktısı ile ekrana yazdırdıgımız yazıyı karıştırmamak lazım. Ekrana bir yazı yazıyor diye o fonksiyonun çıktısı var demek değildir.Fonksiyonların girdilerinin ve çıktılarının nasıl oldugunu inceleyelim:

toplama fonksiyonu:

int topla(int a, int b); // deklare ettik

int topla(int a, int b) // implementation

{

int c; // fonksiyonun icinde c diye bir tam sayı belirledik

c=a+b; // c yi fonksiyonun girdileri olan a ve b nin toplamına eşitledik

return c; // cıktı olarak c yi ver dedik

}

Yukarda goruldugu gibi topla fonksiyonunda void in yerine int yazdık çünkü bu sefer fonksiyonumuzun bir cıktısı olacak ve turu integer yani tam sayı olacak. Parantezlerin icinde de a ve b adında iki tene integer belirledik ve bunlar fonksiyonlumuzun girdileri oldu.Parantezlerin icindeki girdiler virgulle birbirinden ayrıldılar. return c; satırı ile fonksiyonun cıktısının ne olacagını belirlemis olduk. Bir fonksiyonun cıktısı varsa bu return komutu ile belirlenir.

Fonksiyon oluşturmayı öğrendik. Simdi olusturdugumuz fonksiyonu programımızda nasıl cagıracagımızı ( nasıl kullanacagımızı) ogrenelim:

main()

{

int x;

x=topla(3,5);

printf("%d",x);

}

yukardaki programda topla fonksiyonunu cagırdık girdi olarak 3 ve 5 i verdik cıktısını da x degiskenine atadık. Sonuc olarak x 3+5 yani 8 oldu. printf komutunun ekrana verdigi degere bakacak olursak 8 oldugunu goruruz. Yukardaki kodları birlestirip fonksiyon kullanıldıgı bi program yapacak olursak soyle olur...

#include

int topla(int a, int b);

int topla(int a, int b)

{

int c;

c=a+b;

return c;

}

main()

{

int x;

x=topla(3,5);

printf("%d",x);

}


Gordugunuz gibi main i yazmadan once main in icinde kullanacagımız fonksiyonu once olusturduk sonra da main in icinde cagırdık.

Fonksiyonları ogrendigimize gore scope olayına da deginmemiz lazım. Scope turkce olarak icerik diye cevrilebilir. Bir program scope lardan olusur.Programda kullanılan her fonksiyonun bir scopu vardır main de dahil olmak uzere... Scope degiskenlerin birbirine karısmamasını saglar. Yukardaki ornekte hem mainin icinde hem de topla fonksiyonunun icinde degiskenler belirlendigini goruyorsunuz.. main in icinde belirledigimiz degiskenin adı da x yerine a olasydı topla fonksiyonunun icindeki a degiskeni ile karışırmıydı ? hayır.. cunku her degisken scope larına goredir. x degiskeninin scopu maindir a,b ve c degiskenlerinin scope u da topla fonksiyonudur...

x in adını a yaparsak programın kafası karışmaz... program icin iki tane a degiskeni olur biri scope u main olan a degiskeni, digeri scope u topla olan a degiskeni program scope ları farklı oldugu icin bu ikisini birbirine karışrtırmaz... ama aynı scope un icinde aynı isimli iki degisken belirleyemessiniz main in icinde iki tane a olamaz..

simdi bu scope olayını daha iyi anlamamıza yarayacak bir program yazalım:

#include

void ekle(int x);

void ekle(int x)

{

x=x+1;

}

main()

{

int y;

y=5;

ekle(y);

prinrtf("%d",y);

}


Bu programda aldıgı değere bir ekleyen ekle adında bir fonksiyon olusturduk. mainin icinde y diye bir degisken belirledik değerini de 5 yaptık. sonra y degiskenini ekle fonksiyonuna verdik. printf le de y nin son değerini ekrana vermesini istedik. Simdi ekrana verilecek olan sayı y nin bir fazlası mı olacak ? Yani ekrana 6 mı yazılacak ? Bu soruya evet diyesi geliyor insanın cunku ekle fonksiyonu y nin degerini bir artırdı sanıyoruz ama oyle olmadı aslında. Sorunun cevabı hayır... ekrana 5 sayısı yazılacaktır. Simdi ekle(y); satırında olanları inceleyelim:

Bu satırda once y nin degeri ekle fonksiyonuna verildi.Sonra, ekle fonksiyonunun scope unda olan x degiskeninin degeri main in scope unda olan y nin değerine yani 5 e eşitlendi. Şu an ekle fonksiyonunun scope undayız yani eklenin içindeyiz... ekle fonksiyonunun icinde x in degeri bir artırıldı yani 6 oldu sonra ekle fonksiyonunun yapacagı işler bitti ve icinden cıktık, artık tekrar main in scope undayız ve main in icinde artık x diye bi değişken yok... Ve gordugunuz gibi y değişkenine bir değişiklik yapılmadı ... ekle fonksiyonu sadece kendi içinde bulunan x değişkenine bir değer atayıp sonra da onu bir artırdı ama kendi scope unda olmayan y değişkenine bir şey yapamadı...

main in icinde belirledigimiz y degiskeninin adını x diye deistirsek de bisey farketmezdi... cunku gene main in icindeki x ile eklenin icindeki x farklı şeyler olacaktı cunku scope ları farklı...

Demekki her fonksiyon kendi scope undaki degiskenlere etki edebiliyor ve her degisken bulundugu scope a gore ayrı bir sekilde degerlendiriliyor program tarafından...

Peki fonksiyonların main in icinde belirlenmis bir degiskenin degerini degistirmesinin bi yolu yokmu ? Var birincisi, fonksiyona bir cıktı belirlemek ve bu cıktıyı mainin icindeki degiskene atamak ilk programımızda ki şu satırda oldugu gibi: x=topla(3,5);

İkincisi ise pointer kullanmak ... pointerları da bir dahaki dersimizde işleyecez .

Simdi ödev veriyorum:

Asal sayı bulan bir program yapmıstık hatırlarsanız... Simdi o programı geliştirelim biraz... Bu seferki programımız çalıştığında kullanıcıdan iki sayı girmesini isteyecek ve bu iki sayı arasındaki asal sayıları alt alta ekrana verecek... Mesela 10 ve 15 diye iki sayı girdik.. program ekrana

11

13

verecek... Bu programla 5 milyonla ile 6 milyon arasındaki tüm asal sayıları bulabilirsiniz mesela...

Programda bir sayının asal olup olmadıgını kontrol eden bir fonksiyon kullanılacak... mesela fonksiyona verilen sayı asalsa cıktı olarak 1 versin degilse 0 versin... mainin icinde de bu fonksiyon kullanılarak bir loop yapılacak ve loopta girilen iki sayı arasındaki tüm sayılar sırayla fonksiyona verilecek eğer sonuc 1 olursa o sayı ekrana yazdırılacak...

Temel C Dokümanları 7 (Pointerlar[işaretçiler])


Sıra geldi pointerlara, C de ki en onemli konuya… Bu pointerları

da iyice oğrenirsek artık C de onumuz acık demektir.Peki nedir bu

pointer denen şey ?

Türkçe anlamı işaretçi demektir. Yani bunlar bir şeyleri işaret ederler.

Ama pointerların esas olayı RAMdeki byte'ların adreslerini tutan

değişkenler olmalarıdır. Yani pointerlar da integer, double yada

char gibi bir değişken turudur fakat sadece memory adresi tutarlar

ve diğer degisken turlerinden farklı olarak baska bir degiskeni

isaret edebilirler.Peki memory adresi dediğimiz şey nedir ve

işaret etmekden kastımız ne ? Diye soranların sesini duyar gibiyim

İlk önce RAMi inceleyelim biraz. RAM bilgisayarın işlemlerini

yurutebilmesi icin bazı bilgileri geçici olarak kaydettigi bir cesit

hard disktir. RAM byte'lardan oluşur mesela benim RAM im 256 mega byte.

bu da (1MB = 1024 Kilo byte ve 1Kb = 1024 byte dersek) 268435456 byte oluyor sanırım. RAM adresi bu bytelarla belirleniyor. 100000 diye

bir RAM adresi, RAM deki 100000 inci byte demek oluyor. Bu byte

dedigimiz şey de bit lerden oluşuyor.8 tane bit ten oluşan bir bloka

byte demişler. bit dediğimiz şey de bilgisayar dunyasındaki o meşhur 0 ve 1

lerin kaydedildigi yerlerdir. Yani bir bit de sadece doğru yada yanlış

bilgisi tutulabilir yani 0 yada 1 ... demek ki bir byte 8 tane 0 yada 1

den olusuyor ornek:



00001101 bir byte dir...



Bu 0 ve 1 lerin bilgisayarımıza taktığımız ve RAM dedigimiz o kartuşlarda

nasıl olustugunu merak ediyorsanız onuda soliyim. RAM in icindeki binlerce

kucuk elektronik switch lerle olusuyor. Bu switch ler acık yada kapalı

hale getirilerek 0 yada 1 i temsil ediyorlar. Elektronik dilinde bu switchlerin acık yada kapalı olmasını temsil eden şey de aletteki pinlerin ucunda voltaj olması ya da olmamasıdır. Bunu da bir ek bilgi olarak soylemiş olalım



RAM i şu şekilde hayal edelim:



.

.

.

00110010 ----> 124561 inci byte

01110011 ----> 124562 inci byte

10110010 ----> 124563 inci byte

00001011 ----> 124564 inci byte

00011101 ----> 124565 inci byte

10010011 ----> 124566 inci byte

00001111 ----> 124567 inci byte

00100101 ----> 124568 inci byte

.

.

.





124561 inci byte RAM deki adres oluyor. karşısındaki 0 ve 1 ler de o

adreste bulunan byte daki bilgilerdir.



biz yazdıgımız programda



int x;

x=5;



yazdıgımızda x değişkeninde bir bilgi tutulabilmesi icin RAM de bir adres

ayrılır ve o adrese 0 ve 1 ler kullanılarak x=5 bilgisi kaydedilir.

Bu kadar genel bilgiden sonra pointer tanıtma ve kullanmayı kodlarla

anlatalım artık...



pointerlar işaret edecekleri degiskenin turune gore tanıtılırlar

bir integer a pointer atamak istiyorsak pointerımızı şu şekilde belirleyecez:



int *p;



normal integer tanıtır gibi.. fakat tanıtacagımız degiskenin basına bir * işareti

koyunca o degişken pointer oluyor. Yukardaki komuttan sonra artık bir pointer

degişkenimiz var. Unutulmaması gereken bir nokta da pointerın da bir degişken oldugudur.

Simdi bu pointerla neler yapabilecegimize ve nasıl kullanıldıgına bakalım.



int *p;

int x;

x=5;

p=&x;



yukardaki kodlarla once bir integer pointerı belirledik. Sonra x adında bir

integer değişkeni belirledik ve ardından bu degiskenin degerini 5 yaptık.

Son satırda da pointerın x e işaret etmesini sağladık. Bunu & sembolu ile yaptık.

& işareti şu anlama geliyor: " ...nın adresi" yani &x, "x in adresi" anlamına geliyor.

Son satırdan sonra p nin degeri x in memory adresine eşitlendi. Mesela x degiskeninin

tasıdıgı degeri aklında tutmak icin bilgisayar 156789 uncu byte a 0 ve 1 lerle

5 degerini kaydetti. Artık p nin degeri 156789 oldu.



main()

{

int *p;

int x;

x=5;

p=&x;

printf("%d\n",x);

printf("%d\n",p);

return 0;

}



yukardaki kodu yazıp calıstırırsanız, programın x in degeri olarak 5 i ve

x in tutuldugu memory adresini yani p nin degerini verdigini goreceksiniz.

p nin alacagı deger her bilgisayarda farklı olacaktır. Cunku x degiskeni

RAM deki ilk bos yere yazılacaktır ve bu bilgisayarın calısma durumuna ve

RAM in kapasitesine gore degisir.



Bir degiskene pointer atadıktan sonra o pointerı kullanarak degiskene

istedigimis degisikligi yapabiliriz. p, isaret ettigi degiskenin adresini ifade

ederken, *p, degiskenin degerini ifade eder. yukardaki kodlarda



printf("%d\n",p); komutunu

printf("%d\n",*p); seklinde degistirirsek x degiskeninin

adresi yerine degerinin yani gene 5 in ekrana verildigini goreceksiniz.



Aynı sekilde x in degerini de degistirebiliriz.



*p=6;



yazdıktan sonra x in degeri artık 6 olur.Yani *p ifadesi p pointerının işaret ettigi

degişken anlamına geliyor ve x yerine istedigimiz zaman *p ifadesini kullanabiliyoruz.



Bu noktaya kadar pointerların ne oldugu ve ne ise yaradıklarını ogrendik.

Peki nedir bu pointerları bu kadar onemli yapan, nedir bu pointerların marifetleri ?

Gelelim pointerların marifetlerine ve C deki kullanım alanlarına...



C de tanıttıgımız her şey, degisken, array, fonksiyon... her şey RAM e yazılır

Dolayısıyla RAM e yazılan her şeye RAM adresini taşıyan bir pointer atanabilir.

Yani pointer C de her programda, her algoritmada kullanılabilir.Baslıcalarına deinelim.



Pointerlarla arrayler:



int A[5]



diye bir satırla tanıttıgımız A arrayine beş tane integer(tam sayı) tasıyabilecek sekilde

RAM de yer ayrılır. Program bir integerı aklında tutabilmesi icin 2 yada 4 byte yer ayırır hafızada Dielimki bizim compilerımız 4 byte yer ayırıyor bir integer icin. A arrayine yer

acılması icin 5 * 4= 20 byte lık alan hafızada ayrıldı. Diyelimki RAM de ilk bos

byte 123456 ıncı byte olsun. Bu byte dan baslayarak arrayın elemanları icin 20 bytelık yer ayrılacak. Şu şekilde:



________ 123456 ıncı byte A[0]

________

________

________

________ 123460 ıncı byte A[1]

________

________

________

________ 123464 uncu byte A[2]

________

________

________

________ 123468 ıncı byte A[3]

________

________

________

________ 123472 ıncı byte A[4]

________

________

________





Yukardaki sekilde "________" diye gosterilen yerler RAM deki bir byte ı temsil ediyor.

A[0] icin 4 tane byte ayrılmıs. 123456, 123457, 123458 ve 123459 uncu byte lar...

Ama A[0] in RAM adresi kendisine ayrılan ilk byte olan 123456 dır. Bu aynı zamanda

A arrayinin ilk elemanının adresi oldugu icin A arrayinin de adresi oluyor.

A arrayine bir pointer atamak istersek yapmamız gereken mesela p diye

bir integer pointer ı belirledikten sonra p=A satırını yazmak. A zaten A[5]

arrayının ilk elemanının pointerı oluyor otomatik olarak. Simdi bu yazdıklarımızı

kodlara dokerek acıklayalım:



#incluıde

main()

{

int *p;

int A[5];

A[0]=10;



printf("%d\n",A);

printf("%d\n",A[0]);

printf("%d\n",*A);



p=A;



printf("%d\n",p);

printf("%d\n",*p);

}


Bu programı calıstırırsak şu sekilde bir cıktı verecektir: (A arrayının adresinin 123456 oldugunu kabul ediyorum)



123456 ---->A

10 ---->A[0]

10 ---->*A

123456 ---->p

10 ---->*p



goruldugu gibi A , A[5] arrayinin adresi olan 123456 degerini veriyor. Cunku A nın kendisi bir pointer.

A[0] , arrayin ilk elemenı ve 10 a esitlenmisti. *A , A pointerının işaret ettigi degiskenin degerini verecek.

Bu da arrayin ilk elemanına işaret ediyor ve 10 degerini ekrana veriyor.p pointrerı, A ya esitlendigi icin

boylece arrayın adresini tasımıs oluyor ve ekrana 123456 veriliyor.*p, 123456 adresindeki degiskenin degerini

verecegine gore *p icin ekrana 10 veriliyor... ( yukarda bahsedilen 123456 degeri sizin bilgisayarınızdaki

ilk bosalan RAM adresine gore degisecektir.)



Bir arrayin adının o arrayin pointerı oldugunu ogrendik. Bunu kullanarak (*A seklinde) arrayin ilk elemanına ulasmayı da

ogrendik. Peki arrayin diger elemanlarına nasıl ulaşacaz ? Diyelim ki p diye bir integer pointerı belirledik ve

p=A dedik. p yi kullanarak A[1] e yani arrayin ikinci elemanına nasıl ulasabiliriz ?



p++;



yazarsak p nin degeri bir artırılacak. p nin degeri ornegimizde 123456 idi. Yeni degeri 123457 mi olacak ?

Hayır

C, bunun bir array pointerı oldugunu bilecek ve bir sonraki array elemanına denk gelecek sekilde p nin degerini artıracak.

Bizim ornegimizde integer arrayı kullandık ve her integer icin 4 byte ayrılmıstı. C, bunu bildigi icin p nin degerini 4 artıracak.



p++;



komutundan sonra p nin degeri 123460 olacak. Bundan sonra *p yazarsak bu ifade 123460 adresinde bulunan degiskenin degerine esit olacak.

yani A[1] e... mesela p yi kullanarak A[1] e bir deger atamak istersek:



p=A

p++;

*p=11;



bu komutlarla A[1] in degeri 11 olacak...



Peki bu arraylerin elemanlarını neden pointer kullanarak deistirelimki ? Neden işimizi uzatalımki ? Direk A[1]=11 yazsak daha kolay olur deilmi



Simdi bunu neden ogrendigimizi gosteriyim...

Fonksiyonları işlemiştik. Mesela



int topla(int a,int b);



seklindfe tanıtılan bir fonksiyon girdi olarak iki tane tam sayı alıyor ve bunların toplamını veriyor diyelim.

Fonksiyona bu sekilde tamsayı girdisi yada cıktısı almak kolay. Peki fonksiyonumun bir array almasını yada bir array vermesini

istersek bunu nasıl yapacaz ? Ponter kullanarak



int topla(int *t,int n);



seklinde bir fonksiyon tanıtalım. Burda *t bir array pointerı olsun, n de arrayın uzunlugu...

Bu fonksiyon, arrayin elemanlarını toplasın ve sonucu versin:



int topla(int *t, int n) [Linkleri görebilmek için üye olun veya giriş yapın.]

{ [Linkleri görebilmek için üye olun veya giriş yapın.]

int i; [Linkleri görebilmek için üye olun veya giriş yapın.]

int toplam = 0; [Linkleri görebilmek için üye olun veya giriş yapın.]

for(i=0; i[Linkleri görebilmek için üye olun veya giriş yapın.]

{ [Linkleri görebilmek için üye olun veya giriş yapın.]

toplam=*t + toplam; [Linkleri görebilmek için üye olun veya giriş yapın.]

t++; [Linkleri görebilmek için üye olun veya giriş yapın.]

} [Linkleri görebilmek için üye olun veya giriş yapın.]

return toplam; [Linkleri görebilmek için üye olun veya giriş yapın.]

} [Linkleri görebilmek için üye olun veya giriş yapın.]

Bu fonksiyonun yaptıgı işi satır satır anlatalım:

1.satırda fonksiyonumuzu yazdık, 2. satırda fonksiyonumuzun yaptıgı işi anlatacagımız { } isaretlerinin ilkini actık.

3. satırda for dongusunde kullanacagımız degiskeni tanıttık. 4. satırda

arrayin elemanlarını toplayacagımız toplam degiskeninin tanıttık ve ilk degerini 0 a esitledik.

5. satırda for dongumuzu yazdık.dongumuz 0 dan baslayıp

arrayin uzunluguna kadar kendini tekrarlıycak. Mesela “int A[3]” diye tanımladığımı uzunluğu 3 olan bir arrayi bu fonksiyona sokacaksak

fonksiyonu şu sekilde kullanacaz main in icinde :

topla(A,3)

burda t, A ya esitlenecek n de 3 e esitlenecek. for dongusu 3 kere donecek.

7.satır da dongu her seferinde toplam degiskenine *t nin degerini ekleyecek.

donguye ilk girildiginde *t arrayin ilk elemanının degeri olacak. Sonra 8. satırda t, bir sonraki elemana

isaret edecek. Donguye tekrar girildiginde bu sefer *t arrayin 2. elemanının degerine esit oloacak... bu sekilde devam ederek toplam degiskenine arrayin her elemanı teker teker eklenecek. 10.satırda elde edilen toplam fonksiyonun cıktısı olacak...



yukardaki kodları birlestirerek bir ornek program yazalım:



#include



int topla(int *t, int n);



main()

{

int Q[5] = {2,4,6,8,10} ;

int x;

x=topl.. ,5);

printf("%d",x);

return 0;

}



int topla(int *t, int n)

{

int i;

int toplam = 0;

for(i=0; i
{

toplam=*t + toplam;

t++;

}

return toplam;

}




Bu programı calıstırırsanız ekrana 2 4 6 8 ve 10 un

toplamını verecektir, sanırım 30 ediyor



son olarak pointerın pointerı diye bir şey var onu anlatalım:

Pointer da bir degişken olduguna gore ve bilgisayarın pointerın adresini aklında

tutabilmek icin onu da RAM de bir yere yazdıgına gore, bir pointer a da işaret eden bir pointer belirlenebilir.Yani pointerın pointerı… kafalar biraz daha karısacak



int **a;

int *b;

int c;



c=3;

b=&c;

a=&b;



yukardaki kodlarda b pointerı c integerına isaret ediyor, a pointer pointerı da b pointerına isaret ediyor.



a --> b --> c



seklinde...



c nin degeri 3, b nin degeri c nin memory adresi, a nın degeri de b nin memory adresi oluyor.



c degiskeni degeri : 3 , RAM adresi : 123456

b degiskeni degeri : 123456 , RAM adresi : 123460

a degiskeni degeri : 123460 , RAM adresi : 123464



seklinde bir RAM adresleri ve degisken degerleri tablosu oluşacaktır. RAM adreslerini kafadan attım tabiki...



printf("%d",a) ----> 123460 ı verir

printf("%d",*a) ----> 123456 yı verir

printf("%d",**a) ----> 5 i verir



pointerın pointerı iki boyutlu arraylerde kullanılabilir... A[2][3] gibi...

Ama bukadar ayrıntıya girip anlatamıycam yoksa yazının sonu gelmez

Benden size ana hatları ile pointerlar... Ayrıntıları ogrenmek size kalmıs...

Kafanıza takılan ayrıntılar, ogrenmek istediginiz şeyler yada anlamadıgınız noktalar olursa sorun forumda



Buraya kadar kafa karıstırabilecek bir iki şeyden bahsediyim.

Birincisi matemetiksel işlemlerde *p seklinde kullanılan bir pointer carpma işlemi olan

* isareti ile karışmaz merak etmeyin. mesela

a * *b;

seklinde bir ifade a carpı b pointerının işaret ettigi deger anlamına gelir.C, * leri birbirinden ayırmasını bilir merak etmeyin

İkincisi pointerı tanıtırken kullanılan * ile pointerın işaret ettigi degiskenin degeri anlamına gelen *

sempolunu birbirine karıştırmamak gerekir. Gene C buınları karıstırmaz ama siz karıstırabilirsiniz

mesela bir fonksiyonu tanıtırken

fonksiyon(int *p);

yazıldıgında "int *p" kısmında kullanılan * isareti p nin bir integer pointerı oldugunu anlatır.

pointer tanıtma isaretidir.

Misal başka bir fonksiyon tanıtıldıktan ve implement edildikten sonra main in icinde kullanırken mesela:



fonksiyon(*p);



dersek, buradaki * işareti ise p pointerının işaret ettigi degişkenin degeri anlamına geliyor...





Pointerlar sadece intergerlar icin kullanılmaz tabiki... mesela char degiskenlerşi ve string ler icin

de bir iki ornek yazalım:



char A[] = "radres";

seklinde bir string tanımlanınca A bu stringin ilk elemanına işaret eden bir pointerdır.

*A, r yi verir...



p=A;

p++;

yazdıktan sonra *p, a ya esittir.



yada



p=A;

*(p+3)='\0';



dersek



printf("%s",A);



bize “rad” ı verir. Cunku stringin 4. elemanının olan *(p+3) u stringin bitiş elemanı anmlamına gelen '\0' a eşitledik.



pointerlarla ilgili soyliyecegim son şey fonksiyonlarla degisken degerlerini degistirmektir.



Daha onceki fonksiyonlar dersimizde scope olayından bahsetmistik. Scopu main olan bir degiskeni bir fonksiyona vererek degerini degistiremiyorduk. Pointer kullanarak bunu becerebiliriz.

Simdi iki ornek yazacam. Biri main de kullanılan bir degiskenin degerini degistiremeyen bir fonksiyon

digeri ise pointer kullanarak degeri degistiren bir fonksiyon.



#include



void degistir1(int a);



void degistir1(int a)

{

a=a+1;

}





void degistir2(int *a);



void degistir2(int *a)

{

*a=*a + 1;

}



main()

{

int x=5;

int *p;

p=&x;



degistir1(x);

printf("%d",x);



degistir2(p);

printf("%d",x);



return 0;



}




bu programda mainde belirlenen x degiskeninin ilk degeri 5 e esitleniyor.

ardından p diye bir integer pointerı belirlenip p=&x; satırı ile x i işaret etmesi saglanıyor.

sonra degistir1 fonksiyonuna x veriiyor. printf komutu ile x in degerine bakılıyor. Program calıstırılırsa x in degerinin degistirilemedigi gorulecektir. Bunun sebebi fonksiyonlar dersinde anlatıldı.

Sonra degistir2 fonksiyonuna x in pointerı olan p veriliyor. Ardından printf ile tekrar x in degerine bakılıyor.

Program calısınca ekrana gelen ikinci degerin bu sefer degistirildigini ve x in yeni degerinin 6 oldugu

gorulecektir.



Bunun sebebi degistir2 fonksiyonuna scope olayının etki etmemesidir. Degistir2 nin kodlarına bakarsanız

aldıgı pointerın isaret ettigi degeri bir artırdıgını gorursunuz. Pointer direk olarak RAM deki “x” in adresine gidip

orda depolanan degeri degistiriyor. Bu yuzden x in yeni degeri sorgulandıgında RAM de ki x in adresine gidip degeri okuyan

bilgisayar degerin 6 oldugunu gorecek ve bize bu degeri verecektir.



Daha cok, bi suru anlatacagım şey var pointerlarla ilgili ama bir dokumanda bu kadar oluyor…

Bu temel pointer bilgisinden sonra siz program yaza yaza, C dokumanları okuya okuya pointerların marifetlerini kendiniz anlayacaksınız.

Temel C Dokümanları 8 (Dosya işlemleri)


Sıra geldi hepimzin merakla bekledigi C de dosya acma, yazma, yani data kullanma olaylarına…



Şimdi yeni bir degisken daha ogrenencez. Degiskenimizin turu: FILE isminden de anlasıldıgı gibi dosyaları temsil eden bir degisken turu.bu. Ama file diye degil FILE olarak yazacaz unutmayın ki C buyuk harf kucuk harf ayrımı yapan bir dildir. Peki nasıl kullanacaz bu FILE degiskenini ? Diger degiskenler gibi soyle:



FILE *f;



Bu komutla f adında bir FILE degiskeni pointerı yaptık. Niye pointer olarak belirledik de normal bi degisken yapmadık diye merak ediyorsanız bunun sebebi dosya acma yazma ve okuma islemleri icin kullanacagımız hazır fonksiyonların input olarak pointer kabul etmeleridir. Simdi bu FILE pointerını kullanacagımız fonksiyonlara bakalım:



fopen , fclose , fprintf, fscanf , fputs, fgets adında fonksiyonları tanıyacaz ve kullanacaz.
Sayfa başına dön Aşağa gitmek
http://www.roblox.com
JettireYeqi
Özel Üye
Özel Üye
avatar


<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 610
<b>Nerden</b> Nerden : BoLu
<b>Kayıt Tarihi</b> Kayıt Tarihi : 08/08/10
<b>Rep Puanı</b> Rep Puanı : 13
Başarı Seviyesi : 16. Seviye



MesajKonu: Geri: C++ Gecis   Çarş. Ağus. 11, 2010 8:49 pm

Alıntı + toplama gibi görüküyor ama yinede bizimle paylaştığun için teşekkürler :D





(¯`v´¯)
-`·.¸.·´
................/iSimsiZ şiiRiM¯`♥️
-Hep Anlamsız Sözler, Cümleler,
-Hayatımda ßir sen ßirde o gözler,
-ßir çiçek parçasıydı o aşk dolu sözler,
-i&amp;#36;te ßu hayat Ne kadarda ßeTer...

-ßy-[JettireYeqi]
-Hayatımdakı Her ßatış, Yeni ßir şeylerin Doğusunun Simgesidir... ßy -[JettireYeqi]

-ßir su dolu bardağın içindeki suyu boş bir bardağa dökersin ya...Hayat işte buna benzer...Hayata ne kadar değer verirsen, o kdr değerin azalır...
ßy -[JettireYeqi]


[Linkleri görebilmek için üye olun veya giriş yapın.]
Sayfa başına dön Aşağa gitmek
Ronin
Co-Admin
Co-Admin
avatar


<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 1541
<b>Nerden</b> Nerden : Adana
<b>Kayıt Tarihi</b> Kayıt Tarihi : 28/07/10
<b>Rep Puanı</b> Rep Puanı : 125
Başarı Seviyesi : 18. Seviye



MesajKonu: Geri: C++ Gecis   Çarş. Ağus. 11, 2010 9:22 pm

Alıntı Ama Toplama Deil :D Yarı Benım Yarı Alıntı (Eski Hocamdan) :D Bunlar C++ Dilini Ve Temelini Ogrenmek Icın Cok Onemlı :D
Sayfa başına dön Aşağa gitmek
http://www.roblox.com
atakanmana
Yeni Üye
Yeni Üye
avatar


<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 4
<b>Nerden</b> Nerden : Kastamonu/Taşköprü
<b>Kayıt Tarihi</b> Kayıt Tarihi : 27/08/10
<b>Rep Puanı</b> Rep Puanı : 0


MesajKonu: Geri: C++ Gecis   Cuma Ağus. 27, 2010 4:27 pm

valla hocanada sanada helal olsun:)
Sayfa başına dön Aşağa gitmek
exampleses
Dosya Editörü
Dosya Editörü
avatar


<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 1392
<b>Nerden</b> Nerden : Şimdi Çıktım Oyundan Seni bunu okurken gördüm..
<b>Kayıt Tarihi</b> Kayıt Tarihi : 09/10/10
<b>Rep Puanı</b> Rep Puanı : 20
Başarı Seviyesi : 1. Seviye



MesajKonu: Geri: C++ Gecis   Cuma Kas. 19, 2010 7:16 am

Emeğine Sağlık Hiç Anlamıyorum Bu Hile Yapma İşlerini :D
Sayfa başına dön Aşağa gitmek
Thenemne
Moderatör
Moderatör
avatar


<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 686
<b>Nerden</b> Nerden : Adana
<b>Kayıt Tarihi</b> Kayıt Tarihi : 01/12/09
<b>Rep Puanı</b> Rep Puanı : 148



MesajKonu: Geri: C++ Gecis   C.tesi Ara. 04, 2010 12:43 pm

Teşekkürler Eline Emeğine Sağlık =)
Sayfa başına dön Aşağa gitmek
http://www.wolfteam.ailesiyiz.biz/
ejder237
Moderatör
Moderatör
avatar

<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 558
<b>Nerden</b> Nerden : Bileyim?
<b>Kayıt Tarihi</b> Kayıt Tarihi : 04/08/10
<b>Rep Puanı</b> Rep Puanı : 6


MesajKonu: Geri: C++ Gecis   Salı Ara. 07, 2010 2:45 pm

Saol ama bişey anlamadım :D
Sayfa başına dön Aşağa gitmek
7KeRe7
Moderatör
Moderatör
avatar


<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 1259
<b>Nerden</b> Nerden : İlk SeN SöLexD
<b>Kayıt Tarihi</b> Kayıt Tarihi : 14/10/10
<b>Rep Puanı</b> Rep Puanı : 28
Başarı Seviyesi : 1. Seviye



MesajKonu: Geri: C++ Gecis   Salı Ara. 07, 2010 3:20 pm

SaOL Pro
Sayfa başına dön Aşağa gitmek
berkerler
Yeni Üye
Yeni Üye
avatar


<b>Cinsiyet</b> Cinsiyet : Erkek
<b>Mesaj Sayısı</b> Mesaj Sayısı : 15
<b>Nerden</b> Nerden : Gökten
<b>Kayıt Tarihi</b> Kayıt Tarihi : 04/11/10
<b>Rep Puanı</b> Rep Puanı : 0
Başarı Seviyesi : 1. Seviye



MesajKonu: Geri: C++ Gecis   Salı Ağus. 02, 2011 10:09 pm

Bugun okumuycam yarın okuyca ama bir sorunum var c++ dilini hic bilmiyorum
Sayfa başına dön Aşağa gitmek
Sponsored content




MesajKonu: Geri: C++ Gecis   

Sayfa başına dön Aşağa gitmek
 
C++ Gecis
Önceki başlık Sonraki başlık Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
WwW.WoLF-TeaM.TK :: Sepet :: Sepet-
Buraya geçin: