You are on page 1of 19

1.

PROGRAMLAMA NEDR
Programlama bilgisayarn yapaca ilemleri kontrol etmek iin gelitirilmi bir yntem olup, bilgisayar kullanmn nemli lde kolaylatrmtr. lk dev bilgisayarlar yapldnda bunlar ok fazla a-kapa dmeleriyle snrl olduundan, basit ilemleri yapabiliyorlard. (Tabii ki, elektrik hzyla balantl olarak bu ilemleri ok ksa srede halledip sonucu veriyorlard. Dolaysyla bilgisayarlarn nemi hz sayesinde daha da belirginleti.) Bilgisayara bir ilem yaptrmak iin bilgisayarn i yapsn bilmek ve uzun sre almak gerekiyordu. te tm bu olumsuz yanlar olumluya dntrebilecek bir yol bulundu. O da programlama! --------------------------------------------------------------------------------

2.PROGRAMLAMA NASIL YAPILIR


Programlama, insan beyniyle oluturulan mantksal ilemlerin, bilgisayara aktarlmasnda u yolu izlemektedir: Sadece insann anlayaca ksm----- nsan zekas--- > Derleyicinin ve programlayann anlayaca ksm -----Derleyici--->Sadece bilgisayarn anlayaca ksm. Grld gibi bu ilemler zincirinde programlaycnn yapmas gereken sadece, matematiksel olarak istenilen ilemlerin taslan oluturmak, daha sonra da bunu derleyicinin anlayabilecei ekle sokmaktr. --------------------------------------------------------------------------------

3.MATEMATKSEL TASLAK NEDR?

Matematiksel tasla bir rnek vererek akla kavuturalm. Mesela, yle bir program yapalm ki, bizden srasyla iki say girmemizi istesin ve bunlar toplayarak ekrana yazsn. En basit mantkla bunu bilgisayara nasl yapmasn sylerdiniz? yle: Program balat. Ekrana unu yaz: (Kullancdan girilen ilk say ve kullancdan girilen ikinci saynn toplam) Program kapat.

Bu rnek basit olduu iin bu yntemle oluturulan bir taslak ok da karmak grnmedi. Peki yle bir program yaptnz dnn. Klavyeden girilen 220 adet kelimeyi ekrana alfabetik sraya gre dizen bir program. Bunu yukardaki yntemle yazarsanz kafanz karmakark bir hal alabilir. Peki bunun kolay yolu nedir? Tabii ki semboller kullanarak tasla anlalr hale getirmek. Yukardaki taslak rneini bir de semboller kullanarak oluturalm. Program balat. Kullancdan bir say girmesini iste ve bu sayya say1 de. Kullancdan bir say girmesini iste ve bu sayya say2 de. Ekrana (say1+say2) yaz. Program kapat.

Sanrm herkes ikinci yolun daha matematiksel grndnde hemfikir olmutur. Bunun adna neden matematiksel taslak dediimin sebebi de buydu ite! --------------------------------------------------------------------------------

4.DEK TASLAK HAZIRLAMA YOLLARI

Matematiksel tasla hazrlarken yzlerce deiik yol izleyebilirsiniz. Fakat bunlardan en iyisi, ksa olan, anlalr olan, ve de hzl olan yoldur. Bir rnek daha vererek bu konuda bir fikir edinmenizi salayaym: yle bir program yapalm ki, 1'den 5'e kadar olan saylarn arpmlarn bulsun.(5 faktoriyel yani 1*2*3*4*5) Tabi imdi bunu bulmaya ne gerek var diyenler olabilir. rnek anlalr olsun diye kk say verdim. Daha byk bir sayda programn taslak hazrlama yolunun ne kadar nemli olduunu sanrm anlayacaksnz. Uzun olan yol: Program balat. say1'e 1 deerini ata. say2'ye 2 deerini ata. say3'e 3 deerini ata. say4'e 4 deerini ata. say5'e 5 deerini ata. Ekrana (say1*say2*say3*say4*say5) yaz. Program kapat.

Ksa olan yol: Program balat. saya'a 1 deerini ata. faktoriyel'e 1 deerini ata. saya 5 ten byk olana kadar aadaki ilemi yap. {faktoriyel deerini, faktoriyel deeri * saya yap. saya deerini 1 arttr. } Ekrana (faktoriyel) yaz. Program kapat.

Grld gibi uzun yolda 5 tane ayr sembol kullanmak zorunda kaldk. Oysa ikinci yolda 2 tane sembol yeterli oldu. Sayy 5 yerine 2000 olarak alsaydk ve uzun yoldan program yazsaydk 2000 adet sembol gerekecekti. Oysa ksa yoldan yaplan programda sadece 5 yerine 2000 yazmamz yeterli olacaktr. te tekrarlanan ilemler iin kullanlan bu ynteme dng denir. Deiik dng tipleri vardr. Ama bunu kendi kafanzdan gelitirmenizi neririm. nk bu taslak hazrlama yolu, tamamen zekayla yaplr. stediiniz yntemi gelitirebilir, istediiniz yolu izleyebilirsiniz. imdi srada matematiksel tasla derleyicinin anlayaca formata evirmeyi renmek var! --------------------------------------------------------------------------------

