14 Aralık 2014 Pazar

Nesnelerin İnterneti (IoT, Internet of Things) vol.2




Merhaba,

Nesnelerin interneti yazı dizimin ikinci yazısında “Nasıl proje geliştirebilirsiniz?” sorusuna cevap bulacağız. Eğer ilk yazımı okumadıysanız, buraya tıklayınız.

İlk yazıda da bahsettiğim gibi çeşitli platformlar var. Şimdi bunları yakından inceleyeceğiz.

Arduino

Arduino, İtalya'da ortaya çıkmıştır. Bir grup araştırmacının elektronik derslerini daha kullanışlı bir şekilde anlatabilmek amacıyla geliştirdikleri bir elektronik karttır. Üzerinde Girdi/Çıktı pinleri bulunan bir fiziksel programlama ortamıdır. Arduino IDE kullanarak, Processing - Wiring dili ile uygulama geliştirebilirsiniz. Wiring için C/C++ dillerinin basitleştirilmiş hali diyebiliriz.) Ancak farklı diller ile serial port üzerinden de uygulama geliştirebilirsiniz.

Projelerinize göre farklı çeşitlerini kullanabilirsiniz, en çok bilinenlerden biri olan Arduino Uno hakkında genel bilgileri aşağıda yazdım. Diğerleri için tıklayınız.


Teknik Özellikleri:
  • Mikrodenetleyici    ATmega328
  • Çalışma Gerilimi    5V
  • Giriş Gerilimi (önerilen)    7-12V
  • Giriş Gerilimi (limit)    6-20V
  • Dijital I/O Pinleri    14 (6 tanesi PWM çıkışı)
  • Analog Giriş Pinleri    6
  • Her I/O için Akım    40 mA
  • 3.3V Çıkış için Akım    50 mA
  • Flash Hafıza    32 KB (ATmega328) 0.5 KB kadarı bootloader
  • SRAM    2 KB (ATmega328)
  • EEPROM    1 KB (ATmega328)
  • Saat Hızı    16 MHz
  • Uzunluk    68.6 mm
  • Genişlik    53.4 mm
  • Ağırlık     25 g

Netduino

Netduino, aynı arduino gibi bir fiziksel programlama ortamı vne elektronik bir kattır. En önemli farkı ise .Net  ortamı için yani MicroFramework için tasarlanmıştır. Netduino ile .Net tecrübelerinizi elektronik devreler ve sensörler üzerinde kullanabilirsiniz.

Eğer bilgisayarınızda Visual Studio kurulu ise, netduino.com adresine girerek MicroFramework ve NetduinoSDK paketlerini kurup programlamaya başlayabilirsiniz.

Ufak bir hatırlatma yapayım, Visual Studio topluluk sürümü ile artık ücretsiz. Ayrıca, netduino ile Visual Studio 2015 kullanmak isterseniz bu adres size yardımcı olacaktır. 


Teknik Özellikleri:
  • STMicro 32-bit mikrokontrolcü
  • 120MHz Cortex-M3 çekirdek
  • Program hafızası: 192KB
  • RAM: 60 KB
  • Güç ve kullanıcı LED'leri
  • Kart üzerindeki buton varsayılan olarak reset işlevi görür, kullanıcı tarafından farklı işlev için programlanabilir
  • Giriş gerilimi: 7.5-9V DC veya USB
  • Çıkış gerilimi: 5VDC ve 3.3VDC regüleli
  • G/Ç pini başına 25mA akım
  • G/Ç pin lojik seviyesi: 3.3V (5V ile de kullanılabilir)  

Projelerinize ya da tercihinize göre, fiyat ve performans özelliklerine de dikkat ederek dilediğiniz kartı tercih edebilirsiniz.

Cihazların temini için robotistan.com'u tavsiye ederim. Ben alışveriş yapıyorum ve çok memnunum. Çin'den de alış veriş yapabiliriz. (aliexpress.com)

Çin'den yapacağınız ürünlerin problemli olabilme ihtimali var. Şuradaki video'dan ayrıntılı bilgi alabilirsiniz. Blog yazısı için tıklayın.

