ENF-108 TEMEL BİLGİSAYAR PROGRAMLAMA VE MATLAB GAZİ ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ OTOMOTİV MÜHENDİSLİĞİ BÖLÜMÜ DOÇ. DR.

Benzer belgeler
Ana Bellek (RAM) İşlemci (CPU) Depolama

Fortran da kullanılan giriş çıkış komutları PRINT, WRITE ve READ dir.

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

Algoritma ve Akış Diyagramları

Algoritmalar ve Programlama. Algoritma

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ (Algoritma Geliştirmek, Satır Kod)

Algoritma ve Programlamaya Giriş

Algoritma ve Akış Diyagramları

Örnek bir Algoritma. Örneğimiz bir insanın evden çıkıp işe giderken izleyeceği yolu ve işyerine girişinde ilk yapacaklarını tanımlamaktadır.

BİLGİSAYAR PROGRAMLAMA DERSİ

BİLGİSAYAR PROGRAMLAMA DERSİ

İÇ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

HSancak Nesne Tabanlı Programlama I Ders Notları

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

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

PASCAL PROGRAMLAMA DİLİ YAPISI

BİLGİSAYAR PROGRAMLAMA MATLAB

BİLGİSAYAR PROGRAMLAMA DERSİ

BİL-142 Bilgisayar Programlama II

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI

C PROGRAMLAMA YRD.DOÇ.DR. BUKET DOĞAN PROGRAM - ALGORİTMA AKIŞ ŞEMASI

Ö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.

PROGRAMLAMA DİLLERİ I

Algoritmanın Hazırlanması

Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır.

ALGORİTMALAR. Turbo C Bilgisayarda Problem Çözme Adımları. Bilgisayarda Problem Çözme Adımları.

BİLGİSAYAR PROGRAMLAMA MATLAB

Programlama Temelleri. Ders notları. Öğr.Gör. Hüseyin Bilal MACİT 2017

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

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

FORMÜLLER VE FONKSİYONLAR

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

4- ALGORİTMA (ALGORITHM)

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

BMT 101 Algoritma ve Programlama I 3. Hafta. Yük. Müh. Köksal GÜNDOĞDU 1


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

PROGRAMLAMAYA GİRİŞ DERS 2

Dr. Fatih AY Tel:

ÜNİT E ÜNİTE GİRİŞ. Algoritma Mantığı. Algoritma Özellikleri PROGRAMLAMA TEMELLERİ ÜNİTE 3 ALGORİTMA

Dr. Musa KILIÇ Öğretim Görevlisi

HSancak Nesne Tabanlı Programlama I Ders Notları

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

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

Pascal Programlama Dili

Fonksiyonlar (Altprogram)

Excel' de formüller yazılırken iki farklı uygulama kullanılır. Bunlardan;

BÖLÜM 2: ALGORİTMALAR

HSancak Nesne Tabanlı Programlama I Ders Notları

BMT 101 Algoritma ve Programlama I 7. Hafta. Yük. Müh. Köksal Gündoğdu 1

4- ALGORİTMA (ALGORITHM) M.İLKUÇAR - 1

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

Bilgisayar Programlama MATLAB

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Bilgisayar II Dersi. Bölüm-2

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Akış Kontrol Mekanizmaları

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

ALGORİTMA VE PROGRAMLAMA I

Bilgisayar Programlama

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Matematiksel Operatörler

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

MATLAB İLE PROGRAMLAMAYA GİRİŞ. Nedim TUTKUN Elektrik Elektronik Mühendisliği Bölümü

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

C Programlama Dilininin Basit Yapıları

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

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

HÜPP PYTHON I.HAFTA ALGORİTMA MANTIĞI, AKIŞ DİYAGRAMLARI VE PYTHON'A GİRİŞ

MatLab. Mustafa Coşar

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

TEMEL BİLGİSAYAR BİLİMLERİ

MATLAB de. Programlama. Kontrol Yapıları. Döngü Yapıları. Doç. Dr. İrfan KAYMAZ Matlab Ders Notları

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

BMT 101 Algoritma ve Programlama I 2. Hafta. Yük. Müh. Köksal GÜNDOĞDU 1

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

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

Pascal Programlama Dili (2. hafta)

Fen ve Mühendislik Uygulamalarında MATLAB

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

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 5. Bölüm Karar ve Çevrim Kontrol Yapıları

İÇ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

Fen ve Mühendislik Uygulamaları ile MATLAB

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

BİLİŞİM TEKNOLOJİLERİ 6. SINIF DERS NOTLARI 2

BLG 1306 Temel Bilgisayar Programlama

BMT 101 Algoritma ve Programlama I 8. Hafta. Yük. Müh. Köksal GÜNDOĞDU 1

disp VEYA fprintf KOMUTLARIYLA EKRANA MESAJ YAZDIRMA

Microsoft Office Excel 2007

Buna göre, eşitliği yazılabilir. sayılara rasyonel sayılar denir ve Q ile gösterilir. , -, 2 2 = 1. sayıdır. 2, 3, 5 birer irrasyonel sayıdır.

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

Adım Adım SPSS. 1- Data Girişi ve Düzenlemesi 2- Hızlı Menü. Y. Doç. Dr. İbrahim Turan Nisan 2011

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

Hafta 4 Döngü Yapıları

M i c r o s o f t E X C E L ÇALIŞMA SORULARI

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Transkript:

ENF-108 TEMEL BİLGİSAYAR PROGRAMLAMA VE MATLAB GAZİ ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ OTOMOTİV MÜHENDİSLİĞİ BÖLÜMÜ DOÇ. DR. FATİH ŞAHİN 1

İçindekiler 1. PROGRAMLAMAYA GİRİŞ... 8 1.1 Bilgisayar Nedir?... 8 1.2 Program Nedir?... 8 1.3 Programlama Dilleri... 9 1.4 Program Geliştirmenin Aşamaları... 12 1.4.1 Problemin Belirlenmesi... 12 1.4.2 Analiz... 12 1.4.3 Tasarım... 12 1.4.4 Kodlama... 13 1.4.5 Test İşletimi... 13 1.5 Algoritma ve Akış Şemaları... 13 1.6 Bilgisayar Programlarında Akış Türleri... 15 1.6.1 Sıralı Akış (Sequential Flow)... 15 1.6.2 Şartlı Akış (Conditional Flow)... 16 1.6.3 Tekrarlı Akış (Repetitive Flow)... 17 2 Fortran Programlama Dili... 19 2.1 Fortran Karakter Kümesi... 19 2.2 Fortran Veri Tipleri... 19 2.2.1 Tamsayılar... 20 2.2.2 Gerçek Sayılar... 20 2

2.2.3 Değişkenler... 21 2.2.4 Sabitler... 21 2.3 Fortran da Değişkenlerin Tanımlanması... 22 2.3.1 Gerçek sayı Tipinde Değişkenlerin Tanımlanması... 23 2.3.2 Karmaşık Sayı Değişkenlerin Tanımlanması... 23 2.3.3 Mantıksal Değişkenlerin Tanımlanması... 24 2.3.4 Karakter Tipi Değişkenlerin Tanımlanması... 24 2.3.5 Değişkenlerin İlk Değer Atanarak Tanımlanması... 25 2.4 Fortran da Sabitlerin Tanımlanması... 25 2.5 Fortran da Kullanılan Operatörler... 26 2.6 Fortran da İşlemler... 26 2.7 İşlem Önceliği Kuralları... 27 2.8 Fonksiyonlar... 28 2.9 Atama Operatörü... 29 2.10 Örnek Eşitlikler... 29 3 Fortran PowerStation 4.0... 31 3.1 Fortran Programlarının Temel Yapısı ve Yazım Kuralları... 35 4 Fortran da Temel Giriş/Çıkış Komutları... 37 4.1 Örnek Programlar... 38 4.2 Fortran da Şartlı Akış Program Yapısı... 39 4.2.1 IF Yapısı... 40 3

4.2.2 Örnek Programlar... 42 5 Mantıksal İfadelerin Birleştirilmesi... 45 5.1 Örnek Programlar... 46 5.2 SELECT CASE Komutu... 47 5.2.1 Örnek Programlar... 47 6 Fortran da Tekrarlı Akış Program Yapısı... 50 6.1 Sayaç Kontrollü DO Döngüsü... 50 6.2 İç İçe Döngüler... 51 6.3 Döngü Değişkenini Artış Miktarı... 52 6.4 Ters Çalışan Döngüler... 53 6.5 Genel DO Döngüsü... 53 6.6 DO-WHILE Döngüsü... 55 6.7 CYCLE Komutu... 55 6.8 Döngülere İsim Verilmesi... 56 6.9 Örnek Programlar... 56 7 Fortran da Diziler... 57 7.1 Tek Boyutlu Diziler... 57 7.2 Çok Boyutlu Diziler... 58 7.3 Dinamik Diziler... 59 7.4 Diziler Üzerinde İşlemler... 60 7.5 Örnek Uygulamalar... 60 8 Fortran da Dosya Giriş/Çıkış İşlemleri... 62 4

8.1 Örnek Uygulama... 63 8.2 Fortran da Formatlı Giriş/Çıkış İşlemleri... 64 9 Fortran da Rasgele Sayı Üretilmesi... 66 9.1 Örnek Uygulama... 66 10 MATLAB a Giriş... 67 10.1 Matlab da Temel İşlemler... 68 10.2 Skaler, Vektör, Matris... 70 10.3 Vektör Tanımlama Komutları... 70 11 MATLAB da Grafik Çizimleri... 74 11.1 Plot Komutu... 74 11.2 Fplot ve Ezplot Komutları... 78 11.3 Gtext Komutu... 78 11.4 Legend Komutu... 78 11.5 Ginput Komutu... 79 11.6 Çoklu Grafik Çizimi... 79 11.7 Plot3 Komutu... 79 11.8 Yüzey Grafikleri... 80 11.9 Diğer Grafik Komutları... 80 12 M DOSYALARI... 81 12.1 Input Fonksiyonu... 82 12.2 Disp Fonksiyonu... 82 12.3 Matlab da Kontrol İfadeleri... 83 12.3.1 Karşılaştırma Operatörleri... 83 5

12.3.2 Mantıksal İfadelerin Birleştirilmesi... 83 12.3.3 if end yapısı... 83 12.3.4 switch end yapısı... 84 12.4 Döngüler... 84 12.4.1 for döngüsü... 84 12.4.2 while döngüsü... 85 12.4.3 break fonksiyonu... 85 12.4.4 continue fonksiyonu... 85 12.5 Fonksiyon Dosyaları... 85 12.5.1 Fonksiyonlarda Değişken Tanımlama Şekilleri... 86 12.5.2 Return Fonksiyonu... 87 12.5.3 Değişken Sayıda Giriş ve Çıkış Parametreleri Kullanma... 88 13 Matlab da Dosya İşlemleri... 89 13.1 fopen komutu... 89 13.2 fprintf komutu... 90 13.2.1 Alan Tanımlayıcıları... 90 13.2.2 Çıkış Karakterleri... 90 14 Simulink İle Görsel Programlama... 94 6

Ders Hakkında Bilgi ENF-108 Temel Bilgisayar Programlama ve Matlab Dersin toplam süresi 15 hafta (15 x 4 = 60 saat) Derse devam mecburiyeti %80 (15 x 0,8 = 12 hafta (48 saat)) Değerlendirme: Bir kısa sınav, bir uygulama sınavı, bir vize ve bir final üzerinden yapılmaktadır. Başarı notu = 0,6 x Final + 0,15 x Vize + 0,1 x KS + 0,15 x US Derste kullanılacak kaynaklar: Nyhoff, L. R., Leestma, S. C., Introduction to Fortran 90 for Engineers and Scientists, Prentice Hall, 1997. Çankaya, İ., Akgün, D., Matlab ile Meslek Matematiği, Seçkin Yayıncılık, 2008. Şahin, F., ENF-108 Ders Notları, 2013. 7

1. PROGRAMLAMAYA GİRİŞ 1.1 Bilgisayar Nedir? Bilgisayar belli komutlara göre verileri işleyebilen ve çeşitli ortamlarda depolayabilen bir makinedir. Bilgisayar basit olarak bir işlemci, ana bellek, giriş birimleri, çıkış birimleri ve depolama birimlerinden oluşmaktadır. Temel bilgisayar mimarisini Şekil 1 de görülmektedir. Ana Bellek (RAM) Giriş İşlemci (CPU) Çıkış Depolama Şekil 1. Temel bilgisayar mimarisi Bilgisayar en genel haliyle yazılım ve donanım olarak iki kısma ayrılabilir. Donanım bilgisayarın tüm fiziksel parçalarıdır. Yazılım ise bilgisayar donanımının çalışabilmesi için gerekli olan komutlar bütünüdür. 1.2 Program Nedir? Program bilgisayarın belli bir hedefi/işlemi gerçekleştirmesine yönelik komutlar bütünüdür. Bilgisayarlar aslında oldukça gelişmiş elektronik devrelerdir. Örneğin gelişmiş bir işlemcinin içerisinde yaklaşık 1.000.000.000 civarında transistör bulunmaktadır. Burada söz konusu transistörlerin çalışması bir anahtara benzer. Yani transistör ya iletimdedir veya yalıtımdadır. Bu nedenle bilgisayarlar sayısal elektronik mantığına göre (ikili sayı sistemine göre) çalışırlar. 8

Sayısal elektronikte bir anahtarın kapalı olması (iletim) 1 ile açık olması (yalıtım) 0 ile ifade edilir. Benzer şekilde bir lambanın yanması 1, sönük olması 0 ile ifade edilir. Bilgisayarların ikili sayı sistemine göre çalışması yapılarından kaynaklanmaktadır. Örneğin A harfinin bilgisayardaki karşılığı 8 bitlik 0110 0101 ifadesidir. Yani arka planda her şey 0 ve 1 lerle ifade edilir. Bilgisayar programları da aynı şekilde ikili sayı sistemiyle çalışır. İkili sayı sistemiyle yazılmış bir programa makine dili adı verilir. İşlemci tarafından çalıştırılan bütün programlar makine dilinde yazılmıştır. Üst düzey programlama dilleri kullanılarak geliştirilmiş bir program makine diline dönüştürüldükten sonra çalıştırılabilir. 1.3 Programlama Dilleri Yukarıda da açıklandığı gibi işlemci tarafından çalıştırılan programa makine dili veya makine kodu denir. Makine dili 0 ve 1 lerden oluşan ve insan tarafından yazılması, okunması, anlaşılması ve değişiklik yapılması oldukça zor olan bir dildir. Makine dilinde yazılmış örnek bir program aşağıda yer almaktadır. 1. 00010000000000000000010000000000 2. 00100100000000000000010000000001 3. 00100011000000000000010000000010 4. 00010001000000000000010000000011 9

