MATLABDA HESAP MAKİNESİ YAPIMI

talhakoc 30 Aralık 2013Matlab

Bir mühendisin bilmesi gereken programlardan birisi de MATLAB(matrix labaratuarı)dir. C çalışan biri olarak bana sıkıcı geliyor ama programlamaya yeni başlayan birine zevkli gelebilir. Ama ödevim olduğu için üç arkadaşımızla beraber uğraştık ve araştırmalar sonucu bir hesap makinesi yaptık.

Matlabde hesap makinesi yapmak için grafik ara yüzü dediğimiz gui’yi kullanarak bir hesap makinesi taslağı oluşturmamız gerekir. Matlabda Gui’yi açmak için New-Gui yolunu izlemelisiniz.

gui açılımı

Resimdeki gibi Guiyi seçtikten sonra aşağıdaki gibi blank gui’yi seçin

Adsız

Karşınıza aşağıdaki gibi gui tablosu çıkacak.

gui tablosu

Benim tavsiyem bunu birkaç dakika incelemeniz. Bu şekilde butonları, textleri, paneli, tabloyu vs tanımış olursunuz. Biz push button, statik text ve paneli kullanacağız. Sol taraftaki butonlar arasından iki text butonu göreceksiniz. Edit text; üzerinde kullanıcının direkt oynayabildiği text olduğu için biz statik text kullanacağız. Ama önce hesap makinemizin kurulacağı platform için kuracağınız hesap makinesinin büyüklüğünde bir panel sürükleyin. Daha sonra hesap makinesinin ekranı için state text sürükleyin ve yapacağınız hesap makinesinin tuşlarına göre push button sürükleyin.

arayüz

Hesap makinesinin arayüzünü oluşturduktan sonra ekranın ve butonların isimlerini istediğiniz yönde değiştirin. Yanlız statik text ismini tamamen silin ve yerine başka bi şey yazmayın. Ekranda sürekli bir şey yazmasını istemezsiniz değil mi? İsim değiştirmek için text’in veya butonun üzerine çift tıklayarak string kısmındaki yazıyı değiştirin.

text tıklama

Text ekranında yazı olmamasına dikkat edin. Yoksa hesap makinemiz çalışmaz. İsimleriyle beraber hesap makinesini tamamen kendinize göre tasarladıktan sonra oluşturduğunuz tabloyu kaydederek m-file dosyasını açın. Eğer direkt açılmazsa tablonun üst tarafında bulunan view i seçerek m-file editöre tıklayın. karşınıza yorumlarla beraber butonların başlıkları çıkacak

mfile

Yukarıdaki örnek tek butonlu bir tabloya aittir. Dördüncü function’da yazan pushbutton1 butonun tag ismidir. Tag ismi butonun oluşturulma sırasına göre oluşturulur. Tag ismine de butona çift tıklayarak ulaşabilirsiniz.

Butona bastığınızda text ekranında yazılanlara yazı ekleyemek için butonlara kod yazmamız gerekiyor. Yapmamız gereken şey butona bastığında text dosyasını okuyarak buton değerine birleştirecek ve tekrar bunu ekrana basacak fonksiyonu bulabilmek. Karakterleri dizi şeklinde tanımlamamız gerekir. matlabde karakter dizisine String deniliyor.

get() fonksiyonu okuma, set() fonksiyonu yazma, strcat(‘a’,’b’) a ve b şeklindeki stringleri birleştirme işine yarar. ekranyazisi isimli bir diziye get fonksiyonuyla text ekranımızda yazanları okuyarak string şeklinde kaydederek ona buton değerini birleştiririz ve oluşan stringi tekrar ekranyazisina atarız. yeni oluşan ekranyazisi’nı de set fonksiyonuyla basarsak butona bastığımız kadar değer basan bir yapı oluşturabiliriz.

function pushbutton1_Callback(hObject, eventdata, handles)
ekranyazisi=get(handles.text1,’String’);
ekranyazisi=strcat(ekranyazisi,’1′);
set(handles.text1,’String’,ekranyazisi);

1 basma