! Klon cihazlar, robotistan.com adresinden aldığım klon ürünlerden problem yaşamadım. Garantili ürün satışı yapıyorlar.

Bu yazımı burada sonlandırıyorum. Diğer geliştirme kartları ile ilgili yazılarım devam edecek.

Görüşmek üzere


Nesnelerin İnterneti (IoT, Internet of Things) vol.1



Merhaba, yeni bir yazı dizisi ile karşınızdayım.

IoT, nesnelerin (elektronik cihazlar, sensörler vb.) birbirleri (M2M) ya da insanlarla olan iletişim kurmasıdır. Bu iletişim İnternet üzerinden sağlanır. Ancak her nesneyi İnternet'e ayrı ayrı çıkarmak yerine merkezi bir nesne, sistem üzerinden de çıkarabilirsiniz. Yerelde buzdolabınız, kahve makineniz, klimanız * RFID ya da Bluetooth üzerinden ana sistem ya da kendi aralarında iletişim kurabilirler.

Aslında her şey, Cambridge Üniversitesinde yer alan bir araştırma binasında başladı. Tarihler 1991 yılını gösteriyordu. 15 araştırmacı 1 Kahve makinesi ortaklaşa kullanıyorlardı. Alt katta yer alan ve onlarca merdiveni çıkarak kahve makinesini boş bulan araştırmacılar bu durumdan rahatsız olup, bir proje geliştirdiler. İhtiyaçları; video kamera, görüntü yakalayan bir yazılım ve haberleşme için bir protokol. Tüm bunlar birleşince ortaya bu program çıktı!


1 dakika içinde 3 fotoğraf çekip ve bunları araştırmacı bilgisayarlarına gönderebiliyor. İşte her şey bu şekilde başladı. Kahve seviyesi 1993 yılında web üzerinden yayınlanmaya başladı. Bu bina taşına kadar kullanılan cihaz 2001 yılında ebay’den 6000$ satıldı.

IoT, ismi ilk defa 1999 yılında Kevin Ashton tarafından kullanıldı. Gelişen akıllı cihazlarla ve gelişen İnternet alt yapısı birlikte birçok nesne İnternet üzerinden haberleşmektedir. Bunlar; arabalar, buz dolapları, kütüphaneler, ayakkabılar vb.

Bu kadar cihazın İnternet'e çıkması ve sensörler ile düşünme, konuşma, hissetme gibi özellikler elde etmeleri çok büyük verilerin oluşmasına neden olmaktadır. Buda son dönemdeki önemli trend konulardan biri olan BIG DATA alanı girmektedir. Yapılan bir çok araştırmalar sonucu 2020 yılında 200 Milyar nesne İnternet'e bağlı olacağı tahmin edilmektedir. Daha akıllı bir Dünya'ya doğru ilerliyoruz. 



Bu video akıllı bir dünya yaşamından bir kesit için güzel bir örnektir.

Özetle, Nesnelerin İnterneti; Her yerden, Herkesle, Her zaman ve Her nesne ile bağlantıdır.

Nesnelerin interneti alanında uygulama geliştirmek için farkı platformlar bulunmaktadır. Bunların çok kullanılanları ve ilk akla gelenleri; ArduinoNetduinoRaspberry Pi …

Bu yazımı burada sonlandırıyorum. Farklı IoT çözümleri ilgili tanıtıcı yazılar, incelemeler ve örnek projeler yayınlayacağım.

Görüşmek üzere




29 Ekim 2014 Çarşamba

Kayan Noktalı Sayılar (Floating Point Numbers)

Bir önceki sayı sistemleri yazımının devamı niteliğinde olan bu yazıyı okumadan önce o yazıyı okumanızı tavsiye ederek yazıma başlıyorum.

Bilgisayarlarda reel sayılar, floating point sistemi ile ifade edilir. Bunun için farklı standartlar belirlenmiş olsa da kabul gören IEEE-754 standardıdır.


şeklinde ifade edilirler. S(sign) sayının işaretini, M(mantissa) mantisi, B(base) tabanı, E(exponent) üs kısmı ifade etmektedir.

32 bitlik bir reel sayının bit paylaşımı aşağıda görüldüğü gibidir.