Bu program 1024. ve 1025. adreslerdeki verileri çarpıp üzerine 1026. adresteki veriyi ekleyen ve sonucu 1027. adrese kaydeden bir programdır. Makine dili okunabilirliğinin ve yazılşının kolaylaştırılması amacıyla 16 lık sayı sistemiyle (hex : hexadecimal) ifade edilir. Aşağıda 16 sayı düzeninde kodlanmış örnek bir makine dili programı görülmektedir. :1000000083161F3085000730860083120301950197 :10001000A401A5019401A101A201A3011130A20034 :100020006128A20115109510910192019301061DFE :10003000A1280518282885182B2805192E28851988 :100040003128051A34280618432886184A286D28AE :100050000130A20037280230A20037280330A20066 :1000600037280430A20037280530A2003728910B2A :100070001728920B17289514930A1308093C031D9F :10008000172815148615910B1728920B1728940A18 :1000900074201128910B1728920B172894037420B1 :1000A000112815109510220889001408880083165D :1000B000081555308900AA30890088140811831268 :1000C0000800151095108312220889008316081461 :1000D00083120808940074201128861115185120E5 :1000E00095186128742011281408A100211882286D :1000F00086120617A50B7928A5010613A50B7D28E6 :10010000A501842886167928A10C21189128861229 :100110000617A50B8828A5010613A50B8C28A50199 :10012000932886168828A40A2408073C031D8428DF :10013000A4018617A50B99288613A50B9C28A50159 :1001400008001130A2001408A30051200000A628C6 :00000001FF Makine dilinde program yazılması ve hata takibi çok zor olduğu için komutların kısaltmalarla (mnemonic) ifade edilebildiği bir dil geliştirilmiştir. Bu dil assembly dilidir. Assembly dilinde yazılan programlar assembler adı verilen dönüştürücü programlarla makine diline dönüştürülür. Makine diline göre daha anlaşılır ve kolay olan assembly dilinde de program yazmak çok kolay değildir. Yukarıda örnek olarak verilen 4 satırlık programın assembly dilinde yazılmış hali aşağıdadır. 1. MOV A, ACC 2. MUL B, ACC 3. ADD C, ACC 4. STO ACC, X 10

Buradaki komutlar mov (move : taşı), mul (multiply : çarp), add (add : ekle), sto (store : depola) şeklinde kısaltmalardır. Ekrana Otomotiv yazdıran bir programın x86 assembly kodu aşağıda verilmiştir. msg: len: SECTION.data db "Otomotiv",10 equ $-msg SECTION.text main: global main mov edx,len mov ecx,msg mov ebx,1 mov eax,4 int mov mov int 0x80 ebx,0 eax,1 0x80 Örnekten de anlaşılacağı gibi assembly dilinde de program yazmak oldukça zor ve zahmetlidir. Bu nedenle daha çok günlük hayatta kullanılan kelimelerin yer aldığı programlama dilleri geliştirilmiştir. Makine dili ve assembly diline alt düzey diller denirken günlük hayatta kullanılan ifadelerle programların yazıldığı dillere üst düzey diller denir. Üst düzey dillere Fortran, Basic, Pascal, C gibi diller örnek olarak verilebilir. Şekil 2. Üst düzey ve alt düzey programlama dilleri Hangi dilde yazılmış olursa olsun bir programın çalıştırılabilmesi için makine koduna dönüştürülmesi zorundadır. Bu işlem yapılırken assembly dilinde yazılan programların dönüştürülmesinde assembler adı verilen programlar kullanılır. Üst düzey dillerde yazılan 11

programların makine koduna dönüştürülmesinde ise derleyici (compiler) ve yorumlayıcılar (interpreter) kullanılır. Bazı diller hem derleyici hem de yorumlayıcıya sahiptir. Derleyiciler bir programı bütünüyle ele alarak hatalara karşı denetler ve makine koduna dönüştürür. Yorumlayıcılar ise programın o anda çalıştırılacak satırını makine koduna dönüştürür. 1.4 Program Geliştirmenin Aşamaları Bir bilgisayar programı geliştirilirken belli aşamaların takip edilmesi gerekir. Bu aşamalar: problemin belirlenmesi, problemin analizi, algoritma ve akış şemasının tasarımı, programın kodlanması (yazılması) ve test işletimi yani denenmesidir. Bir program için bazen bu safhaların tümü veya bir kaçı tekrarlanabilir. 1.4.1 Problemin Belirlenmesi Bilgisayar programı geliştirilmesinde birinci aşama geliştirilecek programın hangi problemle ilgili olduğudur. Problemin iyi belirlenmesi, eldeki verilerin ve istenen verilerin anlaşılması gerekmektedir. 1.4.2 Analiz Problemin belirlenmesinden sonra çözüm metodunun belirlenmesi gerekmektedir. Hangi giriş verilerine karşılık hangi çıkış verilerinin istendiği belirlenmelidir. Çözümün elde edilmesinde kullanılacak yöntem belirlenmelidir. Bu amaçla benzer problemlerin çözümünden de yararlanılabilir. 1.4.3 Tasarım Analiz safhasında belirlenen çözüm metodunun adımları detaylandırılır. Programın ne tür bir akış mantığıyla ilerleyeceği belirlenir. Bu safhada algoritma ve akış şemasının tasarımı yapılır. 12

1.4.4 Kodlama Tasarım safhasında belirlenen algoritma/akış şemasındaki adımlar programın yazılacağı dilin komutları ve kuralları göz önünde bulundurularak kod haline dönüştürülür. 1.4.5 Test İşletimi Yazılan program çalıştırılarak, bütün olasılıklara göre testleri yapılır. Verilen giriş verilerine karşı istenen çıkış verilerini doğru bir biçimde sağlayıp sağlayamadığı tespit edilir. Varsa programın istisnai durumlarda ürettiği çıkış tespit edilir. Bu testlere bağlı olarak programın eksiklikleri ve hataları giderilerek son şekli verilir. 1.5 Algoritma ve Akış Şemaları Algoritma bir problemin çözümünde izlenecek yol anlamına gelir. Algoritma, matematikte ve bilgisayar biliminde bir işi yapmak için tanımlanan, bir başlangıç durumundan başladığında, açıkça belirlenmiş bir son durumda sonlanan, sonlu işlemler (adımlar) kümesidir. Algoritma kelimesi, Özbekistan'ın Harezm, bugünkü Türkmenistan'ın Khiva kentinde doğmuş olan Ebu Abdullah Muhammed bin Musa el Harezmî isimli matematikçinin adından gelir. Batılılar, el Harezmî (Al-Khwarizmi) (Latincede Algoritmi) sözcüğünü telaffuz edemedikleri için terim Algoritma şeklinde kalmıştır. Algoritmanın bir problemin çözümünde izlenecek yol anlamına geldiği açıklanmıştı. Buradaki problem sorun anlamından ziyade yapılması gereken bir iş anlamına gelir. Yani günlük hayatta yaptığımız her işin bir algoritması vardır. İşe gitmek, yemek yapmak, çay demlemek, yemek yemek, ev temizlemek konularında algoritmalar yazılabilir. Örnek olarak çay demleme algoritması aşağıdaki yer almaktadır. 1. Kişi sayısına uygun çay miktarını demliğe koy 2. Demlikteki çayı yıka 3. Çaydanlığa su koy 4. Çaydanlık ve demliği ocağa yerleştir ve ocağı yak 5. Çaydanlıktaki su kaynayınca demliğe uygun miktarda kaynar su aktar 6. Çaydanlığa tekrar su ekle 7. Tekrar ocağa koy ve kaynamasını bekle 13

8. Kaynadıktan sonra demlenmesi için bekle 9. Çayı bardaklara doldurarak servis et Çayın demlenmesinde farklı yöntemler de kullanılabilir. Bir problemin çözümünde birden fazla yöntem izlenebilir. Her bir yöntem ayrı bir algoritmadır. Basit bir örnek olarak klavyeden girilen üç sayının ortalamasını bulan bir programın algoritması ise aşağıda yer almaktadır. 1. Başla 2. 1. Sayıyı gir 3. 2. Sayıyı gir 4. 3. Sayıyı gir 5. Girilen sayıları topla 6. Toplamı 3 e böl 7. Sonucu ekrana yazdır 8. Son Bir önceki örnekten farklı olarak burada algoritmanın birinci satırında Başla ve son satırında ise Son ifadeleri yer almaktadır. Bu ifadeler algoritmanın başlangıç ve sonunu belirtmek amacıyla kullanılır. Akış şemaları algoritmaların şema halinde gösterilmesi amacıyla kullanılır. Bu amaçla kullanılan belli başlı semboller vardır. Bu sembollerden en çok kullanılanları Tablo 1 de yer almaktadır. Tablo 1. Akış şemalarında yaygın olarak kullanılan semboller Başla, Son (Akış şemasının başlangıç ve sonunu belirtir) İşlem, hesaplamalar (Yapılan bütün işlem ve hesaplamalarda kullanılır) Giriş, Çıkış (Genel veri giriş ve çıkış işlemleri için kullanılır) Karar noktası (Akışın bir noktada bir sorunun cevabına bağlı olarak yön değiştirmesi amacıyla kullanılır) 14

Elle giriş (Klavyeden giriş amacıyla kullanılır) Ekran (Herhangi bir değerin ekranda görüntülenmesini sağlar) Döngü (Tekrarlı olarak çalıştırılacak bölümleri belirtmek için kullanılır) Alt program Oklar (Akışın yönünü belirtmek, blokları birbirine bağlamak için kullanılır) Sayfa içi bağlantı noktası (Akışı sayfa içerisinde başka bir noktaya bağlamak için kullanılır) Sayfa dışı bağlantı noktası (Akışın başka bir sayfadan devam ettiğini gösterir) 1.6 Bilgisayar Programlarında Akış Türleri Bilgisayar programlarındaki akış türlerini üç ana grupta toplamak mümkündür. Bunlar sıralı akış, şartlı akış ve tekrarlı akıştır. 1.6.1 Sıralı Akış (Sequential Flow) Sıralı akışta işlemler tek yönlü olarak bir kez yapılır ve akış sona erer. Aşağıda üç sayının ortalamasını hesaplayan programın akış şeması yer almaktadır. 15

Başla Başla sayı1, sayı2, sayı3 sayı1, sayı2, sayı3 Ortalama=(sayı1+ sayı2+sayı3)/3 Ortalama=(sayı1+ sayı2+sayı3)/3 Ortalama Ortalama Son Son Soldaki akış şeması ile sağdaki arasında bazı küçük farklar bulunmaktadır. Soldakinde sayılar klavyeden girilmiş, sonuç ekrana yazdırılmış, sağ taraftakinde ise genel veri giriş/çıkış simgesi kullanılarak giriş ve çıkış işlemleri yapılmıştır. 1.6.2 Şartlı Akış (Conditional Flow) Şartlı akış mantığında akışın bir noktasında yapılan bir sorgulamaya göre akışın yön değiştirmesi durumu söz konusudur. Örneğin girilen bir sayının pozitif veya negatif olduğunu ekrana yazdıran bir programı düşünelim. Böyle bir programın akışında girilen sayının pozitif veya negatif olmasına göre yapılacak işlemler farklılık göstermektedir. Programa ait örnek akış şeması aşağıda görülmektedir. 16

Başla Bir sayı giriniz (X) E X < 0? H Girilen sayı negatiftir Girilen sayı pozitiftir Son 1.6.3 Tekrarlı Akış (Repetitive Flow) Programın belli bir kısmının bir şarta bağlı olarak veya belli bir sayıda tekrarını içeren akış türüdür. Başla Başla Bir sayı giriniz (X) Bir sayı giriniz (X) Sonuç = 0 Sonuç = 0 K = 1'den X e döngü Sonuç = Sonuç + K Sonuç = Sonuç + X X = X 1 E X > 0? H Sonuç Sonuç Son Son 17

Klavyeden girilen bir tam sayıya kadar olan sayıların toplamını bulan programa ait iki farklı akış şeması yukarıda görülmektedir. Her iki akış şemasında da yapılan işlem aynıdır. Sol taraftakinde döngü simgesi ile yapılan işlemler sağ taraftakinde karar noktası ile yapılmıştır. Sıralı akış örnekleri: Başarı notu hesaplayan program Dairenin alanını ve çevresini hesaplayan program Şartlı akış örnekleri : Başarı notuna göre ders geçmeyi hesaplayan program İkinci dereceden denklemin köklerini hesaplayan program Tekrarlı akış örnekleri : Faktöriyel hesaplayan program Toplam hesaplayan program 18

2 Fortran Programlama Dili Formula Translation : Formül çevirisi Fortran ilk üst düzey programlama dillerinden biridir. John Backus liderliğindeki 14 kişilik bir programcı ekibi tarafından IBM 704 bilgisayarlar için 3 yılda geliştirilmiştir (The IBM Mathematical FORmula TRANslating System: Fortran) (1954-1957). Sonraki yıllarda farklı versiyonları geliştirilmiştir. Fortran 0, Fortran I, Fortran II, Fortran III, Fortran IV, Fortran 77, Fortran 90, Fortran 95, Fortran 2003, Fortran 2008 2.1 Fortran Karakter Kümesi Fortran programlama dilinde kullanılabilecek karakterler Tablo 1 de verilmiştir. Tablo 2. Fortran karakter kümesi Rakamlar 0 1 2 3 4 5 6 7 8 9 Büyük harfler A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Küçük harfler a b c d e f g h i j k l m n o p q r s t u v w x y z Özel karakterler ( ) * + - / : =! & $ ; < > %?,. boşluk Fortran da diğer dillerde olduğu gibi Türkçe karakterler (ğ Ğ ü Ü ş Ş ö Ö ç Ç İ ı) kullanılmaz. 2.2 Fortran Veri Tipleri Fortran da beş temel veri tipi kullanılmaktadır. Bunlar; tamsayılar, gerçek sayılar, karmaşık sayılar, karakterler ve mantıksal verilerdir. INTEGER REAL COMPLEX CHARACTER Tamsayı Gerçek sayı Karmaşık sayı Karakter 19

LOGICAL Mantıksal 2.2.1 Tamsayılar Tamsayılar doğal sayılar (0, 1, 2, 3,.) ve bunların negatif değerlerinden oluşur (-1, -2, -3, ). Fortran da pozitif tamsayıları belirtirken + işareti kullanmaya gerek yoktur. Bazı tamsayı örnekleri aşağıdadır. 0 238-5486 +21548 Aşağıdaki sayılar ise yanlış yazılmıştır. 3,1245 (Fortran da sayısal değerler virgül içermez) 16.0 (Tamsayılar ondalıklı kısım içermez) --5 (Yalnız bir işaret karakteri bulunabilir) 7- (İşaret karakteri sayının sağında yer alamaz) 2.2.2 Gerçek Sayılar Fortran da gerçek sayılar kullanılırken mutlaka ondalık ayıracı (nokta işareti) kullanılır. Aşağıda örnek gerçek sayılar verilmiştir. 2.245-0.1458 +1457. 2.2451E3 1.23144E-2 Aşağıdaki sayılar ise yanlış yazılmıştır. 20

