C dilinde For döngüsü ve örnekleri

Benzer belgeler
Java da Dizi Tanımlama

Yrd. Doç. Dr. Caner ÖZCAN

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Bilgisayar Programlama. 1.Hafta

Yrd. Doç. Dr. Caner ÖZCAN

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

YMT219 VERİ YAPILARI ÖDEV-1

JAVA DÖNGÜ DEYİMLERİ. For Döngüsü

Hafta 13 Fonksiyonlar

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

ALGORİTMA VE PROGRAMLAMA II

C PROGRAMLAMA D İ L İ

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Yrd. Doç. Dr. Caner ÖZCAN

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

ALGORİTMA VE PROGRAMLAMA I

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

Pointer Kavramı. Veri Yapıları

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

NESNEYE YÖNELİK PROGRAMLAMA

Diziler (Arrays) Çok Boyutlu Diziler

Dr. Fatih AY Tel: fatihay@fatihay.net

Naive Bayes Sınıflandırıcısı

HSancak Nesne Tabanlı Programlama I Ders Notları

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

Bölüm 9. Altprogramlar ISBN

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

ALGORİTMA VE PROGRAMLAMA II

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

Dr. Fatih AY Tel:

ALGORİTMA VE PROGRAMLAMA I

Algoritma ve Programlama: Karar Yapıları ve Döngüler

The Big O Notation. The Big O Notation

C dilinde if-else yapısı

İnternet Programcılığı Öğr. Gör. Serkan AKSU PHP de Dizi-Değişkenler, Nesneler. Dizi Oluşturma. Tek Boyutlu Diziler

BİLG Dr. Mustafa T. Babagil 1

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA II

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

Akış Kontrol Mekanizmaları

Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

BİL1001 Bilgisayar Bilimlerine Giriş 1

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Sunum İçeriği. Programlamaya Giriş

D İ Z İ L E R A R R A Y S

Alıştırma 1: Yineleme

Özyineleme (Recursion)

Programlama Dilleri 1. Ders 4: Diziler

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Hafta 7 C Programlama Diline Giriş ve C Derleyicisi

ALGORİTMA VE PROGRAMLAMA I

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

2. Dereceden Denklemin Köklerini Bulan Program

Sınav Dağılım & IMKB Endeks

Bölüm 2 - C ile Programlamaya Giriş

Genel Programlama II

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Dr. Fatih AY Tel: fatihay@fatihay.net

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

ELN1001 BİLGİSAYAR PROGRAMLAMA I

2) /* Kullanıcıdan alınan iki sayının obebini alt fonksiyon yardımı ile hesaplayan C programı*/

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

C++ Dersi: Nesne Tabanlı Programlama

1 PROGRAMLAMAYA GİRİŞ

Giriş. ENF102 Jeoloji

ALGORİTMA VE PROGRAMLAMA II

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Nesne Yönelimli Programlama

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

Yrd. Doç. Dr. Caner ÖZCAN

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

ELN1001 BİLGİSAYAR PROGRAMLAMA I

8. İŞARETCİLER (POINTERS)

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-7 C Programlama Diline Giriş

Transkript:

C dilinde For döngüsü ve örnekleri Döngü (loop) deyimleri, bir kümenin belli bir koşul altında tekrar edilmesi için kullanılır. C programlama dilinde, while, do while ve for olmak üzere üç tip döngü deyimi vardır. Diğer programlama dillerinde olduğu gibi, bu deyimlerle istenildiği kadar iç-içe döngü yapısı kullanılabilir. Ben sizlere sadece for döngüsünden bahsedeceğim, sitedeki paylaşımlar içerisinde diğer döngülere de ulaşabilirsiniz For dögüsü For döngüsün kalıbı şu şekildedir; for (int i=0;i<=10;i++) printf( %d-yazilimagiris.com\n,i); //Belirlediğimiz i değişkenini sıfırdan başlatıyoruz ve istediğimiz değere(10) ulaşana kadar parantez içerisindeki işlem tekrar ediliyor

Koşulu ve işlemi gördüğünüz gibi tek satırda halledebiliyoruz, bu yüzden kullanımı daha kolay ve pratiktir bu sebeple while döngüsüne göre daha fazla kullanılır. Şimdi 10 a kadar olan pozitif sayıların toplamını hesaplayan bir program yazarak for döngüsünün mantığını daha iyi anlamaya çalışalım. 1. #include <stdio.h> 2. int main() 3. 4. int i,toplam; 5. toplam=0; 6. for(i=1;i<=10;i++) 7. toplam+=i; // Her adımda i değeri toplam değişkenine ekleniyor. 8. 9. printf( Toplam = %d,toplam); 10. return 0; 11.