E kısmı, ikiye tümleme ile yapılabilir ancak bu hesaplamaları zorlaştırdığı için exponent-bias yöntemi kullanılır. Bu kısımda ne kadar çok bir bulunur ise, o kadar büyük bir sayı ifade edilecektir. M kısmında ise bit çokluğu basamak hassaslığını arttırmaktadır.










Mantisin en solundaki sayı her zaman 1 kabul edilir ve 1 yapılır, belleğe yazılmaz.

Bir örnekle pekiştirelim.











Bu örneklerde, E kısmı ikiye tümleme ile ve M kısmında da soldaki bire dikkat edilmeden hesaplama yapılmıştır.

Şimdi exponent bias yöntemini öğrenerek işlemlerimizi yapmaya geçeceğiz.


|E| değeri, üs için ayrılan bit değeridir.

IEEE-754 standardındaki Floating Point sayılarının bit düzeyindeki bellek paylaşımı aşağıdaki tabloda verilmiştir.











Şimdi, -25.4 decimal sayısını floating point yöntemi kullanarak 16 bitlik (half) sistemde ifade edelim.

















Son olarak ilk örneklerimizi bias yöntemi ile yapalım.










Sonraki yazımda görüşmek üzere,


28 Ekim 2014 Salı

Sayı Sistemleri

Sayı sistemleri, bilgisayarların temelini oluşturur. Eğer bir bilgisayarı yakından tanımak isterseniz atmanız gereken ilk adımlardan biri sayı sistemlerini incelemektir.

En çok tercih edilen sayı sistemleri; ikili (binary), sekizli (octal), onlu (decimal) ve onaltılı (hexadecimal) sistemlerdir.

Biz matematiksel işlemlerimiz için decimal sitemi kullanılırız (0,1,2,3,4,5,6,7,8,9). Bilgisayarlar ise binary sistemi kullanılır (0 ve 1). Binary sistemin tercih edilme nedeni; elektronik devrelerde kolay uygulanabilmesi ve yapılan denemeler sonucunda diğer sistemlere göre daha verimli olmasıdır. 

Aşağıdaki tabloda sayıların diğer sistemlerde ifade ediliş şekilleri verilmiştir.




















Dönüşümler

61 onluk tabandaki (sistemdeki) bir sayıdır. Bu sayısı ikilik tabana çevirmek için yapılması gereken işlem; onluk tabandaki sayıyı ikinin kuvvetleri şeklinde ifade etmektir.
61 = 32 + 16 + 8 + 4 + 1

Bu ifadeyi (sırasıyla);




şeklinde yazabiliriz. Bu yazım sonrasında katsayılarımız 111101 dir. Bu da 61 sayısının binary sistemde karşılığıdır.

 

Bu işlemin tersini uyguladığımızda binary sistemdeki bir sayıyı decimal sisteme dönüştürmüş oluruz.

0.1875 onluk tabandaki kesirli sayıyı ikilik tabana çevirirken, ondalık kısmı çevirmek istediğimiz taban değeri ile çarpılır. Bu işlem tam sayı elde edilene kadar devam edilir.

0.1875 * 2 = 0.375
0.375 * 2 = 0.75
0.75 * 2 = 1.5 (Ondalık kısım ile çarpmaya devam edilir.)
0.5 * 2 =1.0

İşlem sonucunda elde edilen tam kısımlar yukarıdan aşağıya doğru yazıldığında sayının ikilik tabandaki değeri bulunmuş olunur.


Diğer sistemlere dönüşümlerde aynı şekilde yapılmaktadır. Deneyerek göre bilirsiniz.

Bilgisayar sadece toplama işlemi yapmaktadır. Çarpma işlemini art arda toplama ile yapar. Çıkarma işlemini de sayının negatifi ile toplama işlemi yaparak gerçekleştirir. Bölme işlemi de yine benzer biçimde devam eder.

Peki, sayıları negatif yapmanın yolu nedir?

Tümleme işlemi yaparak pozitif bir sayı negatif hale dönüştürülür. İki çeşit tümleme yolu kullanılır; Bire ve İkiye Tümleme. En çok tercih edilen yöntem, daha kullanışlı olması nedeniyle ikiye tümlemedir.

