Ekranda çıkacak görüntü Dizinin elemanlarının değerleri 1 2 3.. 10 Kare alma işlemi sonrası dizinin elemanlarının değerleri 1 4 9.. 100 Notlar Tanımlanan dizi boyutunun dışında bir eleman kullanımı durumunda C dili hata vermez . İlk indisin değerinin sıfır olması dolayısıyla dizinin n. elemanın indisi n değil n-1 dir. Gerektiği durumlarda dizi elemanlarının ilklendirilmesi unutulmamalı - tanımlama anında int a = ; / fazla eleman yazılırsa hata oluşur / int a = ; / boyut belirtilen değer kadar olur / - giriş yaptırarak scanf ; - doğrudan değer atayarak a = 4; Dizinin Boyutunu Değişken Kılma #define önişlemcisi direktifi Simgesel sabit tanımlanmasını sağlar. C dili deyimlerinden biri değildir . Kullanım biçimi #define SabitAdı Değeri Program çalıştırıldığınde derleme işlemi öncesinde program içerisinde SabitAdı simgesinim geçtiği yerlere Değeri konur. Örnek : 25 kişilik bir sınıftaki öğrencilerin sınav sonuçlarını okuyup ortalamasını bulan program. not bilgilerin saklanacağı veri yapısını belirle ve tipi tanımla notları girdiren yöntemi yaz Ortalamayı bulan fonksiyonu yaz #include <stdio. h> #define OGR_SAY 25 void giris ; float ortalama ; main void giris { int i; for (i=0; i<OGR_SAY; i++) / 0 dan başladığı için < kullanıldı / } float ortalama 50'den küçük değerleri yazan işlev 50'den küçük değerlerin sayısını veren işlev en yüksek notu veren işlev Standart sapmayı veren işlen ( (abs / OGR_SAY)) Örnek : İki dizinin toplamını üçüncü bir diziye yazan programı yazınız . Doğrudan C := A + B yazılamayacağı için dizinin ilgili elemanlarını tek tek toplamalıyız. #include <stdio. h> #define MAX 20 void dizitopla ; main { int a , b , c ; int i; for (i=0; i<MAX; i++) dizitopla ; clrscr ; for (i=0; i<MAX; i++) printf(" %4d + %4d = %4d \n", a, b, c); } void dizitopla / c = a +b / 5.3 Sıralama Dizi elemanlarının küçükten büyüğe veya büyükten küçüğe doğru dizilmesi işlemi. Farklı performansa sahip birçok yöntem vardır. Şimdilik en basit olanlardan biri incelenecektir. Selection Sort Dizinin en küçük elemanı bulunur ve birinci eleman ile yer değiştirilir. Bu işlem (n-1). elemana kadar tekrar edilir. Her adımda en küçük eleman dizinin kalan elemanlarından bulunur. Örneğin aşağıda 4 elemanlı bir diziye yöntemin uygulanması gösterilmiştir. Buble Sort Bu yöntemde ardışıl iki eleman karşılaştırılır. Eğer önceki eleman sonrakinden büyük ise elemanlar yer değiştirilir. Bu şekilde dizi taranır. Eğer herhangi bir değişiklik yapılmış ise işlem tekrar edilir. Başlangıç 1. adım 2. adım 3. adım 34 21 18 18 21 18 21 21 18 25 25 25 25 34 34 34 Görüldüğü gibi, bu yöntemde dizi sıralandıktan sonra bir defa daha taranıyor. Selection Sort Kodlaması 1. Dizinin en küçük elemanının indisini veren işlev 2. Bu işlevi kullanarak diziyi sıralama Bubble Sort Kodlaması 5.4 Çok Boyutlu Diziler Ç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 matriş işlemlerinin gerçeklenmesi, öğrenciler ve aldıkları derslerin takibi. Tanımlama biçimi : İki türlü yapılabilir. Tip Değişken_Adı ; Örneğin ; float Enf ; Enf tipi iki boyutlu bir dizidir. Birinci boyut yılları, ikinci boyut ayları gösterir. 1. Ay 2. Ay 3. Ay 4. Ay 5. Ay 6. Ay 7. Ay 8. Ay 9. Ay 10. Ay 11. Ay 12. Ay 1 2 3 4 5 C dilinde boyut sayısında bir sınır yoktur. Biligisayarın belleği boyutu sınırlar. Dizilerin bellekte saklanma biçimi : Erişimin kolay olması için dizinin tüm elemanları peşpeşe saklanır. Burada önce satır sonra sütunlar saklanır. !!! Çok boyutlu dizileri bir işleve gönderirken ilk boyut dışındaki boyutların büyüklüklerini vermek zorunludur. Örnek : İki boyutlu dizi üzerine. #include <stdlib. h> #define SATIR 5 #define SUTUN 5 double enbuyuk ; void matris_oku ; main { double a ; double b ; / satirlardaki en buyuk elemanlar / double c ; / satirlardaki sutunlarin toplami / int i, j; matris_oku ; for (i = 0; i < SATIR; i++) b = enbuyuk ; / Satirdaki elemanlarin toplamlarinin olusturdugu matris / for (i = 0; i < SATIR; i++) clrscr ; for (i = 0; i < SATIR; i++) } double enbuyuk / Function EnBuyuk / void matris_oku / matris_oku / Örnek : Bir kare matrisin o. Matrisin simetrik olup olmamasını sınayan program o. Matrisin transpozesini bir diğer matrise kopyalayan program o. İki matrisinin çarpımını gerçekleştiren program o. köşegeninin alt kısmındaki elemanları sıfırlayan yöntemi, o. Determinantını hesaplayan fonksiyonu, o. M<=P ve N<=Q olmak üzere A matrisi MxN ve B matrisi PxQ boyutlarındadır. B matrisi içerisinde A matrisininin olup olmadığı belirlenecektir. A matrisinin B matrisi içerisinde kaç kez bulunduğunu ve bunların B matrisi içerisinde başlangıç konumlarını veren programı yazınız. o. MxN elemanlı bir matrisi tek boyutlu bir diziye dönüştüren program o. P elemanlı bir diziyi MxN boyutlu matrise dönüştüren program . / Program Matris-2 / #include <stdlib. h> #define SATIR 3 #define SUTUN 3 void matris_oku ; void matris_yaz ; int simetrik ; / matrisin simetrikliğini sınar / void transpoze ; / 2. = 1. nin transpozesi / void matris_carp ; / 3 = 1 2 / / alt_ucgen_sifirla ; matris_yaz ; printf("\n"; transpoze ; matris_yaz ; matris_carp ; printf("\n"; matris_yaz ; if (simetrik printf("Simetriktir\n"; else printf("Simetrik değildir\n"; / getch ; } void matris_oku / matris_oku / void matris_yaz { int i, j; for (i = 0; i<SATIR; i++) } int simetrik { int i, j; int durum; durum = 1; / simetrik olduğunu varsay / for (i = 0; i<SATIR; i++) for (j = 0; j<SUTUN; j++) if return durum; } / simetrik / void transpoze void matris_carp / c = a b / { int i, j, k; for (i = 0; i<SATIR; i++) for (j = 0; j<SUTUN; j++) } void alt_ucgen_sifirla int det { int i, j, k; int s, sx1, sx2; s = 0; / for (j = 0; j<SUTUN; j++) { sx1 = 1; sx2 = 1; for (k = 0; k<SATIR; k++) s = s + sx1 - sx2; } / return s; }

