4 Mayıs 2013 Cumartesi

C Programlama ile Extern Komutu

Önce C dilinde bir program iskeleti nasıl olur gösterelim

#include<kutuphaneismi.h>

int main() //ana fonksiyon baslagici 
{



} // ana fonksiyon sonu;

Program içinde bir değişkeni şöyle tanımlarız. Örnegin integer değişken olsun

int sayi; //sayi isminde değişken tanımlandı;  bu değişkene 5 atayıp ekrana yazdıralım.

sayi=5;
printf("%d",sayi);

Tamam aynı program içinde tanımlanan bir değişken bu şekilde kullanılır. Peki başka bir programda tanımlı bir değişkeni nasıl kullanabiliriz. 2 program olsun, birincisine  program1.c ikincisine program2.c diyelim. program1.c şöyle olsun:

/*************************************************************
                                                 program1.c
int k;
k=100;

/*************************************************************************/
yazdiğimiz bu programı C/Dev-Cpp/include klasörüne atmalıyız. 2. adım olarak   program2.c içerisinde program1.c deki k değişkenini kullanalım


/****************************************************************
                                              program2.c
#include<stdio.h>
#include<program1.c>   // buraya dikkat. program1.c yi ram a aldık. yani çağırdık.

extern int k;  // değişken başka bir dosyada tanımlı;

int main() {

printf("%d",k);

}
/****************************************************************

program2 yi derlediğimizde ekran cıktımızın 100 oldugunu görecegiz.

Peki bu yolla fonksiyonda kullanabilirmiyiz? Tabi ki evet.  Yine program1.c ve program2.c olsun ve program1.c yi include içerisine atalım.


/*****************************************************************
                                                     program1.c
int kare_al(int gelen) {
return gelen*gelen;
}

/*****************************************************************
şimdi program2 de kare_al fonksiyonunu çağıralım.


/****************************************************************
                                            program2.c
#include<stdio.h>
#include<program1.c>

extern int kare_al(int); // fonksiyon baska dosyada tanımlı
int main() {

int sayi;
sayi=kare_al(5);
printf("%d",sayi);
}

/****************************************************************

programımızı derlersek ekran cıktımızın 25 yani girilen parametrenin karesi oldugu görülecektir.

Delphide şartsız dallanma komutu GOTO nun kullanımı

      Goto komutu programcının belirttiği yere, derleyicinin şartsız bir şekilde dallanmasını sağlar. Bu programcı için bir kolaylık olmasına rağmen kullanılması çok önerilmez. Ama tabi ki bazı durumlarda bu komutu bilmek ve uygulamak gerekir.
     Goto deyimi için öncelikle dallanma yeri belirtilmelidir. Dallanma yeri nasıl tanımlanır?

Label

dallanmayeri;

şeklinde tanımlanır.  Örnek bir kod yazalım.  GOTO deyimini sonsuz döngü olarak kullanalım. 
//***************************************************************************/
label
geridonus;
var
sayi:integer;
begin
sayi:=0;

geridonus:
sayi:=sayi+1;

goto geridonus;
//****************************************************************************/
program sonsuza kadar sayi degişkenini arttiracaktir. 

ÖNEMLİ NOT: Delphide sonsuz döngüler sırasında formumuz tabiri caizse kilitlenir. Sürüklenemez ve üzerindeki bir buton veya herhangi bir nesne tıklanamaz. Bunu şu komutla engelleyebiliriz. Bu komutu kullanılan döngü içine yazmalıyız.

//************************************
application.ProcessMessages;
//************************************

Artık programımız döngü içinde de olsa yapılan buton tıklamaları, form sürükleme vs. gibi işlemlere cevap verecektir. 






Delphide Dinamik nesneler oluşturma. (create dynamical components with Delphi)

Evet delphide dinamik nesne oluşturabiliriz. Bu nesneler Tbutton, Tpanel, Tedit,  Tlabel, Tform vs. sınıflarına ait olabilir.Dinamik olusturmak demek nesneyi runtime(yani program çalıştıktan sonra) anında oluşturmaktır. Bunu da kodla yaparız. Butonu yukardan secip form üzerine bırakmak daha kolay ama dinamik olarak bir anda birçok nesne olusturabilir bunlara farklı özellikler yukleyebiliriz.
Öncelikle Delphide bir değişken nasıl tanımlanır ?

var
DegıskenIsmı : DegiskenTıpı;

şeklinde değişken tanımlanır; Örnek verecek olursak. sayac adında bir tamsayı(integer) degişken tanımlayalım.

var
sayac:integer; 

şeklinde tanımlarız. Dinamik nesne olusturmaya gelirsek; o da benzerdir ve şu şekilde tanımlanır:

var
nesneısmı:NesneSınıfı;

şeklinde tanımlanır. Örneğin butonum isminde dinamik bir buton oluşturalım:

var
butonum:Tbutton;  Bitti mi? Hayır. Bu butonun özellikleri de girilmelidir. 

Bir butonun temel özellikler:
1-) X koordinatı (left)
2-)Y koordinatı(top)
3-)Bu butonun sahibi. yani bu butonun görüneceği yer.(parent)
4-)Eni (width)
5-)Boyu(height) bu özellikler girip butonumuzu oluşturalım(CREATE).
6-)İsmi(Caption)
var
butonum:Tbutton;
butonum:=Tbutton.create(self); // Tbutton sınıfından butonum nesnesini olustur;
butonum.top:=100;  // butonum un Y koordinatı 100 olsun
butonum.left:=100;// butonum un X koordinatı 100 olsun
butonum.height:=25; // butonumun boyu 25 olsun
butonum.width:=100; // butonumun eni 100 olsun.
butonum.parent:=(form1);// butonum form1 üzerinde oluşsun.
butonum.caption:='butonum';


evet butonumz belirtilen koordinatta,form1 üzerine oluştu.  Şimdi tam kodları verip programın ekran çıktısına göz atalım....
Önce form üzerine bir buton sürükleyip. Form1.onclick procedure sine aşagıdaki kodları yazalım.

procedure TForm1.Button1Click(Sender: TObject);
var
butonum:Tbutton;
begin
butonum:=Tbutton.create(self); // Tbutton sınıfından butonum nesnesini olustur;
butonum.top:=100;  // butonum un Y koordinatı 100 olsun
butonum.left:=100;// butonum un X koordinatı 100 olsun
butonum.height:=25; // butonumun boyu 25 olsun
butonum.width:=100; // butonumun eni 100 olsun.
butonum.parent:=(form1);// butonum form1 üzerinde oluşsun.
butonum.Caption:='butonum';
end;


Şimdi sürüklediğimiz button1 e tıklayalım.


Ve belirtiğimiz koordinatlara belirttiğimiz özellikte butonum isimli nesnemizi(butonumuzu) oluşturduk. Daha sonra görüşmek dileğiyle...