25,245 (Sayısal değerler virgül içermez) 25 (Gerçek sayılar mutlaka nokta karakteri içerir) Karakter Dizileri Fortran da karakter dizileri çift tırnak karakterleri arasında yazılır. Fatih Sahin -123abc 2.2.3 Değişkenler Bilgisayar programlamada değişken kavramı belleğin belli bir adresinin programdaki işlemlerde kullanılmak üzere ayrılmasını ifade eder. Bilgisayarda bütün işlemler bellek adreslerinde kayıtlı veriler üzerinden gerçekleştirilir. Örneğin klavyeden girilen iki sayıyı toplayıp sonucunu ekrana yazdıran bir programda öncelikle girilen veriler bellekte bu iş için tahsis edilmiş olan adreslere yazılır. Daha sonra bu adreslerdeki veriler toplanarak sonuç başka bir adrese yazılır. Bu durumda böyle bir program için üç ayrı değişken tanımlanmalıdır. Değişkenlerden ikisi girilen sayılar için üçüncüsü ise sonuç için kullanılacaktır. Değişken tanımlamada belleğin hangi adresinin bize tahsis edildiğinin bir önemi yoktur. Önemli olan istenilen boyutta ve türde bir alanın ayrılmış olmasıdır. Değişken tanımlama işlemi programcı tarafından programın ilk satırlarında gerçekleştirilir. Programcı üzerinde çalıştığı programda gerekli olabilecek tüm değişkenleri önceden belirlemeli ve tanımlamalıdır. Değişkenler tanımlanırken tamsayı, gerçek sayı, karmaşık sayı veya mantıksal türde tanımlanabilir. Örneğin tamsayı tipinde tanımlanan bir değişkene sadece tamsayı değerler verilebilir. Bir bölme işleminin sonucu bu değişkene atanamaz. 2.2.4 Sabitler Sabitlerde değişkenlere benzer olarak bellekte ayrılan alanları ifade eder. Değişkenlerden farkı programın çalışması sırasında değişkenlerin içeriği değişebilir sabitlerin içeriği ise değişmez. Örneğin bir eşitlikte yer alan özel bir katsayı sabit olarak tanımlanabilir. Sabitlere 21

herhangi bir işlemin sonucu atanamaz, ancak sabitlerle işlem yapılıp başka bir değişkene sonuç atanabilir. 2.3 Fortran da Değişkenlerin Tanımlanması Fortran da tam sayı ve reel sayı tipindeki değişkenlerin programın başında tanımlanması zorunluluğu yoktur. Fortran da IMPLICIT adı verilen bir değişken yapısı kullanılmaktadır. Bu yapıya göre değişkenlerin tanımlanmasına ihtiyaç yoktur. Değişkenlerin hangi türden olacağı (tamsayı veya gerçek sayı) birinci harfine göre belirlenir. I, J, K, L, M, N harfleriyle başlayan değişkenler tam sayı, diğer harflerle başlayan değişkenler gerçek sayı kabul edilir. Örneğin, IMPLICIT yapıya göre IMIN, JHIZ, MOMENT, KSAYI, isimli değişkenler tamsayı değişkenlerdir. BASINC, TEMP, HIZ gibi değişkenlerde gerçek sayı türündedir. IMPLICIT yapı değişken tanımlamasının kolay bir şekilde yapılması amacıyla oluşturulmuştur. İstenirse bu yapının dışında da değişken tanımlanabilir veya IMPLICIT yapı tamamen devre dışı bırakılabilir. IMPLICIT yapının dışında tam sayı tipinde değişken tanımlanması şu şekilde yapılır: INTEGER HIZ, AVANS INTEGER::HIZ,AVANS Değişken tanımı yapılırken önce değişkenin tipi, daha sonra değişkenler aralarında virgül karakteri ile yazılır yazılır. Buradaki INTEGER kelimesi tamsayı değişken tipleri için kullanılan ifadedir. HIZ ve AVANS ise tanımlanan değişkenlerin isimleridir. IMPLICIT yapıya göre HIZ ve AVANS isimli değişkenler gerçek sayı tipinde olmalıydı ancak özel olarak tanımlama yaptığımız için bu değişkenler IMPLICIT yapının dışında kalmış ve tam sayı tipli olarak belirlenmiştir. 22

2.3.1 Gerçek sayı Tipinde Değişkenlerin Tanımlanması REAL IHIZI, NEM REAL::IHIZI,NEM REAL kelimesi gerçek sayı tipinde değişkenleri tanımlamak için kullanılır. IMPLICIT yapıya göre IHIZI ve NEM değişkenleri tam sayı tipinde olmalıydı fakat özel olarak tanımlama yaptığımız için bu değişkenler gerçek sayı tipli olarak belirlenmiştir. Eğer IMPLICIT yapı tamamen devre dışı bırakılmak isteniyorsa programın başında: IMPLICIT NONE Satırı eklenmelidir. Bu durumda kullanılacak bütün değişkenler tanımlanmak zorundadır. Yani bu satırın yer aldığı bir programda KSAYI isimli bir değişken kullanılacaksa öncelikle tanımlanması gerekmektedir. Aksi taktirde program hata verecektir. 2.3.2 Karmaşık Sayı Değişkenlerin Tanımlanması Karmaşık sayılarla yapılacak işlemler için kullanılacak değişkenlerin bu yapıda tanımlanması gerekmektedir. Karmaşık sayı değişkenlerin tanımlanması şu şekildedir: COMPLEX X,Y,Z COMPLEX::X,Y,Z COMPLEX kelimesi karmaşık sayı değişkenlerin tanımlanmasında kullanılır. Bu örnekte X, Y ve Z isimli üç karmaşık sayı değişken tanımlanmıştır. Bu değişkenler programda kullanılırken: X=(1,1) şeklinde değer atanır. Bu ifade X=1+i anlamına gelir. Birinci sayı gerçek kısmı, ikinci sayı ise sanal kısmı belirtir. Y=(1,-1) ifadesi Y değişkenine 1-i karmaşık sayısını atar. 23

2.3.3 Mantıksal Değişkenlerin Tanımlanması Mantıksal değişkenler TRUE ve FALSE şeklinde yalnızca iki değer alabilirler. TRUE doğru, FALSE yanlış anlamına gelmektedir. Mantıksal karşılaştırmalarda kullanılırlar. Tanımlanması şu şekilde yapılır: LOGICAL SECIM, U LOGICAL::SECIM,U LOGICAL kelimesi mantıksal değişkenlerin tanımlanmasından kullanılan ifadedir. Bu örnekte SECIM ve U isimli iki mantıksal değişken tanımlanmıştır. Mantıksal değişkenleri TRUE olması isteniyorsa 1 değeri, FALSE olması isteniyorsa 0 değeri atanır. SECIM=0 (SECIM değişkeni FALSE yapıldı) U=S1>S2 (Eğer S1>S2 ise U nun değeri TRUE, diğer durumlarda FALSE olacaktır) 2.3.4 Karakter Tipi Değişkenlerin Tanımlanması Karakter tipi değişkenler şu şekilde tanımlanır: CHARACTER(5),AD,SOYAD CHARACTER(5)::AD,SOYAD Burada CHARACTER kelimesi karakter tipinde değişken tanımlandığını, parantez içerisindeki sayısı değişkenlerin içereceği karakter sayısını, AD ve SOYAD ise değişkenleri ifade etmektedir. CHARACTER,AD*5,SOYAD*7 Bu şekilde yapılan bir tanımlamada ise değişkenlerin farklı karakter uzunluklarına sahip olması sağlanabilmektedir. Karakter tipinde tanımlanan değişkenlere şu şekilde atama yapılabilir: 24

AD= FATIH SOYAD= SAHIN 2.3.5 Değişkenlerin İlk Değer Atanarak Tanımlanması Değişkenlere tanımlama sırasında ilk değer verilmesi isteniyorsa bu işlem aşağıdaki örneklerde gösterildiği gibi yapılabilir. INGETER::A=12,B=1500,C=10 REAL::S1=1.3,S2=-3.05E1,S3=-1200. LOGICAL::SECIM=.TRUE.,DURUM=.FALSE. CHARACTER::MESAJ*10= MERHABA,ISIM*5= FATIH 2.4 Fortran da Sabitlerin Tanımlanması Sabitler daha önce de açıklandığı gibi programın işleyişi boyunca değerleri değişmeyen ifadelerdir. Sabitler PARAMETER ifadesi kullanılarak tanımlanır. Sabitlerin tanımlanmasında da değişkenlerin tanımlanmasında olduğu gibi tipinin belirtilmesi gerekmektedir. Aşağıda sabitlerin tanımlanmasıyla ilgili örnekler yer almaktadır. INTEGER,PARAMETER::X=1000 REAL,PARAMETER::PI=3.14 COMPLEX,PARAMETER::A(1,-1) LOGICAL,PARAMETER::SON=.TRUE. CHARACTER(5),PARAMETER::ISIM= FATIH Örneğin içerisindeki hesaplamalarda sayısı gibi bir sabitin kullanıldığı bir programda bu sayının sabit olarak tanımlanmasında fayda vardır. Bu örnekte sayısı sabit olarak 25

tanımlanmadan doğrudan sayısal değeri yazılarak ta kullanılabilir. Ancak bu durumda programın yazılması biraz daha zor olacaktır. 2.5 Fortran da Kullanılan Operatörler Fortran da kullanılan operatörler Tablo 2 de verilmiştir. Tablo 3. Fortran da Kullanılan Operatörler Toplama işlemi + Çıkarma işlemi - Çarpma işlemi * Bölme işlemi / Üst alma işlemi ** 2.6 Fortran da İşlemler Fortran da aynı türden verilerle yapılan işlemler yine aynı türden bir sonuç verir. Örneğin 9.0/2.0 işlemi 4.5 sonucunu verir. Çünkü bölme işlemindeki sayıların her ikisi de gerçek sayılardır. Daha önce açıklandığı gibi gerçek sayılar ondalık ayıracı (nokta karakteri) kullanılarak yazılır. 9/2 işleminin sonucu ise 4 çıkacaktır. Çünkü burada bölme işlemi tamsayılarla yapılmaktadır ve sonuç yine bir tamsayı çıkar. Tamsayı ve gerçek sayı veriler aynı işlem içerisinde kullanılabilirler. Bu durumda tamsayı veri gerçek sayıya dönüştürülerek işlem gerçekleştirilir. Yani 9/2.0 işlemi 9.0/2.0 işlemine dönüştürülür ve sonuç 4.5 çıkar. Aşağıdaki örnekleri inceleyiniz. 1.0 / 2 1.0 / 2.0 0.5 2.0 + 6 / 5 2.0 + 1 2.0 + 1.0 3.0 2 + 6.0 / 5 2 + 6.0 / 5.0 2 + 1.2 2.0 + 1.2 3.2 26

İkinci ve üçüncü örnekte yapılan işlemler aritmetik olarak aynı olmakla beraber sonuçlarının farklı çıktığı görülmektedir. Bu durum Fortran da gerçek sayı ve tamsayı işlemlerinin farklı yapılmasından kaynaklanmaktadır. Fortran da üst alma işlemi yapılırken eğer üst bir tam sayı ise işlem tabanın üst adedince yan yana çarpımı şeklinde gerçekleştirilir. 3.0 ** 3 3.0 * 3.0 * 3.0 27.0 (-5.0) ** 2 (-5.0) * (-5.0) 25.0 Eğer üst alma işleminde üst gerçek sayı ise bu durumda işlem logaritmik olarak gerçekleştirilir. 2.0 ** 3.0 işlemi e 3.0ln (2.0) şeklinde gerçekleştirilir. Normalde işlemin sonucu 8 çıkması gerekirken yuvarlama hatalarından dolayı sonuç küsuratlı çıkabilir. Ayrıca (-2.0) ** 2.0 işlemi tanımsız olacaktır. Bu nedenle üst alma işleminde tamsayı yerine gerçek sayı (3 yerine 3.0 gibi) kullanılmamalıdır. 2.7 İşlem Önceliği Kuralları 1. Fortran da yazılan formüllerde öncelikle üstel hesaplamalar gerçekleştirilir. Eğer art arda üstel işlem yazılmışsa bu durumda sağdan sola işlem gerçekleştirilir. 3 ** 2 ** 2 = 3 ** 4 = 81 2. Üstel hesaplamalardan sonra bölme ve çarpma işlemleri gerçekleştirilir. Birden fazla bölme veya çarpma işleminin olduğu hesaplamalarda soldan sağa yazılış sırasına göre işlemler yapılır. 10 / 5 * 2 = 2 * 2 = 4 27

3. Son olarak toplama ve çıkarma işlemleri yazım sırasına göre gerçekleştirilir. 9 2 3 = 7 3 = 4 Yukarıda üç madde halinde belirtilen işlem sırası parantez kullanılarak değiştirilebilir. Örneğin 5 * 3 + 2 işleminin sonucu işlem önceliğine göre hesap yapıldığında 17 olarak hesaplanacaktır. 5 * (3 + 2) işleminde ise öncelikle parantez içindeki hesaplama yapılacaktır. Bu durumda sonuç 25 olarak hesaplanacaktır. + ve karakterleri sayıların önünde işaret belirtmek amacıyla kullanılabilirler. Ancak bu durumda eşitlikler yazılırken iki işlem operatörünün yan yana gelemeyeceği kuralı unutulmamalıdır. Örneğin 5 * - 3 işlemi hatalı bir işlemdir. Bunun yerine 5 * (- 3) yazılmalıdır. 2.8 Fonksiyonlar Fortran da yaygın olarak kullanılan fonksiyonlar Tablo 3 te verilmiştir. Tablo 4. Sık kullanılan bazı fonksiyonlar Fonksiyon ABS(X) SIN(X) COS(X) TAN(X) ASIN(X) ACOS(X) ATAN(X) MOD(X,Y) EXP(X) LOG(X) LOG10(X) MAX(X1,.,Xn) MIN(X1,..,Xn) SQRT(X) REAL(X) INT(X) FLOOR(X) NINT(X) Anlamı X'in mutlak değerini alır X in sinüsünü (X radyan) hesaplar X in kosinüsünü (X radyan) hesaplar X in tanjantını (X radyan) hesaplar Arcsin(x) i hesaplar Arccos(x) i hesaplar Arctan(x) i hesaplar X/Y işleminin kalanını hesaplar e X i hesaplar X in doğal logaritmasını hesaplar X in 10 tabanında logaritmasını hesaplar X1,,Xn sayılarının en büyüğünü bulur X1,,Xn sayılarının en küçüğünü bulur X in karekökünü hesaplar X i gerçek sayı tipine dönüştürür X in tam kısmını verir X e eşit veya küçük en büyük tamsayıyı verir X e en yakın tamsayıyı verir 28

2.9 Atama Operatörü Fortran da bir değişkenin değerini değiştirmek için = karakteri kullanılır. GUC=(DEVIR*MOMENT)/9549.0 Bu işlemde GUC değişkenine DEVIR ve MOMENT değişkenlerinin değerlerinin çarpımının 9549 a bölünmesiyle bulunan sonuç atanmaktadır. Fortran da kullanılan eşittir karakteri matematikte kullanılan eşitlik ile karıştırılmamalıdır. Matematikte; A = A + 5 Şeklinde bir eşitlik söz konusu değildir. Fortran da böyle bir eşitliğin anlamı A değişkeninin değerinin 5 arttırılmasıdır. 2.10 Örnek Eşitlikler Aşağıda örnek eşitliklerin Fortran yazım kurallarına göre yazılmış hali yer almaktadır. c = a 2 + b 2 C = SQRT(A**2+B**2) D = B 2 4AC D = B**2 4*A*C A = B A = ABS(B) I = E R 2 +(2πfL 1 2πfC )2 I = E/SQRT(R**2+(2*3.14*F*L 1/(2*3.14*F*C))**2) F x 3 2 x 1 2 G cos t cost sin t 29

Z 2 2 b a b sin 2 1 a 2 2 a b a b 2 2 1 1 1 x 8 16 8 2 2 1 F ln x 2 ln( x 4) tan ( ) C 2x 1 x F e 1 cos ( e ) C 30

