2009-04-18 36 views
6

Yeni projemde, bilgileri kullanıcılardan saklamak için bir çizik dosyası yerine bir dizi kullanmalıyım. Bunu yapmak için türetilmiş türler de oluşturmalıyım. Ancak, bir dizinin ne tür bir tür olduğunu, nasıl kullanılacağını, neler yapabileceğini ve diğer bazı temel fikirleri anlayamadım. Herkes bana dizi ve türetilmiş türler hakkında bilgi verebilir mi?Diziler ve türetilmiş türler

Onlar için kod yazdım, ancak doğru yazıldığını bilmiyorum. Bunu benim için birileri kontrol edebilirse, minnettar olurum.

! derived type 
TYPE Bank 
    INTEGER :: acNumber, acChecks 
    REAL :: acBlance, acRate 
    CHARACTER :: acType*1, acLName*15, acFName*15 
END TYPE 

! array 
INTEGER, PARAMETER :: MaxRow, MaxColum = 7 
INTEGER, DIMENSION(MaxRow:MaxColum) :: AccountData 
+1

Özür dilemene gerek yok. İngilizcen iyi. İnsanların düzenleme haklarına sahip olmasının bir nedeni de bu alanda yardımcı olmaktır. Umarım düzenlemelerim yardımcı olmuştur. – Eddie

cevap

6

Eğer bir Fortran programcısı iseniz, muhtemelen 10/15 argümanlarını kabul eden bir altprogram görmüşsünüzdür. Bunun hakkında düşünürseniz, bu delilik (çok fazladır, onları değiştirme riskiyle karşı karşıya kalırsınız) ve bazı argümanların hep birlikte seyahat ettiğini çabucak fark ediyorsunuz. Onları, her şeyi bir bütün olarak bağımsız bir varlık olarak taşımayan tek bir varlık altında toplamak mantıklı olacaktır. Bu, argüman sayısını önemli ölçüde azaltacak ve size yalnızca uygun ilişkiyi bulmak için yük getirecektir. Bu tek varlık türü.

Kodunuzda, bir Banka'nın bu bilgilerin bir toplamı olduğunu söylüyorsunuz. Şimdi, acNumber, acChecks vb. Tek değişkenlere erişimi temsil eden ve sağlayacak olan bu tür bir somut değişken bildirebilirsiniz. Bunu yapmak için,% sembolünü kullanmanız gerekir. Banka değişken b denir eğer öyleyse, örneğin

Bir dolaba gibi farklı raflar içeren b tahmin edebilirsiniz
b%acNumber = 5 

için söyleyebiliriz. Kapatın, tüm raflar ve onların içeriği birlikte hareket eder.

Bir dizi, aynı türdeki (örneğin, tamsayı veya Karakter (len = 1024) veya Banka) bir varlık grubudur ve birbiri ardına sıralıdır, böylece bunların her birine sayısal bir dizin ile erişebilirsiniz.

  • : 1'de, farklı fortran start diziler endeksleri belirtilmediği sürece Kodunuzdaki gelince

    (diğer tüm önemli dilleri, ilk endeks yerine sıfır), unutmayın, ben sizi önermek o aynı

    INTEGER, DIMENSION(MaxRow:MaxColum) :: AccountData 
    

    INTEGER :: AccountData(MaxRow,MaxColum) 
    

    olarak yazma, ancak daha az yazın. Lütfen ayrıca: ve ile arasında bir fark olduğunu unutmayın. İki boyutlu bir dizi olan bir matrisi (durumunuz) tanımlamak isterseniz, virgülü kullanmanız gerekir. Yazdığın şey yanlış. dizeleri

  • , bu, daha fazla yazmak

    CHARACTER :: acType*1, acLName*15, acFName*15 
    

    bu durumda

    CHARACTER(LEN=1) :: acType 
    CHARACTER(LEN=15) :: acLName 
    CHARACTER(LEN=15) :: acFName 
    

    gibi yazarsanız daha iyi olur, ancak sözdizimi (Ben olsa yanlış olabilir) kullanımdan kaldırıldı Ayrıca, tür başına satır başına bir üye değişkeni yazarsanız daha iyi olduğunu unutmayın. Bu bir tat meselesi, ancak üye değişkeni başına bir satırın olmasıyla bir türün tam boyutunu görmeyi tercih ediyorum.

  • MaxRows ve MaxColumns için bunları MAX_ROWS ve MAX_COLUMNS olarak yazar. Geleneklere göre oldukça sabit olan parametreler ve şeyler, herhangi bir ana dilde, tüm sermaye, altçizgi ayrılmış isimle tanımlanır.


Düzenleme: yorum cevaplamak için, burada bir dizinin kullanımına ilişkin bir örnektir

$ more foo.f90 
program test 
    integer :: myarray(10) 

    myarray = 0 ! equivalent to zeroing the single elements one by one 
    myarray(2) = 5 
    myarray(7) = 10 

    print *, myarray 

end program 
$ g95 foo.f90 -o foo 
$ ./foo 
0 5 0 0 0 0 10 0 0 0 

bir dizi sadece tarafından tanımlanan aynı ada sahip birden değişkenler gibidir bir endeks Vektörleri veya matrisleri ifade etmek için çok yararlıdır. Elbette tanımladığınız bir tür yerine (örneğin tamsayı) tanımladığınız bir toplu tür dizisi yapabilirsiniz.

+0

Yorumunuz için teşekkür ederiz. Dizi ve türetilmiş türün ne olduğunu anladım, ancak hala dizide yazma konusunda kafam karıştı (dizide bilgi depola). Çizik dosyası gibi mi? Bunu yapmak için WRITE deyimini kullanmam gerekir mi? –

+0

no. Aynı değişken tipinde birden çok kopya gibi. atama yoluyla yazarsın. Daha sonra cevabım için daha ayrıntılı bir şey ekleyeceğim. Şimdi acele etmeliyim :) –

+0

MaxRow, MaxColumn yazımı düzelttiğimi unutmayın. Yazdıkça, iki boyutlu bir dizi tanımlamıyorsunuz. Bu sözdizimi başka bir şey demektir. –

0

Bir dizi değişkenlerin sıralanmış bir listesidir, aynı türdeki tüm, tamsayılar tarafından dizine: Burada

benim dizi ve türetilmiş türleridir. Bkz. Array in Wikipedia Fortran dizi indekslemesinin, diğer tüm düşük düzey dillerden daha esnek olduğunu unutmayın; boyut başına tek bir dizin yerine, alt sınır, üst sınır ve adımdan oluşan bir dizin üçlüsüne sahip olabilirsiniz. Bu durumda, ifadenin değeri, dizi türünün tek bir öğesi değil, bir alt dizedir. Türetilmiş tip, kullanıcılar tarafından tanımlanan ve farklı tiplerde olabilen çoklu bileşenlerden oluşan bir kompozit tiptir. Diğer bazı dillerde bunlar yapı, yapı tipi veya kayıt tipi olarak bilinir. Ayrıca türetilmiş türde bir dizi oluşturabilir ya da bir veya daha fazla bileşenin kendilerinden veya bu türden türetilmiş türlerden birinin türetilmiş türüne sahip olabilirsiniz. Bkz.

Sana kalmış!

Kodunuzu denetlemenin en kolay yolu, derlemeyi denemektir. Derleyiciyi geçmiş yapmak elbette programın beklendiği gibi çalıştığını garanti etmez, ancak kesinlikle gerekli bir adımdır.

+0

Yorumunuz ve bağlantılarınız için teşekkür ederiz! –