istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 2 85 Ornegin bir vektorun (bir boyutlu dizi) normunu hesaplayan bir

Benzer belgeler
İstanbul Üniversitesi, Nükleer Fizik Bölümü, Fortran 77, Zorunsuz Ödev Cevapları, 2004

Diziler. Yukarıdaki bilgileri bilgisayar belleğinde saklamak için aşağıdaki gibi değişkenler tanımlanır ve değerler bu değişkenlere aktarılır :

istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_6.f 2 85 Veri Tipi Veri Tanimlayici

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

DATA Deyimi. ii) DIMENSION NUM(5) DATA NUM / 1, 2, 3, 4, 5 / Bu durumda 5 elemanlı NUM dizisi, sırasıyla, 1'den 5'e kadar değerleri saklar.

OMÜ HAVACILIK VE UZAY BİLİMLERİ FAKÜLTESİ METEOROLOJİ MÜHENDİSLİĞİ BÖLÜMÜ MET103 BİLGİSAYAR PROGRAMLAMA I BÜTÜNLEME SINAVI

Diziler (Arrays) Çok Boyutlu Diziler

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

HSancak Nesne Tabanlı Programlama I Ders Notları

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

Program akıģı sırasında belirtilen satır numaralı yere gitmek için kullanılır. Genel formu: [<satır numarası>] GOTO <satır numarası 1> GOTO n

BİLGİSAYAR PROGRAMLAMA DERSİ

MATLAB a GİRİŞ. Doç. Dr. Mehmet İTİK. Karadeniz Teknik Üniversitesi Makine Mühendisliği Bölümü

ALGORİTMA VE PROGRAMLAMA I

Alt programlar- Deyim Fonksiyonları

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Özyineleme (Recursion)

k ise bir gerçek sayı olsun. Buna göre aşağıdaki işlemler Matlab da yapılabilir.

program uc_hata implicit none integer : x(5),i

2. Dereceden Denklemin Köklerini Bulan Program

DİZİLER. Bu ünitede yapılan örnekler Visual Studio 2010 programındaki Visual Basic programlama diliyle çözülmüştür.

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

BPR152-Algoritma ve Programlama II Uygulama -13

disp VEYA fprintf KOMUTLARIYLA EKRANA MESAJ YAZDIRMA

Visual Basic Uygulamaları-4. Dİ Zİ LER (ARRAYS) ve Nesne Kü meleri

Matlab da Dizi ve Matrisler. Mustafa Coşar

GÖRÜNTÜ İŞLEME MATLAB DERS-4

Pythonda değişkenlerin türlerini tanımlamaya gerek yoktur

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Programlama. Simdide 1 den 10 a kadar olan sayilari yazdiralim. 1 den 10 e kadar olan sayilarin karesini yazdiralim. Do[Print[Mathematica], 5]

YZM 2105 Nesneye Yönelik Programlama

FORTRAN da Giriş/Çıkış Ve Tanımlamalar

GİRİŞ/ÇIKIŞ VE TANIMLAMA DEYİMLERİ

ÖDEV (Vize Dönemi) CEVAPLAR. 1. Ekrana Merhaba Dünya! yazdıran algoritmanın akış diyagramını çiziniz ve sözde kod olarak yazınız.

Fen ve Mühendislik Uygulamalarında MATLAB

Pointers (İşaretçiler)

PROGRAMINIZI ANĠ SONLANDIRMAK ĠSTEDĠĞĠNĠZ YER BĠR DÖNGÜNÜN ĠÇĠ ĠSE NE OLUR?????????

Olimpiyat Soruları. sonuçları tekrar fonksiyonda yerine koyup çıkan tüm sonuçları toplayan program (iterasyon sayısı girilecek)

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Algoritmalar ve Karmaşıklık

ALGORİTMA VE PROGRAMLAMA I

C++ Dersi: Nesne Tabanlı Programlama

BİLGİSAYAR PROGRAMLAMA DERSİ

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

MATLAB de Programlama & Dosya Yönetimi. EE-346 Hafta 6 Dr. Ayşe DEMİRHAN

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

Matris İşlemleri Uygulaması

Bilgisayar Programlama MATLAB

BLM 111 ALGORİTMA VE PROGRAMLAMA I

<fn> FORMAT (a1,a2,a3,...) : format deyiminin satır numarasıdır READ, WRITE deyimleri ile verilir. : alan bildirim deyimleridir.

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

Koşulsuz GOTO Deyimi