3 Fortran PowerStation 4.0 Şekil 3. Fortran PowerStation 4.0 Fortran PowerStation 4.0 ı başlatmak için başlat menüsünde programlar Programlar altında Fortran PowerStation 4.0 program grubunun içerisindeki Microsoft Developer Studio programı çalıştırılır. Programın çalışma ekranı Şekil 1 de görülmektedir. Yeni bir proje oluşturmak için File menüsünden New komutu seçilebilir veya CTRL + N kısayolu kullanılabilir. Bu işlemi yaptığımızda karşımıza Şekil 2 de görülen pencere gelecektir. 31

Şekil 4. Yeni menüsü Bu pencereden Project Workspace seçilerek OK butonuna basılır. Bu işlemden sonra karşımıza Şekil 3 te görülen pencere gelecektir. Şekil 5. Yeni proje menüsü Solda tarafta yer alan Type kısmından Console Application seçeneği seçildikten sonra Name kısmına projenin ismi, Location kısmına ise projenin kaydedileceği klasör girilmelidir (farklı bir klasöre kaydetmek için Browse tuşu kullanılmalıdır). Proje oluşturulduktan sonra projeye boş bir dosya eklemek için File New veya CTRL + N kısayolu ile açılan pencereden (Şekil 2) Text File seçilmelidir. Bu işlemi kısa yoldan yapmak için araç çubuğundaki simgeli butona tıklanmalıdır. 32

Bu işlemden sonra File Save As komutuyla (kısayolu F12) projeye eklenen boş dosya kaydedilir. Farklı kaydet komutu verildiğinde karşımıza Şekil 4 te görülen pencere çıkacaktır. File Name kısmına dosyanın adı ve uzantısı yazılır. Eğer bu kısımda dosya f90 uzantısıyla kaydedilirse dosya Fortran 90 yazım formatında görüntülenir. Eğer for uzantısıyla kaydedilirse Fortran 77 yazım formatında görüntülenir. Bu derste programlar Fortran 77 formatına göre yazılacaktır. Bu nedenle dosyalar for uzantılı olarak kaydedilecektir. Dosya ismi olarak yazılan programla ilişkili bir isim verilmesinde fayda vardır. Örneğin sıcaklıkla ilgili hesaplama yaptıracağımız bir programı temp.for olarak kaydedebiliriz. Dosyayı for uzantısıyla kaydettiğimizde karşımıza 6. sütununda yeşil çizgi olan bir dosya çıkacaktır. Bu aşamadan sonra programımızı yazmaya başlayabiliriz. Şekil 6. Farklı kaydet menüsü Program yazılıp kaydedildikten sonra üzerinde ilk defa çalıştığımız bir proje için yazılan for uzantılı program dosyasının projeyle irtibatlı hale getirilmesi gerekmektedir. Bu işlem Insert Files Into Project menüsü seçilerek yapılabilir. Bu durumda karşımıza Şekil 5 te görülen pencere gelecektir. Bu pencereden proje klasörü içerisinde kayıtlı dosyalardan hangisi projeyle ilişkilendirilmek isteniyorsa sol tarafta bulunan dosyalardan seçilmeli ve OK butonuna basılmalıdır. 33

Şekil 7. Program dosyalarının projeye eklenmesi Programın çalıştırılması için Build menüsü kullanılır. Build menüsü Şekil 6 da görülmektedir. Şekil 8. Build menüsü Program dosyasının projeyle ilişkilendirilmesinden sonra programın çalıştırılması için Build menüsünden önce Compile komutu verilmelidir. Verilen bu komut sayesinde yazılan program hata denetimi yapılarak eğer hata yoksa derlenecektir. Eğer programda hatalar varsa ana pencerenin (Şekil 1) alt kısmında bu hatalar listelenecektir. Eğer hata yoksa bu kısımda hata bulunmadığına dair bir mesaj yer alacaktır. Sonraki aşamada Build menüsünden Build komutu verilir. Son olarak exe ye dönüştürülen program Build menüsünden Execute komutu verilerek çalıştırılır. 34

3.1 Fortran Programlarının Temel Yapısı ve Yazım Kuralları Programlama dilleri yazım formatlarına göre serbest formlu olanlar ve serbest formlu olmayanlar olarak iki sınıfa ayrılabilir. Serbest formlu dillerde ifadelerin bir satırın hangi sütunundan başladığının bir önemi yoktur. Serbest form olmayan dillerde ise sütunların kullanım alanları farklı olabilir. F77 serbest formlu olmayan bir yazım kurallarına sahiptir. Fortran 90 ise serbest formlu bir programlama dilidir. Fortran 77 yazım formatı şu şekilde özetlenebilir; - 1. Sütun boş bırakılabilir, ilgili satırda açıklama yazılacaksa! (ünlem), * (yıldız) veya c karakterlerinden biri yazılmalıdır. Özellikle büyük programlarda açıklama eklemek programın ileride tekrar çalışılması durumunda programın anlaşılmasını kolaylaştıracaktır - İhtiyaç duyuluyorsa etiketler (10, 20 gibi) 1-5. sütunlara yazılmalıdır. - Eğer yazılan ifade bir satıra sığmıyorsa bir sonraki satırın 6. sütununa * veya + işareti konularak ifadenin yazılmasına alt satırdan devam edilebilir. - İfadeler 7-72. sütunlara yazılmalıdır. Fortran programlarının ilk satırı PROGRAM kelimesi ile başlar. PROGRAM kelimesi tek başına kullanılabileceği gibi bu kelimenin yanında programın ismini belirten bir başlık kullanılabilir. PROGRAM GUC_HESABI Program başlığını belirten satırdan sonra eğer IMPLICIT yapı kullanılmayacaksa IMPLICIT NONE ifadesi yer alır. Bu durumda değişkenler hemen bu satırın altından itibaren tanımlanmalıdır. REAL::KUTLE=2.55 IMPLICIT yapı kullanılacak fakat yine de bazı değişkenler bu yapının dışında tanımlanacaksa bu durumda da tanımlanacak değişkenler program başlığından hemen sonra 35

tanımlanmalıdır. Eğer IMPLICIT yapı kullanılacaksa daha öncede açıklandığı gibi değişkenlerin ayrıca tanımlanmasına gerek yoktur. Değişkenlerin tanımlanmasından sonra işlem satırları yazılır. Son olarak program END PROGRAM ifadesiyle bitirilir. Bu satırda sadece END, END PROGRAM veya END PROGRAM + başlık yazılır. END END PROGRAM END PROGRAM GUC_HESABI Fortran 77/90 öncesi versiyonlarda program STOP END Şeklinde bitirilirdi. Bu Fortran 77/90 dan sonra bu iki komut yerine END kullanılmaktadır. Eğer program akışın herhangi bir yerinde bir şarta/duruma bağlı olarak sonlandırılmak isteniyorsa STOP komutu kullanılabilir. 36

4 Fortran da Temel Giriş/Çıkış Komutları Fortran da kullanılan giriş çıkış komutları PRINT, WRITE ve READ dir. PRINT komutu belli bir ifadeyi veya değişkenlerin değerini ekrana yazdırmayı sağlar. WRITE komutu PRINT komutu gibi yazdırma işlemi yapan bir komuttur. Burada sözünü ettiğimiz yazdırma işlemi belli bir metnin veya değişkenlerin değerinin herhangi bir ortama yazdırılmasıdır. Bu ortam ekran, yazıcı olabileceği gibi herhangi bir dosya da olabilir. READ komutu ise WRITE komutunun yaptığı işlemin tam tersini yapar. Yani bu komut sayesinde programımıza veri girilmesini sağlayabiliriz. Bu veriler klavyeden girilebileceği gibi bilgisayarın herhangi bir yerinde kayıtlı olan bir dosyadan da girilebilir. PRINT, WRITE ve READ komutlarının kullanımına dair örnekler aşağıdadır. PRINT*, ENF-108! Ekrana ENF-108 yazdıran komut PRINT*,X,Y! Ekrana X ve Y değişkenlerinin değerlerini yazdıran komut PRINT*, ISLEMIN SONUCU, X WRITE(*,*) ENF-108! Ekrana ENF-108 yazdıran komut PRINT* komutuyla aynıdır WRITE(*,*)S1,S2! S1 ve S2 değişkenlerinin değerlerini ekrana yazdıran komut WRITE(*,*) SONUC=,X WRITE(10,*)S1,S2,S3! S1, S2 ve S3 değişkenlerinin değerlerini 10 birim numaralı! dosyaya yaz WRITE(*,50)X,Y! Ekrana X, Y değişkenlerinin değerlerini 50 numaralı format! yapısını kullanarak yaz WRITE(20,40)A,B! 20 birim numaralı dosyaya A, B değişkenlerinin değerini 40! numaralı format yapısını kullanarak yaz 37

READ*,A,B,C! A, B, C değişkenleri için klavyeden veri oku READ(*,*)A,B,C READ(20,*)X,Y! 20 birim numaralı dosyadan X ve Y değerlerini oku READ(*,15)X,Y! 15 numaralı formata göre klavyeden X ve Y değerlerini oku READ(80,90)S1,S2 4.1 Örnek Programlar 1. Klavyeden girilen iki gerçek sayının toplamını hesaplayıp sonucunu ekrana yazdıran bir programa ait akış şeması ve Fortran kodları aşağıda verilmiştir. Başla PROGRAM TOPLAM X, Y READ*,X,Y S = X + Y S=X+Y Sonuç = S PRINT*, TOPLAM=,S Son END PROGRAM TOPLAM 2. Klavyeden girilen üç sayının ortalamasını hesaplayan programa ait akış şeması ve kodlar aşağıda verilmiştir. 38

Başla X, Y, Z S = (X + Y + Z) / 3 Sonuç = S Son 3. Kenar uzunlukları girilen bir dik üçgenin hipotenüsünü hesaplayan programın akış şemasını çizerek kodlarını yazınız. 4. Yarıçapı girilen bir dairenin çevresini ve alanını hesaplayan programın akış şemasını çizerek kodlarını yazınız. 5. Girilen bir açının sinüs ve kosinüs değerlerini hesaplayan programın akış şemasını çizerek kodlarını yazınız 6. Klavyeden girilen devir ve moment değerine göre bir motorun gücünü hesaplayan programın akış şemasını çizerek kodlarını yazınız. NOT: Bu bölümde incelene programlar sıralı akışa sahip programlardır. 4.2 Fortran da Şartlı Akış Program Yapısı Şartlı akış daha önce de açıklandığı gibi programın belli bir yerinde bir sorguya bağlı olarak akışın yön değiştirdiği program türüdür. Fortran da kullanılan karşılaştırma operatörleri Tablo 1 de verilmiştir. 39

Tablo 5. Fortran karşılaştırma operatörleri <.LT. Küçük >.GT. Büyük ==.EQ. Eşit <=.LE. Küçük eşit >=.GE. Büyük eşit /=.NE. Eşit değil 4.2.1 IF Yapısı IF yapısı programın belli bir noktasında karar vermek, akışın yönünü değiştirmek için kullanılır. Örneğin bir öğrencinin ortalamasına göre başarılı olup olmadığı IF yapısı kullanılarak ekrana yazdırılabilir. Fortran da IF yapısının farklı kullanım biçimleri vardır. Bu yapılar aşağıda örneklerle açıklanmıştır. 1. Birinci IF yapısında eğer şart sağlanıyorsa devamındaki işlem yapılır ve bir alt satıra geçilir. Şart sağlanmıyorsa program bir alt satırdan işleyişine devam eder. IF(X>50)PRINT*, SAYI 50 DEN BUYUKTUR 2. IF yapısının diğer bir kullanım şeklinde ise şart sağlanıyorsa bir veya birden fazla işlem yaptırılabilir. Birinci maddede açıklanan IF yapısında şart sağlandığında sadece bir işlem yapılıyordu, bu yapıda ise birden fazla işlem yaptırılabilir. IF(X>50)THEN PRINT*, SAYI 50 DEN BUYUKTUR END IF 3. İlk iki maddede açıklanan IF yapılarında belirtilen şartın sağlanması durumunda belli işlemler yapılmaktadır. Her ikisinde de şart sağlanmadığında program sonraki satırlardan devam etmektedir. Bir diğer IF yapısında ise şartın gerçekleşmemesine bağlı yapılacak işlemler yazılabilmektedir. 40

IF(X>50)THEN PRINT*, SAYI 50 DEN BUYUKTUR ELSE PRINT*, SAYI 50 DEN BUYUK DEGILDIR END IF 4. Diğer bir yapı ise aritmetik IF yapısıdır. Aritmetik IF yapısında sorgulanan değişkenin sıfırdan küçük olması, sıfıra eşit olması veya sıfırdan büyük olması durumuna göre programın akışı belirtilen etiketten devam etmektedir. IF(X)10,20,30 Bu örnekte X in 0 dan küçük olması durumunda program etiketi 10 olan satırdan, 0 a eşit olması halinde 20 etiketli satırdan, 0 dan büyük olması halinde ise etiketi 30 olan satırdan devam edecektir. IF(X-20)10,20,30 Benzer şekilde bir değişkenin belli bir sayıya göre karşılaştırması örnekte görüldüğü gibi yapılabilir. Bu örnekte X değişkeninin 20 den küçük, 20 ye eşit veya 20 den büyük olmasına göre program belirtilen etiketlerden birinden devam edecektir. 5. İç içe IF yapısı. İç içe IF yapısında birbirine bağlı bir şekilde sorgulamalar yapılabilir. IF (logical-expression-1) THEN statements-1 ELSE IF (logical-expression-2) THEN statements-2 ELSE IF (logical-expression-3) THEN statement-3 ELSE IF (...) THEN... ELSE statements-else 41

END IF IF (x > 0) THEN WRITE(*,*) '+' ELSE IF (x == 0) THEN WRITE(*,*) '0' ELSE WRITE(*,*) '-' END IF IF (x < 0) THEN WRITE(*,*) -x ELSE IF (x <= 1) THEN WRITE(*,*) x*x ELSE WRITE(*,*) 2*x END IF INTEGER :: x CHARACTER(LEN=1) :: Grade IF (x < 50) THEN Grade = 'F' ELSE IF (x < 60) THEN Grade = 'D' ELSE IF (x < 70) THEN Grade = 'C' ELSE IF (x < 80) THEN Grade = 'B' ELSE Grade = 'A' END IF 4.2.2 Örnek Programlar 1. Klavyeden 0 girilene dek girilen sayıların (girilen sayı adedi değişken) ortalamasını hesaplayan programın akış şemasını çizerek Fortran kodlarını yazınız. 2. Klavyeden girilen vize ve final notuna göre ortalamayı hesaplayıp, başarı durumunu ortalama 50 ve üzeri ise geçti, 50 nin altındaysa kaldı şeklinde ekrana yazdıran programın akış şeması ve kodları aşağıda verilmiştir. 42

Başla Vize, Final Ort = (Vize+Final)/ 2 E Ort < 50? H Ort, Kaldı Kaldı Son PROGRAM BASARI_NOTU REAL::VIZE,FINAL,ORTALAMA PRINT*, VIZE VE FINAL NOTLARINIZI GIRINIZ READ*,VIZE,FINAL ORTALAMA=(VIZE+FINAL)/2.0 IF(ORTALAMA<50)THEN PRINT*,ORTALAMA, KALDI ELSE PRINT*,ORTALAMA, GECTI END IF END PROGRAM BASARI_NOTU 2. Klavyeden girilen bir tam sayının tek veya çift olduğunu ekrana yazdıran program akış şeması ve kodları aşağıdadır. 43

