C Programlama Dersi – I

Merhaba;

Sanırım, C ve C++ adını bilgisayarla az çok haşır neşir olan herkes en az bir kezduymuştur. Sizde bu isimleri duyanlardansanız ve nedir, ne değildir,nasıl kullanılır gibi birçok soruya yanıt arıyorsanız, doğru yerdesiniz.Çünkü bu yazıyla başlayarak C ve C++ ile programlamaya gireceğiz.Önce C ile yolumuza koyulup, belli bir olgunluğa ulaştıktan sonra C++ ile devamedeceğiz.

Okuyucularımızın genelini düşünerek, konuyu en temelden almayı daha doğru buldum.Yani hedefimiz, programlamayı hiç bilmeyen bir insanın burada okuduklarıyla belli biryerlere ulaşması. İleri derece de olanlarsa sıkılmamak için biraz beklemeli. Lafı fazlauzatmadan başlayalım.

Bilgisayar ve Programlama nedir?

Bilgisayar çok basit düşündüğümüzde üç ana görevi yerine getiren bir makinedir.Girilen bilgiyi alır (INPUT), işler (PROCESSING) ve bu işlenmiş veridenbir sonuç (OUTPUT) çıkarır. Bilgisayar, sadece donanım olarak çalışmaz.Çünkü yazılım olmadan, donanım ne yapacağını bilemez. Bilgisayar donanımına neyapacağını söyleyecek bir komutlar dizisi gerekir. Yapacağı görevleri, ona anlatankomutlara program diyebiliriz. Yani donanıma “sen şunu yap, sonra bulduğun sonucu şöyle şuraya ekle” gibisinden işler yaptırmak programın veya bir başka deyişleyazılımın işidir. Bir programcı olarak bundan fazlasını bilmek elbette ki avantajdır.Ama bilgisayarın bütün özelliklerini bilmeniz gerekmez. Yani yazacağınız bir programiçin o bilgisayarın özelliklerini bilmeseniz de olur.

Bilgisayarın anladığı tek dil, Makine Dilidir. Bu 16’lık (Hexadecimal) sistemdenoluşan bir programlama tipidir. Makine dilini anlamak çok zordur ve bu dili kullanmakiçin o bilgisayarın donanım özelliklerini mutlaka bilmeniz gerekir. C de ekrana yazı yazmanızı sağlayan “printf();” gibi çok basit bir fonksiyon, makine dilinde1A BB 0D BC D5 FF C2 F7… gibi çok daha karmaşık ve hiçbir anlam ifade etmeyen birhâle dönüşür. Makine dili programlama dilleri arasında en alt seviyedir.

Makine dilinden sonra Assembler Dili gelir. Makine dilini kullanmanın zorluğu vekarmaşası üzerine geliştirilen Assembler, daha basit bir yapıdadır. Ama yine de C ilemukayese ederseniz çok daha zordur ve kullandığınız bilgisayarın donanımına dairhâlen bilgiye gereksinim duyarsınız. Assembler aşağıdaki gibi karmaşık biryapıdadır.
SEGMENT COM WORD PUBLIC ‘CODE’
ASSUME CS : COMDS : COM
ORG 100H
ENTRY: MOV DVX,OFFSET MSG
MOV AH,g
.
.
.

Şuan bunu anlamaya çalışıp, hiç zamanınızı harcamayın. Çünkü öğreneceğimiz dil C,işlerimizi ve dolayısıyla hayatımızı çok daha kolaylaştırmaktadır. C, orta seviyebir programlama dilidir. Bunun anlamı, hem yazması kolay, hemde üst seviye dilleregöre daha çok erişim hakkınızın olduğudur. Üst seviye programlama dilleri ise BASIC,PASCAL, gibi dillerdir. Üst seviye dillerde, yazması göreceli olarak daha kolayolsa da C ile yapabileceklerimiz daha çoktur.

Program yazmak için ne gerekir?

Program yazabilmek için hiçbir şeye ihtiyacınız yoktur.Program yazmak için Windows’un not defterini veya Linux’da Gedit, Kwrite gibi bir programbile kullanabilirsiniz. Önemli olan yazılan programın derlenmesidir. Derlemeye “compile” ve derleme işini yapan derleyiciyeyse “compiler” denir. C için internetüzerinden birçok Compiler bulabilirsiniz. Ben, program uygulamalarını GCC üzerindenyapacağım. Aynı şekilde bu derleyiciyi kurmanızı tavsiye ederim. GCC gelmiş geçmiş eniyi derleyicilerden biri olduğu gibi, özgür bir yazılımdır! Richard Stallmantarafından açık kaynak koduyla sunulmuştur ve arzu ettiğiniz takdirde, sonuna kadardeğişiklik yapma imkanınız vardır.

