T.C. KARABÜK ÜNİVERSİTESİ YENİCE MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI YBP101 PROGRAMLAMA TEMELLERİ DERSİ DERS NOTLARI TANIMLAR Bu ders notlarının daha iyi anlaşılabilmesi için şu tanım ve kavramların bilinmesinde fayda bulunmaktadır. Bilgisayar Verileri işleyerek özet bilgiler şekline sokabilen, bu veri ve bilgileri yüksek kapasitelerde saklayıp başka ortamlara iletebilen elektronik cihazlardır. Bu işlemleri yaparken çok yüksek hızlarda ve bıkmadan-usanmadan tekrarlı olarak aynı işleri yapan bir cihazdır. Ancak tek başına bir bilgisayar donanımı bu işleri gerçekleştirecek durumda değildir. Bu işlemler donanım tarafından yapılsa da asıl iş yazılımlar tarafından gerçekleştirilmektedir. Yukarıdaki çizimde görülen her bir adımın gerçekleştiren yazılımdır. Bilgisayar Organizasyonu Bir bilgisayar yukarıdaki şekildeki gibi temel birimlere sahiptir. Bu şekilde giriş, çıkış işlemleri, veri işleme ve veri saklama işlemleri gerçekleştirilir. Giriş Birimi Klavye, fare, mikrofon, kamera vb. cihazlardan biri veya daha fazlasından oluşur. Veri ve komutların bilgisayara yollanmasını sağlar. Bellek Birimi Veri, komut ve programların saklandığı donanımları temsil eder. Ana bellek çoğunlukla RAM olarak anılır. Yan veya ikincil bellek ise floppy ve sabit diskleri ifade eder ve bilgilerin daha kalıcı saklanmasını sağlayan alanları temsil eder. Aritmetik- Bilgisayardaki tüm aritmetik ve mantıksal
65
Embed
web.karabuk.edu.trweb.karabuk.edu.tr/safakaltay/prog.docx · Web viewT.C. KARABÜK ÜNİVERSİTESİ YENİCE MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI YBP101 PROGRAMLAMA TEMELLERİ
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
T.C.KARABÜK ÜNİVERSİTESİ
YENİCE MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞIYBP101 PROGRAMLAMA TEMELLERİ DERSİ DERS NOTLARI
TANIMLARBu ders notlarının daha iyi anlaşılabilmesi için şu tanım ve kavramların bilinmesinde fayda bulunmaktadır.
BilgisayarVerileri işleyerek özet bilgiler şekline sokabilen, bu veri ve bilgileri yüksek kapasitelerde saklayıp başka ortamlara iletebilen elektronik cihazlardır. Bu işlemleri yaparken çok yüksek hızlarda ve bıkmadan-usanmadan tekrarlı olarak aynı işleri yapan bir cihazdır. Ancak tek başına bir bilgisayar donanımı bu işleri gerçekleştirecek durumda değildir. Bu işlemler donanım tarafından yapılsa da asıl iş yazılımlar tarafından gerçekleştirilmektedir.
Yukarıdaki çizimde görülen her bir adımın gerçekleştiren yazılımdır.
Bilgisayar OrganizasyonuBir bilgisayar yukarıdaki şekildeki gibi temel birimlere sahiptir. Bu şekilde giriş, çıkış işlemleri, veri işleme ve veri saklama işlemleri gerçekleştirilir.
Giriş Birimi Klavye, fare, mikrofon, kamera vb. cihazlardan biri veya daha fazlasından oluşur. Veri ve komutların bilgisayara yollanmasını sağlar.
Bellek Birimi
Veri, komut ve programların saklandığı donanımları temsil eder. Ana bellek çoğunlukla RAM olarak anılır. Yan veya ikincil bellek ise floppy ve sabit diskleri ifade eder ve bilgilerin daha kalıcı saklanmasını sağlayan alanları temsil eder.
Aritmetik-MantıkBirimi
Bilgisayardaki tüm aritmetik ve mantıksal işlemlerin yapıldığı birimdir. Tüm işlemleri yapan ana birimdir.
Denetim Birimi
Bilgisayar programının çalışmasını denetleyen, programda yapılan hesaplamalara göre hangi işlerin yapılacağına karar veren birimdir. Makine diline çevrilmiş bir programda komutları teker teker ve sırayla Ana işlem birimine getirip yorumlar ve sonuçta komutu çalıştırır.
Çıkış Birimi Bilgisayar ortamında oluşan verilerin dış ortama verilmesini sağlayan birimlerdir. Ekran, yazıcı gibi birimlerdir.
Bir programcı genel olarak bu birimlerin hangilerinin ne işe yaradığını ve neleri temsil ettiğini bilmelidir. Özellikle aritmetik-mantık işlem birimi ve denetim birimi bir bilgisayarın beynini oluşturduğu için nasıl davrandığını iyi bilmek zorundadır.
Problem Bir işlemin, otomasyonun ya da bilimsel hesaplamanın bilgisayarla çözülmesi fikrinin ortaya çıkmasına problem denir. Bu tip fikirlerde insanların bu sorunları beyinle çözmeleri ya imkânsızdır ya da çok zor ve zaman alıcıdır. Bu tip bir sorunu bilgisayarla çözebilme fikrinin ortaya çıkması bir bilgisayar probleminin ortaya çıkmasına neden olmuştur. Bazen de bir işletme veya yönetimin otomasyonunu sağlamak amacı ile bu tip problemler tanımlanır.
Problem ÇözümüProblemi çözebilmek için öncelikle sorunun çok net olarak programcı tarafından anlaşılmış olması gerekir. Tüm ihtiyaçlar ve istekler belirlenmelidir. Gerekiyorsa bu işlem için birebir görüşmeler planlanmalı ve bu görüşmeler gerçekleştirilmelidir. Problemin çözümüne ilişkin zihinsel alıştırmalar yapılır. Bu alıştırmaların bilgisayar çözümüne yakın olması hedeflenmelidir. Bir sorunun tabii ki birden fazla çözümü olabilir. Bu durumda bilgisayar ile en uygun çözüm seçilmelidir. Çünkü bazen pratik çözümler bilgisayarlar için uygun olmayabilir. Oluşturulan çözüm “algoritma” dediğimiz adımlarla ifade edilmelidir. Bu algoritmanın daha anlaşılabilir olması için “akış çizgesi” oluşturulmalıdır. Uygun bir programlama dili seçilmeli ve oluşturulan algoritma ve akış çizgesi bu programlama dili aracılığı ile bilgisayar ortamına aktarılmalıdır. Oluşturulan program bir takım verilerle ve mümkünse gerçek ortamında test edilir. Oluşabilecek sorunlar ilgili kısımlar tekrar gözden geçirilerek düzeltilir. Bu adımlar defalarca gerçekleştirilmek zorunda kalınabilir.
Program Problem çözümü kısmında anlatılan adımlar uygulandıktan sonra ortaya çıkan ve sorunumuzu bilgisayar ortamında çözen ürüne program denir. Bazı durumlarda bu ürüne yazılım denebilir.
Programlama
Problem çözümünde anlatılan adımların tümüne birden programlama denilebilir. Ancak gerçekte ilk paragrafta anlatılan kısım çoğunlukla sistem analizi veya sistem çözümleme olarak anlatılır. Diğer adımlar programlama diye tanımlanabilir. Ancak son paragrafta anlatılan adıma kısaca test aşaması da denir.
Çoğunlukla çok iyi tanımlanmış bir sorunun çözümüne dair adımlar ile çözümün oluşturulup bunun bir programlama dili ile bilgisayar ortamına aktarılması programlama diye adlandırılabilir.
Programlama Dili
Bir problemin algoritmik çözümünün bilgisayara anlatılmasını sağlayan, son derece sıkı-sıkıya kuralları bulunan kurallar dizisidir.
Derleyici Bir programlama dili ile bilgisayara aktarılan programın bilgisayarın anlayabileceği makine diline çevirmeyi sağlayan ve yazılan programda söz dizim hatalarının olup olmadığını bulan yazılımlardır. Her programlama dili için bir derleyici olması gerekmektedir.
Yorumlayıcı Derleyici gibi çalışan ancak yazılmış programları o anda makine diline çeviren yazılımlardır. Bu tür bir yazılımda programın makine dili ile oluşturulmuş kısmı bilgisayarda tutulmaz. Programın her çalıştırılmasında her adım için makine dili karşılıkları oluşturulur ve çalıştırılır.
Makine Dilleri, Assembly Dilleri ve Yüksek Seviyeli DillerHerhangi bir bilgisayar doğrudan yalnızca kendi makine dilini anlayabilir. Makine dili bilgisayarların doğal dilidir ve o bilgisayarın donanım tasarımına bağlıdır. Makine dilleri belirli sayıların özel dizilimleri ile bilgisayarın temel işlevlerini yaptırtmalarını sağlarlar.
+130042774+1400593419+1200274027
Bilgisayarlar popüler hale geldikçe programcılar İngilizceye yakın kısaltmalar kullanmaya başladılar. Bu kısaltmalar assembly dillerinin temelini oluşturmaktadır.
LOAD SAYI1ADD SAYI2STORE TOPLAM
Bu kod insanlara oldukça yakın gelse de makine diline çevrilmediği sürece bilgisayarlara bir şey ifade etmez.
Programlama sürecini hızlandırabilmek amacıyla yüksek seviyeli diller geliştirildi. Bu dillerde tek bir tek bir ifade ile birden çok görevi yerine getirmek mümkün oluyordu.Derleyici olarak adlandırılan çevirici programlar yüksek seviyeli dilleri makine dillerine çevirirler.
toplam=sayi1+sayi2
YAZILIM GELİŞTİRMEYazılım geliştirilirken bir programcı ve yazılım gurubunun takip edeceği adımlar şu şekildedir.
Bu çizgeden anlaşılacağı gibi adımlardan birinde bir sorunla karşılaşılırsa bu sorunu çözebilmek için bir önceki adıma geri dönmek gerekecektir. Bu geri dönüş bazen bir kaç adım olabilir.
Sistem Analizi: Sorunun çözülebilmesi için tamamen anlaşılmasını sağlayan çalışmalardır.Tasarım: İsteklerle ilgili olarak belirlenen bir takım çözümlerin tanımlanmasıdır.Programlama Stili: Her programcı programındaki mantığı farklı kurar bu her programcının kendine özgün bir stilinin olduğu anlamına gelir. Ancak bunun yanında her programcının programın sağlığı bakımından dikkat etmesi gereken şeyler vardır. Örneğin kodlar açık olmalıdır. Kullanılan değişkenler kullanıldıkları amacı anlatır tarzda isimlendirilmelidir. Program içi dokümantasyona mutlaka önem verilmelidir.Algoritma: Çözümün adımlarla ifade edilmesidir.Akış Şeması/Diyagramı/Çizgesi: Algoritmanın şekillerle ifade edilmesidir.Programlama Dili Seçimi: Çözümün netleşmesinden sonra yapılacak işlemleri kolay bir şekilde bilgisayar ortamına aktaracak dilin seçilmesidir. Önemli olan bu dilin özelliklerinin programcı tarafından iyi bilinmesidir.Programın Yazılması: Seçilen programlama dilinin kuralları kullanılarak program yazılmaya başlanır. Bu amaçla çoğunlukla sade bir metin editörü kullanılır. Bazı durumlarda Syntax highlighting denilen bir özelliğe sahip olan daha akıllı editörler de kullanılabilir. Bazen de
editör ile programlama dilinin derleyicisinin, bağlayıcısının hatta hata ayıklayıcısının iç içe bulunduğu IDE (Integrated Development Environment) denilen türde derleyiciler kullanılır.Derleme: Programlama dili ile yazılmış programın yazım hatalarının olup olmadığının kontrol edilmesini ve ara kod olarak Obje kodun üretilmesini sağlama adımıdır.Bağlama: Derlenmiş ara kod diğer kütüphane ve parça programlarla birleştirilerek makine dilinde programın oluşturulması adımıdır. Ancak bazı IDE ortamlarda ve derleyicilerde derleme ve bağlama bir bütündür ve beraberce halledilirler. Programcının ayrıca bir bağlama işlemi yapması gerekmez işlemi yapması gerekmez.Çalıştırma: Oluşturulan makine dili programının çalıştırılması adımıdır. Yukarıdaki adımların hepsi yolunda gittiyse program sorunsuz olarak çalışabilmelidir.Test: Programın mantıksal olarak test edilmesini sağlar ve içerik olarak her ihtimal için doğru sonuçlar üretip üretmediğini kontrol etmenizi sağlar.Yaşam Döngüsünün Sağlanması: Yukarıdaki akış çizgesi dikkat edilirse aslında bir döngüdür. Hatta test aşamasında sorun çıkmazsa bile sorunun tanımında yani ihtiyaçlarda bazı değişiklikler olursa adımlar baştan aşağı tekrar incelenmek zorunda kalınır. Bu çizgeye bir yazılımımın yaşam döngüsü de denilebilir. Bu çizimde yazılımın bakım süreci göz önüne alınmamıştır.
HATA YAKALAMA VE AYIKLAMABir programın bilgisayar başında geçen geliştirme süreci yukarıdaki gibidir. Bu çizimde kırmızı-turuncu renkle gösterilen kısımlar hata durumlarını göstermektedir.Soru: Bir Derleyici hatanın nasıl düzeltileceğini bildirebildiğine göre kendisi niçin düzeltmemektedir?
Syntax Error: Yazılan programda programlama dili kurallarına aykırı bir takım ifadelerden dolayı karşılaşılabilecek hatalardır. Düzeltilmesi son derece basit hatalardır. Hatanın bulunduğu satır derleyici tarafından rapor edilir. Hatta bazı derleyiciler hatanın ne olduğunu ve nasıl düzeltilmesi gerektiğini dahi bildirebilirler. Bazen Syntax Error tipi hataları Bağlama zamanında da ortaya çıkabilir. Eğer bir derlemede Syntax Error alındı ise obje kod üretilememiştir demektir.
Run-time Error: Programın çalıştırılması sırasında karşılaşılan hatalardır. Programcının ele almadığı bir takım aykırı durumlar ortaya çıktığında programın işletim sistemi tarafından kesilmesi ile ortaya çıkar. Bu tip hatalarda hata mesajı çoğunlukla çalışan işletim sisteminin dili ile verilir. Eğer bu tip hataları kullanıcı ele almışsa, program programcının vereceği mesajlarla ve uygun şekilde sonlandırılabilir. Bu tip hataların nerelerde ve hangi şartlarda ortaya çıkabileceğini bazen kestirmek zor olabilir. Çoğunlukla işletim sistemi ve donanım kaynakları ile ilgili sorunlarda bu tip hatalar ortaya çıkar demiştik. Örneğin olamayan bir dosya açmaya çalışmak, var olan bir dosyanın üzerine yazmaya çalışmak, olmayan bir bellek kaynağından bellek ayırtmaya çalışmak, olmayan bir donanıma ulaşmaya çalışmak vs.
Logical Error: Karşılaşabileceğiniz en tehlikeli hatadır. Programlama mantığında bir takım şeylerin yanlış düşünülmesinden kaynaklanır. Hata test aşamasında ortaya çıkar. Hesaplanması gereken veya bulunması gereken değerlerin eksik veya yanlış hesaplanması ile tespit edilir. Bu sorunun giderilebilmesi için Tasarım hatta çözümleme aşamasına geri dönülmesi gerekebilir. Bazen bu hatanın nereden kaynaklandığını bulabilmek çok zor olmaktadır.
Bug: Logical Error diyebileceğimiz Mantıksal hatalara verilen adlar bug yani böcek diye de tanımlanmış olabilir. Bu tip hatalar eğer çok net değil ve zamanla ortaya çıkabiliyor ise veya nedeni çok net olarak anlaşılamamışsa bug diye adlandırılır. Gerek serbest yazılım gerek ticari yazılımların tümünde bug dediğimiz mantıksal hatalar bulunur. Çünkü hatasız program yazabilmek çok zordur. İlk seferde yazılan bir programın tamamen hatasız olmasını beklemek son derece hatalıdır. Günümüzde en meşhur yazılım firmaları bile yazılımlarında bug olduğunu kabul eder ve zaman zaman bu bugları giderebilmek için ya yazılımlarına yama yazılımı üretirler ya da o yazılımın yeni bir versiyonunu piyasaya sürerler.
Debug: Mantıksal hataları giderebilmek ve yazılımdaki bug'ları bulabilmek için yapılan işlemin adıdır. Genellikle yazılan programın adım adım ve denetim altında çalıştırılmasıdır. Programın her adımında ilgili değişkenlerin hangi değere sahip olduğunu görmeyi sağlar ve anormal bir durumu daha kolay izleyip bulmanızı sağlar.
ALGORİTMA Bir sorunu / problemi çözmek veya belirli bir amaca ulaşmak için gerekli olan sıralı mantıksal adımların tümüne algoritma denir. Algoritma bir sorunun çözümü için izlenecek yolun tanımıdır. Kısaca algoritma mevcut bilgilerden istenilenlere erişme yöntemidir. Programlamanın en önemli kısmı problemin çözümü için algoritma geliştirmektir. Hazırlanan algoritmanın bir programlama dili ile kodlanması işin basit kısmıdır. Kullanılan dilin c / c++ / c# ya da başka bir programlama dili olması bir şeyi değiştirmez.
Örn: Bilgisayara verilecek iki sayıyı toplayıp sonucu ekrana yazacak bir programın algoritması
Örn: Klavyeden girilecek iki sayıdan büyük olanından küçük olanını çıkarıp sonucu ekrana yazacak programın algoritması
Örn: Klavyeden girilen bir N değerine kadar sayıları toplayan ve sonucu ekrana yazan bir programın algoritması
Algoritma ÇalıştırmaBazen bir takım algoritmaların ne işe yaradığını anlamak veya algoritmanın doğru çalışıp çalışmadığını test etmek için algoritmayı çalıştırmak gereklidir. Algoritmayı çalıştırmak demek algoritmanın adımlarını sıra ile uygulamak, oluşan değişken değerlerini bir tablo üzerinde göstermek demektir.
1. BAŞLA2. A OKU3. B OKU4. C OKU5. TOP=06. SAY=A7. TOP = TOP+SAY8. SAY=SAY+C9. EĞER SAY<=B İSE 7. ADIMA GİT10.TOP YAZ11.SON
Şeklinde verilmiş bir algoritmamız olsun. Bu algoritma için A=3, B=12 ve C=2 değerleri girilince SAY ve TOP değişkenlerinde hangi değerlerin oluşacağını algoritmayı adımlayarak gösterelim.
Değişkenlerin HerBirinin Değeri AçıklamaA B C TOP SAY
3 12 2 0 3 6. adıma kadar programın ilk çalıştırılışında değişkenlerin elde ettiği değer
3 5 7. ve 8. adımların çalıştırılmasından sonraki değerler8 7 7. ve 8. değerler tekrar çalıştırılıyor15 9 9<=12 olduğu için 7. ve 8. tekrar çalıştırılıyor.24 11 11<=12 olduğu için 7. ve 8. tekrar çalıştırılıyor.
35 1313<=12 olmadığı için algoritma 10. satırdan çalışmaya devam edecektir. Ve 10. satırdaki ifadeden dolayı ekrana 35 değeri yazılacaktır.
AKIŞ ŞEMASI (DİYAGRAMI/ÇİZGESİ)
Akış şeması bir algoritmanın daha görsel gösterimidir. Çizgiler, Dörtgen, daire vb. geometrik şekillerle algoritmanın gösterilmesini sağlar. Doğal dille yazılmadığı için daha formal olduğu düşünülebilir.
Örn: İki sayının toplamını bulan akış çizgesi
Örn: İki sayıdan küçük olanı bulan akış çizgesi
Örn: 1’den N değerine kadar sayıları toplayıp ekrana yazan bir akış çizgesi
Örn: Klavyeden girilecek bir N değerine kadar fibonecci dizisini bulan algoritmayı geliştiriniz. Fibonecci dizisi 1 1 değerleri ile başlar ve yeni değer kendinden öndeki iki değerin toplamı olarak bulunur. (1 1 2 3 5 8 13 21...)Çözüm: Fibonacci dizisi a,b,c şeklinde 3 değişken ile hesaplanabilecek bir dizidir. Çünkü sürekli a ile b toplanarak c üretilir ve sonra bu a, b, c değişkenleri kaydırılır.1. N OKU2. A=13. B=14.A,B YAZ5.C=A+B6.EĞER C>N İSE 11. GİT7.C YAZ8.A=B9.B=C10.5. ADIMA GİT11.SON
Örn: Klavyeden girilen bir sayının tüm tam bölenlerini bulup listeleyen bir algoritma geliştiriniz.Çözüm: Bu örneği çözebilmek için C dilinde de kullanılan % operatörünü kalanı bulma operatörü olarak kullanacağız.1.N OKU2.X=13.EĞER N%X=0 İSE X YAZ4.X=X+15.EĞER X<=N İSE 3. ADIMA GİT6.SON
Örn: Klavyeden girilen üç sayıdan büyüklük sıralamasına göre ortadakini bulup ekrana yazan program için algoritma yazınız.Çözüm: Bu algoritma üç sayının klasik yollarla sıralanmasını ya da büyüklük sıralamasının bulunmasının ne denli zor olduğunu anlatmaya çalışan bir örnektir.1.A, B, C OKU2.EĞER A>B VE B>C İSE B YAZ3.EĞER C>B VE B>A İSE B YAZ4.EĞER B>A VE A>C İSE A YAZ5.EĞER C>A VE A>B İSE A YAZ6.EĞER A>C VE C>B İSE C YAZ7.EĞER B>C VE C>A İSE C YAZ8.SON
Örn: Klavyeden girilen A(bölünen) ve B(bölen) gibi iki sayının bölme işlemi kullanmadan sadece toplama ve çıkarma kullanarak kalanlı bölme yapan algoritmayı yazınız. Çözüm: Bu örnek çok eski işlemcilerde çarpma işleminin tanımlı olmadığı durumlar için çarpma ya da bölme yapmak amacıyla kullanılan algoritma olarak karşımıza çıkmıştır.1.A,B OKU2.BOLUM=03.KALAN=04.EĞER A<B İSE KALAN=A, 8. ADIMA GİT5.A=A-B6.BOLUM=BOLUM+17.4. ADIMA GİT8.BOLUM, KALAN YAZ
Örn: Klavyeden girilen A ve B gibi iki sayıyı, çarpma işlemi kullanmadan sadece toplama ve çıkarma kullanarak çarpıp sonucu ekrana yazan algoritmayı yazınız.1.A, B OKU2.SAY=03.TOPLA=04.EĞER SAY>=B İSE 8. ADIMA GİT5.TOPLA=TOPLA+A6.SAY=SAY+17.4. ADIMA GİT8.TOPLA YAZ
Örn: 0-Sıfır girilinceye kadar klavyeden okutulan değerlerin ortalamasını hesaplayıp ekrana yazan algoritmayı geliştiriniz.Çözüm: Bu örnekte bir toplam değerini tutabilecek bir de sayıları sayabilecek iki değişkene ihtiyaç vardır. Klavyeden girilen her değer sıfır ile karşılaştırılacak değilse işleme devam edilecektir. Sıfır ise ortalama hesaplanıp ekrana yazılacaktır.1.T=02.SAY=03.X OKU4.EĞER X=0 İSE 8. ADIMA GİT5.T=T+X6.SAY=SAY+17.3. ADIMA GİT8.ORT=T / SAY9.ORT YAZ
Örn: Klavyeden girilecek 20 sayının tek olanlarını ayrı çift olanlarını ayrı toplayıp sonuçları ekrana yazan algoritmayı geliştiriniz.Çözüm: Bu algoritmada yine % operatörünün kalanı bulan operatör olarak kullanılacağını varsayıyoruz. Çünkü bu algoritmada bir sayının çift mi tek mi olduğunu anlamak ancak ve ancak o sayının ikiye bölümünden kalanın 1 mi 0 mı olduğuna bağlıdır.1.CIFT=02.TEK=03.SAY=04.X OKU5.SAY=SAY+16.EĞER X%2=0 İSE CIFT=CIFT+XDEĞİLSE TEK=TEK+X8.EĞER SAY<20 ISE 4. ADIMA GİT9.TEK, CIFT YAZ
Örn: Bir n değeri için f ( x )=∑
x=1
n 1x2
şeklindeki fonksiyonun değerini hesaplayıp ekrana yazan algoritmayı geliştiriniz.Çözüm: Bu algoritma oldukça basit bir şekle sahip olup benzer şekildeki tüm fonksiyonları küçük değişikliklerle rahatça hesaplayabilecek bir algoritmadır. Sadece 4. adımı değiştirerek oldukça fazla sayıda algoritma veya sorun türetilebilir.1.N OKU2.F=03.X=14.F=F+1/(X*X)5.X=X+16.EĞER X<=N İSE 4. ADIMA GİT7.F YAZ
Örn : f ( x )=∑x=1
n
x2şeklindeki bir fonksiyon için f(x)>=K şartını sağlayan en küçük n değerini
bulabilecek bir algoritma geliştiriniz. K değerlerinin klavyeden girildiğini düşünelimBurada x’in son değeri ve n birbirine eşit olacaktır.1.K OKU2.F=03.X=14.F=F+(X*X)5.X=X+16.EĞER F<K İSE 4. ADIMA GİT7. n=(X-1)8.F,n YAZ
Örn: Genel Gösterimi Xn=n 2 şeklinde olan bir dizinin n. elemanına kadar tüm elemanlarını ekranda gösterecek programın algoritmasını geliştiriniz.1.N OKU2.X=13.X*X YAZ4.X=X+15.EĞER X<=N İSE 3. ADIMA GİT6.SON
Örn: Klavyeden 0-Sıfır girilinceye kadar girilen bir dizi sayının karelerinin ortalamasını bulacak program için algoritma geliştiriniz.1.SAY=02.T=03.X OKU4.EĞER X=0 İSE 8. ADIMA GİT5.T=T+X*X6.SAY=SAY+17.3. ADIMA GİT8.ORT=T/SAY9.ORT YAZ
Örn: Klavyeden girilecek iki pozitif tam sayının OBEB (Ortak Bölenlerin En Büyüğü)’ini bulacak algoritmayı geliştiriniz. Örneğin elimizde 3654 ve 1365 değerleri olsun. Bu değerlerin OBEB’i şu şekilde bulunmaktadır.
3654 / 1365 Kalan 9241365 / 924 Kalan 441924 / 441 Kalan 42441 / 42 Kalan 2142 / 21 Kalan 0 Kalan 0-Sıfır oluncaya kadar sıra ile bölme yapılmaktadır. OBEB değeri ise 21 olarak bulunan değerdir. Bu işlem sırasında ve yineleme özelliklerini kullanarak iki sayının OBEB’ini bulunuz. Kalanı bulmak için % operatörünün tanımlı olduğunu varsayıp kullanabilirsiniz.
1.A, B OKU2.KALAN=A%B3.EĞER KALAN=0 İSE 7. ADIMA GİT4.A=B5.B=KALAN6.2. ADIMA GİT
7.B YAZ
DEĞİŞKEN VE DİZİ TANIMLARIBilgisayarda yapılacak hesaplar sonucu elde edilecek değerleri ve dışarıdan bilgisayara girilecek değerler değişkenlerde tutulur. Değişkenler içlerinde tuttukları değerlerin türlerine göre sınıflandırılır.
Sabit Programın her yerinde aynı değeri ifade eden değerlerdir. Değişkenlerde olduğu gibi sabitler de tür kavramına sahiptir. Yazılış tarzına bakarak sabitin türünü anlamak mümkündür.
Tam Sayı SabitleriSadece rakamlardan oluşan ifadelerdir. Bu tip sayıların içerisinde sadece rakam ve gerekiyorsa işaret sembolü olabilir. Aritmetik işlemlere girebilirler. (12, 1233, -3422 gibi)
Kesirli Sayı SabitleriRakam ve ondalık ayıracı olarak . (nokta) sembolü kullanılabilir. Ayrıca işaret sembolü olarak (-) kullanılabilir. Aritmetik işlemlere girebilirler. (3.14, 2.41. -2.11221 gibi)
Dizgi SabitleriTırnak içerisinde yazılan her ifade dizgi sabiti olarak algılanır. Programlama dillerinde farklı tırnak sembolleri kullanılabilir. Çoğunlukla “” sembolü tercih edilir. Aritmetik işlemlere giremez. ('Malatya', "Merhaba", "Dünya", "12322" gibi).
Değişken Her seferinde farklı değerler içerebilen yapıdır. Programlarda değişkenleri kutu olarak sembolize ederek çözümlemek mümkündür. Değişkenler de sabitlerde olduğu gibi türlere sahiptir. Sabitlerdeki türler aynen geçerlidir.
Dizi Bazı durumlarda kullanım amacı aynı olan birden fazla hatta oldukça fazla sayıda değişkene ihtiyaç bulunur. Bu tip bir durumda bu değişkenler tek tek tanımlanmak yerine bir ad altında indisle tanımlanırlar. bu tanıma dizi denir. Bazı sorunların çözümü için bu tanımlar zorunludur. Mesela 1000 sayıyı sıralamak için basit değişken tanımlama işlemi başarısız olacaktır. Veya bir sınıf listesinin tümünü bilgisayarda tutmak isterseniz basit değişkenler uygun değildir. Çoğunlukla bu tip bir tanımda dizinin bir adı vardır. Erişmek istediğiniz dizinin eleman indis değeri ile bu dizi içerisinde istediğiniz elemana ulaşabilirsiniz.
Bir takım işlemlerin yapılabilmesi için aritmetik işlemlerin nasıl tanımlandığını bilmeniz gerekecek. Program akışının doğru bir şekilde sağlanabilmesi için bazı yerlerde karar verilmesi gereklidir. Bu kararların verilmesini sağlayacak Mantıksal ifadeler bilgisayarlar tarafından yapılabilmelidir.
Aritmetik İfadelerBir programın istenilen işleri yerine getirebilmesi için hesap yapabilmesi ve bu hesaplar sonucunda elde edilen değerleri saklayabilmesi gerekmektedir. Genel olarak tüm programlama dillerinde aritmetik işlemler şu şekilde tanımlanmıştır:
Bu tip bir gösterimde Değer denilen kesim sabit bir değeri temsil eder. Değişken ise içerisinde her an farklı bir değer tutabilecek bir tanım ifade eder. Aritmetik Operatör ise aritmetik işlemin özünü oluşturan bir işleçtir.
Aritmetik OperatörKısaca dört işlem olarak da ifade edebileceğimiz işleçlerdir. Çoğunlukla dört tanedirler ve cebirde kullanılan öncelikleri aynı şekilde kullanırlar.
* Çarpma işlemini gösteren işleçtir. Bölme ile eş önceliklidir./ Bölme işlemini gösteren işleçtir. Çarpma ile eş önceliklidir.+ Toplama işlemini gösteren işleçtir. Çıkarma ile eş önceliklidir.- Çıkarma işlemini gösteren işleçtir. Toplama ile eş önceliklidir.
Temel olarak bu işleçler her programlama dilinde bulunur. Öncelikleri yukarıdaki sırada olduğu gibidir. Eş öncelikli aritmetik ifadeler bulunursa bu ifadelerde işlem soldan sağa doğru yapılır. Bu işlem önceliklerini değiştirmek için her programlama dilinde ( ) kullanabilirsiniz. Bunlardan hariç olarak üst alma ve mod operatörü gibi değişik ve standart olmayan operatörlerde vardır.
Aritmetik OperandAritmetik ifadelerde işleme giren tarafların her birine aritmetik operand yani aritmetik işlenen denir. Yukarıdaki tanımda Değer|Değişken ikilisinin her biri işlenen yani operand tanımını sağlar. Bir aritmetik ifade de bir çift operand ve bir operatör minimum olması gereken ifadelerdir. Ancak daha fazla aritmetik işlenen ve işleç olabilecektir. Örneğin A * B + (12 + B) işlemi de bir aritmetik ifadedir.
Değer Aktarma deyimiGenellikle bir aritmetik ifade ile hesaplanan değer başka bir değişkene aktarılır. Bu işlem çoğunlukla "=" sembolü ile gerçekleştirilir.
Mantıksal ifadelerBir değerin başka bir değer ile karşılaştırılması sonucu doğru veya yanlış sonuç elde edebilen ifadelerdir. Mantıksal operatörler ve karşılaştırma operatörlerinin değişik alternatiflerle bir araya gelmesinden oluşur ve şu şekilde ifade edilir:
İki değer veya aritmetik ifadeyi bir biriyle karşılaştırmayı sağlayan sembollerdir.
= İki değerin eşit olup olmadığı karşılaştıran işleçtir.>, >= İki değerden soldakinin sağdakine oranla büyük olup
olmadığınıveya büyük eşit olup olmadığı kontrol eden operatördür.
<, <= İki değerden soldakinin sağdakine oranla küçük olup olmadığınıveya küçük eşit olup olmadığı kontrol eden operatördür.
<> İki değerin farklı olup olmadığını karşılaştırılan işleçtir.
A>=8 ifadesi A değişkeninin değeri 8 den büyük mü diye karşılaştırır.A<>12 ifadesi A değişkeninin değeri 12’den farklı mı diye karşılaştırır.
Mantıksal OperatörBirden fazla mantıksal karşılaştırma deyiminin birleştirilmesini sağlayan işleçlerdir. VE, VEYA gibi ifadelerdir. Bu operatörler mantıksal ifadelerden iki veya daha fazlasının mantıksal doğruluk tablolarına göre birleştirilmesini sağlar.
VEYA için doğruluk tablosuP Q P VEYA QD D DD Y DY D DY Y Y
VE için doğruluk tablosuP Q P VE QD D DD Y YY D YY Y Y
Son mantıksal operatör DEĞİL operatörü olup tek işlenen alır ve aldığı işlenenin mantıksal değilini alır. Yani doğru olan değeri yanlışa yanlış olan değeri doğruya çevirir.
P DEĞİL PD YY D
Örneğin bir değişken içindeki değerin 1 ile 10 arasında olup olmadığını kontrol eden ifade şu şekildedir: (A>=1 VE A<=10). Bu tür ifadeler yazılırken dikkat edilmelidir örneğin (A>=1 VE A<=10) yerine yanlışlıkla (A>=1 VEYA A<=10) yazılması doğru sonuç üretecektir ama (A=3 VE A=8) gibi bir ifade de asla doğru olamayacaktır.
SAYI SİSTEMLERİ
Bir Bilgisayar sisteminde tüm bilgi kayıtları ve işlemleri elektriksel devreler üzerinden gerçekleştiği için tek bilinen gerçek elektrik akımının varlığı veya yokluğudur. Bu da matematiksel ve mantıksal olarak ikili sayı sistemine karşılık gelir. Çoğunlukla ikili sayı sistemindeki 0 değeri elektrik olmadığını 1 değeri ise bir elektriksel gerilimin olduğunu anlatır. Bu iki sayısal değer (0 ile 1) ikili sayı sisteminin rakamlarıdır. Ve bilgisayarda oluşan tüm değer ve sonuçlar gerçekte bu rakamlar ile anlatılabilirler. Bu rakamların her biri bilgisayar da bit denilen alanlarda tutulmaktadır. Bizim bu sayısal değerleri anlamamız zor olduğu için sayısal olarak onluk sayı sistemini kullanırız.
Tabandan Tabana Çevrim1)İkili Sayı Sisteminden Onlu Sayı Sistemine ÇevrimElimizdeki ikili sayının en sağındaki basamak sıfırıncı basamak olmak kaydıyla tüm basamaklarımız sola doğru numaralandırılır. Sonra her basamaktaki sayısal değeri 2basamak
değeri ile çarpar ve bulunan tüm değerleri toplarız.
2)Onlu Sayı Sisteminden İkili Sayı Sistemine ÇevrimEldeki onlu sayı sürekli 2 değerine bölünerek işlem yapılır. Bölme işlemi en son bölümün 0 olduğu noktaya kadar devam eder. Elde edilen bölme tablosunda en son kalanlar sondan başa doğru yan yana yazılır ve sayının ikilik tabandaki karşılığı bulunmuş olur.Örneğin elimizde 156 gibi sayısal bir değer olsun.
Sonuç Kalan sütunundaki değerlerin aşağıdan yukarı dizilmesi ile 1 0 0 1 1 0 1 1 olarak elde edilir.
C PROGRAMLAMA DİLİ VE ÖZELLİKLERİC genel amaçlı bir programlama dilidir ve çok esnek yapısıyla donanım denetiminden, işletim sistemi yazmaya kadar uygulama alanlarında kullanılmaktadır.
C dilinin popülerliği assembly gibi düşük seviyeli dillerin özellikleri ile yüksek seviyeli dillerin özelliklerini barındırmasıdır.
1972’de Dennis Ritchie tarafından AT&T Bell Laboratuarlarında B dilinden geliştirildi.C dili konusundaki ilk kitap 19782de Dennis Ritchie ve Brain Kernighan tarafından yazıldı.Bu tarihten sonra birçok C uygulaması geliştirildi. Belli bir standarda göre hareket etmediklerinden uygulamalar arasında farklılıklar ortaya çıktı. 1983 de ANSI (American National Standard Institute) C standardı oluşturuldu.
C dili donanımdan bağımsız (machine independent) ve taşınabilirdir (portable).Taşınabilirlik, aynı programın farklı donanımlarda ve farklı işletim sistemlerinde işletilebilirliğini ifade eder.
Bir dilin verimliliği (productivity), hızlı fakat fazla yer kaplamayan yazılımlar geliştirmeye olanak sağlaması ile ölçülür. C Programlama dili verimli, basit, fakat güçlü yapısından ve bu dilde geliştirilen uygulamaların taşınabilir olmasından dolayı yaygın olarak kullanılmaktadır.
C Kodlarının Temel Özellikleri Her C programı main() fonksiyonunu içermelidir. Satırın sonuna; işareti konmalıdır. Her fonksiyonun başlangıcı ve bitişi sırasıyla { ve } sembolleri ile belirlenir. C dilinde yazılan kodlarda küçük-büyük harf ayrımı vardır (case sensitive). Örneğin A
ile a derleyici tarafından farklı değerlendirilir. Açıklama operatörü /* */ sembolleridir. Değişken isimleri en fazla 32 karakterden oluşabilir. 32 karakterden uzun değişken
isimlerinin ilk 32 karakteri değerlendirilir. Geriye kalan karakterler işleme tabi tutulmaz.
Değişken adları İngiliz alfabesinde bulunan karakterler ile yazılmalıdır. Değişken adları herhangi bir rakam ile başlayamaz. İlk karakter bir harf olmalıdır. Float, goto, if, void, char vb. C deyimleri değişken ismi olarak kullanılamaz.
Basit Bir C Programı
VERİ TİPLERİVeri türü, değişken içerisinde tutulan değerin tipini belirler (tamsayı, ondalık sayı, karakter).C dilinde dört temel veri tipi (türü) vardır Bunlar: char, int, float ve double dır.char: bir harf, bir rakam veya özel bir simgeyi saklamak için kullanılan veri tipidir.char tipindeki her bir değer tek tırnak arasına yazılmalıdır (‘A’, ‘z’, ‘2’, ‘*’).char tipinde tanımlanan bir değişkenin tuttuğu değer karakterin ASCII tablosundaki sayısal karşılığıdır.int: tam sayı değerlerini saklamak için kullanılır.float: ondalıklı olarak verilen sayıları ifade edebilmek için kullanılır.double: ondalıklı olarak verilen çok küçük ve çok büyü sayıları ifade edebilmek için kullanılır. float türünden iki kat daha fazla duyarlılığa sahiptir.
Veri Tipi Açıklama Boyut (bayt) Alt sınır Üst sınır
char Tek bir karakter veyaküçük tamsayı için 1
-128 127unsigned char 0 255short int
Kısa tamsayı için 2-32,768 32,767
unsigned short int 0 65,535int
Tamsayı için 4-2,147,483,648 2,147,483,647
unsigned int 0 4,294,967,295
long intUzun tamsayı için 8
-9,223,372,036,854,775,808
9,223,372,036,854,775,807
unsigned long int 0 18,446,744,073,709,551,615
float Tek duyarlı gerçel sayı için (7 basamak) 4 -3.4e +/- 38 +3.4e +/- 38
double Çift duyarlı gerçel sayı için (15 basamak) 8 -1.7e +/- 308 +1.7e +/- 308
DEĞİŞKENLERDeğişkenlerin aldığı değerler program içinde programcı tarafından değiştirilebilir.
SABİTLERSabitlerin aldığı değerler program içinde programcı tarafından değiştirilemez. Bir sabit tanımlarken const ve bir veri tipi kullanılmalıdır.const float PI=3.14
1.KısıtlamalarC dilinin temel özelliklerinde değişken özellikleri olarak verilmiştir.
2.İsimlerin SeçimiBelirleyicinin kullanım amacına uygun anlamlı isim seçin. Ne fazla kısa ne de fazla uzun olsun. 3 - 10 karakter uzunluğunda olmasını alışkanlı edinin.
MATEMATİKSEL İFADELER
Burada “=” atama deyimi olarak kullanılmaktadır. Değişkenlere ve sabitlere değer atamada kullanılır.
main(){ float x, y ; x = 4.8; y = 5 * x * x + 2; printf(" sonuc = %f", y);}
Vize ve final notlarınından geçme notu hesaplama
main(){ float vize, final, ort; vize = 50; final = 60; ort = vize * 0.4 + final * 0.6; printf(" sonuc = %f", ort);}
1998 yılına kadar geçen gün sayısı hesaplama
main(){ float gun; int yil = 1998; gun = 365 * (yil - 1); printf(" sonuc = %f", gun);}
KAYNAKLAR1. M.Şahin, Yapısal Programlama Ders Notları, Çanakkale Onsekiz Mart Üniversitesi Mühendislik Mimarlık Fakültesi
Bilgisayar Mühendisliği Bölümü.2. H.M. Deitel ve P.J. Deitel, C ve C++, Sistem Yayıncılık, 2005.3. MEB, Programlamaya Giriş ve Algoritmalar Ders Notları.
MANTIKSAL İFADELERSonucu Doğru veya Yanlış olan ifadelerdir.
İfadelerde işleçlerin yürütülme sırası;İşleç Önceliği ( ) en yüksek (ilk yürütülür)!*, /, %+, - <, <=, >=, >==, !=&&, ||= en düşük (son yürütülür)
İfadelerde matematiksel ve mantıksal işlemler bittikten sonra ilişki test edilir.
Örn: X=40, Y=80, Z=20 için ( ( X / 4 + Y / 4 + Z / 2 ) >= 50 ) && ( Z >= 50 ) ifadesi doğru mu yoksa yanlış mı?Çözüm:X / 4=10 Y / 4=20 Z / 2=10 (10+20+10) 50’den büyük değildir bu yüzden ifadenin sol tarafı yanlıştır.
20 50’den büyük değildir bu yüzden ifadenin sağ tarafı yanlıştır.Sonuç Yanlış dır.
printf İŞLEVİProgram içinde istenen değerleri ekranda göstermek için kullanılır.Kullanım biçimi;
printf(" sonuç = %d", k); -- değer --- integer değer yazılacaktır --------- ekrana aynen aktarılır
Dönüşüm belirlemek için önce % karakteri ve ardından dönüşümün nasıl olacağını belirten karakter verilir. Bu karakterlerden bazıları:
Değişken Yazım ve Okutma Formatları:%c : Karakter değişkenleri yazdırma yada okutmada kullanılır. %d : Tamsayı değişkenleri yazdırma yada okutmada kullanılır.%f : Ondalık sayı değişenleri yazdırma yada okutmada kullanılır.%lf : Double değişkenleri yazdırma yada okutmada kullanılır.%s : String değişkenleri yazdırma yada okutmada kullanılır.%o : Octal 8' lik taban değişkenleri yazdırma yada okutmada kullanılır.%x : Hexadesimal değişkenleri yazdırma yada okutmada kullanılır.%X : Hexadesimal değişkenleri yazdırma yada okutmada kullanılır (büyük harf).%lf : Daha büyük double değişkenleri yazdırma yada okutmada kullanılır.%e : Üstel yazdırma (sayıyı bilimsel gösterimde yaz) da kullanılır.%ld : long integer%lu : unsigned long integer%Le : long double%u : unsigned decimal
İmleç Konumlandırma:\n: yeni satıra geç \t: bir sonraki sekme durağına (tab) geç\a : ikaz, beep sesi\b : bir karakter geri\\ : ters bölü işaretini yazdırmak\” :tırnak işaretini yazdırmak
Program parçası Ekranda görünen / imleçin konumuint i = 5 ;printf("%d",i) ; 5printf("i=%d",i) ; i=5
Örn: Yarıçapı belli dairenin alanını hesaplayan programı yazınız. #include <stdio.h>main(){const float PI=3.14; float r, alan;r = 7; alan = PI*r*r; printf("Alan = %f", alan); }Örn: % ve / işlemlerini kullanarak dört basamaklı bir sayının basamak değerlerini yazdıran programı yazınız. #include <stdio.h>main(){ int i,y;
y=1985; i= y / 1000; printf("%d",i); y= y-i*1000; i= y / 100; printf(" %d",i); y = y-i*100; i= y / 10; printf(" %d",i); y = y-i*10; printf(" %d\n",y); y=3985; printf("%d ",y / 1000); printf("%d ",(y / 100) % 10); printf("%d ",(y / 10) % 10); printf("%d\n",y % 10);
scanf İŞLEVİ
Klavyeden veri okumak için kullanılır. Yapı olarak printf işlevi ile hemen hemen aynıdır. Kullanım biçimi:
scanf( kontrol, <değişkenler>)scanf("%f ", &a);
Girilen karakterler <kontrol> metininde belirtilen biçimlere göre değişkenlere aktarılır. Değişkenler işaretçi tipinde olmalıdır. Yani parametre olarak değişkenin adresi gönderilmelidir.
int a,b,c;float m,n;scanf("%d", &a); Klavyeden tamsayı okur. Girilen değer a değişkenine aktarılır.scanf("%d %d",&a,&b) Klavyeden girilen ilk değer a değişkenine, ikinci değer b değişkenine aktarılır. scanf("%f %d", &m, &a); Klavyeden ilki gerçel, ikincisi tamsayı olmak üzere iki değer okur.
Farklı kullanıcı arayüzünde yazarsak;
printf(“Katsayıları sırasıyla giriniz (a b c) :” ); scanf("%f %f %f ", &a, &b, &c);
Örn: Klavyeden girilen vize ve final notlarından ortalamayı hesaplayan programı yazınız. main(){ float vize, final, ort; printf("Vize notunu giriniz "); scanf("%f", &vize);
printf("Final notunu giriniz "); scanf("%f", &final); ort = vize * 0.4 + final * 0.6; printf("Ortalamasi = %f", ort); }
VERİ TİPLERİ DÖNÜŞÜMLERİBir formül içerisinde bir çok değişken veya sabit olabilir. Bu değişken ve sabitler birbirinden farklı tipte olursa, hesap sonucunun hangi tipte olacağı önemlidir. Bir bağıntıda, içeriği dönüşüme uğrayan değişkenler eski içeriklerini korurlar. Dönüştürme işlemi için geçiçi bellek alanı kullanılır; dönüştürülen değer kullanıldıktan sonra o alan serbest bırakılır. char kr;int tam;long int ltam;unsigned int utam;short int stam;
float f;double d;
Bağıntı Sonuç Tipi---------- -------------kr+5 int ->Burada kr değerinin ascii değerini 5 ile toplarkr+5.0 doubled+tam doublef+d-2 doubleutam-tam unsignedltam*tam longtam/2 inttam/2.0 double
Örn: Tip dönüşümü örneği int x=9;float a,b,c;double d; a = x/4;b = x/4.0;c = (float) x/4; printf("a=%f\n",a); /* a=2.00 */ printf("b=%f\n",b); /* b=2.25 */ printf("c=%f\n",c); /* c=2.25 */
MATEMATİKSEL FONKSİYONLARFonksiyon x ,y Sonuç abs(x) int int x'in mutlak değeri
sqrt(x) double double x'in kareköküexp(x) double double ex değerilog(x) double double ln(x) değerilog10(x) double double log10(x) değeri
ceil(x) double double x ten büyük ilk tamsayıfloor(x) double double x ten küçük ilk tamsayı
Örn: Matematiksel fonksiyonların kullanımı #include <stdio.h>#include <stdlib.h>#include <math.h>
int main(int argc, char *argv[]){
double x,y,sonuc;printf("x sayisini giriniz.\n\n");scanf("%lf",&x);printf("y sayisini giriniz.\n");scanf("%lf",&y);sonuc=abs(x);printf("x sayisinin mutlak degeri=%0.2f\n\n",sonuc);sonuc=pow(x,y);printf("x^y=%0.2lf\n\n",sonuc);sonuc=sqrt(x);printf("x sayisinin koku=%0.2lf\n\n",sonuc); sonuc=exp(x);printf("e^x=%0.2lf\n\n",sonuc);sonuc=log(x);printf("ln(x) degeri=%0.2lf\n\n",sonuc);sonuc=log10(x);printf("log10(x) degeri =%0.2lf\n\n",sonuc);sonuc=ceil(x);printf("x ten buyuk ilk tamsayi degeri =%0.2lf\n\n",sonuc);sonuc=floor(x);printf("x ten kucuk ilk tamsayi degeri =%0.2lf\n\n",sonuc);
}
DÖNGÜ VE KOŞUL DEYİMLERİProgramlar genel olarak üç temel blok kullanılarak gerçekleştirilebilirler. Bunlar; artarda, bir koşula bağlı olarak ve sonlu sayıda yineleme (döngü) dir.1. KOŞUL DEYİMLERİBirkaç seçenekten birini seçmek veya bir deyimi bir koşula bağlı olarak işlemek için kullanılır.1.1. if-then-else DEYİMİ
if (<mantıksal ifade>) blok_doğru;else blok_yanlış;
<mantıksal ifade> doğru ise blok_doğru, yanlış ise else sözcüğünden sonraki blok_yanlış yürütülür. else kısmı seçimlidir, gerekmiyorsa kullanılmayabilir.
Örn: Girilen sayının tek/çift olduğunu yazan program #include <stdio.h>main(){ int i; scanf("%d", &i); if ( i % 2 == 1) printf("Tek"); else printf("Cift");}
Bileşik (Compound) Deyimler{ ve } karakterleri ile sınırlandırılmış bir dizi deyimden oluşur. Bloklarda birden fazla deyim kullanmak gerektiğinde bileşik deyim kullanılır.
ek =s1;else if (s2<s3) ek =s2; else ek = s3; printf("En kucuk olani = %d", ek);
II. yol : int s1,s2,s3,ek;
ek=0; scanf("%d%d%d", &s1, &s2, &s3);
ek = s1; if (ek>s2)
ek =s2; if (ek>s3) ek =s3; printf("En kucuk olani = %d", ek);
Örn: Fonksiyonun girilen x değeri için aldığı değeri hesaplayıp yazan program.
y2− y1
x2−x1=
y− y2
x−x2 (İki noktası bilinen doğru denklemi)
Örn: Vergi iadesini hesaplayan program yazınız.(0-60 bin %10, 60-120 bin %8, 120-200 bin %6 ve daha fazlası %4)main(){ float fat_top, vergi_iade; printf("Fatura toplamlamini giriniz "); scanf("%f", &fat_top); if (fat_top < 60000) vergi_iade = fat_top * 0.10; else if (fat_top < 120000) vergi_iade = fat_top* 0.08; else if(fat_top < 200000) vergi_iade = fat_top* 0.06; else vergi_iade = fat_top * 0.04;
printf("Ödenecek vergi iadesi = %f\n", vergi_iade);}
Örn: G irilen tarihteki günün adını veren programı yazınız. #include <studio.h>main ( ){ int gun, ay, yil ; long gt ; printf("Tarihi gir") ; scanf ( "%d %d %d ",&gun);
gt=( yil*1)*365 + yil/4;
if (ay==2)gt = gt + 31 ;
else if (ay ==3)gt = gt + 31 + 28 ;
else if (ay ==4)
main(){ float y, x; printf("x değerini giriniz"); scanf("%f", &x); if (x > -1 && x<2) y = 2.0/3.0 * (x + 1.0); else if (x>=2 && x<=3) y = 2.0; else y = 0.00; printf("Fonksiyonun değeri = %f", y);}
case seçenek1 : Deyim; case seçenek2 : Deyim; . . .default : Deyim;
}
Seçicinin aldığı değere eşit seçeneğin olup olmadığına bakar. Var ise o noktadan sonraki deyimler yürütülür. switch deyiminin sonuna gelindiğinde veya break deyimi ile karşılaşıldığında yürütme işlemi durur ve programın akışı switch deyimini izleyen deyim ile devam eder.
Seçici Ordinal tiplerden biri olmalıdır (Ordinal tip: tüm değerleri listelenebilinen veri tipleri - integer, char).
Seçici ile seçenekler aynı tipte olmalıdır. default kısmı seçimliktir. Seçeneklerin hiçbiri uygun değil ise yürütülür.
switch(i) { case 1 : printf("Bir"); case 2 : printf("İki"); default : printf("Hiçbiri"); }i=1 ise çıkış BirİkiHiçbirii=2 ise çıkış İkiHiçbiri Sorunu ortadan kaldırma için her durum için break deyimi eklenmeli.
Örn: Klavyeden girilen sayılara ve işleme göre dört işlem yapan program #include <stdio.h>main(){ char islem; int s1, s2, s3; printf("Önce işlemi sonra sayıları girin "); scanf("%c%d%d",&islem, &s1, &s2); switch (islem) { case '+' : s3 = s1 + s2; break; case '-' : s3 = s1 - s2; break; case '*' : s3 = s1 * s2; break; case '/' : s3 = s1 / s2; break; default : printf ("Hatalı işlem"); } printf("\nSonuç = %d",s3);}
Örn: Girilen ay değerine göre mevsimi gösteren program int ay; scanf("%d", &ay);
Örn: 16'lık sistemdeki rakamın 10'luk sistemdeki karşılığı (char tipinin sayı gibi davranışı). Not: Büyük harfe duyarlı char c; int i; scanf("%c", &c); switch(c) { case '0': i=0; break; case '1': i=1; break; case '2': i=2; break; case '3': i=3; break; case '4': i=4; break; case '5': i=5; break; case '6': i=6; break; case '7': i=7; break; case '8': i=8; break; case '9': i=9; break; case 'A': i = 10; break; case 'B': i = 11; break; case 'C': i = 12; break; case 'D': i = 13; break; case 'E': i = 14; break; case 'F': i = 15; break;} printf("%d",i);
2.DÖNGÜ DEYİMLERİBir ya da birden fazla deyimin tekrar edilmesini sağlarlar. C dilinde while, for ve do-while deyimleri döngü işlevini sağlar. Tekrar edilen deyimlere döngü gövdesi denir.
2.1. For DEYİMİ
for (ifade1 ; ifade2 ; ifade3 ) ifade;
ifade2 doğru ( veya farklı 0) olduğu sürece ifade yürütülür (bitiş koşulu).Döngünün ilk adımından önce ifade1 yürütülür ( başlangıç adımı).Döngünün her adımında ifade3 yürütülür (artış miktarı).
for (i = 1; i < 5; i++) printf("%d ",i);
ifade1, ifade2 ve ifade3 seçimliktir. ifade2 belirtilmez ise her zaman doğru olduğu ( == 1 ) kabul edilir. Yani sonsuz döngü oluşur.
for (i = 1; ; i++)
printf("%d ",i);
Örn: 1'den 100'e kadar olan sayıların toplamı. int j =0,i;for (i=1; i<=100; i=i+1)
j =j+i;printf("Toplam %d",j);
Örn: Girilen sayının faktöriyelini bulunuz. int fact,j,i;fact=1;i=4; /*faktoriyeli hesaplanan sayı*/for (j=1; j<=i; j++)fact =fact*j;printf("Faktöriyel=%d",fact);
Örn: Çarpım tablosu.(içi içe döngüler) main(){ int i,j; for (i=1; i<=10; i++) {
Örn: Klavyeden girilen iki sayı arasındaki çift sayıları ekranda gösteren program. int s1,s2,i; printf("Birinci sayi giriniz "); scanf("%d", &s1); printf("İkinci sayi giriniz "); scanf("%d", &s2); for (i=s1; i<=s2; i=i+1) { if(i%2==0) printf("%d \n",i);
}
Örn: Toplama işlemini kullanarak çarpma işlemini gerçekleştiriniz.
int a, b, carpim,i; carpim=0; printf ("iki sayiyi giriniz "); scanf("%d%d", &a, &b); for(i=0;i<b;i++){ carpim = carpim + a; } printf("Carpma sonucu = %d", carpim);
2.2. while DEYİMİ
while (<mantıksal ifade> ) {Deyim}
Mantıksal ifade doğru olduğu sürece Deyim yürütülür. Eğer yanlış ise kontrol bir sonraki deyime geçer.
Örn: 1-100’e kadar olan sayıların toplamı int i, toplam; i =1; toplam = 0; while (i<101) { toplam =toplam+i; i =i+1; } printf("Toplam = %d",toplam);
Örn: Toplama ve çıkarma kullanarak çarpma işlemini gerçekleştiriniz main(){ int a, b, c; printf ("iki sayiyi giriniz "); scanf("%d%d", &a, &b); c = 0; while (b > 0) { c = c + a; b = b - 1; } printf("Sonuc = %d", c);}
Örn: Girilen sayının faktöriyelini hesaplayan programı yazınız. int n; int f; printf ("sayiyi giriniz "); scanf("%d", &n); f = 1; while (n > 1) { f = f * n; n = n - 1; } printf("Sonuç = %d\n", f);
Örn: Klavyeden girilen sayıları oku. Sayıların toplamı 20'den büyük veya eşit olduğu zaman dur.
main(){
int i, j = 0; while (j<20) {
scanf("%d",&i);
j =j+i; }
printf("Toplam = %d",j);}
Örn: Sınavın ortalamasını hesaplayan programı yazınız. Durum 1: sınava giren öğrenci sayısı belli main(){int i, ogr_say, not; float ort,not_top; not_top = 0; i = 0; printf("Ogrenci sayisini giriniz "); scanf("%d", &ogr_say); while (i < ogr_say) {
} ort = not_top/ogr_say; printf("Ortalama = %0.2f\n", ort); }Durum 2: sınava giren öğrenci sayısı belli değilBu durumda girişin bittiğini gösterir bir bilgiye (işarete) ihtiyaç vardır. Sınav notu için 0 dan küçük bir değer girildiğinde girme işleminin sona erdiğinin varsayalım.int ogr_say, not;float ort,not_top;not_top=0; ogr_say=0;
2.3. do-while DEYİMİBir koşul doğru oldukça kadar döngü yürütülür.
do Deyimwhile (<mantıksal ifade>)
Mantıksal ifade doğru olduğu sürece döngü tekrar edilir. Yanlış olduğunda while sözcüğünden sonraki deyim yürütülür. Karşılaştırma
while : Koşul başlangıçta test ediliyor. Döngü sıfır veya daha fazla yürütülüyor. do-while : Koşul sonda test ediliyor. Döngüye en az bir defa kesin giriliyor.
Örn: 5 sayısı girilene kadar oku.
int i; do scanf("%d",&i); while (i!=5); printf("dongu bitti");
Örn: Sadece +, - kullanarak * işlemini gerçekleştirme. main(){ int a, b; int c; scanf("%d%d", &a, &b); c = 0; do { c = c + a; b = b - 1; } while (b>0); printf("%d\n", c); }Örn: 0 - 100 arasında tutulan sayının tahmini. main(){ int tahmin; /* tahminimiz */ int min; /* Tahminin alt siniri */ int max; /* Tahminin ust siniri */ char cevap; /* Kullanicinin cevabi */ min = 0; max = 100; do { tahmin = (max - min) / 2 + min; printf("Tahminim %d\n",tahmin); scanf("%c",&cevap); if (cevap == 'B') max = tahmin - 1; else if (cevap == 'K') min = tahmin + 1; } while (cevap != 'E');}
KAYNAKLAR1. M.Şahin, Yapısal Programlama Ders Notları, Çanakkale Onsekiz Mart Üniversitesi Mühendislik Mimarlık Fakültesi Bilgisayar Mühendisliği Bölümü.2. H.M. Deitel ve P.J. Deitel, C ve C++, Sistem Yayıncılık, 2005.3. MEB, Programlamaya Giriş ve Algoritmalar Ders Notları.4. A.Bingül, C programlama Diline Giriş Ders Notları, Gaziantep Üniversitesi, Fizik Mühendisliği Bölümü.
TEK BOYUTLU DİZİLERDizi veri yapısı: aynı tip verilerin toplanıp tek isim verilmesi.
Veri_tipi değişken_adı[boyut];float a[100];
Bu tanımlama ile a isimli değişkeni 100 float değerin saklandığı bir diziyi gösterir. Bu 100 veriye a değişkeni ile erişilir.
Dizinin herhangi bir elemanına erişmek veya değiştirmek için kaçıncı eleman olduğunu gösterir indis bilgisini vermek gerekir. İlk elemanın indisi 0 dır.
A[4] dizinin 5. elemanıA[0] dizinin ilk elemanıA[1] = 45; dizinin 2. elemanına 45 atanırA[7] = A[7] + A[1]; dizinin 8. elemanına kendisi ile 2. elemanın toplamı atanır
ÇOK BOYUTLU DİZİLERÇok boyutlu bilgileri veya veri tablolarını saklamak için kullanılır. İki boyutlu diziler daha sık kullanılır. Örneğin; yıllara ve aylara enflasyon rakamının takibi, matematikteki matris işlemlerinin gerçeklenmesi, öğrenciler ve aldıkları derslerin takibi.
Tanımlama biçimi : Veri_tipi değişken_adı[boyut][boyut];Örneğin : float enf[5][12];
enf dizisi iki boyutlu bir dizidir. Birinci boyut satırları, ikinci boyut sütunları gösterir.
1 2 3 4 5 6 7 8 9 10 11 121
2345
Örn: Çok boyutlu dizi oluşturunuz. Elemanlar rastgele atansın.
int a[5][4]; int i,j; for(i=0;i<5;i++) for(j=0;j<4;j++) { a[i][j]=rand()%51; } printf("%d\n",a[2][1]); printf("%d",a[3][2]);
int a[5][4]; int i,j; for(i=0;i<5;i++) for(j=0;j<4;j++) { a[i][j]=j+1; } printf("%d\n",a[2][1]); printf("%d",a[3][2]);
FONKSİYONLAR (İŞLEVLER)
Problem çözmenin ilkelerinden biri problemi mümkün olduğu kadar çok parçaya bölmek idi. Daha sonra bu parçalar bağımsız olarak düşünülüp çözümleri elde edilebilir. C'de bu bölme işlemi işlev kullanarak yapılır.Belli bir işi gerçekleştiren program deyimlerinin karmaşık programları düzenlemek ve basitleştirmek için programın bir birimi olarak gruplandırılması.
İşlevin tanımlanma biçimi
dönüş_tipi işlev_adı(parametreler) { yerel tanımlamalar
deyimler }
dönüş_tipi: Eğer işlev bir değer geri gönderecek ise değerin tipini belirtir. Belirtilmez ise int kabul edilir. Eğer işlev değer göndermeyecek ise dönüş_tipi yerine void yazılır.
işlev_adı: İşlev çağırılırken kullanılacak ad.
parametreler: İşlev için gerekli değerleri içerir. Her parametre değişken tanımlar gibi tanımlanır. Her birinin arasında ',' kullanmak gerekir.yerel tanımlamalar: Bu işleve özgü değişken ve sabit tanımlamalar.
Eğer işlev bir değer gönderecek ise bu return deyimi ile yapılır.
return değer;
Örn: İki sayının toplamını hesaplayan fonksiyon void topla (int a,int b){
Örn: Bir tamsayının faktöriyelini hesaplayan işlev ve kullanımı. long fakt ( int n)
{ int j; long f = 1; for ( j = 2; j <=n; j = j + 1) f = f * j; return f; }main(){ int i; printf("Sayiyi giriniz "); scanf("%d", &i); printf("%d\n", fakt(i));}
Örn: Bir tamsayının kübünü veren işlev ve kullanımı. int kub(int i){ return i*i*i; }
int main(int argc, char *argv[]) {
int sayi; printf("sayiyi gir "); scanf("%d", &sayi); printf("Kubu = %d\n", kub(sayi)); return 0;}
Örn: Üç sayıdan en büyüğünü veren işlev ve kullanımı. int max(int s1, int s2, int s3){ if (s1>s2 && s1>s3) return s1; else if (s2>s3) return s2; else return s3;}
Örn: Üs alma işlevini gerçekleyen işlev ve kullanımı. float us (float a, int b){ int i; float r; r = 1; for (i = 1; i<=b; i++) r = r * a; return r;}
int main(int argc, char *argv[]) {printf("2 uzeri 3= %0.2f\n", us(2,3)); float d=us(4,2);printf("hesaplanan deger= %0.2f",d); return 0;}Örn: Dört işlem yapan fonksiyon. int calculate(char islem, int a, int b){ int s; switch( islem ){ case '+' : s = a + b ; break; case '-' : s = a - b ; break; case '*' : s = a * b ; break; case '/' : s = a / b ; break; default : s = 0; } return s;}
int main(int argc, char *argv[]) {
printf("3 ve 5 in toplami= %d\n",calculate('+',3,5));
int s=calculate('+',3,5); printf("3 ve 5 in toplami= %d\n",s);
printf("5 den 3 u cikarirsak= %d\n",calculate('-',5,3));
return 0;}
Örn: Dışarıdan girilen iki sayı arasındaki sayıların toplamını bulan fonksiyon.
int topla(int a, int b){ int t=0; int i; for(i=a+1;i<b;i++) t=t+i;
return t;}
int main(int argc, char *argv[]) {
int s1,s2; printf("1. sayiyi gir "); scanf("%d", &s1); printf("2. sayiyi gir "); scanf("%d", &s2);
printf("Sonuc %d", topla(s1,s2));
return 0;}
Örn: Dışarıdan girilen iki sayı arasındaki çift sayıları alt alta listeleyen fonksiyon.
void liste(int a, int b){
int i; for(i=a;i<b;i++) if(i%2==0)printf("%d\n",i); }
int main(int argc, char *argv[]) {
int s1,s2; printf("1. sayiyi gir "); scanf("%d", &s1); printf("2. sayiyi gir "); scanf("%d", &s2);
liste(s1,s2);
return 0;}
Karışık Örnekler1) {1,2,3,4,5,6,7,8}dizisindeki kırmızı renkli elemanları ekrana yazdıran program.
int dizi[8]={1,2,3,4,5,6,7,8};int i;for(i=0;i<8;i=i+2)printf("%d\n",dizi[i]);
2) {1,2,3,4,5,6,7,8}dizisindeki kırmızı renkli elemanları başka bir 4 elemanlı diziye atayan program.
int dizi[8]={1,2,3,4,5,6,7,8};int dizi2[4];
int i;int j=0;for(i=0;i<8;i=i+2){
dizi2[j]=dizi[i];j++;
}
for(i=0;i<4;i++)printf("%d\n",dizi2[i]);
3) {3,4,1,1,6,7,8} dizisindeki tek sayıları başka bir 4 elemanlı diziye atayan program.
int dizi[7]={3,4,1,1,6,7,8} ;int dizi2[4];int i;int j=0;for(i=0;i<7;i++){
if(dizi[i]%2==1){dizi2[j]=dizi[i];j++;
}}
for(i=0;i<4;i++)printf("%d\n",dizi2[i]);
4) Aşağıdaki diziyi oluşturunuz.1 1 1 12 2 2 23 3 3 34 4 4 4 int a[4][4]; int i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) { a[i][j]=i+1; }
5) Kendisine gönderilen sayının {1,4,6,11,14,56} dizisinin içinde olup olmadığını ekranda yazdıran program.
void gonder(int a){
int dizi[6]={1,4,6,11,14,56} ;int i;for(i=0;i<6;i++){if(dizi[i]==a) { printf("var"); goto son;}
}printf("yok");son:;
}
int main(int argc, char *argv[]) {
int s;printf("sayiyi gir"); scanf("%d",&s);gonder(s);
return 0; }5) Kendisine gönderilen sayıdan, {1,4,6,11,14,56} dizisinin içindeki sayılardan büyük olanları ekranda yazdıran program.
void gonder(int a){
int dizi[6]={1,4,6,11,14,56} ;int i;for(i=0;i<6;i++){if(dizi[i]>a) printf("%d\n",dizi[i]);
}}
int main(int argc, char *argv[]) {
int s;printf("sayiyi gir"); scanf("%d",&s);gonder(s);
return 0;}
KAYNAKLAR1. M.Şahin, Yapısal Programlama Ders Notları, Çanakkale Onsekiz Mart Üniversitesi Mühendislik Mimarlık Fakültesi Bilgisayar Mühendisliği Bölümü.2. H.M. Deitel ve P.J. Deitel, C ve C++, Sistem Yayıncılık, 2005.3. MEB, Programlamaya Giriş ve Algoritmalar Ders Notları.4. A.Bingül, C programlama Diline Giriş Ders Notları, Gaziantep Üniversitesi, Fizik Mühendisliği Bölümü.