Başla X E (-1) X > 0? H Girilen sayı çifttir Girilen sayı tektir Son PROGRAM TEK_CIFT INTEGER::X PRINT*,"BIR TAM SAYI GIRINIZ" READ*,X IF((-1)**X>0)THEN PRINT*,"SAYI CIFTTIR" ELSE PRINT*,"SAYI TEKTIR" END IF END PROGRAM TEK_CIFT 44

5 Mantıksal İfadelerin Birleştirilmesi Yukarıda Fortran da kullanılan şartlı akış deyimleri (IF yapısı) açıklanmıştı. Bazı programlarda bir işlemin birden fazla şartın gerçekleşip gerçekleşmeme durumuna göre yapılması söz konusudur. Örneğin klavyeden girilen vize ve final notlarına göre ortalamayı hesaplayıp başarı durumunu geçti kaldı şeklinde ekrana yazdıran bir program düşünelim. Böyle bir programda başarı durumunu belirlemek için ortalamanın belli bir sayıyla karşılaştırılması gerekir. Örneğin ortalama 50 nin altında ise ekrana kaldı, 50 ve üstü bir değer ise geçti yazdırılabilir. Bu örnekte kullanılması gereken IF yapısında tek bir şart vardır. Aynı programda geçme şartı olarak ortalamanın en az 50 olmasının yanı sıra vizeden de en az 25 alınması gerektiği şartının bulunduğunu düşünelim. Bu durumda girilen notlara göre öğrencinin başarılı sayılabilmesi için iki şartın da yerine getirilmesi gerekmektedir. Söz konusu problemin çözümü için iç içe IF yapısı kullanılabilir. Ancak böyle bir yapıda programın yazılması zorlaştığı gibi hata yapma riski de artacaktır. Çözüm olarak bahsedilen iki şartın aynı anda gerçekleştirilmesini sağlayan bir ifade kullanılmalıdır. Fortran da mantıksal ifadelerin birleştirilmesinde kullanılan operatörler Tablo 2 de verilmiştir. Tablo 6. Fortran da kullanılan birleştirme operatörleri Operatör.AND..OR..EQV..NEQV..NOT. Anlamı Ve Veya Eşdeğerlik Eşdeğersizlik Değil Tablo 7. Birleştirme operatörlerinin doğruluk tablosu A B A.AND.B A.OR.B A.EQV.B A.NEQV.B.NOT.A 0 0 0 0 1 0 1 0 1 0 1 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 0 45

5.1 Örnek Programlar 1. Vize ve final notu girilen bir öğrencinin ortalamasını vize*0,5+final*0,5 eşitliğiyle hesaplayan, vize notu en az 25 ve hesaplanan ortalama en az 50 olması halinde ekrana başarılı aksi taktirde başarısız yazdıran programın akış şemasını çizerek Fortran kodlarını yazınız. Başla Vize, Final Ort=Vize*0.5+ Final*0.5 E Ort > 49 ve Vize >24? H Ort, Başarılı Ort, Başarısız Son PROGRAM BASARI_DURUMU REAL::VIZE,FINAL,ORTALAMA PRINT*, VIZE VE FINAL NOTLARINI GIRINIZ READ*,VIZE,FINAL ORTALAMA=(VIZE+FINAL)/2.0 IF(VIZE>24).AND.(ORTALAMA>49) THEN PRINT*, ORTALAMA=,ORTALAMA, BASARILI ELSE PRINT*, ORTALAMA=,ORTALAMA, BASARISIZ END IF END PROGRAM BASARI_DURUMU 46

2. Klavyeden girilen iki sayı için (X, Y) Z fonksiyonunu aşağıdaki kurallara göre hesaplayan programı yazınız. Z=X+Y X>0 ve Y>0 için Z=X.Y X<0, Y>0 veya X>0, Y<0 için Z= X +1/ Y X<0 ve Y<0 için 5.2 SELECT CASE Komutu Bir değişkenin alabileceği durumlara göre değerlendirme yapılmasını sağlar. Tamsayı, karakter ve mantıksal değişken tiplerinde kullanılabilir, gerçek sayı ve karmaşık sayı tiplerinde kullanılamaz. SELECT CASE komutunun kullanımı hakkında bilgi edinmek için aşağıdaki örnekleri inceleyiniz. 5.2.1 Örnek Programlar 1. Klavyeden girilen 0 ile 9 arasındaki rakamların metin şeklinde ekrana yazdırılmasını sağlayan Fortran programını yazınız. PROGRAM RAKAMLAR PRINT*, LUTFEN BIR RAKAM GIRINIZ READ*,K SELECT CASE (K) CASE(0) PRINT*, SIFIR CASE(1) PRINT*, BIR CASE(2) PRINT*, IKI CASE(3) 47

PRINT*, UC CASE(4) PRINT*, DORT CASE(5) PRINT*, BES CASE(6) PRINT*, ALTI CASE(7) PRINT*, YEDI CASE(8) PRINT*, SEKIZ CASE(9) PRINT*, DOKUZ CASE DEFAULT PRINT*, HATALI GIRIS YAPTINIZ END SELECT END PROGRAM RAKAMLAR SELECT CASE komutunun kullanımında öncelikle durumu değerlendirilecek değişken komutun yanında parantez içerisinde yazılır. Alt satıra inilerek CASE ifadesinin yanında parantez içerisinde alacağı değer yazılır. Örnekte CASE (0) ifadesi K değişkeninin değeri 0 ise anlamına gelmektedir. Bu satırın hemen altında söz konusu durumda yapılacak işlemler yazılır. Sonraki aşamada K nın alacağı diğer değerler de aynı şekilde sıralanır. K nın kaç değişik durumu söz konusuysa hepsi yazılabilir. Burada bir sınırlama yoktur. SELECT CASE yapısı içindeki DEFAULT ifadesi K değişkeninin belirtilen durumlardan herhangi birine uymadığında yapılacak işlemlerin yazılmasını sağlar. Son olarak SELECT CASE sorgusu END SELECT ifadesiyle sonlandırılır. 2. Klavyeden girilen yaş değerine göre çocuk, genç, yetişkin, yaşlı şeklinde sınıflandırma yapan Fortran programını yazınız. PROGRAM OMUR PRINT*, LUTFEN YASINIZI GIRINIZ 48

READ*,K SELECT CASE(K) CASE(0:14) PRINT*, COCUK CASE(15:35) PRINT*, GENC CASE(36:60) PRINT*, YETISKIN CASE(61:100) PRINT*, IHTIYAR CASE DEFAULT PRINT*, LUTFEN GECERLI BIR SAYI GIRIN END SELECT END PROGRAM OMUR 3. Kenar uzunlukları girilen bir üçgenin dik üçgen olup olmadığını ekrana yazdıran programın akış şemasını çizerek Fortran kodlarını yazınız. 49

6 Fortran da Tekrarlı Akış Program Yapısı Tekrarlı akışa sahip programlarda, programın bazı bölümleri veya tamamını birden fazla kez çalıştırılır. Tekrarlı çalışmaya aynı zamanda döngü denir. Fortran da farklı şekillerde döngü yapıları kullanılmaktadır. 6.1 Sayaç Kontrollü DO Döngüsü Sayaç kontrollü DO döngüsünde komutlar belli sayıda çalıştırılır. Sayaç kontrollü DO döngüsünün yapısı aşağıdaki örnekler yardımıyla açıklanacaktır. 1. Ekrana 15 defa merhaba yazdıran programın kodları aşağıda görülmektedir. PROGRAM DONGU DO I=1,15 PRINT*, MERHABA END DO END PROGRAM DONGU PROGRAM DONGU DO I=1,15 PRINT*,I, MERHABA END DO END PROGRAM DONGU Sayaç kontrollü DO döngüsünde bir sayaç değişkenine ihtiyaç vardır. Burada kullanılan sayaç değişkeni tam sayı tipinde olmalıdır. Döngünün başlangıç satırı DO I=1,15 ifadesidir. Burada sayaç değişkeni I olarak belirlenmiştir. I=1,15 ifadesi I değişkeninin 1 den başlayarak 15 e kadar değer alacağını belirtir. Değişken her bir değeri alışında DO ve END DO arasındaki komutlar gerçekleştirilir. Örnek programda ekrana 15 defa MERHABA yazdırılmaktadır. 50

2. 1 den girilen sayıya kadar sayıların karelerini hesaplayan bir programa ait Fortran kodları aşağıda görülmektedir. PROGRAM KARELER DO I=1,15 PRINT*,I, KARESI=, I**2 END PROGRAM KARELER PROGRAM KARELER2 PRINT*, LUTFEN BIR TAMSAYI GIRINIZ READ*,K DO I=1,K PRINT*,I, KARESI=,I**2 END DO END PROGRAM KARELER2 Benzer şekilde ikinci örnekteki programlarda da döngü değişkeni I olarak belirlenmiştir. KARELER isimli programda birinci örnekteki uygulamadan farklı olarak döngü değişkeni işlemlerde kullanılmıştır. KARELER2 isimli programda ise döngü değişkeninin son değeri olarak kullanıcı tarafından klavyeden değeri girilen K değişkeni kullanılmıştır. Döngünün ilk ve son değerleri sabit birer sayı olabileceği gibi, her ikisi veya sadece bir tanesi tamsayı tipinde bir değişken olarak ta kullanılabilir. 6.2 İç İçe Döngüler İç içe döngü kullanımının yer aldığı aşağıdaki örneği inceleyiniz. PROGRAM ICICE PRINT*, IKI TAM SAYI GIRINIZ READ*,K,L DO I=1,K DO J=1,L PRINT*,I, x,j, =,I*J 51

END DO END DO END PROGRAM DONGU Bu örnekte öncelikle kullanıcı tarafından iki tamsayı girilmesi (K, L) isteniyor. Sonraki aşamada birinci döngüde I değişkeni 1 den K ya değerler alacak şekilde başlatılıyor. Bu satırın hemen altında ise başka bir döngüde J değişkeni 1 den L ye değerler alacak şekilde başlatılıyor. İkinci döngünün içinde ise bir işlem satırı yer almaktadır. İşlem satırından sonra içteki döngünün sonlandırma komutu ve hemen sonra dıştaki döngünün sonlandırma satırı yer almaktadır. Programın çalışması sırasında I değişkeni ile kurulan döngü ilk değerini aldıktan sonra J değişkeni ile kurulan içteki döngü 1 den L ye kadar çalıştırılır. Daha sonra dış döngü ikinci değerini alır ve içteki döngü bir kez daha baştan sona kadar çalıştırılır. Bu işlem dıştaki döngünün tamamlanmasına kadar devam eder. Yani iç döngü dış döngü kadar tekrarlanır. Bu durumda işlem satırı toplam KxL kadar çalıştırılmış olur. İç içe kullanılan döngü sayısı 3 olsaydı ve her bir döngünün tekrarlanma sayısı 10 olsaydı bu durumda iç döngüde tekrarlanan işlem sayısı 10x10x10=1000 olurdu. 6.3 Döngü Değişkenini Artış Miktarı Sayaç kontrollü döngülerde döngü değişkeninin artış miktarı tanımlanmazsa 1 kabul edilir. Eğer istenirse döngü değişkeni farklı adımlarla arttırılabilir. Aşağıdaki örneği inceleyiniz. PROGRAM FARKLI_ADIM PRINT*, LUTFEN BIR TAM SAYI GIRINIZ READ*,K DO I=1,K,3 PRINT*,K END PROGRAM FARKLI_ADIM Bu örnekte diğer döngünün başlangıç satırında farklılık olduğu görülüyor. DO I=1,K,3 satırında üçüncü bir parametrenin yer aldığı görülmektedir. Son yazılan sayı döngü değişkenin artış değerini belirler. Yani bu döngü çalıştırıldığında I değişkeni 1,4,7, şeklinde 52

değerler alır. Böyle bir uygulamada akıllara gelebilecek soru döngünün son değerinin (K) elde edilememesidir. Örneğin incelediğimiz programda K değişkeninin değeri 9 girilmiş olsun. Bu durumda I değişkeninin alacağı değerler 1,4 ve 7 olacaktır. Çünkü bir sonraki değer (10) döngünün son değerini aşmaktadır. 6.4 Ters Çalışan Döngüler Şimdiye kadar yapılan uygulamalarda döngü değişkeninin başlangıç değeri son değerinden küçüktü, yani değişkenin değeri sürekli artmaktaydı. Bu uygulamanın tam tersinin yapılması da mümkündür. Örnek programı inceleyiniz. PROGRAM TERS_DONGU PRINT*, LUTFEN BIR TAM SAYI GIRINIZ READ*,K DO I=K,1,-1 PRINT*, OTOMOTIV END DO END PROGRAM TERS_DONGU Ters döngü kurulduğunda adım değerinin mutlaka belirtilmesi gerekmektedir. 6.5 Genel DO Döngüsü Genel DO döngüsünün sayaç kontrollü DO döngüsünden farklı döngünün kaç kere tekrarlanacağının belli olmamasıdır. Genel DO döngüsünde döngü belli bir şartın gerçekleşmesine bağlı olarak sonlandırılır. Bu durumda döngünün sonlandırılmasında IF yapısı kullanılmalıdır. Döngünün sonlandırılması için kullanılan komut ise EXIT komutudur. Örnek programı inceleyiniz. PROGRAM GENEL_DO PRINT*, LUTFEN BIR TAM SAYI GIRINIZ READ*,K DO I=I+1 53

PRINT*,I, FORTRAN IF(I==K)EXIT END DO END PROGRAM GENEL_DO Genel DO döngüsünde döngünün başlangıç satırında tek başına DO komutu yer alır. Sayaç kontrollü DO döngüsünde ilk satır DO I=1,K şeklindeydi. DO satırından sonra işlem satırları yer alır ve END DO satırıyla genel DO döngüsü sonlandırılır. Döngünün sonlandırılmasını sağlayan satır ise IF(I==K)EXIT satırıdır. I değişkeninin değeri K ya eşit olduğunda döngü sona erecektir. Örnekte I değişkeninin değeri döngünün her çalışmasında 1 arttırılmaktadır. Bu örnek yukarıda sayaç kontrollü DO döngülerinin genel DO döngüsü şeklinde yazılmış halidir. Aşağıda kullanıcının isteğine göre sonlandırılabilen bir program yer almaktadır. PROGRAM ISTEGE_BAGLI CHARACTER(1)::CEVAP DO PRINT*, LUTFEN BIR TAM SAYI GIRINIZ READ*,K I=0 DO I=I+1 PRINT*,I, FORTRAN IF(I==K)EXIT END DO PRINT*, DEVAM ETMEK ISTIYOR MUSUN? READ*,CEVAP IF(CEVAP== H )EXIT END DO END PROGRAM ISTEGE_BAGLI 54