Kullandığımız komutları inceleyelim; yukarıda gördüğümüz üzere butonun tanımlanması ile function fonksiyonunun olduğu satır kendiliğinden ekleniyor. Bize de altındaki konutları işlemek kalıyor.  ekranyazisi=get(handles.text1,’String’); komutunda ‘handles.text1’ dikkatinizi çekmiştir.Butona basılmasıyla text1 deki verinin okunması bu şekilde sağlanır ve String(karakter dizisi) şeklinde ekranyazisi’na atılır. ‘text1′, statik text’imizin (makinenin ekranı) tag adını gösterir. Ona da yukarıda belirttiğim gibi text’e çift tıklayarak ulaşabilirsiniz. ekranyazisi=strcat(ekranyazisi,’1’); komutu ise text’te yazan ilk ekranyazisi ile ‘1’ i birleştirerek yeni ekranyazisi’na atar. set(handles.text1,’String’,ekranyazisi); handles.text1 in butonla text arasında bağlantı kuruyordu. İşte burada da yeni yani ‘1’ ile birleşmiş ekranyazisi’mizi ekrana basar.

Şu haliyle kaydedersek ekrana istediğiniz kadar 1 ifadesini basan bir sistem elde ederiz. 1 den 9 a kadar olan sayıları, ‘(‘ , ‘)’, ‘+’, ‘-‘ ‘*’, ‘/’, ‘0’, ‘.’, ‘^’ karakterlerini sadece strcat fonksiyonundaki 1 i değiştirerek yapabilirsiniz. peki bu işlemi nasıl çözecek. yani eşittir nasıl çalışacak.

Onun içinde matlabde tanımlı eval(”) fonksiyonumuz var. Eval fonksiyonu parantez içindeki String’i alarak matlab kodu olarak çözer. yani = tanımlı butonun kodu:

function pushbutton2_Callback(hObject, eventdata, handles)
ekranyazisi=get(handles.text1,’String’);
sonuc=eval(ekranyazisi);
set(handles.text1,’String’,sonuc);

Burada da anladığınız üzere text ekranımızda yazanı okuyor, eval fonksiyonuyla matlab kodu şeklinde çözüyor ve set fonksiyonuyla sonucu butona basma sonucu ekrana basıyor.

Temizleme(C) butonu da ekrana direkt boşluk basmak şeklinde yapılabilir. amacımız ekranı boşaltmaktır sonuçta. bununda kodu şöyle yazılabilir:

function pushbutton3_Callback(hObject, eventdata, handles)
set(handles.text1,’String’,’ ‘)

Biraz zorlanabileceğimiz silme butonu var. Soldan bir karakter eksiltmek için(silmek) ekranda yazan ekranyazisi’mizi okuruz.(get) daha sonra length fonksiyonuyla ekranyazisi’nin uzunluğunu buluruz. ekranyazisi’mizi bir dizinin içine atarız ve dizimizi ekranyazisi’mizi dizinin bir eksiğinci terimine kadar tanımlarız ve ekranyazisi’ni basarız.(set).

function pushbutton1_Callback(hObject, eventdata, handles)
ekranyazisi=get(handles.text1,’String’); %text dosyasını oku
l=length(ekranyazisi); %ekranyazisi’nin uzunluğunu bul
tk=char(ekranyazisi); % ekranyazisi’ni tk dizisine ata.
ekranyazisi=tk(1:l-1); % tk dizisinin bir eksiğini ekranyazisi’ne ata.
set(handles.text1,’String’,ekranyazisi); %ekranyazisi’ni yaz

Eval fonksiyonu matlab kodunu çözdüğü için sinüs, kosinüs, tanjant gibi fonksiyonlarını da tanımlayabilirsiniz. kodlar bittikten sonra m-file ı kaydederek çalıştırabilirsiniz. Yanlız dikkat edin text’in ve butonların bulunduğu dosyayı kaydetmeden program çalışmayacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Arama

Twitterda

© 2014 - Talha Koç. All Rights Reserved. Powered by Wordpress and Design by We Create Web Designs