PROGRAMLAMA ve YAZILIM Sayısal Analiz Yrd.Doç.Dr. Zekeriya PARLAK
PROGRAMLAMA ve YAZILIM
Paketler ve programlama Günümüzde bir problemi çözmek için iki tür yöntem vardır. – Bunlardan ilki paket programlar kullanarak bir problemi çözmek – diğeri ise kendi geliştirdiği bir kod ile problemini çözmektir. Paket programlar kullanmak doğrusal bir denklem sistemini çözmek veya x-y değerlerinin grafiğini çizmek için özel bir çaba gerektirmeyen bir çözüm yöntemidir. Ancak bir paket programın standart kapasitesinin ötesinde problemler çıktığında, bu durumda programlama yeteneklerinizi artırarak ancak problemlerinize çözüm bulabilirsiniz. Örneğin Excel, MATLAB v.b. paket programlar, kendi kapasitelerini kullanıcılarına programlama imkanı da sunan yazılımladır. Mühendisler kendilerini sadece paket programların kendilerini sundukları hazır kodlar ile sınırlandırmamalı, problemlerini çözmek için aynı zamanda program yazmayı da öğrenmelidirler. Bu maksatla Excel üzerinde VBA makroları ve MATLAB üzerinde M-dosyaları yazmasını öğrenerek ilerleyebilirler.
Bilgisayar Programları Bilgisayar programları, bilgisayarın belirli bir işi yapması için yol gösteren talimatlar dizisidir. Programlama konusunu birkaç başlığa indirgeyebiliriz. 1.Basit bilgi gösterimi (sabitler, değişkenler ve tip tanımlamaları) 2.Gelişmiş bilgi gösterimi (veri yapısı, diziler ve kayıtlar) 3.Matematik formüller (yerine koyma, işlem önceliği kuralları ve özel fonksiyonlar) 4.Girdi/çıktı 5.Mantıksal gösterim (sıralama, seçim ve tekrar) 6.Modüler programlama (fonksiyonlar ve alt programlar)
Yapılandırılmış Programlama Yapılandırılmış programlama, programcıya biçim konusunda iyi alışkanlıklar öneren bir kurallar bütünüdür. Yapısal bir program, sıralama, seçme ve tekrar olarak belirtilebilecek üç temel yapı kullanılarak yazılır. Algoritmanın özel geometrik şekillerle çizilmiş hali de “akış diyagramı” olarak adlandırılır. Akış diyagramları ile bilgisayar kodları arasında geçişi sağlayan algoritmaları ifade etmenin diğer bir alternatifi ise kalıp programlardır (pseudocode).
Program yazma adımları Problem iyice irdelenir. Programlamaya en uygun (en az komut, en kısa süre, en doğru sonuç) çözüm yolu belirlenir. Kalıp program veya akış diyagramı hazırlanır. Kalıp program veya akış diyagramı bir programlama diliyle kodlanarak program oluşturulur
Algoritma Hazırlama Kuralları Yapılacak iş/çözülecek problem iyice irdelenir. Tüm ihtimaller gözden geçirilir. En uygun çözüm yolu/yöntem belirlenir. Tanımlayıcı isimleri (değişken, sabit, alt program vb.) belirlenir. Her işlem adımına bir numara verilir. Problem çözümü için gerekli veriler girilir veya başka bir ortamdan alınır. Bulunan sonuçlar görüntülenir veya belirli bir ortamda saklanır.
Akış diyagramlarında kullanılan semboller
Mantıksal Gösterim Sıralama. Sıralama yapısı, aksi söylenmedikçe, bilgisayar kodunun, komutları birbiri ardınca sırayla yapacağı şeklindeki basit fikri ifade eder. Örnek 1: Klavyeden girilen iki sayının toplamını bulup ekrana yazan programın akış şeması 1.Başla 2.Birinci sayıyı (A) gir 3.İkinci sayıyı (B) gir 4.T=A+B işlemini yap 5.Sonucu (T) yaz 6.Dur
Mantıksal Gösterim Seçim. Adım adım sırayla ilerleme yapısının aksine, seçim, mantıksal bir şartın sonucuna göre program akışının dallanmasını sağlar. Örnek 2: Girilen iki sayıdan büyük olandan küçük olanı çıkarıp farkı ekrana yazan programın akış şeması 1.Başla 2.Birinci sayıyı (A) gir 3.İkinci sayıyı (B) gir 4.Eğer A>B ise 5.F=A-B 6.Değilse 7.F=B-A 8.Yaz F 9.Dur
Mantıksal Gösterim Tekrar. Komutların birbiri ardınca tekrar kullanılmalarına olanak sağlar. Tekrarlama işlemi sonucunda oluşan yapılar, döngüler, nasıl bittiklerine göre iki farklı şekilde karşımıza çıkarlar. Bunlardan ilki karar döngüsüdür, çünkü döngü mantıksal bir koşulun sonucuna bağlı olarak sona erer. DOEXIT bir karar döngüsüdür. Şekildeki gibi bir döngüde ilk blok ve ikinci blok olmadan da çalışabilir. Bu döngü birçok programda WHILE olarak kullanılır.
Mantıksal Gösterim Tekrar. Komutların birbiri ardınca tekrar kullanılmalarına olanak sağlar. Tekrarlama işlemi sonucunda oluşan yapılar, döngüler, nasıl bittiklerine göre iki farklı şekilde karşımıza çıkarlar. Diğeri sayacı kontrollü döngü ya da DOFOR döngüsü belirtilen sayıda tekrarı veya iterasyonu gerçekleştirir. Şu şekilde çalışır; İndis (şekilde i ile temsil edilmiştir) başlangıçta başla ile değerine getirilen bir değişkendir. Program daha sonra indisin, son değeri bitti’den küçük ya da ona eşit olmadığını test eder. Eğer küçükse döngüde yer alan komutları yerine getirir ve DO ifadesine geri döner. ENDDO ifadesine her gelindiğinde indis, adım kadar otomatik olarak artırılır. Böylece indis sayaç görevini yapar. Daha sonra indis son değer bitti’den büyük olduğu zaman bilgisayar otomatik olarak döngüden çıkar ve kontrol ENDDO ifadesini izleyen satıra geçer.
Mantıksal Gösterim Örnek 3: 1’den N’e kadar olan tam sayıların toplamını bulan programın akış şeması 1. Başla 2. N sayısını gir 3. T=0 4.EĞER N<1 ise git 9 5. Döngüyü başlat (i=1 den N e kadar) 6.T=T+i 7.Git 5 8.Döngüyü sonlandır.(i=N e ulaştığı zaman) 9.Yaz T 10. Dur
Mantıksal Gösterim Örnek 4: Klavyeden girilen N tamsayısı için N! Değerini hesaplayan programın akış şeması 1.Başla 2.N sayısını gir 3.F=1 4.i=0 5.i=i+1 6.F=F*i 7.Eğer i<N ise git 5 8.Yaz F 9.Dur
Mantıksal Gösterim Ödev 1. Klavyeden N değeri girildiğinde, 1’den N’e kadar olan tek sayıların toplamını bulan programın akış diyagramını çiziniz. Ödev 2. Girilen iki sayı arasındaki mutlak farkı hesaplayan programın akış diyagramını çiziniz. Ödev 3. Aşağıdaki akış diyagramının sonucunu hesaplayınız. Ödev 4. Aşağıdaki algoritmanın sonucunu hesaplayınız. 1. Başla 2. F=1 3. S=20 4. Eğer S<1 ise git 9 5. S=S-3 6. F=F+S 7. F=F+2 8. Git 4 9. Yaz F 10. Dur
Paraşütçü problemi
g=9.8 INPUT cd,m INPUT ti,vi,tf,dt t=ti v=vi h=dt DO IF t+dt>tf THEN h=tf-t ENDIF dvdt=g-(cd/m)*v v=v+dvdt*h t=t+h IF t ≥ tf EXIT ENDDO DISPLAY v Döngü içine girer girmez, bir IF/THEN yapısı kullanılarak t+dt’in aralığın dışına çıkıp çıkmadığı kontrol edilir. Eğer çıkmıyorsa, ki başlangıçta çıkmayacaktır, hiçbir şey yapmadan IF koşulundan çıkılır. Eğer çıkıyorsa, h=tf-t’ye eşitlenerek değeri değiştirilir böylece programın sonlanması için ilk adım atılmış olur. Örneğin t=4 sn değeri başlangıçta atanırsa 4+0,5>4 olacağı için h=4-4=0 değerine atanır, böylece devam eden adımlar program sonlanır. Program devamında döngü t ≥ tf şartı sağlanan kadar devam eder. Ancak programda bazı eksiklikler devam etmektedir, örneğin; kullanıcı yanlışlıkla hesap aralığından daha büyük bir adım girmiş olabilir, ya da ti değeri tf değerinden büyük girilmiş olabilir.
Paraşütçü problemi Paraşütçü problemini MATLAB’da oluşturacağımız m-files dosyaları üzerinde kodlama yaparak çözebiliriz. MATLAB’in genel kullanım özelliklerinde kısaca bakarak bunun nasıl görelim. g= 9.8; m=input('kütle (kg) :'); cd=12.5; tf=2; v=g*m/cd*(1-exp(-cd/m*tf)) 1.Paraşütçü probleminin analitik çözümü bulmak için MATLAB’in komut penceresine (Command Window) yandaki sıralanan komutları yazalım; 2.Enter tuşuna bastığınızda m değerini kullanıcının girmesi gerektiği için, kullanıcı bu değeri yazdıktan sonra sonuç görülebilir 3.Aynı programı bir m-file içinde oluşturarak da sonuç alabiliriz. Bunun için File > New > Blank M-File’i seçin 4.Açılan m-files editörü için yukarıdaki kodun aynısını yapın ve analhesap.m ismiyle kaydedin. 5.MATLAB’in komut penceresinde >> analhesap yazarsanız bu m-doyasının içindeki hesap çalıştırılır ve sonuç ekrana yazılır.
Paraşütçü problemi g=9.8; m=input('kütle (kg) :'); cd=12.5; ti=0; tf=2; vi=0; dt=0.1; t=ti; v=vi; h=dt; while (1) if t+dt>tf h=tf-t; end dvdt=g-(cd/m)*v; v=v+dvdt*h; t=t+h; if t>=tf, break, end end disp('hız (m/s:') disp (v) 1.Sayısal çözüm için yeni bir m-file oluşturun ve numhesap.m olarak kaydedin. 2.Yandaki kodu yazın ve komut penceresinde numhesap yazıp çalıştırın. 3.MATLAB’de DO komutu yerine WHILE (1) komutunun kullanıldığına dikkat edin. 4.MATLAB buradaki 1 rakamı doğruya karşılık olarak yorumlar 5.Ancak döngü break konutu ile son bulur, kontrol end ifadesine geçerek döngü sonlanır.
Paraşütçü problemi function euler=f(dt, ti, tf, vi, m, cd) t=ti; v=vi; h=dt; while (1) if t+dt>tf h=tf-t; end dvdt=dv(t,v,m,cd); v=v+dvdt*h; t=t+h; if t>=tf, break, end end euler =v; 1.Programımızı daha düzgün bir fonksiyon ve yapılandırılmış bir şekle dönüştürmek için, yeni bir m-dosyası açın ve euler ismiyle kaydedin ve yandaki kodu yazın 2.dv fonkiyonu bunun içinde hesaplanmadığı için onu dv ismini vereceğimiz başka bir m- dosyasında hesaplayalım. 3.Fonksiyonu çalıştırmak ve sonucu görmek için aşağıdaki komutları komut penceresinde yazmalıyız. function dv=f(t,v,m,cd) g=9.8; dv=g-(cd/m)*v; >> euler(0.1,0, 2, 0, 68.1, 12.5)