Dış döngü programın kullanıcı tarafından istenildiğinde sonlandırılması amacıyla eklenmiştir. Kullanıcı devam etmek istiyor musun? sorusuna H cevabını vermediği sürece program çalışmaya devam edecektir. 6.6 DO-WHILE Döngüsü Belli bir şarta bağlı olarak döngünün devam ettirilmesi isteniyorsa bu durumda DO WHILE döngüsü kullanılır. Bu döngü yapısının kullanımını örnek program üzerinden inceleyiniz. PROGRAM DOWHILEORNEK PRINT*, LUTFEN BIR SAYI GIRINIZ READ*,K DO WHILE (K>0) PRINT*,K K=K-1 END DO END PROGRAM 6.7 CYCLE Komutu Bazı özel durumlarda döngünün bir sonraki aşamaya geçmesi istenebilir. Bu durumda CYCLE komutu kullanılır. Döngü içinde CYCLE komutu ile karşılaşıldığında döngünün o adımı tamamlanmadan bir sonraki adımına geçilir. Örnek programı inceleyiniz. PROGRAM CYCLE_ORNEK PRINT*, LUTFEN BIR TAM SAYI GIRINIZ READ*,K DO I=I+1 IF(I==5)CYCLE PRINT*,I, OTOMOTIV IF(I==K)EXIT END DO END PROGRAM CYCLE_ORNEK 55

Örnek programdaki döngüde I değişkeninin değeri 5 e eşit olduğunda döngünün bir sonraki adıma geçmesi sağlanmaktadır. 6.8 Döngülere İsim Verilmesi Fortran da döngülere isim verilebilir. Özellikle serbest formlu olmayan Fortran 77 ye göre program yazılacaksa döngülere isim verilmesi programın okunabilirliğini kolaylaştıracaktır. PROGRAM ISIMLI_DONGU PRINT*, LUTFEN BIR TAMSAYI GIRINIZ READ*,K D1:DO I=1,K PRINT*,I, OTOMOTIV END DO D1 END PROGRAM ISIMLI_DONGU 6.9 Örnek Programlar 1. Klavyeden girilen bir tam sayının faktöriyelini hesaplayan programa ait akış şemasını çizerek Fortran kodlarını yazınız. 2. Klavyeden girilen bir tam sayının asal sayı olup olmadığını belirleyen programa ait akış şemasını çizerek Fortran kodlarını yazınız. 3. e x n x denklemi yardımıyla e nin değerini hesaplayan programa ait akış şemasını n 0 n! çizerek Fortran kodlarını yazınız. 56

7 Fortran da Diziler Programlamada değişkenlerin neyi ifade ettiği ve nasıl tanımlandığı daha önce açıklanmıştı. Değişken tanımlanması aslında ana bellekte herhangi bir adresin programda yapılacak işlemler için tahsis edilmesi etiketlenmesi anlamına gelmektedir. Tanımlanan değişken yalnızca bir değer için kullanılabilmektedir. Şimdi ise aynı türden birden fazla değişkene ihtiyaç olduğunu ve bunları indeksli olarak kullanmamız gerektiğini düşünelim. İşte böyle bir ihtiyacı diziler karşılamaktadır. Örneğin HIZ isimli 10 elemanlı bir dizi tanımlandığında bu elemanların her birini HIZ(1), HIZ(2) şeklinde kullanmak mümkün olacaktır. HIZ 1 2 3 4 5 6 7 8 9 10 Fortran da diziler tanımlanırken, dizinin boyutu, eleman sayısı ve indis değerleri girilir. Fortran da en fazla 7 boyutlu dizi tanımlanabilir. 7.1 Tek Boyutlu Diziler Fortran da tek boyutlu dizilerin tanımlanması aşağıdaki örneklerde açıklanmıştır. REAL,DIMENSION(50)::SICAKLIK Bu örnekte SICAKLIK isminde 50 elemanlı gerçek sayı tipinde bir dizi tanımlanmıştır. Dizinin elemanları SICAKLIK(1), SICAKLIK(2),, SICAKLIK(50) şeklindedir. INTEGER,DIMENSION(-1:1)::ZAMAN Bir önceki örnekten farklı olarak bu örnekte (-1:1) ifadesi görülmektedir. Önceki örnekte tanımlanan SICAKLIK dizisinin elemanlarının indis değeri 1 den başlayıp 50 de bitmekteydi. 57

Bu örnekte tanımladığımız ZAMAN isimli dizi ise üç elemanlı bir dizi olup elemanlarının indisleri, -1, 0, 1 şeklindedir. Yani dizinin elemanları ZAMAN(-1), ZAMAN(0) ve ZAMAN(1) dir. Alternatif olarak dizilerin tanımlanması DIMENSION ifadesi kullanılmadan da yapılabilmektedir. REAL SICAKLIK(50) INTEGER ZAMAN(-1:1) 7.2 Çok Boyutlu Diziler Fortran da en fazla 7 boyutlu dizi tanımlanabileceğini daha önce açıklamıştık. Çok boyutlu dizilerin tanımlanması aşağıdaki örneklerde gösterilmiştir. REAL,DIMENSION(5,4)::HIZ Bu örnekte HIZ isimli 5x4 boyutlarında gerçek sayı tipinde bir dizi tanımlanmıştır. REAL,DIMENSION(1:5,3:7)::MOMENT Bu örnekte MOMENT isimli gerçek sayı tipli 5x5 boyutlarında bir dizi indis değerleri belirtilerek tanımlanmıştır. REAL AVANS(3,3,3) Bu örnekte AVANS isimli gerçek sayı tipli 3x3x3 boyutlarında bir dizi tanımlanmıştır. REAL BASINC(2:6,5:8,5:7) Bu örnekte BASINC isimli 5x4x3 boyutlarında gerçek sayı tipinde bir dizi indis belirtilerek tanımlanmıştır. 58

7.3 Dinamik Diziler Yukarıdaki örneklerde oluşturulan diziler statik dizilerdir. Yani bu diziler programın derlenmesi sırasında oluşturulurlar (compile-time arrays). Dizi eleman sayısının programın tasarımı aşamasında belli olması durumunda statik dizilerin kullanılması kod yazımı sırasında kolaylıklar sağlamaktadır. Ancak bazı programlarda kullanılacak dizilerin elaman sayısı programın işleyişine göre değişiklik gösterebilmektedir. Bu nedenle böyle programlarda dizilerin ihtiyaç duyulduğu anda tanımlanması gerekmektedir (run-time arrays). Programın çalışması sırasında oluşturulan dizilere dinamik diziler denilmektedir. Dinamik dizilerin kullanımını aşağıdaki örnek üzerinde inceleyiniz. PROGRAM DINAMIK REAL,DIMENSION(:),ALLOCATABLE::A PRINT*, LUTFEN ELEMAN SAYISINI GIRINIZ READ*,K ALLOCATE(A(K),STAT=J) IF(J/=0)STOP DIZININ OLUSTURULMASI SIRASINDA HATA MEYDANA GELDI DO I=1,K A(I)=I**2 END DO PRINT*,A DEALLOCATE(A) END PROGRAM DINAMIK Programda A isimli tek boyutlu bir dinamik dizi kullanılacağı REAL,DIMENSION(:),ALLOCATABLE::A satırıyla belirtiliyor. Eğer iki boyutlu dinamik bir dizi oluşturulmak isteniyorsa bu durumda (:) ifadesi yerine (:,:) ifadesi yazılmalıdır. Programın çalışması sırasında kullanıcı tarafından girilen eleman sayısına göre dizi oluşturuluyor. Bu işlem ALLOCATE(A(K),STAT=J) satırıyla gerçekleştiriliyor. Bu satır içerisinde yer alan STAT=J ifadesi dizinin oluşturulması sırasında meydana gelebilecek hataların takibi 59

amacıyladır. Burada STAT= ifadesinin yanına bir tam sayı değişken yazılmalıdır. Eğer J değişkeni 0 ise dizi sorunsuz bir şekilde oluşturulmuştur. Eğer 0 dan farklı ise dizi bellek yetersizliği vb. bir hata nedeniyle oluşturulamamış anlamına gelmektedir. Programın çalışması sırasında oluşturulan dizi istenildiği bir anda yok edilebilir. Bu işlem DEALLOCATE(A) komutuyla gerçekleştirilmiştir. 7.4 Diziler Üzerinde İşlemler 10 elemanlı tek boyutlu bir A dizisi oluşturulduğunu düşünelim. Dizinin elemanlarına 2 den başlayarak ardışık sayılar vermek istediğimizde bu işlemi aşağıdaki şekilde yapmamız mümkündür. A=(/2,4,6,8,10,12,14,16,18,20/) Aynı işlemi örtülü DO döngüsü ile yapmak ta mümkündür. A=(/(2*J, J=1,10)/) A=(/2,4,(K, K= 6,18,2),20/) 7.5 Örnek Uygulamalar E R. 1. DC bir devrede bulunan bir bobinde akım değişimi.(1 t L i e ) eşitliği yardımıyla R hesaplanmaktadır. Bu eşitlik yardımıyla bobinden geçen akımın 0-350 ms arasında hesaplayarak akım isimli dizinin elemanlarına yerleştiriniz. 2. Tek silindirli bir motor için klavyeden girilen sıkıştırma oranı (SO), silindir hacmi (VS) ve silindir çapına (D) göre krank açısının değişimine bağlı olarak hacim değişimini hesaplayarak sonucunu bir diziye kaydediniz. (Ss: Silindir alanı, Vy: Yanma odası hacmi, Vk: Kurs hacmi, l: Kurs boyu, r: Krank yarıçapı, x: Biyel uzunluğu, Vt: Toplam hacim, : Krank açısı) 60

2 2 c r b 2 2 a x c a b c x r 2 D Vt Vy..( x r a b) 4 PI=4.0*ATAN(1.0) veya PI=ACOS(-1.0) Vs SO Vy Vs Vy SO Vs Vy Vk Vk Vs Vy Vk l Ss 2 D Ss. 4 r l 2 r 1 1 1, veya x 3 4 5 b r.cos( ) 61

8 Fortran da Dosya Giriş/Çıkış İşlemleri Fortran da dosya giriş/çıkış işlemleri için öncelikle dosyanın OPEN komutu ile oluşturulması gerekmektedir. Basit olarak OPEN komutunun kullanımı şu şekildedir: OPEN(UNIT=5,FILE= SONUC.TXT ) UNIT=5 ifadesi dosyanın kütük numarasını belirtir. Programın diğer kısımlarında belirtilen dosyayla ilgili işlemler yapılırken 5 numarası kullanılacaktır. Burada kullanılacak numara programcı tarafından belirtilir ve herhangi bir tam sayı olabilir. FILE= SONUC.TXT ifadesi ise dosyanın adını belirtir. Burada sonuc.txt isimli bir dosya oluşturulmuştur. İsim ve uzantı da kütük numarasında olduğu gibi programcının inisiyatifinde olan bir konudur. OPEN komutuyla oluşturulan dosya eğer yol belirtilmezse proje klasörü içerisinde yer alır. İstenirse dosya adı yoluyla birlikte yazılabilir. OPEN komutunun gelişmiş kullanım şekillerinden biri ise şu şekildedir: OPEN(UNIT=5,FILE= SONUC.TXT,STATUS= OLD,ACTION= WRITE,POSITION= REWIND,IOSTAT=K) STATUS= OLD ifadesi dosyanın daha önceden oluşturulmuş bir dosya olduğunu ifade eder ve yeni dosya üzerine yazılır. Eğer belirtilen dosya yoksa programda hata meydana gelir. Bu kısımda OLD, NEW, REPLACE ifadelerinden biri kullanılabilir. Dosya yeni oluşturulan bir dosya ise NEW ifadesi kullanılabilir. Mevcut bir dosya NEW komutuyla tekrar oluşturulmak istenirse programda hata oluşacaktır. REPLACE ifadesi ise dosya daha önceden oluşturulmamış ise ilk defa oluşturmayı, eski bir dosya ise yeni dosyanın üzerine yazılmasını sağlar. Üstteki örnekte olduğu STATUS ifadesi belirtilmezse varsayılan olarak bu özellik REPLACE alınır. ACTION parametresi dosyanın hangi amaçla açıldığını belirtir. ACTION parametresinin alabileceği değerler READ, WRITE, READWRITE dır. READ değeri verildiğinde dosya sadece okuma amacıyla açılır ve üzerine veri yazılmasına izin verilmez. WRITE değeri ise dosyanın sadece üzerine veri yazılması amacıyla açıldığını belirtir ve dosyadan okuma yapılamaz. READWRITE ise dosyanın hem veri okuma hem de veri yazma amacıyla açıldığını belirtir. İlk örnekte olduğu gibi ACTION parametresi girilmezse varsayılan olarak READWRITE değeri verilir. 62