Kodlamayı açıklamak gerekirse, for döngüsüne girdiğimizde i değişkenine 1 değerini atıyoruz ve her adımda i++ operatörü ile birer birer artmasını sağlayarak son değer olarak belirlediğimiz 10 a kadar gitmesini sağlıyoruz, i değeri 11 olduğu zaman i<=10 koşulunu sağlamayacağı için döngüye devam etmeyecektir. Döngünün içerisinde ki işlemlerde ise her i değerini daha önce belirlediğimiz toplam isminde ki değişkenine ekliyor (burada toplam+=i; yerine toplam=toplam+i; de yazılabilirdi.) ve 10 a kadar olan sayıların toplamını hesaplamış oluyor. İç içe for döngüsü C de döngüleri tek başına kullanabileceğiniz gibi, birbiri içinde de kullanabilirsiniz. Eğer bir döngüyü, başka bir döngünün kod bloğu içinde tanımlarsanız, iç içe döngü oluşturulmuş olur. ANSI C standartlarına göre en az 15 adet döngü birbiri içinde tanımlanabilmelidir. Şimdi basit bir örnek üzerinde bu özelliği inceleyelim: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. #include <stdio.h> #include <conio.h> main() int id1, id2; for (id1=0; id1<5; id1++ ) for (id2=0; id2<10; id2++) printf( %d, id2); printf( \n ); Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar: 0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 Program, önce ilk for döngüsünde id1 değişkenine 0 değerini atar. Koşul bölümünde doğru bir sonuç elde ettiği için ilk for döngüsü ile ilgili kod bloğunu çalıştırır. Kod bloğu içindeki for döngüsüne ait id2 değişkenine 0 değerini atar. Koşul bölümünde doğru bir sonuç elde ettiği için ikinci for döngüsü ile ilgili işlem satırını çalıştırır ve ekrana 0 değerini yazar. İkinci döngü, daha önce gördüğümüz gibi, id2 değişken değeri 10 dan küçük olduğu sürece çalışmasına devam eder ve ekrana aşağıdaki satırı yazar: 0 1 2 3 4 5 6 7 8 9 İkinci for döngüsü sona erdiğinde program kod bloğu içinde yer alan ikinci satır ile satır başı yapar. Daha sonra program ilk for döngüsünde id1 değişkeninin değerini 1 artırarak tekrar kod bloğunu çalıştırır. İlk for döngüsü de id1 değişken değeri 5 den küçük olduğu sürece çalışmasına devam eder. İlk for döngüsünün her tekrarında kod bloğunda yer alan ikinci for döngüsü 10 defa tekrar eder. Örnekler; 1-Üs alma oyunu

Bu örnekte, program sizden 1 den 10 a kadar olan sayıların karelerini sıra ile girmenizi ister. Sonra, doğru ve yanlış cevap sayısını kaydederek ekrana yazar. 1. 3. 4. 5. 7. 8. 9. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. #include <stdio.h> main() int id1, id2, id3=0, id4=0; for (id1=1; id1<10; id1++) printf( %d sayisinin karesi kac eder?, id1); scanf( %d, &id2); if(id2 == id1 * id1) printf( Cevabiniz dogrudur!\n ); id3++; else printf( Cevabiniz yanlistir!\n\a ); printf( Dogru cevap %d sayisidir!\n, id1 * id1); id4++; printf( \ndogru cevap sayisi : %d yanlis cevap say : %d, id3, id4); 23. Örnek 2

Program, bir for döngüsü içinde 1 den 10 a kadar olan sayıların kendinden küçük sayıların toplamını fonk1() fonksiyonu içindeki bir döngüyü kullanarak ekrana yazar. Burada, fonk1() fonksiyonunun direk olarak printf() fonksiyonunun bir argümanı olarak aynı satırda tanımlandığına dikkat ediniz. 1. 3. 4. 5. 7. 8. 9. 10. 12. 13. 14. 16. 18. 19. #include <stdio.h> main() int id1; for (id1=1; id1<10; id1++) printf( %d sayısı altındaki sayılar toplamı: %d\n, id1, fonk1(id1)); fonk1(int id1) int id2, id3=0; for (id2=1; id2<id1; id2++) id3 = id3 + id2; return id3; Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar: 1 sayısı altındaki sayılar toplamı: 0 2 sayısı altındaki sayılar toplamı: 1 3 sayısı altındaki sayılar toplamı: 3 4 sayısı altındaki sayılar toplamı: 6 5 sayısı altındaki sayılar toplamı: 10 6 sayısı altındaki sayılar toplamı: 15