Şayet Windows işletim sisteminiz varsa GCC’yi kurmanız biraz sıkıntılı olabilir.Basit bir Google araştırmasıyla, Bloodshed Dev-C++ adında birprogram buldum. GCC üzerine kurulmuş bir yapısı varmış. GCC ile uğraşmak istemeyenWindows kullanıcıları, bu programı deneyebilir.

Algoritma Geliştirmek

C dilini ve komutlarını öğrenmek, programlamaya başlamak için şarttır ama algoritmaoluşturamadığımız sürece bir program oluşturmazsınız. Algoritma, mantıktır. Yani neyi,nasıl yapacağınızı belirtir. Algoritma türetmek için geliştirilmiş bir metot yok.Her program için o metodu sizin bulmanız gerekiyor. Ama hiç merak etmeyin, yazdığınızprogram sayısı arttıkça, algoritma kurmanız daha kolaylaşır.

Algoritma, programlamanın bel kemiğidir. C dilinde kullanılan komutlar, BASIC veyaFORTRAN gibi başka dillerde işe yaramaz. Fakat programlama mantığını bir kereoturttursanız, C komutlarının yerine pekâlâ başka dillere ait komutları daöğrenebilir ve büyük bir zorluk çekmeden diğer dillerde de program yazabilirsiniz.

Basit bir örnek üzerinden düşünelim. Bir markete gittiniz, kasada ki görevliyealdığınız ürünü gösterdiniz, parayı uzattınız, paranın üstünü aldınız. Günlük hayattagayet normal olan bu durumu biraz değiştirelim. Karşınızda insan değil, elektronik birkasiyer olsun. Ona göre bir algoritma geliştirirsek,
1-) Ürüne bak;
2-) Ürün Fiyatını bul;
3-) Parayı al;
4-) Alınan paradan ürün fiyatını çıkar;
5-) Kalan parayı ver.

İnsan zekasının otomatik hâle getirdiği eylemleri, ne yazık ki bilgisayar bilmezve ona biz öğretmek zorundayız. Öğretirken de hata yapma hakkımız yoktur,çünkü yanlış öğreti yanlış programlamayla sonuçlanır.

C Programlama Dili

Temel Giriş/Çıkış İşlemleri (BASIC I/O):

C ile ilgili olarak bu ve önümüzdeki yazılarda birçok komut/fonksiyon göreceğiz. Ama hep kullanacağımız ve ilk öğrenmemiz gerekenler temel giriş çıkış fonksiyonlarıdır. C de klavyeden bir değer alabilmek için scanf(); fonksiyonunu kullanırız. Ekrana herhangi bir şey yazdırmak içinse printf(); fonksiyonu kullanılır.
Bir örnekle görelim; #include<stdio.h>
int main( void )
{
printf(“Hello World”);
}

Eğer bunu derleyicinizde yazıp derlerseniz ve sonrasında çalıştırırsanız ekranaHello World yazılacaktır. #include<stdio.h>, standart giriş çıkış başlık dosyasını, programa dahil et gibi bir anlam taşır. C’de (ve hemen hemen bütün diğer programlamadillerinde) bir kütüphaneyi dahil etmek son derece rutin bir iştir. Aksi haldegiriş-çıkış fonksiyonlarını dahi her seferinde bizim baştan tanımlamamız gerekirdi.

main( ), bir programdaki ana fonksyiondur. Ondan sonra gelen ayraç standarttır. Bir bloğu temsil eder. İki ayraç işareti arasındaki alan main fonksiyonuna ait bir bloğu oluşturur. printf iseyazdığımız metini, ekrana bastırmaya yarayan, standart bir fonksiyonudur.Çift tırnak işaretleri içersine yazdığınız herşey printf sayesinde ekrana basılır.

Dikkat ettiyseniz, her satır sonuna noktalı virgül koyduk. Aslında her satır değil,her komutan sonra noktalı virgül koyduğumuzu söylemek daha doğru olacak. Çünkü noktalı virgül C dilinde komut ayracı anlamına gelir.

Şimdi yukarıda yazdığımız basit programı, biraz daha geliştirelim:
#include<stdio.h>
int main( void )
{
printf(“Hello World\n”);
printf(“Merhaba Dünya”);
return 0;
}

