C de Temeller-Devam(Ilk Dökümanin Devami)
char B[6]; su anda elimizde 6 tane harf tutabilen bir stringimiz var.Simdi buna sirasiyla
harflerimizi yerlestirelim.
B[0]=’F’;
B[1]=’e’;
B[2]=’r’;
B[3]=’m’;
B[4]=’a’;
B[5]=’N’;
B[6]=’\0’;
Aslinda yukariya bakacak olursak atadigimiz harfleri ’ ’ isaretleri arasina yerlestirdik.char degiskeninde bir degiskene deger atarken bunlari
kullancaz.ilk siraya B[0]=F; demis olsaydik F adinda bir degisken sanacak bizim c bu F yi.Bu yüzden.Birde son degere \0 degerini verdik.Bu nedemek arkadaslar.Hatirlayin \n gibi bir operatörümüz vardi ve bu alt satira geç demek oluyodu.Buradaki \0 ise
sona geldik string sona erdi dur bakalim.Demek oluyor ona göre:)Yukariya bakarak bi string
için uzuuuuun uzun urasacamizi gördünüz.tabiki olay boyle degil arkadaslar biz.char A[]="FermaN"; desekdeolurdu.Burada stringin uzunlugunu belirtmedik ancak compiler bu olayi kendiliginden çözecektir stringin uzunsugunu hemencecik kavraycak ve
sona ise \0 operatörünü yapistircaktir.Burada dikkat edeceginiz bir husus varki arkadaslar oda "" isaretlerini kullanmis olmamiz bu sefer.String belirlerken "" isaretlerini kullaniyoruz.Ancak harf yada karakter belirlerken ’ ’ isaretlerini kullaniyoruz.Mesela bizim bi stringmiz var
ve bu string üzerinde oynasmalar yapabiliriz demektir.B[3]=’\0’; dersek B[3] den sonraki kisim külliyen silinmis olacaktir.Olay bu.Simdi birde bu stringi printf ve scanf de kullanmaya.Bunu nasssi yapcaz diyecek olursaniz?_?printf("%s", B); bu komut ekrana FermaN çiktisini vercektir.Burada pritfin içerisinde gördügünüz %s i string okuturken kullancaz
Ama biz stringimiz belirli bir harfini olutmak istiyorsak aynen soyle yapcaz;
printf("%c", A[B]); bu durumda ekrana r harfi gelecektir.Buradaki %c ise char türünde bir bir çikti alacagimiz belirtiyor.Yani burdada akliniz karismasin arkadaslar. scanf de ise olay printf ile aynidir.scanf("%s", A); simdi bundan once benim yapmis oldugum hatayi basima kakinç eden bi arkadas vardi adini vemicem.Burada scanf("%s",A); gibi bir ifade görünce yine "Aaaa yanlis yapmis yine bu adam" diyecektir ama bu sefer yanilacaktir.Çünkü stringlerimize
deger atarken & kullanmayiz.Bunun sebebi ise pointerlerde annatacam.Aslinda böyle uzun uzun printf ve scanf ile ugrasmak yerine kullanabilecegimiz fonksyonlarimiz var.Ama bunlari soylemeycem:p desem yalan olur.Tabikide soyleyecem. printf("%s", A); yerine puts(A); yazsakda ayni isi görecektir. scanf("%s", A); yerinede gets(A); yazsak ayni sey olurmu?_?Olmaz.gets ile stringe tüm satiri isletebilirsiniz ancak scanf ayni isi görmez. Mesela bi stringe "kral besiktas" gibi bi deger atiyacak olsak scanf sadece kral kismini stringe atar.Niye?_?.Çünkü scanf her bosluktan sonrasini ayri bi input sanar.gets(A) yazarsak.A stringine "kral besiktas" tümüyl atancaktir.
Sira geldi fonksyon yazma olayinaaaaaa.Bu güne kadar kodlarimizi hep main() içerisine yazdik arkadaslar.Ama bazen oluyorki ayni kodlari dört bes kez yazmamiz gerekiyor.
Hemde karisikligi onlemk için bu kendi fonksyonlarimiizi yaabilirz.Simdi örnegimizi inceleyelim:
#include <stdio.h>
int x;
int topla(int a, int b);
int topla(int a, int b){
x=a+b;
}
main(){
topla(3,4);
printf("%d", x);
}
Evt yukardaki kodlari compile ettigimizde karsimiza 7 sonucu gelcektir.Yularidan sanirim pek bisey anlamadiniz.Simdi sirasiyla bunlari anlatalim;en basta bi tane int x; gördünüz.Bu ne kardesim diyebilirsiniz.Bunu en sona birakiyorum.Bunu scopelerle beraber anlatcam.topla adli bir fonksyon belirledilk ve fonksyona iki tane tam sayi degiskenimizide verdik.a ve b.topla içerisine ise x=a+b dedik.Yani a ve b ye verilecek degeere göre x sonuclandirilacaktir.Peki buraya kadar hersey tamam. Fonksyonumuzu nasil çagirdik? Tabikide main içerisine yazarak.main her zaman bizim kurtaricimiz olmustur.Aslinda main de basli basina bir fonksyondur amma ve lakin
ana fonksyondur.Yani compiler ilk olarak main içerisindeki kodlari isleme tabi tutacaktir.Neyse biz topla fonksyonumuza geri donelim.
Fonksyonlarimizi illakine int topla vs seklindemi tanitacaz.Tabiki hayir.Bunuda soa anlatcam.Simdi topla fonlsyonu içerisindeki a ve be degiskenlerini herkes gördü sanirim.
topla(int a, int b) fonksyonunu çagirirken topla(3,4) dersek a=3 b=4 olur.Buradaki mantik bu.Beki simdi ders basinda scope dedim.Scope içerik anlamina getirilebilir.
Bakiniz arkadaslar.Su kodlari inceleyelim:
#include <stdio.h>
int x;
int topla(int a, int b);
int topla(int a, int b){
x=a+b;
}
main(){
int a;
topla(3,4);
printf("%d", x);
scanf("%d", &a);
}
yukaridaki kodlara iyi bakin arkadaslar.int a iki tane!Alla Alla nasil oluyor bu is?Oluo.Çünkü ilk int a yani topla fonksyonunda tanimlamis olan a topla fonksyonunun scopesinde yani
içeriginde tanimli bir degiskendir.Diger a degiskeni ise main fonksyonunun scopesinde tanimlidir.Yani c bu iki a degiskeninide ayirt edebilir.Simdi arkadaslar hepiniz main fonklsyonu
içerisine bir tanede int x=3; seklinde bi degisken tanimlamasini istiyorum.Bu degiskeni tanimladiginizda artik programin çiktisi 7 yerine 3 olacaktir.Çünkü burada program main içerisinde tanimli olan x i okuyacaktir.Kodlarinizi su sekilde degistirin bide arkadaslar;
#include <stdio.h>
int x;
int topla(int a, int b);
int topla(int a, int b){
x=a+b;
printf("%d\n", x);
}
main(){
int x=4;
topla(3,5);
printf("%d", x);
scanf("%d", &a);
}
Bu durumda ekrana 8 ve 4 rakamlari gelecektir.Çünkü main içerisindeki printf main içerisinde tanimli x’i okuyacak topla içerisindeki printf ise toplada tanimli x i okuyacaktir.
Yani bu scope olayini iyi anlayin arkadaslar. Evet bu dersimiz bu kadar.Yani anlayip anlamadiginizi belirtin arkadaslar.Bakin anlamayipta geçistiriyosaniz döverim:)Takilan arkadaslar ister msn de ister forumda sorsun
ister mail atsin ister telefon etsin ister eve gelsin:)))))))Ama sorsun yani.Bu ders uzun mu oldu ne?Yorum bekliyom arkadaslar bakin:)Bide bi odev verecem ama ne versem?
Buldum bunun içinde size random-randomize fonksyonunu anlatacam.Nedir bu random randomize?_?bu iki fonksyon sayesinde bilgisayar bize istedigimiz sayida ve istedigimiz
aralikta sayilar veririr.Örnegimizi inceleyelim.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(){
int i;
randomize();
for(i=0; i<5; i++)
printf("%d", random(25));
}
Yukaridaki programi compile ettiginizde ekrana 5 tane sayi gelecektir.Ve bu sayilar 0-25 araliginda olacaktir.0-25 araligi ni random(25); fonksyonu ile belirtiriz.
Kaç sayi belirtecegimizi ise for döngüsü kullanarak.Dikkat ederseniz i=5 olana kadar random(25) yani 5 tane tam sayi belirtecek.Evt anlasilmis olmasi lazim.Bide orada
yeni olarak <stdlib.h> .Çünkü bu fonksyonlarin prototipi bu baslik altindadir.Yani bu kütüphane dosyasinda tanimlidir.
Bunu ögrendikte ne oldu diyebilirsiniz.Gösterecem simdi size ne oldugunu:))) Bakin bi sayi bulmaca oyunu yapcaniz arkadaslar.Nasi olcak.Önce bizden bi sayi istiycek
sora bilgisayar random randomize ile bi sayi belirleyip bizim sayimizi tahmin etmeye çaliscak.Tabi siz sayi araligini küçültürseniz iki tarafinda bilme sansi artar.Neyse sora
program bilgisayardan sayi alacak ve bizim tahminde bulunmamizi isticek.Biz bilirsek bizi tebrik etcek.Filan.Oyun neye göre bitcek.Ya bir oyuncu bilene kadar devam etsin yada
puanlama sistemi koyun.Benim oyunda puanlama sistemi oyuna ilk kimin baslicani belirleme filan vardi.Siz deneyin yapamazsaniz ben size kendi yaptigimin kodlarini veririm:)