7 sayısı altındaki sayılar toplamı: 21 8 sayısı altındaki sayılar toplamı: 28 9 sayısı altındaki sayılar toplamı: 36 Hazırlayan Çağrı KONCA C Dilinde Dallanma Komutu (goto) & Etiket Kullanımı C Dilinde Dallanma Komutu (goto) & Etiket Kullanımı Kodların takibini ve okunmasını zorlaştırdığı ve yapısal programlamaya aykırı olduğu için goto komutu pek tavsiye edilen bir komut değildir. Her ne olursa olsun C dilinde goto komutu vardır ve bilinmesinde fayda vardır. goto komutu veya goto komutuna benzeyen dallanma komutları özellikle assembly de çok kullanılır; gerek 8086 işlemciyle çalışanlar veya gerekse PIC mikrokontrolör ile kod yazanlar bu ve buna benzer komutları kullanmak zorunda kalırlar. goto komutunun çalışabilmesi için öncelikle bir etiket oluşturulmalıdır. Etiket belli bir satıra verilen isimdir. Etiket oluşturulduktan sonra belli bir şart sağlandığında program etiketin olduğu satıra gönderilir. Goto komutu ve

etiket aşağıdaki gibi kullanılabilir. komut 1; komut 2; etiket: komut 3; komut 4; goto etiket; //etiketin olduğu satıra git. [crayon-59628d9c15f22200683025/] Sadece Pozitif Sayıların Karesini Alan Program [crayon-59628d9c15f34467238475/]

Time.h kütüphanesi C dilinde mevcut zamanı almak ve işlemek mümkündür. Bunun için time.h dosyasının içerisinde bulunan fonksiyonlar kullanılabilir. Ayrıca time.h dosyasında bulunan time_t oluşumu (struct) zaman tutmak için geliştirilmiştir ve zamanı oluşturan alt unsurları da içerir. Örneğin şu andaki zamanı ekrana basmak için aşağıdaki kod kullanılabilir: [crayon-59628d9c17038409131547/] Örneğin bir kullanıcıdan yazı okuyan ve ne kadar zamanda okuduğunu ekrana basan kod aşağıdaki şekilde yazılabilir: [crayon-59628d9c17043206361800/] Çıktısı aşağıdaki gibidir

Yukarıdaki time_t yapısı oldukça kullanışlı olmasına karşılık mikro saniye gibi düşük zamanları algılamakta yetersizdir. Bunun için biraz daha detaylı çalışan timeeval yapısından ve gettimeofday fonksiyonundan faydalanılabilir: [crayon-59628d9c1704c286539544/] [crayon-59628d9c17054144562974/] [crayon-59628d9c1705b398436588/] [crayon-59628d9c17063941587214/] [crayon-59628d9c1706a774330646/] [crayon-59628d9c17071468033725/] [crayon-59628d9c17077690460236/] [crayon-59628d9c1707e300894036/] Örneğin yukarıdaki kodda iç içe 3 döngü içerisinde ekrana deneme yazdırılıyor (toplam 100x256x10 tane) bu işlemin aldığı vakti ölçmek için gettimeofday fonksiyonundan faydalanılmış ve en sonunda da fark hesaplanmış. Burada eksik olan getdiff fonksiyonu aşağıdaki şekilde yazılabilir: [crayon-59628d9c17086988684616/] Hazırlayan : Alpay Aygün Kaynakça : http://bilgisayarkavramlari.sadievrenseker.com/2009/01/01/c-