5.DERLEYCYLE HABERLEMEK
Matematiksel tasla hazrladktan sonra bunu derleyiciye iletmek iin bir haberleme dili kullanmanz gerekmektedir. Buna da Programlama Dili denir. Programlama dilleri eitlidir ve her programlama dilinin de bir derleyicisi vardr. Biz balang iin Turbo C derleyicisini neriyoruz. Dos ortamnda programlar hazrlayabilen bu derleyici ile C dilinin tm inceliklerini renmeniz ve kullanmanz mmkn. --------------------------------------------------------------------------------

6.C DLNN TEMEL


C dilindeki ana yapy inceleyerek balayalm: #include <Kullanlacak fonksiyonlarn bulunduu dosya ad> void main( )

{ //Program baladnda yaplacak ilemler } Burada #include deyimi programn ierecei baz fonksiyonlarn tanmland dosyalar programa dahil etmek iin kullanlr. Bu deyimi birden fazla kullanarak daha fazla komut dosyas ekleyebilirsiniz. main( ) adndan da anlald gibi, programn ana ilemlerinin yapld bir fonksiyondur.C dilinde fonksiyonlar ok nemlidir ve ilemler listesinin olduu ksmlardr. Bu ana fonksiyon, program balatldnda hemen uygulamaya geirilecek ilemlerin listesidir. Her fonksiyon " { " karakteriyle alr ve " } " karakteriyle kapanr. void ? ne in olduu fonksiyonlar blmnde aklanmtr. --------------------------------------------------------------------------------

7.SEMBOLLER (DEKENLER)

Bundan sonra sembollere deikenler diyeceiz. nk deikenler bu ilevi daha gzel aklyor. Program iinde deeri deiebilen semboller de diyebilirsiniz, fakat uzun olur:) C'de deikenler kullanlmadan nce mutlaka tanmlanmaldrlar. Bu tanmlama deikenin tipini belirtmek amacyla yaplmaldr.Deiken tipi, deikenin ierdii deerin tr demektir.(say,harf,kelime) Balca deiken tipleri unlardr: int = tamsay (-32 768 ile +32 767 arasnda deer alr) float = virgll say (-3.4 E-38 ile +3.4 E+38 arasnda deer alr) char = tamsay(-128 ile +128 arasnda deer alr ve her char tipi deiken sadece bir adet karaktere karlk gelir.) Deikenler fonksiyonlarn iinde tanmlanrsa, sadece o fonksiyon iinde geerli olan bir deiken olur (lokal deiken). Eer "#include" satrlarndan sonra tanmlanrsa tm programda, yani tm fonksiyonlarn iinde geerli olur.(global deiken). Deiken tanmlanmasna rnekler: int sayi1; char karakter1; float sayi2; int sayi3,sayi4,sayi5; C'deki en nemli eylerden biri de noktal virgldr. Noktal virgl, derleyiciye bir komutun sonunu haber verir. Noktal virgl unutulduu zaman program almayacaktr. C'de ayn isimde iki deiken tanmlanamaz ve deiken isimlerinde Trke karakter kullanlamaz. Deiken isimleri rakam ierebilir ama rakamla balayamaz. C'de ok nemli bir ayrnt da byk-kk harf duyarll olmasdr. rnek: sayi1 diye tanmlanan bir deikene Sayi1 diye ulaamazsnz. Yani Sayi1, sAYI1,sayI1,sayi1,... bunlarn hepsi farkl deikenler olabilir. --------------------------------------------------------------------------------

8.STANDART GRD-IKTI KOMUTLARI


Bu komutlardan en nemli iki tanesini grelim. Bu iki komutun bulunduu include dosyas <stdio.h> dr. Yani bu komutlar kullanabilmek iin programn bana #include <stdio.h> satrn eklemek gerekir.

printf(yazlacaklar);
Printf komutu ekrana bir eyler yazdrmak iin kullanlr. Yazlacaklar trnak iaretleri ierisinde belirtilir. rnek: printf("Merhaba! Bu benim ilk komutum!"); Bu komut ekrana Merhaba! Bu benim ilk komutum! yazdrr. Sembolleri yazdrmak iinse aadaki yol izlenir. rnek: int sayi1; float sayi2; char karakter1; printf("%d",sayi1); //sayi1 bir int tipi deiken olduu iin %d operatr kullanlr. printf("%f",sayi2); //sayi2 bir float tipi deiken olduu iin %f operatr kullanlr. printf("%c",karakter1); //karakter1 bir char tipi deiken olduu iin %c operatr kullanlr. //Hepsini bir kerede yazdrmak iinse: printf("%d %f %c",sayi1,sayi2,karakter1); ///Aralara istenilen karakterler eklenebilir. rnek: printf("say 1 = %d sayi 2 = %f karakter 1 = %c",sayi1,sayi2,karakter1); ///printf komutu yazmaya en son kald yerden balar. //Bir alt satra gemek iin n karakteri kullanlr. (printf("Merhaba!n Alt satra byle geilir.");

scanf(girilenler);
scanf komutu kullancdan bilgi almak iin kullanlr. Alnan bilgiler deikenlere aktarlr. Trnak iaretleri iinde hangi tip deiken alnaca belirtilir ve daha sonra deiken isimleri yazlr. rnek:

int sayi1; scanf("%d",&sayi1); Bu komut program durdurur. Kullancnn ? Enter? tuuna basmasn bekler. ? Enter? tuuna basldktan sonra, klavyeden girilen deer sayi1 deikenine aktarlr. Burada, sayi1? in nndeki & iareti atama operatrdr. Dier tiplerin okunmas aadaki gibidir. rnek:

