Bir C programının oluşturulması, derlenmesi ve çalıştırılması
Tercih ettiğimiz bir IDE (Entegre Geliştirme Ortamı)’yi bilgisayarımıza kurarak sistemi hazır hale getirdikten sonra, çalışan .exe uzantılı bir program elde edebilmemiz için, programı yazılması, derlenmesi ve kütüphane dosyaları ile birleştirilmesi işlemlerini gerçekleştirmemiz gerekir:
Bu safhaları sıra ile ele almadan önce, .exe uzantılı bir program ifadesini kısaca açıklamaya çalışalım:
İşletim sistemi, uzantısı .EXE, .COM ve .BAT olan dosyaları, komut satırında iken adını yazıp ENTER tuşuna bastığımızda veya Windows Gezgini benzeri bir ara yüz üzerinde çift tıkladığımızda çalıştırır. Diğer uzantılı dosyalara ise çift tıkladığımızda ilgili program yoluyla açar.
Yukarıdaki üç safhayı gerçekleştirdiğimizde .EXE uzantılı çalışan bir dosya elde edebiliriz.
Devamı...
C dilinde farklı amaçlarla kullanılmak üzere tahsis edilmiş olan kelimelere anahtar kelimeler denir. Bu kelimeleri değişken, veri ve döngü tanımlamaları ve benzeri işlemlerde kullanabilirsiniz. ANSI standartlarına göre C’de kullanılmakta olan toplam 32 adet anahtar kelime vardır. Bu kelimeler değişken ve fonksiyon adı olarak kullanılamaz.
C anahtar kelimeleri
| auto |
break |
case |
char |
const |
continue |
default |
| do |
double |
else |
enum |
extern |
float |
for |
| goto |
if |
int |
long |
register |
return |
short |
| signed |
sizeof |
static |
struct |
switch |
type |
void |
| volatile |
while |
union |
unsigned |
|
|
|
C derleyicilerinden bazıları yukarıdaki tabloya ek olarak bazı anahtar kelimeler daha kullanmaktadırlar. Bu kelimelerden en çok kullanılanlar aşağıda gösterilmektedir:
Devamı...
İşlem satırı
main() fonksiyonu ve diğer fonksiyonlarda yer alan ve noktalı virgül (;) karakteri ile sona eren satırlara işlem satırı adı verilir. Şimdi, işlem satırlarının hangi değerlerden oluşabileceğini incelemeye çalışalım:
İşlem satırı bir değişken bildirimi, değişkene bir değer atama, aritmetik bir ifade, bir fonksiyon çağrısı veya bir döngü içerebilir.
Devamı...
İlk program
C Programlama Dili’nde büyük ve küçük harflere farklı işlem yapılmaktadır:
Örneğin: “Fonksiyon” ve “fonksiyon” kelimeleri tamamen farklı kabul edilir.
Şimdi, en basit şekilde oluşturulmuş ilk C programımızı incelemeye çalışalım:
Devamı...
C Programlamaya Giriş
Bu bölüme başlamadan önce, C programlama dilinin gelişim tarihine kısaca bir göz atalım. Daha sonra, bir C programının temel yapısını oluşturan elemanları, en basit program yapısından itibaren basamak basamak ilerleyerek incelemeye çalışacağız.
C Programlama Dilinin gelişimi
C dilinin temelleri Martin Richards tarafından geliştirilen BCPL adlı dil ile atılmıştır. Sonra, BCPL dilinden esinlenerek, Ken Thompson B adlı dili oluşturmuştur. B dili, C dilinin oluşturulmasında bir basamak olarak kullanılmıştır. Daha sonra ise, C dili Brian Kernighan ve Dennis Ritchie tarafından geliştirilmiştir.
C dili içinde kullanılan standartlar 1983 yılına kadar, yine Brian Kernighan ve Dennis Ritchie tarafından yazılan “The C Programming Language” adlı kitapta belirlendiği şekilde uygulanmıştır. Zamanla daha yaygın bir şekilde kullanılmaya başlayan C için gereksinim duyulan yeni standartları belirlemek amacıyla 1983 yılında toplanan bir komite, ANSI C standartları adı verilen standartları oluşturmuştur. Burada kullanılan ANSI kelimesi “American National Standart Institute” kelimelerinin kısaltılmış şeklidir. 1983 yılından itibaren, C programlama dili için bütün dünyada ANSI C standartları uygulanmaya başlamıştır.
Günümüzde C dilinin bu sürümü “ANSI C” veya “C89” adı ile anılır.
Devamı...
Kaynak dosyaların içine bazen programın daha kolay anlaşılması için açıklayıcı satırlar eklenebilir. Bu satırlara Yorum Satırı adı verilir. Yorum satırlarının yazılan programla herhangi bir ilgisi yoktur. Sadece, programı inceleyenlerin, programı daha kolay bir şekilde anlamalarına yardımcı olur. Ayrıca, geçici olarak iptal etmek istediğimiz işlem satırlarını silmeden devre dışı bırakmak için de yorum satırı kavramını kullanabilirniz. Yorum satırlarına derleyici tarafından kesinlikle herhangi bir işlem yapılmaz. Yorum satırları sanki hiç yokmuş gibi işlem görür.
Yorum satırı /* işaretleri ile başlar ve */ işaretleri ile sona erer. Yorum satırı kullanılan bir programı incelemeye çalışalım:
Örnek
Devamı...
Programa başlık dosyası dahil etme
Başlık dosyasının kullanımını bir örnek üzerinde incelemeye çalışalım:
Devamı...
Python’un Itertool‘u, karmaşık döngüler üretmek için döngüler ve listeler üzerinde çalışan çeşitli işlevler sağlayan bir modüldür .
Bu modül, yineleyici cebiri oluşturmak için kendi başına veya kombinasyon halinde kullanılan hızlı, belleği verimli kullanan bir araç olarak çalışır .
Örneğin, iki liste olduğunu ve bunların öğelerini çarpmak istediğinizi varsayalım. Bunu başarmanın birkaç yolu olabilir. Naif yaklaşım, yani her iki listenin öğelerini aynı anda yineleyerek ve bunları çarparak kullanılabilir . Başka bir yaklaşım da, map fonksiyonunu kullanmak, yani mul operatörünü harita fonksiyonuna birinci parametre olarak ve Lists’i bu fonksiyona ikinci ve üçüncü parametre olarak iletmek olabilir. Her yaklaşımın aldığı zamanı görelim.
Devamı...
Pandas ile ilgili bu yazımızda veri çerçevesi (DataFrame) isimli veri yapısını ele alacağız. Önceki yazımızda etiketli verilerden oluşan serileri görmüştük. Seriler tek boyutlu bir veri yapısıyken, veri çerçevelerini her sütunu bir seriden oluşan iki boyutlu bir matris olarak düşünebiliriz. Serilerde bahsettiğimiz birçok yöntemi veri çerçevelerinde de kullanmak mümkün. Ayrıca SQL tablolarında kullanılan tablo birleştirme (JOIN) gibi işlemleri de Pandas ile yapmak mümkün.
Veri Çerçeveleri
Veri çerçevelerini birden fazla serinin bir araya gelmiş hali olarak düşünebiliriz. Veri çerçeveleri de seriler gibi etiketli bir veri yapısıdır, ancak serilerden farkı iki boyutlu olmasıdır. Serilerdeki gibi etiket değerlerine indeks (index) denir. Veri çerçeveleri index alanının yanında columns alanını da içeriyor. columns sütunların isimlerini içeren bir sıralı nesne.
Veri çerçevesi oluşturmak için serileri kullanmak mümkün. Linkten erişebileceğiniz IMF’nin gayrisafi yurt içi hasıla verisi ile ilk denemeyi yapabiliriz. 2016 ve 2017 yılları için serileri anlattığımız yazıdaki veri kümelerini oluşturalım.
In [1]:
Devamı...
Pandas veri analitiği alanında, özellikle veri işleme ve analizi için sıklıkla kullanılan bir Python paketi. Pandas paketi seri (Series) ve veri çerçevesi (DataFrame) isimli iki veri yapısının üzerine kurulmuş. Bunlardan serileri tek boyutlu diziler, veri çerçevelerini ise iki boyutlu matrisler (ya da her kolonu bir seriden oluşan yapı) gibi düşünebiliriz. Ancak Pandas paketi liste ve matrislerden farklı işlevler sunuyor. Örnek olarak SQL tablolarında kullanılan tablo birleştirme (join) gibi işlemleri de Pandas sayesinde yapmak mümkün.
Pandas paketiyle yapabileceğimiz temel işlemleri aşağıda bulabilirsiniz:
- Veriyi çeşitli formatlardaki dosyalardan okutmak ve dosyalara yazdırmak mümkün.
Pandas, metin ve Excel dosyalarının yanında, Stata ve SAS gibi yazılımların formatlarını da destekliyor.
- Eksik değerleri doldurmak/çıkarmak için yöntemler içeriyor.
- Çeşitli veri çerçevelerini birleştirmek (SQL dilindeki JOIN ve MERGE işlemleri) mümkün.
- Farklı türlerde grafikler çizdirebiliriz.
- Groupby fonksiyonu sayesinde veriyi gruplara bölerek, yapacağımız işlemlerle (toplama, sayma, ortalama alma gibi) özetleyebiliriz.
Groupby konusunda yazdığımız detaylı bir yazıya linkten erişebilirsiniz.
Pandas ile ilgili yazı serisinin ilk bölümünde seri veri yapısını inceleyeceğiz. Burada kullandığımız yöntemlerin çoğu veri çerçeveleri için de geçerli olacaktır. Pandas serilerine giriş amacıyla IMF’nin gayrisafi yurt içi hasıla verisini kullanacağız. Detaylı veri setine linkten erişebilirsiniz. Ben küçük bir örneklemle çalıştığım için veriyi okutmayla ilgili kısımlara, veri çerçeveleriyle ilgili yazıda değineceğim.
Seriler
Seri, etiketli verilerden oluşan tek boyutlu bir veri yapısıdır. Etiket değerlerine indeks denir. Verinin kendisi sayılar, dizeler ya da başka Python objelerinden oluşabilir. Serileri oluşturmak için listeler, sıralı diziler ya da sözlükler kullanılabilir. 10 ülkenin 2017 yılının GSYİH değerlerinden oluşan bir seri oluşturalım. Dikkat etmemiz gereken nokta indeks ve verinin aynı boyutta olması. Bunu sağlayamazsak hata mesajı alacağız.
In [1]:
Devamı...
Pandas paketi veri analizi ve işlemesi için hazırlanmış bir Python paketidir. Bu paket çeşitli formatlardaki dosyaları (Excel, Csv, Txt gibi) okumayı, bu formatlarda dosyalar oluşturmayı kolaylaştırır. Aynı zamanda pandas paketi ile oluşturulan veri çerçeveleri (dataframe) sayesinde farklı formatlardaki (sayı, metin, tarih) veriyi birlikte tutmak, bu verileri işlemek ve basit analizler yapmak mümkündür.
Pandas paketinin altındaki bir yöntem olan groupby() ham haldeki veriden (örnek olarak alışveriş verisi) çeşitli istatistikler çıkarmak için oldukça yararlı bir araç. Bu Veri Defteri’nde UCI Machine Learning Repository’de bulunan online satış verisini kullanacağız. İlk olarak veriyi okutarak ve boyutlarına bakarak başlayalım. Veriyi indirmek için tıklayınız.
In [1]:
Devamı...
Problem çözmede, soruna hemen girişmek yerine, dikkatli ve sistematik yaklaşım ilke olmalıdır. Problem iyice anlaşılmalı ve mümkün olduğu kadar küçük parçalara ayırılmaladır.
Descartes tarafından “Discourse on Method” isimli kitabında anlatılan problem çözme teknikleri;
- Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının.
- Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün.
- Düzenli bir biçimde düşünün; anlaşılması en kolay olan şeylerle başlayıp yavaş yavaş daha zor ve karmaşık olanlara doğru ilerleyiniz.
- Olaya bakışınız çok genel, hazırladığınız ayrıntılı liste ise hiçbir şeyi dışarıda bırakmayacak kadar kusursuz ve eksiksiz olsun.
Algoritmalar
Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.
İ.S. 9.yy da İranlı Musaoğlu Horzumlu Mehmet (Alharezmi adını araplar takmıştır) problemlerin çözümü için genel kurallar oluşturdu. Algoritma Alharezmi’nin Latince okunuşu.
Her algoritma aşağıdaki kriterleri sağlamalıdır.
- Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli.
- Çıktı: En azından bir değer üretilmeli.
- Açıklık: Her işlem (komut) açık olmalı ve farklı anlamlar içermemeli.
- Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli.
- Etkinlik: Her komut kişinin kalem ve kağıt ile yürütebileceği kadar basit olmalıdır.
Not: Bir program için 4. özellik geçerli değil. işletim sistemleri gibi program sonsuza dek çalışırlar .
Örnekler
Algoritmaların yazım dili değişik olabilir. Günlük konuşma diline yakın bir dil olabileceği gibi simgelere dayalı da olabilir.
Akış şeması eskiden beri kullanıla gelen bir yapıdır. Algoritmayı yazarken farklı anlamlar taşıyan değişik şekildeki kutulardan yararlanılır. Yine aynı amaç için kullanılan programlama diline yakın bir (sözde kod = pseudo code) dil , bu kendimize özgü de olabilir, kullanılabilir.
Aynı algoritmayı aşağıdaki gibi yazabiliriz.
- T=0 ve i=0
- i’nin değerini T’ye ekle.
- i’yi 1 arttır.
- i<101 ise 2.adıma git.
- T’nin değerini yaz.
- İki tamsayının çarpma işlemini sadece toplama işlemi kullanarak gerçekleyin.
Girdi : iki tamsayı
Çıktı : sayıların çarpımı
- a ve b sayılarını oku
- c =0
- b>0 olduğu sürece tekrarla
- c değerini yaz ve dur
- İki tamsayının bölme işlemini sadece çıkarma işlemi kullanarak gerçekleyin. Bölüm ve kalanın ne olduğu bulunacak.
- a ve b değerlerini oku
- m=0
- a>=b olduğu sürece tekrarla
- kalan a ve bölüm m ‘yi yaz
- 100 tane sayıyı okuyup, ortalamasını bul
- T=0, i=0
- i<101 olduğu sürece tekrarla
- m değerini oku
- T = T + m
- i = i + 1
- T = T / 100
- Ortalama T ‘yi yaz
- Dur
- Bir sınava giren öğrencilerin not ortalamasının hesaplanması
- Tüm sınav kağıtlarını inceleyip notların toplamını hesapla
- Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla
- Ortalamayı yaz.
- Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et
- Sıradaki sınav kağıdının notunu notların toplamına ekle
- İncelenen sınav kağıdı sayısını Bir arttır
- İncelenecek sınav kağıdı var ise 2. Adıma git
- Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hasapla
- Ortalamayı yaz
- Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et
- Her bir sınav kağıdı için
- Sıradaki sınav kağıdının notunu notların toplamına ekle
- İncelenen sınav kağıdı sayısını bir arttır
- Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla
- Ortalamayı yaz
13.1 Nesne yönelimli programlama
Python nesne yönelimli programlama dilidir, bunun anlamı nesne yönelimli programlamanın (Object Oriented Programming - OOP) desteklediği özellikleri sağlar.
Nesne yönelimli programlama 1960larda ortaya çıkmasına rağmen 1980lerin ortasına kadar yeni yazılım üretmede ana programlama paradigması haline gelmedi. Hızlı bir şekilde büyüyen ve karmaşıklaşan yazılım sistemlerini kotarmak ve bu büyük ve karmaşık sistemleri zaman içerisinde daha kolay değiştirmek için geliştirilmiştir.
Şu ana kadar programları yordamsal (procedural) programlama paradigmasını kullanarak yazdık. Yordamsal programlamada fonksiyonları veya yordamları yazmaya odaklanma sözkonusudur. Fonksiyonlar/yordamlar veri üzerinde işlem yaparlar. Nesne yönelimli programlamada odak nesnelerin yaratılmasındadır, nesneler hem veriyi hem de işlevselliği birlikte barındırır.
Devamı...
Şimdiye kadar incelediğimiz tüm bileşik tipler – karakter dizileri, listeler, ve çok öğeliler (tuple) – ardışık tiplerdir, içerdikleri değerlere erişmek için tamsayılar indis olarak kullanılır.
Sözlükler farklı bileşik tiplerdir. Python’un yerleşik eşleştirme tipidir. Değişmez, sabit olan Anahtarları (key) herhangi bir tipteki değerlere eşler, aynı çok öğeli veya listelerdeki değerler gibi.
Örnek olarak, Türkçe kelimeleri İspanyolca’ya çeviren bir sözlük yaratacağız. Bu sözlük için anahtarlar karakter dizisidir.
Sözlük yaratmanın bir yolu boş bir sözlükle başlamak ve daha sonra anahtar-değer çiftleri eklemektir. Boş sözlük {} ile gösterilmektedir:
Devamı...
11.1 Tuplelar ve değişebilirlik
Şimdiye kadar iki bileşik tip gördünüz: karakter dizileri, karakterlerden oluşmaktadır; ve listeler, herhangi bir tipte öğelerden oluşmaktadır. Bu iki bileşik tip arasındaki farklardan biri listenin öğelerinin değiştirilebilir olduğu, karakter dizisindeki karakterlerin değiştirilemez olduğuydu. Başka bir deyişle, karakter dizileri değiştirilemez (immutable) ve listeler değiştirilebilir (mutable) tiplerdir.
Devamı...
10.1 Modüller
Modül, diğer Python programları tarafından kullanılmak üzere Python tanımlamaları ve cümlelerini içeren bir dosyadır. Python’la birlikte standart kütüphanenin parçası olarak gelen bir çok Python modülü vardır. Bunlardan iki tanesini daha önce gördük, doctest ve string modülleri.
10.2 pydoc
pydoc modülünü sistemde kurulu olan Python kütüphanelerini içerisinde arama yapmak için kullanabilirsiniz. Komut satırında aşağıdakini yazın:
Devamı...
liste sıralı değer kümesidir, her bir değer bir indis ile erişilmektedir. Listeyi oluşturan değerlere öğeler denilmektedir. Listeler karakter dizilerine, karakterlerden oluşan sıralı kümeler, benzer, tek farkı listelerin öğeleri herhangi bir tipte olabilir. Listeler ve karakter dizileri – ve sıralı küme şeklinde davranan diğer şeyler – diziler (sequences) adını almaktadır.
9.1 Liste değerleri
Liste yaratmanın bir çok yolu vardır; en kolayı öğeleri köşeli parantezlerle ([ ve ]) kapsamaktır:
Devamı...
8.1 Karakter Dizilerinin Metotları
Geçen bölümde karakter dizilerinin genel özelliklerinden söz ettik. Bu bölümde ise karakter dizilerini biraz daha ayrıntılı bir şekilde incelemeye ve karakter dizilerinin yepyeni özelliklerini görmeye başlayacağız.
Metotlar Python’da nesnelerin niteliklerini değiştirmemizi, sorgulamamızı veya bu nesnelere yeni özellikler katmamızı sağlayan araçlardır. Metotlar sayesinde karakter dizilerini istediğimiz gibi eğip bükebileceğiz.
Devamı...
7.1 Bileşik veri tipi
Şimdiye kadar beş tip gördük:int, float, bool, NoneType ve str. Karakter dizileri (str) diğer dört tipten nitelik olarak farklıdır çünkü daha küçük parçalardan (karakterler) oluşmuştur.
Daha küçük parçalardan oluşan tiplere bileşik veri tipleri adı verilir. Ne yaptığımıza bağlı olarak, bileşik veri tipine tek bir şeymiş gibi davranabilir veya parçalarına erişmek isteyebiliriz. Bu belirsizlik yararlıdır.
Devamı...
Döngü veya Yineleme (Tekrarlamalı)
Bilgisayarlar sıklıkla tekrarlayan görevleri otomatikleştirmek için kullanılmaktadır. Aynı veya benzer görevleri hatasız bir şekilde tekrarlama işlemi bilgisayarların iyi yaptığı, insanların ise zorlandığı bir şeydir.
Bir komutlar kümesinin tekrar tekrar yürütülmesi işlemine yineleme (iteration) adı verilir. Yineleme çok yaygın olduğu için, Python bunu kolaylaştırmak için birkaç özellik sağlar.
Bu konuya girmeden önce, birkaç fikirin üstünden yeniden geçelim.
Devamı...