ile-zaman-islemleri/ C ve C++ Arasındaki Farklar C ve C++ ARASINDAKİ BAZI FARKLILIKLAR C++, C nin gelişmiş şeklidir ve sanal larak tüm C programları aynı zamanda C++ programıdır. Fakat araların da bazı küçük farklılıklar da mevcuttur. Şimdi isterseniz bu farklar arasında duralım. 1-) C++ ın en başta gelen farklılığı ise Nesne Yönelimli olmasıdır. Buna karşın C fonksiyonel bir dildir. Peki tam olarak nedir Nesnel Yönelimli Programlama? Kısaca değinecek olursak; C dilinde (veya fonksiyonel herhangi bir dilde) program yazarken programımızı fonksiyonlara parçalar ve tasarlardık. Yani programımızın temel parçası fonskyionlar idi. C++ da ise programlarımızın temel birimi nesnelerdir. 2-) C de fonksiyonun parametresi yoksa, prototipin fonksiyon parametre listesinde void kelimesi bulunur. Örneğin C de f1( ) adlı bir fonksiyonun parametresi yoksa(ve geriye bir char gönderiyorsa) bu fonksiyonun prototipi şu şekilde olur: char f1(void); Fakat C++ da void in yazılması isteğimize bağlıdır. Sonuç olarak C++ da f1( ) in prototipi genelde şu şekildedir: char f1(); C++,paremetre listesi boş da olsa onu belirler ve bu yönüyle C den farklıdır. Eğer üstteki prototip bir C programında bulunsaydı fonksiyona parametreler hakkında hiçbir şey

söylenmemiş olacaktı. C++ da ise bu, fonksiyonun parametresi olmadığı anlamına gelir. 3-) Bir C++ programında tüm fonksiyonların prototipi bulunmak zorundadır. Unutmayın C de prototiplerin kullanımı önerilir fakat bunların kullanımı teknik olarak isteğimize bağlıdır. C++ da ise prototipler gereklidirler. Örneğin sınıfa ait fonksiyonun prototipi aynı zamanda genel bir prototip olarak da rol oynar ve bu prototipten başka prototipe gerek kalmaz. 4-) Eğer fonksiyon C++ da, geriye değer gönderecek şekilde deklare edilmişse, bu fonksiyon, bu değeri göndermek zorundadır. Yani eğer fonksiyon void haricinde bir şey geri döndürüyorsa bu fonksiyonun içindeki herhangi bir return deyimi, bir değer içermelidir. C de ise void içermeyen fonksiyonların aslında geriye değer döndürmesi şart değildir. Eğer fonksiyon herhangi bir değer döndürmüyorsa saçma bir değer döndürülür. 5-) C de fonksiyonun döndüreceği sonucun tipini tam olarak belirlemezseniz bu tipin tamsayı olduğu varsayılır. C++, tamsayı kabulü kuralını bozmaktadır. Bu yüzden tüm fonksiyonların return tipini tam olarak deklare etmeniz gerekir. 6-) Yerel değişkenlerin deklare edilebileceği yerle ilgilidir. C de yerel değişkenler sadece blokların başında herhangi bir iş deyiminden önce deklare edilebilir. C++ da yereş değişkenler her yerde deklare edilirler. Bu yöntemin avantajlarından biri, yerel değişkenlerin ilk kullanıldıkları yere yakın yerde tanımlanabilmesi ve böylelikle istenmeyen yan etkilerden kurtulunmasıdır. 7-) C++ ın bool veri tipini tanımasıdır. Bu veri tipi, Boolean (örn: doğru/yanlış) değerleri saklamak için kullanılır. C++ aynı zamanda true (doğru), false (yanlış) anahtar kelimelerini de tanır. bool tipi sadece bu iki değeri alabilir. C++ da karşılaştırma ve mantık işlemlerinin sonucu bool tipinde bir

değerdirve tüm koşullu deyimler bir bool değeri almalıdır. İlk başta bu durum çok büyük bir değişiklikmiş gibi görünebilir, fakat durum böyle değildir. Hatta bu, gerçekte gözle bile görünmeyecek kadar küçük bir farktır, çünkü C de true sıfır olmayan herhangi bir değerdir ve false 0 dır. Bu C++ da da geçerlidir, bir Boolean ifade kullanıldığında sıfır olmayan herhangi bir değer otomatik olarak true ya ve herhangi bir 0 değeri ise otomatik olarak false a dönüştürülür. Bunun tersi de doğrudur: Bir bool değeri bir tamsayı ifadede kullanılıldığında true 1 e,false da 0 a dönüştürüşür bool un eklenmesi daha fazla tip denetimi yapmamıza izin verir, Boolean ve tamsayı tiplerini bibirinden ayırmamızı sağlar. Tabi ki kullanımı isteğimize bağlıdır, fakat bool un oldukça kullanışlı olduğunu hatırlatmakta fayda var. 8 -) Bazı fonksiyonlar kendi içerisinde çeşitli işlemler yaptıktan sonra yaptığı işleminsonucunu kendisini çağıran fonksiyona bildirirler. Bu değere geri dönüş değeri adı verilir. Geri dönüş değerinin hangi türden olacağını belirten alana fonksiyon tipi denir. C de fonksiyonun geri döndürecek bir sonucu yoksa o fonksiyonun tipi void olmalıdır. 9-) C ve C++ arasında küçük, fakat potansiyel olarak önemli bir fark şudur : C de bir karakter sabit otomatik olarak bir tam sayıya yükseltilir, C++ da ise bu şekilde olamaz. 10-) C de global bir değişkenin birkaç defa deklere edilmesi, her ne kadar kötü bir programlama uygulaması olsada, hata değildir. C++ da bu bir hatadır. 11-) C de bir belirticinin en azından 32 önemli karakteri olacaktır. C++ da tüm karakterler önemli kabul edilir. Fakat, olaya pratik açıdan bakacak olursak aşırı uzun belirticiler hantaldırlar ve seyrek kullanırlar. 12-)