int sayi1; float sayi2; char karakter1;

scanf("%d",&sayi1); //sayi1 bir int tipi deiken olduu iin %d operatr kullanlr. scanf("%f",&sayi2); //sayi2 bir float tipi deiken olduu iin %f operatr kullanlr. scanf("%c",&karakter1); //karakter1 bir char tipi deiken olduu iin %c operatr kullanlr. Hepsini bir kerede yazdrmak iinse: scanf("%d %f %c",&sayi1,&sayi2,&karakter1); --------------------------------------------------------------------------------

9. LK C PROGRAMIMIZ
imdi de, ilk bataki rnek program c koduna evirelim. Programmz klavyeden iki say girmemizi ve bunlarn toplamn ekrana yazdrmay amalyordu.

#include <stdio.h> main( ) { int sayi1,sayi2,toplam; printf(? Ltfen birinci sayy giriniz!n? ); scanf(? %d? ,&sayi1); printf(? Ltfen ikinci sayy giriniz!n? ); scanf(? %d? ,&sayi2) toplam=sayi1+sayi2; //buradaki = iareti atama operatrdr. aretin sandaki deer soldaki //deikene aktarlr. printf(? Girdiiniz iki saynn toplam = %d? ,toplam); } imdi program inceleyelim: #include<stdio.h> deyimiyle standart girdi-kt komutlarnn bulunduu dosyay kullanacamz belirttik. Sadece main( ) fonksiyonunda kullanlmak zere adet int tipinden deiken tayin ettik. (lokal deiken) Birinci ve ikinci saylar girmesi iin standart girdi-kt komutlarn kullandk. toplam=sayi1+sayi2; satryla toplam deikenine sayi1 ve sayi2? nin o anki deerlerinin toplamn aktardk. Yani eer sayi1 iin kullanc 10, sayi2 iin de 20 girseydi toplam = 10 + 20 yani 30 olacaktr. printf(? Girdiiniz iki saynn toplam = %d? ,toplam); son olarak toplam deerini ekrana aktardk. Bu programda akla taklabilecek iki soru: 1- n iaretlerini niye kullandk? 2-// iaretleri neyi belirtir. n iaretini kullanmasaydk program printf komutuyla yazlan hereyi yan yana yazacak ve ho bir grnt olumayacakt. Arada srada aa satra gemek iyidir. // iaretleri aklama satrlar koymak iin kullanlr. Yani derleyici bu iareti grd an, o satrdaki kalan karakterlerin bir komut belirtmediini anlar. Bu kodun aralarna aklamalar koymak iin kullanlr. Eer belli bir blmn ileme konmamasn dilerseniz her satrn bana // iaretini koymaktansa, blmn en bana /* iareti koyup blmn

sonuna da */ iareti koyarak o blm ilem d brakabilirsiniz. Uzun aklamalar iin bu yntem kullanlr. Program yazarken unutulmamas gereken en nemli ey noktal virgldr. C? her de komutun bitiinde noktal virgl konulmas mecburidir. Burada dikkat edilecek husus ise, komutun komple bitmi olmasdr. --------------------------------------------------------------------------------

10. BAZI GEREKL KOMUTLAR


imdi de baz gerekli komutlar hakknda bilgi verebilirim.

clrscr();
Bu komut ekrandaki yazlm olan btn karakterleri siler ve imlecin konumunu sol st keye tar. Yani bu komuttan sonra printf komutuyla yazlacak bir yaz sol st keden balayacaktr.

getchar();
Bu komutun kullanlabilmesi iin include satrlarna yazlmas gerekenler #include <conio.h> Bu komut bir tua basncaya kadar bekleme salayacaktr. Bylece programn son kty gstermeden kapanmasn engellemi olursunuz. Eer hangi tua basldn renmek istiyorsanz bunu fonksiyonun kendisinden renebilirsiniz. nk bu fonksiyon geri dn deeri olan bir fonksiyondur. Geri dn deeri olan bir fonksiyon bir deiken gibi deer ierir. Fakat fonksiyona yeni deer aktarmas yaplamaz. rnek:

char karakter1; karakter1=getchar( ); Bu komutlardan sonra karakter1? deeri klavyeden baslan tuun karakter deeridir. in Mesela, eer ? tuuna baslmsa deeri 65 olur. nk 65? karakter karl A A? in harfidir. Eer burada printf(? %c? ,karakter1); komutu kullanlrsa ekrana A harfi yazlr. Fakat printf(? %d? ,karakter1); komutu kullanlrsa ekrana A? nn tamsay deeri olan 65 yazlr. --------------------------------------------------------------------------------

11.KOULLANDIRMA DEYMLER

Programlamadaki ana unsur elbette ki ? eer? ifadesidir. ? eer? btn programlarn yaptadr. nk bilgisayar ? eer? lerle almaktadr. C dilinde karlatrma yapmak iin if- else deyimleri sklkla kullanlr. Kullanm yledir: if ( deer1 karlatrma operatr deer2 ) Eer doruysa unlar yap... else Eer yanlsa unlar yap... Karlatrma operatrleri unlardr:

!= eit deil mi? = = eit mi? < kk m? > byk m? <= kk - eit mi? >= byk - eit mi? = iareti karlatrma operatr deil, atama operatrdr. == iareti karlatrma operatrdr. imdi gerek bir kod rnei verelim.

int sayi1; if ( sayi1==10) printf(? sayi1? deeri 10? in dur? ); else printf(? sayi1? deeri 10 deildir.? in );

Eer birden fazla ilem yaplacaksa keli parantezler iine alnr.

char karakter1; if ( karakter1==? )//*** A? { printf(? karakter1? saysal deeri 65? ); in dir? printf(? karakter1? karakter deeri A harfidir? in ); } else { printf(? karakter1? saysal deeri 65 deildir? in ); printf(? karakter1? karakter deeri A harfi deildir? in ); } stenilirse else kullanlmayabilir. Doru olmad durumda ekstra bir eye gerek yoksa kullanmamak daha iyidir. ? yerine A yazamayz. nk eer yle yaparsak derleyici A? bir deikenmi gibi A? y yorumlayacaktr. yle bir deiken yoksa hata verir. Eer varsa o deikenin deeri ile karlatrma yapar. Demek ki tek trnak iaretleri, ierisindekini karakter olarak yorumlamak iin kullanlr ve yalnzca bir karakter iin kullanlr. ift trnak iaretleri ise ierisinde birden fazla karakter olanlar iin kullanlr. Bu konu string? blmnde ler tafsilatl olarak anlatlacaktr. --------------------------------------------------------------------------------

12.DNGLER

Daha nce, taslak hazrlama blmnde, dngnn ne olduuna ksaca deinmitik. Dng, tekrar edilecek ilemlerin oluturulmasnda kullanlan bir yntemdir. C? iki eit de dng vardr.Bunlar for dngs ve do-while dngsdr.

for dngs:

Bu dngnn kullanmnda en azndan bir saya gerekir. Saya genelde tamsay bir deiken olarak seilir. Bir rnek verip inceleyelim.

int sayac; for (sayac=1;sayac<10;sayac++) yaplacak ilemler; Bu dngy derleyici u admlarla yorumlar. 1. sayac deikenine ilk deer olarak 1 verir. 2. sayac deikeninin 10? dan kk olup olmadn test eder. 2.a. Eer kkse yaplacak ilemleri yapar. 2.b. Eer kk deilse, yani eit veya bykse ? numaral adma gider. 5? 3. sayac deikenine bir eklenir. (sayac++ komutu bu deikeni 1 arttr demektir) 4. Dngnn devam etmesi iin ? numaral adma geri dner. 2? 5. Dng bitmitir. Programa dngnn dndan, kald yerden, devam eder.

for( ilk deer atama; karlatrma; deer deitirme ) LEMLER....

lk deer atamada istenilen sayda deiken iin balang deeri verilebilir. Karlatrma blmnde o blgedeki lokal deikenler veya global deikenler karlatrlabilir. Dngnn bir dahaki admnda karlatrma deerlerinin deitirilmesi, deer deitirme blmnde olur. Yaplacak ilemler blmnde bir deer deitirme de elbette dngy etkileyecektir. Daha ksa veya uzun veya sonsuz dng haline sokabilecektir. Buna dikkat edilmesi gerekir. lemler blmnde birden fazla ilem varsa, ilemler keli parantezler iine alnr.

do-while dngs:
Bu dng de kendi arasnda iki eittir. Birincisi: do { yaplacak ilemler ve belirlenen sayata deer deitirme; } while ( karlatrma);

Bu dng eitinde sayac arttrmak iin gerekli kod yaplacak ilemler blmne yazlr. Bu kod gayet aktr. Derleyici bu kodu aadaki ekilde yorumlar.

1. Yaplacak ilemleri yapar. 2. Karlatrma blmndeki ilemi yapar. 2.a. Eer karlatrma doruysa ? numaral adma dner. 1? 2.b. Eer karlatrma yanlsa dng biter. kincisi: while ( karlatrma)

{ yaplacak ilemler ve belirlenen sayata deer deitirme; } Bu ikinci yntem birincisine ok benzemekle birlikte farkldr.. Derleyici bu kodu aadaki ekilde yorumlar. 1. Karlatrma blmndeki ilemi yapar. 1.a. Eer karlatrma doruysa ? numaral adma gider. 2? 1.b. Eer karlatrma yanlsa ? numaral adma gider. 4? 2. Yaplacak ilemleri yapar. 3. ? numaral adma geri dner. 1? 4. Dng biter. Aralarndaki tek fark udur. Birinci rnekte, ilemler mutlaka, en az bir kere yaplr. nk dng, yaplacak ilemlerle balar. kinci rnekteyse ilk nce karlatrma yapld iin, dng ilemleri en az bir kere yaplr diyemeyiz. nk karlatrma yanlsa dng bitecektir. imdi bunlara birer rnek verelim.

int sayac; sayac=1; do { printf(? %dn? ,sayac); sayac=sayac*2; } while ( sayac<=128); --------------------------------------------------------------------------------

int sayac; sayac=1; while (sayac<=128) { printf(? %dn? ,sayac); sayac=sayac*2; }

Bu iki program kodu da, altrld zaman ekrana alt alta 2? nin kuvvetlerini 128? kadar e yazdrr. ? 2 4 8 16 32 64 128? deerleri alt alta ekranda belirir. 1 <!--> --------------------------------------------------------------------------------