Bire Tümleme (One’s Complement)

Bu yöntemde pozitif sayıdaki 0 yerine 1, 1 yerine 0 yazılarak tümleme yapılır ve negatif sayı elde edilir.

0110 = 6
1001 = -6

Şimdi bir çıkarma işlemi örneği yapalım.
5-3=2 işlemini bire tümleme ile hesaplayalım.

5 = 0101   3 = 0011   -3 = 1100

0101
+
1100
=
10001 (taşan bit)

Taşan bit, bire tümleme yönetimde sonuca eklenir. Yani, 0001 + 1 = 0010 = 2 (5-3=2)

İkiye Tümleme (Two’s Complement)

Bu yöntemde önce bire tümleme yapılır daha sonra tümleme sonucuna 1 eklenir.

0110 = 6
1001 + 1 = 1010 = -6

Şimdi çıkarma işlemi örneği tekrar yapalım.
5-3=2 işlemini ikiye tümleme ile hesaplayalım.

5 = 0101   3 = 0011   -3 = 1101

0101
+
1101
=
10010 (taşan bit)

Taşan bit, ikiye tümleme yönteminde dikkate alınmadan silinir. Sonuç, 0010 = 2 dir.



5 Ağustos 2014 Salı

.Net Framework ve C#

Merhaba,

Bu yazıda C# ve OPP (Nesne Yönelimli Programlama) anlatıma devam edeceğim.

Öncelikle Yazılım Paradigması ve Programlama Süreci yazılarımı okumanızı tavsiye ederim.

Yakın zaman önce C# ve OPP konularında video eğitim serisi yapmayı düşünmüştüm ancak youtube da yeterli bulunduğum kaynaklar nedeniyle video çekimine bir zaman ayırmaktan vazgeçtim. Yazının sonunda kaynaklara ulaşabilirsiniz.

.Net Framework, sunduğu imkanlarla tüm Microsoft ortamlarında aynı alt yapıyı kullanarak uygulama geliştirmeyi sağlayan bir platformdur. İçerisinde farklı .Net dilleri tarafından kullanılabilen hazır kütüphaneler barındırır. Bu sayede daha hızlı ve kolay uygula geliştirme ortamı oluşturulmuştur.

.Net mimarisi; ortak bir yürütme ortamı (runtime environment), ortak bir değişken tür sistemi ve birbiriyle bağlantılı kütüphanelerden oluşur.

Birçok farklı dil desteği sunan platform ile Masaüstü, Web, Mobil, Server Client gibi uygulamalar geliştirilebilir.

.Net ile Gelen Çözümler
  • Daha önce geliştirilmiş uygulamalarla uyumluluk
  • Çoklu dil desteği (C#, VB.Net, Cobol.Net, C++.Net, Delphi.Net,  Perl for .Net)
"C# dili .Net Platformuna özel olarak geliştirilmiştir."
  •  Tüm .Net dilleri ile uyumlu ortak bir çalışma zamanı ve ortak temel sınıf kütüphanesi
  • Programlama modelinden bağımsız uygulama geliştirme ortamı
Common Language Runtime (Ortak Çalışma Zamanı)

.Net ortamında program geliştirme sürecinde çalışma zamanı prensiplerini belirleyen ve temellerini sağlayan Ortak Çalışma Zamanı (Common Language Runtime, CLR), daha önce uygulama geliştiricinin düşünmek zorunda olduğu birçok işin üstesinden gelir.



Common Language Specification: Farklı dillerin .Net platformu için sağlaması gereken özelliklerdir.

Base Class Library: Temel Sınıf Kütüphaneleri, Hazır Kütüphaneler


Derleme sonrası .Net Assembly paketleriyle Common Intermediate Language (CIL, Ortak Ara Dil) oluşur. Bu ara dil sayesinde VB.Net ile yazılmış bir kütüphane (.dll) kullanılarak C# uygulaması geliştirilebilir ya da tam tersi de yapılabilir. Bu sayede farklı dillerde programlama yapabilen programcılar aynı projede çalışabilirler. Metadata, uygulama içinde kullanılan bilgileri barındırır. Manifesto, Assembly ile ilgili bilgileri tutar. Kaynaklar ise resim ve ses gibi uygulama dosyaları barındırır.

CIL, geliştirme sürecinde MSIL (Microsoft Intermediate Language) adıyla  kullanılmıştır. MSIL denildiğinde CIL denilmektedir. :)