C de pek normal bir şey olmasa da main() i bir program içerisinden çağırabilirsiniz. C++da buna izin verilmez. 13-) C de register değişkeninin adresini alamazsınız. C++ da bunu yapabilirsiniz. 14-) C de wchar_t tipi typedef ile tanımlanmıştır. C++da wchar_t bir anahtar kelimedir. KAYNAK -C++ temel ögrenim kılavuzu kitabı -gokhanbeken.com/c vec++ arasındaki farklar HAZIRLAYAN Sedanur YEŞİLTAŞ C dilinde Dinamik Bellek Yönetimi C de dinamik memory yönetiminde kullanılabilir 4 tane fonksiyon vardır. Bunlar: 1. 2. 3. 4. malloc calloc realloc free fonksiyonlarıdır.şimdi teker teker bu fonksiyonları inceleyelim. malloc: malloc fonksiyonu dinamik olan alan tahsis edilmesi için kullanılır. Prototipi aşağıdaki gibidir:

void *malloc(size_t size) Fonksiyona parametre olarak verilen boyut kadar alan oluşturur ve alanın başlangıç adresini void * türünden bir adres olarak geri döndürür. calloc: calloc fonksiyonuda dinamik olan alan tahsis edilmesi için kullanılır. malloc ile farkı ise calloc un ayırdığı hafıza bloğunun içeriğini sıfırlaması olmaktadır. Prototipi aşağıdaki gibidir : void *calloc(size_t nitems, size_t size) realloc: realloc fonksiyonu ise daha önce malloc veya calloc fonksiyonu ile tahsis edilmiş olan alanı büyütmek için kullanılır.void *realloc(void *ptr, size_t size)birinci parametre malloc,calloc veya realloc ile tahsis edilmiş olan alanın

başlagıç adresi ikinci parametre ise yeni boyut olarak bildirilmektedir. Free: Free fonksiyonu parametre olarak aldığı başlangıç adresinde tahsis edilmiş olan alanın boşaltılmasını sağlar. Yazılan programların çıktısı da aşağıdaki gibidir. KAYNAK : http://clearningtutorial.blogspot.com.tr/2014/05/cde-dinamik -hafza-yonetimi.html Hazırlayan : Fatih Mehmet Sağır

C Dilinin Tarihi AT&T Bell laboratuvarlarında, Ken Thompson ve Dennis Ritchie tarafından UNIX İşletim Sistemi ni geliştirebilmek amacıyla B dilinden türetilmiş yapısal bir programlama dilidir. Geliştirilme tarihi 1972 olmasına rağmen yayılıp yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan C Programlama Dili kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin (Microsoft Windows, GNU/Linux, *BSD, Minix) yapımında %95 lere varan oranda kullanılmış, halen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir. C Dilinin Erken Tarihi C nin ilk gelişme safhaları 1969 ile 1974 arasında AT&T Bell Labovatuarı nda gerçekleşti. Ritchie ye göre, en yaratıcı devre 1972 idi. Dilin pek çok özelliği B adlı bir dilden türediği için, yeni dile C adı verildi. B dili yorumlanan bir dildi ve veri tipi desteği yoktu. Yeni donanımların farklı veri tiplerini desteklemesi, ve yorumlanan dillerin çalışma zamanında görece yavaş olması sebebi ile, C dili, tip desteği eklenmiş ve derlenen B olarak geliştirildi. B adının kökeni konusunda ise söylentiler değişik: Ken Thompson B nin BCPL programlama dilinden türediğini söylemektedir, ancak Thompson eşi Bonnie nin onuruna adını