POSITION parametresi ise dosya içerisinde satır işaretçisinin konumunu belirtir. REWIND, APPEND veya ASIS değerlerinden birini alır. REWIND değeri yapılan işlemlerden sonra dosyanın başına gidilmesini, APPEND sonuna gidilmesini ve ASIS ise mevcut konumunda kalmasını sağlar. POSITION parametresine APPEND değeri verilerek dosya açıldığında eğer dosya eski bir dosya ise içerisindeki veriler silinmeden yeni veriler altına eklenir. IOSTAT parametresi ise sağ tarafına tam sayı tipinde bir değişken alır. Dosya oluşturma işlemi sırasında herhangi bir hata meydana gelmezse belirlenen değişkenin değeri sıfır olur. Diğer durumlarda dosya oluşturulması sırasında hata meydana gelmiş demektir. 8.1 Örnek Uygulama PROGRAM DOSYA OPEN(UNIT=10,FILE= ABC.DAT WRITE(10,*) OTOMOTIV MUHENDISLIĞI END PROGRAM DOSYA Bu örnekte ABC.DAT isimli dosya kütük numarası 10 olarak oluşturulmuş ve içerisine OTOMOTIV MUHENDISLIGI ifadesi yazılmıştır. PROGRAM DOSYA2 CHARACTER(15)::DOSYAADI PRINT*, LUTFEN DOSYA ADINI GIRINIZ READ*,DOSYAADI OPEN(UNIT=25,FILE=DOSYAADI) WRITE(10,*) OTOMOTIV MUHENDISLIĞI END PROGRAM DOSYA2 PROGRAM INTEGRAL DOUBLE PRECISION PI REAL,DIMENSION(0:720)::SNS,ISIN,INTEG 63

CHARACTER(15)::DOSYAADI REAL,DIMENSION(5)::HIZ PI=ACOS(-1.0) PRINT*,"DOSYA ADINI GIRINIZ" READ*,DOSYAADI OPEN(UNIT=117,FILE=DOSYAADI,ACTION="WRITE",STATUS="REPLACE",POSITION="REWIND") DO I=0,720 SNS(I)=SIN(I*PI/180) END DO DO I=0,719 ISIN(I)=(SNS(I)+SNS(I+1))/2 END DO DO I=1,720 TOPLAM=0 DO J=0,I TOPLAM=TOPLAM+ISIN(J) END DO INTEG(I-1)=TOPLAM WRITE(117,*)(I-1),SNS(I-1),INTEG(I-1) END DO END PROGRAM INTEGRAL 8.2 Fortran da Formatlı Giriş/Çıkış İşlemleri Fortran da değişkenlerin değerleri ekrana veya bir dosyaya yazdırılırken (yada bir değişkene klavye veya dosyadan giriş yapılırken) verilerin formatlı bir yapıda kullanılması mümkündür. Fortran da kullanılan format belirleyicileri I, B, O, Z, F, E, A, L, T, X ve / karakterleridir. I tamsayı ifadeler için, F ve E gerçek sayı ifadeler için, A karakter ifadeler/değişkenler için, L mantıksal ifadeler için, T satır başından itibaren belli bir karakter boşluk bırakmak için, X kursörün bulunduğu yerden belli sayıda karakter boşluk bırakmak için, / satır başı yapmak için kullanılır. Format tanımlaması şu şekilde yapılır: 25 FORMAT(1X, 2I5, I7, I10) 64

Tanımlanan bu format yapısı ekrana dört adet tamsayı değişkenin yazdırılması amacıyla kullanıldığını düşünelim: WRITE(*,25)A,B,C,D Sırasıyla değişkenlerin değerleri A=3, B=0, C=5378 ve D=-12345 olsun. Bu durumda ekrana yazdırılacak ifade şu şekilde olacaktır: 3 0 5378-12345 1X ifadesi en başta 1 karakterlik bir boşluk bırakılmasını sağlar. 2I5 ifadesi 2 tam sayı değişkenin 5 karakter uzunluğunda yazılmasını sağlar. A değişkeninin değeri 3 olduğu için başına 4 boşluk eklenerek 5 karaktere tamamlanmıştır. Benzer şekilde B değişkeni de 5 karaktere tamamlanarak yazdırılmıştır. C ve D değişkenleri için ise sırasıyla 7 ve 10 karakterlik alanlar ayrılmıştır. D değişkeninin negatif değerli olması nedeniyle karakteri de ayrılan alanlara dahil edilmiştir. 40 FORMAT(1X,2I4,2F6.3,F8.3) Şeklindeki bir format yapısı, A=625, B=-19, X=7.5, Y=.182, Z=625.327, Değişkenleri için, WRITE(*,40)A,B,X,Y,Z 625-19 7.500 0.182 625.327 Şeklinde ekran çıktısı verecektir. Burada F ile belirtilen gerçek sayı format ayarıdır. F6.3 ifadesi değişkenin 6 karakter uzunluğunda yazılacağı ve virgülden sonra 3 hane yazdırılacağını ifade etmektedir. 65

9 Fortran da Rasgele Sayı Üretilmesi Bilgisayar programlarında bazen belli bir mantık içerisinde üretilmemiş rasgele sayılara ihtiyaç vardır. Bu amaçla Fortran da çeşitli alt programlar kullanılmaktadır. CALL RANDOM_SEED() Bu alt program rastgele sayı üretecinin çalıştırılmasını sağlar. Rastgele sayı üreten alt programlar bu alt program kullanılmadan çalıştırıldığında her seferinde aynı mantıkla üretilmiş aynı sonuçlar elde edilecektir. CALL RANDOM(X) Gerçek sayı tipindeki X değişkeni için 0-1 arasında rastgele bir sayı üretir. CALL RANDOM_NUMBER(Z) Benzer şekilde bu alt programda gerçek sayı tipindeki Z değişkeni için 0-1 arasında rastgele bir sayı üretir. Ayrıca burada belirtilen Z değişkeni bir dizi de olabilir. Bu durumda dizinin her bir elemanı için rastgele sayılar üretilecektir. 9.1 Örnek Uygulama 1. Sayı tahmin oyunu 2. Amiral battı oyunu 66

10 MATLAB a Giriş Matlab kelimesi Matrix Laboratory kelimelerinin kısaltılmasından türetilmiştir. Matlab ın temelleri Fortran programlama dilinde yazılmış olan LINPACK ve EISPACK kütüphanelerine dayanmaktadır. LINPACK sayısal lineer cebir çözümleri için geliştirilmiştir. EISPACK matrislerin öz değer ve öz vektörlerinin sayısal hesaplanması için geliştirilmiştir. Matlab 1970 lerin sonunda Cleve Moler tarafından Fortran da program yazma bilgisi gerekmeden LINPACK ve EISPACK kütüphanelerinin kullanılabilmesi amacıyla geliştirilmiş bir programdır. 1984 yılında program C dilinde yeniden yazılmış ve halen geliştirilmeye devam edilmektedir. MATLAB çalışma ekranında komut penceresi (command window), çalışma alanı (workspace), aktif klasör (current directory), komut geçmişi (command history) ve detaylar (details) pencereleri yer almaktadır. Komut penceresi komutların yazıldığı, işlemlerin gerçekleştirildiği kısımdır. Komut geçmişinde daha önce gerçekleştirilen işlemler yer almaktadır. Klavyeden yukarı ok tuşuna basıldıkça geçmiş komutlara ulaşmak mümkündür. Çalışma alanında oluşturulan değişkenler yer almaktadır. Bu alanda yer alan değişkenler çift tıklanarak açıldığında değişkenin içeriği görüntülenebilir, değiştirilebilir veya grafiği çizdirilebilir. Ayrıca bir değişkenin ismini değiştirmek veya tümden silme işlemleri de bu pencereden gerçekleştirilebilir. 67

10.1 Matlab da Temel İşlemler Matlab programını en basit haliyle gelişmiş bir hesap makinesi gibi kullanmak mümkündür. Komut satırında istenilen bütün hesaplamalar gerçekleştirilebilir. Komut satırı önünde >> işareti bulunan satırdır. Örnek olarak komut satırında: >> 25+12 ans = 37 yazılıp enter tuşuna basıldığında işlemin sonucu hesaplanarak ans isimli değişkene atanacaktır. Aynı işlem doğrudan bir değişkene atanarak da gerçekleştirilebilir. >> x=25+12 x = 37 Matlab da yapılan her işlemin sonunda işlemin sonucu hemen alt satırda görüntülenmektedir. Sonucun bu şekilde görüntülenmesi istenmiyorsa komut satırının sonuna ; karakteri konulmalıdır. Yukarıda yapılan işlemler neticesinde çalışma alanında (workspace) ans ve x isimli değişkenler oluşturulacaktır. Oluşturulan değişkenlerin listelenmesi amacıyla who ve whos komutları kullanılmaktadır. who komutu verildiğinde çalışma alanında yer alan değişkenlerin isimleri sıralanır. >> who Your variables are: ans x y z 68

whos komutu verildiğinde ise çalışma alanında yer alan değişkenler detaylı bir şekilde listelenecektir. >> whos Name Size Bytes Class Attributes ans 1x1 8 double x 1x1 8 double y 1x1 8 double z 1x1 8 double Çalışma alanında bulunan bir değişkenle yeni bir işlem yapıldığında değişken son yapılan işlemin sonucunu tutacaktır. Çalışma alanında bulunan bir değişkenin silinmesi için clear komutu kullanılır. Silinecek değişkenin ismi clear komutunun yanına yazılarak silinmesi sağlanır. >>clear x Eğer tüm değişkenlerin silinmesi isteniyorsa bu durumda sadece clear komutunun verilmesi yeterli olacaktır. Ayrıca Matlab programı kapatıldığında çalışma alanındaki değişkenler de silinmiş olacaktır. Eğer değişkenlerin saklanması gerekiyorsa save komutuyla kaydedilmeleri gerekir. >>save degiskenler Yapılan bu işlemle çalışma alanındaki değişkenler aktif klasör içerisine (current directory) degiskenler.mat isimli bir dosya olarak kaydedilmiştir. Kaydedilmiş olan değişkenler load komutuyla yüklenebilir. >>load degiskenler 69

Matlab da komut penceresini temizlemek için clc komutu kullanılmaktadır. Matlab ı kapatmak için bilinen Windows uygulamaları kapatma yöntemlerine ek olarak komut satırından exit komutu da verilebilir. 10.2 Skaler, Vektör, Matris Matlab da değişkenler matris yapısında tanımlanmaktadır. Yukarıdaki örneklerde oluşturulan değişkenler 1x1 lik matris şeklinde ifade edilmektedir. Bu şekilde tanımlanan değişkenlere skaler değişken adı verilir. Bir satırı veya bir sütunu ifade eden matrisler ise satır vektörü veya sütun vektörü olarak tanımlanır ve aşağıdaki örneklerde gösterildiği gibi oluşturulur. >>a=[0 1 2 8-1 3]; Bu örnekte 1x6 lık bir matris oluşturulmaktadır. Genel olarak matris oluşturma işlemlerinde köşeli parantezler kullanılmaktadır. Örnekte oluşturulan matris bir satır vektörüdür. Satır vektörü oluşturulurken köşeli parantez açılarak elemanların değerleri aralarında boşluk veya virgül karakteriyle yazılı ve parantez kapatılır. >>b=[-1;1;0;2;1;4] Sütun vektörü oluşturma işleminde elemanlar aralarında noktalı virgül karakteri kullanılarak ayrılırlar. >>c=[0 1 2 4 5;-1 0 1 4 3;1 4 0 8 1;0 1-4 2 3;1-2 3 4-5] Matris oluşturulurken matrisin elemanları satır satır yazılır ve satır aralarında ; karakteri kullanılır. Bu örnekte 5x5 lik bir matris oluşturulmaktadır. 10.3 Vektör Tanımlama Komutları Bir satır veya sütun vektörü eğer matematiksel bir ilişkiye göre oluşturulacaksa bu durumda bazı özel komutlar kullanmak kolaylık sağlayacaktır. >>x=0:0.2:50 70

Bu komut ile x vektörü 0 dan başlayarak 0.2 artışlarla 50 ye kadar elemanlardan oluşacak şekilde tanımlanmıştır. >>y=linspace(0,1000,500) Bu komut ile y vektörü 0 ile 1000 dahil eşit aralıklı 500 değerden oluşacak şekilde tanımlanmıştır. >>z=logspace(0,5,10) Bu komut ile z vektörü 10 0 dan 10 5 e 10 parçadan oluşan logaritmik bir vektör şeklinde tanımlanmıştır. Matlab da Operatörler + Toplama - Çıkarma * Matris çarpma / Matris bölme ^ Matris üs alma.* Eleman elemana çarpma./ Eleman elemana bölme.^ Eleman elemana üs alma Matlab da skaler değerlerle işlem yapılırken tabloda görülen bütün operatörler kullanılabilir. Toplama ve çıkarma işlemleri matrislerle gerçekleştirildiğinde eleman elemana yapılmaktadır. Matrislerle işlem yapılırken eğer bir matrisle skaler çarpılacaksa veya bölünecekse * /.* veya./ operatörleri kullanılabilir. İki matrisin çarpılması veya bölünmesi söz konusu ise bu durumda matris çarpma ve bölme kurallarına uyulması gerekmektedir. İki matris için eleman elemana çarpma bölme veya üs alma işlemleri de yapılabilir. Matris üs alma işlemi aynı matrisin taban kadar yan yana matris çarpımı şeklinde yapılacağından matris çarpım kurallarının sağlanması gerekmektedir. Matris İşlemleri 71

Bir matrisin transpozunun alınması için tek tırnak karakteri kullanılır. >>a=b Bu komutla a matrisine b nin transpozu atanmıştır. >>x=det(b) Bir matrisin determinantının hesaplanması için det() komutu kullanılır. >>y=inv(a) Bir matrisin tersinin bulunması için inv() komutu kullanılır. >>z=flipud(a) Bir matrisin üst satırlarıyla alt satırlarının yer değiştirilmesi için flipud() komutu kullanılır. Matrisin orta satırına göre alt üst edilmesi işlemidir. >>z=fliplr(a) Bir matrisin orta sütuna göre sağ sol sütunlarının yer değiştirilmesi için fliplr() komutu kullanılır. >>x=diag(a) Diag() komutu bir matrisin diagonal elemanlarının belirlenmesi amacıyla kullanılır. >>a=zeros(3,4) Zeros() komutu eleman değerleri 0 olan matris oluşturmak amacıyla kullanılır. >>a=ones(5,4) Ones() komutu eleman değerleri 1 olan matris oluşturmak amacıyla kullanılır. >>a=eye(4,4) 72

Eye() komutu diyagonal elemanlarının değerleri 1 olan matris (birim matris) oluşturmak amacıyla kullanılır. >>a=rand(5,4) Rand() komutu rasgele sayılardan oluşan matris oluşturmak amacıyla kullanılır. >>b=triu(a) Triu() komutu bir matrisin diyagonal ve üst elemanlarını olduğu gibi alıp diğer elemanları 0 alan (üçgen matris) bir komuttur. >>b=tril(a) Tril() komutu bir matrisin diyagonal ve al elemanlarını olduğu gibi alıp diğer elemanları 0 alan (üçgen matris) bir komuttur. Temel Bazı Matlab Komutları sign komutu işaret fonksiyonudur. >>sign(k) K matrisinin pozitif elemanları için 1 negatif elemanları için -1 ve 0 değerli elemanları için 0 değerini verir. abs komutu mutlak değer hesaplayan bir komuttur. >>abs(k) K matrisinin elemanlarının mutlak değerini hesaplar. 73

11 MATLAB da Grafik Çizimleri 11.1 Plot Komutu Matlab da iki boyutlu grafik çiziminde kullanılan komut plot komutudur. Komutun kullanımı aşağıdaki örneklerle açıklanmıştır. >>plot(y); Bu komut y vektörünün grafiğini çizdirecektir. Grafikte x ekseni y nin sahip olduğu eleman sayısına göre 1 den başlayarak değerler alır. >>plot(x,y); Bu komut y vektörünün grafiğini x vektörüne göre çizdirir. Burada önemli olan nokta her iki vektörün de aynı eleman sayısına sahip olması gerektiğidir. >>plot(x1,y1,x2,y2,x3,y3); Aynı grafik üzerinde farklı eğriler çizdirmek amacıyla sırasıyla istenen x ve y değerleri verilerek grafikler çizdirilebilir. Plot komutuyla çizdirilen grafiğin ayarlarını da yapmak mümkündür. Bu amaçla komutta her bir eğri için üçüncü bir parametre girilmesi gerekmektedir. >>plot(x,y, ); Üçüncü parametre tırnak içerisinde girilir ve çizginin tipini, marker tipini ve çizgi rengini belirler. Birden fazla grafik çizilmesinde her bir eğriye ait parametreler x ve y değerlerinden sonra yazılmalıdır. 74

Çizgi tipleri: Marker tipleri: Renkler: - Düz çizgi -- Kesikli çizgi : Noktalı çizgi -. Kesikli noktalı çizgi. Nokta + Artı * Yıldız o Daire x x işareti s Kare (square) d Baklava şekli (diamond) v Aşağı üçgen ^ Yukarı üçgen < Sola üçgen > Sağa üçgen p Beş köşeli yıldız h Altı köşeli yıldız r g b y w k c m i Kırmızı Yeşil Mavi sarı Beyaz Siyah Cyan Magenta Görünmez (invisible) Örnek: >>plot(x,y, :db ); Komutu y vektörünü x e göre çizdirecektir. Grafik noktalı olarak çizilecek, veri noktaları baklava dilimi ile gösterilecek ve grafiğin rengi mavi olacaktır. Plot komutuyla çizdirilen grafiklerin ayrıntılı ayarlarını yapmak da mümkündür. Bu amaçla hangi parametrenin değeri ayarlanacaksa tırnak içerisinde önce parametre adı yazılı ve sonra tekrar tırnak içerisinde parametrenin alacağı değer yazılır. Bu amaçla kullanılacak parametreler şunlardır: LineStyle Çizgi tipini belirler Yukarıda belirtilen çizgi tipleri kullanılır Color Çizgi rengini belirler Yukarıdaki renk kodları kullanılır LineWidth Çizgi kalınlığını belirler Tırnaksız sayısal değer verilir Marker İşaretçi tipini belirler Yukarıdaki kodlar kullanılır MarkerEdgeColor İşaretçi kenar rengini belirler Yukarıdaki renk kodları kullanılır MarkerFaceColor İşaretçi dolgu rengini belirler Yukarıdaki renk kodları kullanılır MarkerSize İşaretçi büyüklüğünü belirler Tırnaksız sayısal değer verilir Örnek: >>plot(x,y, LineStyle, :, Color, r, LineWidth,2, Marker, s, MarkerEdgeColor, k, 75

MarkerFaceColor, g, MarkerSize,10); Yukarıda belirtilen renk kodları dışında istenirse farklı renklerde kullanılabilir. Bu amaçla istenilen rengin R G B kodları belirtilmelidir. Bu işlem renk kısaltması yerine R G B kodlarını belirten vektörü yazmakla gerçekleştirilir. Burada belirtilen renk kodları 0 ile 1 arasında değerler alır. 0 ilgili rengi hiç eklemezken 1 ise tam olarak ekler. Örnek: >>plot(x,y, Color,[0 1 1]) İşlemiyle y vektörü x e göre açık mavi olarak çizilecektir. Matlab da bir grafik çizildikten sonra yeni bir grafik çizildiğinde eski grafik silinerek yenisi çizilmektedir. Eğer ikinci grafiğin birincinin üzerine çizilmesi isteniyorsa bu durumda hold on komutu verildikten sonra ikinci grafik çizilmelidir. Bu işlem hold off komutuyla iptal edilebilir. Yeni bir grafik penceresinin açılması için ise figure komutu verilmelidir. Grafik üzerinde ızgaraların görüntülenmesi isteniyorsa grid on komutu verilmeli, ızgaralar gizlenmek isteniyorsa grid off komutu verilmelidir. Mevcut bir grafiğin x ve y eksenlerine ve grafiğe etiket verilmesi için aşağıdaki komutlar kullanılmalıdır. >>xlabel( zaman (s) ) >>ylabel( hız (m/s) ) >>title( Hız-zaman grafiği ) Grafiklere ait bazı özelliklerin ayarları set komutu ile gerçekleştirilir. >>set(gca, ytick,[-3:5]) Bu komut ile grafiğin y ekseninde yer alacak değer etiketleri ayarlanmış olacaktır. X eksenindeki değer etiketleri için ise: 76

>>set(gca, xtick,[0:100]) Komutu verilebilir. Burada yapılan işlem eksenlerin ölçek değerlerinin değiştirilmesi değil sadece yer alacak etiketlerin belirlenmesidir. Yukarıda grid on ve grid off komutlarıyla grafik üzerindeki ızgaraların açılıp kapatılabileceği açıklanmıştı. X ve y eksenleri için bu işlem ayrı ayrı yapılmak isteniyorsa: >>set(gca, xgrid, on, ygrid, off ) Komutuyla gerçekleştirilebilir. Grafik eksenlerinin ölçek tipi değiştirilmek isteniyorsa: >>set(gca, xscale, log, yscale, linear ) Komutuyla gerçekleştirilebilir. Eksenlerin renkleri ise: >>set(gca, xcolor, blue, ycolor, green ) Komutuyla değiştirilebilir. >>set(gca, fontsize,[12]) Komutuyla grafikteki yazıların karakter büyüklüğü ayarlanmış olacaktır. >>axis([x1 x2 y1 y2]) Komutuyla grafik eksenlerinin yeniden ölçeklendirmesi yapılabilmektedir. Semilogy, semilogx, loglog, plotyy komutları plot komutuna benzer bir yapıdadır. Semilogy komutuyla y ekseni logaritmik, semilogx ile x ekseni logaritmik, loglog komutuyla her iki ekseni birden logaritmik grafikler çizdirilebilmektedir. Plotyy ise iki y eksenine sahip grafiklerin çizdirilmesi amacıyla kullanılmaktadır. line komutu iki veya daha fazla nokta arasında doğrular çizmek için kullanılır. Kullanımı >>line(x,y) 77

Şeklindedir. X ve y vektörlerinin eleman sayıları eşit olmalıdır. Line komutu plot komutuna benzer bir yapıdadır. 11.2 Fplot ve Ezplot Komutları Fplot ve ez plot komutları ile bir fonksiyonun belirtilen aralıkta grafiğinin çizdirilmesini sağlar. Kullanımları şu şekildedir: >>fplot( x^2+5*x-3,[-2 5]) >>ezplot( x^2+5*x-3,-2,5) >>ezplot( x^2+5*x-3,[-2 5]) >>syms x >>ezplot(x^2+5*x-3,-2,5) 11.3 Gtext Komutu 2 boyutlu grafikler üzerinde istenen herhangi bir yere açıklamalar yazılması amacıyla kullanılmaktadır. >>gtext( açıklama ) Komutu verildiğinde grafik nesnesi üzerinde kursörün şekli değişi ve ifadenin yerleştirileceği yerin seçilmesiyle işlem sonuçlandırılır. 11.4 Legend Komutu Birden fazla eğri içeren grafiklerde hangi eğrinin neyi ifade ettiğini belirten bir etikete ihtiyaç vardır. Bu amaçla legend komutu kullanılır. >>legend( 1. Grafik, 2. Grafik, 3. Grafik, konum) Burada konum değeri -1 0 1 2 3 4 5 değerlerinden birini alabilir. 78

11.5 Ginput Komutu Ginput komutu grafik nesnesi üzerinde fare ile işaret edilen noktanın koordinatlarının alınmasını sağlar. Kullanımı şu şekildedir: >>ginput(3) Bu komut verildiğinde grafik nesnesi üzerinde kursörün şekli değişir ve 3 nokta seçilmesini bekler. 3 nokta seçildikten sonra bu noktaların koordinatları komut penceresine sonuç olarak atanır. İstenirse bu komut sol tarafına bir değişken eklenerek de kullanılabilir. 11.6 Çoklu Grafik Çizimi Bir grafik penceresi üzerinde birden fazla grafik ayrı ayrı çizilmek isteniyorsa bu durumda subplot komutuyla grafik alanının yapısı tanımlanmalıdır. >>subplot(3,2,1) Bu komut sayesinde grafik alanı 3 satır 2 sütundan oluşan bir yapıya dönüştürülmüş ve 1. Alan aktif hale getirilmiştir. Bundan sonra grafik çizdirildiğinde 1. Alana çizim yapılacaktır. Diğer alanların aktif hale getirilmesi için >>subplot(3,2,2) Şeklinde seçimin yapılması gerekmektedir. 11.7 Plot3 Komutu 3 boyutlu çizgi grafiklerinin çizdirilmesi amacıyla kullanılır. Kullanımı plot komutuyla benzer şekildedir. Plot3 komutunda x ve y vektörlerinin dışında bir de z vektörünün tanımlanması gerekmektedir. >>plot3(x,y,z) 79

Ancak burada dikkat edilmesi gereken husus her üç vektörün de eleman sayıların aynı olması gerektiğidir. 11.8 Yüzey Grafikleri Plot3 komutu 3 boyutlu çizgi grafiklerinin çizilmesi amacıyla kullanılmaktadır. Eğer bir yüzey grafiği çizdirilmesi gerekiyorsa bu durumda mesh (ağ), surf (yüzey) komutları kullanılmalıdır. >>mesh(x,y,z) >>surf(x,y,z) Burada x ve y parametreleri birer vektör z parametresi ise x ve y boyutlarında bir matristir. 11.9 Diğer Grafik Komutları Bar, bar3, barh, bar3h, area, stem, stem3, pie, pie3, 80

12 M DOSYALARI Matlab da iki tür M dosyası oluşturmak mümkündür. Bunlar makro (script) ve fonksiyon (function) dosyalarıdır. Makro dosyalarında daha önce komut satırında yapıldığı gibi işlemler dosya içerisine yazılır ve bu dosya çalıştırıldığında yazılan komutlar teker teker çalıştırılır. Özellikle art arda sık kullanılan komutlar makro haline getirilebilir. Örnek: Rastgele sayılardan oluşan 4x5 lik, 5x4 lük matrisler oluşturup bunların çarpımını hesaplayan bir makro dosyası oluşturunuz. Makro dosyası oluşturmak için öncelikle M dosya editörünün açılması gerekmektedir. Bu işlem için File New Blank M File komutları verilmelidir. Örnek için M dosyasına yazılması gereken komutlar şekilde görülmektedir. Burada yapılan işlemlerin tamamı komut satırından yapılıyormuş gibi değerlendirilir. Yani bu satırlar komut satırında tek tek yazıldığında da aynı hedef gerçekleştirilmiş olur. İşlem satırlarının sonunda noktalı virgül karakteri kullanılmazsa işlemin sonucu komut penceresinde görüntülenir. M dosyaları yazıldıktan sonra Matlab ın çalışma klasörüne (current directory) kaydedilmelidir. Çalıştırılırken komut satırından dosyanın ismi yazılarak çalıştırılır. Eğer M dosyası çalışma klasöründen başka bir klasöre kaydedildiyse bu klasör File Set Path komutu 81

seçilerek açılan pencereden Add Folder seçeneğiyle Matlab ın tanımlı klasörleri arasına eklenmelidir. Tıpkı Fortran da olduğu gibi M dosyalarında klavyeden giriş ve ekrana yazdırma komutları bulunmaktadır. 12.1 Input Fonksiyonu Matlab programlarında klavyeden veri girişi amacıyla input fonksiyonu kullanılır. Input fonksiyonunun kullanılışı şu şekildedir: A=input( Lütfen motor hacmini giriniz ) Input fonksiyonunun yanında parantez içerisinde tırnak içerisinde yazılmış olan ifade ekrana yazılır ve kullanıcıdan klavyeden giriş yapması beklenir. Klavyeden girilen değer A değişkenine atanır. Eğer input fonksiyonuyla klavyeden bir sayı değil de metin girilmesi isteniyorsa bu durumda fonksiyon: B=input( Lütfen adınızı giriniz, s ) Şeklinde kullanılmalıdır. Burada üstteki örneğe ilave olarak s ifadesi eklenmiştir. Bu ifade girilecek değerin metin olduğunu (string) ifade eder. 12.2 Disp Fonksiyonu Matlab programlarında bir ifadenin veya bir değişkenin değerinin ekrana yazdırılması amacıyla disp fonksiyonu kullanılır. Disp fonksiyonunun kullanılışı şu şekildedir: Disp( Matlab ) Disp(A) Örnek Uygulamalar 82

1. Daha önce Fortran uygulamalarında yapılan tek silindirli motor hacim değişimini hesaplayan ve grafiğini çizdiren programı Matlab da yazınız. 2. Klavyeden girilen bir tam sayı adedince elemanı bulunan bir Fibonacci dizisi oluşturan Matlab programını yazınız. 12.3 Matlab da Kontrol İfadeleri 12.3.1 Karşılaştırma Operatörleri A < B A > B A <= B A >= B A == B A ~= B 12.3.2 Mantıksal İfadelerin Birleştirilmesi ~ NOT & Elementwise AND Elementwise OR && Short-circuit AND Short-circuit OR 12.3.3 if end yapısı Matlab da if end yapısının üç farklı şekli mevcuttur. Bunlardan birincisi If a>b c=a^2+b; end Bu if yapısında yalnızca şartın gerçekleşmesine bağlı olarak işlemler yapılmakta olumsuz durum için komutlar yer almamaktadır. If a>b c=a^2+b; else c=a+b; 83

end İkinci if yapısında şartın olumsuz sonuçlanması durumunda da yapılacak işlemler yazılmıştır. If a>b c=a^2+b; elseif a<b c=a+b; elseif a==b c=a^2; end If yapısının bu kullanımında ise iç içe geçmiş if sorguları yer almaktadır. 12.3.4 switch end yapısı switch A case 1 C=A+B case 2 C=A*B case 3 C=A-B otherwise C=0 end Switch end yapısı bir değişkenin alabileceği farklı durumlara göre işlem yapmak amacıyla kullanılır. 12.4 Döngüler 12.4.1 for döngüsü Komutların belli bir sayıda tekrarlanması amacıyla kullanılır. Döngünün bir sayaç değişkeni vardır. Sayaç değişkenine döngünün başlangıç ve bitiş değerleri verilir. Eğer sayaç değişkeninin 1 er 1 er değil de farklı adımlarla sayması isteniyorsa üçüncü parametre olarak adım miktarı belirtilmelidir. for m=1:100 k(m)=m*5; end 84

12.4.2 while döngüsü Komutların belli bir şarta bağlı olarak tekrarlı sayıda çalıştırılmasını sağlar. Belirtilen şartın sağlanması sona erdiğinde döngü de sonlanmış olur. eps = 1; while (1+eps) > 1 eps = eps/2; end eps = eps*2 12.4.3 break fonksiyonu Döngü içerisinde belli bir şart oluştuğunda döngünün sonlandırılması amacıyla kullanılır. for m=1:100 if m==60 break; end k(m)=m*5; end 12.4.4 continue fonksiyonu Döngü içerisinde continue fonksiyonu döngünün mevcut çalışmasının kesilerek bir sonraki adımına geçilmesini sağlar. for x=-5:5 if x==0 continue; end y=1/x; end 12.5 Fonksiyon Dosyaları Fonksiyonların makrolardan bazı farklılıkları vardır. Makrolar komut satırında gerçekleştirilen işlemlerin bir dosya haline getirilmesiydi. Fonksiyonlar ise belli bir işlemi gerçekleştirip sonucunu geri döndürmek üzere kullanılırlar. Örneğin y=abs(x). Fonksiyonları yazılışları makrolardan daha farklıdır. Fonksiyonların birinci satırı fonksiyonun ismini, dışarıdan alacağı değerleri ve gerekiyorsa geri döndüreceği değerleri içerir. Fonksiyonlar mutlaka kendi ismiyle kaydedilmelidir. Örnek olarak santigrad dereceden 85

fahrenhayt a dönüşüm yapan bir fonksiyon oluşturalım. Örnekte oluşturulan fonksiyon dışarıdan bir değer alıyor (c) ve geriye bir değer döndürüyor (f). Örnekte oluşturulan fonksiyonun komut satırında kullanılması şu şekilde olacaktır: A=degtof(12) 12.5.1 Fonksiyonlarda Değişken Tanımlama Şekilleri Fonksiyonlarda değişkenler 3 farklı şekilde tanımlanabilir. Lokal değişkenler, global değişkenler ve kalıcı değişkenler. Lokal değişkenlerin tanımlanması sırasında herhangi özel bir işlem yapılmaz. Fonksiyon içerisinde tanımlanan değişkenler ilgili fonksiyon için bellekte oluşturulur ve fonksiyon görevini bitirdikten sonra bellekten silinirler. Tanımlanan değişkenler fonksiyona özel değişkenlerdir ve fonksiyon çalıştığı sürece bellekte bulunurlar. Global değişkenler değişkenlerin çalışma ortamında veya farklı fonksiyonlar tarafından kullanılmalarını sağlar. Bu tür bir değişken tanımlamak için fonksiyon dosyası içerisinde global kelimesiyle değişken tanımlanmalıdır. Fonksiyonda tanımlanan bu değişken çalışma alanında kullanılacaksa global kelimesiyle komut satırında da tanımlanmalıdır. Tanımlanan değişken her halükarda aynı değişkendir ve değeri içerisinde tanımlanmış olan fonksiyonlar tarafından veya komut satırından kullanıcı tarafından değiştirilebilir. 86