Birkaç yeni satır görüyorsunuz. Sırayla ne olduklarını açıklayalım. Az evvel yazdığımız”Hello World” yazısının sonuna “\n” ekledik. “\n” bir alt satıra geç anlamına geliyor.Eğer “\n” yazmazsak, ekranda “Hello WorldMerhaba Dünya” şeklinde bir yazı çıkar.”\n” kullanırsak, “Hello World” yazıldıktan sonra, bir alt satıra geçilir ve ikincisatırda “Merhaba Dünya” yazdırılır. En altta “return 0;” adındayeni bir komut fark etmişsinizdir. Bunu eklemezseniz, program yine çalışır;ancak uyarı verir. Çünkü main fonksiyonu, geriye bir tam sayının dönmesini beklemektedir.Yazmış olduğumuz return ifadesiyle bu uyarılardan kurtulabilirsiniz. Detayına girmekiçin henüz erken, return konusuna ileride değineceğiz.

Yukarıda ki programın aynısını şöyle de yazabilirdik:
#include<stdio.h>
int main( void )
{
printf(“Hello World”);
printf(“\nMerhaba Dünya”);
return 0;
}

Bir önce ve şimdi yazdığımız programların ekran çıktısı aynıdır. Bu örnekle anlatmakistediğim, printf( ) fonksiyonunda ‘\n’ konulan yerden sonrasınınbir alt satıra düşeceğidir.
#include<stdio.h>
int main( void )
{
printf(“Hello World\nMerhaba Dünya”);
return 0;
}

Gördüğünüz gibi tek bir printf( ); kullanarak aynı işlemi yaptırdık.

Varsayalım, ekrana çok uzun bir cümle yazmamız gerekti. Örneğin;
#include<stdio.h>
int main( void )
{
printf(“Benim adım Cağatay ÇEBİ ve Yazılım Mühendisiyim.\n”);
return 0;
}

Bu yazdığımız program hata vermemesine karşın, çalışma verimini azaltır.Çünkü yazacaklarınız editör penceresine sığmazsa, yazılanı okumakdaha zahmetli olur. Önemsiz bir detay gibi gelebilir, ama kod yazma veriminiciddi oranda düşüreceğinden emin olabilirsiniz.

Bu programı aşağıdaki gibi yazmamız daha uygundur:
#include<stdio.h>
int main( void )
{
printf(“Benim adım ”
“Cağatay ÇEBİ”
“ve Yazılım Mühendisiyim.\n”);
return 0;
}

Tek bir printf( ); fonksiyonu kullanılmıştır. Ancak alt alta yazarak, metinitek seferde görülebilir hâle getirdik. Programı derleyip çalıştırırsanız, alt alta üçsatır yazılmaz. Cümle bütün olarak gösterilir ve bir önceki örnekle tamamen aynıdır.(Satırların alt alta görünmesini isteseydik; daha önce bahsettiğimiz gibi ‘\n’koymamız gerekirdi.)

Ekrana, Ali: “Naber, nasılsın?” dedi. şeklinde bir yazı yazdırmamız gerekiyor diyelim.Bu konuda ufak bir problem yaşayacağız. Çünkü printf( ); fonksiyonu gördüğü ilk iki çifttırnak üzerinden işlem yapar. Böyle bir şeyi ekrana yazdırmak için aşağıdaki gibi birprogram yazmamız gerekir:
#include<stdio.h>
int main( void )
{
printf(“Ali: \”Naber, nasılsın?\” dedi.\n”);
return 0;
}

printf( ); fonksiyonunu kullanmayı sanırım iyice anladınız. printf( yazıp,sonra çift tırnak açıyor, yazmak istediklerimizi yazıyor, çift tırnağı sonra daparantezi kapatıyor, sonuna noktalı virgül ekliyoruz. Alt satıra geçmek içinse,yazdıklarımızın sonuna ‘\n’ ekliyoruz. Çift tırnaklı bir şey kullanmakiçinse \“ … \” kullanıyoruz. Hepsi bu!

scanf(); fonksiyonuna gelince, bu başında bahsettiğimiz gibi bizim giriş (Input) fonksiyonumuzdur. Ancak yazımı burada noktalıyorum. Çünkü değişkenler işin içine girmekte ve onları anlatmam uzun sürecek. Gelecek haftaki yazımda kaldığımız yerden devam edeceğiz. Yazdıklarımla ilgili öneri, eleştiri veya sorunuz varsa, bana ulaşabilirsiniz.