Bon koyduğu bir programlama dili de geliştirmiştir. 1973 e kadar C yeterince güçlü bir hale gelmiş ve ilk başta PDP-11/20 assembly dili ile yazılan UNIX in çekirdeğinin büyük kısmı C ile yeniden yazılmıştı. Böylece UNIX, çekirdeği bir assembly dili ile yazılmayan ilk işletim sistemlerinden biri olmuştu. Yazan:Yağız Can Dinç BUBLESORT ALGORİTMASI Bublesort Algoritması (Kabarcık Sıralama Algoritması) C Programlama Dili Bubble Sort Algoritması ile kullanıcının girdiği sayıları küçükten büyüğe sıralayan program kodu. Sıralama algoritmaları arasında en çok bilinen Bubble Sort (Kabarcık Sıralama) algoritmasını bulabilirsiniz. 1. Kullanıcıdan gireceği sayı adedi öğrenilir. 2. Kullanıcıdan sayılar alınır. 3. Girilen sayılar ekrana yazdırılır. 4. Bubble Sort algoritması ise sayılar küçükten büyüğe sıralandırılır ve dizinin yeni hali ekrana yazdırılır.

Sıralama algoritmalarının anlaşılması en kolay olanı Bubble Sorttur. Bubble Sort sayı dizisindeki ilk sayıyı alır ve kendisinden sonra gelen sayıyla karşılaştırır. İkinci sayı büyükse başa alır. Küçükse değişiklik yapmaz. Örnek : 6, 4, 8, 12, 7 sayı dizisi veriliyor ve bu sayıları büyükten küçüğe doğru sıralamamız isteniyor. 1adım : 6 yı 4 ile karşılaştırırz. 4 < 6 olduğu için sıralamada değişiklik olmaz. 2.adım : 4 ile 8 karşılaştırılır. 8 > 4 olduğundan 6, 8, 4, 12, 7 yeni sayı dizimiz olur. 3.adım : 4 ile 12 karşılaştırılır. 12 > 4 olduğundan 6, 8, 12, 4, 7 yeni sayı dizimiz olur. 4.adım : 4 ile 7 karşılaştırılır. 7 > 4 olduğundan 6, 8, 12, 7, 4 yeni sayı dizimiz olur. 5.adım : Başa dönüyoruz. 8 > 6 olduğundan 8, 6,

12, 7, 4 yeni sayı dizimiz olur. 6.adım : 12 > 6 olduğundan 8, 12, 6, 7, 4 yeni sayı dizimiz olur. 7.adım : 7 > 6 olduğundan 8, 12, 7, 6, 4 yeni sayı dizimiz olur. 8.adım : 4 < 6 olduğundan sayı dizimiz değişmez. 9.adım : Tekrar başa dönüyoruz. 12 > 8 olduğundan 12, 8, 7, 6, 4 yeni sayı dizimiz olur. 9.adımda sıralamamız sonra erer. Kaynak Kod: Bubble Sort C Kodu #include int main() static int k,dizi[100],i,x,boyut,temp; printf( Dizinin boyutunu giriniz : ); scanf( %d,&boyut); for(i=;i<boyut;i++) printf( Dizinin %d. elemanini giriniz :,i+1); scanf( %d,&dizi[i]); for(i=;i<boyut;i++) printf( %d\t,dizi[i]);

#include while(x<boyut) for(i=;i<boyut 1;i++) if(dizi[i]<dizi[i+1]) temp=dizi[i]; dizi[i]=dizi[i+1]; dizi[i+1]=temp; x=; else x++; printf( \n\n ); for(k=;k<boyut;k++) printf( %d\t,dizi[k]); return ; int main() static int k,dizi[100],i,x,boy printf( Dizinin boyutunu giriniz for(i=0;i<boyut; i++) printf( Dizinin %d. elemanini giriniz

for(i=0;i<boyut; i++) printf( %d\t,dizi[ i]); while(x<boyut) for(i=0;i<boyut- 1;i++) if(dizi[i]<dizi[ i+1]) temp=dizi[i]; dizi[i]=dizi[i+1]; dizi[i+1]=temp; x=0; else x++;