13.DNGLERDE KULLANILAN K ZEL DEYM

Dnglerden kmak, ya da dngye bir sonraki admdan devam etmek bazen ok gerekli olur. Bu gibi durumlarda imdadmza continue; ve break; komutlar yetiir. Adlarndan da anlalabilecei gibi, continue; komutu dngy bir sonraki adma ynlendirir. break;

komutu ise dngy yarda brakr. --------------------------------------------------------------------------------

14.SWITCH-CASE DEYMYLE KOLAY KOULLANDIRMA


Ard arda bir sr if-else kullanmak bazen karmakla yol aabilir. Bunun yerine gze daha ho grnen bir koullandrma yntemi kullanlmaldr. switch-case switch-case ? karlatrma operatr yoktur. Sadece tam saylar iin kullanlr ve tam de saylarn farkl deerlerinde ne olacan bir liste halinde belirtir. rnek: int sayi1; switch ( sayi1 ) { case 0:yaplacak ilemler; break; case 1: yaplacak ilemler; break; ............. ............. case 17: yaplacak ilemler; break; } Grld gibi sayi1 deikeninin deerleri iin ayr ayr karlatrma deyimi yazmaya gerek kalmad. Bu yntem bu gibi durumlarda byk kolaylk salar. imdi bu yntemi derleyicinin nasl yorumladna bakalm:

1. Derleyici karlatrlacak tam say deer ieren deikenin ? sayi1? deikeni olduunu renir. 2. Listedeki case deerlerini tek tek karlatrarak, sayi1 deerine eit bir case satr grdnde o satrdaki ilemleri yapar. break; komutu kullanlmazsa o satrdan sonra break; komutu gelene kadar bulunan btn ilemler yaplr. Yani, listenin alt ksmnda ne varsa yaplr. case dikkate alnmadan! Unutulmamas gereken bir baka zellik, karlatrlacak deikenin sadece tam say olmas gereidir. char, int ya da baka bir tamsay deiken tipi kullanlabilir. --------------------------------------------------------------------------------

15.DZLER

Baz programlarda ok sayda ve sral deikenler kullanmak ve bunlara zel indis numaralaryla ulamak isteyebilirsiniz. Btn programlama dillerinde de olduu gibi, C dilinde bu ii diziler yardmyla yapabilirsiniz. rnein, bir kpn koordinatlarn kaydetmek iin 8 adet koordinat gerekir. Her koordinat iin 3 adet float tipinden koordinat verisi gerekir. Bunun iin ayr ayr 24 tane deiken tanmlamak ok hantaldr. Bunun yerine 3 tane dizi tanmlarz: int x[8]; int y[8],z[8]; Bu diziler sayesinde her koordinata ulamak kolaylar. nk istediimiz koordinata ulamak iin indis numarasn kullanmamz yeterli olacaktr. Dizilerin nemli zellii, indislemenin 0? dan balayarak tanmlamada belirtilen saynn bir eksiine kadar devam etmesidir. Yani dizi[2] olarak tanmlanan dizinin 2 eleman vardr. {0 ve 1} imdi, dizileri kullanan bir rnek program verelim.

int dizi[8]; int sayac; dizi[0]=5; printf(? %dn? ,dizi[0]); for (sayac=1;sayac<8;sayac++) { dizi[sayac]=dizi[sayac-1]*5; printf(? %dn? ,dizi[sayac]); } Bu programn aklamasn okumadan nce kendiniz programn ne yaptn anlamaya aln! Bu programda 8 elemanl bir dizi tanmlanmtr. lk olarak, dizinin ilk elemanna 5 deeri verilmitir. Daha sonra ekrana bu deer yazlmtr. Dng baladnda, 2 numaral dizi elemannn deeri, 1 numaral dizi elemannn 5 kat olarak hesaplanr ve ekrana 25 yazlr. Dng devam ettike dizi 5? kuvvetleri olacak in deerleri almaya devam eder. Ta ki 8. eleman da hesaplanp dngden klana kadar! <!--> --------------------------------------------------------------------------------

16.FONKSYONLAR
C dilinin en can alc ksmlarndan biri de, phesiz fonksiyonlardr. Eer buraya kadar olan ksm okuduysanz, fonksiyonun ne olduu hakknda ufak bir bilgi edinmisinizdir. Fonksiyon programlaycn yapaca ilemleri gruplandrmasn salar. Bu gruplandrma sayesinde onlara ulam kolay olur ve program gelitirilmesi de kolaylar. Bu sylenileni daha nce BASIC dilini kullananlar daha iyi anlayacaktr. BASIC dilinde byle bir gruplandrma sz konusu deildir. Btn ilemler alt alta tek bir liste halinde yazlr. Bu dille uzun programlar yazmak o kadar zordur ki, insan programlamadan soutabilir. Neyse, konumuz BASIC dilinin dezavantajlar deil elbette:) C dilinde program balatldnda hemen devreye girecek olan fonksiyon, main ( ) fonksiyonudur. Eer baka fonksiyonlar tanmlamak isterseniz ilk olarak fonksiyonun ne yapmak istediini belirtmeniz gerekir. rnek olarak, bir satr komple * karakteri ile dolduran bir fonksiyon yapalm. Fonksiyonun ismi yildiz_doldur olsun. (Not: 1 satra 40 adet karakter sar) void yildiz_doldur( ) { int i=1; for( i=1;i<=40;i++) printf(? ); *? } Fonksiyonun bandaki void ifadesi bu fonksiyonun geriye bir deer dndrmeyeceini belirtir. Yani getch() fonksiyonunun geriye dndrd bir deer gibi bir deere sahip deildir. Eer bir fonksiyonun geriye deer dndrmesini istiyorsak dndrecei deerin tipini buraya yazarz. void ise bir deer dndrmeyen fonksiyonlarda kullanlr. Bu fonksiyonu bu ekilde tanmladktan sonra fonksiyon program balad gibi ilemleri faaliyete geirmeyecektir. nk bu fonksiyonu altrmak iin bilgisayara bunu yapmasn syleyecek komut gerekir. Bu komutu istenilen bir fonksiyonun iine ekleyebilirsiniz. Bizim rneimizi ana fonksiyonun iine yerletirelim. Bylece program alt zaman ilk olarak 1. satr * karakteriyle dolacaktr. Programn tam metni u ekilde olmaldr.