BM202 SAYISAL ÇÖZÜMLEME

Şekil 6.2 Çizgisel interpolasyon

Ayrık Fourier Dönüşümü

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#3: ALGORİTMA ANALİZİ#2

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Fonksiyonlar. <? print "Ekrana yaziyorum..<br>"; $a=print "Ben de...<br>"; print $a;?> Bu kodun ciktisi: Ekrana yaziyorum.. Ben de...

Algoritmalar, Akış Şemaları ve O() Karmaşıklık Notasyonu

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

-A Grubu- MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı

Algoritmaların Karşılaştırılması. Doç. Dr. Aybars UĞUR

Bilgisayar Programlama MATLAB

Akış Kontrol Mekanizmaları

İnternet Programcılığı Dersi 2.Dönem Ders Notu

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA

Bölüm 9. Altprogramlar ISBN

Dr. Fatih AY Tel: fatihay@fatihay.net

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA I

MT 373 Visual Basic Programlama Dersi

Python ile Programlamaya Giris

Göstericiler (Pointers)

MATLAB/Programı Dallandıran İfadeler

D İ Z İ L E R A R R A Y S

PROGRAMLAMAYA GİRİŞ VE ALGORİTMA «YTÜROK» EĞİTMEN:REHA ÖZGÜR ŞİMŞEK

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

8. HAFTA BLM323 SAYISAL ANALİZ. Okt. Yasin ORTAKCI.

SAB104 Bilgisayar Programlama

Diziler İndisli Değişkenler

Sınav Dağılım & IMKB Endeks


MTK467 Nesneye Yönelik Programlama. Hafta 4 - Döngüler Zümra Kavafoğlu

C PROGRAMLAMA D İ L İ

Uygulama 1) Aşağıdaki genel (global) değişken tanımlamalarını VB üzerinde yapınız. Süre 10 dak.

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

GAP (Grup, Algoritma ve Programlama)

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER

Pointer Kavramı. Veri Yapıları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Transkript:

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 1 1 2 / _ 3 _ / _ \ ' ' / _` '_ \ / / / / 4 _ (_) _ (_ / / / / 5 _ \ / _ \ _ \,_ _ _ /_/ /_/ Bes 6 ================================================== 7 Hazirlayan : Aras. Gor. Ozgur Cobanoglu 8 Danisman : Prof. Dr. M. Nizamettin Erduran 9 -------------------------------------------------- 10 Her turlu oneri ve duzeltme icin lutfen 11 asagidaki adresleri kullanin. 12 -------------------------------------------------- 13 Istanbul Universitesi, fen fakultesi, nukleer 14 fizik anabilim dali, oda NF205, Vezneciler, 15 +90-212-455-57-00 dahili:15410 ISTANBUL. 16 -------------------------------------------------- 17 ozgur@nucleus.istanbul.edu.tr 18 Ozgur.Cobanoglu@cern.ch 19 ozgur_cobanoglu@hotmail.com 20 ================================================== 21 22 <-> Diziler 23 ----------- 24 Diziler ayni tipteki verilerden olusan koleksiyonlardir. Diziler 25 bilimsel hesaplamanin en onemli veri tipleridir cunki cogu zaman 26 cok buyuk sayida ornegin veri noktasi ile (bir spektrum, bir grafik 27 v.b.) ilgileniriz. 28 29 <-> Dizi Tanimlanmasi 30 --------------------- 31 Diziler de diger degiskenler gibi tanimlanirlar; tek fark bir 32 baslangic ve bir bitis indisine gereksinim vardir; soyle ki : 33 34 tip diziadi({n. boyuttaki alt sinir : n. boyuttaki ust sinir}) 35 36 Ornegin yillara gore gelir duzeyinin tutuldugu bir dizi asagidaki 37 sekillerden biri ile tanimlanabilir : 38 39 REAL gelir(12, 1990:2003) 40 REAL gelir(1:12, 1990:2003) 41 42 Alt sinirlar ontanimli olarak 1' dir ve kullanilmalari secime 43 baglidir (yani kullanilmadiklarinda 1 kabul edilirler). Diziler en 44 cok 7 boyuta sahip olabilirler. Bir dizinin boyutu derleme sirasinda 45 belli olmalidir. Yani dizilerin boyutlari programin calismasi 46 sirasinda degistirilemez. Diziler dosyadan ve/veya dosyaya ic ice 47 gecmis iki DO dongusu kullanilarak okunabilir ve/veya yazilabilir. 48 49 <-> Dizilerin Kullanimi 50 ----------------------- 51 Dizi elemanlarina her elemanin indisi ya da indisleri kullanilarak 52 erisilir; soyle ki : 53 54 martayigelirmiktari = gelir(3,2003) 55 56 bu ornekte 2003 yilina ait 3. aydaki kazanc miktari, 57 martayigelirmiktari adli degiskene atanmaktadir. Bazi durumlarda 58 diziler bir butun olarak (indis kullanilmaksizin) kullanilabilir. 59 Dizinin tumunun dosyaya ya da ekrana basilmasi (veya okunmasi) icin 60 asagidaki kullanilabilir : 61 62 WRITE(5,*)dizi 63 64 Bir dizinin bir fonksiyona parametre olarak gecirilmesi de 65 gerekebilir ve bu nokta dikkat edilmesi gereken bir noktadir. 66 67 <-> Dizileri Fonksiyonlara Parametre Olarak Gecirmek 68 ---------------------------------------------------- 69 Bu noktayi dikkat edilmesi gereken bir nokta yapan sey parametre 70 olarak gecirilen dizilerin kendilerine ait bilgileri tutmuyor 71 olmasidir; yani dizi hangi tipte ve kac elemani mevcut gibi. Bunun 72 icin iki yol vardir : diziler ya sabit uzunluklu olarak fonksiyonlara 73 gecirilir ya da diziler kendileriyle birlikte dizi eleman sayisini 74 tutan fazladan bir parametre ile fonksiyonlara gecirilmelidir. Eger 75 dizinin boyutu bilinmiyorsa o zaman * isareti dizinin son boyutundaki 76 eleman sayisi olarak varsayilabilir (dige boyutlar varsayilamaz). 77 Dolayisi ile bu dizi uzerinde islem yaparken su unutulmamalidir ki 78 derleyici dizinin boyu ile ilgili bilgi sahibi degildir. Bunun anlami 79 dizi uzerinde islem yaparken dizi sinirlarinin disina cikilmadiginin 80 programci tarafindan kontrol edilmesinin zorunlulugudur. Aksi durumda 81 program calisiyor iken hata verebilir (run time error); derlenirken 82 sorun yoktur. Bu sekilde diziler indis kullanilmaksizin dosyadan 83 okunabilir ya da dosyaya yazilabilir. 84

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 2 85 Ornegin bir vektorun (bir boyutlu dizi) normunu hesaplayan bir 86 fonksiyon asagidaki gibi tanimlanabilir : 87 88 REAL FUNCTION norm(dizi, dizibaslangic, dizibitis) 89 REAL toplam = 0.0 90 REAL dizi(dizibaslangic, dizibitis) 91 INTEGER i 92 DO 10, i = dizibaslangic, dizibitis 93 toplam = toplam + dizi(i)**2 94 10 CONTINUE 95 norm = SQRT(toplam) 96 END norm 97 98 Buradaki ornekte dizi elemanlarinin karelerinin toplaminin kare koku 99 hesaplanir ve norm fonksiyonunun dondurdugu deger olarak cagirana 100 atanir. 101 102 <-> Uygulama 103 ------------ 104 1 - Asagidaki program dizi eleman sayisini ve elemanlari tek tek 105 okur, ekrana basar ve bu dizinin toplamini ekrana basar. Cikti 106 asagida verilmistir. Ornegin -1 girilmesi durumunda cikiliyor; 107 99' dan buyuk bir sayi girilmesi de ayni etkiyi yapacaktir. 108 109 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler>./diziyitoplaii 110 Eleman sayisi giriniz : 111 3 112 Tum elemanlari virgulle ayirarak giriniz : 113 34,56,89 114 34. 56. 89. 115 Dizi toplami = 179. 116 100 117 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler> 118 119 PROGRAM diziyitoplaii 120 IMPLICIT NONE 121 INTEGER encok 122 PARAMETER (encok=99) 123 INTEGER i, elemansayisi 124 REAL A(enCok), DIZI_TOPLAMI 125 WRITE(*,*)'Eleman sayisi giriniz :' 126 100 READ *, elemansayisi 127 IF (elemansayisi.le.0.or. elemansayisi.gt.encok) STOP 128 WRITE(*,*)'Tum elemanlari virgulle ayirarak giriniz :' 129 READ *, (A(i), i=1, elemansayisi) 130 PRINT *, (A(i), i=1, elemansayisi) 131 c 132 DO 200 i=1, elemansayisi 133 DIZI_TOPLAMI = DIZI_TOPLAMI + A(i) 134 200 END DO 135 c 136 PRINT *, 'Dizi toplami =', DIZI_TOPLAMI 137 GOTO 100 138 END 139 140 141 2 - Asagidaki program dizi eleman sayisini ve elemanlari tek tek 142 okur, ekrana basar ve bu dizinin toplamini ekrana basar. Cikti 143 asagida verilmistir. Ornegin -1 girilmesi durumunda cikiliyor; 144 99' dan buyuk bir sayi girilmesi de ayni etkiyi yapacaktir. 145 Yukaridakinin aynisidir sadece toplama islemi bir alt program 146 araciligi ile yapilmistir, dizinin bir alt programa parametre 147 olarak gecirilmesi sadece adinin parametre yerine yazilmasi 148 biciminde olacak kadar kolaydir. A olarak DIZI_TOPLAMI() 149 fonksiyonuna giden deger aslinda dizinin baslangic adresidir. 150 Alt program o baslangic adresini kullanarak hafizada duzenli 151 olarak ilerler ve her ilerleme bir sonraki dizi elemanina 152 ulsilmasini saglar. Bu yuzden fortranda dizi ile birlikte 153 eleman sayisinin da parametre olarak alt programa gecirilmesi 154 gerekir. Bu islem alt programin dizi sinirlarini asmaya 155 calismamasi dolayisi ile calisma zamani (run time) hatalarinin 156 olusmamasini saglar. 157 158 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler>./diziyitopla 159 Eleman sayisi giriniz : 160 4 161 Tum elemanlari virgulle ayirarak giriniz : 162 23,45,67,78,90 163 23. 45. 67. 78. 164 Dizi toplami = 213. 165 Eleman sayisi giriniz : 166-1 167 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler> 168

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 3 169 PROGRAM diziyitopla 170 IMPLICIT NONE 171 INTEGER encok 172 PARAMETER (encok=99) 173 INTEGER i, elemansayisi 174 REAL A(enCok), DIZI_TOPLAMI 175 100 WRITE(*,*)'Eleman sayisi giriniz :' 176 READ *, elemansayisi 177 IF (elemansayisi.le.0.or. elemansayisi.gt.encok) STOP 178 WRITE(*,*)'Tum elemanlari virgulle ayirarak giriniz :' 179 READ *, (A(i), i=1, elemansayisi) 180 PRINT *, (A(i), i=1, elemansayisi) 181 PRINT *, 'Dizi toplami =', DIZI_TOPLAMI(A, elemansayisi) 182 GOTO 100 183 END 184 C 185 FUNCTION DIZI_TOPLAMI(V, N) 186 REAL V(N) 187 INTEGER i 188 DIZI_TOPLAMI=0.0 189 DO 200 i=1,n 190 200 DIZI_TOPLAMI = DIZI_TOPLAMI + V(i) 191 RETURN 192 END 193 194 3 - Asagidaki program yagismiktar(i) dizisini 12 elemanli olacak 195 bicimde tanimlar. yagismiktar(1)..yagismiktar(12) sirasiyla 196 Ocak..Aralik aylarina ait yagis miktarlarini tutar. Bir dongu 197 ile dizinin tum elemanlari toplanir ve toplamyagismiktari adli 198 degiskende tutulur. Bu degiskenin tuttugu sayi 12' ye bolunerek 199 aylik ortalama yagis miktari bulunur. Bu programin esdegeri bir 200 sonraki uygulama sorusunda verilmistir. 201 202 PROGRAM yagismiktari 203 IMPLICIT NONE 204 205 c dizi tanimlaniyor 206 207 REAL yagismiktar(12), toplamyagismiktari, ortalama 208 REAL ilkbaharym 209 INTEGER i 210 PRINT*,'Senelik ortalama yagis miktari hesaplamasi :' 211 212 c diziye eleman atamasi yapiliyor 213 214 DO i=1,12 215 PRINT*,i,'. aydaki yagis miktarini giriniz (litre) :' 216 READ(*,*)yagisMiktar(i) 217 END DO 218 219 c toplam yagis miktari hesaplaniyor 220 221 toplamyagismiktari = 0 222 DO i=1,12 223 toplamyagismiktari = toplamyagismiktari + yagismiktar(i) 224 END DO 225 226 c ortalama yagis miktari hesaplaniyor 227 228 ortalama = toplamyagismiktari / 12 229 PRINT*,'Ilgili sene icinde aylik yagis ortalamasi' 230 WRITE(*,*)ortalama, ' litre olarak belirlendi.' 231 232 c ilk bahar yagis ortalamasi hesaplaniyor 233 234 ilkbaharym = 0 235 DO i=3,5 236 ilkbaharym = ilkbaharym + yagismiktar(i) 237 END DO 238 c 239 PRINT*,'Ilkbahar aylik yagis ortalamasi :', ilkbaharym / 3 240 END 241 242 243 4 - Asagidaki program bir onceki uygulama sorusunda verilen 244 hesabin aynisini yapmaktadir. Fonksiyon ve altprogram 245 tipinde alt programlar kullanilmistir. Ana programin 246 olabilidigince kisa olmasi hata ayiklama ve program 247 gelistirme asamalarinda cok kullanislidir. Ozellikle 248 nesne yonelimli programlamaya gecis icin sahip olunmasi 249 gereken ilk anlayisi meydana getirmektedir. 250 251 PROGRAM yagismiktariii 252 IMPLICIT NONE

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 4 253 254 c dizi ve FUNCTION tipi altprogram tanimlaniyor 255 256 REAL yagismiktar(12), toplamyagismiktari, ortalama 257 REAL toplamyagis 258 INTEGER i 259 PRINT*,'Senelik ortalama yagis miktari hesaplamasi :' 260 261 c diziye eleman atamasi yapiliyor 262 263 CALL elemanata(yagismiktar) 264 265 c toplam yagis miktari hesaplaniyor 266 267 toplamyagismiktari = toplamyagis(yagismiktar) 268 269 c ortalama yagis miktari hesaplaniyor 270 271 ortalama = toplamyagismiktari / 12 272 PRINT*,'Ilgili sene icinde aylik yagis ortalamasi' 273 WRITE(*,*)ortalama, ' litre olarak belirlendi.' 274 PRINT*,'Ilkbahar aylik yagis ortalamasi :' 275 PRINT*,(yagisMiktar(3)+yagisMiktar(4)+yagisMiktar(5))/3 276 PRINT*,'olarak hesaplandi.' 277 END 278 279 c diziye eleman atayan altprogram 280 c-------------------------------- 281 SUBROUTINE elemanata(a) 282 REAL A(12) 283 DO i=1,12 284 PRINT*,i,'. aydaki yagis miktarini giriniz (litre) :' 285 READ(*,*)A(i) 286 END DO 287 END 288 289 c dizi elemanlarini toplayan fonksiyon 290 c------------------------------------- 291 FUNCTION toplamyagis(a) 292 REAL A(12) 293 toplamyagis = 0 294 DO i=1,12 295 toplamyagis = toplamyagis + A(i) 296 END DO 297 END 298 299 300 5 - Asagidaki program iki matrisin toplamini hesaplar. Dizilerin 301 indislerinin nasil kullanildigina dikkat ediniz; karsilikli 302 elemanlarin toplanmasi ve sonuc matrise atanmasi indislerin 303 dogru kullanimina baglidir ( Aij + Bij = Cij). Cikti asagidadir. 304 305 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler>./matristopla 306 Matrislerin boyutlarini giriniz : 307 2,2 308 Ilk matrisin elemanlarini giriniz : 309 1 310 2 311 3 312 4 313 Ikinci matrisin elemanlarini giriniz : 314 5 315 6 316 7 317 8 318 Girilen birinci matris : 319 1. 2. 320 3. 4. 321 Girilen ikinci matris : 322 5. 6. 323 7. 8. 324 Toplama sonucu olusan matris : 325 6. 8. 326 10. 12. 327 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler> 328 329 PROGRAM matristopla 330 IMPLICIT NONE 331 REAL A(50,50), B(50,50), C(50,50) 332 INTEGER i, j, m, n 333 334 c toplanacak matrislerin boyutlari giriliyor 335 336 WRITE(*,*)'Matrislerin boyutlarini giriniz :'

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 5 337 READ(*,*)m, n 338 339 c matris elemanlari normal DO dongusu ile okunuyor 340 341 WRITE(*,*)'Ilk matrisin elemanlarini giriniz :' 342 DO i=1,m 343 DO j=1,n 344 READ(*,*) A(i,j) 345 END DO 346 END DO 347 348 c matris elemanlari tek satir DO dongusu ile okunuyor 349 350 WRITE(*,*)'Ikinci matrisin elemanlarini giriniz :' 351 READ(*,*) ((B(i,j), j=1,m), i=1, n) 352 353 c Matris toplaniyor ve sonuc C(i,j) matrisi olusuyor 354 355 DO i=1,m 356 DO j=1,n 357 C(i,j) = A(i,j) + B(i,j) 358 END DO 359 END DO 360 361 c Girilen matrisler ve sonuc ekrana basiliyor, cikiliyor 362 363 WRITE(*,*)'Girilen birinci matris :' 364 DO i=1,m 365 PRINT*,(A(i,j), j=1,n) 366 END DO 367 368 WRITE(*,*)'Girilen ikinci matris :' 369 DO i=1,m 370 WRITE(*,*)(B(i,j), j=1,n) 371 END DO 372 373 WRITE(*,*)'Toplama sonucu olusan matris :' 374 DO i=1, m 375 WRITE(*,*)(C(i,j), j=1, n) 376 END DO 377 c 378 END 379 380 381 6 - Asagidaki program iki matrisin carpimini hesaplar. Burada 382 matris elemanlarini tutan diziler iki boyutludur : satir ve 383 sutun. dolayisi ile tanimlama REAL A(50, 50) bicimindedir ve 384 bu tanimlamada : isareti kullanilmamistir yani matrislerin 385 ilk elemani ontanimli olarak 1 indisine sahip olacaktir. 386 Esdeger bir tanimlama REAL A(1:50, 1:50) bicimindedir. 387 Carpim cebrindeki (ya da algoritmasindaki) DO dongulerinin 388 nasil kullanildigina dikkat ediniz. Matris tipi islemler 389 dongulerin en karmasik oldugu islemlerdir; goruldugu gibi 390 ic ice gecmis uc farkli DO dongusu kullanilmaktadir. 391 Programda dizi elemanlarinin okutulmasi ile ilgili iki 392 farkli DO dongusu kullanilmistir; normal ve tek satir 393 DO donguleri. Ayni bicim dizi elemanlarini ekrana basarken 394 de kullanilmaktadir. Programin sonunda A, B ve C matrislerinin 395 ekrana basilmasi sirasinda matris gorunumunu saglamak icin 396 normal ve tek satir DO dongulerinin ic ice nasil kullanildigina 397 dikkat ediniz. Programin ciktisi asagidaki gibi olur : 398 399 C:\g77\kaynakKodlar\ornekler>matrisCarpim.exe 400 Ilk matrisin boyutlarini giriniz : 401 3 402 2 403 Ikinci matrisin boyutlarini giriniz : 404 2 405 4 406 Ilk matrisin elemanlarini giriniz : 407 1 408 2 409 3 410 2 411 4 412 5 413 Ikinci matrisin elemanlarini giriniz : 414 4 415 5 416 4 417 5 418 3 419 2 420 3

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 6 421 7 422 Girilen birinci matris : 423 1. 2. 424 3. 2. 425 4. 5. 426 Girilen ikinci matris : 427 4. 5. 4. 5. 428 3. 2. 3. 7. 429 Carpim sonucu olusan matris : 430 10. 9. 10. 19. 431 18. 19. 18. 29. 432 31. 30. 31. 55. 433 C:\g77\kaynakKodlar\ornekler>_ 434 435 PROGRAM matriscarpim 436 IMPLICIT NONE 437 REAL A(50,50), B(50,50), C(50,50) 438 INTEGER i, j, k, l, m, n, p 439 440 c carpilacak matrislerin boyutlari giriliyor 441 442 WRITE(*,*)'Ilk matrisin boyutlarini giriniz :' 443 READ(*,*)m, n 444 WRITE(*,*)'Ikinci matrisin boyutlarini giriniz :' 445 READ(*,*)k, l 446 447 c Matris carpimi olanakli mi kontrol ediliyor 448 449 IF (k.ne.n) THEN 450 PRINT*,'HATA : Matris carpimi olanakli degil!...' 451 STOP '-- Programdan cikildi --' 452 END IF 453 454 c matris elemanlari normal DO dongusu ile okunuyor 455 456 WRITE(*,*)'Ilk matrisin elemanlarini giriniz :' 457 DO i=1,m 458 DO j=1,n 459 READ(*,*) A(i,j) 460 END DO 461 END DO 462 463 c matris elemanlari tek satir DO dongusu ile okunuyor 464 465 WRITE(*,*)'Ikinci matrisin elemanlarini giriniz :' 466 READ(*,*) ((B(i,j), j=1,l), i=1, n) 467 468 c Matris carpiliyor ve sonuc C(i,j) matrisi olusuyor 469 470 DO 99 i=1,m 471 DO 99 j=1,l 472 C(i,j) = 0 473 DO 99 p=1,n 474 C(i,j) = C(i,j) + A(i,p) * B(p,j) 475 99 CONTINUE 476 477 c Girilen matrisler ve sonuc ekrana basiliyor, cikiliyor 478 479 WRITE(*,*)'Girilen birinci matris :' 480 DO i=1,m 481 PRINT*,(A(i,j), j=1,n) 482 END DO 483 484 WRITE(*,*)'Girilen ikinci matris :' 485 DO i=1,k 486 WRITE(*,*)(B(i,j), j=1,l) 487 END DO 488 489 WRITE(*,*)'Carpim sonucu olusan matris :' 490 DO i=1,m 491 WRITE(*,*)(C(i,j), j=1,l) 492 END DO 493 494 END 495 496 497 7 - Asagidaki program girilen dizideki en buyuk elemani bulur ve 498 ekrana basar. Once enbuyuk degiskenine dizinin ilk elemani 499 atanir; sanki en buyuk eleman dizinin ilk elemaniymis gibi. 500 Sonra her bir eleman enbuyuk ile karsilastirilir ve eger varsa 501 enbuyuk' ten daha buyuk eleman o eleman enbuyuk' e atanir; 502 sonucta enbuyuk degiskeni dongu sonunda dizinin en buyuk 503 elemanini tutmus olur. Cikti asagidadir. 504

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 7 505 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler>./enbuy 506 Dizinin eleman sayisini girin : 507 4 508 Dizi elemanlarini girin : 509 34 510 87 511 56 512 61 513 Girilen dizi : 514 34. 515 87. 516 56. 517 61. 518 En buyuk elemani : 87. 519 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler> 520 521 PROGRAM enbuy 522 IMPLICIT NONE 523 INTEGER n, i 524 REAL A(99), enbuyuk 525 c 526 PRINT*,'Dizinin eleman sayisini girin :' 527 READ(*,*)n 528 c 529 PRINT*,'Dizi elemanlarini girin :' 530 DO i=1,n 531 READ(*,*)A(i) 532 END DO 533 c 534 enbuyuk = A(1) 535 DO i=1, n 536 IF ( A(i).GT.enBuyuk ) enbuyuk = A(i) 537 END DO 538 c 539 PRINT*,'Girilen dizi :' 540 DO i=1,n 541 PRINT*, A(i) 542 END DO 543 c 544 PRINT*,'En buyuk elemani :', enbuyuk 545 END 546 547 548 8 - Asagidaki program yukaridaki gibi girilen dizinin 549 en buyuk elemanini bulur buna ek olarak dizinin 550 en kucuk elemanini da bulur; her iki karsilastirma 551 isleminin nasil yapildigina dikkat ediniz. 552 553 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler>./enbuyii 554 Dizinin eleman sayisini girin : 555 5 556 Dizi elemanlarini girin : 557 23 558 42 559 21 560 26 561 34 562 Girilen dizi : 563 23. 564 42. 565 21. 566 26. 567 34. 568 En buyuk elemani : 42. 569 En kucuk elemani : 21. 570 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler> 571 572 PROGRAM enbuyii 573 IMPLICIT NONE 574 INTEGER n, i 575 REAL A(99), enbuyuk, enkucuk 576 c 577 PRINT*,'Dizinin eleman sayisini girin :' 578 READ(*,*)n 579 c 580 PRINT*,'Dizi elemanlarini girin :' 581 DO i=1,n 582 READ(*,*)A(i) 583 END DO 584 c 585 enbuyuk = A(1) 586 enkucuk = A(1) 587 DO i=1, n 588 IF ( A(i).GT.enBuyuk ) enbuyuk = A(i)

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 8 589 IF ( A(i).LT.enKucuk ) enkucuk = A(i) 590 END DO 591 c 592 PRINT*,'Girilen dizi :' 593 DO i=1,n 594 PRINT*, A(i) 595 END DO 596 c 597 PRINT*,'En buyuk elemani :', enbuyuk 598 PRINT*,'En kucuk elemani :', enkucuk 599 END 600 601 602 9 - Asagidaki program yukaridakinin yaptigi ise ek olarak 603 dizinin ortalamasini da alir; cikti asagidadir. 604 605 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler>./enbuyiii 606 Dizinin eleman sayisini girin : 607 5 608 Dizi elemanlarini girin : 609 4 610 5 611 6 612 7 613 8 614 Girilen dizi : 615 4. 616 5. 617 6. 618 7. 619 8. 620 En buyuk elemani : 8. 621 En kucuk elemani : 4. 622 Dizinin ortalamasi : 6. 623 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler> 624 625 PROGRAM enbuyiii 626 IMPLICIT NONE 627 INTEGER n, i 628 REAL A(99), enbuyuk, enkucuk, ortalama, dizitoplam 629 c 630 PRINT*,'Dizinin eleman sayisini girin :' 631 READ(*,*)n 632 c 633 PRINT*,'Dizi elemanlarini girin :' 634 DO i=1,n 635 READ(*,*)A(i) 636 END DO 637 c 638 enbuyuk = A(1) 639 enkucuk = A(1) 640 dizitoplam = 0 641 DO i=1, n 642 IF ( A(i).GT.enBuyuk ) enbuyuk = A(i) 643 IF ( A(i).LT.enKucuk ) enkucuk = A(i) 644 dizitoplam = dizitoplam + A(i) 645 END DO 646 c 647 PRINT*,'Girilen dizi :' 648 DO i=1,n 649 PRINT*, A(i) 650 END DO 651 c 652 PRINT*,'En buyuk elemani :', enbuyuk 653 PRINT*,'En kucuk elemani :', enkucuk 654 PRINT*,'Dizinin ortalamasi :', dizitoplam / n 655 END 656 657 658 10 - Asagidaki program yukaridakinin yaptigi ise ek olarak 659 diziyi bire normalize eder; yani dizinin en buyuk 660 elemanini bulur ve tum diziyi bu elemana boler. Bu 661 islem sonucunda dizinin en buyuk elemani 1 olur ve 662 diger elemanlar da bunun altinda kalir. Dizi 663 elemanlarinin orani bozulmaz. (Bkz. enbuy.png) 664 665 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler>./enbuyiv 666 Dizinin eleman sayisini girin : 667 5 668 Dizi elemanlarini girin : 669 1 670 2 671 3 672 4

2003-12-18 istanbul_üniversitesi_nükleer_fizik_bölümü_fortran77_ders_notu-uyg_5.f 9 673 5 674 Girilen dizi : 675 1. 676 2. 677 3. 678 4. 679 5. 680 En buyuk elemani : 5. 681 En kucuk elemani : 1. 682 Dizinin ortalamasi : 3. 683 Bire normalize edilmis dizi elemanlari : 684 0.200000003 685 0.400000006 686 0.600000024 687 0.800000012 688 1. 689 ozgur@olmak:~/documents/g77/kaynakkodlar/ornekler> 690 691 PROGRAM enbuyiv 692 IMPLICIT NONE 693 INTEGER n, i 694 REAL A(99), enbuyuk, enkucuk, ortalama, dizitoplam 695 696 c dizinin kac elemana sahip oldugu giriliyor 697 698 PRINT*, 'Dizinin eleman sayisini girin :' 699 READ(*,*)n 700 701 c dizi elemanlari giriliyor 702 703 PRINT*, 'Dizi elemanlarini girin :' 704 DO i=1,n 705 READ(*,*)A(i) 706 END DO 707 708 c enbuyuk, enkucuk elemanlar ve dizinin toplami bulunuyor 709 710 enbuyuk = A(1) 711 enkucuk = A(1) 712 dizitoplam = 0 713 DO i=1, n 714 IF ( A(i).GT.enBuyuk ) enbuyuk = A(i) 715 IF ( A(i).LT.enKucuk ) enkucuk = A(i) 716 dizitoplam = dizitoplam + A(i) 717 END DO 718 719 c girilen dizi ekrana basiliyor 720 721 PRINT*, 'Girilen dizi :' 722 DO i=1, n 723 PRINT*, A(i) 724 END DO 725 726 c dizi bire normalize ediliyor; her eleman enbuyuk elemana bolunuyor 727 728 DO i=1, n 729 A(i) = A(i) / enbuyuk 730 END DO 731 732 c hesaplanan bilgiler ekrana basiliyor 733 734 PRINT*, 'En buyuk elemani :', enbuyuk 735 PRINT*, 'En kucuk elemani :', enkucuk 736 PRINT*, 'Dizinin ortalamasi :', dizitoplam / n 737 738 PRINT*, 'Bire normalize edilmis dizi elemanlari :' 739 DO i=1, n 740 PRINT*, A(i) 741 END DO 742 743 END 744