İki Farklı Video Kaynağı:
1. Açık Akademi Sanal Sınıf 
2. Yakın Kampüs
Tavsiye Kitap:
http://www.dikeyeksen.com/products/c-sharp-tam-hakimiyet
http://www.kodlab.com/BookDetail.aspx?ID=652
İyi Kodlamalar.

29 Nisan 2014 Salı

Programlama Süreci


Programlama denildiği zaman direk kodlama gelir bir çok insanın aklına ancak işin aslı pekte öyle değildir.

Programlama yapabilmeniz için belli aşamaları gerçekleştirmeniz gerekir. Bunlar şart mı? Tabii ki değil ancak kaliteli bir yazılım ortaya çıkarmak istiyorsanız bu aşamaları önemsemelisiniz.

1. Problemin Belirlenmesi
Problemin çözülebilmesi için öncelikle iyi bir şekilde tanımlanmalıdır. Problemin ihtiyaçları belirlenmeli ve ilgili tüm sorular sorulup, cevapları bulunmalıdır.

2. Gerekli Analizlerin Yapılması
Problemin belirlenmesinin ardından problemle ilgili analizler yapılmalıdır. Bu noktada en önemli iki analizler vardır. İlki, kullanıcı analizleridir. Kullanıcı istekleri doğru belirlenen uygulamalar her zaman daha başarılı olmuştur. İkinci ise, maliyet analizidir. Yazılım için gerekli harcamaların planlamasıdır.

3. Yazılım Mimarisinin Yapılması
Bu aşamada yazılımın algoritması belirlenir.

4. Yazılımın Kodlanması
Belirlenen algoritma doğrultusunda herhangi bir yazılım dilinde program kodlanır.

5. Yazılımın Test Edilmesi
Kodlama aşaması ile birlikte devam eden bir süreçtir. Kodlamanın her adımında test yapılacağı gibi, sonunda da yapılabilir. Bazen test aşaması kodlamada aşamasında daha uzun sürebilir. Kodların hataları belirlenir.

6. Dokümantasyon Yapılması
Program hakkında detaylı bir açıklama yapılır. Dokümantasyon içeriğinde kod açıklaması, programın nasıl kullanacağı, hangi amaç için yazıldığı ve hangi veriler kullanıldığı  yer alabilir. Dokümantasyon projeye dahil olabilecek yeni kişiler ve kullanıcılar için çok önemlidir.

27 Nisan 2014 Pazar

Blog Nasıl Yazılır?


Blog, bir kişinin ya da bir grubun bir araya gelip yazılar yazdıkları bir İnternet sayfasıdır. Bu yazılar kişilerin istedikleri konulardan oluşabilir. Örneğin; izlediğiniz filmler ve okuduğunuz kitaplarla ilgili bir blog ya da teknoloji üzerine tek başınıza veya birkaç arkadaşınız bir araya gelip bir blog oluşturabilirsiniz. Tamamen sizin isteğinize kalmış bir durum. :)

Peki, nasıl blog hesabı oluşturabilirim ya da hangi bunun için hangi blog sağlayıcı servisi kullanmalıyım diye sorular sorabilirsiniz. Ülkemizde ve dünyada en çok kullanılan servislerden ikisini tavsiye edebilirim. Blogger ve WordPress. Bu sistemlerde nasıl hesap açılacağı konusunda arama motorunuz size yardımcı olacaktır. :)

Şimdi gelelim içerik konusuna. Bir blog için en önemli şey yazılarınızın içeriğidir. İyi bir içeriğiniz var ise, insanların blogunuzda daha fazla zaman geçirmesini sağlayabilirsiniz. Peki, iyi içerik nasıl hazırlanabilir? Bunun ilk adımlarından biri, görselliktir. Görsel yazılar her zaman daha ilgi çekici olmuştur. Yazılarınızı resim, video ve infogarikler ile süslemek sizi bir adım öne taşıyacaktır. Argo kelimeler kullanmamaya dikkat etmelisiniz. Konu içerisinde bağlantılar vererek yönlendirmeler yapmanız yine artı kazandıracaktır. Dil bilgisine gerektiği kadar dikkat etmelisiniz ancak samimi bir dil oluşturmalısınız.