#include <stdio.h> void yildiz_doldur( ) { int i=1; for( i=1;i<=40;i++) printf(? ); *? } void main( ) { char kar; clrscr( ); yildiz_doldur(); fscanf(? ,&kar); %c? } Bu program ekran temizler. Birinci satr * karakterleriyle doldurur. ? Enter? tuuna baslncaya kadar bekler ve biter. Fonksiyonlar bir yerde arabilmek iin, fonksiyonun o yerden nce mutlaka tanmlanm olmas gerekir. rnein, main fonksiyonuyla yildiz_doldur fonksiyonlarnn yerlerini deiitirseydik program fonksiyonu bulamayacakt. Eer iki fonksiyon da birbirini aryor ya da sralar nemsememek istiyorsanz fonksiyonu ayrca tanmlayabilirsiniz. rnek zerinde gsterelim: #include <stdio.h> void yildiz_doldur( ); void main( ) { char kar; clrscr( ); yildiz_doldur(); fscanf(? ,&kar); %c? } void yildiz_doldur( ) { int i=1; for( i=1;i<=40;i++) printf(? ); *? }

#include satrndan hemen sonra fonksiyonu olduu ekliyle tanmlamak suretiyle programn bu halde de almasn saladk. nk artk yildiz_doldur fonksiyonu, main fonksiyonundan nce tanmlanmtr. Fonksiyonlarn nemli bir zellii, lokal deikenlere sahip olabilmesidir. Yani bir fonksiyonun iinde tanmlanm bir deikene, dier fonksiyonlarla hibir ekilde ulaamazsnz. Bunun salad en byk yarar gereksiz deiken kullanmn engellemektir. Ayn isimde iki deikenin, iki ayr fonksiyonda kullanlmas bu ekilde mmkndr. Bu ilem kesinlikle hata vermez ve programlamada sk kullanlan bir biimdir. Eer btn fonksiyonlar ierisinde de geerli deikenler tanmlamak isterseniz, bu tanmlamay fonksiyonlarn dnda yapmanz gerekir. Tanmlama yapld yerden sonraki tm fonksiyonlarda tanmlanan global deiken kullanlabilir. ok gerekmedike, global deiken kullanm tavsiye edilmez. Eer bir fonksiyondan kmak isterseniz return komutunu kullanabilirsiniz. Fonksiyonda

bu komut grld an fonksiyondan klr ve programa kald yerden devam edilir.u ekilde kullanlr: return; <!--> --------------------------------------------------------------------------------

17.FONKSYONLARIN DEER DNDRMES


Bazen bir fonksiyonun, bir ilem yapldnda yaplan ilemin sonular hakknda bilgi vermesi istenir. rnein getchar() fonksiyonu ierisindeki ilem, klavyeden bir tua baslncaya kadar beklemeyi salamaktadr. Bu fonksiyon yardmyla, ayn zamanda, hangi tua basldn renebiliriz. Demek ki bu fonksiyonun, geri dn deeri vardr ve bu deer char veri tipindedir. Yani bu fonksiyon aadaki ekliyle tanmlanmtr. char getchar();

te bu tanmlamaya uygun olarak siz de kendi geri dn deeri olan fonksiyonlar oluturabilirsiniz. Byle bir fonksiyon bittiinde yaplmas gereken en nemli ilem, fonksiyonun deerini atamaktr. Bu atama return komutuyla yaplr. ngilizce? anlam, de ? kaldn yere geri dn? demektir. Dnerken hangi deerle dnecei ise komuttan hemen sonra belirtilmelidir. rnek: return 10; return karakter;//char tipinden bir deiken olabilir return sayac;//int tipinden ya da baka herhangi bir tipten de olabilir. return karekok;//Bir snrlama yoktur. --------------------------------------------------------------------------------

18.FONKSYONLARA DEER BLDRM (PARAMETRELER)


Bir fonksiyonun yapaca ii, sadece belirli kalplara sokarak oluturmak her zaman kullanl olmayabilir. rnein baz matematiksel ilemler iin fonksiyonun hangi saylara bu ilemi uygulayacan belirtmek gerekir. Bunun iin fonksiyonlar parametre alabilirler. rnein bir saynn faktoriyelini alan bir fonksiyon yapalm.

