Bundan once degiskenleri, degisken tanıtmayı, operatorleri, if, switch, while yapılarını scanf ve printf in kullanımlarını gorduk. Buraya kadar isledigimiz seylerde komutların kullanımlarına dikkat etmenizi istiyorum. Cunku kullanım sekilleri cok onemlidir. Virguller noktalı virguller parantezler { } ler, " " ler nerelerde nasıl kullanılıyor bunları bir daha tekrar edip iyice oğrenin. Çünkü bunlar yanlış kullanılırsa kodları compile edemeyiz. Bir de compile hatalarını anlamaya çalısın. Bunlar iyice anlanırsa program yazmada fazla sorun yaşamazsınız...
Bir de gecen dersin odevinin cevabını verelim başlamadan once
3. odevin cevabı:
#include<stdio.h>
main()
{
int x,i;
scanf("%d",&x);
i=2;
while(i<x)
{
if(x%i==0)
{
printf("%d asal degil",x);
exit(-1);
}
i++;
}
printf("%d asal",x);
return 0;
}
pek uzun bir program değil aslında dimi Şimdi bu programı biraz anlatayım...
İlk once iki degisken belirliyoruz: i ve x . x girdiyi tutucak. i de while in icinde 2 den baslatılarak surekli x e bolunecek ve her seferinde bir arttırılıcak. Ta ki x den bir kucuk olana kadar. While in icinde bir if var. Bu if “x” i “i” ye boldugunde kalanın 0 a esit olup olmadıgına bakıyor. Eger herhangi bir seferde “x” “i” ye tam bolunmuşse bu sayının asal olmadıgını anlıyor ve ekrana "x asal değildir" yazıp programdan cıkıyor. Programdan cıkmak icin exit(-1) komutunu kullandım. Daha once bu komuttan bahsetmemistik. Bu komut direk programdan cıkar. Altındaki satırları isleme sokmaz... eger while ın icinde hic bi zaman x%i==0 olmamışsa program, while dan cıkar ve alt satırdaki printf("%d asal",x) komutunu isleme sokarak ekrana "x asal" yazar.( x yerine “x” in değerini yazacak)....
Gelelim daha kolay odevler isteyenlere...
ilk basit odev: 2 sayı gireceksiniz. size hangisi büyükse onu verecek...
İkinci basit odevimiz: Program iki sayı alacak. ikinci sayıyı ilkinin kuvveti olarak hesaplıycak. Yani 2 3 girerseniz. 2 üzeri 3 ü bulacak yani 8 verecek ekrana.
Bi kac tavsiye ve hatırlatmadan sonra gelelim bu dersimizde ne işleyecegimize. Bu dersimizde diğer bir dongu olan “for” u ve dizileri(array) işleyecez...
for dongusu:
for dongusu de tıpkı while gibidir. Farkı, kullanım seklidir...
kullanımı:
for(i=0; i<5; i++)
{
}
Bu ornekte goruldugu gibi for parantezlerinin icinde 3 bolum var. Bu bolumler noktalı virgul isareti ile birbirinden ayrılıyor. Bu bolumler for dongusunun kac kere tekrar edilecegini belirlemek icin kullanılıyor. Bunu belirlemek icin de bir degisken kullanıyoruz. Bu örnekte “i” diye bir degisken kullanılmıs. Bunun yerine istediginiz degisken adını kullanabilirsiniz. Birinci bolumde “i” nin ilk degerinin ne oldugu belirleniyor.Bu ornekte 0( i=0 ). Ücüncü bolumde “i” nin dongunun her isleme girdigi seferde “i” ye ne yapılacagı belirleniyor. Bu ornekte “i” her seferinde 1 artırılıyor( i++ ).İkinci bolumde ise for dongusunun devam etmesi icin gereken şart belirleniyor. Bu ornekte “i” 5 den kucuk oldugu surece dongu devam edecek. Yani dongu 5 kere isleme sokulacak.i her seferinde 1 artırılıp en sonunda 5 e eşit olunca program donguden cıkacak.
gecen odevin cevabında kullandıgım while dongusuyle aynı isi yapacak olan bir for dongusu yazayım ornek olarak:
for ( i=2; i<x ; i++ )
{
if(x%i==0)
{
printf("%d asal degil",x);
exit(-1);
}
}
While la arasındaki farka iyi bakın.Bu sefer for un icinde i++; komutunu kullanmadım. Cunku for parantezleri icinde bu islem tanımlanmıs zaten. while dan bir farkı da for dongusunu yazmadan once i=2; komutunu kullanarak i nin ilk degerini atamaya gerek yok. Bu da zaten for un parantezleri icindeki ilk bolumde belirtiliyor...
Gelelim arraylere (diziler)...
Bu diziler de bir takım degiskenlerdir. Degisken dizileridir. Matematikde x1 x2 x3 x4..... xn seklinde diziler vardır. Bilirsiniz biraz. n tane x degiskeni... Yani C de n sayıda aynı isimli segiskenler dizisi belirlemeye yarar. Bu cok kullanıslı ve gerekli biseydir. Mesela 50 tane farklı sayıyı ayrı ayrı degiskenlere atamak istiyoruz. Eger diziler olmasaydı bunun icin kodumuzun icinde 50 tane degisken belirlememiz ve 50 satırda bu degiskenlere degerlerini atamamız gerekirdi. Ama bunun yerine sadece bir degisken dizisi ve bir dongu kullanarak 50 tane sayıyı programa okutabiliriz kolaylıkla...
array(dizi) tanıtmak:
int a[50];
bu satırla a adında 50 tane tam sayı turunde degisken tasıyan bir dizi tanıttık...Matematiksel olarak a1 a2 a3 ... a50 seklinde.
Fakat arrayler de dikkat edilmesi gereken şey dizinin ilk elemanının a[0] olarak gosterilmesidir. 2. eleman a[1], 3. eleman a[2], 50. eleman a[49] seklindedir.
Simdi dizinin ilk elemanına bir deger atayalım...
a[0]=5;
bu satırla dizinin ilk elemanını 5 yaptık. Şu an diger elemanlara bir deger atanmamıs durumda...
mesela...
double B[10];
diye bir satır yazsak virgullu sayı turunde 10 tane degiskeni olan B adında bir dizi belirlemis olurduk...
Simdi array kullanılan basit bir program ornegi vereyim. Bu program 3 tane girdi alacak. Bu girdilerin degerini bir dizide depolayacak ve ekrana dizinin ikinci elemanını verecek:
#include<stdio.h>
main()
{
int x[3];
scanf("%d %d %d",&x[0],&x[1],&x[2]);
printf("%d",x[1]);
return 0;
}
bu programda goruldugu gibi scanf ve printf in icinde normal degiskenleri kullandıgımız gibi dizi degiskenlerini kullandık...
Bu program dizi kullanılmadan da 3 degisken belirlenerek kolayca yazılabilirdi. Ama diyelimki bu program 50 tane degisken alsaydı ve 45 inci degiskeni ekrana verseydi dizi kullanmadan 50 degisken i ayrı ayrı tanıtmak ve scanf in icinde 50 tane degisken yazmak cok sıkıcı olurdu Bu durumu onlemek icin dizi kullanacaz ve scanf le dizinin elemanlarına deger atamak icin bir dongu kullanacaz. Şöyle:
#include<stdio.h>
main()
{
int i;
int x[50];
for(i=0; i<50; i++)
{
scanf("%d" &x]);
}
printf("%d",x[44]);
return 0;
}
Array kullanarak bukadar kısa bir kodla, 50 tane degişkenin ustesinden geldik. for da ne yapıldıgına bakarsak. i degiskeni basta 0 a esitleniyor ve boylelikle once x[0] ın degeri scanf ile okunup atanıyor. Sonra i bir artırılıp a[1] in degeri atanıyor. Bu boyle 49 a kadar giderek en son elemanın da degeri alındıkdan sonra i 50 oluyor ve i<50 şartını saglamadıgı icin for dongusunden cıkılıyor. Sonra printf komutu ile 45. eleman ekrana veriliyor. printf in icine x[44] yazdık ama bize 45. eleman verilecek. Bunun sebebi ilk elemanın x[0] olması... Bu programı compile edip calıstırırsanız 50 kere sayı yazıp enter a basmak zorunda kalacaksınız uyarmadı demeyin
Arrayleri ve donguleri da ogrendiniz. Buraya kadar C ogrenmekte buyuk bir yol kateddiniz. Artık bir cok matematiksel program yapabilirsiniz... Bence kendi kendinize programlar uydurup yapmaya çalısın...
Bir de gecen dersin odevinin cevabını verelim başlamadan once
3. odevin cevabı:
#include<stdio.h>
main()
{
int x,i;
scanf("%d",&x);
i=2;
while(i<x)
{
if(x%i==0)
{
printf("%d asal degil",x);
exit(-1);
}
i++;
}
printf("%d asal",x);
return 0;
}
pek uzun bir program değil aslında dimi Şimdi bu programı biraz anlatayım...
İlk once iki degisken belirliyoruz: i ve x . x girdiyi tutucak. i de while in icinde 2 den baslatılarak surekli x e bolunecek ve her seferinde bir arttırılıcak. Ta ki x den bir kucuk olana kadar. While in icinde bir if var. Bu if “x” i “i” ye boldugunde kalanın 0 a esit olup olmadıgına bakıyor. Eger herhangi bir seferde “x” “i” ye tam bolunmuşse bu sayının asal olmadıgını anlıyor ve ekrana "x asal değildir" yazıp programdan cıkıyor. Programdan cıkmak icin exit(-1) komutunu kullandım. Daha once bu komuttan bahsetmemistik. Bu komut direk programdan cıkar. Altındaki satırları isleme sokmaz... eger while ın icinde hic bi zaman x%i==0 olmamışsa program, while dan cıkar ve alt satırdaki printf("%d asal",x) komutunu isleme sokarak ekrana "x asal" yazar.( x yerine “x” in değerini yazacak)....
Gelelim daha kolay odevler isteyenlere...
ilk basit odev: 2 sayı gireceksiniz. size hangisi büyükse onu verecek...
İkinci basit odevimiz: Program iki sayı alacak. ikinci sayıyı ilkinin kuvveti olarak hesaplıycak. Yani 2 3 girerseniz. 2 üzeri 3 ü bulacak yani 8 verecek ekrana.
Bi kac tavsiye ve hatırlatmadan sonra gelelim bu dersimizde ne işleyecegimize. Bu dersimizde diğer bir dongu olan “for” u ve dizileri(array) işleyecez...
for dongusu:
for dongusu de tıpkı while gibidir. Farkı, kullanım seklidir...
kullanımı:
for(i=0; i<5; i++)
{
}
Bu ornekte goruldugu gibi for parantezlerinin icinde 3 bolum var. Bu bolumler noktalı virgul isareti ile birbirinden ayrılıyor. Bu bolumler for dongusunun kac kere tekrar edilecegini belirlemek icin kullanılıyor. Bunu belirlemek icin de bir degisken kullanıyoruz. Bu örnekte “i” diye bir degisken kullanılmıs. Bunun yerine istediginiz degisken adını kullanabilirsiniz. Birinci bolumde “i” nin ilk degerinin ne oldugu belirleniyor.Bu ornekte 0( i=0 ). Ücüncü bolumde “i” nin dongunun her isleme girdigi seferde “i” ye ne yapılacagı belirleniyor. Bu ornekte “i” her seferinde 1 artırılıyor( i++ ).İkinci bolumde ise for dongusunun devam etmesi icin gereken şart belirleniyor. Bu ornekte “i” 5 den kucuk oldugu surece dongu devam edecek. Yani dongu 5 kere isleme sokulacak.i her seferinde 1 artırılıp en sonunda 5 e eşit olunca program donguden cıkacak.
gecen odevin cevabında kullandıgım while dongusuyle aynı isi yapacak olan bir for dongusu yazayım ornek olarak:
for ( i=2; i<x ; i++ )
{
if(x%i==0)
{
printf("%d asal degil",x);
exit(-1);
}
}
While la arasındaki farka iyi bakın.Bu sefer for un icinde i++; komutunu kullanmadım. Cunku for parantezleri icinde bu islem tanımlanmıs zaten. while dan bir farkı da for dongusunu yazmadan once i=2; komutunu kullanarak i nin ilk degerini atamaya gerek yok. Bu da zaten for un parantezleri icindeki ilk bolumde belirtiliyor...
Gelelim arraylere (diziler)...
Bu diziler de bir takım degiskenlerdir. Degisken dizileridir. Matematikde x1 x2 x3 x4..... xn seklinde diziler vardır. Bilirsiniz biraz. n tane x degiskeni... Yani C de n sayıda aynı isimli segiskenler dizisi belirlemeye yarar. Bu cok kullanıslı ve gerekli biseydir. Mesela 50 tane farklı sayıyı ayrı ayrı degiskenlere atamak istiyoruz. Eger diziler olmasaydı bunun icin kodumuzun icinde 50 tane degisken belirlememiz ve 50 satırda bu degiskenlere degerlerini atamamız gerekirdi. Ama bunun yerine sadece bir degisken dizisi ve bir dongu kullanarak 50 tane sayıyı programa okutabiliriz kolaylıkla...
array(dizi) tanıtmak:
int a[50];
bu satırla a adında 50 tane tam sayı turunde degisken tasıyan bir dizi tanıttık...Matematiksel olarak a1 a2 a3 ... a50 seklinde.
Fakat arrayler de dikkat edilmesi gereken şey dizinin ilk elemanının a[0] olarak gosterilmesidir. 2. eleman a[1], 3. eleman a[2], 50. eleman a[49] seklindedir.
Simdi dizinin ilk elemanına bir deger atayalım...
a[0]=5;
bu satırla dizinin ilk elemanını 5 yaptık. Şu an diger elemanlara bir deger atanmamıs durumda...
mesela...
double B[10];
diye bir satır yazsak virgullu sayı turunde 10 tane degiskeni olan B adında bir dizi belirlemis olurduk...
Simdi array kullanılan basit bir program ornegi vereyim. Bu program 3 tane girdi alacak. Bu girdilerin degerini bir dizide depolayacak ve ekrana dizinin ikinci elemanını verecek:
#include<stdio.h>
main()
{
int x[3];
scanf("%d %d %d",&x[0],&x[1],&x[2]);
printf("%d",x[1]);
return 0;
}
bu programda goruldugu gibi scanf ve printf in icinde normal degiskenleri kullandıgımız gibi dizi degiskenlerini kullandık...
Bu program dizi kullanılmadan da 3 degisken belirlenerek kolayca yazılabilirdi. Ama diyelimki bu program 50 tane degisken alsaydı ve 45 inci degiskeni ekrana verseydi dizi kullanmadan 50 degisken i ayrı ayrı tanıtmak ve scanf in icinde 50 tane degisken yazmak cok sıkıcı olurdu Bu durumu onlemek icin dizi kullanacaz ve scanf le dizinin elemanlarına deger atamak icin bir dongu kullanacaz. Şöyle:
#include<stdio.h>
main()
{
int i;
int x[50];
for(i=0; i<50; i++)
{
scanf("%d" &x]);
}
printf("%d",x[44]);
return 0;
}
Array kullanarak bukadar kısa bir kodla, 50 tane degişkenin ustesinden geldik. for da ne yapıldıgına bakarsak. i degiskeni basta 0 a esitleniyor ve boylelikle once x[0] ın degeri scanf ile okunup atanıyor. Sonra i bir artırılıp a[1] in degeri atanıyor. Bu boyle 49 a kadar giderek en son elemanın da degeri alındıkdan sonra i 50 oluyor ve i<50 şartını saglamadıgı icin for dongusunden cıkılıyor. Sonra printf komutu ile 45. eleman ekrana veriliyor. printf in icine x[44] yazdık ama bize 45. eleman verilecek. Bunun sebebi ilk elemanın x[0] olması... Bu programı compile edip calıstırırsanız 50 kere sayı yazıp enter a basmak zorunda kalacaksınız uyarmadı demeyin
Arrayleri ve donguleri da ogrendiniz. Buraya kadar C ogrenmekte buyuk bir yol kateddiniz. Artık bir cok matematiksel program yapabilirsiniz... Bence kendi kendinize programlar uydurup yapmaya çalısın...