Genel olarak, güvenilir olmanız çok önemlidir. Blogunuzdaki yazı sayısını arttırmak için diğer bloglardan kopyala-yapıştır yapmanız etik bir davranış olmayacaktır. Bu blogunuz için büyük bir negatiflik oluşturur. Birebir kopyalamak yerine okuyup öğrendiğiniz bilgileri kendi cümleleriniz ile aktarabilirsiniz. Yine kaynak belirterek alıntılar yapabilirsiniz. Laf kalabalığı yapmayın! Yazılarınızı araştırmalar ve istatistiklerle desteklemeniz çok önemlidir. Kanıt her zaman iyidir. :)

İyi bir blog yazarı olmak için iyi bir okuyucuda olmak ilk şarttır.

Klavyenize kuvvet :)

Kaynak:

7 Nisan 2014 Pazartesi

Yazılım Paradigması

Merhaba,

Yeni bir yazı dizisinin hatta iki yazı dizisinin haberi ile yazma sürecine başlıyorum. Bir yandan C, diğer bir yandan da C# ile Nesne yönelimli programla yazılarımı paylaşacağım.

Bu yazımda yazılımı ve yazılım paradigmalarını ele alacağım. Biraz geç oldu sanırım ama kısmet bugüneymiş.

Yazılım (ya da program) elektronik cihazların çeşitli görevleri yerine getirebilmesi ve kendi aralarında haberleşmelerini sağlamaları için hazırlanmış (cihazların kullanımlarını geliştiren) makine komutlarıdır. Programlama, yaşadığımız gerçek dünyadaki problemlere ilişkin çözümlerin bilgisayarda ifade edilmesidir.

Yazılım Paradigması

Paradigma, bir bilim dalında zihinsel bir resmin, gerçekliğin algılanması, kavramsallaştırılmasını sağlayan modele denir. Programlama paradigmaları program yapma stili veya yoludur. Bazı diller bu işi kolaylaştırırken bazıları zorlaştırır. Programlama paradigması, programlama dilinin nasıl kullanılacağına dair mantıksal bir yaklaşımdır.

Emirsel Programlama Paradigması (Imperative)

Bir durum üzerine programlama ve durumu değiştiren komutlar üzerine kurulu bir paradigmadır. Emirsel ya da zorunlu programlar, bilgisayarın gerçekleştireceği sıralı komutları ifade eder. Hesaplamanın “nasıl?” yapılacağı önemlidir. Bilgisayarın donanımına en uygun olan paradigmadır.Tüm bilgisayarın donanımı makine koduna uygundur. Makine kodları zorunlu programlama paradigmasını temel alır.

Emirsel (zorunlu) paradigmayı kullanan dillerden bazıları: C, Pascal vb.

Nesne Yönelimli Programlama Paradigması

Her programın etkileşim içerisinde bulunduğu birimler ve nesneler kümesinden oluştuğunu varsayan bir paradigmadır. 1960lı yıllarda donanım ve yazılımın karmaşıklaşmasıyla, yazılım kalitesinin korunabilmesi ve yeniden kullanılabilirliği artırmak için oluşturulmuştur. Bu paradigmanın temeli eylemler ve bu eylemlerin mantığından çok nesneler ve verilerdir. Nesneler metodlar (methods) ve nitelikler’den (attributes) oluşur. Nitelikler, nesnelerin sahip oldukları verilere, metodlar ise bunlar üzerinde yapılabilecek işlemlere karşılık gelir. Nesne, kendisini işleyecek kod kesimini kendisi ile birlikte tanımlayan ve taşıyan ve kendi tanımladığı biçimden daha farklı amaçlarla kullanılamayan veri türü olarak yorumlanabilir.

Nesne yönelimli paradigmayı kullanan dillerden bazıları: C++, C#, Java vb.