int faktoriyel(int sayi ) { int sonuc; sonuc=1; for( i=2;i<=sayi;i++) sonuc=sonuc*i; return sonuc; } Bu fonksiyon parametreli olarak tanmlanmtr. Bylelikle fonksiyonumuz istenilen

saynn faktoriyelini hesaplayabilir. rnein, 7 saysnn faktoriyeli iin aadaki kodu yazmak yeterlidir. int sonuc; sonuc=faktoriyel(7 ); veya direk ekrana yazdrmak iin printf(? %d? ,faktoriyel(7 )); Bu fonksiyon parametreli olarak tanmlanmtr ve fonksiyonun geri dndrecei deer bir tamsaydr. return komutuyla bu deeri sonu olarak gnderdik. Parametreli fonksiyonlarda geri dn deeri kullanlmayabilir. rnein ekrana bir dikdrtgen izecek bir fonksiyonun parametreleri dikdrtgenin koordinatlarn belirtsin. Bu fonksiyonun geriye deer dndrmesine gerek yoktur. Parametreli fonksiyonlarda parametre says 1? den fazla olabilir. Bunlar aralarna virgl konarak belirtilir. Fonksiyon arlrken yine virgller kullanlarak arlr. rnek:

void pencere_ac(int x1,int y1,int x2,int y2); pencere_ac(0,0,100,100);

<!--> --------------------------------------------------------------------------------

19.DEKENLERN ZELLKLER
7. blmde deikenlere ok ksa bir bak yapmtk. imdi deikenlerin esas yaplar hakknda duralm ve deiik deiken tiplerine gz atalm. Deikenler, bir saysal deerin hafzada tutulmas ve kullanlmas iin bellekte ayrlan yeri ve bu verinin alglan biimini belirler. Dolaysyla eitli deikenler bellekte deiik boyutlar kaplayabilir. Bunlar aklamadan nce biraz da bellek yapsna deinelim. Bilgisayarda bellek verilerinin temel yapta, ikilik (binary) sistemdir. Yani bellek 1? ve 0? ler lardan oluur. Bellekte 1 ya da 0 deeri alabilen birime bit denir. Baka bir ifadeyle bir bit 2 farl deer alabilir. (1 ve 0) 8 tane bit yan yana getirilirse buna byte denir. 1 byte 8 tane bitten oluur. Her bit iki farkl deer alabiliyordu. Kombinasyon hesabndan, 8 tane bitin 2 zeri 8 farkl deer alabilecei kolaylkla bulunabilir. Baka bir bak asyla 2? dzende 8 basamakl en byk say 11111111 saysdr. Bu lik saynn deeri 255 ? tir. 255? kadar 0 ? birlikte tam 256 farkl say vardr. Bu da tam e la olarak 2 zeri 8? tekabl eder. e O halde bir byte? 256 farkl deer alabileceini grdk. 2 byte ise 256 ? n nn karesi kadar farkl deer alabilir. Buradan genelleme yaparsak, n byte 256 zeri n farkl deer alr. C++ ? bir deikendeki ilk bit, saynn pozitif-negatif olup olmadn belirten bit olarak ta deerlendirilir. Bu bitin deeri 0 ise say negatif, 1 ise say pozitiftir. Eer bir deiken tanmndan nce unsigned belirtecini kullanrsanz, C++ ilk biti de deikene dahil edecek, ve deiken ilk bit ne olursa olsun pozitif deer ierecektir. Bylelikle saynn alabilecei maksimum deer iki katna kar. imdi C++? taki deiken eitlerini inceleyelim.

char 8 bit 1 byte Tam say -128...+127 unsigned char 8 bit 1 byte Tam say 0...255 int 16 bit 2 byte Tam say -32 768...+32 767 long int 32 bit 4 byte Tam say - 2 147 483 648...+2 147 483 647 unsigned int 16 bit 2 byte Tam say 0...+65 535 unsigned long 32 bit 4 byte Tam say

0...+4 294 967 296 float 32 bit 4 byte Ondalkl say 3.4 * (10^-38) to 3.4 * (10^+38) double 64 bit 8 byte Ondalkl say 1.7 10^-308 to 1.7 10^308

1 GigaByte=1024 MegaByte=1024^2 KiloByte=1024^3 Byte=1024^4 Byte=8*1024^4 Bit 1 Byte=8 Bit 1 KiloByte (KB) =1024 Byte = 8*1024=Bit 1 MegaByte(MB)=1024 KiloByte(KB) 1 GigaByte(GB)=1024 MegaByte(MB) --------------------------------------------------------------------------------

20.STRUCT (YAPILAR)

typedef : Yeni tip tanmlamak iin kullanlan bir komuttur. rnek: typedef TAMSAYI long int; Bu satrdan sonra artk TAMSAYI diye bir tip oluur. TAMSAYI sayi1,sayi2; sayi1 ve sayi2 TAMSAYI tipinden yani, long int deikenlerdir. struct: Belirli tipleri bir araya getirerek bir veri yaps oluturmak iin kullanlan bir komuttur. (yap) Yap, deikenler ieren bir veri saklama aacdr. Programnzdaki deikenleri dzenli tutmak iin ok gerekli bir zelliktir. Yaplar kullanlmadan oluturulan byk programlar hantal olur ve anlalmas ve gelitirilmesi ok zordur. imdi struct ifadesinin ne anlama geldiini rneklerle inceleyelim. Bir programda eitli genler saklamak isteyelim. Her genin adet koordinat olur. Her koordinatn da 2 adet deer iermesi gerekir. (x ve y) imdi bunu u ana kadar rendiimiz metotlarla yapmay deneyelim. float x[3],y[3];