printf( \n\n ); for(k=0;k<boyut; k++) printf( %d\t,dizi[ k]); return 0; Kod Analiz: İlk olarak kullanıcıdan dizinin boyutunu ve dizinin elemanlarını teker teker aldık. Daha sonra aldığımız diziyi 1 sefer ekrana yazdırdık. While döngüsünün içerisindeki for döngüsünde dizinin her bir elemanını bir sonraki elemanla karşılaştırıp duruma göre yer değiştirdik. Karşılaştırma işleminde en son olarak son eleman ve ondan bir önceki karşılaştırılacağından for döngüsü dizinin boyutunun bir eksiği kadar döner. Büyükten küçüğe sıraladığımızı varsayalım. Eğer baktığımız eleman bir sonraki elemandan büyükse o zaman değişme işlemi yapılmayacak ve else kısmında x değişkeni 1 artacak. Eğer değişme olursa x değişkeni 0 olacak. Burada dikkat edilmesi gereken yer, eğer hiç bir değişme

işlemi yapılmazsa x değişkeni boyut değişkenine eşit olacak ve while döngüsünden çıkılacak. Yani hiç bir yer değiştirme işleminin yapılmaması demek dizi zaten sıralı halde demektir. Bu durumda dizi sıralı olduğu durumda while döngüsünden çıkılacak. Ekran Görüntüsü: C Dilinde Bubble Sort Algoritma Kodlaması Sayarak Sıralama (Counting Sort) algoritması Verinin hafızada sıralı tutulması için geliştirilen sıralama algoritmalarından (sorting algorithms) bir tanesidir. Basitçe sıralanacak olan dizideki her sayının kaç tane olduğunu farklı

bir dizide sayar. Daha sonra bu sayıların bulunduğu dizinin üzerinde bir işlemle sıralanmış olan diziyi elde eder. Sıralanmak istenen verimiz: 5,7,2,9,6,1,3,7 olsun. Bu verilerin bir oluşumun(composition) belirleyici alanları olduğunu düşünebiliriz. Yani örneğin vatandaşlık numarası veya öğrenci numarası gibi. Dolayısıyla örneğin öğrencilerin numaralarına göre sıralanması durumunda kullanılabilir. Bu dizi üzerinden bir kere geçilerek aşağıdaki sayma dizisi elde edilir: Dizi indisi: 0 1 2 3 4 5 6 7 8 9 Değeri (sayma): 0 1 1 1 0 1 1 2 0 1 Yukarıdaki tabloda da gösterildiği üzere dizide bulunan en büyük eleman sayısı kadar eleman içeren bir sayma dizisi oluşturulmuş ve bu dizinin her elemanına, sıralanmak istenen dizideki her elemanın sayısı girilmiştir. Bu sayma işleminden sonra sıralı dizinin üretilmesi yapılabilir. Bu işlem de dizinin üzerinden tek bir geçişle her eleman için kaç tekrar olduğu yazılarak yapılabilir. buna göre örneğin sıralanmış dizide 0 hiç olmayacak 1 den 1 tane, 2 den 1 tane olacak şeklinde devam eder ve sonuç: 1,2,3,5,6,7,7,9 şeklinde elde edilir. Bu sıralama algoritmasının JAVA dilindeki kodu aşağıda verilmiştir: public static void countingsort(int[]a, int[]b, int k) int C[]=new int[k]; // sayma dizisi oluşturuluyor int i; int j;

for(i=0; i<k; i++) C[i]=0; for(j=0; j<a.length; j++) C[A[j]]=C[A[j]]+1 ; for(i=1; i<k; i++) C[i]=C[i]+C[i-1]; for(j=0; j<a.length; j++) B[C[A[j]]]=A[j]; C[A[j]]=C[A[j]]-1; Yukarıdaki fonksiyon bir adet sıralanacak dizi, bir adet sıralanmış hali geri döndürecek atıf ile çağırma (call by reference ile) boş dizi ve dizideki en büyük sayının değerini alır. Sonuç ikinci parametre olan boş diziye döner. Bu sıralama algoritmasının karmaşıklığı (complexity) hesaplarnısa. Dizideki her elemanın üzerinden bir kere geçilerek sayıları hesaplanır. Bu geçiş n elemanlı dizi için n zaman alır. Ayrıca dizideki en büyük elemanlı sayı kadar (bu örnekte k diyelim) büyük olan ikinci bir sayma dizisinin üzerinden de bir kere geçilir bu işlem de k zaman alır. Dolayısıyla toplam zaman n+k kadardır. Bu durumda zaman karmaşıklığı O(n) olur. Hafıza karmaşıklığına baklırsa (memory complexity) hafızada mevcut verilerin saklandığı bir dizi (yukarıdaki örnek kodda A dizisi). Sonuçların saklandığı ikinci bir dizi (yukarıdaki örnekte B dizisi) ve her elemanın kaçar tane olduğunun durduğu bir dizi (yukarıdaki örnekte C dizisi) tutulmaktadır. Bu