Kaynaklar

13 Ocak 2014 Pazartesi

Pascal Programlama - 7

Bu yazımda Pascal Programlamada alt programlar konusunu inceleyeceğiz.

Alt programlar, isimlerinden anlaşılacağı gibi programlar içinde yer alan ve belli bir görevi bulunan kod bloklarıdır. Alt programları prosedürler ve fonksiyonlar olmak üzere iki farklı şekilde göreceğiz. Bu kavramlara metot da denmektedir.

Alt programlar kullanımı ile, karmaşık kodlamalar ve kod tekrarlamaları giderilir. Bu sayede daha okunabilir programlar ortaya çıkar ve hata ayıklama kolaylaşır.

Prosedürler:

Program içinde çok kez kullanılacak bir işlem için bir kez yazılıp, programın devamında istenildiği kadar kullanılabilir.

Geriye değer döndürmez ancak kendilerine gönderilen parametrelerin değerlerini değiştirebilirler.

Prosedürlere gönderdiğimiz parametrelerin ana programdaki değerlerinin değişmesini istemiyorsak değer ile çağırma (call by value), değişmesini istiyorsak referans ile çağırma (call by reference) yapılmalıdır.

Aşağıda prosedür tanımlama örneği verilmiştir.

procedure isim(parametre:veritipi);
var ...;
begin
    ...
end;

Fonksiyonlar:

Fonksiyonlar prosedürlerden farklı olarak çağrıldıkları programa bir değer döndürürler. Fonksiyon tanımlanırken geriye döndüreceği değerin tipi belirtilmelidir.

Aşağıda fonksiyon tanımlama örneği verilmiştir.

function isim(Parametre:veritipi):veritipi;
var ...;
begin
    ...
    isim:değer;
    ...
end;

Şimdi örneklerimizi inleyelim.

uses crt;
var 
    sayi,i,top:integer;
procedure fakto(sayi:integer);
begin
    top:=1;
    for i:=1 to sayi do
         begin
            top:=top*i;
         end;
    writeln(sayi,' sayisinin faktorüyeli:',top);
end;
begin
    clrscr;
    writeln('bir sayi girin');
    readln(sayi);
    fakto(sayi);
    readln;
end.

Bu örnekte, prosedür kullanılarak girilen sayının faktöriyeli hesaplanmıştır.

uses crt;
function f(n:real):real;
begin
    if n<2 then
        f:=n
    else 
        f:=f(n-2)+f(n-1);
end;
var
    n:real;
begin
    clrscr;
    repeat
        readln(n);
    until (n=trunc(n)) and (n>=0);
    
    writeln(n:0:0,'.fibonacci sayisi:',f(n):0:0);
    readln;
end.

Bu örnekte de, fonksiyon kullanılarak istenilen sıradaki fibonacci sayısı bulunmaktadır.


11 Ocak 2014 Cumartesi

Pascal Programlama - 6

Merhaba,

Bu yazımda Pascal programlamada dizi (array) konusu inceleyeceğiz.

Programlamada dizi kavramı çok önemlidir. Daha kapsamlı işlemler yapmanın ilk adımlarından biri de dizi kullanımıdır.

Dizi, aynı tipten birçok verinin bir araya geldiği bir yapıdır. Basit bir veri yapısı örneğidir. Dizi kullanımı sayesinde programımızın performansını artırırız.


Diziler bir ya da daha fazla boyutta tanımlanabilir. İki boyutlu dizilere matris adı verilmektedir.

var
    dizi ismi:array[ilk değer..son değer] of veri tipi
begin

end.

Dizi tanımla yukarıda görüldüğü gibi yapılmaktadır.

            A:array[1..5] of integer;
            B:array[1.99] of string;

Bu tanımla ve örnekler tek boyutlu diziler için geçerlidir. Şimdi iki boyutlu dizilerin (matris)  nasıl tanımlandığını görelim.


var
    dizi ismi:array[ilk değer..son değer, ilk değer..son değer] of veri tipi
begin

end.

A:array[1..3,1..4] of integer;
B:array[1..38,1..40] of string;