Örnek 4.5 : 8 bit olarak girilen bir sayıya eşlenik bitini ekleyen programı yazınız Eşlenik biti en düşük anlamlı bit olarak eklenecektir. Algoritma 1. Sayıyı oku. 2. Sayıdaki birlerin sayısını bul. 3. Birlerin sayısı tek ise 1, çift ise 0 ekle. Programı yazarken 2. ve 3. adımlar işlev olarak yazılacaktır. / Eşlenik biti ekleme / int bulbir ; int eklebir ; main int bulbir { int kacbir = 0; while (sayi>0) return kacbir; } / BulBir / int eklebir / Eklebir / Karşı taraf için gereken algoritmayı yaz . Örnek 4.6 : A işyerindeki bir personelin hangi dilimden gelir vergisi ödeyeceğini belirten fonksiyonu yazınız. Girdi : personelin birikmiş vergi matrahı Çıktı : Kesinti yüzdesi İlgili bilgi : 0-20 Milyon %25, 20-40 Milyon %30, 40-80 Milyon %35, 80-160 Milyon %40 >180 Milyon %45 int v_oran ; Örnek 4.7 : Gelir vergisi matrahı ve önceki aylara ait birikmiş vergi matrahı belli bir personelin gelir vergisini hesaplayan fonksiyonu yazınız. Vergi := Gelir vergisi matrahı Vergi oranı Not : Eğer personel bu ay dilim değiştiriyorsa gelir vergisi gerektiği şekilde eski ve yeni dilime paylaştırılarak kesinti hesaplanmalıdır. Örnek 4.8 : Girilen harfi büyük harfe dönüştüren fonksiyon Girdi : karakter Çıktı : karakter char buyuk ; Örnek 4.9: Girdi : iki sayı ve aralarındaki işlem Çıktı: iki sayı arasındaki işlemin sonucu int calculate return s; } Çağırma biçimi a = calculate ('+',4,8'; a = calculate ('/', 4,2) calculate (' ', 2,2); Örnek 4.10: Bir işlevin köklerinden birini Newton yönetimi ile bulan prg. ( x2-2 ) #include <stdio. h> #include <math. h> double fn ; double fnt ; main { double x, x0; double hata; hata = 0.0001; / izin verilen hata / x = 8; / başlangıç değeri / do while (fabs(x-x0)>hata); printf ; printf ("f = %f\n", fn ; } double fn / işlevin değeri / double fnt / işlevin türevinin değeri / Örnek :4.11: İki sayının ortak katlarının en küçüğünü veren işlevi yazınız. #include <stdio. h> long okek ; main long okek / p < q olmali. Degil ise yerlerini değiştir. / { long i, k; if / p nin öyle bir katını bul ki q sayısına tam bölünsün 2 sayısından itibaren taranmaya başlanabilir fakat p/q yeterli / i = q / p; do while ( k % q!= 0); return k; Örnek :4.12: İstenen sayıdaki asal sayıyı listeleyen programı yazınız. #include <stdio. h> int asal ; main { int i ; / asal olup olmadığı sınanacak sayılar / int kac; / ilk kaç asal sayının listeleneceği bilgisi / int j; / listelenen asal sayıların adetini tutar / clrscr ; printf("ilk kaç asal sayı listelenecek : "; scanf ; / for deyiminde ifade3 kısmında döngü değişkeni yerine farklı bir değişkenin değeri değiştiriliyor. Döngü değişkeni ide incelenen sayı asal ise arttırılıyor / i = 2; for (j = 1; j<=kac;i++) if (asal } int asal / sayı asal ise 1 değilk ise 0 değerini alır / Örnek :4.13: Belirtilen tarihteki ayın kaç gün sürdüğünü veren işlevi yazınız. Girdi : Ay ve yıl Çıktı : Aydaki gün sayısı int aydakigun { int i; switch return i; } Örnek :4.14: Önümüzdeki yılda Ramazan Bayramı nın hangi tarihte kutlanacağını hesaplayan programı yazınız. Bu yılki tarih klavyeden gün ay ve yıl olarak okunacakır. Girdi: Bu yıl kutlanılan tarih Çıktı : Sonraki tarih #include <stdio. h> int aydakigun ; main { int gun, ay, yil; int i, j ; clrscr ; printf("Bu yılki tarihi giriniz : "; scanf ; yil = yil + 1; gun = gun - 11; if (gun < 1 ) { ay = ay - 1; if (ay < 1 ) gun = gun + aydakigun ; } printf ; } Örnek :4.15: Girilen bir tamsayının basamaklarının sırasının tersinin oluşturduğu sayıyı veren işlevi yazınız. #include <stdio. h> long tersi ; main long tersi { long a, b; a = 0; while (k>0) return a; } 4.2 Özyineleme İşlevler Kendini çağıran fonksiyonlardır. Örnek 4.2.1: Faktoriyel hesabı long fakt / fakt = i! / Örneğin n=4 için fonksiyonun kendisini çağırdığı satır şöyledir: 4 fakt(3), 3 fakt(2), 2 Fakt(1) 24 = 4 6 <-- 3 2 <-- 2 1 Örnek 4.2.2: Ortak bölenlerin en büyüğünü bulan program . gcd = greatest common divisor long gcd / m ve n sayılarının ortak bölenlerinin en büyüğü / Örnek 4.2.3: İki sayı göreceli asal olup olmadığını veren fonksiyon (relativeli prime = gcd = 1 ) Örnek 4.2.4: Sayının 9 un katı olup olmadığının basamak toplamlarının 9 olması ile bulunması int kati9 { int t; if ( s < 10) return ( s 9); else { t = 0; while ( s > 0) s = kati9 ; } } 5- Diziler Şu ana kadar basit değişkenler kullandık . Yapısal değişken: benzer verilerin tek bir değişken altında gruplandırılması. Dizi veri yapısı: Aynı tip verilerin toplanıp tek isim verilmesi. 5.1 Dizi Tanımı ve Kullanımı Tip_Adı değişken ; Örneğin float a ; Bu tanımlama ile a isimli değişkeni 100 gerçel 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 dizinin 5. elemanı A dizinin ilk elemanı A := 45; dizinin 2. elemanına 45 atanır A := A + A ; dizinin 8. elemanına kendisi ile 2. elemanın toplamı atanır Dizinin eleman değerler tanımlama anında yapılabilir. int a = 0 1 2 3 4 5 6 7 8 9 25 18 20 0 29 5 4 8 19 13 Dizi Kullanıma Örnekler Örnek: Dizi elemanlarına değer ata, yazdır. / 1-10 arsındaki sayıların karesini dizi elemanlarına yükle yazdır / main Ekranda çıkacak görüntü 0. elemanın değeri = 1 1. elemanın değeri = 4... 9. elemanın değeri = 100 Örnek : Dizide ilk 20 Fibonacci sayıyı oluştur / ilk 20 Fibonacci f = 0, f = 1, f = f + h / #include <stdio. h> main Ekranda çıkacak görüntü 0. Fibonacci sayısı = 0 1. Fibonacci sayısı = 1 2. Fibonacci sayısı = 1... 19. Fibonacci sayısı = 4181 Örnek : Klavyeden 10 sayı oku. Tersten yazdır. #include <stdio. h> main { int a ; int i; for (i=0; i<=9; i++) printf("\n\n"; for (i=9; i>=0; i--) printf("%d. sırada girilen sayı = %d\n", 9-i, a); } Diziyi Bir İşleve Gönderme Şu ana kadar öğrenilen bilgi çerçevesinde işlevlere gönderilen parametrelerin içeriklerinin işlev içerisinde değiştirilmesi mümkün değildir. İşleve değişkenin değeri gönderilir. İşlev içerisindeki işlemlerden parametre etkilenmez. Dizilerde durum böyle değildir. Normal kullanımda dizi işleve gönderildiğinde elemanlar değiştirilebilir . Dizinin sadece herhangi bir elemanı gönderildiğinde ise değeri değiştirilemez Diziyi işleve gönderirken sadece adını parametre olarak yazmak yeterlidir. Örnek: işlev içerisnde dizi eleman değerlerinin değiştirilmesi #include <stdio. h> void kareleri ; main { int a ; int i; for (i=0; i<=9; i++) a = i + 1 ; clrscr ; printf("Dizinin elemanlarının değerleri\n"; for (i=0; i<=9; i++) printf ; kareleri ; printf("\n\nKare alma işlemi sonrası dizinin elemanlarının değerleri\n";

Örnek 3. 1.1.7: Girilen tarihteki günün adını veren programı yazınız. #include <studio. h> main 3.1.2 switch Deyimi switch(<seçici> 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. switch i=1 ise çıkış BirİkiHiçbiri i=2 ise çıkış İkiHiçbiri Sorunu ortadan kaldırma için her durum için break deyimi eklenmeli. . Seçici Ordinal tiplerden biri olmalıdır . . 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. #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 printf("\nSonuç = %d", s3); } Örnek 3.1.2.1: Mevsimleri yaz. scanf ; switch switch deyimi yerine if deyimi kullanılabilir. Ancak switch deyimi programı daha okunabilir kıldığı için gerekli olduğu durumlarda kullanılmalıdır. Örnek 3.1.2.2 : 16'lık sistemdeki rakamın 10'luk sistemdeki karşılığı . switch Örnek 3.1.2.3: Sınav notunu harfe dönüştüren programı yazınız. ( >=90 :AA, 85-89:BA, 80-84:BB, 75-79:CB, 70-74:CC, 60-69, <60 :F ) Örnek 3.1.2.4: Belirtilen tarihin hangi güne denk geldiğini bulan programı yazınız. else if yapısı yerine switch kullanarak 3.2 Döngü Deyimleri Bir ya da birden fazla deyimin tekrar edilemesini sağlarlar. C dilinde while, for ve do-while deyimleri döngü işlevini saşlar. Tekrar edilen deyimlere döngü gövdesi denir. 3.2.1 while Deyimi 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. Örnek 3.2.1.1 : 1'den 100'e kadar olan sayıların toplamı. 1. i =1 2. j = 0 3. i < 101 olduğu sürece 3.1 j = j + i 3.2 i = i + 1 4. Toplam j ' yi yaz main { int i, j; i =1; j = 0; while (i<101) printf ; } Örnek 3.2.1.2: Toplama ve çarpma kullanarak çarpma işmeini gerçekleyiniz. 1. a ve b sayılarını oku 2. c =0 3. b>0 olduğu sürece tekrarla.3.1. c=c + a 3.2. b = b-1 4. c değerini yaz ve dur main { int a, b, c; printf ; scanf ; c = 0; while (b > 0) printf ; } Örnek 3.2.1.3: Girilen sayının faktoriyelini hesaplayan programı yazınız. 1. n değerini oku 2. F=1 3. n >1 olduğu sürece tekrarla.3.1. F=F n 3.2. n= n-1 4. F değerini yaz main { int n; long f; printf ; scanf ; f = 1; while (n > 1) printf ; } Örnek 3.2.1.4: Klavyeden girilen sayıları oku. Sayıların toplamı 21'den büyük veya eşit olduğu zaman dur. main { int i, j = 0; while (j<21) printf ; } Örnek 3.2.1.5: 1993 yılı itibarı ile ülke nüfüsu 60 milyondur. Yıllık nüfüs artış oranı %2.3 tür. Sonraki 10 yılda ülke nüfüsunu yıllara göre listeleyen program. / Nufus Tablosu / #include <stdio. h> main { int i; / sayac / int yil; / yillar / float nufus; / nufus miktari / float artis; / artis orani / artis = 0.023; yil = 1993; nufus = 60000000; printf("%d - %10.0f\n", yil, nufus); i = 1; while (i < 11) } Örnek 3.2.1.6 : Girilen tamsayının mükemmel sayı olup olmadığının söyleyen programı yazınız. Örnek 3.2.1.7 : Girilen tamsayının kaç basamaktan oluıştuğunu söyleyen programı yazınız. Örnek 3.2.1.8 : Girilen tamsayı içerisinde kaç tane 1 olduğunu söyleyen programı yazınız. Örnek 3.2.1.9: Girilen tamsayının son üç basamağını yuvarlayan programı yazınız. son üç basamağı >=500 > 1000 e, <500 ise 0 a yuvarlayacak (2560 3000, 2490 2000 ) Örnek 3.2.1.10: Sınavın ortalamasını hesaplayan programı yazınız. 1. Durum : sınava giren öğrenci sayısı belli main { int i, ogr_say, not_top, not; float ort; not_top = 0; i = 0; printf ; scanf ; while ort = float / ogr_say; printf ; } 2. Durum : sınava giren öğrenci sayısı belli değil Bu durumda girişin bittiğini gösterir bir bilgiye 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. ogr_say = 0; printf"Sıradaki öğrencinin notu = "); scanf ; while (not >= 0) 3.2.2 For Deyimi for (ifade1 ; ifade2 ; ifade3 ) ifade; ifade2 doğru ( veya farklı 0) olduğu sürece ifade yürütülür . Döngünün ilk adımından önce ifade1 yürütülür . Döngünün her adımında ifade3 yürütülür . for (i = 1; i < 5; i++) printf ; ifade1, ifade2 ve ifade3 seçimliktir. ifade2 belirtilmez ise herzaman doğru olduğu ( 1 ) kabul edilir. Yani sonsuz döngü oluşur. for (i = 1; ; i++) printf ; Örnek 3.2.2.1: 1'den 100'e kadar olan sayıların toplamı. j =0; for (i=1; i<=100; i=i+1) j =j+i; printf ; Örnek 3.2.2.2: Girilen sayının faktöriyelini bulunuz. fact =1; for (j=1; j<=i; j++) fact =fact j; printf ; } Örnek 3.2.2.3: Çarpım tablosu. main { int i, j; for (i=1; i<=10; i++) } Örnek 3.2.2.4: ? işlevini çiziniz(0-8 noktaları arasında). 3.2.3 do-while Deyimi Bir koşul doğru olana kadar döngü yürütülür. do Deyim while (<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. 5 sayısı girilene kadar oku do scanf ; while (i!=5); i =1; do while (i<=10); Örnek 3.2.3.1: Sadece +, - kullanarak işlemini gerçekleştirme. main { int a, b; int c; scanf ; c = 0; do while (b>0); printf ; } 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. Örnek 3.2.3.2: 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 while (cevap!= 'E'; } Örnek 3.2.3.3: Sin fonksiyonun belli bie x için değerini seri açılımı ile hesaplayınız. Serinin ilk 10 terimini kullanınız. n tek sayı. main { float x; / fonksiyonun hesaplanacağı değer / float sinx; / sin in değeri / float xt; / eklenen terimin payı / float fakt; / eklenen terimin paydası, faktoriyel / int isaret; / terimin +/- olmasını sağlar / int i; clrscr ; printf("Hesaplanacak değer : "; scanf ; sinx = x; isaret = -1; fakt = 1; xt = x; for (i = 2; i<=10; i++) printf ; } Örnek 3.2.3.4 : Aynı örneği belli sayıda terim için değil, sonucu 4 basamak hassasiyetle hesaplayınız.

saaloun gençler.. baya ilginizi çekmiş anlaşılan

GiRiŞ Bilgisayar, verileri saklayan, bunlar üzerinde çok hızlı işlem yapan ve istenen verileri sunan bir aygıttır. Donanım ve yazılım diye iki bölüme ayrlır. Donanım bilgisayarın fiziksel bileşenleridir. Yazılım ise donanımı oluşturan bileşenlerin çalışmasını ve işlevlerini yerine getirmesini sağlayan programlardır. İşlemci Denetim Aritmetik Girdi Birimi Mantık Çıktı Birimi Ana Bellek Yan Bellek Girdi birimleri : Veri ve program girilmesini sağlar. Klavye, fare, kart okuyucu... Çıktı birimleri : İstenen verilerin kullanıcıya sunulduğu ortam. Ekran, yazıcı... Ana Bellek : Programların ve işlenen verilerin geçici olarak saklandığı birim. Yan bellek : Bilgilerin kalıcı olarak saklandığı ortamlar. Disket, disk, manyetik şerit. Bilgisayar broşuründe olan kavramlar, bit, byte, ... RAM, ROM... Bu günkü anlamda ilk bilgisayar ENIAC 30 ton, kablolar ile programlama 1842, Charles Babbag, analitik makine tasarlıyor. Programlanabilir bir cihaz Öncesi Hesap Makinesi. Ada Agusta programcısı. Bilgisayarlar : 1. Kusak 39 - 58 Vakum tüp ile çalışıyor 2. Kusak 58 - 64 Transistör 3. Kusak 64 - 75 Entegre 4. Kusak 75 - Yüksek ölçekli entegre Micro computer ( bu gün 50 - MIPS) Workstation Mini Computer Main Frame (50 lerde 50 IPS) Super Computer Bilgisayarın yapısı Bellek CPU Denetim Birimi ( Hangi işlem, ne zaman yapılacak, belirler Giriş/Çıkış : klavye : ekran İkincil bellek Hardware - Software Bilgisayarlar kendisine sorulan sorulara hemen cevap veren, bir sürü problemi çözen bir aygıt değildir. Bilgisayarda yapılan her tür iş, ilk önce insan aklının süzgecinden geçiyor, insanlar tarafından etraflıca tasarlanıyor, planlanıp programlanıyor . ilk yapılan bilgisayarın karşına geçip hemen en eski soruyu sormuşlar "Tanrı var mı". Bilgisayar kısa bir düşünmeden sonra "Evet artık var". Bu nedenle, önce bilgisayara problemin çözümü öğretilmelidir. Fakat bunun için bizim problemi çözmemiz gerekir. Ve daha sonra bir programlama dili ile bu çözüm bilgisayara aktarılmalıdır. 1- Problem Çözme ve Algoritmalar 1.1 Problem Çözme 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; 1. Doğruluğu kesin olarak kanıtlanmadıkça, hiçbir şeyi doğru olarak kabul etmeyin; tahmin ve önyargılardan kaçının. 2. Karşılaştığınız her güçlüğü mümkün olduğu kadar çok parçaya bölün. 3. 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. 4. 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. 1.2 Algoritmalar Belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir. İ. S. 9. yy da İranlı Musaoğlu Horzumlu Mehmet 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. 1. Girdi: Sıfır veya daha fazla değer dışarıdan verilmeli. 2. Çıktı: En azından bir değer üretilmeli. 3. Açıklık: Her işlem açık olmalı ve farklı anlamlar içermemeli. 4. Sonluluk: Her türlü olasılık için algoritma sonlu adımda bitmeli. 5. 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. Örnek 1.2.1 : 1'den 100'e kadar olan sayıların toplamını veren algoritma. 1. Toplam T, sayılar da i diye çağırılsın. 2. Başlangıçta T'nin değeri 0 ve i'nin değeri 1 olsun. 3. i'nin değerini T'ye ekle. 4. i'nin değerini 1 arttır. 5. Eğer i'nin değeri 100'den büyük değil ise 3. adıma git. 6. T'nin değerini yaz. 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 dil, bu kendimize özgü de olabilir, kullanılabilir. Aynı algoritmayı aşağıdaki gibi yazabiliriz. 1. T=0 ve i=0 2. i'nin değerini T'ye ekle. 3. i'yi 1 arttır. 4. i<101 ise 2. adıma git. 5. T'nin değerini yaz. Algoritmayı bir de akış şeması ile gerçekleyelim. T=0 İ=0 İ'nin Değrini T'ye ekle İ'yi bir arttır İ<101 T'yi yaz Örnek 1.2.2 : ax2+bx+c=0 tipi bir denklemin köklerini veren algoritma. Girdi : a, b ve c katsayıları Çıktı : denklemin kökleri 1. a, b ve c katsayılarını al. 2. D = b2-4ac değerini hesapla. 3. D<0 ise gerçel kök yok. 7. adıma git. 4. 5. 6. değerlerini yaz. 7. Dur. Döngü Gösterimi Tekrarlanan adımlar n. Koşul sağlandığı sürece n.1... n.2... tekrarlanan adımlar n.3... Örnek 1.2.3 : İki tamsayının çarpma işlemini sadece toplama işlemi kullanarak gerçekleyin. Girdi : iki tamsayı Çıktı : sayıların çarpımı 1. a ve b sayılarını oku 2. c =0 3. b>0 olduğu sürece tekrarla.3.1. c=c + a 3.2. b = b-1 4. c değerini yaz ve dur Örnek 1.2.4 : Bir tamsayının faktoriyelini hesaplayınız. Girdi : Bir tamsayı Çıktı : sayının faktoriyel İlgili formul: Faktoriyel =1 2... n 1. n değerini oku 2. F=1 3. n >1 olduğu sürece tekrarla.3.1. F=F n 3.2. n= n-1 4. F değerini yaz Örnek 1.2.5 : İ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. 1. a ve b değerlerini oku 2. m=0 3. a>=b olduğu sürece tekrarla 3.1 a=a-b 3.2 m = m + 1 4. kalan a ve bölüm m 'yi yaz Örnek 1.2.6 : 100 tane sayıyı okuyup, ortalamasını bul 1. T=0, i=0 2. i<101 olduğu sürece tekrarla 2.1 m değerini oku 2.2 T = T + m 2.3 i = i + 1 3. T = T / 100 4. Ortalama T 'yi yaz 5. Dur Örnek 1.2.7 : Bir sınava giren öğrencilerin not ortalamasının hesaplanması 1. Tüm sınav kağıtlarını inceleyip notların toplamını hesapla 2. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla 3. Ortalamayı yaz. 1. Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et 2. Sıradaki sınav kağıdının notunu notların toplamına ekle 3. İncelenen sınav kağıdı sayısını Bir arttır 4. İncelenecek sınav kağıdı var ise 2. Adıma git 5. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hasapla 6. Ortalamayı yaz 1. Notların toplamını ve incelenen sınav kağıdı sayısını sıfır kabul et 2. Her bir sınav kağıdı için 2.1. Sıradaki sınav kağıdının notunu notların toplamına ekle 2.2. İncelenen sınav kağıdı sayısını bir arttır 3. Ortalamayı notların toplamını incelenen sınav kağıdına bölerek hesapla 4. Ortalamayı yaz Koşul Gösterimi n. Koşul doğru ise n. D.1 n. D.2 doğru olduğunda işlenen adımlar n. D.3 aksi halde n. Y.1 n. Y.2 yanlış olduğunda işlenen adımlar n. Y.3 Kök bulma örneğinde 3. Adımı tekrar yazarsak 3. D>=0 ise 3. D.1 3. D.2 aksi halde 3. Y.1 Reel kök yoktur Sorular: Girilen üç sayıdan en büyüğünü bulan algoritmayı yazınız. Tamsayılarda üs alma işlemini gerçekleştiren algoritmayı yazınız . 1-100 arasında tutulan bir sayıyı tahmin eden algoritmayı yazınız. Örnek 1.2.8 : Aracın otopark ücretinin hesaplanması. Araçların en fazla 24 saat kaldığını varsayın. 0 - 2 saat 150 bin 2 - 8 saat 300 bin 8-24 saat 500 bin 1. Aracın kaç saat kaldığını öğren . 2. t <= 2 ise 2. D.1. ücret = 150 bin Aksi halde 2. Y.1. t<=8 ise 2. Y.1. D.1. ücret = 300 bin Aksi halde 2. Y.1. Y.1. ücret = 500 bin 3. ücreti yaz 4. Dur Örnek 1.2.9: Sınavdaki en büyük notun bulan algoritma. 1. En büyük = ilk sınav kağıdındaki not . 2. İncelenecek sınav kağıdı var ise 2.1 Sınav kağıdındaki not > En büyük ise En büyük = Sınav kağıdındaki not 3. En büyük değerini yaz. 4. Dur Algoritmanın yazımı daha simgesel olabilir. Ni i. Öğrencinin notu olsun. 1. EB = N1 2. i = 2 3. İncelenecek sınav kağıdı var ise 3.1 Ni>EB => EB = Ni 3.2 i = i + 1 4. EB' yi yaz. 5. Dur Örnek 1.2.10 : Programın C dili ile yazılıp çalışır hale getirilmesi. 1. Programı bilgisayara gir 2. Kaynak dosya olarak kaydet 3. Kaynak dosyayı derle 4. Derleme sonucunda hata var ise 4.1 Hataları düzelt 4.2 3. Adıma git 5. Oluşan amaç dosyasına diğer dosyaları bağla 6. Bağlama sonucunda hata var ise 6.1. Hataları düzelt 6.2. Hatalar kaynak dosya ile ilgili ise 2. adıma aksi halde 5. adıma git 7. Program çalıştırılmaya hazır

6. Karakter işleme Birçok program sayıların yanı sıra metinler üzerine işlem yapar. İlk akla gelen bir kelime işlem programıdır. Bu tür bir programda metinlerle ilgili olarak, araya karakter girme, silme, değiştirme ve arama gibi işlemler tanımlıdır. C dilindeki char tipi bu tür verilerin saklanması için kullanılır. 6.1 Tanımlamalar ve Kullanım karakter: Bilgisayarda tanımlı herhangi bir karakteri gösterir. Karakter sabitler tek tırnak içinde belirtilir. 'A', '0' '\65' : \ işaretinin ardından belirtilen ASCII kodlu karakter C dili karakterleri ayrıca int değer gibi de görür. 'A' karakteri sayısal olarak A harfinin ASCII tablosundaki karşılığı olan 65 olarakta yorumlanabilir. dizgi : Bir dizi karakterden oluşur. '\0' karakteri dizginin sonunu gösterir. Dizgi sabitler çift tırnak içinde gösterilir. "ALİ", "Bir sayı girin" Bu idafede dil \0 karakterini otomatik koyar. Karakter ile dizgi birbirinden farklı şeylerdir. Dizginin sonunda herzaman \0 karakteri vardır. 'A' ile "A" birbirinin aynısı değildir. 'A' karakterini gösteren 65 değerinde bellekte int olarak salanırken "A" ise bir dizgi olup A ve \0 karakterlerini içerir. Tanımlama biçimi: 1. Dizi şeklinde tanımlama char a = ; char a = "KOCAELİ"; / Son eleman olrak \0 karakteri eklendiği için eleman sayısını bir fazla belirtmeli / 2. İşaretçi olarak tanımlama char değişken; char a; Doğrudan Değer Atama char a ; char b; a = 'A'; / dizinin bir elemanına değer verir gibi ve tek tırnak içinde / \0 karakteri ayrıca belirtilmelidir. Dizi biçiminde tanımlı dizgiye sabir bir dizgi atarma için strcpy işlevi kullanılır. strcpy ; kaynak bilgisini hedef değişkenine kopyalar Hedef dizgisinde kaynak dizgisini içerecek kadar yer olmalıdır. strcpy(a, "ALİ"; b = "ALİ"; / çift tırnak içinde atanacak değer. \0 karakteri otomatik eklenir / Değerini Yazdırma printf ; puts ; sonu \0 ile biten karakter dizisini ekrana yazar ve imleçi alt satıra geçirir Klavyeden Değer Atama scanf ; / Boşluk karakterine kadar okuma yapacağı için içerisinde bu karakterin geçmesi olası girişlerde doğru çalışmaz. Adres operatörü kullanılmıyor / gets ; Satır sonu karakterine kadar basılan karakterleri okur Karakter Dizisinin Herhangi Bir Karakterine Erişme Dizilerde olduğu gibi erişilmek istenen karakterin indisi bildirilir. a = 'G'; b = 'G'; a = '\0'; printf("%c ", b ); / b'nin 4. elemanını yazar / Örnek 6.1.1 : Girilen bir metnin uzunluğunu veren programı yazınız. #include <stdio. h> main { char s; int i; gets ; i = 0; for (i=0; s!='\0'; i++) while (s!='\0' / boş işlem / i++; printf ; } strlen : Gönderilen değerin uzunluğunu verir. Örnek 6.1.2: Girilen bir metni tersten yazdıran programı yazınız. #include <string. h> #include <stdio. h> main Örnek 6.1.3 : Girilen cümleyi oluşturan kelimelerin sadece ilk harflerini yazdıran program. 1. c = sıradaki karakteri oku 2. Eğer c boşluk ise 4. adıma git 3. Hiç karakter yazılmaış ise c'yi yaz. 4. Eğer son karakter ise dur aksi halde bir sonraki karakteri göster ve 1. adıma git. Yukarıdaki algoritmada çözümün en önemli noktası herhangi bir kelimenin ilk karakterinin yazılıp yazılmadığıdır. Bunun izlenmesi için bir değişken kullanalım. / Girilen cümlenin ilk harflerini yaz / main { int i; int yaz; / 1/0 -> karakteri yaz/yazma / char s; clrscr ; gets ; yaz = 1; for (i = 0; i<strlen ; i++) if (s ' ' yaz = 1; else if } Örnek 6.1.4: Girilen cümleyi, kelimeleri bozmadan tersten yazdıran program. Ali zil çaldı --> çaldı zil Ali İki Dizginin Karşılaştırılması C dilinde diziler doğrudan karşılaştırılamazlar. Her bir elemanını ayrı ayrı karşılaştırılmalıdır. Küçüklük-büyüklük bilgisi ASCII tabloda önce-sonra bulunma bilgisine edit:saygılar baya bulmak için aradım... buldum baya büyüktü böldüm parçalara.. inşalaah bilmeyenlere bi yararım olmustur. saygılar -

2- Programlamaya Giriş Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi. Önceki bölümde bir problemin çözümü ile ilgili teknikler sunmuştuk. Bir problemi bilgisayar ile çözmek için geliştireceğimiz programın yazımında izleyeceğimiz adımlar: i) Problemin ne olduğunu kavra. Çözüm için gereksinimleri belirle. ii) Problemin girdilerini, çıktılarını ve diğer kısıtlama ve gereksinimleri belirle . iii) Problemin çözümünü veren algoritmayı yaz. iv) Algoritmayı bir programla dili ile yaz. v) Programın doğru çalışıp çalışmadığını test et. Bu testi değişik veriler için tekrarla. 2.1 İlk Program Örneği #include <stdio. h> Kullanılan işlevler ile ilgili başlık dosyası main BCPL B (1967 Ken Thompson) C az sayıda saklı sözcük kısa ve etkin program çok sayıda işleç assembler e yakın kod taşınabilir kod kullanıcıya bırakılan kontroller düşük okunabilirlik source > compiler > object > link kaynak derleyeci amaç bağlama kaynak kod : C dili ile yazılmış olan program. derleyeci : Kaynak kodu makina koduna çevirir amaç kodu : Kaynak kodun makina dilindeki karşılığı bağlama : Birden fazla amaç kodu dosyasının tek dosyada birleştirilmesi 2.2 Veri Tipleri Veri tiplerini vermeden önce yazılan bir programın geçtiği aşamalara göz atalım. 2.2.1 Int Tip Integer = Tamsayı Tamsayıları içerir. Bellekte 2 Byte tutar. 5, -19, 25000 gibi Minimum : -231 = -32768 Maksimum : 231-1 = 32767 2.2.2 Gerçel Tipler Gerçel sayıları içerirler. float : Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer alır. Hassasiyet 7-8 basamaktır. double : Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında değer alır. Hassasiyet 15-16 basamaktır. 218.1, -5.2, 4.0 Bilimsel gösterim biçimi 2.5 103 = 2.5E3 2.5 10-3 = 2.5E-3 2.2.3 Char Tip Char : Karakter : Alfanumerik karakterleri içerir. '5' , ' ' , 'K' 2.3 Sabitler #include <stdio. h> main CONST : Değeri programın çalışması boyunca değiştirilemez. Kullanım biçimi const tip Belirleyici=değeri; const float PI=3.14; Tip belirtilmez ise tamsayı kabul edilir. 2.4 Değişkenler Değeri programın çalışması boyunca değiştirilekir. Kullanım biçimi: Tip Belirleyici ; int i; float alan; 2.5 Belirleyiciler Bileşenlere isim verme. (Sabit, değişken, altprogram, etiket, tipler . 2.5.1 Kısıtlamalar. İlk karakteri rakam olamaz. Sadece harfler, rakamlar ve _ karakterinin birleşiminden oluşabilir. . C diline ait saklı sözcükler kullanılamaz. . En fazla 31 karakter olabilir. . Küçük - büyük harf ayırımı vardır. 2.5.2 isimlerin Seçimi. Belirleyicinin 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. 2.6 Matematiksel ifadeler Matematiksel ifadeleri günlük hayattaki biçimde bilgisayarda yazamadığımız için belli bir kurallar uymamız gerekir. Kullandığımız matematiksel işlemler ve anlamları şöyledir: + , - , , / toplama, çıkarma, çarpma, bölme % tamsayı bölme sonucundaki kalanı verir 7. / 2 > 3.5 7 / 2 > 3 7 % 2 > 1 2 % 7 > 2 2 / 7 > 0 Matematiksel ifadeler hesaplanırken izlenen adımlar: 1. Önce parantez içindeki ifadeler hesaplanır. İçiçe parantezler var ise hesaplamaya en içteki parantezden başlanır. 2. ilk önce , / ve % işlemleri daha sonra + ve - işlemleri yapılır. 3. Öncelik sırası aynı olan işlemlerde hesaplama soldan sağa doğru yapılır. 5./2 3 --> 7.5 Bir C Programının Genel Yapısı başlık dosyaları. Kullanılan deyimler ile ilgili main 2.7 Atama Deyimi Bir değişkene bir değer vermek. DeğişkenAdı = değer; x = 8 ; y = x + 15 ; y = (8 - x) / (2 - x) ; Örnek 2.7.1: 5x2+2 fonksiyonunun x=4.8 noktasındaki değerini main Örnek 2.7.2: Vize ve final notlarınından geçme notu main Örnek 2.7.3: 1998 yılına kadar geçen gün sayısı main 2.8 printf işlevi Program içinde istenen değerleri çıktı birimlerine göndermek için kullanılır. Normal kullanımında çıktı birimi olarak ekran kabul edilir. Kullanım biçimi: prinf( kontrol, <parametreler> <kontrol> ile belirtilen bilgiye göre parametreleri yazar. Kontrol metini iki kısımdan oluşur. o sıradan karakterler: doğrudan yazılırlar. o dönüşüm/biçim belirleyici karakterler: Değerlerin nasıl yazılacağı bildirilir. printf ; 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ı: d : decimal u : unsigned decimal c : char s : string e : float/double sayıyı bilimsel gösterimde yaz f : float/double sayıyı mmm. nnnnn biçiminde yaz ld : long integer lu : unsigned long integer Le, Lf : long double ESC dizileri : \n : satır başı, \a : zil, \t : tab, \b : bir karakter geri program parçası ekranda görünen / imleçin konumu i = 5 ; printf ; 5 printf ; i=5 printf("i=" ; printf ; i=5 - printf("i=\n" ; i= printf ; 5 alt satıra geçer printf ; i=5 alt satıra geçer printf("%d - %d", i, 5 i); 5 - 25 Biçimli yazdırma % karakteri ile dönüşüm karakteri arasına aşağıdaki karakterler de kullanılabilir. - : sola dayalı yaz m : yazılacak değer için ayırılan alan n : değerin kaç karekteri yazılacağı s = "ABCDEF" printf("%10s ", s); . . . . A B C D E F printf("%10.3s ", s); . . . . . . . A B C x = 128.5 ; printf("%7.2f", x) ; # 128.50 x = 85.47 ; printf("%6.3f", x) ; 85.470 printf("%6.1f", x) ; ## 85.5 Örnek 2.8.1 : Yarıçapı belli dairenin alanını hesaplayan programı yazınız. #include <stdio. h> main Örnek 2.8.2 : En fazla dört basamak olabilen sayının basamak değerlerini yazdır. % ve / işlemlerinin kullanımı. #include <stdio. h> main Örnek 2.8.3: ax2+bx+c=0 tipi bir denklemin köklerini veren programı yazınız. Girdi : a, b ve c katsayıları Çıktı : denklemim kökleri Algoritma : 1. a, b ve c katsayılarını oku. 2. Delta= değerini hesapla. 3. x1 ve x2 değerlerini hesapla. 4. Kökleri yaz. Programın kodlanması: #include <stdio. h> / printf işlevi için / #include <math. h> / sqrt işlevi için / main C dilinde karekök almak için bir deyim yoktur. Örnekte bunu yerine getiren C diline eklenmiş olan sqrt fonksiyonu kullanılmştır. Aşağıda buna benzer artık C derleyecilerinde standart olmuş bazı fonksiyonlar verilmiştir. Bu işlevler math. h başlık dosyasında tanımlıdır. Fonksiyon x, y Sonuç abs int int x'in mutlak değeri fabs double double x'in mutlak değeri pow double double xy sqrt double double x'in karekökü exp double double ex değeri log double double ln değeri log10 double double log10 değeri ceil double double x ten büyük ilk tamsayı floor double double x ten küçük ilk tamsayı