Bu ekilde yalnzca bir gen belirttik. Daha fazla gen iin ise yle yapabiliriz: float x[10][3],y[10][3]; Bu ekliyle 10 tane gen saklayabiliriz. Yerine gre bunu da kullanabilirsiniz. Ama emin olun ki, program karmaklatka bu yntemin ok kt olduunu anlayacaksnz. Bundan daha kolay bir yolla byle bir tanmlama yapmak mmkndr. imdi bu geni struct olarak tanmlayalm.

typedef struct { float x[3],y[3]; } UCGEN;

Bylelikle UCGEN adnda yeni bir tip tanmlam olduk. Bu tipin bellekte kaplad alan 24 byte? dr. nk iinde 6 tane float tipinden deiken var. Hatrlarsanz float tipi 4 byte? lk bellee ihtiya duyar. Bu yzden bizim tanmladmz UCGEN veri tipi hafzada 24 byte? yer kaplar. lk imdi 1 tane gen saklamak iin aadaki kodu yazalm.

UCGEN ucgen1;

Bu tanmlamadan sonra ucgen1 deikeni UCGEN tipinden bir deikeni temsil edecektir. Bu deikenin kendisi bir deer iermez ama yeleri deer ierir. yelerine erimek iin ? nokta? operatr kullanlr.

ucgen1.x[0]=0.5; ucgen1.y[0]=15.5; ucgen1.x[1]=7; ... ucgen1.y[2]=8.6;

Grld gibi ucgen1 deikeninin yeleri UCGEN tipinde tanmladmz deikenlerdir. Bu ye deikenler sadece tanmlandklar yap iinde geerli olduklar iin, isimleri dier deikenleri etkilemez. Yani baka bir yerde x adl bir deiken tanmlayabiliriz. imdi de UCGEN tipinden 10 elemanl bir dizi tanmlayalm.

UCGEN ucgen_dizisi[10]; ucgen_dizisi[0].x[0]=5.2; ucgen_dizisi[0].y[0]=3.2; ... ucgen_dizisi[10].y[2]=4.1;

imdi de koordinatlar iin de bir yap tanmlayalm. Dzlemdeki bir nokta x ve y deerinden oluur. Buna gre: typedef struct { float x,y; }NOKTA; imdi UCGEN tipini farkl bir ekilde yeniden tanmlayalm. typedef struct { NOKTA noktalar[3]; } UCGEN;

imdi UCGEN tipinden bir deiken tanmlayalm.

UCGEN u1; u1.noktalar[0].x=3.9; u1.noktalar[0].y=5.8; ... u1.noktalar[2].y=2.1; Grld gibi artk herey daha derli toplu hale geldi. Bunun salad kolayl daha kompleks programlar yapmaya baladka anlayacaksnz. Baka bir rnekle olay daha da akla kavuturalm. Bir veritaban programnda kullanmak zere bir yap tanmlayalm. Bu yap ierisinde bir kulbe ye olan kiilerin isimlerini, telefonlarn vs. tutsun. Kulbn ismi, Hayvan Severler Dernei farzedelim. rneimizi oluturalm, fakat daha nce kk bir komutun ne ie yaradna bakalm: ? define? komutu bir sabit belirtmek iin kullanlr. Genelde program kodunun en st taraflarnda bulunur ve programn sabitleri iin kullanlr. Mesela Pi says u ekilde tanmlanabilir.

#define PI 3.1415926535897932384626433832795 Bu komut kendinden sonraki her PI grlen yere pi says koyar. Bylece program daha anlalr bir hale gelir. imdi rneimizi oluturalm: #define MAX_UYE_SAYISI 100 typedef struct { char *adi; char *soyadi; int dogum_yili; char *tel; char *adres;

}UYELER; typedef struct { int uye_sayisi; UYELER uye[MAX_UYE_SAYISI]; }HAYSEVDER;

imdi HAYSEVDER tipinden bir deiken tanmlayalm ve bir ye ekleyelim. HAYSEVDER dernek; dernek.uye_sayisi=1; dernek.uye[0].adi=? Candar? Ali ; dernek.uye[0].soyadi=? Karpuzcuolu? ; dernek.uye[0].tel=? 02122447613? ; dernek.uye[0].dogum_yili=1971; dernek.uye[0].adres=? Gven sitesi No:32 Bahelievler/STANBUL? ; Grld gibi ok gzel bir yap oluturarak verilere eriimi daha anlalabilir ekle getirdik. Bu rnekde kullanlan ? char *deiken ismi? komutu ile bir kelime tanmladk. Bunun ayrntlarn pointer ( iaretiler ) blmnde ele alacaz. Ayrca string? ler blmnde de bu konu detayl olarak incelenecektir. ? char *deiken ismi? deyimiyle tanmlanan bir kelimeyi ekrana printf komutuyla yazdrmak iin %s operatr kullanlr. printf(? ,deiken ismi); %s? scanf ile klavyeden kelime almak iin yine %s operatr kullanlr ve dierlerinden farkl olarak atama operatr kullanlmaz. Bunun nedenleri pointer blmnde anlatlacaktr. scanf(? ,deiken ismi); %s?

You might also like