DIZILER VE DIZI ELEMANLARI
Küme aralarinda ortak bir iliski bulunan nesneler toplulugudur.(Ornegin bir siniftaki ogrenciler ,bir ulkenin kentleri veya bir plinomun katsayilari gibi )
Eleman kümeyi olusturan nesnelere denir.
Dizi elemanlar küme icinde belli bir sira icinde ise kümeyin aldigi addir. Küme ve dizi arsindaki fark asagida gosterilmistir;
Indis elemanin dizi icindeki yerini belirleyen bilgiye denir.(Ornegin yukardaki dizide ucuncu elemanin adi Can'dir demek indise bir ornektir. ).Diziler tek boyutta tanimlanabilecegi gibi iki boyutta da tanimlanirlar.Asagidaki ornegi inceleyiniz;
dizi kullanmak ilk etapta getirdigi ifade kolayliklari ile goze carpmaktadir.Ornek olarak asaidaki polinomun degisik sekillerdeki yazilimlarini ve en sonda da dizi olarak bir tanimi verilmistir.anlayacaginiz uzere dizi kullanmak hem sadelesme hem de guncelleme saglamistir.guncelleme diyoruz cunku ifadede tek bir rakami degistirmek ,ki bu sayi 5'tir,ifadenin uzunlugu degistirmeden ifade avantaji sagliyor.
konumuz ile alakali olarak verilebilecek onemli bir ornek tipi ise siralama alogaritmasidir.
Ornegi inceleyiniz;
Tanim: Uzerinde toplama,ckarma ,carpma ve bolme islemle islemlerinin ozel olarak tanimlandigi bir ve iki boyutlu dizilere cebirde vektor ve matris adi verilir.Bu tanima iliskin,matris ve vektor kullanimina bir ornek alalim;
normalde seklinde yazilan bir uc bilinmeyenli bir denklem takimi,
katsayilar matrisi A ;
bilinmeyenler vektoru x ;
ve sabitler dizisi b ; kullanarak
A . x = b
seklinde yazilabilir.Burada seklinde tanimlanmis diziler olup , carpim islemi ozel kurallara gore yapilir.Bu sekilde yapildigi zaman denklem takimlarinin algoritmik yolla ,baska bir degisle proglamlama ve cozumu daha kolay ifade edilebilir.
Dizi kullaniminin programciya (algoritma tasarimcisina ) getirdigi anlatim kolayliklari,tum programlama dillerinde diziler ve diziler uzerinde islemleri kolaylastiran deyimlere yer verilmesine yol acmistir. Algol programlama dilinde "while ...do", Basic prog. dilinde "for ...next", Fortran prog. dilinde "Do" cevirimleri bu amaca yoneliktir.
ALT PROGRAMLAR
FUNCTION Alt programı
İlk deyimi FUNCTION deyimi olan enaz bir tek değer üretmek üzere bağımsız olarak yazılmış bir program
birimidir. Yapısı aşağıda gösterilmiştir.
FUNCTION alt program adı (argüman listesi )
...............
............... Fortran deyimleri
...............
alt program adı= aritmetik ifade
RETURN
END
Ana programdan FUNCTION alt programına geçiş, alt programa adının argümanlarla birlikte bir aritmetik ifade
de yer almasıyla sağlanır. Bu işlemi gösteren deyimi en basit biçimi ile şöyle olabilir:
değişken = alt program adı (argüman listesi )
Görüldüğü gibi alt program adı ve argüman listesi hem alt programın birinci deyiminde, hem de çağıran deyimde
yer almaktadır. Alt program adı programcı tarafında belirlenir ve alt programın yaptığı tüm işlemleri simgeler.
Ana programdan alt programa bilgi aktarımı argümanlar aracılığı ile olur. Argüman listeleri birbirinden virgülle
ayrılmış değişken ve sabitlerden oluşur. Her iki listedeki argümanların sayısı aynı olup, birbiriyle çakışan
argümanlar aynı türdedir. Alt programa geçiş sırasında çağıran deyimin argüman listesindeki değerler, alt
programın argüman listesindeki değişkenlere sıra ile verilir. Çakışan argümanların adları aynı olabilir, fakat
olmak zorunda değildir.
RETURN deyimi alt programdaki işlemlerin bittiğini gösterir. Bu deyimin işlenmesi çağıran programa (ana
program veya başka bir alt program ) geri dönülmesini sağlar. Bir FUNCTION alt programından ana programa
gönderilecek değer (sonuç ), RETURN deyiminden önce alt program adını taşıyan değişkene atanmak
zorundadır. Bu nedenledir ki, alt program adı tam sayı bir değişken ise geri gönderilen değer tamsayı, alt
program adı ondalıklı bir değişken ise geri gönderilen değer ondalıklıdır. Programcı dilerse alt programın birinci
deyiminde FUNCTION sözcüğünden önce REAL veya INTEGER yazarak alt programın türünü alt program
adına bağlı olmaksızın belirleyebilir.
SUBROUTINE Alt programı
SUBROTINE alt programları FUNCTION alt programlarına göre daha genel amaçlıdır. Yukarıda belirtildiği
gibi FUCTION alt programı ana programa sadece bir bilgi geri gönderebilir. SUBROUTINE alt programı için
böyle bir sınırlama yoktur. SUBRUOTINE alt programı argümansız olarak kullanılabilir. Bu şekilde kullanıldığı
zaman amaç programın akışını daha güzel ifade eden modüler bir program yapısı sağlamaktadır. FUNCTION alt
programının en az bir argümanı olması zorunludur.
FUNCTION ve SUBROUTINE alt programları arasında ki başka bir farklılıkta ayrıntıları aşağıda verilecek olan
ana programdan çağrılış biçimidir. Fakat alt program, bir deyimle bir algoritmayı gerçekleştirecek biçimde
tanımlanırsa, her iki tür alt programın özde çok benzer oldukları söylenebilir. SUBROUTINE alt programını
yapısı aşağıda verilmiştir:
SUBRUOTINE alt program adı (argüman listesi )
...............
............... Fortran deyimleri
...............
RETURN
END
Ana programdan SUBROUTINE alt programına geçiş, CALL deyimi ile sağlanır . Bu deyimin yapısı da
şöyledir:
CALL alt program adı ( argüman listesi )
Alt program adı programcı tarafından değişkenlere ad verme kurallarına uygun olarak kararlaştırılır.
SUBROUTINE alt programında tür söz konusu olmadığı için adın hangi harfle başladığı önemli değildir. Alt
programın birinci deyiminde yer alan argüman listesi ile ,ilişkili CALL deyiminin argüman listesi, argüman
sayısı ve türü açısından uyumlu olmak zorundadır. Başka bir deyişle, adları farklı olsa da her iki listede aynı
sırada buluna argümanlar aynı türde olmalıdır. Gerek ana programdan (çağıran programdan ) alt programa
aktarılan bilgiler gerekse alt programdan ana programa aktarılan bilgiler argümanlar aracılığıyla aktarılır. Bu
bilgiler her türde her türde skaler değerler olabileceği gibi diziler de olabilir. Eğer argüman diziyi simgeliyorsa,
büyüklüğü hem ana programda hem de alt programda bildirilmek zorundadır. Bu deyim işeme konulduğunda
argümanlar alt programda son alındıkları değerleri taşırlar.
Örnek:
Aşağıda bir SUBROUTINE alt programı ve bu alt programı ana programdan çağıran deyim verilmiştir.
.......... SUBROUTINE R ( A, B, X, Y ).
......... X = A * B
.......... Y = 2.0 * ( A+ B )
.......... RETURN
........ END
Alt programın adı R, argümanları A, B, X ve Y’dir. Görüldüğü gibi CALL deyiminden A, B, AL ve CEV
değişkenlerinden oluşan argüman listesi ile uyumludur. Alt programa geçildiği zaman ana programda A, B, AL
ve CEV değişkenlerinin sahip olduğu değerler alt programdaki A, B, AL ve CEV değişkenlerine verilir.
RETURN deyimi işleme konulduğunda bu kez A, B, X ve Y’nin alt programda aldıkları son değerler, ana
programda A, B, AL ve CEV değişkenlerine verilmiş olur. Görüldüğü gibi yukarıdaki örnekte A ve B
argümanları ana programdan alt programa, AL ve CEV ( veya X ve Y ) argümanları da alt programdan ana
programa bilgi aktarmaya aracı olmaktadırlar. Argümanların ana be alt programlarda aynı adı taşıması veya
taşımamamsının işlem üzerimde hiçbir etkisi olmadığı da vurgulanmalıdır.
COMMON : Alt programlar arasında bilgi alanları
Bir ana programla alt program arasında veya iki alt program arasında bilgi aktarımının argümanlar aracılığı ile
sağlandığı daha önce açıklanmıştı. Bu bilgi aktarımını gerçekleştirmenin bir başka yolu da program parçaları
arasında ortak bilgi alanlarının veya Fortran’ da ki adı ile COMMON alanlarının kullanılmasıdır. COMMON
alanları etiketli ve etiketsiz olarak ikiye ayrılır. Etiketsiz COMMON deyiminin yapısı şöyledir:
COMMON değişken listesi
Ortak bilgi alanında bulunması istenen değişkenleri değişkenler listesine birbirinden virgülle ayrılarak yazılır.
Değişken listesinden diziler bulunabilir fakat dizi elemanları bulunamaz. Eğer dizi adı değişken listesinde indisli
olarak yazılır ise , parantez içinde belirtilen tam sayı dizininin büyüklüğü olarak kabul edilir. Böylece ortak bilgi
alanında yer alan bir dizinin büyüklük bildirimi DIMENSION deyimi yerine COMMON deyimi ile de
yapılabilir. Ortak bilgi alanına ana programdan ve bir yada daha fazla alt programdan erişmek mümkündür.
Bunu için ortak bilgi alanına erişecek her ana ve alt programda COMMON deyimi yer almalıdır. Ayrıca bu
deyimlerin değişken listeleri, argüman listelerinde olduğu gibi uyumlu olmalıdır. Başka bir deyişle listeki
değişken sayısı aynı olmalı, çakışan değerlerin türleri farklı olmamalıdır.
Örnek:
DIEMENSION R (10 ) T (200 )
COMMON R,T
deyimleri ile
COMMON R (10 ) T (200 ) deyimi aynı sonucu sağlamaktadır.
Bir programda yer alan iki etiketsiz ortak bilgi alanlarının uzunlukları farklı olabilir. Aşağıda verilen deyimlerin
iki ayrı alt programda yer aldıkları kabul edilsin:
COMMON P, L, R (50 )
COMMON V, KOD, A ( 3 , 2 )
Görüldüğü gibi birinci deyim ile tanımlanan ortak bilgi alanı daha uzundur. Fakat iki deyin de aynı ortak bilgi
alanını tanımladığı için P ile V, L ile KOD, R dizisinin ilk altı elemanı ile A dizisinin sırasıyla (1,1 ), (2,1 ),
(3,1 ), (1,2 ), (2,2 ), (3,2 ) indisli elemanları eşleşmektedir.
Etiketli COMMON deyiminin yapısı şöyledir:
COMMON/etiket/değişken listesi
Etiket ortak bilgi alanına programcı tarafında verilen addır. Değişkenlere ad verme kuralına uygun olarak seçilir.
Değişken listesi orta bilgi alanında yer alan değişkenlerden oluşur. Listede diziler de bulunabilir. Etiketli ortak
bilgi alanı erişildiği her ana ve alt programda aynı etiket adını taşıyabilir COMMON deyimi ile tanımlanmak
zorundadır. Bu deyimlerle tanımlanan alanların uzunlukları aynı olmalıdır. Ayrıca değişkenler listesi aynı olmak
zorundadır.
BLOCK DATA Alt programı
Programda bazı değişkenlere, DATA deyimi ile başlangıç değeri verilebilir. Etiketlenmemiş bir ortak bilgi
alanında yer alan değişkenler DATA deyimi ile başlangıç değeri vermek mümkün değildir. Etiketlenmemiş bir
ortak bilgi alanında yer alan değişkenlere DATA deyimi ile değer atanması ise sadece BLOCK DATA alt
programında mümkündür. BLOCK DATA alt programında etiketli COMMON ve DATA deyimleri yer alır.
Örnek:
Aşağıda bir BLOCK DATA alt programı verilmiştir:
BLOCK DATA
COMMON / ALAN 1/ PROP ( 5 )
COMMON / ALAN 2/ I, D, HIZ
DATA PROP / 1.0035 , 0.735 , 0.782 , 1.4 , 0.02 /
DATA I, D, HIZ / 5, 0.18, 0.8 /
END
BLOCK DATA alt programının adı geçen ortak bilgi alanlarının erişildikleri diğer ana ve alt programlarda da
etiketli COMMON deyimleri ile bildirilmeleri gerektiği açıktır.
EQUIVALENCE Deyimi
EQUIVALENCE bildirim deyimi aynı bellek hücresine iki değişik adla erişilmesinin sağlar. Başka bir deyişle bu
deyim bir bellek hücresinin iki farklı değişken tarafından ortaklaşa kullanılmasını sağlar.
Bu deyim kullanılarak sağlanmak istene başlıca amaç, programın bellek gereksinimini azaltmaktır. bu deyimi
daha değişik amaçlar içinde kullanmak mümkündür. Bunlardan birkaçı tanesi örneklerde belirtilmiştir.
EQUIVALENCE deyiminin yapısı şöyledir:
EQUIVALENCE ( değişken-1, değişken-2 )
değişken-1 ve değişken-2 basit veya indisli değişken olabilir.
Örnek:
Bir programda iki boyutlu bir diziye tek indisle erişilmek isteniyorsa EQUIVALENCE deyimi kullanılabilir.
EQUIVALENCE ( MAT ( 1 , 1 ) , IVEK ( 1 ) )
Her iki dizinin büyüklüğünün DIMENSION deyimi ile bildirilmiş olması gerektiği not edilmelidir.
Örnek:
Bir programın çalışması sırasında değişik zamanlarda iki dizi, bellekte yer kazanılmak amacı ile çakıştırılabilir.
D dizisi, program C dizisi ile işlemlerini bitirdikten sonra kullanılan bir dizi olsun.
EQUIVALENCE ( D ( 1 ) , C ( 1 ) )
deyimi iki dizi için aynı bellek alanını ayırmaktadır.
EXTERNAL Deyimi
EXTERNAL deyimi bir alt programın, ismi argümanlar listesinde bulunan başak bir alt programı çağırabilmesini
olanağını sağlar. Bumu için çağırılan alt program ( FUNCTION veya SUBROUTINE ) isminin çağıran alt
program argümanlar listesinde yazılması ve EXTERNAL deyiminde bulunması gerekir.
EXTERNAL deyiminin yapısı şöyledir:
EXTERNAL s1, s2, s3,......,sn
Burada s1, s2, s3,......,sn çağıran alt program argümanlar listesindeki alt program isimleridir. EXTERNAL
deyimi ana program içinde, aritmetik deyim fonksiyonları ve icra edilebilen deyimlerden de önce gelmek üzere,
en başta bulunur.
|