durumda A ve B dizileri n, C dizisi ise k boyutundadır ve toplam hafıza ihtiyacı 2n+k kadardır. HAZIRLAYAN: CANSU KARAKUŞ KAYNAK:http://bilgisayarkavramlari.sadievrenseker.com QUICK SORT (HIZLI SIRALAMA) ALGORİTMASI Quick sort algoritması türkçe adıyla hızlı sıralama algoritması, günümüzde hala sıklıkla kullanılan bir algoritmadır. Sıralanması istenen dizi, dizi içerisinden belirlenen bir nokta (pivot noktası) yardımıyla iki alt diziye ayrılır. Pivot noktasından küçük olan elemanlar soldaki birinci alt diziye, büyük olan elemanlar ise sağdaki ikinci alt diziye taşınır. Daha sonra, yine aynı algoritma rekürsif olarak çağrılarak bu alt dizilerin sıralanması istenir. Bu işlem diziler parçalanamayacak duruma gelene kadar sürdürülür. Örneğin sıralanacak dizi A=9,5,12,7,3,21 olsun. Şimdi bir pivot noktası belirleyelim. Pivot noktası seçimi algoritmanın çalışma prensibini etkilemese de, dizinin ortanca değerini pivot noktası olarak belirlemekte fayda var. Dizinin ilk indisi 0 ve son indisi 5 i toplayıp int türünde bir değişkene attığımızda, 2. indis numaralı dizi elemanını yani 12 değerini pivot noktası olarak belirleriz. Bu noktayı baz alarak 12 değerinden küçük sayıları soldaki diziye, büyük sayıları ise sağdaki diziye atalım. Alt dizilerimizin son durumu A1=9,5,3,7 ve A2=12,21 şeklinde oluştu. Pivot noktasını da sağdaki yada soldaki diziye dahil edebilirsiniz. Daha sonra sıralama algoritması rekürsif olarak tekrar çağrılır ve yukarıdaki işlemler tekrarlanır. Böylece dizinin öğeleri

küçükten-büyüğe doğru sıralanmış olur. Aşağıda quick sort sıralama algoritmasının java ile yazılmış örnek kodlarını inceleyebilirsiniz. public class HizliSiralama public static void main(string[] args) int []dizi=9,5,12,7,3,21; hizlisirala(dizi, 0, dizi.length-1); for (inti = 0; i < dizi.length; i++) System.out.print(dizi[i]); public static int[] hizlisirala(intdizi[], intsol, intsag) intpivot, gecici, i,j; i=sol; j=sag; pivot=dizi[(sol+sag)/2]; do while(dizi[i]<pivot&& i<sag) i++; while(pivotsol) j ; if(i<=j) gecici=dizi[i]; dizi[i]=dizi[j]; dizi[j]=gecici; i++; j ; while (i<=j); if (sol<j) hizlisirala(dizi, sol, j); if (i<sag) hizlisirala(dizi, i, sag); returndizi;

Yukarıda java kodları verilen hızlı sıralama algoritmasına üç adet parametre gelmektedir; biri dizi, diğer ikisi de dizinin sıralamaya koyulacak parçasının sol ve sağ taraflarının indis değerleridir. Algoritma ilk çağrıldığında, n elemanlı bir dizi için sol=0, sağ=n-1 olur. Rekürsif çağırmalar sırasında sol değeri büyürken sağ değeri küçülecektir; ne zaman ki, sol değeri sağdan büyük olursa dizide bölünecek eleman kalmadığı anlaşılır ve rekürsif çağırmaların geri dönüşü başlar. Hızlı sıralama algoritmasının ortalama zaman karmaşıklı O(nlog2n), en kötü durumda ki zaman karmaşıklığı ise O(n2) olarak çıkmaktadır. HAZIRLAYAN: CANSU KARAKUŞ KAYNAK;http://www.kodlamamerkezi.com/ C programlamada while döngüsü While döngüsünün yazılış biçimi aşağıdaki gibidir: while(ifade) Deyim; ya da while(ifade)