İki boyutlu da görüldüğü virgül ile ayrılarak boyut sayısı arttırılabilir. Boyut sayısı programınızın ihtiyacına göre ve bilgisayarınızın bellek büyüklüğüne göre değişkenlik gösterebilir.

Şimdi ilk örneğimizi yapma vakti geldi.


uses crt;
var
    A:array[1..5] of integer;
    i,j,hafiza:integer;
begin
    clrscr;
    write('Sayilari Girin:');
    for i:=1 to 5 do
        read(A[i]);
    for i:=1 to 4 do
      for j:=i+1 to 5 do
         if A[i]<A[j] then
            begin
               hafiza:=A[i];
               A[i]:=A[j];
               A[j]:=hafiza;
             end;
    readln;
    writeln('Azalan Siralama');
    for i:=1 to 5 do
        write(A[i],' ');
    readln;
end.

Yukarıdaki örnekte girilen 5 sayı sıralayan program döngü ve dizi kullanarak yazılmıştır. Daha önceki yazımda if-else yapısını incelerken girilen 3 sayıyı sıralan program örneği vermiştik. If-else kullanımı ile 3 sayıyı sıralarken çok karmaşık bir program ortaya çıktı. Bu nedenle girilen sayı arttıkça programımız daha karmaşık hale gelecektir. Dizi ve döngü kullanımı ile sadece sayı değerlerini değiştirerek çok sayıda girilen sayıları sıralayabiliriz.

for i:=1 to 5 do
read(A[i]);

Yukarıdaki kodlar girilen sayıları 5 elemanlı diziye sırasıyla atar. Daha sonraki iki for döngüsü en büyük değeri bulup A[1] dizi elemanına yazar ve bu şekilde devam eder. Kodun kafanızda şekillenmesi için işlemleri adım adım kağıt üzerinde yapmanızı tavsiye ederim.

Şimdi de diğer örneğimize geçelim.

uses crt;
var
    A        :array[1..2,1..2] of integer;
    B        :array[1..2,1..3] of integer;
    C        :array[1..2,1..3] of integer;
    i,j,z    :integer;
begin
    clrscr;
    write('Birinci dizinin elemanlarini girin:');
    for i:=1 to 2 do
        for j:=1 to 2 do
            read(A[i,j]);
            
    write('Ikinci dizinin elemanlarini girin:');
    for j:=1 to 2 do
        for z:=1 to 3 do
            read(B[j,z]);
    
    writeln('Birinci Dizi:');
    for i:=1 to 2 do
        begin
            for j:=1 to 2 do
                begin
                    write(A[i,j],' ');
                end;
            writeln;
        end;
    writeln('Ikinci Dizi:');
    
    for j:=1 to 2 do
        begin
            for z:=1 to 3 do
                begin
                    write(B[j,z],' ');
                end;
            writeln;
        end;
    
    for i:=1 to 2 do
        begin
            for j:=1 to 2 do
                begin
                    for z:=1 to 3 do
                        begin
                            C[i,z]:=C[i,z]+(A[i,j]*B[j,z]);
                        end;
                end;
        end;
    
    writeln('CARPIM!');
    
    for i:=1 to 2 do
        begin
            for z:=1 to 3 do
                begin
                    write(C[i,j],' ');
                end;
            writeln;
        end;
    readln;
    readln;
end.

Yukarıdaki örnekte iki boyutlu diziler kullanılarak matrisler de çarpma işleminin programı yazılmıştır. Eğer matrisler de çarpma işleminin nasıl yapıldığını bilmiyorsanız öncelikle bunu öğrenmeniz gerekmektedir. Ardından kodu inceleyebilirsiniz.

İlk örneğimizde olduğu gibi mantık aynıdır. A(2x2) ve B(2x3) matrisleri için kullanıcıdan değerler girilmesi istenip ardında da oluşan matrisler ekrana yazılmıştır. Ekrana yazdırma işleminin ardından çarpma işlemi yapılmaktadır. Bu kısımda bildiğimiz matris çarpma işlemi for döngüsü ile adım adım yapılmıştır. Yine, Kodun kafanızda şekillenmesi için işlemleri adım adım kağıt üzerinde yapmanızı tavsiye ederim.